generated from duanshuwen/webapp-vue-frontend
feat: 接口调试
This commit is contained in:
16
src/api/AigcCreateGeneratorPhotoTaskApi.ts
Normal file
16
src/api/AigcCreateGeneratorPhotoTaskApi.ts
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
/* eslint-disable */
|
||||||
|
// @ts-ignore
|
||||||
|
import request from '@common/ajax';
|
||||||
|
import type { Response } from './types';
|
||||||
|
|
||||||
|
export interface CreateGeneratorPhotoTaskRequest {
|
||||||
|
photoUrlList: string[];
|
||||||
|
}
|
||||||
|
|
||||||
|
export const createGeneratorPhotoTask = (params: CreateGeneratorPhotoTaskRequest) => {
|
||||||
|
return request<Response<boolean>>({
|
||||||
|
url: '/aigc/createGeneratorPhotoTask',
|
||||||
|
method: 'post',
|
||||||
|
params,
|
||||||
|
});
|
||||||
|
};
|
||||||
44
src/api/UploadFile.ts
Normal file
44
src/api/UploadFile.ts
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
import request from "@/common/ajax";
|
||||||
|
import { getAccessToken } from "@/constant/token";
|
||||||
|
// @ts-ignore
|
||||||
|
const { VITE_BASE_API, VITE_ENV } = import.meta.env
|
||||||
|
|
||||||
|
async function toFileObject(input: string | File | Blob): Promise<File> {
|
||||||
|
if (input instanceof File) return input;
|
||||||
|
if (input instanceof Blob) return new File([input], "file.jpg", { type: input.type || "image/jpeg" });
|
||||||
|
|
||||||
|
const res = await fetch(input);
|
||||||
|
const blob = await res.blob();
|
||||||
|
try {
|
||||||
|
const urlObj = new URL(input);
|
||||||
|
const segments = urlObj.pathname.split("/");
|
||||||
|
const name = segments.pop() || "file.jpg";
|
||||||
|
return new File([blob], name, { type: blob.type || "image/jpeg" });
|
||||||
|
} catch (e) {
|
||||||
|
return new File([blob], "file.jpg", { type: blob.type || "image/jpeg" });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export const updateImageFile = async (file: string | File | Blob) => {
|
||||||
|
const baseUrl = VITE_ENV === 'development' ? '/ingress/agent' : VITE_BASE_API
|
||||||
|
const url = baseUrl + "/hotBizCommon/upload";
|
||||||
|
const token = getAccessToken();
|
||||||
|
|
||||||
|
try {
|
||||||
|
const fileObj = await toFileObject(file);
|
||||||
|
const form = new FormData();
|
||||||
|
form.append("file", fileObj);
|
||||||
|
|
||||||
|
const resp = await request.post(url, form, {
|
||||||
|
headers: {
|
||||||
|
"Content-Type": "multipart/form-data",
|
||||||
|
Authorization: `Bearer ${token}`,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
return resp;
|
||||||
|
} catch (err) {
|
||||||
|
console.error("上传图片失败:", err);
|
||||||
|
throw err;
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -3,4 +3,6 @@
|
|||||||
export * from './types';
|
export * from './types';
|
||||||
|
|
||||||
export * from './AigcSceneListApi';
|
export * from './AigcSceneListApi';
|
||||||
export * from './AigcGeneratorPhotoTaskListApi';
|
export * from './AigcGeneratorPhotoTaskListApi';
|
||||||
|
export * from './AigcCreateGeneratorPhotoTaskApi';
|
||||||
|
export * from './UploadFile';
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import axios from 'axios'
|
import axios from 'axios'
|
||||||
import { tansParams } from '@utils/tansParams'
|
import { tansParams } from '@utils/tansParams'
|
||||||
import { Session } from '@utils/storage'
|
import { getAccessToken } from '@/constant/token'
|
||||||
|
|
||||||
// 获取.env中的服务地址
|
// 获取.env中的服务地址
|
||||||
const { VITE_BASE_API, VITE_ENV } = import.meta.env
|
const { VITE_BASE_API, VITE_ENV } = import.meta.env
|
||||||
@@ -18,8 +18,7 @@ const instance = axios.create({
|
|||||||
|
|
||||||
// 添加拦截器
|
// 添加拦截器
|
||||||
instance.interceptors.request.use((config) => {
|
instance.interceptors.request.use((config) => {
|
||||||
// const token = Session.getToken()
|
const token = getAccessToken();
|
||||||
const token = 'H7rzcCtsvPqwc0ecDnBT9mlhOqHsWDyS6nXkRjnd1oAgOQqlEhsCy4OZPQ8YyVBj57pmNpwSXJYcd6Ox4YB-W1pHr4aTM9_d6nYJ3OrbRB9f0J7kP9FbbviN609nGO0m'
|
|
||||||
config.headers['Authorization'] = `Bearer ${token}`
|
config.headers['Authorization'] = `Bearer ${token}`
|
||||||
|
|
||||||
// get请求映射params参数
|
// get请求映射params参数
|
||||||
|
|||||||
7
src/constant/token.ts
Normal file
7
src/constant/token.ts
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
import { Session } from '@/utils/storage'
|
||||||
|
|
||||||
|
export const getAccessToken = () => {
|
||||||
|
const token = Session.getToken()
|
||||||
|
// const token = 'H7rzcCtsvPqwc0ecDnBT9mlhOqHsWDyS6nXkRjnd1oAgOQqlEhsCy4OZPQ8YyVBj57pmNpwSXJYcd6Ox4YB-W1pHr4aTM9_d6nYJ3OrbRB9f0J7kP9FbbviN609nGO0m'
|
||||||
|
return token;
|
||||||
|
}
|
||||||
@@ -68,6 +68,7 @@ import { useRouter } from 'vue-router';
|
|||||||
import TopNavBar from '../components/TopNavBar.vue';
|
import TopNavBar from '../components/TopNavBar.vue';
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
import { generatorPhotoTaskList } from '@api';
|
import { generatorPhotoTaskList } from '@api';
|
||||||
|
import { closeToast, showLoadingToast } from 'vant';
|
||||||
|
|
||||||
interface TaskItem {
|
interface TaskItem {
|
||||||
name: string
|
name: string
|
||||||
@@ -92,7 +93,9 @@ const lookPicture = (item: TaskItem) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const getTaskList = () => {
|
const getTaskList = () => {
|
||||||
|
showLoadingToast('加载中...');
|
||||||
generatorPhotoTaskList({ pageNum: 1, pageSize: 20 }).then(res => {
|
generatorPhotoTaskList({ pageNum: 1, pageSize: 20 }).then(res => {
|
||||||
|
closeToast(); // 关闭加载提示
|
||||||
if (res.code === 0) {
|
if (res.code === 0) {
|
||||||
const data = res.data || [];
|
const data = res.data || [];
|
||||||
list.splice(0, list.length, ...data.map(item => {
|
list.splice(0, list.length, ...data.map(item => {
|
||||||
|
|||||||
@@ -58,6 +58,9 @@ import PhotoGuide from '../components/PhotoGuide.vue';
|
|||||||
import AgreementTip from '../components/AgreementTip.vue';
|
import AgreementTip from '../components/AgreementTip.vue';
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
import { getAigcSceneList, AigcSceneListItem, AigcSceneStyleItem } from '@api';
|
import { getAigcSceneList, AigcSceneListItem, AigcSceneStyleItem } from '@api';
|
||||||
|
// @ts-ignore
|
||||||
|
import { createGeneratorPhotoTask, updateImageFile } from '@api';
|
||||||
|
import { showFailToast, showSuccessToast } from 'vant';
|
||||||
|
|
||||||
// --- 测试数据 ---
|
// --- 测试数据 ---
|
||||||
const styles = [
|
const styles = [
|
||||||
@@ -107,7 +110,48 @@ const onStartSelect = () => {
|
|||||||
console.log("用户已阅读说明,开始打开相册逻辑...");
|
console.log("用户已阅读说明,开始打开相册逻辑...");
|
||||||
showGuide.value = false;
|
showGuide.value = false;
|
||||||
// 这里写调用系统相册的代码
|
// 这里写调用系统相册的代码
|
||||||
router.push('/generate');
|
uploadImage();
|
||||||
|
};
|
||||||
|
|
||||||
|
// 调用上传
|
||||||
|
const uploadImage = () => {
|
||||||
|
wx.miniProgram.postMessage({
|
||||||
|
data: { action: 'chooseAndUpload' }
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// 监听 hash 变化,获取结果
|
||||||
|
window.addEventListener('hashchange', function() {
|
||||||
|
const hash = window.location.hash;
|
||||||
|
if (hash.startsWith('#uploadResult=')) {
|
||||||
|
const imageUrl = decodeURIComponent(hash.substring('#uploadResult='.length));
|
||||||
|
console.log('上传成功,图片地址:', imageUrl);
|
||||||
|
// 这里就可以使用 imageUrl 了,比如赋值给某个变量或调用业务逻辑
|
||||||
|
if (!imageUrl || imageUrl === 'error') {
|
||||||
|
showFailToast('获取图片地址失败,请重试。');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
sendGeneratorPhotoTask(imageUrl);
|
||||||
|
// 可选:清除 hash,避免重复触发
|
||||||
|
history.replaceState(null, null, window.location.pathname + window.location.search);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
/// 发送生成任务
|
||||||
|
const sendGeneratorPhotoTask = async (photoUrl: string) => {
|
||||||
|
const photoUrlList = [photoUrl];
|
||||||
|
try {
|
||||||
|
const response = await createGeneratorPhotoTask({ photoUrlList: photoUrlList });
|
||||||
|
if (response) {
|
||||||
|
showSuccessToast('生成任务创建成功!');
|
||||||
|
router.push('/generate');
|
||||||
|
} else {
|
||||||
|
showFailToast('生成任务创建失败,请重试。');
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
console.error('创建生成任务时发生错误:', error);
|
||||||
|
showFailToast('创建生成任务时发生错误,请稍后再试。');
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -38,6 +38,7 @@ import TopNavBar from '../components/TopNavBar.vue';
|
|||||||
import VueEasyLightbox from 'vue-easy-lightbox';
|
import VueEasyLightbox from 'vue-easy-lightbox';
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
import 'vue-easy-lightbox/dist/external-css/vue-easy-lightbox.css'; // 导入其 CSS
|
import 'vue-easy-lightbox/dist/external-css/vue-easy-lightbox.css'; // 导入其 CSS
|
||||||
|
import { showToast } from 'vant';
|
||||||
|
|
||||||
const disclaimerText = ref('脑洞特效由 AI 随机生成,如未达预期敬请谅解。')
|
const disclaimerText = ref('脑洞特效由 AI 随机生成,如未达预期敬请谅解。')
|
||||||
|
|
||||||
@@ -69,8 +70,22 @@ const handleHide = () => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const handleSave = () => {
|
const handleSave = () => {
|
||||||
console.log('保存图片:', sceneData.value ? (sceneData.value.title || sceneData.value.name) : '');
|
saveImage();
|
||||||
alert('图片已保存至相册 (示例)');
|
};
|
||||||
|
|
||||||
|
const saveImage = () => {
|
||||||
|
if (!imageUrl.value) {
|
||||||
|
showToast('图片地址无效,无法保存');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 发送消息给小程序
|
||||||
|
wx.miniProgram.postMessage({
|
||||||
|
data: {
|
||||||
|
action: 'saveImage',
|
||||||
|
imageUrl: imageUrl
|
||||||
|
}
|
||||||
|
});
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user