diff --git a/CHANGELOG b/CHANGELOG index b980844..74ac3b7 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,5 +1,6 @@ # CHANGELOG +- [2026-09-20 23:15] FEAT: v1.1 Element Plus 组件全面升级——①布局: 面包屑+用户头像下拉+公告气泡(el-badge/popover+点击外部关闭)+菜单滚动条+路由切换动效; ②工作台: el-statistic 彩色统计卡+el-skeleton 骨架屏+公告 el-carousel+快捷入口网格; ③订单: 日期范围筛选(el-date-picker daterange)+列排序+详情抽屉 el-descriptions+el-tabs(图纸/进度/日志)+el-timeline 操作日志; ④样板库: el-tree-select 分类树+el-image 大图预览+el-badge 引用徽标; ⑤客户表单校验规则; ⑥优化下料利用率 dashboard 进度环+明细 descriptions; ⑦商城去支付改功能总览(前轮); 全接口回归 13/13+SPA 路由通过 (Files: frontend/src/views/*, frontend/src/App.vue) - [2026-09-20 22:30] FEAT: v1.0 AI炫图上线+业务做实+按需裁剪+主题精致化。①AI炫图工作台(/ai_render): 自研程序化场景合成引擎(风格×时间×场景, 家具/绿植/光束/暗角, seed构图微差), 阶段化生成动画+四方案画廊+PNG下载, 渲染引擎抽为共享模块 variantRenderer; ②业务做实: 报价接入产品价格本(use_price_book按材料类别均价), 注册支持邀请码且邀请返利真实计数(User.invited_by), 报价单转订单携带图纸; ③按需裁剪: 下线短信验证码登录/支付收银接口与相关界面, 商城改为功能总览; ④主题精致化: 品牌色设计变量+Element Plus主题覆盖+卡片/登录页/滚动条视觉升级; 全接口回归通过(移除项405确认) (Files: src/huamenchuang/api/platform.py, src/huamenchuang/api/quote.py, src/huamenchuang/api/auth.py, src/huamenchuang/models/user.py, frontend/src/components/AIRenderCanvas.vue, frontend/src/components/variantRenderer.ts, frontend/src/views/AIRenderView.vue, frontend/src/views/LoginView.vue, frontend/src/views/MarketView.vue, frontend/src/views/QuotationsView.vue, frontend/src/App.vue, doc/API.md) - [2026-09-20 21:00] FIX+FEAT: v0.9 样板数据完整性验证与解析加固——①双源确认样板库完整性: search接口254条 = 画图编辑器for_ht目录内嵌254条, 0遗漏; ②全量体检发现6套样板含7个畸形段(缺ps/pe)导致解析报错, 前后端重放/算料均加固过滤(0异常/1046窗格); ③新增报表统计模块(/chart: 近N天订单数金额按日+8项总量+状态分布, 自绘SVG柱图); ④样板库官方/我的样板双Tab(is_default过滤); ⑤使用指南接入帮助文章接口(种子8篇自撰文章); ⑥seed脚本分类树幂等修复; 全接口回归18/18通过 (Files: src/huamenchuang/core/drawing.py, src/huamenchuang/api/reports.py, src/huamenchuang/api/windoor.py, src/huamenchuang/scripts/*, frontend/src/types/drawing.ts, frontend/src/views/ReportView.vue, frontend/src/views/TemplatesView.vue, frontend/src/views/GuideView.vue) - [2026-09-20 20:10] FEAT: v0.8 平台扩展——3D展示/效果图渲染/打印中心/下料方案/设备模块/订单分享/验证码登录。①Three.js 3D窗型(重放区域挤出玻璃+型材盒体, 自研轨道控制);②Canvas场景合成效果图(墙面/玻璃渐变/投影, 三场景, 设置持久化到公司参数);③A4打印中心(订单模板+进度+签字栏, 打印CSS隔离);④合同级下料方案(汇总订单算料→FFD→参数持久化, 修正利用率为已排入/已用料);⑤设备激活绑定(序列号+激活码);⑥订单分享(HMAC可逆token+公开只读页);⑦mock短信验证码登录全流程可用(接签名后换provider);⑧帮助文章接口。新增12组API, 前端+6页面共18页 (Files: src/huamenchuang/api/platform.py, src/huamenchuang/models/extend.py, frontend/src/components/WindoorThreed.vue, frontend/src/components/RenderCanvas.vue, frontend/src/views/*, doc/API.md) diff --git a/frontend/src/views/CustomersView.vue b/frontend/src/views/CustomersView.vue index 60386fa..7e7cce8 100644 --- a/frontend/src/views/CustomersView.vue +++ b/frontend/src/views/CustomersView.vue @@ -24,9 +24,11 @@ :total="total" :page-size="page_size" v-model:current-page="page" @current-change="load" /> - - - + + + + + @@ -50,7 +52,12 @@ const page_size = 15 const keyword = ref('') const loading = ref(false) const editVisible = ref(false) +const formRef = ref() const form = reactive({ id: 0, name: '', phone: '', address: '', note: '' }) +const rules = { + name: [{ required: true, message: '请输入客户姓名', trigger: 'blur' }], + phone: [{ pattern: /^[0-9+\-\s]{5,20}$/, message: '电话格式不正确', trigger: 'blur' }], +} async function load() { loading.value = true @@ -67,6 +74,7 @@ function openEdit(row?: any) { } async function save() { + await formRef.value.validate() if (form.id) await api('put', `/api/customers/${form.id}`, form) else await api('post', '/api/customers', form) ElMessage.success('已保存') diff --git a/frontend/src/views/DashboardView.vue b/frontend/src/views/DashboardView.vue index 168fc14..c9f1f67 100644 --- a/frontend/src/views/DashboardView.vue +++ b/frontend/src/views/DashboardView.vue @@ -1,21 +1,65 @@ @@ -23,29 +67,53 @@ import { onMounted, ref } from 'vue' import { api } from '../api' +const loading = ref(true) +const announcements = ref([]) const cards = ref([ - { label: '订单总数', value: '-' }, - { label: '意向单', value: '-' }, - { label: '客户数', value: '-' }, - { label: '合同数', value: '-' }, + { label: '订单总数', value: 0, color: '#3f5f80', icon: 'Tickets' }, + { label: '意向单', value: 0, color: '#e6a23c', icon: 'Timer' }, + { label: '客户数', value: 0, color: '#67c23a', icon: 'User' }, + { label: '合同数', value: 0, color: '#5b3fd4', icon: 'Document' }, ]) +const quick = [ + { path: '/templates', label: '样板库', icon: 'Grid', color: '#3f5f80' }, + { path: '/orders', label: '新建订单', icon: 'Tickets', color: '#67c23a' }, + { path: '/ai_render', label: 'AI 炫图', icon: 'MagicStick', color: '#5b3fd4' }, + { path: '/optimize', label: '优化下料', icon: 'Scissor', color: '#e6a23c' }, + { path: '/printer', label: '打印', icon: 'Printer', color: '#909399' }, +] onMounted(async () => { - const [orders, customers, contracts] = await Promise.all([ - api('post', '/api/orders/search', { page: 1, page_size: 1 }), - api('get', '/api/customers?page=1&page_size=1'), - api('get', '/api/contracts?page=1&page_size=1'), - ]) - cards.value[0].value = orders.total ?? 0 - cards.value[2].value = customers.total ?? 0 - cards.value[3].value = contracts.contracts?.total ?? 0 - const intentions = await api('post', '/api/orders/search', { page: 1, page_size: 1, status: 0 }) - cards.value[1].value = intentions.total ?? 0 + try { + const [orders, intentions, customers, contracts, anns] = await Promise.all([ + api('post', '/api/orders/search', { page: 1, page_size: 1 }), + api('post', '/api/orders/search', { page: 1, page_size: 1, status: 0 }), + api('get', '/api/customers?page=1&page_size=1'), + api('get', '/api/contracts?page=1&page_size=1'), + api('get', '/api/announcements').catch(() => []), + ]) + cards.value[0].value = orders.total ?? 0 + cards.value[1].value = intentions.total ?? 0 + cards.value[2].value = customers.total ?? 0 + cards.value[3].value = contracts.contracts?.total ?? 0 + announcements.value = anns?.data?.slice(0, 4) ?? anns ?? [] + } finally { loading.value = false } }) diff --git a/frontend/src/views/LayoutView.vue b/frontend/src/views/LayoutView.vue index b4ffa6b..4a1e048 100644 --- a/frontend/src/views/LayoutView.vue +++ b/frontend/src/views/LayoutView.vue @@ -2,74 +2,128 @@ - - 工作台 - 报表统计 - 订单管理 - 阳光房 - 报价单 - 合同管理 - 客户管理 - 量尺管理 - 售后管理 - 样板库 - 产品管理 - 仓库库存 - 优化下料 - 下料方案 - 效果图渲染 - AI 炫图 - 3D 展示 - 打印中心 - 设备管理 - 商城 - 使用指南 - + + + 工作台 + 报表统计 + 订单管理 + 阳光房 + 报价单 + 合同管理 + 客户管理 + 量尺管理 + 售后管理 + 样板库 + 产品管理 + 仓库库存 + 优化下料 + 下料方案 + 效果图渲染 + AI 炫图 + 3D 展示 + 打印中心 + 设备管理 + 商城 + 使用指南 + +
- {{ route.meta.title }} + + 华门窗 + {{ route.meta.title }} +
- - {{ auth.nickname || '用户' }} - - +
+ + + + + + + + {{ (auth.nickname || '用')[0] }} + {{ auth.nickname || '用户' }} + + + + +
+ + + + + +
+ {{ a.name }} +

{{ a.desc }}

+
+
+
- + + + + + + +
diff --git a/frontend/src/views/OptimizeView.vue b/frontend/src/views/OptimizeView.vue index 0830a04..284e626 100644 --- a/frontend/src/views/OptimizeView.vue +++ b/frontend/src/views/OptimizeView.vue @@ -30,13 +30,23 @@ 开始优化