From b22431d3cba88693396de079ecbc64ccbdd96c03 Mon Sep 17 00:00:00 2001
From: chenjw28 <792430652@qq.com>
Date: Mon, 1 Jun 2026 10:44:08 +0800
Subject: [PATCH] x
---
frontend/vite.config.ts | 5 +++--
src/shared/database/database.py | 2 +-
...gnSystemView-C2MRk3c_.js => DesignSystemView-phUbagC9.js} | 2 +-
static/assets/{HomeView-xM0C8cNb.js => HomeView-LwI9XCn0.js} | 2 +-
.../{InventoryView-byfyrnF7.js => InventoryView-DgDx8sLe.js} | 2 +-
.../assets/{LoginView-CykA-lJR.js => LoginView-DpK1KsR0.js} | 2 +-
...ldInsightView-cEjZOM14.js => MoldInsightView-BG0m6f4M.js} | 2 +-
.../{ReleaseView-B2N9tGxj.js => ReleaseView-CCn0R8dT.js} | 2 +-
.../{ResultView-eWADo3Sp.js => ResultView-RD_BPQTj.js} | 2 +-
.../assets/{UsersView-C0d8jf17.js => UsersView-uF_CoXrs.js} | 2 +-
static/assets/{index-DkoUSxK0.js => index-B-OcU2wj.js} | 4 ++--
static/index.html | 4 ++--
12 files changed, 16 insertions(+), 15 deletions(-)
rename static/assets/{DesignSystemView-C2MRk3c_.js => DesignSystemView-phUbagC9.js} (78%)
rename static/assets/{HomeView-xM0C8cNb.js => HomeView-LwI9XCn0.js} (95%)
rename static/assets/{InventoryView-byfyrnF7.js => InventoryView-DgDx8sLe.js} (99%)
rename static/assets/{LoginView-CykA-lJR.js => LoginView-DpK1KsR0.js} (96%)
rename static/assets/{MoldInsightView-cEjZOM14.js => MoldInsightView-BG0m6f4M.js} (99%)
rename static/assets/{ReleaseView-B2N9tGxj.js => ReleaseView-CCn0R8dT.js} (79%)
rename static/assets/{ResultView-eWADo3Sp.js => ResultView-RD_BPQTj.js} (99%)
rename static/assets/{UsersView-C0d8jf17.js => UsersView-uF_CoXrs.js} (98%)
rename static/assets/{index-DkoUSxK0.js => index-B-OcU2wj.js} (97%)
diff --git a/frontend/vite.config.ts b/frontend/vite.config.ts
index 8b826f0..69b740c 100644
--- a/frontend/vite.config.ts
+++ b/frontend/vite.config.ts
@@ -2,13 +2,14 @@ import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import { resolve } from 'path'
-export default defineConfig({
+export default defineConfig(({ mode }) => ({
plugins: [vue()],
resolve: {
alias: {
'@': resolve(__dirname, 'src'),
},
},
+ base: mode === 'development' ? '/' : '/static/',
build: {
outDir: '../static',
emptyOutDir: true,
@@ -22,4 +23,4 @@ export default defineConfig({
},
},
},
-})
+}))
diff --git a/src/shared/database/database.py b/src/shared/database/database.py
index b30ad15..e70f209 100644
--- a/src/shared/database/database.py
+++ b/src/shared/database/database.py
@@ -85,7 +85,7 @@ class DatabaseManager:
async def create_tables(self):
"""创建数据库表"""
- from models.database import Base
+ from shared.models.database import Base
try:
async with self.engine.begin() as conn:
diff --git a/static/assets/DesignSystemView-C2MRk3c_.js b/static/assets/DesignSystemView-phUbagC9.js
similarity index 78%
rename from static/assets/DesignSystemView-C2MRk3c_.js
rename to static/assets/DesignSystemView-phUbagC9.js
index 5dda348..a737721 100644
--- a/static/assets/DesignSystemView-C2MRk3c_.js
+++ b/static/assets/DesignSystemView-phUbagC9.js
@@ -1 +1 @@
-import{E as e,_ as t,t as n,y as r}from"./index-DkoUSxK0.js";var i={};function a(n,i){return e(),r(`div`,null,[...i[0]||=[t(`div`,{class:`page-header`},[t(`h1`,{class:`page-title`},`设计体系`),t(`p`,{class:`page-subtitle`},`迁移中...`)],-1)]])}var o=n(i,[[`render`,a]]);export{o as default};
\ No newline at end of file
+import{E as e,_ as t,t as n,y as r}from"./index-B-OcU2wj.js";var i={};function a(n,i){return e(),r(`div`,null,[...i[0]||=[t(`div`,{class:`page-header`},[t(`h1`,{class:`page-title`},`设计体系`),t(`p`,{class:`page-subtitle`},`迁移中...`)],-1)]])}var o=n(i,[[`render`,a]]);export{o as default};
\ No newline at end of file
diff --git a/static/assets/HomeView-xM0C8cNb.js b/static/assets/HomeView-LwI9XCn0.js
similarity index 95%
rename from static/assets/HomeView-xM0C8cNb.js
rename to static/assets/HomeView-LwI9XCn0.js
index c2d18ec..98bd9e4 100644
--- a/static/assets/HomeView-xM0C8cNb.js
+++ b/static/assets/HomeView-LwI9XCn0.js
@@ -1 +1 @@
-import{E as e,b as t,t as n,y as r}from"./index-DkoUSxK0.js";var i={};function a(n,i){return e(),r(`div`,null,[...i[0]||=[t(`
Gemold 模具制造管理系统
智能模具设计与制造一体化平台,从零件分析到模具生成,全流程数字化解决方案
◈
MoldInsight
智能模具分析引擎,支持 STP/STEP 文件解析、分模设计、CAM 刀路规划
⊞
进销存管理
产品管理、采购销售、库存管理、财务管理,一站式 ERP 解决方案
⚙
AI 驱动
AI 分型面检测、模具方案评分、智能设计建议,提升设计效率
`,2)]])}var o=n(i,[[`render`,a],[`__scopeId`,`data-v-a374362f`]]);export{o as default};
\ No newline at end of file
+import{E as e,b as t,t as n,y as r}from"./index-B-OcU2wj.js";var i={};function a(n,i){return e(),r(`div`,null,[...i[0]||=[t(`
Gemold 模具制造管理系统
智能模具设计与制造一体化平台,从零件分析到模具生成,全流程数字化解决方案
◈
MoldInsight
智能模具分析引擎,支持 STP/STEP 文件解析、分模设计、CAM 刀路规划
⊞
进销存管理
产品管理、采购销售、库存管理、财务管理,一站式 ERP 解决方案
⚙
AI 驱动
AI 分型面检测、模具方案评分、智能设计建议,提升设计效率
`,2)]])}var o=n(i,[[`render`,a],[`__scopeId`,`data-v-a374362f`]]);export{o as default};
\ No newline at end of file
diff --git a/static/assets/InventoryView-byfyrnF7.js b/static/assets/InventoryView-DgDx8sLe.js
similarity index 99%
rename from static/assets/InventoryView-byfyrnF7.js
rename to static/assets/InventoryView-DgDx8sLe.js
index e313be9..6062b20 100644
--- a/static/assets/InventoryView-byfyrnF7.js
+++ b/static/assets/InventoryView-DgDx8sLe.js
@@ -1 +1 @@
-import{A as e,C as t,D as n,E as r,M as i,O as a,P as o,S as s,T as c,_ as l,b as u,c as ee,d,f,g as te,h as p,j as m,k as ne,l as re,m as h,n as g,o as _,p as ie,r as v,s as ae,t as y,v as b,w as oe,x,y as S}from"./index-DkoUSxK0.js";import{a as se,n as C,r as w,t as T}from"./utils-COFIQvWo.js";var ce={class:`page-container`},le={class:`inventory-layout`},ue={class:`inventory-sidebar`},de={class:`inventory-menu`},fe=[`onClick`],pe={class:`inventory-menu-caret`},me={class:`inventory-menu-items`},he=[`onClick`],ge={class:`inventory-content`},_e={class:`inventory-content-header`},ve={class:`inventory-content-title`},ye={class:`inventory-breadcrumb`},be={class:`inventory-breadcrumb-current`},xe={key:0,class:`inline-alert inline-alert-warning`},Se={class:`inline-alert-message`},Ce={key:1,class:`loading-state`},we={key:2},Te={key:0,class:`dashboard-grid`},Ee={class:`stat-card`},De={class:`stat-content`},Oe={class:`stat-value`},ke={class:`stat-card`},Ae={class:`stat-content`},je={class:`stat-value`},Me={class:`stat-card`},Ne={class:`stat-content`},Pe={class:`stat-value`},Fe={class:`stat-card`},Ie={class:`stat-content`},Le={class:`stat-value`},Re={class:`stat-card`},ze={class:`stat-content`},Be={class:`stat-value`},Ve={class:`stat-card`},He={class:`stat-content`},Ue={class:`stat-value`},We={key:1},Ge={class:`table-header`},Ke={class:`table-container`},qe={class:`data-table`},Je={class:`action-btns`},Ye=[`onClick`],Xe=[`onClick`],Ze={key:2},Qe={class:`table-header`},$e={class:`table-container`},et={class:`data-table`},tt={class:`action-btns`},nt=[`onClick`],rt=[`onClick`],it={key:3},at={class:`table-header`},ot={class:`table-container`},st={class:`data-table`},ct={class:`action-btns`},lt=[`onClick`],ut=[`onClick`],dt={key:4},ft={class:`table-header mb-12`},pt={class:`table-container mb-16`},mt={class:`flex-row-center`},ht=[`value`],gt={class:`table-container`},_t={class:`data-table`},vt={class:`action-btns`},yt=[`onClick`,`disabled`],bt=[`onClick`,`disabled`],xt=[`onClick`],St=[`onClick`],Ct={key:5},wt={class:`table-header`},Tt={class:`table-container`},Et={class:`data-table`},Dt={class:`action-btns`},Ot=[`onClick`],kt=[`onClick`],At={key:6},jt={class:`table-header`},Mt={class:`table-container`},Nt={class:`data-table`},Pt={class:`action-btns`},Ft=[`onClick`],It=[`onClick`],Lt={key:7},Rt={class:`table-header mb-12`},zt={class:`table-container mb-16`},Bt={class:`flex-row-center`},Vt=[`value`],Ht={class:`table-container`},Ut={class:`data-table`},Wt={class:`action-btns`},Gt={class:`dropdown`},Kt={class:`dropdown-menu`},qt=[`onClick`],Jt=[`onClick`],Yt=[`onClick`,`disabled`],Xt=[`onClick`],Zt={key:8},Qt={class:`table-container mb-16`},$t={class:`flex-row-center`},en={class:`text-secondary`},tn={class:`dashboard-grid`},nn={class:`stat-card`},rn={class:`stat-content`},an={class:`stat-value`},on={class:`stat-card`},sn={class:`stat-content`},cn={class:`stat-value`},ln={class:`stat-card`},un={class:`stat-content`},dn={class:`stat-value`},fn={class:`stat-card`},pn={class:`stat-content`},mn={class:`stat-value`},hn={class:`table-container mt-16`},gn={class:`data-table`},_n={class:`table-container mt-16`},vn={class:`data-table`},yn={class:`table-container mt-16`},bn={class:`data-table`},xn={class:`table-container mt-16`},Sn={class:`data-table`},Cn={class:`table-container mt-16`},wn={class:`data-table`},Tn={key:9,class:`table-container`},En={class:`data-table`},Dn={class:`modal-content`},On={class:`modal-header`},kn={class:`modal-body`},An={class:`form-group`},jn=[`value`],Mn={class:`form-group`},Nn={class:`form-group`},Pn={class:`form-group`},Fn={class:`form-group`},In={class:`form-group`},Ln={class:`form-group`},Rn={key:0,class:`form-group`},zn={key:1,class:`form-group`},Bn={key:2,class:`bom-section`},Vn={class:`form-group`},Hn={class:`table-container`},Un={class:`data-table`},Wn=[`onUpdate:modelValue`],Gn=[`value`],Kn=[`onUpdate:modelValue`],qn=[`onClick`],Jn={class:`form-group`},Yn=[`value`],Xn={class:`form-group`},Zn={class:`form-group`},Qn={key:0,class:`empty-state`},$n={key:1,class:`sales-order-items`},er={class:`sales-order-item-header`},tr=[`onClick`],nr=[`onClick`],rr={class:`sales-order-item-content`},ir={key:0},ar={class:`form-group`},or=[`onUpdate:modelValue`],sr={class:`form-group`},cr=[`onUpdate:modelValue`],lr={key:1},ur={class:`form-group`},dr=[`onUpdate:modelValue`],fr=[`value`],pr={class:`sales-order-item-row`},mr={class:`sales-order-item-column`},hr={class:`form-group`},gr=[`onUpdate:modelValue`],_r={class:`sales-order-item-column`},vr={class:`form-group`},yr=[`onUpdate:modelValue`],br={class:`sales-order-item-column`},xr={class:`form-group`},Sr=[`onUpdate:modelValue`],Cr={class:`sales-order-item-actions`},wr=[`onClick`],Tr={class:`form-group form-group-spaced`},Er={key:0,class:`material-consumption-list`},Dr={class:`material-consumption-item`},Or={class:`material-consumption-item`},kr={class:`material-consumption-item`},Ar={class:`material-consumption-item`},jr={class:`material-consumption-total`},Mr={class:`material-consumption-item`},Nr={key:1,class:`empty-state`},Pr={class:`form-group`},Fr=[`value`],Ir={class:`form-group`},Lr={class:`form-group`},Rr={key:0,class:`empty-state`},zr={key:1,class:`purchase-order-items`},Br={class:`purchase-order-item-content`},Vr={class:`form-group`},Hr=[`onUpdate:modelValue`],Ur=[`value`],Wr={class:`purchase-order-item-row`},Gr={class:`purchase-order-item-column`},Kr={class:`form-group`},qr=[`onUpdate:modelValue`],Jr={class:`purchase-order-item-column`},Yr={class:`form-group`},Xr={class:`info-display`},Zr={class:`purchase-order-item-column`},Qr={class:`form-group`},$r={class:`info-display`},ei={class:`purchase-order-item-column`},ti={class:`form-group`},ni=[`onUpdate:modelValue`],ri={class:`purchase-order-item-actions`},ii=[`onClick`],ai={class:`form-group`},oi=[`value`],si={class:`form-group`},ci={class:`table-container`},li={class:`data-table`},ui=[`onUpdate:modelValue`,`max`],di={class:`form-group`},fi={class:`form-group`},pi={class:`form-group`},mi={class:`form-group`},hi={class:`form-group`},gi={class:`form-group`},_i={class:`form-group`},vi={class:`form-group`},yi={class:`form-group`},bi={class:`form-group`},xi={class:`form-group`},Si={key:0,value:null,disabled:``},Ci=[`value`],wi={class:`form-group`},Ti={key:0,value:null,disabled:``},Ei=[`value`],Di={class:`form-group`},Oi={class:`form-group`},ki={class:`form-group`},Ai={class:`form-group`},ji={class:`modal-footer`},Mi=[`disabled`],Ni={class:`modal-content`},Pi={class:`modal-header`},Fi={class:`modal-body`},Ii={key:0,class:`empty-state`},Li={key:1,class:`purchase-order-items`},Ri={class:`purchase-order-item-content`},zi={class:`form-group`},Bi=[`onUpdate:modelValue`],Vi=[`value`],Hi={class:`purchase-order-item-row`},Ui={class:`purchase-order-item-column`},Wi={class:`form-group`},Gi=[`onUpdate:modelValue`],Ki={class:`purchase-order-item-column`},qi={class:`form-group`},Ji={class:`info-display`},Yi={class:`purchase-order-item-column`},Xi={class:`form-group`},Zi={class:`info-display`},Qi={class:`purchase-order-item-column`},$i={class:`form-group`},ea=[`onUpdate:modelValue`],ta={class:`purchase-order-item-actions`},na=[`onClick`],ra={class:`modal-footer`},ia={class:`modal-content restock-modal`},aa={class:`modal-header`},oa={class:`modal-body`},sa={class:`form-section`},ca={key:0,class:`empty-state`},la={key:1,class:`purchase-order-items`},ua={class:`purchase-order-item-row`},da={class:`purchase-order-item-column restock-col-material`},fa={class:`form-group`},pa=[`onUpdate:modelValue`],ma=[`value`],ha={class:`purchase-order-item-column`},ga={class:`form-group`},_a=[`onUpdate:modelValue`],va={class:`purchase-order-item-column`},ya={class:`form-group`},ba=[`onUpdate:modelValue`],xa={class:`purchase-order-item-column`},Sa={class:`form-group`},Ca={class:`info-display`},wa={class:`purchase-order-item-column`},Ta={class:`form-group`},Ea=[`onUpdate:modelValue`],Da={class:`purchase-order-item-actions`},Oa=[`onClick`],ka={class:`modal-footer`},E=y(s({__name:`InventoryView`,setup(s){let y=ae(),E=re();ee();let D=e(null),O=e(null),k=e(null),A=e(null),j=ne({activeTab:`dashboard`,backendDbReady:!0,backendDbMessage:``,productCategory:`finished`,dashboard:null,financeSummary:null,financePeriod:{year:new Date().getFullYear(),quarter:``},financeTransactions:[],receivables:[],payables:[],customerFinanceStatement:[],supplierFinanceStatement:[],customerProductStatement:[],supplierProductStatement:[],products:[],materials:[],finishedProducts:[],purchaseOrders:[],purchaseWarehouseId:null,purchaseReceiveItems:[],productionOrders:[],productionPlan:null,productionWarehouseId:null,suppliers:[],customers:[],warehouses:[],inventory:[],movements:[],loading:!1,showModal:!1,modalType:``,editingItem:null,productBomItems:[],materialConsumptionItems:[],showMaterialConsumptionModal:!1,consumedMaterials:[],restockItems:[],showRestockModal:!1,form:{}}),Aa=e=>{if(!e)return null;let t=String(e).trim().replace(`T`,` `).slice(0,16).match(/^(\d{4})-(\d{2})-(\d{2})\s(\d{2}):(\d{2})$/);if(!t)return null;let n=Number(t[1]),r=Number(t[2]),i=Number(t[3]),a=Number(t[4]),o=Number(t[5]);return Number.isFinite(n+r+i+a+o)?new Date(n,r-1,i,a,o,0):null},M=e=>{if(!e)return``;let t=String(e).trim();if(/^\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}/.test(t))return t.slice(0,16);if(t.includes(`T`))return t.replace(`T`,` `).slice(0,16);let n=new Date(t);if(!Number.isFinite(n.getTime()))return``;let r=e=>String(e).padStart(2,`0`);return`${n.getFullYear()}-${r(n.getMonth()+1)}-${r(n.getDate())} ${r(n.getHours())}:${r(n.getMinutes())}`},ja=e=>{if(!e)return null;let t=String(e).trim();return t.includes(`T`)?t.split(`T`)[0]:t.includes(` `)?t.split(` `)[0]:t.length===10?t:e instanceof Date?`${e.getFullYear()}-${String(e.getMonth()+1).padStart(2,`0`)}-${String(e.getDate()).padStart(2,`0`)}`:t},N=e=>{if(!e)return``;let t=String(e).trim();if(t.length===10&&!t.includes(`T`)&&!t.includes(` `))return t;let n=t.replace(` `,`T`);return n.length>=16?n.slice(0,16):n},Ma=e=>{if(!e)return``;let t=String(e).trim();return t.length===10&&!t.includes(`T`)&&!t.includes(` `)?t:t.replace(`T`,` `).slice(0,16)},P=null,F=null,I=()=>{P&&=(P.destroy(),null),F&&=(F.destroy(),null)},Na=()=>{if(I(),typeof AirDatepicker==`function`){if(j.modalType===`salesOrder`&&D.value){P=new AirDatepicker(D.value,{timepicker:!1,autoClose:!0,zIndex:2005,dateFormat:`yyyy-MM-dd`,onSelect:({formattedDate:e})=>{j.form.delivery_date=e||``,j.form.delivery_date_native=N(e||``)}});let e=Aa(j.form.delivery_date);e&&P.selectDate(e,{silent:!0})}if(j.modalType===`purchaseOrder`&&O.value){F=new AirDatepicker(O.value,{timepicker:!1,autoClose:!0,zIndex:2005,dateFormat:`yyyy-MM-dd`,onSelect:({formattedDate:e})=>{j.form.expected_date=e||``,j.form.expected_date_native=N(e||``)}});let e=Aa(j.form.expected_date);e&&F.selectDate(e,{silent:!0})}}},L=e=>{if(e===`delivery`&&P){P.show();return}if(e===`expected`&&F){F.show();return}let t=e===`delivery`?k.value:A.value;if(t){if(typeof t.showPicker==`function`){t.showPicker();return}t.focus(),t.click()}},Pa=e=>({in:`其他入库`,out:`其他出库`,adjust:`库存调整`,purchase_in:`采购入库`,return_from_production:`生产退料入库`,outsource_return:`外协回库`,finish_in:`完工入库`,issue_to_production:`生产领料出库`,outsource_send:`外协发料出库`,shipment_out:`销售出库`,scrap_out:`报废出库`})[e]||e,Fa=e=>[`purchase_in`,`return_from_production`,`outsource_return`,`finish_in`,`in`].includes(e)?`badge-success`:[`issue_to_production`,`outsource_send`,`shipment_out`,`scrap_out`,`out`].includes(e)?`badge-error`:`badge-warning`,Ia=e=>({draft:`已下单`,pending:`已下单`,received:`已收货`,paid:`已付款`})[e]||e,R=e=>[`received`,`paid`].includes(e),z=async()=>{j.loading=!0;try{j.dashboard=await _(`/api/dashboard`)}catch(e){v(e,`加载仪表盘`)}finally{j.loading=!1}},B=async()=>{j.loading=!0;try{j.finishedProducts=await _(`/api/products?item_type=finished&limit=100`)}catch(e){v(e,`加载成品`)}finally{j.loading=!1}},V=async()=>{await B()},H=async()=>{j.loading=!0;try{j.materials=await _(`/api/products?item_type=material&limit=100`)}catch(e){v(e,`加载物料`)}finally{j.loading=!1}},U=async()=>{j.loading=!0;try{j.warehouses=await _(`/api/warehouses`)}catch(e){v(e,`加载仓库`)}finally{j.loading=!1}},La=async()=>{if(j.materials.length||await H(),j.warehouses.length||await U(),!j.warehouses.length)try{await _(`/api/warehouses`,{method:`POST`,body:JSON.stringify({name:`默认仓库`})}),await U(),g(`已自动创建默认仓库`,`success`)}catch(e){v(e,`自动创建默认仓库`)}},W=async()=>{j.loading=!0;try{j.suppliers=await _(`/api/suppliers`)}catch(e){v(e,`加载供应商`)}finally{j.loading=!1}},G=async()=>{j.loading=!0;try{let[e,t]=await Promise.all([_(`/api/sales-orders?limit=100`),_(`/api/warehouses`)]);j.productionOrders=e?.items||[],j.warehouses=t||[],j.productionWarehouseId||=j.warehouses.find(e=>e.is_default)?.id||j.warehouses[0]?.id||null}catch(e){v(e,`加载按单生产数据`)}finally{j.loading=!1}},K=async()=>{j.loading=!0;try{let[e,t]=await Promise.all([_(`/api/purchase-orders?limit=100`),_(`/api/warehouses`)]);j.purchaseOrders=e?.items||[],j.warehouses=t||[],j.purchaseWarehouseId||=j.warehouses.find(e=>e.is_default)?.id||j.warehouses[0]?.id||null}catch(e){v(e,`加载采购订单`)}finally{j.loading=!1}},q=async()=>{j.loading=!0;try{j.customers=await _(`/api/customers`)}catch(e){v(e,`加载客户`)}finally{j.loading=!1}},J=async()=>{j.loading=!0;try{j.inventory=(await _(`/api/inventory`))?.items||[]}catch(e){v(e,`加载库存`)}finally{j.loading=!1}},Y=async()=>{j.loading=!0;try{j.movements=(await _(`/api/stock-movements`))?.items||[]}catch(e){v(e,`加载变动记录`)}finally{j.loading=!1}},Ra=async()=>{j.loading=!0;try{let e=Number(j.financePeriod.year)||new Date().getFullYear(),t=j.financePeriod.quarter?Number(j.financePeriod.quarter):null,n=t?`year=${e}&quarter=${t}`:`year=${e}`,[r,i,a,o,s,c,l,u]=await Promise.all([_(`/api/finance/summary?${n}`),_(`/api/finance/transactions?status=confirmed&limit=20&${n}`),_(`/api/finance/receivables?limit=20&${n}`),_(`/api/finance/payables?limit=20&${n}`),_(`/api/finance/partner-statement/customer?${n}`),_(`/api/finance/partner-statement/supplier?${n}`),_(`/api/finance/partner-product-statement/customer?${n}`),_(`/api/finance/partner-product-statement/supplier?${n}`)]);j.financeSummary=r,j.financeTransactions=i,j.receivables=a,j.payables=o,j.customerFinanceStatement=s.items||[],j.supplierFinanceStatement=c.items||[],j.customerProductStatement=l.items||[],j.supplierProductStatement=u.items||[]}catch(e){v(e,`加载财务数据`)}finally{j.loading=!1}},za=()=>{j.activeTab===`finance`&&Ra()},Ba=e=>{if(j.activeTab=e,j.backendDbReady)switch(e){case`dashboard`:z();break;case`sales_orders`:G();break;case`products`:B();break;case`materials`:H();break;case`purchases`:K();break;case`inventory`:J();break;case`customers`:q();break;case`suppliers`:W();break;case`finance`:Ra();break;case`movements`:Y();break}},X=[{key:`overview`,title:`概览`,items:[{key:`dashboard`,label:`仪表盘`}]},{key:`sales`,title:`销售`,items:[{key:`sales_orders`,label:`销售订单管理`}]},{key:`purchase`,title:`采购`,items:[{key:`purchases`,label:`采购订单管理`}]},{key:`product`,title:`产品`,items:[{key:`products`,label:`成品管理`},{key:`materials`,label:`物料管理`}]},{key:`partner`,title:`往来单位`,items:[{key:`customers`,label:`客户管理`},{key:`suppliers`,label:`供应商管理`}]},{key:`warehouse`,title:`仓库`,items:[{key:`inventory`,label:`库存管理`},{key:`movements`,label:`库存变动记录`}]},{key:`finance`,title:`财务`,items:[{key:`finance`,label:`财务概览`}]}],Z=ne(Object.fromEntries(X.map(e=>[e.key,!0]))),Va=e=>{Z[e]=!Z[e]},Ha=te(()=>{for(let e of X){let t=e.items.find(e=>e.key===j.activeTab);if(t)return{group:e,item:t}}return null}),Ua=e=>{Ba(e)},Wa=async()=>{try{let e=await fetch(`/health`,{method:`GET`});if(!e.ok){j.backendDbReady=!1,j.backendDbMessage=`后端服务异常,暂无法加载业务数据`;return}let t=await e.json().catch(()=>null);if(t&&t.database_connected===!1){j.backendDbReady=!1,j.backendDbMessage=`数据库未连接,当前仅可浏览界面,业务数据暂不可用`;return}j.backendDbReady=!0,j.backendDbMessage=``}catch{j.backendDbReady=!1,j.backendDbMessage=`无法连接后端服务`}},Ga=e=>{j.modalType=`product`,j.editingItem=null,j.form={item_type:e,unit:e===`material`?`kg`:`件`,min_stock:0,max_stock:1e3,cost_price:0,sale_price:0},j.showModal=!0},Q=async(e,n=null)=>{if(j.modalType=e,j.editingItem=n,n)if(e===`salesOrder`){if(n.status===`paid`){g(`已收款的销售订单禁止修改`,`warning`),j.modalType=``,j.editingItem=null;return}await q(),await B();let e=await _(`/api/sales-orders/${n.id}`);j.consumedMaterials=(await _(`/api/stock-movements?reference_type=sales_order&reference_id=${n.id}&movement_type=consumption`)||[]).map(e=>({material_name:e.product_name||e.product_sku||`未知物料`,quantity:Math.abs(e.quantity),unit_price:e.unit_price||0,amount:e.total_amount||0})),j.form={customer_id:e.customer_id,delivery_date:M(e.delivery_date),delivery_date_native:N(M(e.delivery_date)),remark:e.remark||``,items:(e.items||[]).map(e=>({mode:e.product_id?`existing`:`new`,product_id:e.product_id,product_sku:``,product_name:``,quantity:e.quantity,unit_price:e.unit_price,remark:e.remark||``}))}}else if(e===`purchaseOrder`){await W(),await H();let e=await _(`/api/purchase-orders/${n.id}`);j.form={supplier_id:e.supplier_id,expected_date:M(e.expected_date),expected_date_native:N(M(e.expected_date)),remark:e.remark||``,items:(e.items||[]).map(e=>({product_id:e.product_id,quantity:e.quantity,remark:e.remark||``}))}}else e===`purchaseReceive`?(await U(),j.purchaseReceiveItems=((await _(`/api/purchase-orders/${n.id}`)).items||[]).map(e=>({item_id:e.id,material_label:`${e.product_sku||e.product_id} - ${e.product_name||``}`.trim(),remaining_quantity:Math.max((e.quantity||0)-(e.received_quantity||0),0),receive_quantity:Math.max((e.quantity||0)-(e.received_quantity||0),0)})).filter(e=>e.remaining_quantity>0),j.form={warehouse_id:j.purchaseWarehouseId||j.warehouses.find(e=>e.is_default)?.id||j.warehouses[0]?.id||null,remark:``}):e===`product`?(j.form={...n},n.item_type===`finished`&&(await H(),j.productBomItems=((await _(`/api/products/${n.id}/materials`)).items||[]).map(e=>({material_id:e.material_id,quantity:e.quantity})))):j.form={...n};else j.form={},e===`inventoryItem`&&(await La(),j.form={product_id:j.materials[0]?.id||null,warehouse_id:j.warehouses.find(e=>e.is_default)?.id||j.warehouses[0]?.id||null,quantity:0,locked_quantity:0,batch_number:``,location:``}),e===`salesOrder`&&(j.form={customer_id:null,delivery_date:``,delivery_date_native:``,remark:``,items:[]}),e===`purchaseOrder`&&(j.form={supplier_id:null,expected_date:``,expected_date_native:``,remark:``,items:[]}),e===`product`&&(j.form={item_type:`finished`,unit:`件`,min_stock:0,max_stock:1e3,cost_price:0,sale_price:0}),e===`salesOrder`&&(await q(),await B(),j.form={customer_id:j.customers[0]?.id||null,delivery_date:``,remark:``,items:[{mode:`new`,product_id:null,product_sku:``,product_name:``,quantity:1,unit_price:0,remark:``}]}),e===`purchaseOrder`&&(await W(),await H(),j.form={supplier_id:j.suppliers[0]?.id||null,expected_date:``,remark:``,items:[{product_id:j.materials[0]?.id||null,quantity:1,remark:``}]});j.showModal=!0,t(()=>{Na()})},Ka=async()=>{if(j.modalType!==`salesOrder`){g(`请先打开销售订单编辑页面`,`warning`);return}await H(),await U(),j.materialConsumptionItems=[],j.showMaterialConsumptionModal=!0},qa=()=>{j.materialConsumptionItems.push({material_id:j.materials[0]?.id||null,quantity:1,remark:``})},Ja=e=>{j.materialConsumptionItems.splice(e,1)},Ya=async()=>{if(j.modalType!==`salesOrder`){g(`请先打开销售订单编辑页面`,`warning`);return}if(!j.editingItem){j.showMaterialConsumptionModal=!1,await mo();return}for(let[e,t]of j.materialConsumptionItems.entries()){let n=e+1;if(!t.material_id){g(`第 ${n} 行:请选择物料`,`warning`);return}if(!Number.isFinite(t.quantity)||t.quantity<=0){g(`第 ${n} 行:数量必须大于 0`,`warning`);return}}try{await _(`/api/sales-orders/${j.editingItem.id}/consume-materials`,{method:`POST`,body:JSON.stringify({items:j.materialConsumptionItems.map(e=>({material_id:e.material_id,quantity:e.quantity,remark:e.remark}))})}),g(`物料消耗记录保存成功`,`success`),j.showMaterialConsumptionModal=!1;let e=await _(`/api/sales-orders/${j.editingItem.id}`);j.form={...j.form,actual_material_cost:e.actual_material_cost},j.consumedMaterials=(await _(`/api/stock-movements?reference_type=sales_order&reference_id=${j.editingItem.id}&movement_type=consumption`)||[]).map(e=>({material_name:e.product_name||e.product_sku||`未知物料`,quantity:Math.abs(e.quantity),unit_price:e.unit_price||0,amount:e.total_amount||0}))}catch(e){v(e,`保存物料消耗`)}},Xa=async()=>{await H(),await W(),j.restockItems=[],j.showRestockModal=!0},Za=()=>{j.restockItems.push({material_id:j.materials[0]?.id||null,quantity:1,unit_price:0,remark:``})},Qa=e=>{j.restockItems.splice(e,1)},$a=async()=>{if(!j.restockItems||j.restockItems.length===0){g(`请至少添加一个补货物料`,`warning`);return}for(let[e,t]of j.restockItems.entries()){let n=e+1;if(!t.material_id){g(`第 ${n} 行:请选择物料`,`warning`);return}if(!Number.isFinite(t.quantity)||t.quantity<=0){g(`第 ${n} 行:数量必须大于 0`,`warning`);return}if(!Number.isFinite(t.unit_price)||t.unit_price<0){g(`第 ${n} 行:单价必须大于等于 0`,`warning`);return}}try{let e={supplier_id:j.suppliers[0]?.id||null,expected_date:new Date().toISOString().split(`T`)[0],remark:`物料补货`,items:j.restockItems.map(e=>({product_id:e.material_id,quantity:e.quantity,remark:e.remark}))};await _(`/api/purchase-orders`,{method:`POST`,body:JSON.stringify(e)}),g(`采购订单创建成功`,`success`),j.showRestockModal=!1,j.restockItems=[],K()}catch(e){v(e,`保存补货订单`)}},$=()=>{j.showModal=!1,j.modalType=``,j.editingItem=null,j.productBomItems=[],j.purchaseReceiveItems=[],j.form={},I()},eo=async()=>{try{j.editingItem?(await _(`/api/products/${j.editingItem.id}`,{method:`PUT`,body:JSON.stringify(j.form)}),j.form.item_type===`finished`&&j.productBomItems.length>0&&await _(`/api/products/${j.editingItem.id}/materials`,{method:`PUT`,body:JSON.stringify({items:j.productBomItems})}),g(`产品更新成功`,`success`)):(await _(`/api/products`,{method:`POST`,body:JSON.stringify(j.form)}),g(`产品创建成功`,`success`)),$(),V(),H()}catch(e){v(e,`保存产品`)}},to=async e=>{if(confirm(`确定要删除这个产品吗?`))try{await _(`/api/products/${e}`,{method:`DELETE`}),g(`产品已删除`,`success`),V(),H()}catch(e){v(e,`删除产品`)}},no=()=>{j.productBomItems.push({material_id:j.materials[0]?.id||null,quantity:1})},ro=e=>{j.productBomItems.splice(e,1)},io=async()=>{try{j.editingItem?(await _(`/api/suppliers/${j.editingItem.id}`,{method:`PUT`,body:JSON.stringify(j.form)}),g(`供应商更新成功`,`success`)):(await _(`/api/suppliers`,{method:`POST`,body:JSON.stringify(j.form)}),g(`供应商创建成功`,`success`)),$(),W()}catch(e){v(e,`保存供应商`)}},ao=async e=>{if(confirm(`确定要删除这个供应商吗?`))try{await _(`/api/suppliers/${e}`,{method:`DELETE`}),g(`供应商已删除`,`success`),W()}catch(e){v(e,`删除供应商`)}},oo=async()=>{try{j.editingItem?(await _(`/api/customers/${j.editingItem.id}`,{method:`PUT`,body:JSON.stringify(j.form)}),g(`客户更新成功`,`success`)):(await _(`/api/customers`,{method:`POST`,body:JSON.stringify(j.form)}),g(`客户创建成功`,`success`)),$(),q()}catch(e){v(e,`保存客户`)}},so=async e=>{if(confirm(`确定要删除这个客户吗?`))try{await _(`/api/customers/${e}`,{method:`DELETE`}),g(`客户已删除`,`success`),q()}catch(e){v(e,`删除客户`)}},co=async()=>{try{j.editingItem?(await _(`/api/inventory/${j.editingItem.id}`,{method:`PUT`,body:JSON.stringify({quantity:j.form.quantity,locked_quantity:j.form.locked_quantity,batch_number:j.form.batch_number,location:j.form.location})}),g(`物料库存更新成功`,`success`)):(await _(`/api/inventory`,{method:`POST`,body:JSON.stringify(j.form)}),g(`物料库存创建成功`,`success`)),$(),J()}catch(e){v(e,`保存物料库存`)}},lo=async e=>{if(confirm(`确定要删除这个物料库存记录吗?`))try{await _(`/api/inventory/${e}`,{method:`DELETE`}),g(`物料库存已删除`,`success`),J()}catch(e){v(e,`删除物料库存`)}},uo=()=>{j.form.items=j.form.items||[],j.form.items.push({mode:`new`,product_id:null,product_sku:``,product_name:``,quantity:1,unit_price:0,remark:``})},fo=(e,t)=>{e.mode=t,t===`new`?(e.product_id=null,e.product_sku=``,e.product_name=``):(e.product_sku=``,e.product_name=``,e.product_id||=j.finishedProducts[0]?.id||null)},po=e=>{j.form.items.splice(e,1)},mo=async()=>{try{if(!j.form.customer_id){g(`请选择客户`,`warning`);return}if(!j.form.items||!j.form.items.length){g(`请至少添加一个成品明细`,`warning`);return}for(let[e,t]of j.form.items.entries()){let n=e+1;if(t.mode===`existing`){if(!t.product_id){g(`第 ${n} 行:请选择模具`,`warning`);return}}else{if(!t.product_sku||!String(t.product_sku).trim()){g(`第 ${n} 行:请输入模具SKU`,`warning`);return}if(!t.product_name||!String(t.product_name).trim()){g(`第 ${n} 行:请输入模具名称`,`warning`);return}}if(!Number.isFinite(t.quantity)||t.quantity<=0){g(`第 ${n} 行:数量必须大于 0`,`warning`);return}if(!Number.isFinite(t.unit_price)||t.unit_price<0){g(`第 ${n} 行:单价必须大于等于 0`,`warning`);return}}let e={customer_id:j.form.customer_id,delivery_date:ja(j.form.delivery_date),remark:j.form.remark,items:j.form.items.map(e=>({product_id:e.mode===`existing`&&e.product_id||null,product_sku:e.mode===`existing`?null:e.product_sku||null,product_name:e.mode===`existing`?null:e.product_name||null,product_category:null,product_unit:`件`,quantity:e.quantity,unit_price:e.unit_price,remark:e.remark||``}))},t;if(j.editingItem){let n=await _(`/api/sales-orders/${j.editingItem.id}`,{method:`PUT`,body:JSON.stringify(e)});t=j.editingItem.id,g(n.production_status===`bom_missing`?`订单已保存,但成品未配置BOM,未扣减物料`:`销售订单更新成功并已自动扣减物料`,n.production_status===`bom_missing`?`warning`:`success`)}else{let n=await _(`/api/sales-orders`,{method:`POST`,body:JSON.stringify(e)});t=n.id,g(n.production_status===`bom_missing`?`订单已创建,但成品未配置BOM,未扣减物料`:`销售订单创建成功并已自动扣减物料`,n.production_status===`bom_missing`?`warning`:`success`)}if(j.materialConsumptionItems&&j.materialConsumptionItems.length>0)try{await _(`/api/sales-orders/${t}/consume-materials`,{method:`POST`,body:JSON.stringify({items:j.materialConsumptionItems.map(e=>({material_id:e.material_id,quantity:e.quantity,remark:e.remark}))})}),g(`物料消耗记录保存成功`,`success`),j.materialConsumptionItems=[]}catch(e){v(e,`保存物料消耗`)}$(),G(),B(),J(),Y()}catch(e){v(e,`保存销售订单`)}},ho=async(e,t)=>{try{await _(`/api/sales-orders/${e.id}/status`,{method:`PATCH`,body:JSON.stringify({status:t})}),g(`订单状态已更新`,`success`),G()}catch(e){v(e,`更新订单状态`)}},go=async(e,t)=>{try{await _(`/api/purchase-orders/${e.id}/status`,{method:`PATCH`,body:JSON.stringify({status:t})}),g(`采购订单状态已更新`,`success`),K()}catch(e){v(e,`更新采购订单状态`)}},_o=async e=>{if(confirm(`确定删除这个销售订单吗?系统会自动回补已扣减物料。`))try{await _(`/api/sales-orders/${e}`,{method:`DELETE`}),g(`销售订单已删除并回补物料`,`success`),j.productionPlan?.sales_order_id===e&&(j.productionPlan=null),G(),J(),Y()}catch(e){v(e,`删除销售订单`)}},vo=()=>{j.form.items=j.form.items||[],j.form.items.push({product_id:j.materials[0]?.id||null,quantity:1,remark:``})},yo=e=>{j.form.items.splice(e,1)},bo=async()=>{try{if(!j.form.supplier_id){g(`请选择供应商`,`warning`);return}if(!j.form.items||!j.form.items.length){g(`请至少添加一个物料明细`,`warning`);return}for(let[e,t]of j.form.items.entries()){let n=e+1;if(!t.product_id){g(`第 ${n} 行:请选择物料`,`warning`);return}if(!Number.isFinite(t.quantity)||t.quantity<=0){g(`第 ${n} 行:数量必须大于 0`,`warning`);return}}let e={supplier_id:j.form.supplier_id,expected_date:ja(j.form.expected_date),remark:j.form.remark,items:j.form.items.map(e=>({product_id:e.product_id,quantity:e.quantity,remark:e.remark}))};j.editingItem?(await _(`/api/purchase-orders/${j.editingItem.id}`,{method:`PUT`,body:JSON.stringify(e)}),g(`采购订单更新成功`,`success`)):(await _(`/api/purchase-orders`,{method:`POST`,body:JSON.stringify(e)}),g(`采购订单创建成功`,`success`)),$(),K()}catch(e){v(e,`保存采购订单`)}},xo=async e=>{if(confirm(`确定删除这个采购订单吗?`))try{await _(`/api/purchase-orders/${e}`,{method:`DELETE`}),g(`采购订单已删除`,`success`),K()}catch(e){v(e,`删除采购订单`)}},So=async()=>{try{if(!j.editingItem?.id)return;let e=(j.purchaseReceiveItems||[]).filter(e=>Number(e.receive_quantity)>0).map(e=>({item_id:e.item_id,receive_quantity:Number(e.receive_quantity)}));if(!e.length){g(`请填写本次入库数量`,`warning`);return}await _(`/api/purchase-orders/${j.editingItem.id}/receive`,{method:`POST`,body:JSON.stringify({warehouse_id:j.form.warehouse_id||j.purchaseWarehouseId,items:e,remark:j.form.remark||``})}),g(`采购到货入库成功`,`success`),$(),K(),J(),Y()}catch(e){v(e,`采购到货入库`)}};return oe(()=>{if(!y.user){E.push(`/login`);return}Wa().then(()=>{if(!j.backendDbReady){g(j.backendDbMessage||`业务服务不可用`,`warning`);return}z()})}),c(()=>{I()}),(e,t)=>(r(),S(`div`,ce,[t[183]||=l(`div`,{class:`page-header`},[l(`h1`,null,`进销存管理`),l(`p`,null,`库存、采购、销售管理`)],-1),l(`div`,le,[l(`aside`,ue,[l(`div`,de,[(r(),S(p,null,n(X,e=>l(`div`,{key:e.key,class:`inventory-menu-group`},[l(`button`,{type:`button`,class:`inventory-menu-title`,onClick:t=>Va(e.key)},[l(`span`,null,o(e.title),1),l(`span`,pe,o(Z[e.key]?`▾`:`▸`),1)],8,fe),a(l(`div`,me,[(r(!0),S(p,null,n(e.items,t=>(r(),S(`button`,{key:e.key+`-`+t.key,type:`button`,class:i([`inventory-menu-item`,{active:j.activeTab===t.key}]),onClick:e=>Ua(t.key)},o(t.label),11,he))),128))],512),[[ie,Z[e.key]]])])),64))])]),l(`section`,ge,[l(`div`,_e,[l(`div`,ve,[l(`span`,ye,o(Ha.value?.group?.title||`进销存`),1),t[55]||=l(`span`,{class:`inventory-breadcrumb-sep`},`/`,-1),l(`span`,be,o(Ha.value?.item?.label||``),1)])]),j.backendDbReady?b(``,!0):(r(),S(`div`,xe,[t[56]||=l(`div`,{class:`inline-alert-title`},`提示`,-1),l(`div`,Se,o(j.backendDbMessage),1)])),j.loading?(r(),S(`div`,Ce,[...t[57]||=[l(`div`,{class:`spinner`},null,-1),l(`span`,null,`加载中...`,-1)]])):(r(),S(`div`,we,[j.activeTab===`dashboard`?(r(),S(`div`,Te,[l(`div`,Ee,[t[59]||=l(`div`,{class:`stat-icon`},`📦`,-1),l(`div`,De,[l(`div`,Oe,o(j.dashboard?.product_count||0),1),t[58]||=l(`div`,{class:`stat-label`},`成品数量`,-1)])]),l(`div`,ke,[t[61]||=l(`div`,{class:`stat-icon`},`📊`,-1),l(`div`,Ae,[l(`div`,je,o(j.dashboard?.total_stock||0),1),t[60]||=l(`div`,{class:`stat-label`},`物料库存总量`,-1)])]),l(`div`,Me,[t[63]||=l(`div`,{class:`stat-icon`},`💰`,-1),l(`div`,Ne,[l(`div`,Pe,o(m(T)(j.dashboard?.total_value||0)),1),t[62]||=l(`div`,{class:`stat-label`},`库存价值`,-1)])]),l(`div`,Fe,[t[65]||=l(`div`,{class:`stat-icon`},`🏭`,-1),l(`div`,Ie,[l(`div`,Le,o(j.dashboard?.supplier_count||0),1),t[64]||=l(`div`,{class:`stat-label`},`供应商`,-1)])]),l(`div`,Re,[t[67]||=l(`div`,{class:`stat-icon`},`👥`,-1),l(`div`,ze,[l(`div`,Be,o(j.dashboard?.customer_count||0),1),t[66]||=l(`div`,{class:`stat-label`},`客户`,-1)])]),l(`div`,Ve,[t[69]||=l(`div`,{class:`stat-icon`},`🏪`,-1),l(`div`,He,[l(`div`,Ue,o(j.dashboard?.warehouse_count||0),1),t[68]||=l(`div`,{class:`stat-label`},`仓库`,-1)])])])):j.activeTab===`products`?(r(),S(`div`,We,[l(`div`,Ge,[l(`button`,{class:`btn btn-primary`,onClick:t[0]||=e=>Ga(`finished`)},`+ 新增成品`)]),l(`div`,Ke,[l(`table`,qe,[t[70]||=l(`thead`,null,[l(`tr`,null,[l(`th`,null,`SKU`),l(`th`,null,`名称`),l(`th`,null,`分类`),l(`th`,null,`单位`),l(`th`,null,`成本价`),l(`th`,null,`销售价`),l(`th`,null,`基础物料成本`),l(`th`,null,`操作`)])],-1),l(`tbody`,null,[(r(!0),S(p,null,n(j.finishedProducts,e=>(r(),S(`tr`,{key:e.id},[l(`td`,null,o(e.sku),1),l(`td`,null,o(e.name),1),l(`td`,null,o(e.category||`-`),1),l(`td`,null,o(e.unit),1),l(`td`,null,o(m(T)(e.cost_price)),1),l(`td`,null,o(m(T)(e.sale_price)),1),l(`td`,null,o(m(T)(e.material_cost||0)),1),l(`td`,null,[l(`div`,Je,[l(`button`,{class:`btn btn-sm btn-secondary`,onClick:t=>Q(`product`,e)},`编辑`,8,Ye),l(`button`,{class:`btn btn-sm btn-danger`,onClick:t=>to(e.id)},`删除`,8,Xe)])])]))),128))])])])])):j.activeTab===`materials`?(r(),S(`div`,Ze,[l(`div`,Qe,[l(`button`,{class:`btn btn-primary`,onClick:t[1]||=e=>Ga(`material`)},`+ 新增物料`),l(`button`,{class:`btn btn-secondary`,onClick:Xa},`+ 物料补货`)]),l(`div`,$e,[l(`table`,et,[t[71]||=l(`thead`,null,[l(`tr`,null,[l(`th`,null,`SKU`),l(`th`,null,`名称`),l(`th`,null,`分类`),l(`th`,null,`单位`),l(`th`,null,`成本价`),l(`th`,null,`最低库存`),l(`th`,null,`操作`)])],-1),l(`tbody`,null,[(r(!0),S(p,null,n(j.materials,e=>(r(),S(`tr`,{key:e.id},[l(`td`,null,o(e.sku),1),l(`td`,null,o(e.name),1),l(`td`,null,o(e.category||`-`),1),l(`td`,null,o(e.unit),1),l(`td`,null,o(m(T)(e.cost_price)),1),l(`td`,null,o(e.min_stock||`-`),1),l(`td`,null,[l(`div`,tt,[l(`button`,{class:`btn btn-sm btn-secondary`,onClick:t=>Q(`product`,e)},`编辑`,8,nt),l(`button`,{class:`btn btn-sm btn-danger`,onClick:t=>to(e.id)},`删除`,8,rt)])])]))),128))])])])])):j.activeTab===`inventory`?(r(),S(`div`,it,[l(`div`,at,[l(`button`,{class:`btn btn-primary`,onClick:t[2]||=e=>Q(`inventoryItem`)},`+ 新增物料库存`)]),l(`div`,ot,[l(`table`,st,[t[72]||=l(`thead`,null,[l(`tr`,null,[l(`th`,null,`SKU`),l(`th`,null,`物料`),l(`th`,null,`仓库`),l(`th`,null,`数量`),l(`th`,null,`可用`),l(`th`,null,`操作`)])],-1),l(`tbody`,null,[(r(!0),S(p,null,n(j.inventory,e=>(r(),S(`tr`,{key:e.id},[l(`td`,null,o(e.product_sku),1),l(`td`,null,o(e.product_name),1),l(`td`,null,o(e.warehouse_name),1),l(`td`,null,o(e.quantity),1),l(`td`,null,o(e.available_quantity),1),l(`td`,null,[l(`div`,ct,[l(`button`,{class:`btn btn-sm btn-secondary`,onClick:t=>Q(`inventoryItem`,e)},`编辑`,8,lt),l(`button`,{class:`btn btn-sm btn-danger`,onClick:t=>lo(e.id)},`删除`,8,ut)])])]))),128))])])])])):j.activeTab===`purchases`?(r(),S(`div`,dt,[l(`div`,ft,[l(`button`,{class:`btn btn-primary`,onClick:t[3]||=e=>Q(`purchaseOrder`)},`+ 新增采购订单`)]),l(`div`,pt,[l(`div`,mt,[t[73]||=l(`label`,null,`到货仓库`,-1),a(l(`select`,{"onUpdate:modelValue":t[4]||=e=>j.purchaseWarehouseId=e,class:`form-input w-260`},[(r(!0),S(p,null,n(j.warehouses,e=>(r(),S(`option`,{key:`purchase-warehouse-`+e.id,value:e.id},o(e.name)+o(e.is_default?` [默认]`:``),9,ht))),128))],512),[[d,j.purchaseWarehouseId,void 0,{number:!0}]]),l(`button`,{class:`btn btn-secondary`,onClick:K},`刷新`)])]),l(`div`,gt,[l(`table`,_t,[t[74]||=l(`thead`,null,[l(`tr`,null,[l(`th`,null,`采购单`),l(`th`,null,`供应商`),l(`th`,null,`状态`),l(`th`,null,`订单创建`),l(`th`,null,`预计到货`),l(`th`,null,`实际到货`),l(`th`,null,`实际付款`),l(`th`,null,`总金额`),l(`th`,null,`已付款`),l(`th`,null,`操作`)])],-1),l(`tbody`,null,[(r(!0),S(p,null,n(j.purchaseOrders,e=>(r(),S(`tr`,{key:`purchase-order-`+e.id},[l(`td`,null,o(e.order_no),1),l(`td`,null,o(e.supplier_name),1),l(`td`,null,o(Ia(e.status)),1),l(`td`,null,o(e.created_at?m(w)(e.created_at):`-`),1),l(`td`,null,o(e.expected_date?m(C)(e.expected_date):`-`),1),l(`td`,null,o(e.received_date?m(w)(e.received_date):`-`),1),l(`td`,null,o(e.paid_date?m(w)(e.paid_date):`-`),1),l(`td`,null,o(m(T)(e.total_amount||0)),1),l(`td`,null,o(m(T)(e.paid_amount||0)),1),l(`td`,null,[l(`div`,vt,[l(`button`,{class:`btn btn-sm btn-secondary`,onClick:t=>Q(`purchaseOrder`,e),disabled:R(e.status)},`编辑`,8,yt),l(`button`,{class:`btn btn-sm btn-danger`,onClick:t=>xo(e.id),disabled:R(e.status)},`删除`,8,bt),e.status===`pending`?(r(),S(`button`,{key:0,class:`btn btn-sm btn-primary`,onClick:t=>Q(`purchaseReceive`,e)},`到货入库`,8,xt)):e.status===`received`?(r(),S(`button`,{key:1,class:`btn btn-sm btn-success`,onClick:t=>go(e,`paid`)},`标记为已付款`,8,St)):b(``,!0)])])]))),128))])])])])):j.activeTab===`suppliers`?(r(),S(`div`,Ct,[l(`div`,wt,[l(`button`,{class:`btn btn-primary`,onClick:t[5]||=e=>Q(`supplier`)},`+ 新增供应商`)]),l(`div`,Tt,[l(`table`,Et,[t[75]||=l(`thead`,null,[l(`tr`,null,[l(`th`,null,`编码`),l(`th`,null,`名称`),l(`th`,null,`联系人`),l(`th`,null,`电话`),l(`th`,null,`邮箱`),l(`th`,null,`操作`)])],-1),l(`tbody`,null,[(r(!0),S(p,null,n(j.suppliers,e=>(r(),S(`tr`,{key:e.id},[l(`td`,null,o(e.code),1),l(`td`,null,o(e.name),1),l(`td`,null,o(e.contact_person||`-`),1),l(`td`,null,o(e.phone||`-`),1),l(`td`,null,o(e.email||`-`),1),l(`td`,null,[l(`div`,Dt,[l(`button`,{class:`btn btn-sm btn-secondary`,onClick:t=>Q(`supplier`,e)},`编辑`,8,Ot),l(`button`,{class:`btn btn-sm btn-danger`,onClick:t=>ao(e.id)},`删除`,8,kt)])])]))),128))])])])])):j.activeTab===`customers`?(r(),S(`div`,At,[l(`div`,jt,[l(`button`,{class:`btn btn-primary`,onClick:t[6]||=e=>Q(`customer`)},`+ 新增客户`)]),l(`div`,Mt,[l(`table`,Nt,[t[76]||=l(`thead`,null,[l(`tr`,null,[l(`th`,null,`编码`),l(`th`,null,`名称`),l(`th`,null,`联系人`),l(`th`,null,`电话`),l(`th`,null,`邮箱`),l(`th`,null,`操作`)])],-1),l(`tbody`,null,[(r(!0),S(p,null,n(j.customers,e=>(r(),S(`tr`,{key:e.id},[l(`td`,null,o(e.code),1),l(`td`,null,o(e.name),1),l(`td`,null,o(e.contact_person||`-`),1),l(`td`,null,o(e.phone||`-`),1),l(`td`,null,o(e.email||`-`),1),l(`td`,null,[l(`div`,Pt,[l(`button`,{class:`btn btn-sm btn-secondary`,onClick:t=>Q(`customer`,e)},`编辑`,8,Ft),l(`button`,{class:`btn btn-sm btn-danger`,onClick:t=>so(e.id)},`删除`,8,It)])])]))),128))])])])])):j.activeTab===`sales_orders`?(r(),S(`div`,Lt,[l(`div`,Rt,[l(`button`,{class:`btn btn-primary`,onClick:t[7]||=e=>Q(`salesOrder`)},`+ 新增销售订单`)]),l(`div`,zt,[l(`div`,Bt,[t[77]||=l(`label`,null,`领料仓库`,-1),a(l(`select`,{"onUpdate:modelValue":t[8]||=e=>j.productionWarehouseId=e,class:`form-input w-260`},[(r(!0),S(p,null,n(j.warehouses,e=>(r(),S(`option`,{key:`production-warehouse-`+e.id,value:e.id},o(e.name)+o(e.is_default?` [默认]`:``),9,Vt))),128))],512),[[d,j.productionWarehouseId,void 0,{number:!0}]]),l(`button`,{class:`btn btn-secondary`,onClick:G},`刷新`)])]),l(`div`,Ht,[l(`table`,Ut,[t[79]||=l(`thead`,null,[l(`tr`,null,[l(`th`,null,`销售单`),l(`th`,null,`客户`),l(`th`,null,`订单金额`),l(`th`,null,`交付日期`),l(`th`,null,`订单创建`),l(`th`,null,`实际交付`),l(`th`,null,`实际收款`),l(`th`,null,`订单状态`),l(`th`,null,`操作`)])],-1),l(`tbody`,null,[(r(!0),S(p,null,n(j.productionOrders,e=>(r(),S(`tr`,{key:`production-order-`+e.id},[l(`td`,null,o(e.order_no),1),l(`td`,null,o(e.customer_name),1),l(`td`,null,o(m(T)(e.total_amount||0)),1),l(`td`,null,o(e.delivery_date?m(C)(e.delivery_date):`-`),1),l(`td`,null,o(e.created_at?m(w)(e.created_at):`-`),1),l(`td`,null,o(e.actual_delivery_date?m(w)(e.actual_delivery_date):`-`),1),l(`td`,null,o(e.actual_payment_date?m(w)(e.actual_payment_date):`-`),1),l(`td`,null,o(e.status===`manufacturing`?`制造中`:e.status===`delivered`?`已交付`:e.status===`paid`?`已收款`:e.status),1),l(`td`,null,[l(`div`,Wt,[l(`div`,Gt,[t[78]||=l(`button`,{class:`btn btn-sm btn-secondary dropdown-toggle`},`状态`,-1),l(`div`,Kt,[l(`button`,{class:`dropdown-item`,onClick:t=>ho(e,`delivered`)},`已交付`,8,qt),l(`button`,{class:`dropdown-item`,onClick:t=>ho(e,`paid`)},`已收款`,8,Jt)])]),l(`button`,{class:i([`btn btn-sm btn-secondary`,{"btn-disabled":e.status===`paid`}]),onClick:t=>Q(`salesOrder`,e),disabled:e.status===`paid`},`编辑`,10,Yt),l(`button`,{class:`btn btn-sm btn-danger`,onClick:t=>_o(e.id)},`删除`,8,Xt)])])]))),128))])])])])):j.activeTab===`finance`?(r(),S(`div`,Zt,[l(`div`,Qt,[l(`div`,$t,[l(`div`,null,[t[80]||=l(`label`,{class:`mr-8`},`年份`,-1),a(l(`input`,{"onUpdate:modelValue":t[9]||=e=>j.financePeriod.year=e,type:`number`,min:`2000`,max:`2100`,class:`form-input w-inline-120`},null,512),[[f,j.financePeriod.year,void 0,{number:!0}]])]),l(`div`,null,[t[82]||=l(`label`,{class:`mr-8`},`季度`,-1),a(l(`select`,{"onUpdate:modelValue":t[10]||=e=>j.financePeriod.quarter=e,class:`form-input w-inline-140`},[...t[81]||=[u(``,5)]],512),[[d,j.financePeriod.quarter]])]),l(`button`,{class:`btn btn-primary`,onClick:za},`刷新统计`),l(`span`,en,`统计周期:`+o(j.financeSummary?.period_label||`-`),1)])]),l(`div`,tn,[l(`div`,nn,[t[84]||=l(`div`,{class:`stat-icon`},`🧾`,-1),l(`div`,rn,[l(`div`,an,o(m(T)(j.financeSummary?.receivable_total||0)),1),t[83]||=l(`div`,{class:`stat-label`},`应收总额`,-1)])]),l(`div`,on,[t[86]||=l(`div`,{class:`stat-icon`},`💸`,-1),l(`div`,sn,[l(`div`,cn,o(m(T)(j.financeSummary?.payable_total||0)),1),t[85]||=l(`div`,{class:`stat-label`},`应付总额`,-1)])]),l(`div`,ln,[t[88]||=l(`div`,{class:`stat-icon`},`💵`,-1),l(`div`,un,[l(`div`,dn,o(m(T)(j.financeSummary?.period_receipt_total||0)),1),t[87]||=l(`div`,{class:`stat-label`},`周期收款`,-1)])]),l(`div`,fn,[t[90]||=l(`div`,{class:`stat-icon`},`🏦`,-1),l(`div`,pn,[l(`div`,mn,o(m(T)(j.financeSummary?.period_payment_total||0)),1),t[89]||=l(`div`,{class:`stat-label`},`周期付款`,-1)])])]),l(`div`,hn,[t[92]||=l(`h3`,{class:`mb-12`},`客户账款(周期)`,-1),l(`table`,gn,[t[91]||=l(`thead`,null,[l(`tr`,null,[l(`th`,null,`客户`),l(`th`,null,`订单数`),l(`th`,null,`流水数`),l(`th`,null,`订单金额`),l(`th`,null,`订单已收`),l(`th`,null,`实收流水`),l(`th`,null,`应收余额`)])],-1),l(`tbody`,null,[(r(!0),S(p,null,n(j.customerFinanceStatement,e=>(r(),S(`tr`,{key:`customer-`+e.partner_id},[l(`td`,null,o(e.partner_name),1),l(`td`,null,o(e.order_count),1),l(`td`,null,o(e.transaction_count),1),l(`td`,null,o(m(T)(e.order_total)),1),l(`td`,null,o(m(T)(e.settled_total)),1),l(`td`,null,o(m(T)(e.transaction_total)),1),l(`td`,null,o(m(T)(e.outstanding_total)),1)]))),128))])])]),l(`div`,_n,[t[94]||=l(`h3`,{class:`mb-12`},`供应商账款(周期)`,-1),l(`table`,vn,[t[93]||=l(`thead`,null,[l(`tr`,null,[l(`th`,null,`供应商`),l(`th`,null,`订单数`),l(`th`,null,`流水数`),l(`th`,null,`订单金额`),l(`th`,null,`订单已付`),l(`th`,null,`实付流水`),l(`th`,null,`应付余额`)])],-1),l(`tbody`,null,[(r(!0),S(p,null,n(j.supplierFinanceStatement,e=>(r(),S(`tr`,{key:`supplier-`+e.partner_id},[l(`td`,null,o(e.partner_name),1),l(`td`,null,o(e.order_count),1),l(`td`,null,o(e.transaction_count),1),l(`td`,null,o(m(T)(e.order_total)),1),l(`td`,null,o(m(T)(e.settled_total)),1),l(`td`,null,o(m(T)(e.transaction_total)),1),l(`td`,null,o(m(T)(e.outstanding_total)),1)]))),128))])])]),l(`div`,yn,[t[96]||=l(`h3`,{class:`mb-12`},`客户-商品追溯(周期)`,-1),l(`table`,bn,[t[95]||=l(`thead`,null,[l(`tr`,null,[l(`th`,null,`客户`),l(`th`,null,`SKU`),l(`th`,null,`商品`),l(`th`,null,`订单数`),l(`th`,null,`数量`),l(`th`,null,`订单金额`),l(`th`,null,`已结款`),l(`th`,null,`未结款`)])],-1),l(`tbody`,null,[(r(!0),S(p,null,n(j.customerProductStatement,e=>(r(),S(`tr`,{key:`customer-product-`+e.partner_id+`-`+e.product_id},[l(`td`,null,o(e.partner_name),1),l(`td`,null,o(e.product_sku||`-`),1),l(`td`,null,o(e.product_name),1),l(`td`,null,o(e.order_count),1),l(`td`,null,o(m(se)(e.order_quantity)),1),l(`td`,null,o(m(T)(e.order_amount)),1),l(`td`,null,o(m(T)(e.settled_amount)),1),l(`td`,null,o(m(T)(e.outstanding_amount)),1)]))),128))])])]),l(`div`,xn,[t[98]||=l(`h3`,{class:`mb-12`},`供应商-商品追溯(周期)`,-1),l(`table`,Sn,[t[97]||=l(`thead`,null,[l(`tr`,null,[l(`th`,null,`供应商`),l(`th`,null,`SKU`),l(`th`,null,`商品`),l(`th`,null,`订单数`),l(`th`,null,`数量`),l(`th`,null,`订单金额`),l(`th`,null,`已结款`),l(`th`,null,`未结款`)])],-1),l(`tbody`,null,[(r(!0),S(p,null,n(j.supplierProductStatement,e=>(r(),S(`tr`,{key:`supplier-product-`+e.partner_id+`-`+e.product_id},[l(`td`,null,o(e.partner_name),1),l(`td`,null,o(e.product_sku||`-`),1),l(`td`,null,o(e.product_name),1),l(`td`,null,o(e.order_count),1),l(`td`,null,o(m(se)(e.order_quantity)),1),l(`td`,null,o(m(T)(e.order_amount)),1),l(`td`,null,o(m(T)(e.settled_amount)),1),l(`td`,null,o(m(T)(e.outstanding_amount)),1)]))),128))])])]),l(`div`,Cn,[t[100]||=l(`h3`,{class:`mb-12`},`最近财务流水`,-1),l(`table`,wn,[t[99]||=l(`thead`,null,[l(`tr`,null,[l(`th`,null,`单号`),l(`th`,null,`类型`),l(`th`,null,`往来方`),l(`th`,null,`金额`),l(`th`,null,`状态`),l(`th`,null,`日期`)])],-1),l(`tbody`,null,[(r(!0),S(p,null,n(j.financeTransactions,e=>(r(),S(`tr`,{key:e.id},[l(`td`,null,o(e.txn_no),1),l(`td`,null,o(e.txn_type===`receipt`?`收款`:`付款`),1),l(`td`,null,o(e.partner_type===`customer`?`客户`:`供应商`)+`#`+o(e.partner_id),1),l(`td`,null,o(m(T)(e.amount)),1),l(`td`,null,o(e.status===`confirmed`?`已确认`:`已作废`),1),l(`td`,null,o(m(w)(e.txn_date)),1)]))),128))])])])])):j.activeTab===`movements`?(r(),S(`div`,Tn,[l(`table`,En,[t[101]||=l(`thead`,null,[l(`tr`,null,[l(`th`,null,`物料`),l(`th`,null,`类型`),l(`th`,null,`数量`),l(`th`,null,`变动前`),l(`th`,null,`变动后`),l(`th`,null,`时间`)])],-1),l(`tbody`,null,[(r(!0),S(p,null,n(j.movements,e=>(r(),S(`tr`,{key:e.id},[l(`td`,null,o(e.product_name)+o(e.product_sku?` (`+e.product_sku+`)`:``),1),l(`td`,null,[l(`span`,{class:i([`badge`,Fa(e.movement_type)])},o(Pa(e.movement_type)),3)]),l(`td`,null,o(e.quantity),1),l(`td`,null,o(e.before_quantity),1),l(`td`,null,o(e.after_quantity),1),l(`td`,null,o(m(w)(e.created_at)),1)]))),128))])])])):b(``,!0)]))])]),j.showModal?(r(),S(`div`,{key:0,class:`modal-overlay`,onClick:h($,[`self`])},[l(`div`,Dn,[l(`div`,On,[l(`h3`,null,o((j.editingItem?`编辑`:`新增`)+(j.modalType===`product`?j.form.item_type===`finished`?`成品`:`物料`:j.modalType===`inventoryItem`?`物料库存`:j.modalType===`salesOrder`?`销售订单`:j.modalType===`purchaseOrder`?`采购订单`:j.modalType===`purchaseReceive`?`采购到货入库`:j.modalType===`supplier`?`供应商`:`客户`)),1),l(`button`,{class:`modal-close`,onClick:$},`×`)]),l(`div`,kn,[j.modalType===`product`?(r(),S(`form`,{key:0,onSubmit:h(eo,[`prevent`])},[l(`div`,An,[t[102]||=l(`label`,{class:`form-label`},`类型 *`,-1),l(`input`,{class:`form-input`,value:j.form.item_type===`material`?`物料(纳入库存)`:`成品(按单生产,不做库存)`,disabled:``},null,8,jn),a(l(`input`,{"onUpdate:modelValue":t[11]||=e=>j.form.item_type=e,type:`hidden`},null,512),[[f,j.form.item_type]])]),l(`div`,Mn,[t[103]||=l(`label`,{class:`form-label`},`SKU *`,-1),a(l(`input`,{"onUpdate:modelValue":t[12]||=e=>j.form.sku=e,class:`form-input`,required:``,placeholder:`产品编码`},null,512),[[f,j.form.sku]])]),l(`div`,Nn,[t[104]||=l(`label`,{class:`form-label`},`名称 *`,-1),a(l(`input`,{"onUpdate:modelValue":t[13]||=e=>j.form.name=e,class:`form-input`,required:``,placeholder:`产品名称`},null,512),[[f,j.form.name]])]),l(`div`,Pn,[t[105]||=l(`label`,{class:`form-label`},`分类`,-1),a(l(`input`,{"onUpdate:modelValue":t[14]||=e=>j.form.category=e,class:`form-input`,placeholder:`产品分类`},null,512),[[f,j.form.category]])]),l(`div`,Fn,[t[106]||=l(`label`,{class:`form-label`},`单位`,-1),a(l(`input`,{"onUpdate:modelValue":t[15]||=e=>j.form.unit=e,class:`form-input`,placeholder:`件/个/箱`},null,512),[[f,j.form.unit]])]),l(`div`,In,[t[107]||=l(`label`,{class:`form-label`},`成本价`,-1),a(l(`input`,{"onUpdate:modelValue":t[16]||=e=>j.form.cost_price=e,type:`number`,step:`0.01`,class:`form-input`,placeholder:`0.00`},null,512),[[f,j.form.cost_price,void 0,{number:!0}]])]),l(`div`,Ln,[t[108]||=l(`label`,{class:`form-label`},`销售价`,-1),a(l(`input`,{"onUpdate:modelValue":t[17]||=e=>j.form.sale_price=e,type:`number`,step:`0.01`,class:`form-input`,placeholder:`0.00`},null,512),[[f,j.form.sale_price,void 0,{number:!0}]])]),j.form.item_type===`material`?(r(),S(`div`,Rn,[t[109]||=l(`label`,{class:`form-label`},`最低库存`,-1),a(l(`input`,{"onUpdate:modelValue":t[18]||=e=>j.form.min_stock=e,type:`number`,class:`form-input`,placeholder:`0`},null,512),[[f,j.form.min_stock,void 0,{number:!0}]])])):b(``,!0),j.form.item_type===`finished`?(r(),S(`div`,zn,[...t[110]||=[l(`label`,{class:`form-label`},`说明`,-1),l(`input`,{disabled:``,value:`成品不做库存,成本由下方BOM定义物料构成后自动计算`,class:`form-input`},null,-1)]])):b(``,!0),j.form.item_type===`finished`&&j.editingItem?(r(),S(`div`,Bn,[l(`div`,Vn,[t[112]||=l(`label`,{class:`form-label`},`BOM物料配置`,-1),l(`button`,{type:`button`,class:`btn btn-secondary bom-add-btn`,onClick:no},`+ 添加物料`),l(`div`,Hn,[l(`table`,Un,[t[111]||=l(`thead`,null,[l(`tr`,null,[l(`th`,null,`物料`),l(`th`,null,`数量`),l(`th`,null,`操作`)])],-1),l(`tbody`,null,[(r(!0),S(p,null,n(j.productBomItems,(e,t)=>(r(),S(`tr`,{key:`edit-bom-item-`+t},[l(`td`,null,[a(l(`select`,{"onUpdate:modelValue":t=>e.material_id=t,class:`form-input`,required:``},[(r(!0),S(p,null,n(j.materials,e=>(r(),S(`option`,{key:`edit-bom-material-`+e.id,value:e.id},o(e.sku)+` - `+o(e.name),9,Gn))),128))],8,Wn),[[d,e.material_id,void 0,{number:!0}]])]),l(`td`,null,[a(l(`input`,{"onUpdate:modelValue":t=>e.quantity=t,type:`number`,min:`0.0001`,step:`0.0001`,class:`form-input`,required:``},null,8,Kn),[[f,e.quantity,void 0,{number:!0}]])]),l(`td`,null,[l(`button`,{type:`button`,class:`btn btn-sm btn-danger`,onClick:e=>ro(t)},`删除`,8,qn)])]))),128))])])])])])):b(``,!0),l(`div`,{class:`modal-footer`},[l(`button`,{type:`button`,class:`btn btn-secondary`,onClick:$},`取消`),t[113]||=l(`button`,{type:`submit`,class:`btn btn-primary`},`保存`,-1)])],32)):j.modalType===`salesOrder`?(r(),S(`form`,{key:1,onSubmit:h(mo,[`prevent`])},[l(`div`,Jn,[t[114]||=l(`label`,{class:`form-label`},`客户 *`,-1),a(l(`select`,{"onUpdate:modelValue":t[19]||=e=>j.form.customer_id=e,class:`form-input`,required:``},[(r(!0),S(p,null,n(j.customers,e=>(r(),S(`option`,{key:`order-customer-`+e.id,value:e.id},o(e.name),9,Yn))),128))],512),[[d,j.form.customer_id,void 0,{number:!0}]])]),l(`div`,Xn,[t[116]||=l(`label`,{class:`form-label`},`交付日期`,-1),l(`div`,{class:`datetime-field`,onClick:t[23]||=e=>L(`delivery`)},[a(l(`input`,{ref_key:`deliveryDateInput`,ref:D,"onUpdate:modelValue":t[20]||=e=>j.form.delivery_date=e,type:`text`,class:`form-input air-datetime-input`,readonly:``,placeholder:`选择日期时间`},null,512),[[f,j.form.delivery_date]]),a(l(`input`,{ref_key:`deliveryDateNativeInput`,ref:k,"onUpdate:modelValue":t[21]||=e=>j.form.delivery_date_native=e,onChange:t[22]||=e=>j.form.delivery_date=Ma(j.form.delivery_date_native),type:`datetime-local`,class:`datetime-native`},null,544),[[f,j.form.delivery_date_native]]),t[115]||=l(`span`,{class:`datetime-field-icon`,"aria-hidden":`true`},`📅`,-1)])]),l(`div`,Zn,[t[117]||=l(`label`,{class:`form-label`},`备注`,-1),a(l(`input`,{"onUpdate:modelValue":t[24]||=e=>j.form.remark=e,class:`form-input`,placeholder:`订单备注`},null,512),[[f,j.form.remark]])]),l(`div`,{class:`form-group form-group-spaced`},[l(`button`,{type:`button`,class:`btn btn-secondary`,onClick:uo},`+ 添加模具`)]),j.form.items.length===0?(r(),S(`div`,Qn,[...t[118]||=[l(`div`,{class:`empty-icon`},`📦`,-1),l(`div`,{class:`empty-title`},`暂无模具`,-1),l(`div`,{class:`empty-desc`},`请点击"添加模具"按钮添加订单明细`,-1)]])):(r(),S(`div`,$n,[(r(!0),S(p,null,n(j.form.items,(e,s)=>(r(),S(`div`,{key:`sales-order-line-`+s,class:`sales-order-item`},[l(`div`,er,[l(`button`,{type:`button`,class:i([`btn`,e.mode===`new`?`active`:``]),onClick:t=>fo(e,`new`)},`新模`,10,tr),l(`button`,{type:`button`,class:i([`btn`,e.mode===`existing`?`active`:``]),onClick:t=>fo(e,`existing`)},`改模`,10,nr)]),l(`div`,rr,[e.mode===`existing`?(r(),S(`div`,lr,[l(`div`,ur,[t[122]||=l(`label`,{class:`form-label`},`选择模具 *`,-1),a(l(`select`,{"onUpdate:modelValue":t=>e.product_id=t,class:`form-input`,required:``},[t[121]||=l(`option`,{value:``},`请选择模具`,-1),(r(!0),S(p,null,n(j.finishedProducts,e=>(r(),S(`option`,{key:`sales-order-product-`+e.id,value:e.id},o(e.sku)+` - `+o(e.name),9,fr))),128))],8,dr),[[d,e.product_id,void 0,{number:!0}]])])])):(r(),S(`div`,ir,[l(`div`,ar,[t[119]||=l(`label`,{class:`form-label`},`模具SKU *`,-1),a(l(`input`,{"onUpdate:modelValue":t=>e.product_sku=t,class:`form-input`,placeholder:`请输入模具SKU`,required:``},null,8,or),[[f,e.product_sku]])]),l(`div`,sr,[t[120]||=l(`label`,{class:`form-label`},`模具名称 *`,-1),a(l(`input`,{"onUpdate:modelValue":t=>e.product_name=t,class:`form-input`,placeholder:`请输入模具名称`,required:``},null,8,cr),[[f,e.product_name]])])])),l(`div`,pr,[l(`div`,mr,[l(`div`,hr,[t[123]||=l(`label`,{class:`form-label`},`数量 *`,-1),a(l(`input`,{"onUpdate:modelValue":t=>e.quantity=t,type:`number`,min:`1`,class:`form-input`,placeholder:`请输入数量`,required:``},null,8,gr),[[f,e.quantity,void 0,{number:!0}]])])]),l(`div`,_r,[l(`div`,vr,[t[124]||=l(`label`,{class:`form-label`},`单价 *`,-1),a(l(`input`,{"onUpdate:modelValue":t=>e.unit_price=t,type:`number`,min:`0`,step:`0.01`,class:`form-input`,placeholder:`请输入单价`,required:``},null,8,yr),[[f,e.unit_price,void 0,{number:!0}]])])]),l(`div`,br,[l(`div`,xr,[t[125]||=l(`label`,{class:`form-label`},`备注`,-1),a(l(`input`,{"onUpdate:modelValue":t=>e.remark=t,class:`form-input`,placeholder:`请输入备注`},null,8,Sr),[[f,e.remark]])])]),l(`div`,Cr,[l(`button`,{type:`button`,class:`btn btn-sm btn-danger`,onClick:e=>po(Number(s))},`删除`,8,wr)])])])]))),128))])),l(`div`,{class:`form-group form-group-spaced`},[l(`button`,{type:`button`,class:`btn btn-secondary`,onClick:Ka},`+ 消耗物料`)]),l(`div`,Tr,[t[131]||=l(`label`,{class:`form-label`},`已消耗物料`,-1),j.editingItem&&j.editingItem.actual_material_cost>0?(r(),S(`div`,Er,[t[129]||=u(`
`,1),(r(!0),S(p,null,n(j.consumedMaterials,(e,t)=>(r(),S(`div`,{key:`consumed-material-`+t,class:`material-consumption-row`},[l(`div`,Dr,o(e.material_name),1),l(`div`,Or,o(e.quantity),1),l(`div`,kr,o(m(T)(e.unit_price)),1),l(`div`,Ar,o(m(T)(e.amount)),1)]))),128)),l(`div`,jr,[t[126]||=l(`div`,{class:`material-consumption-item`},`合计`,-1),t[127]||=l(`div`,{class:`material-consumption-item`},null,-1),t[128]||=l(`div`,{class:`material-consumption-item`},null,-1),l(`div`,Mr,o(m(T)(j.editingItem.actual_material_cost)),1)])])):(r(),S(`div`,Nr,[...t[130]||=[l(`div`,{class:`empty-icon`},`📦`,-1),l(`div`,{class:`empty-title`},`暂无物料消耗记录`,-1),l(`div`,{class:`empty-desc`},`点击"消耗物料"按钮添加物料消耗明细`,-1)]]))]),l(`div`,{class:`modal-footer`},[l(`button`,{type:`button`,class:`btn btn-secondary`,onClick:$},`取消`),t[132]||=l(`button`,{type:`submit`,class:`btn btn-primary`},`保存订单`,-1)])],32)):j.modalType===`purchaseOrder`?(r(),S(`form`,{key:2,onSubmit:h(bo,[`prevent`])},[l(`div`,Pr,[t[133]||=l(`label`,{class:`form-label`},`供应商 *`,-1),a(l(`select`,{"onUpdate:modelValue":t[25]||=e=>j.form.supplier_id=e,class:`form-input`,required:``},[(r(!0),S(p,null,n(j.suppliers,e=>(r(),S(`option`,{key:`purchase-supplier-`+e.id,value:e.id},o(e.name),9,Fr))),128))],512),[[d,j.form.supplier_id,void 0,{number:!0}]])]),l(`div`,Ir,[t[135]||=l(`label`,{class:`form-label`},`预计到货`,-1),l(`div`,{class:`datetime-field`,onClick:t[29]||=e=>L(`expected`)},[a(l(`input`,{ref_key:`expectedDateInput`,ref:O,"onUpdate:modelValue":t[26]||=e=>j.form.expected_date=e,type:`text`,class:`form-input air-datetime-input`,readonly:``,placeholder:`选择日期时间`},null,512),[[f,j.form.expected_date]]),a(l(`input`,{ref_key:`expectedDateNativeInput`,ref:A,"onUpdate:modelValue":t[27]||=e=>j.form.expected_date_native=e,onChange:t[28]||=e=>j.form.expected_date=Ma(j.form.expected_date_native),type:`datetime-local`,class:`datetime-native`},null,544),[[f,j.form.expected_date_native]]),t[134]||=l(`span`,{class:`datetime-field-icon`,"aria-hidden":`true`},`📅`,-1)])]),l(`div`,Lr,[t[136]||=l(`label`,{class:`form-label`},`备注`,-1),a(l(`input`,{"onUpdate:modelValue":t[30]||=e=>j.form.remark=e,class:`form-input`,placeholder:`采购单备注`},null,512),[[f,j.form.remark]])]),l(`div`,{class:`form-group form-group-spaced`},[l(`button`,{type:`button`,class:`btn btn-secondary`,onClick:vo},`+ 添加物料`)]),j.form.items.length===0?(r(),S(`div`,Rr,[...t[137]||=[l(`div`,{class:`empty-icon`},`📦`,-1),l(`div`,{class:`empty-title`},`暂无物料`,-1),l(`div`,{class:`empty-desc`},`请点击"添加物料"按钮添加采购明细`,-1)]])):(r(),S(`div`,zr,[(r(!0),S(p,null,n(j.form.items,(e,i)=>(r(),S(`div`,{key:`purchase-order-line-`+i,class:`purchase-order-item`},[l(`div`,Br,[l(`div`,Vr,[t[139]||=l(`label`,{class:`form-label`},`物料 *`,-1),a(l(`select`,{"onUpdate:modelValue":t=>e.product_id=t,class:`form-input`,required:``},[t[138]||=l(`option`,{value:``},`请选择物料`,-1),(r(!0),S(p,null,n(j.materials,e=>(r(),S(`option`,{key:`purchase-order-material-`+e.id,value:e.id},o(e.sku)+` - `+o(e.name),9,Ur))),128))],8,Hr),[[d,e.product_id,void 0,{number:!0}]])]),l(`div`,Wr,[l(`div`,Gr,[l(`div`,Kr,[t[140]||=l(`label`,{class:`form-label`},`数量 *`,-1),a(l(`input`,{"onUpdate:modelValue":t=>e.quantity=t,type:`number`,min:`1`,class:`form-input`,placeholder:`请输入数量`,required:``},null,8,qr),[[f,e.quantity,void 0,{number:!0}]])])]),l(`div`,Jr,[l(`div`,Yr,[t[141]||=l(`label`,{class:`form-label`},`单价`,-1),l(`div`,Xr,` ¥`+o((j.materials.find(t=>t.id===e.product_id)?.cost_price||0).toFixed(2)),1)])]),l(`div`,Zr,[l(`div`,Qr,[t[142]||=l(`label`,{class:`form-label`},`总价`,-1),l(`div`,$r,` ¥`+o(((j.materials.find(t=>t.id===e.product_id)?.cost_price||0)*(e.quantity||0)).toFixed(2)),1)])]),l(`div`,ei,[l(`div`,ti,[t[143]||=l(`label`,{class:`form-label`},`备注`,-1),a(l(`input`,{"onUpdate:modelValue":t=>e.remark=t,class:`form-input`,placeholder:`请输入备注`},null,8,ni),[[f,e.remark]])])]),l(`div`,ri,[l(`button`,{type:`button`,class:`btn btn-sm btn-danger`,onClick:e=>yo(Number(i))},`删除`,8,ii)])])])]))),128))])),l(`div`,{class:`modal-footer`},[l(`button`,{type:`button`,class:`btn btn-secondary`,onClick:$},`取消`),t[144]||=l(`button`,{type:`submit`,class:`btn btn-primary`},`保存采购单`,-1)])],32)):j.modalType===`purchaseReceive`?(r(),S(`form`,{key:3,onSubmit:h(So,[`prevent`])},[l(`div`,ai,[t[145]||=l(`label`,{class:`form-label`},`入库仓库 *`,-1),a(l(`select`,{"onUpdate:modelValue":t[31]||=e=>j.form.warehouse_id=e,class:`form-input`,required:``},[(r(!0),S(p,null,n(j.warehouses,e=>(r(),S(`option`,{key:`purchase-receive-warehouse-`+e.id,value:e.id},o(e.name)+o(e.is_default?` [默认]`:``),9,oi))),128))],512),[[d,j.form.warehouse_id,void 0,{number:!0}]])]),l(`div`,si,[t[146]||=l(`label`,{class:`form-label`},`备注`,-1),a(l(`input`,{"onUpdate:modelValue":t[32]||=e=>j.form.remark=e,class:`form-input`,placeholder:`到货说明`},null,512),[[f,j.form.remark]])]),l(`div`,ci,[l(`table`,li,[t[147]||=l(`thead`,null,[l(`tr`,null,[l(`th`,null,`物料`),l(`th`,null,`明细ID`),l(`th`,null,`剩余待入库`),l(`th`,null,`本次入库`)])],-1),l(`tbody`,null,[(r(!0),S(p,null,n(j.purchaseReceiveItems,e=>(r(),S(`tr`,{key:`purchase-receive-line-`+e.item_id},[l(`td`,null,o(e.material_label),1),l(`td`,null,o(e.item_id),1),l(`td`,null,o(e.remaining_quantity),1),l(`td`,null,[a(l(`input`,{"onUpdate:modelValue":t=>e.receive_quantity=t,type:`number`,min:`0`,max:e.remaining_quantity,class:`form-input`,required:``},null,8,ui),[[f,e.receive_quantity,void 0,{number:!0}]])])]))),128))])])]),l(`div`,{class:`modal-footer`},[l(`button`,{type:`button`,class:`btn btn-secondary`,onClick:$},`取消`),t[148]||=l(`button`,{type:`submit`,class:`btn btn-primary`},`确认入库`,-1)])],32)):j.modalType===`supplier`?(r(),S(`form`,{key:4,onSubmit:h(io,[`prevent`])},[l(`div`,di,[t[149]||=l(`label`,{class:`form-label`},`名称 *`,-1),a(l(`input`,{"onUpdate:modelValue":t[33]||=e=>j.form.name=e,class:`form-input`,required:``,placeholder:`供应商名称`},null,512),[[f,j.form.name]])]),l(`div`,fi,[t[150]||=l(`label`,{class:`form-label`},`联系人`,-1),a(l(`input`,{"onUpdate:modelValue":t[34]||=e=>j.form.contact_person=e,class:`form-input`,placeholder:`联系人姓名`},null,512),[[f,j.form.contact_person]])]),l(`div`,pi,[t[151]||=l(`label`,{class:`form-label`},`电话`,-1),a(l(`input`,{"onUpdate:modelValue":t[35]||=e=>j.form.phone=e,class:`form-input`,placeholder:`联系电话`},null,512),[[f,j.form.phone]])]),l(`div`,mi,[t[152]||=l(`label`,{class:`form-label`},`邮箱`,-1),a(l(`input`,{"onUpdate:modelValue":t[36]||=e=>j.form.email=e,type:`email`,class:`form-input`,placeholder:`email@example.com`},null,512),[[f,j.form.email]])]),l(`div`,hi,[t[153]||=l(`label`,{class:`form-label`},`地址`,-1),a(l(`input`,{"onUpdate:modelValue":t[37]||=e=>j.form.address=e,class:`form-input`,placeholder:`详细地址`},null,512),[[f,j.form.address]])]),l(`div`,{class:`modal-footer`},[l(`button`,{type:`button`,class:`btn btn-secondary`,onClick:$},`取消`),t[154]||=l(`button`,{type:`submit`,class:`btn btn-primary`},`保存`,-1)])],32)):j.modalType===`customer`?(r(),S(`form`,{key:5,onSubmit:h(oo,[`prevent`])},[l(`div`,gi,[t[155]||=l(`label`,{class:`form-label`},`名称 *`,-1),a(l(`input`,{"onUpdate:modelValue":t[38]||=e=>j.form.name=e,class:`form-input`,required:``,placeholder:`客户名称`},null,512),[[f,j.form.name]])]),l(`div`,_i,[t[156]||=l(`label`,{class:`form-label`},`联系人`,-1),a(l(`input`,{"onUpdate:modelValue":t[39]||=e=>j.form.contact_person=e,class:`form-input`,placeholder:`联系人姓名`},null,512),[[f,j.form.contact_person]])]),l(`div`,vi,[t[157]||=l(`label`,{class:`form-label`},`电话`,-1),a(l(`input`,{"onUpdate:modelValue":t[40]||=e=>j.form.phone=e,class:`form-input`,placeholder:`联系电话`},null,512),[[f,j.form.phone]])]),l(`div`,yi,[t[158]||=l(`label`,{class:`form-label`},`邮箱`,-1),a(l(`input`,{"onUpdate:modelValue":t[41]||=e=>j.form.email=e,type:`email`,class:`form-input`,placeholder:`email@example.com`},null,512),[[f,j.form.email]])]),l(`div`,bi,[t[159]||=l(`label`,{class:`form-label`},`地址`,-1),a(l(`input`,{"onUpdate:modelValue":t[42]||=e=>j.form.address=e,class:`form-input`,placeholder:`详细地址`},null,512),[[f,j.form.address]])]),l(`div`,{class:`modal-footer`},[l(`button`,{type:`button`,class:`btn btn-secondary`,onClick:$},`取消`),t[160]||=l(`button`,{type:`submit`,class:`btn btn-primary`},`保存`,-1)])],32)):j.modalType===`inventoryItem`?(r(),S(`form`,{key:6,onSubmit:h(co,[`prevent`])},[l(`div`,xi,[t[161]||=l(`label`,{class:`form-label`},`物料 *`,-1),a(l(`select`,{"onUpdate:modelValue":t[43]||=e=>j.form.product_id=e,class:`form-input`,required:``},[j.materials.length?b(``,!0):(r(),S(`option`,Si,`暂无物料,请先新增物料`)),(r(!0),S(p,null,n(j.materials,e=>(r(),S(`option`,{key:`stockin-product-`+e.id,value:e.id},o(e.sku)+` - `+o(e.name)+`(ID: `+o(e.id)+`) `,9,Ci))),128))],512),[[d,j.form.product_id,void 0,{number:!0}]])]),l(`div`,wi,[t[162]||=l(`label`,{class:`form-label`},`仓库 *`,-1),a(l(`select`,{"onUpdate:modelValue":t[44]||=e=>j.form.warehouse_id=e,class:`form-input`,required:``},[j.warehouses.length?b(``,!0):(r(),S(`option`,Ti,`暂无仓库,系统将自动创建默认仓库`)),(r(!0),S(p,null,n(j.warehouses,e=>(r(),S(`option`,{key:`stockin-warehouse-`+e.id,value:e.id},o(e.name)+o(e.code?` (`+e.code+`)`:``)+o(e.is_default?` [默认]`:``)+`(ID: `+o(e.id)+`) `,9,Ei))),128))],512),[[d,j.form.warehouse_id,void 0,{number:!0}]])]),l(`div`,Di,[t[163]||=l(`label`,{class:`form-label`},`数量 *`,-1),a(l(`input`,{"onUpdate:modelValue":t[45]||=e=>j.form.quantity=e,type:`number`,class:`form-input`,required:``,placeholder:`库存数量`},null,512),[[f,j.form.quantity,void 0,{number:!0}]])]),l(`div`,Oi,[t[164]||=l(`label`,{class:`form-label`},`锁定数量`,-1),a(l(`input`,{"onUpdate:modelValue":t[46]||=e=>j.form.locked_quantity=e,type:`number`,class:`form-input`,placeholder:`锁定库存`},null,512),[[f,j.form.locked_quantity,void 0,{number:!0}]])]),l(`div`,ki,[t[165]||=l(`label`,{class:`form-label`},`批次号`,-1),a(l(`input`,{"onUpdate:modelValue":t[47]||=e=>j.form.batch_number=e,class:`form-input`,placeholder:`批次号(可选)`},null,512),[[f,j.form.batch_number]])]),l(`div`,Ai,[t[166]||=l(`label`,{class:`form-label`},`库位`,-1),a(l(`input`,{"onUpdate:modelValue":t[48]||=e=>j.form.location=e,class:`form-input`,placeholder:`库位(可选)`},null,512),[[f,j.form.location]])]),l(`div`,ji,[l(`button`,{type:`button`,class:`btn btn-secondary`,onClick:$},`取消`),l(`button`,{type:`submit`,class:`btn btn-primary`,disabled:!j.form.product_id||!j.form.warehouse_id},`保存`,8,Mi)])],32)):b(``,!0)])])])):b(``,!0),j.showMaterialConsumptionModal?(r(),S(`div`,{key:1,class:`modal-overlay`,onClick:t[51]||=h(e=>j.showMaterialConsumptionModal=!1,[`self`])},[l(`div`,Ni,[l(`div`,Pi,[t[167]||=l(`h3`,null,`添加物料消耗`,-1),l(`button`,{class:`modal-close`,onClick:t[49]||=e=>j.showMaterialConsumptionModal=!1},`×`)]),l(`div`,Fi,[l(`div`,{class:`form-group form-group-spaced`},[l(`button`,{type:`button`,class:`btn btn-secondary`,onClick:qa},`+ 添加物料`)]),j.materialConsumptionItems.length===0?(r(),S(`div`,Ii,[...t[168]||=[l(`div`,{class:`empty-icon`},`📦`,-1),l(`div`,{class:`empty-title`},`暂无物料`,-1),l(`div`,{class:`empty-desc`},`请点击"添加物料"按钮添加物料消耗明细`,-1)]])):(r(),S(`div`,Li,[(r(!0),S(p,null,n(j.materialConsumptionItems,(e,i)=>(r(),S(`div`,{key:`material-consumption-line-`+i,class:`purchase-order-item`},[l(`div`,Ri,[l(`div`,zi,[t[170]||=l(`label`,{class:`form-label`},`物料 *`,-1),a(l(`select`,{"onUpdate:modelValue":t=>e.material_id=t,class:`form-input`,required:``},[t[169]||=l(`option`,{value:``},`请选择物料`,-1),(r(!0),S(p,null,n(j.materials,e=>(r(),S(`option`,{key:`consumption-material-`+e.id,value:e.id},o(e.sku)+` - `+o(e.name),9,Vi))),128))],8,Bi),[[d,e.material_id,void 0,{number:!0}]])]),l(`div`,Hi,[l(`div`,Ui,[l(`div`,Wi,[t[171]||=l(`label`,{class:`form-label`},`数量 *`,-1),a(l(`input`,{"onUpdate:modelValue":t=>e.quantity=t,type:`number`,min:`1`,class:`form-input`,placeholder:`请输入数量`,required:``},null,8,Gi),[[f,e.quantity,void 0,{number:!0}]])])]),l(`div`,Ki,[l(`div`,qi,[t[172]||=l(`label`,{class:`form-label`},`单价`,-1),l(`div`,Ji,` ¥`+o((j.materials.find(t=>t.id===e.material_id)?.cost_price||0).toFixed(2)),1)])]),l(`div`,Yi,[l(`div`,Xi,[t[173]||=l(`label`,{class:`form-label`},`总价`,-1),l(`div`,Zi,` ¥`+o(((j.materials.find(t=>t.id===e.material_id)?.cost_price||0)*(e.quantity||0)).toFixed(2)),1)])]),l(`div`,Qi,[l(`div`,$i,[t[174]||=l(`label`,{class:`form-label`},`备注`,-1),a(l(`input`,{"onUpdate:modelValue":t=>e.remark=t,class:`form-input`,placeholder:`请输入备注`},null,8,ea),[[f,e.remark]])])]),l(`div`,ta,[l(`button`,{type:`button`,class:`btn btn-sm btn-danger`,onClick:e=>Ja(i)},`删除`,8,na)])])])]))),128))])),l(`div`,ra,[l(`button`,{type:`button`,class:`btn btn-secondary`,onClick:t[50]||=e=>j.showMaterialConsumptionModal=!1},`取消`),l(`button`,{type:`button`,class:`btn btn-primary`,onClick:Ya},`保存物料消耗`)])])])])):b(``,!0),j.showRestockModal?(r(),S(`div`,{key:2,class:`modal-overlay`,onClick:t[54]||=h(e=>j.showRestockModal=!1,[`self`])},[l(`div`,ia,[l(`div`,aa,[t[175]||=l(`h3`,null,`物料补货`,-1),l(`button`,{class:`modal-close`,onClick:t[52]||=e=>j.showRestockModal=!1},`×`)]),l(`div`,oa,[l(`div`,sa,[l(`div`,{class:`section-header`},[t[176]||=l(`h4`,null,`补货物料明细`,-1),l(`button`,{type:`button`,class:`btn btn-secondary`,onClick:Za},`+ 添加物料`)]),j.restockItems.length===0?(r(),S(`div`,ca,[...t[177]||=[l(`div`,{class:`empty-icon`},`📦`,-1),l(`div`,{class:`empty-desc`},`请点击"添加物料"按钮添加补货物料明细`,-1)]])):(r(),S(`div`,la,[(r(!0),S(p,null,n(j.restockItems,(e,i)=>(r(),S(`div`,{key:`restock-line-`+i,class:`purchase-order-item`},[l(`div`,ua,[l(`div`,da,[l(`div`,fa,[t[178]||=l(`label`,{class:`form-label`},[x(`物料 `),l(`span`,{class:`required`},`*`)],-1),a(l(`select`,{"onUpdate:modelValue":t=>e.material_id=t,class:`form-input`,required:``},[(r(!0),S(p,null,n(j.materials,e=>(r(),S(`option`,{key:`restock-material-`+e.id,value:e.id},o(e.sku)+` - `+o(e.name),9,ma))),128))],8,pa),[[d,e.material_id,void 0,{number:!0}]])])]),l(`div`,ha,[l(`div`,ga,[t[179]||=l(`label`,{class:`form-label`},[x(`数量 `),l(`span`,{class:`required`},`*`)],-1),a(l(`input`,{"onUpdate:modelValue":t=>e.quantity=t,type:`number`,class:`form-input`,min:`1`,step:`1`,required:``},null,8,_a),[[f,e.quantity,void 0,{number:!0}]])])]),l(`div`,va,[l(`div`,ya,[t[180]||=l(`label`,{class:`form-label`},`单价`,-1),a(l(`input`,{"onUpdate:modelValue":t=>e.unit_price=t,type:`number`,class:`form-input`,min:`0`,step:`0.01`},null,8,ba),[[f,e.unit_price,void 0,{number:!0}]])])]),l(`div`,xa,[l(`div`,Sa,[t[181]||=l(`label`,{class:`form-label`},`总价`,-1),l(`div`,Ca,` ¥`+o(((e.unit_price||0)*(e.quantity||0)).toFixed(2)),1)])]),l(`div`,wa,[l(`div`,Ta,[t[182]||=l(`label`,{class:`form-label`},`备注`,-1),a(l(`input`,{"onUpdate:modelValue":t=>e.remark=t,class:`form-input`,placeholder:`请输入备注`},null,8,Ea),[[f,e.remark]])])]),l(`div`,Da,[l(`button`,{type:`button`,class:`btn btn-sm btn-danger`,onClick:e=>Qa(i)},`删除`,8,Oa)])])]))),128))]))])]),l(`div`,ka,[l(`button`,{type:`button`,class:`btn btn-secondary`,onClick:t[53]||=e=>j.showRestockModal=!1},`取消`),l(`button`,{type:`button`,class:`btn btn-primary`,onClick:$a},`创建采购订单`)])])])):b(``,!0)]))}}),[[`__scopeId`,`data-v-15993ef5`]]);export{E as default};
\ No newline at end of file
diff --git a/static/assets/LoginView-CykA-lJR.js b/static/assets/LoginView-DpK1KsR0.js
similarity index 96%
rename from static/assets/LoginView-CykA-lJR.js
rename to static/assets/LoginView-DpK1KsR0.js
index d29507a..bff4fb0 100644
--- a/static/assets/LoginView-CykA-lJR.js
+++ b/static/assets/LoginView-DpK1KsR0.js
@@ -1 +1 @@
-import{E as e,O as t,P as n,S as r,_ as i,a,f as o,k as s,l as c,m as l,n as u,o as d,t as f,v as p,y as m}from"./index-DkoUSxK0.js";var h={class:`login-container`},g={class:`login-card`},_={class:`form-group`},v={class:`form-group`},y={key:0,class:`form-error`},b=[`disabled`],x=f(r({__name:`LoginView`,setup(r){let f=c(),x=s({username:``,password:``,error:``,loading:!1}),S=async()=>{x.error=``,x.loading=!0;try{let e=await d(`/api/auth/login`,{method:`POST`,body:JSON.stringify({username:x.username,password:x.password})});a(e.access_token,e.user),u(`登录成功`,`success`),f.push(`/`)}catch(e){x.error=e.message||`登录失败`}finally{x.loading=!1}};return(r,a)=>(e(),m(`div`,h,[i(`div`,g,[a[4]||=i(`div`,{class:`login-header`},[i(`div`,{class:`login-logo`},`G`),i(`h1`,{class:`login-title`},`Gemold`),i(`p`,{class:`login-subtitle`},`模具制造管理系统`)],-1),i(`form`,{onSubmit:l(S,[`prevent`])},[i(`div`,_,[a[2]||=i(`label`,{class:`form-label`},`用户名`,-1),t(i(`input`,{"onUpdate:modelValue":a[0]||=e=>x.username=e,type:`text`,class:`form-input`,placeholder:`请输入用户名`,required:``},null,512),[[o,x.username]])]),i(`div`,v,[a[3]||=i(`label`,{class:`form-label`},`密码`,-1),t(i(`input`,{"onUpdate:modelValue":a[1]||=e=>x.password=e,type:`password`,class:`form-input`,placeholder:`请输入密码`,required:``},null,512),[[o,x.password]])]),x.error?(e(),m(`div`,y,n(x.error),1)):p(``,!0),i(`button`,{type:`submit`,class:`btn btn-primary w-full mt-4`,disabled:x.loading},n(x.loading?`登录中...`:`登录`),9,b)],32)])]))}}),[[`__scopeId`,`data-v-792eed9c`]]);export{x as default};
\ No newline at end of file
+import{E as e,O as t,P as n,S as r,_ as i,a,f as o,k as s,l as c,m as l,n as u,o as d,t as f,v as p,y as m}from"./index-B-OcU2wj.js";var h={class:`login-container`},g={class:`login-card`},_={class:`form-group`},v={class:`form-group`},y={key:0,class:`form-error`},b=[`disabled`],x=f(r({__name:`LoginView`,setup(r){let f=c(),x=s({username:``,password:``,error:``,loading:!1}),S=async()=>{x.error=``,x.loading=!0;try{let e=await d(`/api/auth/login`,{method:`POST`,body:JSON.stringify({username:x.username,password:x.password})});a(e.access_token,e.user),u(`登录成功`,`success`),f.push(`/`)}catch(e){x.error=e.message||`登录失败`}finally{x.loading=!1}};return(r,a)=>(e(),m(`div`,h,[i(`div`,g,[a[4]||=i(`div`,{class:`login-header`},[i(`div`,{class:`login-logo`},`G`),i(`h1`,{class:`login-title`},`Gemold`),i(`p`,{class:`login-subtitle`},`模具制造管理系统`)],-1),i(`form`,{onSubmit:l(S,[`prevent`])},[i(`div`,_,[a[2]||=i(`label`,{class:`form-label`},`用户名`,-1),t(i(`input`,{"onUpdate:modelValue":a[0]||=e=>x.username=e,type:`text`,class:`form-input`,placeholder:`请输入用户名`,required:``},null,512),[[o,x.username]])]),i(`div`,v,[a[3]||=i(`label`,{class:`form-label`},`密码`,-1),t(i(`input`,{"onUpdate:modelValue":a[1]||=e=>x.password=e,type:`password`,class:`form-input`,placeholder:`请输入密码`,required:``},null,512),[[o,x.password]])]),x.error?(e(),m(`div`,y,n(x.error),1)):p(``,!0),i(`button`,{type:`submit`,class:`btn btn-primary w-full mt-4`,disabled:x.loading},n(x.loading?`登录中...`:`登录`),9,b)],32)])]))}}),[[`__scopeId`,`data-v-792eed9c`]]);export{x as default};
\ No newline at end of file
diff --git a/static/assets/MoldInsightView-cEjZOM14.js b/static/assets/MoldInsightView-BG0m6f4M.js
similarity index 99%
rename from static/assets/MoldInsightView-cEjZOM14.js
rename to static/assets/MoldInsightView-BG0m6f4M.js
index 16addde..00b2897 100644
--- a/static/assets/MoldInsightView-cEjZOM14.js
+++ b/static/assets/MoldInsightView-BG0m6f4M.js
@@ -1 +1 @@
-import{A as e,D as t,E as n,M as r,N as ee,O as i,P as a,S as o,_ as s,b as c,d as te,f as ne,h as l,i as re,j as u,k as ie,l as ae,m as d,n as f,o as p,r as m,s as oe,v as h,w as se,y as g}from"./index-DkoUSxK0.js";import{a as _,i as v,r as y}from"./utils-COFIQvWo.js";var b={class:`page-container`},x={class:`upload-layout`},S={class:`upload-main-card`},C={key:0,class:`file-info`},w={class:`file-name`},T={class:`file-size`},E={key:1,class:`error-message`},D={key:2,class:`progress-bar`},O={class:`upload-side-card`},k={class:`material-panel compact-panel`},A={class:`form-group`},j={class:`advanced-params`},M={class:`advanced-params-body`},N={class:`advanced-param-grid`},P={class:`form-label`},F={class:`param-input-row`},I=[`onUpdate:modelValue`,`min`,`max`,`step`],L={class:`param-unit`},R={class:`param-meta-row`},z={class:`range-value`},B={class:`range-value`},V={class:`param-hint`},H=[`disabled`],U={key:1,class:`inline-note`},ce={key:0,class:`history-collapsible section`},W={class:`history-summary`},G={class:`table-container`},le={class:`data-table`},ue={class:`badge badge-info`},de={class:`action-buttons`},fe=[`onClick`],pe=[`onClick`,`title`],me={key:0,class:`history-detail-row`},he={colspan:`6`},ge={class:`history-dropdown`},_e={class:`data-table inner-table`},ve=[`onClick`],K=o({__name:`MoldInsightView`,setup(o){let K=ae(),q=oe(),J=e(null),Y=ie({selectedFile:null,selectedMaterial:`ABS`,moldParams:{draftAngle:2,shrinkageRate:.5,partingPrecision:.1,cavityMatch:95},uploading:!1,error:``,currentTask:null,task:null,polling:!1,dragOver:!1,progress:0,history:null,expandedFiles:{}}),X=async()=>{try{Y.history=await p(`/api/history`)}catch(e){console.error(`加载历史记录失败:`,e)}},Z=async e=>{if(Y.expandedFiles[e])Y.expandedFiles[e]=null;else try{let t=await p(`/api/history/${encodeURIComponent(e)}`);Y.expandedFiles[e]=t}catch(e){m(e,`加载文件历史`)}},Q=e=>{K.push(`/moldinsight/result/${e.task_id}`)},ye=e=>{let t=e.target.files?.[0];t&&$(t)},$=e=>{let t=e.name.toLowerCase();if(!t.endsWith(`.stp`)&&!t.endsWith(`.step`)){Y.error=`请选择 STP 或 STEP 格式文件`,Y.selectedFile=null;return}if(e.size>100*1024*1024){Y.error=`文件大小不能超过 100MB`,Y.selectedFile=null;return}Y.error=``,Y.selectedFile=e,f(`已选择文件: ${e.name}`,`success`)},be=e=>{e.preventDefault(),Y.dragOver=!1;let t=e.dataTransfer?.files;t&&t.length>0&&$(t[0])},xe=async()=>{if(!Y.selectedFile)return;if(!q.token){Y.error=`请先登录后再上传文件`,f(`请先登录`,`warning`),K.push(`/login`);return}if(q.token===`demo`){Y.error=`演示模式不支持文件上传,请使用完整账户登录`,f(`演示模式不支持上传`,`warning`);return}Y.uploading=!0,Y.error=``,Y.progress=0;let e=new FormData;e.append(`file`,Y.selectedFile),e.append(`material`,Y.selectedMaterial),e.append(`draft_angle`,String(Y.moldParams.draftAngle)),e.append(`shrinkage_rate`,String(Y.moldParams.shrinkageRate)),e.append(`parting_precision`,String(Y.moldParams.partingPrecision)),e.append(`cavity_match`,String(Y.moldParams.cavityMatch));try{let t=await fetch(`/api/upload`,{method:`POST`,headers:{Authorization:`Bearer ${q.token}`},body:e});if(t.status===401){re(),Y.error=`登录已过期,请重新登录`,f(`登录已过期,请重新登录`,`warning`),K.push(`/login`);return}if(!t.ok)throw Error(`上传失败: ${t.status}`);let n=await t.json();Y.currentTask={task_id:n.task_id,status:`processing`,filename:n.file_info?.filename},f(`文件上传成功,开始分析...`,`success`),Se(n.task_id)}catch(e){Y.error=m(e,`文件上传`)}finally{Y.uploading=!1}},Se=async e=>{console.log(`[Polling] 开始轮询任务:`,e),Y.polling=!0,Y.progress=10;let t=0,n=async()=>{try{t++,Y.progress=Math.min(90,10+t*.5);let r=await p(`/api/status/${e}`,{method:`POST`});if(Y.currentTask=r,Y.task=r,r.status===`completed`){Y.polling=!1,Y.progress=100,f(`分析完成`,`success`),X(),K.push(`/moldinsight/result/${e}`);return}if(r.status===`failed`){Y.polling=!1,Y.error=r.error||`分析失败`,f(`分析失败`,`error`);return}t<300&&setTimeout(n,2e3)}catch(e){Y.polling=!1,Y.error=m(e,`轮询状态`)}};n()},Ce=[{key:`draftAngle`,label:`拔模角`,unit:`°`,min:1,max:10,step:.5,defaultValue:2,hint:`常规注塑件建议从 1.5° 到 3° 起步`},{key:`shrinkageRate`,label:`收缩率`,unit:`%`,min:.5,max:3,step:.1,defaultValue:.5,hint:`按材料牌号校核,默认值用于首轮方案评估`},{key:`partingPrecision`,label:`分型精度`,unit:`mm`,min:.01,max:1,step:.01,defaultValue:.1,hint:`用于控制分型面拟合与边界容差`},{key:`cavityMatch`,label:`型腔匹配度`,unit:`%`,min:80,max:100,step:1,defaultValue:95,hint:`数值越高越偏向紧配合与严格封合`}];return se(()=>{if(!q.user){K.push(`/login`);return}X()}),(e,o)=>(n(),g(`div`,b,[o[15]||=c(`
注塑模 STP 分析
上传 STEP/STP 产品件,完成自动分模、工程建议与导出
输入
STEP/STP 产品件,面向注塑模主流程
输出
分模方案、DFM 风险、注塑模系统摘要与 CAD 导出
目标
先确认推荐方案,再进入导出与 CAM 准备
`,2),s(`div`,x,[s(`div`,S,[o[7]||=s(`h2`,{class:`section-title`},`1. 上传产品件`,-1),s(`div`,{class:r([`upload-zone`,{"drag-over":Y.dragOver}]),onDragover:o[0]||=d(e=>Y.dragOver=!0,[`prevent`]),onDragleave:o[1]||=d(e=>Y.dragOver=!1,[`prevent`]),onDrop:be,onClick:o[2]||=e=>J.value?.click()},[s(`input`,{ref_key:`fileInput`,ref:J,type:`file`,accept:`.stp,.step`,onChange:ye,hidden:``},null,544),o[5]||=s(`div`,{class:`upload-icon`},`📁`,-1),o[6]||=s(`div`,{class:`upload-text`},[s(`span`,{class:`upload-title`},`点击选择或拖拽 STP/STEP 文件`),s(`span`,{class:`upload-hint`},`支持注塑模产品件分析,最大 100MB`)],-1)],34),Y.selectedFile?(n(),g(`div`,C,[s(`span`,w,a(Y.selectedFile.name),1),s(`span`,T,a(u(v)(Y.selectedFile.size)),1),s(`button`,{class:`btn-clear`,onClick:o[3]||=e=>Y.selectedFile=null,title:`清除文件`},`×`)])):h(``,!0),Y.error?(n(),g(`div`,E,a(Y.error),1)):h(``,!0),Y.polling?(n(),g(`div`,D,[s(`div`,{class:`progress-fill`,style:ee({width:Y.progress+`%`})},null,4)])):h(``,!0)]),s(`div`,O,[o[12]||=s(`h2`,{class:`section-title`},`2. 注塑模参数`,-1),s(`div`,k,[s(`div`,A,[o[9]||=s(`label`,{class:`form-label`},`产品材料`,-1),i(s(`select`,{"onUpdate:modelValue":o[4]||=e=>Y.selectedMaterial=e,class:`form-select`},[...o[8]||=[c(``,8)]],512),[[te,Y.selectedMaterial]])]),s(`details`,j,[o[11]||=s(`summary`,null,`高级工艺参数`,-1),s(`div`,M,[o[10]||=s(`div`,{class:`inline-note`},`默认值适用于多数注塑件;仅在已知工艺约束时再调整。`,-1),s(`div`,N,[(n(),g(l,null,t(Ce,e=>s(`div`,{class:`param-input-card`,key:e.key},[s(`label`,P,a(e.label),1),s(`div`,F,[i(s(`input`,{type:`number`,class:`form-input param-number-input`,"onUpdate:modelValue":t=>Y.moldParams[e.key]=t,min:e.min,max:e.max,step:e.step},null,8,I),[[ne,Y.moldParams[e.key],void 0,{number:!0}]]),s(`span`,L,a(e.unit),1)]),s(`div`,R,[s(`span`,z,`默认 `+a(e.defaultValue)+a(e.unit),1),s(`span`,B,`范围 `+a(e.min)+` - `+a(e.max)+a(e.unit),1)]),s(`div`,V,a(e.hint),1)])),64))])])])]),Y.selectedFile?(n(),g(`button`,{key:0,class:`btn-primary upload-submit-btn`,onClick:xe,disabled:Y.uploading||Y.polling},a(Y.uploading?`上传中...`:Y.polling?`分析中...`:`3. 开始注塑模分析`),9,H)):(n(),g(`div`,U,`先选择 STP 文件,再填写材料并开始分析。`))])]),Y.history?.files?.length?(n(),g(`details`,ce,[s(`summary`,W,`分析历史(`+a(Y.history.files.length)+` 个文件)`,1),s(`div`,G,[s(`table`,le,[o[14]||=s(`thead`,null,[s(`tr`,null,[s(`th`,null,`文件名`),s(`th`,null,`上传次数`),s(`th`,null,`文件大小`),s(`th`,null,`最新状态`),s(`th`,null,`最新分析时间`),s(`th`,null,`操作`)])],-1),s(`tbody`,null,[(n(!0),g(l,null,t(Y.history.files,e=>(n(),g(l,{key:e.filename},[s(`tr`,null,[s(`td`,null,a(e.filename),1),s(`td`,null,[s(`span`,ue,a(e.upload_count)+` 次`,1)]),s(`td`,null,a(u(v)(e.file_size)),1),s(`td`,null,[s(`span`,{class:r([`badge`,e.latest_status===`completed`?`badge-success`:e.latest_status===`failed`?`badge-error`:`badge-warning`])},a(e.latest_status),3)]),s(`td`,null,a(u(y)(e.latest_upload_time)),1),s(`td`,null,[s(`div`,de,[e.latest_status===`completed`?(n(),g(`button`,{key:0,class:`btn-sm btn-primary`,onClick:t=>Q({task_id:e.latest_task_id})},` 查看最新 `,8,fe)):h(``,!0),s(`button`,{class:`btn-sm btn-icon`,onClick:t=>Z(e.filename),title:Y.expandedFiles[e.filename]?`收起`:`展开历史记录`},[s(`span`,{class:r([`dropdown-icon`,{expanded:Y.expandedFiles[e.filename]}])},`▼`,2)],8,pe)])])]),Y.expandedFiles[e.filename]?(n(),g(`tr`,me,[s(`td`,he,[s(`div`,ge,[s(`table`,_e,[o[13]||=s(`thead`,null,[s(`tr`,null,[s(`th`,null,`上传时间`),s(`th`,null,`文件大小`),s(`th`,null,`状态`),s(`th`,null,`体积 (mm³)`),s(`th`,null,`表面积 (mm²)`),s(`th`,null,`重量 (g)`),s(`th`,null,`操作`)])],-1),s(`tbody`,null,[(n(!0),g(l,null,t(Y.expandedFiles[e.filename],e=>(n(),g(`tr`,{key:e.id},[s(`td`,null,a(u(y)(e.upload_time)),1),s(`td`,null,a(u(v)(e.file_size)),1),s(`td`,null,[s(`span`,{class:r([`badge`,e.status===`completed`?`badge-success`:e.status===`failed`?`badge-error`:`badge-warning`])},a(e.status),3)]),s(`td`,null,a(e.volume?u(_)(e.volume):`-`),1),s(`td`,null,a(e.surface_area?u(_)(e.surface_area):`-`),1),s(`td`,null,a(e.product_weight?e.product_weight.toFixed(2):`-`),1),s(`td`,null,[e.has_analysis?(n(),g(`button`,{key:0,class:`btn-sm btn-primary`,onClick:t=>Q(e)},` 查看详情 `,8,ve)):h(``,!0)])]))),128))])])])])])):h(``,!0)],64))),128))])])])])):h(``,!0)]))}});export{K as default};
\ No newline at end of file
+import{A as e,D as t,E as n,M as r,N as ee,O as i,P as a,S as o,_ as s,b as c,d as te,f as ne,h as l,i as re,j as u,k as ie,l as ae,m as d,n as f,o as p,r as m,s as oe,v as h,w as se,y as g}from"./index-B-OcU2wj.js";import{a as _,i as v,r as y}from"./utils-COFIQvWo.js";var b={class:`page-container`},x={class:`upload-layout`},S={class:`upload-main-card`},C={key:0,class:`file-info`},w={class:`file-name`},T={class:`file-size`},E={key:1,class:`error-message`},D={key:2,class:`progress-bar`},O={class:`upload-side-card`},k={class:`material-panel compact-panel`},A={class:`form-group`},j={class:`advanced-params`},M={class:`advanced-params-body`},N={class:`advanced-param-grid`},P={class:`form-label`},F={class:`param-input-row`},I=[`onUpdate:modelValue`,`min`,`max`,`step`],L={class:`param-unit`},R={class:`param-meta-row`},z={class:`range-value`},B={class:`range-value`},V={class:`param-hint`},H=[`disabled`],U={key:1,class:`inline-note`},ce={key:0,class:`history-collapsible section`},W={class:`history-summary`},G={class:`table-container`},le={class:`data-table`},ue={class:`badge badge-info`},de={class:`action-buttons`},fe=[`onClick`],pe=[`onClick`,`title`],me={key:0,class:`history-detail-row`},he={colspan:`6`},ge={class:`history-dropdown`},_e={class:`data-table inner-table`},ve=[`onClick`],K=o({__name:`MoldInsightView`,setup(o){let K=ae(),q=oe(),J=e(null),Y=ie({selectedFile:null,selectedMaterial:`ABS`,moldParams:{draftAngle:2,shrinkageRate:.5,partingPrecision:.1,cavityMatch:95},uploading:!1,error:``,currentTask:null,task:null,polling:!1,dragOver:!1,progress:0,history:null,expandedFiles:{}}),X=async()=>{try{Y.history=await p(`/api/history`)}catch(e){console.error(`加载历史记录失败:`,e)}},Z=async e=>{if(Y.expandedFiles[e])Y.expandedFiles[e]=null;else try{let t=await p(`/api/history/${encodeURIComponent(e)}`);Y.expandedFiles[e]=t}catch(e){m(e,`加载文件历史`)}},Q=e=>{K.push(`/moldinsight/result/${e.task_id}`)},ye=e=>{let t=e.target.files?.[0];t&&$(t)},$=e=>{let t=e.name.toLowerCase();if(!t.endsWith(`.stp`)&&!t.endsWith(`.step`)){Y.error=`请选择 STP 或 STEP 格式文件`,Y.selectedFile=null;return}if(e.size>100*1024*1024){Y.error=`文件大小不能超过 100MB`,Y.selectedFile=null;return}Y.error=``,Y.selectedFile=e,f(`已选择文件: ${e.name}`,`success`)},be=e=>{e.preventDefault(),Y.dragOver=!1;let t=e.dataTransfer?.files;t&&t.length>0&&$(t[0])},xe=async()=>{if(!Y.selectedFile)return;if(!q.token){Y.error=`请先登录后再上传文件`,f(`请先登录`,`warning`),K.push(`/login`);return}if(q.token===`demo`){Y.error=`演示模式不支持文件上传,请使用完整账户登录`,f(`演示模式不支持上传`,`warning`);return}Y.uploading=!0,Y.error=``,Y.progress=0;let e=new FormData;e.append(`file`,Y.selectedFile),e.append(`material`,Y.selectedMaterial),e.append(`draft_angle`,String(Y.moldParams.draftAngle)),e.append(`shrinkage_rate`,String(Y.moldParams.shrinkageRate)),e.append(`parting_precision`,String(Y.moldParams.partingPrecision)),e.append(`cavity_match`,String(Y.moldParams.cavityMatch));try{let t=await fetch(`/api/upload`,{method:`POST`,headers:{Authorization:`Bearer ${q.token}`},body:e});if(t.status===401){re(),Y.error=`登录已过期,请重新登录`,f(`登录已过期,请重新登录`,`warning`),K.push(`/login`);return}if(!t.ok)throw Error(`上传失败: ${t.status}`);let n=await t.json();Y.currentTask={task_id:n.task_id,status:`processing`,filename:n.file_info?.filename},f(`文件上传成功,开始分析...`,`success`),Se(n.task_id)}catch(e){Y.error=m(e,`文件上传`)}finally{Y.uploading=!1}},Se=async e=>{console.log(`[Polling] 开始轮询任务:`,e),Y.polling=!0,Y.progress=10;let t=0,n=async()=>{try{t++,Y.progress=Math.min(90,10+t*.5);let r=await p(`/api/status/${e}`,{method:`POST`});if(Y.currentTask=r,Y.task=r,r.status===`completed`){Y.polling=!1,Y.progress=100,f(`分析完成`,`success`),X(),K.push(`/moldinsight/result/${e}`);return}if(r.status===`failed`){Y.polling=!1,Y.error=r.error||`分析失败`,f(`分析失败`,`error`);return}t<300&&setTimeout(n,2e3)}catch(e){Y.polling=!1,Y.error=m(e,`轮询状态`)}};n()},Ce=[{key:`draftAngle`,label:`拔模角`,unit:`°`,min:1,max:10,step:.5,defaultValue:2,hint:`常规注塑件建议从 1.5° 到 3° 起步`},{key:`shrinkageRate`,label:`收缩率`,unit:`%`,min:.5,max:3,step:.1,defaultValue:.5,hint:`按材料牌号校核,默认值用于首轮方案评估`},{key:`partingPrecision`,label:`分型精度`,unit:`mm`,min:.01,max:1,step:.01,defaultValue:.1,hint:`用于控制分型面拟合与边界容差`},{key:`cavityMatch`,label:`型腔匹配度`,unit:`%`,min:80,max:100,step:1,defaultValue:95,hint:`数值越高越偏向紧配合与严格封合`}];return se(()=>{if(!q.user){K.push(`/login`);return}X()}),(e,o)=>(n(),g(`div`,b,[o[15]||=c(`
注塑模 STP 分析
上传 STEP/STP 产品件,完成自动分模、工程建议与导出
输入
STEP/STP 产品件,面向注塑模主流程
输出
分模方案、DFM 风险、注塑模系统摘要与 CAD 导出
目标
先确认推荐方案,再进入导出与 CAM 准备
`,2),s(`div`,x,[s(`div`,S,[o[7]||=s(`h2`,{class:`section-title`},`1. 上传产品件`,-1),s(`div`,{class:r([`upload-zone`,{"drag-over":Y.dragOver}]),onDragover:o[0]||=d(e=>Y.dragOver=!0,[`prevent`]),onDragleave:o[1]||=d(e=>Y.dragOver=!1,[`prevent`]),onDrop:be,onClick:o[2]||=e=>J.value?.click()},[s(`input`,{ref_key:`fileInput`,ref:J,type:`file`,accept:`.stp,.step`,onChange:ye,hidden:``},null,544),o[5]||=s(`div`,{class:`upload-icon`},`📁`,-1),o[6]||=s(`div`,{class:`upload-text`},[s(`span`,{class:`upload-title`},`点击选择或拖拽 STP/STEP 文件`),s(`span`,{class:`upload-hint`},`支持注塑模产品件分析,最大 100MB`)],-1)],34),Y.selectedFile?(n(),g(`div`,C,[s(`span`,w,a(Y.selectedFile.name),1),s(`span`,T,a(u(v)(Y.selectedFile.size)),1),s(`button`,{class:`btn-clear`,onClick:o[3]||=e=>Y.selectedFile=null,title:`清除文件`},`×`)])):h(``,!0),Y.error?(n(),g(`div`,E,a(Y.error),1)):h(``,!0),Y.polling?(n(),g(`div`,D,[s(`div`,{class:`progress-fill`,style:ee({width:Y.progress+`%`})},null,4)])):h(``,!0)]),s(`div`,O,[o[12]||=s(`h2`,{class:`section-title`},`2. 注塑模参数`,-1),s(`div`,k,[s(`div`,A,[o[9]||=s(`label`,{class:`form-label`},`产品材料`,-1),i(s(`select`,{"onUpdate:modelValue":o[4]||=e=>Y.selectedMaterial=e,class:`form-select`},[...o[8]||=[c(``,8)]],512),[[te,Y.selectedMaterial]])]),s(`details`,j,[o[11]||=s(`summary`,null,`高级工艺参数`,-1),s(`div`,M,[o[10]||=s(`div`,{class:`inline-note`},`默认值适用于多数注塑件;仅在已知工艺约束时再调整。`,-1),s(`div`,N,[(n(),g(l,null,t(Ce,e=>s(`div`,{class:`param-input-card`,key:e.key},[s(`label`,P,a(e.label),1),s(`div`,F,[i(s(`input`,{type:`number`,class:`form-input param-number-input`,"onUpdate:modelValue":t=>Y.moldParams[e.key]=t,min:e.min,max:e.max,step:e.step},null,8,I),[[ne,Y.moldParams[e.key],void 0,{number:!0}]]),s(`span`,L,a(e.unit),1)]),s(`div`,R,[s(`span`,z,`默认 `+a(e.defaultValue)+a(e.unit),1),s(`span`,B,`范围 `+a(e.min)+` - `+a(e.max)+a(e.unit),1)]),s(`div`,V,a(e.hint),1)])),64))])])])]),Y.selectedFile?(n(),g(`button`,{key:0,class:`btn-primary upload-submit-btn`,onClick:xe,disabled:Y.uploading||Y.polling},a(Y.uploading?`上传中...`:Y.polling?`分析中...`:`3. 开始注塑模分析`),9,H)):(n(),g(`div`,U,`先选择 STP 文件,再填写材料并开始分析。`))])]),Y.history?.files?.length?(n(),g(`details`,ce,[s(`summary`,W,`分析历史(`+a(Y.history.files.length)+` 个文件)`,1),s(`div`,G,[s(`table`,le,[o[14]||=s(`thead`,null,[s(`tr`,null,[s(`th`,null,`文件名`),s(`th`,null,`上传次数`),s(`th`,null,`文件大小`),s(`th`,null,`最新状态`),s(`th`,null,`最新分析时间`),s(`th`,null,`操作`)])],-1),s(`tbody`,null,[(n(!0),g(l,null,t(Y.history.files,e=>(n(),g(l,{key:e.filename},[s(`tr`,null,[s(`td`,null,a(e.filename),1),s(`td`,null,[s(`span`,ue,a(e.upload_count)+` 次`,1)]),s(`td`,null,a(u(v)(e.file_size)),1),s(`td`,null,[s(`span`,{class:r([`badge`,e.latest_status===`completed`?`badge-success`:e.latest_status===`failed`?`badge-error`:`badge-warning`])},a(e.latest_status),3)]),s(`td`,null,a(u(y)(e.latest_upload_time)),1),s(`td`,null,[s(`div`,de,[e.latest_status===`completed`?(n(),g(`button`,{key:0,class:`btn-sm btn-primary`,onClick:t=>Q({task_id:e.latest_task_id})},` 查看最新 `,8,fe)):h(``,!0),s(`button`,{class:`btn-sm btn-icon`,onClick:t=>Z(e.filename),title:Y.expandedFiles[e.filename]?`收起`:`展开历史记录`},[s(`span`,{class:r([`dropdown-icon`,{expanded:Y.expandedFiles[e.filename]}])},`▼`,2)],8,pe)])])]),Y.expandedFiles[e.filename]?(n(),g(`tr`,me,[s(`td`,he,[s(`div`,ge,[s(`table`,_e,[o[13]||=s(`thead`,null,[s(`tr`,null,[s(`th`,null,`上传时间`),s(`th`,null,`文件大小`),s(`th`,null,`状态`),s(`th`,null,`体积 (mm³)`),s(`th`,null,`表面积 (mm²)`),s(`th`,null,`重量 (g)`),s(`th`,null,`操作`)])],-1),s(`tbody`,null,[(n(!0),g(l,null,t(Y.expandedFiles[e.filename],e=>(n(),g(`tr`,{key:e.id},[s(`td`,null,a(u(y)(e.upload_time)),1),s(`td`,null,a(u(v)(e.file_size)),1),s(`td`,null,[s(`span`,{class:r([`badge`,e.status===`completed`?`badge-success`:e.status===`failed`?`badge-error`:`badge-warning`])},a(e.status),3)]),s(`td`,null,a(e.volume?u(_)(e.volume):`-`),1),s(`td`,null,a(e.surface_area?u(_)(e.surface_area):`-`),1),s(`td`,null,a(e.product_weight?e.product_weight.toFixed(2):`-`),1),s(`td`,null,[e.has_analysis?(n(),g(`button`,{key:0,class:`btn-sm btn-primary`,onClick:t=>Q(e)},` 查看详情 `,8,ve)):h(``,!0)])]))),128))])])])])])):h(``,!0)],64))),128))])])])])):h(``,!0)]))}});export{K as default};
\ No newline at end of file
diff --git a/static/assets/ReleaseView-B2N9tGxj.js b/static/assets/ReleaseView-CCn0R8dT.js
similarity index 79%
rename from static/assets/ReleaseView-B2N9tGxj.js
rename to static/assets/ReleaseView-CCn0R8dT.js
index 544a732..f049090 100644
--- a/static/assets/ReleaseView-B2N9tGxj.js
+++ b/static/assets/ReleaseView-CCn0R8dT.js
@@ -1 +1 @@
-import{E as e,_ as t,t as n,y as r}from"./index-DkoUSxK0.js";var i={};function a(n,i){return e(),r(`div`,null,[...i[0]||=[t(`div`,{class:`page-header`},[t(`h1`,{class:`page-title`},`灰度发布与回滚`),t(`p`,{class:`page-subtitle`},`迁移中...`)],-1)]])}var o=n(i,[[`render`,a]]);export{o as default};
\ No newline at end of file
+import{E as e,_ as t,t as n,y as r}from"./index-B-OcU2wj.js";var i={};function a(n,i){return e(),r(`div`,null,[...i[0]||=[t(`div`,{class:`page-header`},[t(`h1`,{class:`page-title`},`灰度发布与回滚`),t(`p`,{class:`page-subtitle`},`迁移中...`)],-1)]])}var o=n(i,[[`render`,a]]);export{o as default};
\ No newline at end of file
diff --git a/static/assets/ResultView-eWADo3Sp.js b/static/assets/ResultView-RD_BPQTj.js
similarity index 99%
rename from static/assets/ResultView-eWADo3Sp.js
rename to static/assets/ResultView-RD_BPQTj.js
index c3cae7b..c1c50c2 100644
--- a/static/assets/ResultView-eWADo3Sp.js
+++ b/static/assets/ResultView-RD_BPQTj.js
@@ -1 +1 @@
-import{D as e,E as t,M as n,N as r,O as i,P as a,S as o,_ as s,b as ee,c,d as l,g as u,h as d,j as f,k as te,l as ne,n as p,o as m,r as re,s as ie,u as ae,v as h,w as oe,x as se,y as g}from"./index-DkoUSxK0.js";import{a as _}from"./utils-COFIQvWo.js";var ce={class:`page-container`},le={class:`page-header`},ue={key:0,class:`loading-state`},de={key:1,class:`error-state`},fe={key:2,class:`result-container`},pe={class:`result-header`},me={class:`result-anchor-nav`},he=[`href`],ge={class:`result-grid result-priority-grid`},_e={class:`summary-header`},v={class:`badge badge-info`},y={class:`info-list`},b={class:`info-item`},x={class:`info-value`,style:{"font-weight":`600`,"font-size":`1.05rem`,color:`var(--text-primary)`}},S={class:`info-item`},C={class:`info-value`},w={class:`info-item`},T={class:`info-value`},E={class:`info-item`},D={class:`info-value`},O={class:`info-item`},k={class:`info-value`},A={class:`info-item`},j={class:`info-value`},M={class:`info-list`},N={class:`info-item`},P={class:`info-value`},F={class:`info-item`},I={class:`info-value`},ve={class:`info-item`},ye={class:`info-value`},be={class:`info-item`},xe={class:`info-value`},Se={class:`info-item`},Ce={class:`info-value`},we={key:1,class:`result-card result-card-highlight`},Te={class:`info-list`},Ee={class:`info-item`},De={class:`info-value`,style:{"font-weight":`500`}},Oe={key:0,class:`export-buttons-bar`,style:{display:`flex`,gap:`var(--space-2)`,"flex-wrap":`wrap`,"justify-content":`center`,padding:`var(--space-3) 0`}},ke={key:1,id:`preview-3d`,class:`viewer-section viewer-section-hero`},Ae={key:0,class:`inline-alert inline-alert-warning`,style:{"margin-bottom":`var(--space-3)`}},je={class:`inline-alert-message`},Me=[`src`],Ne={key:2,id:`preview-3d`,class:`viewer-section viewer-section-hero`},Pe={key:3,id:`candidate-schemes`,class:`viewer-section diagnostic-panel`,style:{"margin-top":`var(--space-3)`}},Fe={class:`result-card full-width diagnostic-panel-body`},Ie={class:`data-table`},Le=[`onClick`],Re={key:0,style:{color:`var(--primary-color)`,"font-weight":`600`}},ze={key:1,style:{color:`var(--warning-color)`,"font-weight":`600`}},Be={id:`ai-side-action`,class:`viewer-section`},Ve={class:`summary-header`},He={key:1,class:`badge badge-warning`},Ue={key:0,class:`result-grid`},We={class:`result-card result-card-highlight`},Ge={class:`info-list`},Ke={class:`info-item`},qe={class:`info-value`},Je={class:`info-item`},Ye={class:`info-value`},Xe={key:0,class:`info-item`},Ze={class:`info-value`},Qe={class:`info-item`},$e={class:`info-value`},et={class:`inline-note`,style:{"margin-top":`var(--space-2)`,"font-weight":`600`,"font-size":`1rem`,color:`var(--text-primary)`}},tt={class:`result-card`},nt={key:0},rt={class:`recommendations-list`},it={class:`recommendation-text`},at={key:1,style:{"margin-top":`var(--space-3)`}},ot={class:`recommendations-list`},st={class:`recommendation-text`},ct={key:2,style:{"margin-top":`var(--space-3)`}},L={class:`recommendations-list`},lt={class:`recommendation-text`},ut={key:1,class:`inline-alert inline-alert-warning`},dt={id:`export-cam`,class:`viewer-section`},ft={class:`result-card`,style:{"margin-bottom":`var(--space-4)`}},pt={class:`info-list`},mt={class:`info-item`},ht=[`value`],gt={class:`info-item`},_t=[`value`],vt={class:`info-item`},yt=[`value`],bt={class:`info-item`},xt={class:`checkbox-group`},St=[`disabled`],Ct={key:0,class:`inline-alert inline-alert-warning`},wt={class:`inline-alert-message`},Tt={key:1,class:`inline-alert inline-alert-warning`},Et={class:`result-grid`},Dt={class:`result-card`},Ot={class:`info-list`},kt={class:`info-item`},At={class:`info-value`},jt={class:`info-item`},Mt={class:`info-value`},Nt={class:`info-item`},Pt={class:`info-value`},Ft={class:`info-item`},It={class:`info-value`},Lt={class:`result-card`},Rt={class:`info-list`},zt={class:`info-item`},Bt={class:`info-value`},Vt={class:`info-item`},Ht={class:`info-value`},Ut={class:`result-card full-width`},Wt={class:`data-table`},Gt={class:`result-card full-width`},Kt={class:`recommendations-list`},qt={class:`recommendation-text`},Jt={key:4,id:`llm-report`,class:`viewer-section`},Yt={class:`summary-header`},Xt={key:0,class:`inline-note`,style:{"margin-bottom":`var(--space-4)`,"font-size":`0.95rem`,color:`var(--text-primary)`}},Zt={class:`result-grid`},Qt={key:0,class:`recommendations-list`},$t={class:`recommendation-text`},en={key:1,class:`data-table`},tn={key:2,class:`recommendations-list`},nn={class:`recommendation-text`},rn={key:3,class:`inline-note`},R=o({__name:`ResultView`,setup(o){let R=c(),z=ne(),B=ie(),V=te({task:null,loading:!0,error:``,selectedSchemeId:null,previewStatus:`idle`,camLoading:!1,camError:``,camPlan:null,camForm:{mold_steel:`P20`,surface_quality:`standard`,controller:`fanuc`,include_gcode:!1}}),an=[{value:`P20`,label:`P20`},{value:`718H`,label:`718H`},{value:`NAK80`,label:`NAK80`},{value:`S136`,label:`S136`},{value:`H13`,label:`H13`}],on=[{value:`standard`,label:`标准`},{value:`fine`,label:`精细`},{value:`mirror`,label:`镜面`}],sn=[{value:`fanuc`,label:`Fanuc`},{value:`siemens`,label:`Siemens`}],cn=async()=>{console.log(`[ResultView] loadTask 开始, taskId:`,R.params.taskId);try{V.task=await m(`/api/status/${R.params.taskId}`,{method:`POST`}),console.log(`任务数据:`,V.task),console.log(`key_info:`,V.task.key_info),console.log(`cavity_data:`,V.task.cavity_data),console.log(`analysis_result:`,V.task.analysis_result),console.log(`geometry_data:`,V.task.geometry_data),V.task?.best_scheme_id?V.selectedSchemeId=V.task.best_scheme_id:V.task?.candidate_schemes?.length&&(V.selectedSchemeId=V.task.candidate_schemes[0].scheme_id);let e=V.task?.cam_preferences||{};V.camForm.mold_steel=e.mold_steel||`P20`,V.camForm.surface_quality=e.surface_quality||`standard`,V.camForm.controller=e.controller||`fanuc`,V.camForm.include_gcode=!!e.include_gcode,V.previewStatus=`loading`}catch(e){V.error=re(e,`加载任务详情`)}finally{V.loading=!1}};oe(()=>{if(!B.user){z.push(`/login`);return}cn()});let H=u(()=>V.task?.candidate_schemes||[]);u(()=>H.value.length===1);let U=u(()=>H.value.length?H.value.find(e=>e.scheme_id===V.selectedSchemeId)||H.value[0]:null),W=u(()=>U.value?.cavity_data||V.task?.cavity_data||null),ln=u(()=>U.value?.key_info||V.task?.key_info||null),G=u(()=>U.value?.html_file||V.task?.html_file||``),K=u(()=>U.value?.dfm_violations||[]),un=u(()=>W.value?.injection_system||V.task?.plan_result?.injection_system||null),dn=u(()=>U.value?.side_actions||W.value?.side_actions||V.task?.side_actions||null),fn=e=>{let t=String(e||``).match(/\s*([\s\S]*?)\s*/);if(!t)return null;try{return JSON.parse(t[1])}catch(e){return console.warn(`AI 倒扣分析解析失败:`,e),null}},pn=e=>{let t=String(e||``).match(/\s*([\s\S]*?)\s*/);if(!t)return null;try{return JSON.parse(t[1])}catch(e){return console.warn(`LLM 设计报告解析失败:`,e),null}},q=(e,t=`ai`)=>{if(!e||typeof e!=`object`)return null;let n=[`required`,`not_required`,`manual_review`].includes(e.status)?e.status:`manual_review`,r=[`slider`,`lifter`,`mixed`,`none`,`manual_review`].includes(e.mechanism_recommendation)?e.mechanism_recommendation:`manual_review`,i=Number(e.confidence),a={required:`需要倒扣/抽芯`,not_required:`无需倒扣/抽芯`,manual_review:`需人工确认`};return{source:t,status:n,statusLabel:a[n],mechanismRecommendation:r,mechanismLabel:{slider:`优先滑块`,lifter:`优先斜顶`,mixed:`滑块 + 斜顶`,none:`无需侧向机构`,manual_review:`人工评审`}[r],confidence:Number.isFinite(i)?Math.max(0,Math.min(i,1)):null,conclusion:e.conclusion||a[n],summary:e.summary||``,reasons:Array.isArray(e.reasons)?e.reasons.filter(Boolean).slice(0,5):[],standardAdvice:Array.isArray(e.standard_advice)?e.standard_advice.filter(Boolean).slice(0,5):[],manualReviewItems:Array.isArray(e.manual_review_items)?e.manual_review_items.filter(Boolean).slice(0,4):[]}},mn=u(()=>{let e=dn.value;if(!e||typeof e!=`object`)return null;let t=e.summary||{},n=(e.slider_mechanisms||[]).length,r=(e.lifter_mechanisms||[]).length,i=n+r,a=n&&r?`mixed`:n?`slider`:r?`lifter`:`none`,o=i>0?`required`:t.total_undercut_faces===0?`not_required`:`manual_review`;return q({status:o,confidence:.55,conclusion:o===`required`?`规则分析判断当前产品需要倒扣/抽芯机构`:o===`not_required`?`规则分析未发现必须采用倒扣/抽芯机构的特征`:`当前规则结果不足以完成稳定判断,建议人工复核`,mechanism_recommendation:a===`none`?`none`:a,summary:o===`required`?`检测到 ${n} 个滑块需求、${r} 个斜顶需求,建议先按标准机构路线做结构评审。`:o===`not_required`?`当前方案未发现明显倒扣特征,可优先按常规模具结构推进。`:`现有数据可用于初筛,但不足以替代工程师对复杂倒扣的最终确认。`,reasons:[i>0?`规则分析识别出 ${i} 处侧向机构需求`:`规则分析未识别出明确侧向机构需求`,t.complexity?`当前复杂度判定为 ${t.complexity}`:`当前复杂度信息不足`,`当前倒扣方案若存在大行程滑块,优先按气动抽芯条件评估`].filter(Boolean),standard_advice:(e.recommendations||[]).slice(0,4),manual_review_items:[`结合 3D 预览复核倒扣是否可通过改产品取消`,`确认侧向机构与顶出、冷却、分型面是否存在干涉`]},`rules`)});u(()=>{let e={critical:0,high:0,medium:0,low:0};return(K.value||[]).forEach(t=>{let n=String(t.level||`medium`).toLowerCase();e[n]===void 0?e.medium+=1:e[n]+=1}),e});let J=u(()=>q(fn(V.task?.llm_report||``),`ai`)||mn.value),Y=u(()=>pn(V.task?.llm_report||``)),hn=u(()=>Y.value&&(Y.value.sections&&Y.value.sections.length>0||!!Y.value.overview)),gn=u(()=>(Y.value?.sections||[]).filter(e=>e.type===`issues`?e.items?.length>0:e.type===`params_table`?e.rows?.length>0:e.type===`recommendations`?e.items?.length>0:!0));u(()=>{let e=V.task?.stage_timings||{};return Object.entries(e).filter(([,e])=>typeof e==`number`).sort((e,t)=>t[1]-e[1])});let _n=u(()=>{let e={critical:0,high:1,medium:2,low:3};return[...V.task?.analysis_result?.design_recommendations||[]].sort((t,n)=>(e[t.priority]??99)-(e[n.priority]??99))});u(()=>_n.value[0]||null);let X=u(()=>K.value?.length||0),vn=u(()=>{let e=W.value?.mold_cavities?.cavity_count;if(typeof e==`number`)return e;let t=W.value?.mold_cavities||ln.value?.mold_cavities||{};return t.cavity_count||Object.keys(t).filter(e=>e.startsWith(`cavity_`)).length||1});u(()=>X.value?X.value>=4?`高风险`:X.value>=2?`中风险`:`低风险`:`低风险`);let yn=[{id:`candidate-schemes`,label:`方案`},{id:`preview-3d`,label:`预览`},{id:`ai-side-action`,label:`AI倒扣分析`},{id:`export-cam`,label:`CAM/CNC`},{id:`llm-report`,label:`设计报告`}],Z=e=>{e&&(V.selectedSchemeId=e),V.previewStatus=`loading`,V.camPlan=null,V.camError=``},bn=()=>{V.previewStatus=`loaded`},xn=()=>{V.previewStatus=`error`},Q=e=>{if(!e)return`N/A`;if(e.parting?.axis)return`${e.parting.axis} 轴`;let t=e.parting?.direction;return Array.isArray(t)?`[${t.map(e=>Number(e).toFixed(2)).join(`, `)}]`:`N/A`};u(()=>V.task?.analysis_result?.detected_features||[]);let Sn=async(e,t)=>{let n={};B.token&&(n.Authorization=`Bearer ${B.token}`);let r=await fetch(e,{headers:n});if(!r.ok)throw Error(`下载失败 (${r.status}): 无法下载,需要授权`);let i=await r.blob(),a=URL.createObjectURL(i),o=document.createElement(`a`);o.href=a,o.download=t,document.body.appendChild(o),o.click(),document.body.removeChild(o),URL.revokeObjectURL(a)},$=async e=>{try{let t=R.params.taskId,n=await m(`/api/export-mold`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({task_id:t,scheme_id:U.value?.scheme_id||V.selectedSchemeId,formats:[e],components:[`cavity`,`core`,`parting_surface`]})});if(n.status===`success`&&n.data.files){for(let e of n.data.files){let n=e.relative_path||(e.filepath?e.filepath.replace(/\\/g,`/`).split(`/`).slice(-2).join(`/`):``);await Sn(e.download_path||`/api/export-download/${encodeURI(n)}?task_id=${encodeURIComponent(t)}`,e.filename)}p(`已导出 ${n.data.files.length} 个 ${e.toUpperCase()} 文件`,`success`)}else n.data.errors&&n.data.errors.length>0&&p(`导出失败: ${n.data.errors[0]}`,`error`)}catch(e){p(`导出失败: ${e.message}`,`error`)}},Cn=async()=>{try{V.camLoading=!0,V.camError=``;let e={task_id:R.params.taskId,scheme_id:U.value?.scheme_id,mold_steel:V.camForm.mold_steel,surface_quality:V.camForm.surface_quality,controller:V.camForm.controller,include_gcode:V.camForm.include_gcode},t=await m(`/api/cam/plan`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(e)});V.camPlan=t?.data||null,t?.cam_preferences&&(V.camForm.mold_steel=t.cam_preferences.mold_steel||V.camForm.mold_steel,V.camForm.surface_quality=t.cam_preferences.surface_quality||V.camForm.surface_quality,V.camForm.controller=t.cam_preferences.controller||V.camForm.controller,V.camForm.include_gcode=!!t.cam_preferences.include_gcode),p(`CAM 计划生成完成`,`success`)}catch(e){V.camPlan=null,V.camError=e.message||`CAM 计划生成失败`,p(`CAM 计划生成失败: ${V.camError}`,`error`)}finally{V.camLoading=!1}};return(o,c)=>(t(),g(`div`,ce,[s(`div`,le,[s(`button`,{class:`btn-back`,onClick:c[0]||=e=>f(z).back()},[...c[12]||=[s(`svg`,{width:`16`,height:`16`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":`2.2`,"stroke-linecap":`round`,"stroke-linejoin":`round`},[s(`path`,{d:`M19 12H5M12 19l-7-7 7-7`})],-1),se(` 返回 `,-1)]]),c[13]||=s(`h1`,null,`分析结果`,-1)]),V.loading?(t(),g(`div`,ue,[...c[14]||=[s(`div`,{class:`spinner`},null,-1),s(`span`,null,`加载中...`,-1)]])):V.error?(t(),g(`div`,de,[s(`p`,null,a(V.error),1)])):V.task?(t(),g(`div`,fe,[s(`div`,pe,[s(`h2`,null,a(V.task.filename),1),s(`span`,{class:n([`badge`,V.task.status===`completed`?`badge-success`:`badge-error`])},a(V.task.status),3)]),s(`div`,me,[(t(),g(d,null,e(yn,e=>s(`a`,{key:e.id,class:`anchor-pill`,href:`#`+e.id},a(e.label),9,he)),64))]),s(`div`,ge,[s(`div`,{class:`result-card result-card-highlight`,style:{cursor:`pointer`},onClick:c[1]||=e=>Z(U.value?.scheme_id)},[s(`div`,_e,[c[15]||=s(`h3`,null,`推荐方案`,-1),s(`span`,v,a(U.value?.title||U.value?.scheme_id||`方案待定`),1)]),s(`div`,y,[s(`div`,b,[c[16]||=s(`span`,{class:`info-label`},`方案说明`,-1),s(`span`,x,a(U.value?.summary||U.value?.reason||`基于当前几何与制造约束自动推荐`),1)]),s(`div`,S,[c[17]||=s(`span`,{class:`info-label`},`分型方向`,-1),s(`span`,C,a(Q(U.value)),1)]),s(`div`,w,[c[18]||=s(`span`,{class:`info-label`},`模具结构`,-1),s(`span`,T,a(U.value?.mold_structure_type===`two_half_cavity`?`两板半腔(无独立模芯)`:`型腔 + 模芯`),1)]),s(`div`,E,[c[19]||=s(`span`,{class:`info-label`},`分型面位置`,-1),s(`span`,D,a(U.value?.offset_label||`中面`),1)]),s(`div`,O,[c[20]||=s(`span`,{class:`info-label`},`型腔数`,-1),s(`span`,k,a(vn.value)+` 腔`,1)]),s(`div`,A,[c[21]||=s(`span`,{class:`info-label`},`预计成型周期`,-1),s(`span`,j,a(un.value?.overall_assessment?.estimated_cycle_time||`N/A`)+` s`,1)])])]),H.value.length>1?(t(),g(`div`,{key:0,class:`result-card result-card-highlight`,style:{cursor:`pointer`},onClick:c[2]||=e=>Z(H.value[1]?.scheme_id)},[c[27]||=s(`div`,{class:`summary-header`},[s(`h3`,null,`备选方案`),s(`span`,{class:`badge badge-warning`},`1 个备选`)],-1),s(`div`,M,[(t(!0),g(d,null,e(H.value.slice(1,2),e=>(t(),g(d,{key:`alt-`+e.scheme_id},[s(`div`,N,[c[22]||=s(`span`,{class:`info-label`},`方案说明`,-1),s(`span`,P,a(e.summary||e.reason||`暂无说明`),1)]),s(`div`,F,[c[23]||=s(`span`,{class:`info-label`},`分型方向`,-1),s(`span`,I,a(Q(e)),1)]),s(`div`,ve,[c[24]||=s(`span`,{class:`info-label`},`模具结构`,-1),s(`span`,ye,a(e.mold_structure_type===`two_half_cavity`?`两板半腔(无独立模芯)`:`型腔 + 模芯`),1)]),s(`div`,be,[c[25]||=s(`span`,{class:`info-label`},`分型面位置`,-1),s(`span`,xe,a(e.offset_label||`中面`),1)]),s(`div`,Se,[c[26]||=s(`span`,{class:`info-label`},`方案总分`,-1),s(`span`,Ce,a(f(_)(e.score)),1)])],64))),128))])])):(t(),g(`div`,we,[c[29]||=s(`div`,{class:`summary-header`},[s(`h3`,null,`方案概览`),s(`span`,{class:`badge badge-success`},`单一方案`)],-1),s(`div`,Te,[s(`div`,Ee,[c[28]||=s(`span`,{class:`info-label`},`详细方案说明`,-1),s(`span`,De,a(U.value?.summary||U.value?.reason||`当前仅生成 1 套可用分模方案,已在推荐方案区域展示核心参数。`),1)])])]))]),V.task.status===`completed`?(t(),g(`div`,Oe,[s(`button`,{class:`btn-sm btn-primary`,onClick:c[3]||=e=>$(`step`),title:`导出装配体STEP格式(UG/FreeCAD/SolidWorks通用)`},` 📦 导出 STEP `),s(`button`,{class:`btn-sm btn-secondary`,onClick:c[4]||=e=>$(`iges`),title:`导出IGES格式(兼容旧系统)`},` 导出 IGES `),s(`button`,{class:`btn-sm btn-secondary`,onClick:c[5]||=e=>$(`stl`),title:`导出STL网格格式(3D打印预览)`},` 导出 STL `),s(`button`,{class:`btn-sm btn-secondary`,onClick:c[6]||=e=>$(`brep`),title:`导出BRep格式(FreeCAD原生)`},` 导出 BRep `)])):h(``,!0),G.value?(t(),g(`div`,ke,[c[31]||=s(`div`,{class:`summary-header`},[s(`h3`,null,`3D 预览`),s(`span`,{class:`badge badge-info`},`重点区域`)],-1),V.previewStatus===`error`?(t(),g(`div`,Ae,[c[30]||=s(`div`,{class:`inline-alert-title`},`预览加载失败`,-1),s(`div`,je,`HTML 已生成但加载异常,请检查该链接是否可访问:`+a(G.value),1)])):h(``,!0),(t(),g(`iframe`,{key:G.value,src:G.value,class:`viewer-frame viewer-frame-hero`,onLoad:bn,onError:xn},null,40,Me))])):(t(),g(`div`,Ne,[...c[32]||=[ee(`
3D 预览
未生成
预览未生成
当前任务没有返回 HTML 预览链接,属于未生成状态。
`,2)]])),H.value.length>1?(t(),g(`div`,Pe,[c[34]||=s(`summary`,null,`📊 方案对比`,-1),s(`div`,Fe,[s(`table`,Ie,[c[33]||=s(`thead`,null,[s(`tr`,null,[s(`th`,null,`方案`),s(`th`,null,`方向`),s(`th`,null,`位置`),s(`th`,null,`总分`),s(`th`,null,`可制造性`),s(`th`,null,`分型质量`),s(`th`,null,`倒扣数`),s(`th`,null,`锁模力`)])],-1),s(`tbody`,null,[(t(!0),g(d,null,e(H.value.slice(0,2),(e,n)=>(t(),g(`tr`,{key:`cmp-`+e.scheme_id,style:r(V.selectedSchemeId===e.scheme_id?`background: rgba(var(--primary-rgb), 0.06); font-weight: 600;cursor:pointer`:`cursor:pointer`),onClick:t=>Z(e.scheme_id)},[s(`td`,null,[n===0?(t(),g(`span`,Re,`★ 推荐方案`)):(t(),g(`span`,ze,`备选方案`))]),s(`td`,null,a(Q(e)),1),s(`td`,null,a(e.offset_label||`中面`),1),s(`td`,null,a(f(_)(e.score)),1),s(`td`,null,a(f(_)(e.score_breakdown?.manufacturability||0)),1),s(`td`,null,a(f(_)(e.score_breakdown?.parting_quality||0)),1),s(`td`,null,a(e.key_info?.quality_considerations?.undercut_count||0),1),s(`td`,null,a(e.cavity_data?.manufacturing_info?.estimated_clamping_force||`N/A`),1)],12,Le))),128))])])])])):h(``,!0),s(`div`,Be,[s(`div`,Ve,[c[35]||=s(`h3`,null,`AI 倒扣与抽芯分析`,-1),J.value?(t(),g(`span`,{key:0,class:n([`badge`,J.value.status===`required`?`badge-error`:J.value.status===`not_required`?`badge-success`:`badge-warning`])},a(J.value.statusLabel),3)):(t(),g(`span`,He,`未生成`))]),J.value?(t(),g(`div`,Ue,[s(`div`,We,[c[40]||=s(`h4`,null,`AI 结论`,-1),s(`div`,Ge,[s(`div`,Ke,[c[36]||=s(`span`,{class:`info-label`},`判断结果`,-1),s(`span`,qe,a(J.value.conclusion),1)]),s(`div`,Je,[c[37]||=s(`span`,{class:`info-label`},`推荐方案`,-1),s(`span`,Ye,a(J.value.mechanismLabel),1)]),J.value.confidence==null?h(``,!0):(t(),g(`div`,Xe,[c[38]||=s(`span`,{class:`info-label`},`置信度`,-1),s(`span`,Ze,a(Math.round(J.value.confidence*100))+`%`,1)])),s(`div`,Qe,[c[39]||=s(`span`,{class:`info-label`},`分析来源`,-1),s(`span`,$e,a(J.value.source===`ai`?`AI 模型`:`规则回退`),1)])]),s(`div`,et,a(J.value.summary||`当前任务未返回更多摘要。`),1)]),s(`div`,tt,[J.value.reasons.length?(t(),g(`div`,nt,[c[41]||=s(`h4`,null,`判断依据`,-1),s(`div`,rt,[(t(!0),g(d,null,e(J.value.reasons,(e,n)=>(t(),g(`div`,{class:`recommendation-item medium`,key:`ai-reason-`+n},[s(`div`,it,a(e),1)]))),128))])])):h(``,!0),J.value.standardAdvice.length?(t(),g(`div`,at,[c[42]||=s(`h4`,null,`标准化建议`,-1),s(`div`,ot,[(t(!0),g(d,null,e(J.value.standardAdvice,(e,n)=>(t(),g(`div`,{class:`recommendation-item low`,key:`ai-advice-`+n},[s(`div`,st,a(e),1)]))),128))])])):h(``,!0),J.value.manualReviewItems.length?(t(),g(`div`,ct,[c[43]||=s(`h4`,null,`人工复核项`,-1),s(`div`,L,[(t(!0),g(d,null,e(J.value.manualReviewItems,(e,n)=>(t(),g(`div`,{class:`recommendation-item medium`,key:`ai-review-`+n},[s(`div`,lt,a(e),1)]))),128))])])):h(``,!0)])])):(t(),g(`div`,ut,[...c[44]||=[s(`div`,{class:`inline-alert-title`},`AI 结论未生成`,-1),s(`div`,{class:`inline-alert-message`},`当前任务未生成倒扣与抽芯 AI 分析,请检查模型配置或重新运行分析。`,-1)]]))]),s(`div`,dt,[c[64]||=s(`div`,{class:`summary-header`},[s(`h3`,null,`CAM 与 CNC 加工`),s(`span`,{class:`badge badge-info`},`工艺规划`)],-1),s(`div`,ft,[c[50]||=s(`h4`,null,`CAM 参数`,-1),s(`div`,pt,[s(`div`,mt,[c[45]||=s(`span`,{class:`info-label`},`模具钢`,-1),i(s(`select`,{"onUpdate:modelValue":c[7]||=e=>V.camForm.mold_steel=e,class:`form-select`},[(t(),g(d,null,e(an,e=>s(`option`,{key:`steel-`+e.value,value:e.value},a(e.label),9,ht)),64))],512),[[l,V.camForm.mold_steel]])]),s(`div`,gt,[c[46]||=s(`span`,{class:`info-label`},`表面质量`,-1),i(s(`select`,{"onUpdate:modelValue":c[8]||=e=>V.camForm.surface_quality=e,class:`form-select`},[(t(),g(d,null,e(on,e=>s(`option`,{key:`surf-`+e.value,value:e.value},a(e.label),9,_t)),64))],512),[[l,V.camForm.surface_quality]])]),s(`div`,vt,[c[47]||=s(`span`,{class:`info-label`},`控制器`,-1),i(s(`select`,{"onUpdate:modelValue":c[9]||=e=>V.camForm.controller=e,class:`form-select`},[(t(),g(d,null,e(sn,e=>s(`option`,{key:`ctrl-`+e.value,value:e.value},a(e.label),9,yt)),64))],512),[[l,V.camForm.controller]])]),s(`div`,bt,[c[49]||=s(`span`,{class:`info-label`},`包含G代码`,-1),s(`label`,xt,[i(s(`input`,{type:`checkbox`,class:`checkbox-input`,"onUpdate:modelValue":c[10]||=e=>V.camForm.include_gcode=e},null,512),[[ae,V.camForm.include_gcode]]),c[48]||=s(`span`,{class:`checkbox-label`},`返回G代码文本`,-1)])])]),s(`button`,{class:`btn-sm btn-primary`,disabled:V.camLoading,onClick:c[11]||=e=>Cn(),style:{"margin-top":`var(--space-2)`},title:`基于当前选中方案生成CAM工艺计划`},a(V.camLoading?`⏳ 生成中...`:`🔧 生成 CAM 计划`),9,St)]),V.camError?(t(),g(`div`,Ct,[c[51]||=s(`div`,{class:`inline-alert-title`},`CAM 计划生成失败`,-1),s(`div`,wt,a(V.camError),1)])):V.camPlan?(t(),g(d,{key:2},[s(`div`,Et,[s(`div`,Dt,[c[57]||=s(`h4`,null,`计划摘要`,-1),s(`div`,Ot,[s(`div`,kt,[c[53]||=s(`span`,{class:`info-label`},`方案ID`,-1),s(`span`,At,a(V.camPlan.scheme_id||`N/A`),1)]),s(`div`,jt,[c[54]||=s(`span`,{class:`info-label`},`总工序数`,-1),s(`span`,Mt,a(V.camPlan.summary?.total_operations||0),1)]),s(`div`,Nt,[c[55]||=s(`span`,{class:`info-label`},`预计总时长`,-1),s(`span`,Pt,a(f(_)(V.camPlan.summary?.total_estimated_time_min||0))+` min`,1)]),s(`div`,Ft,[c[56]||=s(`span`,{class:`info-label`},`方案可信度`,-1),s(`span`,It,a(f(_)(V.camPlan.confidence?.score||0)),1)])])]),s(`div`,Lt,[c[60]||=s(`h4`,null,`刀具建议`,-1),s(`div`,Rt,[s(`div`,zt,[c[58]||=s(`span`,{class:`info-label`},`粗加工刀具`,-1),s(`span`,Bt,a(V.camPlan.tooling_suggestion?.roughing_tool?.tool_id||`N/A`),1)]),s(`div`,Vt,[c[59]||=s(`span`,{class:`info-label`},`精加工刀具`,-1),s(`span`,Ht,a(V.camPlan.tooling_suggestion?.finishing_tool?.tool_id||`N/A`),1)])])])]),s(`div`,Ut,[c[62]||=s(`h4`,null,`工序计划`,-1),s(`table`,Wt,[c[61]||=s(`thead`,null,[s(`tr`,null,[s(`th`,null,`序号`),s(`th`,null,`工序`),s(`th`,null,`刀具`),s(`th`,null,`主轴转速`),s(`th`,null,`进给率`),s(`th`,null,`预计时长(min)`)])],-1),s(`tbody`,null,[(t(!0),g(d,null,e(V.camPlan.process_plan||[],e=>(t(),g(`tr`,{key:`cam-op-`+e.seq},[s(`td`,null,a(e.seq),1),s(`td`,null,a(e.operation),1),s(`td`,null,a(e.tool_id||`N/A`),1),s(`td`,null,a(f(_)(e.spindle_speed_rpm||0)),1),s(`td`,null,a(f(_)(e.feed_rate_mm_min||0)),1),s(`td`,null,a(f(_)(e.estimated_time_min||0)),1)]))),128))])])]),s(`div`,Gt,[c[63]||=s(`h4`,null,`制造风险提示`,-1),s(`div`,Kt,[(t(!0),g(d,null,e(V.camPlan.manufacturing_warnings||[],(e,n)=>(t(),g(`div`,{class:`recommendation-item medium`,key:`cam-warn-`+n},[s(`div`,qt,a(e),1)]))),128))])])],64)):(t(),g(`div`,Tt,[...c[52]||=[s(`div`,{class:`inline-alert-title`},`尚未生成 CAM 计划`,-1),s(`div`,{class:`inline-alert-message`},`点击上方"生成 CAM 计划"后,将返回工序计划、刀具建议与制造风险提示。`,-1)]]))]),hn.value?(t(),g(`div`,Jt,[s(`div`,Yt,[c[65]||=s(`h3`,null,`LLM 设计报告`,-1),s(`span`,{class:n([`badge`,(Y.value?.overall_score||0)>=7?`badge-success`:(Y.value?.overall_score||0)>=5?`badge-warning`:`badge-error`])},` 评分 `+a(Y.value?.overall_score||`N/A`)+` / 10 `,3)]),Y.value?.overview?(t(),g(`div`,Xt,a(Y.value?.overview),1)):h(``,!0),s(`div`,Zt,[(t(!0),g(d,null,e(gn.value,(i,o)=>(t(),g(`div`,{key:`dr-sec-`+o,class:n([`result-card`,i.type===`issues`?`result-card-highlight`:``])},[s(`h4`,{style:r(i.type===`issues`?`color: var(--danger-color);`:``)},a(i.heading),5),i.type===`issues`?(t(),g(`div`,Qt,[(t(!0),g(d,null,e(i.items,(e,r)=>(t(),g(`div`,{key:`dr-issue-`+r,class:n([`recommendation-item`,e.level===`high`?`high`:e.level===`medium`?`medium`:`low`])},[s(`span`,{class:n([`priority-badge`,e.level||`medium`]),style:{"margin-right":`var(--space-1)`}},a(e.level===`high`?`🔴`:e.level===`medium`?`🟡`:`🟢`),3),s(`div`,$t,a(e.content),1)],2))),128))])):i.type===`params_table`?(t(),g(`table`,en,[s(`thead`,null,[s(`tr`,null,[(t(!0),g(d,null,e(i.headers,(e,n)=>(t(),g(`th`,{key:`dr-h-`+n},a(e),1))),128))])]),s(`tbody`,null,[(t(!0),g(d,null,e(i.rows,(n,r)=>(t(),g(`tr`,{key:`dr-r-`+r},[(t(!0),g(d,null,e(n,(e,n)=>(t(),g(`td`,{key:`dr-c-`+n},a(e),1))),128))]))),128))])])):i.type===`recommendations`?(t(),g(`div`,tn,[(t(!0),g(d,null,e(i.items,(e,n)=>(t(),g(`div`,{class:`recommendation-item low`,key:`dr-rec-`+n},[s(`div`,nn,`💡 `+a(e),1)]))),128))])):(t(),g(`div`,rn,a(JSON.stringify(i)),1))],2))),128))])])):h(``,!0)])):h(``,!0)]))}});export{R as default};
\ No newline at end of file
+import{D as e,E as t,M as n,N as r,O as i,P as a,S as o,_ as s,b as ee,c,d as l,g as u,h as d,j as f,k as te,l as ne,n as p,o as m,r as re,s as ie,u as ae,v as h,w as oe,x as se,y as g}from"./index-B-OcU2wj.js";import{a as _}from"./utils-COFIQvWo.js";var ce={class:`page-container`},le={class:`page-header`},ue={key:0,class:`loading-state`},de={key:1,class:`error-state`},fe={key:2,class:`result-container`},pe={class:`result-header`},me={class:`result-anchor-nav`},he=[`href`],ge={class:`result-grid result-priority-grid`},_e={class:`summary-header`},v={class:`badge badge-info`},y={class:`info-list`},b={class:`info-item`},x={class:`info-value`,style:{"font-weight":`600`,"font-size":`1.05rem`,color:`var(--text-primary)`}},S={class:`info-item`},C={class:`info-value`},w={class:`info-item`},T={class:`info-value`},E={class:`info-item`},D={class:`info-value`},O={class:`info-item`},k={class:`info-value`},A={class:`info-item`},j={class:`info-value`},M={class:`info-list`},N={class:`info-item`},P={class:`info-value`},F={class:`info-item`},I={class:`info-value`},ve={class:`info-item`},ye={class:`info-value`},be={class:`info-item`},xe={class:`info-value`},Se={class:`info-item`},Ce={class:`info-value`},we={key:1,class:`result-card result-card-highlight`},Te={class:`info-list`},Ee={class:`info-item`},De={class:`info-value`,style:{"font-weight":`500`}},Oe={key:0,class:`export-buttons-bar`,style:{display:`flex`,gap:`var(--space-2)`,"flex-wrap":`wrap`,"justify-content":`center`,padding:`var(--space-3) 0`}},ke={key:1,id:`preview-3d`,class:`viewer-section viewer-section-hero`},Ae={key:0,class:`inline-alert inline-alert-warning`,style:{"margin-bottom":`var(--space-3)`}},je={class:`inline-alert-message`},Me=[`src`],Ne={key:2,id:`preview-3d`,class:`viewer-section viewer-section-hero`},Pe={key:3,id:`candidate-schemes`,class:`viewer-section diagnostic-panel`,style:{"margin-top":`var(--space-3)`}},Fe={class:`result-card full-width diagnostic-panel-body`},Ie={class:`data-table`},Le=[`onClick`],Re={key:0,style:{color:`var(--primary-color)`,"font-weight":`600`}},ze={key:1,style:{color:`var(--warning-color)`,"font-weight":`600`}},Be={id:`ai-side-action`,class:`viewer-section`},Ve={class:`summary-header`},He={key:1,class:`badge badge-warning`},Ue={key:0,class:`result-grid`},We={class:`result-card result-card-highlight`},Ge={class:`info-list`},Ke={class:`info-item`},qe={class:`info-value`},Je={class:`info-item`},Ye={class:`info-value`},Xe={key:0,class:`info-item`},Ze={class:`info-value`},Qe={class:`info-item`},$e={class:`info-value`},et={class:`inline-note`,style:{"margin-top":`var(--space-2)`,"font-weight":`600`,"font-size":`1rem`,color:`var(--text-primary)`}},tt={class:`result-card`},nt={key:0},rt={class:`recommendations-list`},it={class:`recommendation-text`},at={key:1,style:{"margin-top":`var(--space-3)`}},ot={class:`recommendations-list`},st={class:`recommendation-text`},ct={key:2,style:{"margin-top":`var(--space-3)`}},L={class:`recommendations-list`},lt={class:`recommendation-text`},ut={key:1,class:`inline-alert inline-alert-warning`},dt={id:`export-cam`,class:`viewer-section`},ft={class:`result-card`,style:{"margin-bottom":`var(--space-4)`}},pt={class:`info-list`},mt={class:`info-item`},ht=[`value`],gt={class:`info-item`},_t=[`value`],vt={class:`info-item`},yt=[`value`],bt={class:`info-item`},xt={class:`checkbox-group`},St=[`disabled`],Ct={key:0,class:`inline-alert inline-alert-warning`},wt={class:`inline-alert-message`},Tt={key:1,class:`inline-alert inline-alert-warning`},Et={class:`result-grid`},Dt={class:`result-card`},Ot={class:`info-list`},kt={class:`info-item`},At={class:`info-value`},jt={class:`info-item`},Mt={class:`info-value`},Nt={class:`info-item`},Pt={class:`info-value`},Ft={class:`info-item`},It={class:`info-value`},Lt={class:`result-card`},Rt={class:`info-list`},zt={class:`info-item`},Bt={class:`info-value`},Vt={class:`info-item`},Ht={class:`info-value`},Ut={class:`result-card full-width`},Wt={class:`data-table`},Gt={class:`result-card full-width`},Kt={class:`recommendations-list`},qt={class:`recommendation-text`},Jt={key:4,id:`llm-report`,class:`viewer-section`},Yt={class:`summary-header`},Xt={key:0,class:`inline-note`,style:{"margin-bottom":`var(--space-4)`,"font-size":`0.95rem`,color:`var(--text-primary)`}},Zt={class:`result-grid`},Qt={key:0,class:`recommendations-list`},$t={class:`recommendation-text`},en={key:1,class:`data-table`},tn={key:2,class:`recommendations-list`},nn={class:`recommendation-text`},rn={key:3,class:`inline-note`},R=o({__name:`ResultView`,setup(o){let R=c(),z=ne(),B=ie(),V=te({task:null,loading:!0,error:``,selectedSchemeId:null,previewStatus:`idle`,camLoading:!1,camError:``,camPlan:null,camForm:{mold_steel:`P20`,surface_quality:`standard`,controller:`fanuc`,include_gcode:!1}}),an=[{value:`P20`,label:`P20`},{value:`718H`,label:`718H`},{value:`NAK80`,label:`NAK80`},{value:`S136`,label:`S136`},{value:`H13`,label:`H13`}],on=[{value:`standard`,label:`标准`},{value:`fine`,label:`精细`},{value:`mirror`,label:`镜面`}],sn=[{value:`fanuc`,label:`Fanuc`},{value:`siemens`,label:`Siemens`}],cn=async()=>{console.log(`[ResultView] loadTask 开始, taskId:`,R.params.taskId);try{V.task=await m(`/api/status/${R.params.taskId}`,{method:`POST`}),console.log(`任务数据:`,V.task),console.log(`key_info:`,V.task.key_info),console.log(`cavity_data:`,V.task.cavity_data),console.log(`analysis_result:`,V.task.analysis_result),console.log(`geometry_data:`,V.task.geometry_data),V.task?.best_scheme_id?V.selectedSchemeId=V.task.best_scheme_id:V.task?.candidate_schemes?.length&&(V.selectedSchemeId=V.task.candidate_schemes[0].scheme_id);let e=V.task?.cam_preferences||{};V.camForm.mold_steel=e.mold_steel||`P20`,V.camForm.surface_quality=e.surface_quality||`standard`,V.camForm.controller=e.controller||`fanuc`,V.camForm.include_gcode=!!e.include_gcode,V.previewStatus=`loading`}catch(e){V.error=re(e,`加载任务详情`)}finally{V.loading=!1}};oe(()=>{if(!B.user){z.push(`/login`);return}cn()});let H=u(()=>V.task?.candidate_schemes||[]);u(()=>H.value.length===1);let U=u(()=>H.value.length?H.value.find(e=>e.scheme_id===V.selectedSchemeId)||H.value[0]:null),W=u(()=>U.value?.cavity_data||V.task?.cavity_data||null),ln=u(()=>U.value?.key_info||V.task?.key_info||null),G=u(()=>U.value?.html_file||V.task?.html_file||``),K=u(()=>U.value?.dfm_violations||[]),un=u(()=>W.value?.injection_system||V.task?.plan_result?.injection_system||null),dn=u(()=>U.value?.side_actions||W.value?.side_actions||V.task?.side_actions||null),fn=e=>{let t=String(e||``).match(/\s*([\s\S]*?)\s*/);if(!t)return null;try{return JSON.parse(t[1])}catch(e){return console.warn(`AI 倒扣分析解析失败:`,e),null}},pn=e=>{let t=String(e||``).match(/\s*([\s\S]*?)\s*/);if(!t)return null;try{return JSON.parse(t[1])}catch(e){return console.warn(`LLM 设计报告解析失败:`,e),null}},q=(e,t=`ai`)=>{if(!e||typeof e!=`object`)return null;let n=[`required`,`not_required`,`manual_review`].includes(e.status)?e.status:`manual_review`,r=[`slider`,`lifter`,`mixed`,`none`,`manual_review`].includes(e.mechanism_recommendation)?e.mechanism_recommendation:`manual_review`,i=Number(e.confidence),a={required:`需要倒扣/抽芯`,not_required:`无需倒扣/抽芯`,manual_review:`需人工确认`};return{source:t,status:n,statusLabel:a[n],mechanismRecommendation:r,mechanismLabel:{slider:`优先滑块`,lifter:`优先斜顶`,mixed:`滑块 + 斜顶`,none:`无需侧向机构`,manual_review:`人工评审`}[r],confidence:Number.isFinite(i)?Math.max(0,Math.min(i,1)):null,conclusion:e.conclusion||a[n],summary:e.summary||``,reasons:Array.isArray(e.reasons)?e.reasons.filter(Boolean).slice(0,5):[],standardAdvice:Array.isArray(e.standard_advice)?e.standard_advice.filter(Boolean).slice(0,5):[],manualReviewItems:Array.isArray(e.manual_review_items)?e.manual_review_items.filter(Boolean).slice(0,4):[]}},mn=u(()=>{let e=dn.value;if(!e||typeof e!=`object`)return null;let t=e.summary||{},n=(e.slider_mechanisms||[]).length,r=(e.lifter_mechanisms||[]).length,i=n+r,a=n&&r?`mixed`:n?`slider`:r?`lifter`:`none`,o=i>0?`required`:t.total_undercut_faces===0?`not_required`:`manual_review`;return q({status:o,confidence:.55,conclusion:o===`required`?`规则分析判断当前产品需要倒扣/抽芯机构`:o===`not_required`?`规则分析未发现必须采用倒扣/抽芯机构的特征`:`当前规则结果不足以完成稳定判断,建议人工复核`,mechanism_recommendation:a===`none`?`none`:a,summary:o===`required`?`检测到 ${n} 个滑块需求、${r} 个斜顶需求,建议先按标准机构路线做结构评审。`:o===`not_required`?`当前方案未发现明显倒扣特征,可优先按常规模具结构推进。`:`现有数据可用于初筛,但不足以替代工程师对复杂倒扣的最终确认。`,reasons:[i>0?`规则分析识别出 ${i} 处侧向机构需求`:`规则分析未识别出明确侧向机构需求`,t.complexity?`当前复杂度判定为 ${t.complexity}`:`当前复杂度信息不足`,`当前倒扣方案若存在大行程滑块,优先按气动抽芯条件评估`].filter(Boolean),standard_advice:(e.recommendations||[]).slice(0,4),manual_review_items:[`结合 3D 预览复核倒扣是否可通过改产品取消`,`确认侧向机构与顶出、冷却、分型面是否存在干涉`]},`rules`)});u(()=>{let e={critical:0,high:0,medium:0,low:0};return(K.value||[]).forEach(t=>{let n=String(t.level||`medium`).toLowerCase();e[n]===void 0?e.medium+=1:e[n]+=1}),e});let J=u(()=>q(fn(V.task?.llm_report||``),`ai`)||mn.value),Y=u(()=>pn(V.task?.llm_report||``)),hn=u(()=>Y.value&&(Y.value.sections&&Y.value.sections.length>0||!!Y.value.overview)),gn=u(()=>(Y.value?.sections||[]).filter(e=>e.type===`issues`?e.items?.length>0:e.type===`params_table`?e.rows?.length>0:e.type===`recommendations`?e.items?.length>0:!0));u(()=>{let e=V.task?.stage_timings||{};return Object.entries(e).filter(([,e])=>typeof e==`number`).sort((e,t)=>t[1]-e[1])});let _n=u(()=>{let e={critical:0,high:1,medium:2,low:3};return[...V.task?.analysis_result?.design_recommendations||[]].sort((t,n)=>(e[t.priority]??99)-(e[n.priority]??99))});u(()=>_n.value[0]||null);let X=u(()=>K.value?.length||0),vn=u(()=>{let e=W.value?.mold_cavities?.cavity_count;if(typeof e==`number`)return e;let t=W.value?.mold_cavities||ln.value?.mold_cavities||{};return t.cavity_count||Object.keys(t).filter(e=>e.startsWith(`cavity_`)).length||1});u(()=>X.value?X.value>=4?`高风险`:X.value>=2?`中风险`:`低风险`:`低风险`);let yn=[{id:`candidate-schemes`,label:`方案`},{id:`preview-3d`,label:`预览`},{id:`ai-side-action`,label:`AI倒扣分析`},{id:`export-cam`,label:`CAM/CNC`},{id:`llm-report`,label:`设计报告`}],Z=e=>{e&&(V.selectedSchemeId=e),V.previewStatus=`loading`,V.camPlan=null,V.camError=``},bn=()=>{V.previewStatus=`loaded`},xn=()=>{V.previewStatus=`error`},Q=e=>{if(!e)return`N/A`;if(e.parting?.axis)return`${e.parting.axis} 轴`;let t=e.parting?.direction;return Array.isArray(t)?`[${t.map(e=>Number(e).toFixed(2)).join(`, `)}]`:`N/A`};u(()=>V.task?.analysis_result?.detected_features||[]);let Sn=async(e,t)=>{let n={};B.token&&(n.Authorization=`Bearer ${B.token}`);let r=await fetch(e,{headers:n});if(!r.ok)throw Error(`下载失败 (${r.status}): 无法下载,需要授权`);let i=await r.blob(),a=URL.createObjectURL(i),o=document.createElement(`a`);o.href=a,o.download=t,document.body.appendChild(o),o.click(),document.body.removeChild(o),URL.revokeObjectURL(a)},$=async e=>{try{let t=R.params.taskId,n=await m(`/api/export-mold`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({task_id:t,scheme_id:U.value?.scheme_id||V.selectedSchemeId,formats:[e],components:[`cavity`,`core`,`parting_surface`]})});if(n.status===`success`&&n.data.files){for(let e of n.data.files){let n=e.relative_path||(e.filepath?e.filepath.replace(/\\/g,`/`).split(`/`).slice(-2).join(`/`):``);await Sn(e.download_path||`/api/export-download/${encodeURI(n)}?task_id=${encodeURIComponent(t)}`,e.filename)}p(`已导出 ${n.data.files.length} 个 ${e.toUpperCase()} 文件`,`success`)}else n.data.errors&&n.data.errors.length>0&&p(`导出失败: ${n.data.errors[0]}`,`error`)}catch(e){p(`导出失败: ${e.message}`,`error`)}},Cn=async()=>{try{V.camLoading=!0,V.camError=``;let e={task_id:R.params.taskId,scheme_id:U.value?.scheme_id,mold_steel:V.camForm.mold_steel,surface_quality:V.camForm.surface_quality,controller:V.camForm.controller,include_gcode:V.camForm.include_gcode},t=await m(`/api/cam/plan`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(e)});V.camPlan=t?.data||null,t?.cam_preferences&&(V.camForm.mold_steel=t.cam_preferences.mold_steel||V.camForm.mold_steel,V.camForm.surface_quality=t.cam_preferences.surface_quality||V.camForm.surface_quality,V.camForm.controller=t.cam_preferences.controller||V.camForm.controller,V.camForm.include_gcode=!!t.cam_preferences.include_gcode),p(`CAM 计划生成完成`,`success`)}catch(e){V.camPlan=null,V.camError=e.message||`CAM 计划生成失败`,p(`CAM 计划生成失败: ${V.camError}`,`error`)}finally{V.camLoading=!1}};return(o,c)=>(t(),g(`div`,ce,[s(`div`,le,[s(`button`,{class:`btn-back`,onClick:c[0]||=e=>f(z).back()},[...c[12]||=[s(`svg`,{width:`16`,height:`16`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":`2.2`,"stroke-linecap":`round`,"stroke-linejoin":`round`},[s(`path`,{d:`M19 12H5M12 19l-7-7 7-7`})],-1),se(` 返回 `,-1)]]),c[13]||=s(`h1`,null,`分析结果`,-1)]),V.loading?(t(),g(`div`,ue,[...c[14]||=[s(`div`,{class:`spinner`},null,-1),s(`span`,null,`加载中...`,-1)]])):V.error?(t(),g(`div`,de,[s(`p`,null,a(V.error),1)])):V.task?(t(),g(`div`,fe,[s(`div`,pe,[s(`h2`,null,a(V.task.filename),1),s(`span`,{class:n([`badge`,V.task.status===`completed`?`badge-success`:`badge-error`])},a(V.task.status),3)]),s(`div`,me,[(t(),g(d,null,e(yn,e=>s(`a`,{key:e.id,class:`anchor-pill`,href:`#`+e.id},a(e.label),9,he)),64))]),s(`div`,ge,[s(`div`,{class:`result-card result-card-highlight`,style:{cursor:`pointer`},onClick:c[1]||=e=>Z(U.value?.scheme_id)},[s(`div`,_e,[c[15]||=s(`h3`,null,`推荐方案`,-1),s(`span`,v,a(U.value?.title||U.value?.scheme_id||`方案待定`),1)]),s(`div`,y,[s(`div`,b,[c[16]||=s(`span`,{class:`info-label`},`方案说明`,-1),s(`span`,x,a(U.value?.summary||U.value?.reason||`基于当前几何与制造约束自动推荐`),1)]),s(`div`,S,[c[17]||=s(`span`,{class:`info-label`},`分型方向`,-1),s(`span`,C,a(Q(U.value)),1)]),s(`div`,w,[c[18]||=s(`span`,{class:`info-label`},`模具结构`,-1),s(`span`,T,a(U.value?.mold_structure_type===`two_half_cavity`?`两板半腔(无独立模芯)`:`型腔 + 模芯`),1)]),s(`div`,E,[c[19]||=s(`span`,{class:`info-label`},`分型面位置`,-1),s(`span`,D,a(U.value?.offset_label||`中面`),1)]),s(`div`,O,[c[20]||=s(`span`,{class:`info-label`},`型腔数`,-1),s(`span`,k,a(vn.value)+` 腔`,1)]),s(`div`,A,[c[21]||=s(`span`,{class:`info-label`},`预计成型周期`,-1),s(`span`,j,a(un.value?.overall_assessment?.estimated_cycle_time||`N/A`)+` s`,1)])])]),H.value.length>1?(t(),g(`div`,{key:0,class:`result-card result-card-highlight`,style:{cursor:`pointer`},onClick:c[2]||=e=>Z(H.value[1]?.scheme_id)},[c[27]||=s(`div`,{class:`summary-header`},[s(`h3`,null,`备选方案`),s(`span`,{class:`badge badge-warning`},`1 个备选`)],-1),s(`div`,M,[(t(!0),g(d,null,e(H.value.slice(1,2),e=>(t(),g(d,{key:`alt-`+e.scheme_id},[s(`div`,N,[c[22]||=s(`span`,{class:`info-label`},`方案说明`,-1),s(`span`,P,a(e.summary||e.reason||`暂无说明`),1)]),s(`div`,F,[c[23]||=s(`span`,{class:`info-label`},`分型方向`,-1),s(`span`,I,a(Q(e)),1)]),s(`div`,ve,[c[24]||=s(`span`,{class:`info-label`},`模具结构`,-1),s(`span`,ye,a(e.mold_structure_type===`two_half_cavity`?`两板半腔(无独立模芯)`:`型腔 + 模芯`),1)]),s(`div`,be,[c[25]||=s(`span`,{class:`info-label`},`分型面位置`,-1),s(`span`,xe,a(e.offset_label||`中面`),1)]),s(`div`,Se,[c[26]||=s(`span`,{class:`info-label`},`方案总分`,-1),s(`span`,Ce,a(f(_)(e.score)),1)])],64))),128))])])):(t(),g(`div`,we,[c[29]||=s(`div`,{class:`summary-header`},[s(`h3`,null,`方案概览`),s(`span`,{class:`badge badge-success`},`单一方案`)],-1),s(`div`,Te,[s(`div`,Ee,[c[28]||=s(`span`,{class:`info-label`},`详细方案说明`,-1),s(`span`,De,a(U.value?.summary||U.value?.reason||`当前仅生成 1 套可用分模方案,已在推荐方案区域展示核心参数。`),1)])])]))]),V.task.status===`completed`?(t(),g(`div`,Oe,[s(`button`,{class:`btn-sm btn-primary`,onClick:c[3]||=e=>$(`step`),title:`导出装配体STEP格式(UG/FreeCAD/SolidWorks通用)`},` 📦 导出 STEP `),s(`button`,{class:`btn-sm btn-secondary`,onClick:c[4]||=e=>$(`iges`),title:`导出IGES格式(兼容旧系统)`},` 导出 IGES `),s(`button`,{class:`btn-sm btn-secondary`,onClick:c[5]||=e=>$(`stl`),title:`导出STL网格格式(3D打印预览)`},` 导出 STL `),s(`button`,{class:`btn-sm btn-secondary`,onClick:c[6]||=e=>$(`brep`),title:`导出BRep格式(FreeCAD原生)`},` 导出 BRep `)])):h(``,!0),G.value?(t(),g(`div`,ke,[c[31]||=s(`div`,{class:`summary-header`},[s(`h3`,null,`3D 预览`),s(`span`,{class:`badge badge-info`},`重点区域`)],-1),V.previewStatus===`error`?(t(),g(`div`,Ae,[c[30]||=s(`div`,{class:`inline-alert-title`},`预览加载失败`,-1),s(`div`,je,`HTML 已生成但加载异常,请检查该链接是否可访问:`+a(G.value),1)])):h(``,!0),(t(),g(`iframe`,{key:G.value,src:G.value,class:`viewer-frame viewer-frame-hero`,onLoad:bn,onError:xn},null,40,Me))])):(t(),g(`div`,Ne,[...c[32]||=[ee(`