diff --git a/apps/FrontendDesigner/src/main.js b/apps/FrontendDesigner/src/main.js index 6f3ce7a..fa9095c 100644 --- a/apps/FrontendDesigner/src/main.js +++ b/apps/FrontendDesigner/src/main.js @@ -5,16 +5,16 @@ import { useAuthStore } from './stores/index.js' import App from './App.vue' // 导入样式 -import 'element-plus/dist/index.css' import 'element-plus/theme-chalk/dark/css-vars.css' import './assets/styles/global.css' import './assets/styles/responsive.css' import './assets/styles/themes.css' import dtUI from '@deotaland/ui' import '@deotaland/ui/style.css' +import 'element-plus/dist/index.css' // 导入Element Plus图标 import * as ElementPlusIconsVue from '@element-plus/icons-vue' - +import ElementPlus from 'element-plus' // 导入i18n配置 import i18n from './locales/i18n' // 创建应用实例 @@ -26,6 +26,7 @@ window.setElMessage = (options={})=>{ // 配置 Pinia const pinia = createPinia() app.use(pinia) +// app.use(ElementPlus) // 配置国际化 app.use(i18n) // 注册所有Element Plus图标 diff --git a/apps/FrontendDesigner/src/router/index.js b/apps/FrontendDesigner/src/router/index.js index 98e70f6..33a0f40 100644 --- a/apps/FrontendDesigner/src/router/index.js +++ b/apps/FrontendDesigner/src/router/index.js @@ -1,11 +1,10 @@ import { createRouter, createWebHistory,createWebHashHistory } from 'vue-router' import i18n from '@/locales/i18n' import { watch } from 'vue' -import About from '@/views/About.vue' -import NotFound from '@/views/NotFound.vue' -import AdminLogin from '@/views/AdminLogin/AdminLogin.vue' - // 管理员布局组件(懒加载) +const About = ()=>import('@/views/About.vue') +const NotFound = ()=>import('@/views/NotFound.vue') +const AdminLogin = ()=>import('@/views/AdminLogin/AdminLogin.vue') const AdminLayout = () => import('@/components/admin/AdminLayout.vue') const AdminDashboard = () => import('@/views/admin/AdminDashboard.vue') const AdminContent = () => import('@/views/admin/AdminContent.vue') @@ -70,7 +69,17 @@ export const permissionRoutes = [ requiresAuth: true, }, }, - + { + path: 'disassembly-orders', + name: 'AdminDisassemblyOrders', + component: AdminDisassemblyOrders, + meta: { + title: 'admin.layout.disassemblyOrders', + icon: 'EditPen', + menuOrder: 2, + requiresAuth: true, + } + }, { path: 'order-list', name: 'AdminOrdersList', @@ -225,17 +234,7 @@ const routes = [ requiresAuth: true }, children: [ - { - path: 'disassembly-orders', - name: 'AdminDisassemblyOrders', - component: AdminDisassemblyOrders, - meta: { - title: 'admin.layout.disassemblyOrders', - icon: 'EditPen', - menuOrder: 2, - requiresAuth: true, - } - }, + { path: 'disassembly-orders/:id', name: 'AdminDisassemblyDetail', diff --git a/apps/FrontendDesigner/src/views/admin/AdminContentReview.vue b/apps/FrontendDesigner/src/views/admin/AdminContentReview.vue index 119b588..5fe24e6 100644 --- a/apps/FrontendDesigner/src/views/admin/AdminContentReview.vue +++ b/apps/FrontendDesigner/src/views/admin/AdminContentReview.vue @@ -113,9 +113,9 @@ @@ -169,8 +181,19 @@ import OrderProcessModal from '../../components/OrderProcessModal/index.vue'; import PurchaseModal from '../../components/PurchaseModal/index.vue'; import {Project} from './index'; import {ModernHome} from '../ModernHome/index.js' -import { useI18n } from 'vue-i18n' +import { useI18n } from 'vue-i18n'; +import {ElTour,ElTourStep} from 'element-plus'; +import Tour1 from '../../components/tours/tour1.vue'; +import Tour2 from '../../components/tours/tour2.vue'; +import Tour3 from '../../components/tours/tour3.vue'; +import Tour4 from '../../components/tours/tour4.vue'; +import Tour5 from '../../components/tours/tour5.vue'; const { locale } = useI18n() +const headerRef = ref(null); +const iPandCardLeftRef = ref(null); +const tourJson = ref({ + tour1:'' +}) const fileServer = new FileServer(); const modernHome = new ModernHome(); const router = useRouter(); @@ -183,6 +206,8 @@ const importUrl = ref('https://xiaozhi.me/console/agents'); const showGuideModal = ref(false); const canvasEditorVisible = ref(false);//画布编辑弹窗是否可见 const canvasEditorImageUrl = ref('');//画布编辑弹窗图片url +//引导弹窗 +const openShow = ref(false); // 图片预览弹窗相关状态 const showImagePreview = ref(false); const previewImages = ref([]); @@ -214,6 +239,20 @@ const downloadImage = async (url) => { console.error('下载图片失败:', error); } } +//赋值相关的引导元素锚点 +const setTourJson = ()=>{ + const tourFlag = window.localStorage.getItem('tourFlag'); + if(tourFlag){ + return; + } + tourJson.value.tour1 = headerRef?.value?.RechargeRef; + tourJson.value.tour2 = iPandCardLeftRef?.value?.ipTypeSectionRef; + tourJson.value.tour3 = iPandCardLeftRef?.value?.textPromptSectionRef; + tourJson.value.tour4 = iPandCardLeftRef?.value?.referenceImageSectionRef; + tourJson.value.tour5 = iPandCardLeftRef?.value?.generateButtonRef; + openShow.value = true; + window.localStorage.setItem('tourFlag','1'); +} const handlePartialEdit = (imageUrl, index) => { canvasEditorImageUrl.value = imageUrl; canvasEditorVisible.value = true; @@ -238,11 +277,15 @@ const cards = ref([ ]); //判断引导弹窗的弹出逻辑,需要每日弹出一次 const showGuideModalLogic = ()=>{ - const lastShowDate = localStorage.getItem('lastShowGuideModalDate'); - const currentDate = new Date().toDateString(); - if (!lastShowDate || lastShowDate !== currentDate) { - showGuideModal.value = true; - } + // const tourFlag = window.localStorage.getItem('tourFlag'); + // if(!tourFlag){ + // return; + // } + // const lastShowDate = localStorage.getItem('lastShowGuideModalDate'); + // const currentDate = new Date().toDateString(); + // if (!lastShowDate || lastShowDate !== currentDate) { + // showGuideModal.value = true; + // } } const getMaxZIndexNum = ref(0); //获取最大z-index+1 @@ -1073,6 +1116,9 @@ onMounted(() => { // showGuideModal.value = true; init(); getCombinedPrompt(); + setTimeout(()=>{ + setTourJson(); + },200) // 使用优化的被动事件监听器 const removeWheelListener = addPassiveEventListener(document, 'wheel', preventZoom); const removeTouchStartListener = addPassiveEventListener(document, 'touchstart', preventPinchZoom); @@ -1613,4 +1659,5 @@ p { height: 18px !important; } } + diff --git a/apps/frontend/src/views/Register.vue b/apps/frontend/src/views/Register.vue index e1e838b..bf21b15 100644 --- a/apps/frontend/src/views/Register.vue +++ b/apps/frontend/src/views/Register.vue @@ -89,11 +89,8 @@ const handleRegisterError = (error) => { // 跳转到登录页 const goToLogin = () => { - router.push('/login') + router.back() } - - - // 页面挂载时初始化认证状态 onMounted(() => { diff --git a/apps/frontend/src/views/user/index.js b/apps/frontend/src/views/user/index.js index f280cb8..661053a 100644 --- a/apps/frontend/src/views/user/index.js +++ b/apps/frontend/src/views/user/index.js @@ -90,4 +90,12 @@ export class UserController { } return await requestUtils.common(clientApi.default.UPGRADE,parmas); } + // 修改用户信息 + async updateProfile(data) { + let parmas = { + nickname:data.nickname, + avatarUrl:data.avatarUrl, + } + return await requestUtils.common(clientApi.default.USER_PROFILE,parmas); + } } \ No newline at end of file diff --git a/apps/frontend/src/views/user/index.vue b/apps/frontend/src/views/user/index.vue index ed3de64..e0ea582 100644 --- a/apps/frontend/src/views/user/index.vue +++ b/apps/frontend/src/views/user/index.vue @@ -282,11 +282,13 @@ import { ElMessage } from 'element-plus' import { useAuthStore } from '@/stores/auth' import { UserController } from './index.js' import {ModernHome} from '../ModernHome/index.js' +import { FileServer } from '@deotaland/utils' const router = useRouter() const modernHome = new ModernHome() const { t } = useI18n() const authStore = useAuthStore() const userController = new UserController() +const filePlug = new FileServer() // 响应式用户数据 const userData = ref({ @@ -365,7 +367,7 @@ const triggerAvatarUpload = () => { } // 处理头像上传 -const handleAvatarUpload = (event) => { +const handleAvatarUpload = async (event) => { const file = event.target.files?.[0] if (!file) return @@ -381,13 +383,36 @@ const handleAvatarUpload = (event) => { return } - // 读取文件并显示预览 - const reader = new FileReader() - reader.onload = (e) => { - userData.value.avatar = e.target.result - ElMessage.success('头像上传成功') + try { + // 先上传文件获取 URL + const imgUrl = await filePlug.uploadFile(file) + + // 读取文件并显示预览 + const reader = new FileReader() + reader.onload = (e) => { + userData.value.avatar = e.target.result + } + reader.readAsDataURL(file) + + // 调用 updateProfile API 更新头像 + const response = await userController.updateProfile({ + avatarUrl: imgUrl, + nickname: userData.value.nickname + }) + + if (response.success) { + ElMessage.success('头像更新成功') + // 更新 authStore 中的用户信息 + if (authStore.user) { + authStore.user.avatarUrl = imgUrl + } + } else { + ElMessage.error(response.message || '头像更新失败') + } + } catch (error) { + console.error('头像上传失败:', error) + ElMessage.error('头像上传失败,请重试') } - reader.readAsDataURL(file) // 清空输入,允许重新选择同一文件 event.target.value = '' @@ -410,10 +435,28 @@ const toggleEditName = () => { } // 保存昵称 -const saveNickname = () => { +const saveNickname = async () => { if (editNameValue.value.trim()) { - userData.value.nickname = editNameValue.value.trim() - ElMessage.success('昵称更新成功') + try { + // 调用 updateProfile API 更新昵称 + const response = await userController.updateProfile({ + nickname: editNameValue.value.trim(), + avatarUrl: userData.value.avatar + }) + if (response.success) { + userData.value.nickname = editNameValue.value.trim() + // 更新 authStore 中的用户信息 + if (authStore.user) { + authStore.user.nickname = editNameValue.value.trim() + } + ElMessage.success('昵称更新成功') + } else { + ElMessage.error(response.message || '昵称更新失败') + } + } catch (error) { + console.error('昵称更新失败:', error) + ElMessage.error('昵称更新失败,请重试') + } } else { ElMessage.warning('昵称不能为空') } diff --git a/apps/frontend/vite.config.js b/apps/frontend/vite.config.js index 915cfba..809d0cd 100644 --- a/apps/frontend/vite.config.js +++ b/apps/frontend/vite.config.js @@ -66,8 +66,8 @@ export default defineConfig({ // 配置代理解决CORS问题 proxy: { '/api': { - // target: 'https://api.deotaland.ai', - target: 'http://api.deotaland.local', + target: 'https://api.deotaland.ai', + // target: 'http://api.deotaland.local', changeOrigin: true, rewrite: (path) => path.replace(/^\/api/, '') } diff --git a/packages/ui/src/components/CanvasEditor/CanvasEditor.vue b/packages/ui/src/components/CanvasEditor/CanvasEditor.vue index 584c3c1..61dcaac 100644 --- a/packages/ui/src/components/CanvasEditor/CanvasEditor.vue +++ b/packages/ui/src/components/CanvasEditor/CanvasEditor.vue @@ -103,7 +103,7 @@