This commit is contained in:
2026-06-09 11:14:03 +08:00
parent c6a8bc39da
commit 7d0fa506b6
19 changed files with 25 additions and 31 deletions
@@ -1,5 +1,5 @@
<script setup lang="ts">
import { reactive, ref } from 'vue'
import { reactive, ref, onMounted } from 'vue'
import { useInventory } from '@/modules/inventory/composables/useInventory'
import { apiRequest } from '@/shared/api'
import { addNotification, handleApiError } from '@/shared/notification'
@@ -75,6 +75,7 @@ async function deleteCustomer(id: number) {
handleApiError(e, '删除客户')
}
}
onMounted(() => { loadCustomers() })
</script>
<template>
@@ -1,5 +1,5 @@
<script setup lang="ts">
import { reactive, ref } from 'vue'
import { reactive, ref, onMounted } from 'vue'
import { useInventory } from '@/modules/inventory/composables/useInventory'
import { apiRequest } from '@/shared/api'
import { addNotification, handleApiError } from '@/shared/notification'
@@ -81,6 +81,7 @@ async function deleteItem(id: number) {
handleApiError(e, '删除物料库存')
}
}
onMounted(() => { loadInventory() })
</script>
<template>
@@ -1,5 +1,5 @@
<script setup lang="ts">
import { ref, computed } from 'vue'
import { ref, computed, onMounted } from 'vue'
import { useInventory } from '../composables/useInventory'
import { apiRequest } from '@/shared/api'
import { addNotification, handleApiError } from '@/shared/notification'
@@ -169,6 +169,7 @@ function closeRestockModal() {
showRestockModal.value = false
restockItems.value = []
}
onMounted(() => { loadMaterials() })
</script>
<template>
@@ -1,7 +1,8 @@
<script setup lang="ts">
import { onMounted } from 'vue'
import { useInventory } from '@/modules/inventory/composables/useInventory'
const { state, getMovementTypeLabel, getMovementBadgeClass, formatDateTime } = useInventory()
const { state, loadMovements, getMovementTypeLabel, getMovementBadgeClass, formatDateTime } = useInventory()
const getMovementTagType = (movementType: string): 'success' | 'danger' | 'warning' | 'info' | '' => {
const badgeClass = getMovementBadgeClass(movementType)
@@ -10,6 +11,7 @@ const getMovementTagType = (movementType: string): 'success' | 'danger' | 'warni
if (badgeClass === 'badge-warning') return 'warning'
return 'info'
}
onMounted(() => { loadMovements() })
</script>
<template>
@@ -1,5 +1,5 @@
<script setup lang="ts">
import { reactive, ref } from 'vue'
import { reactive, ref, onMounted } from 'vue'
import { useInventory } from '../composables/useInventory'
import { apiRequest } from '@/shared/api'
import { addNotification, handleApiError } from '@/shared/notification'
@@ -118,6 +118,7 @@ function closeModal() {
form.value = {}
bomItems.value = []
}
onMounted(() => { loadFinishedProducts() })
</script>
<template>
@@ -1,5 +1,5 @@
<script setup lang="ts">
import { reactive, ref } from 'vue'
import { reactive, ref, onMounted } from 'vue'
import { useInventory } from '@/modules/inventory/composables/useInventory'
import { apiRequest } from '@/shared/api'
import { addNotification, handleApiError } from '@/shared/notification'
@@ -75,6 +75,7 @@ async function deleteSupplier(id: number) {
handleApiError(e, '删除供应商')
}
}
onMounted(() => { loadSuppliers() })
</script>
<template>
@@ -391,19 +391,6 @@ export function useInventory() {
const switchTab = (tab: string) => {
state.activeTab = tab
if (!state.backendDbReady) return
switch (tab) {
case 'dashboard': loadDashboard(); break
case 'sales_orders': loadProductionOrders(); break
case 'products': loadFinishedProducts(); break
case 'materials': loadMaterials(); break
case 'purchases': loadPurchaseOrders(); break
case 'inventory': loadInventory(); break
case 'customers': loadCustomers(); break
case 'suppliers': loadSuppliers(); break
case 'finance': loadFinance(); break
case 'movements': loadMovements(); break
}
}
const closeModal = () => {
@@ -1 +1 @@
import{D as e,g as t,t as n,y as r}from"./index-BZsdwppN.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};
import{D as e,g as t,t as n,y as r}from"./index-Ck8PP4ML.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};
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
.inventory-tab[data-v-cbf8e7cf]{padding:0}.table-header[data-v-cbf8e7cf]{margin-bottom:16px}.suppliers-tab[data-v-18d0ade0]{padding:0}.table-header[data-v-18d0ade0]{margin-bottom:16px}.customers-tab[data-v-63db53de]{padding:0}.table-header[data-v-63db53de]{margin-bottom:16px}.movements-tab[data-v-5efede77],.page-container[data-v-cbcdda91]{padding:0}.page-header[data-v-cbcdda91]{margin-bottom:var(--space-6)}.page-header h1[data-v-cbcdda91]{font-size:var(--text-2xl);font-weight:var(--font-bold);color:var(--text-primary);margin:0}.page-header p[data-v-cbcdda91]{color:var(--text-tertiary);margin:var(--space-1) 0 0;font-size:var(--text-sm)}.inventory-layout[data-v-cbcdda91]{gap:var(--space-6);min-height:calc(100vh - 200px);display:flex}.inventory-sidebar-wrapper[data-v-cbcdda91]{flex-shrink:0;width:200px}.inventory-content[data-v-cbcdda91]{flex:1;min-width:0}.inventory-content-header[data-v-cbcdda91]{margin-bottom:var(--space-4)}.inventory-breadcrumb[data-v-cbcdda91]{font-size:var(--text-sm);color:var(--text-tertiary)}.inventory-breadcrumb .sep[data-v-cbcdda91]{margin:0 var(--space-2)}.inventory-breadcrumb .current[data-v-cbcdda91]{color:var(--text-primary);font-weight:var(--font-medium)}.inline-alert[data-v-cbcdda91]{padding:var(--space-4);border-radius:var(--radius-md);margin-bottom:var(--space-4)}.inline-alert-warning[data-v-cbcdda91]{background:var(--warning-bg);border:1px solid var(--warning)}.inline-alert-title[data-v-cbcdda91]{font-weight:var(--font-semibold);margin-bottom:var(--space-1)}.inline-alert-message[data-v-cbcdda91]{font-size:var(--text-sm)}.loading-state[data-v-cbcdda91]{align-items:center;gap:var(--space-3);padding:var(--space-8);color:var(--text-tertiary);justify-content:center;display:flex}.spinner[data-v-cbcdda91]{border:2px solid var(--border-default);border-top-color:var(--primary-500);border-radius:50%;width:20px;height:20px;animation:.8s linear infinite spin-cbcdda91}@keyframes spin-cbcdda91{to{transform:rotate(360deg)}}.inventory-sidebar-wrapper[data-v-cbcdda91] .el-menu{background:0 0;border-right:none}.inventory-sidebar-wrapper[data-v-cbcdda91] .sidebar-group-title{padding:var(--space-3) var(--space-4);font-size:var(--text-xs);font-weight:var(--font-semibold);color:var(--text-tertiary);text-transform:uppercase;cursor:pointer;-webkit-user-select:none;user-select:none;justify-content:space-between;align-items:center;display:flex}.inventory-sidebar-wrapper[data-v-cbcdda91] .el-menu-item{height:36px;line-height:36px;font-size:var(--text-sm);margin:2px var(--space-2);border-radius:var(--radius-md);padding:0 var(--space-4)}.inventory-sidebar-wrapper[data-v-cbcdda91] .el-menu-item.is-active{background:var(--primary-50);color:var(--primary-600);font-weight:var(--font-medium)}.inventory-sidebar-wrapper[data-v-cbcdda91] .el-menu-item:hover{background:var(--bg-tertiary)}
.inventory-tab[data-v-ac629843]{padding:0}.table-header[data-v-ac629843]{margin-bottom:16px}.suppliers-tab[data-v-9c9827fc]{padding:0}.table-header[data-v-9c9827fc]{margin-bottom:16px}.customers-tab[data-v-f6d9461f]{padding:0}.table-header[data-v-f6d9461f]{margin-bottom:16px}.movements-tab[data-v-d9f61c89],.page-container[data-v-cbcdda91]{padding:0}.page-header[data-v-cbcdda91]{margin-bottom:var(--space-6)}.page-header h1[data-v-cbcdda91]{font-size:var(--text-2xl);font-weight:var(--font-bold);color:var(--text-primary);margin:0}.page-header p[data-v-cbcdda91]{color:var(--text-tertiary);margin:var(--space-1) 0 0;font-size:var(--text-sm)}.inventory-layout[data-v-cbcdda91]{gap:var(--space-6);min-height:calc(100vh - 200px);display:flex}.inventory-sidebar-wrapper[data-v-cbcdda91]{flex-shrink:0;width:200px}.inventory-content[data-v-cbcdda91]{flex:1;min-width:0}.inventory-content-header[data-v-cbcdda91]{margin-bottom:var(--space-4)}.inventory-breadcrumb[data-v-cbcdda91]{font-size:var(--text-sm);color:var(--text-tertiary)}.inventory-breadcrumb .sep[data-v-cbcdda91]{margin:0 var(--space-2)}.inventory-breadcrumb .current[data-v-cbcdda91]{color:var(--text-primary);font-weight:var(--font-medium)}.inline-alert[data-v-cbcdda91]{padding:var(--space-4);border-radius:var(--radius-md);margin-bottom:var(--space-4)}.inline-alert-warning[data-v-cbcdda91]{background:var(--warning-bg);border:1px solid var(--warning)}.inline-alert-title[data-v-cbcdda91]{font-weight:var(--font-semibold);margin-bottom:var(--space-1)}.inline-alert-message[data-v-cbcdda91]{font-size:var(--text-sm)}.loading-state[data-v-cbcdda91]{align-items:center;gap:var(--space-3);padding:var(--space-8);color:var(--text-tertiary);justify-content:center;display:flex}.spinner[data-v-cbcdda91]{border:2px solid var(--border-default);border-top-color:var(--primary-500);border-radius:50%;width:20px;height:20px;animation:.8s linear infinite spin-cbcdda91}@keyframes spin-cbcdda91{to{transform:rotate(360deg)}}.inventory-sidebar-wrapper[data-v-cbcdda91] .el-menu{background:0 0;border-right:none}.inventory-sidebar-wrapper[data-v-cbcdda91] .sidebar-group-title{padding:var(--space-3) var(--space-4);font-size:var(--text-xs);font-weight:var(--font-semibold);color:var(--text-tertiary);text-transform:uppercase;cursor:pointer;-webkit-user-select:none;user-select:none;justify-content:space-between;align-items:center;display:flex}.inventory-sidebar-wrapper[data-v-cbcdda91] .el-menu-item{height:36px;line-height:36px;font-size:var(--text-sm);margin:2px var(--space-2);border-radius:var(--radius-md);padding:0 var(--space-4)}.inventory-sidebar-wrapper[data-v-cbcdda91] .el-menu-item.is-active{background:var(--primary-50);color:var(--primary-600);font-weight:var(--font-medium)}.inventory-sidebar-wrapper[data-v-cbcdda91] .el-menu-item:hover{background:var(--bg-tertiary)}
@@ -1 +1 @@
import{C as e,D as t,N as n,P as r,a as i,f as a,g as o,l as s,n as c,o as l,p as u,t as d,v as f,y as p,z as m}from"./index-BZsdwppN.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=d(e({__name:`LoginView`,setup(e){let d=s(),x=r({username:``,password:``,error:``,loading:!1}),S=async()=>{x.error=``,x.loading=!0;try{let e=await l(`/api/auth/login/json`,{method:`POST`,body:JSON.stringify({username:x.username,password:x.password})});i(e.access_token,e.user),c(`登录成功`,`success`),d.push(`/`)}catch(e){x.error=e.message||`登录失败`}finally{x.loading=!1}};return(e,r)=>(t(),p(`div`,h,[o(`div`,g,[r[4]||=o(`div`,{class:`login-header`},[o(`div`,{class:`login-logo`},`G`),o(`h1`,{class:`login-title`},`Gemold`),o(`p`,{class:`login-subtitle`},`模具制造管理系统`)],-1),o(`form`,{onSubmit:u(S,[`prevent`])},[o(`div`,_,[r[2]||=o(`label`,{class:`form-label`},`用户名`,-1),n(o(`input`,{"onUpdate:modelValue":r[0]||=e=>x.username=e,type:`text`,class:`form-input`,placeholder:`请输入用户名`,required:``},null,512),[[a,x.username]])]),o(`div`,v,[r[3]||=o(`label`,{class:`form-label`},`密码`,-1),n(o(`input`,{"onUpdate:modelValue":r[1]||=e=>x.password=e,type:`password`,class:`form-input`,placeholder:`请输入密码`,required:``},null,512),[[a,x.password]])]),x.error?(t(),p(`div`,y,m(x.error),1)):f(``,!0),o(`button`,{type:`submit`,class:`btn btn-primary w-full mt-4`,disabled:x.loading},m(x.loading?`登录中...`:`登录`),9,b)],32)])]))}}),[[`__scopeId`,`data-v-01da5b35`]]);export{x as default};
import{C as e,D as t,N as n,P as r,a as i,f as a,g as o,l as s,n as c,o as l,p as u,t as d,v as f,y as p,z as m}from"./index-Ck8PP4ML.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=d(e({__name:`LoginView`,setup(e){let d=s(),x=r({username:``,password:``,error:``,loading:!1}),S=async()=>{x.error=``,x.loading=!0;try{let e=await l(`/api/auth/login/json`,{method:`POST`,body:JSON.stringify({username:x.username,password:x.password})});i(e.access_token,e.user),c(`登录成功`,`success`),d.push(`/`)}catch(e){x.error=e.message||`登录失败`}finally{x.loading=!1}};return(e,r)=>(t(),p(`div`,h,[o(`div`,g,[r[4]||=o(`div`,{class:`login-header`},[o(`div`,{class:`login-logo`},`G`),o(`h1`,{class:`login-title`},`Gemold`),o(`p`,{class:`login-subtitle`},`模具制造管理系统`)],-1),o(`form`,{onSubmit:u(S,[`prevent`])},[o(`div`,_,[r[2]||=o(`label`,{class:`form-label`},`用户名`,-1),n(o(`input`,{"onUpdate:modelValue":r[0]||=e=>x.username=e,type:`text`,class:`form-input`,placeholder:`请输入用户名`,required:``},null,512),[[a,x.username]])]),o(`div`,v,[r[3]||=o(`label`,{class:`form-label`},`密码`,-1),n(o(`input`,{"onUpdate:modelValue":r[1]||=e=>x.password=e,type:`password`,class:`form-input`,placeholder:`请输入密码`,required:``},null,512),[[a,x.password]])]),x.error?(t(),p(`div`,y,m(x.error),1)):f(``,!0),o(`button`,{type:`submit`,class:`btn btn-primary w-full mt-4`,disabled:x.loading},m(x.loading?`登录中...`:`登录`),9,b)],32)])]))}}),[[`__scopeId`,`data-v-01da5b35`]]);export{x as default};
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
import{D as e,g as t,t as n,y as r}from"./index-BZsdwppN.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};
import{D as e,g as t,t as n,y as r}from"./index-Ck8PP4ML.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};
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+1 -1
View File
@@ -61,7 +61,7 @@
} catch (e) {}
})();
</script>
<script type="module" crossorigin src="/static/assets/index-BZsdwppN.js"></script>
<script type="module" crossorigin src="/static/assets/index-Ck8PP4ML.js"></script>
<link rel="stylesheet" crossorigin href="/static/assets/index-O0fr6NFx.css">
</head>
<body>