fix: role code auto-gen; fix permission tree API response parsing; fix buildPermTree parent_id=0

This commit is contained in:
li
2026-03-14 18:05:58 +08:00
parent b590fc88a4
commit 12a1be5571
92 changed files with 21 additions and 162 deletions
-1
View File
@@ -1 +0,0 @@
import{$ as e,L as t,V as n,_ as r,_t as i,p as a,u as o,v as s}from"./runtime-core.esm-bundler-DbRZbT7v.js";import{i as c,t as l}from"./index-DK5nh4op.js";var u={class:`error-page flex-center flex-col`},d=l({__name:`404`,setup(l){let d=c();return(c,l)=>{let f=n(`el-button`);return t(),a(`div`,u,[l[2]||=o(`div`,{class:`code`},`404`,-1),l[3]||=o(`div`,{class:`message`},`抱歉,您访问的页面不存在`,-1),s(f,{type:`primary`,onClick:l[0]||=e=>i(d).push(`/`)},{default:e(()=>[...l[1]||=[r(`返回首页`,-1)]]),_:1})])}}},[[`__scopeId`,`data-v-58ff5114`]]);export{d 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
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
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
View File
@@ -1 +0,0 @@
import{t as e}from"./request-BcX6wdRT.js";var t={getList:t=>e.get(`/care/profiles`,{params:t}),getDetail:t=>e.get(`/care/profiles/${t}`),create:t=>e.post(`/care/profiles`,t),update:(t,n)=>e.put(`/care/profiles/${t}`,n),delete:t=>e.delete(`/care/profiles/${t}`)},n={getList:t=>e.get(`/care/plans`,{params:t}),getDetail:t=>e.get(`/care/plans/${t}`),create:t=>e.post(`/care/plans`,t),update:(t,n)=>e.put(`/care/plans/${t}`,n),delete:t=>e.delete(`/care/plans/${t}`)},r={getList:t=>e.get(`/care/records`,{params:t}),getDetail:t=>e.get(`/care/records/${t}`),create:t=>e.post(`/care/records`,t),update:(t,n)=>e.put(`/care/records/${t}`,n),delete:t=>e.delete(`/care/records/${t}`)},i={getList:t=>e.get(`/care/exceptions`,{params:t}),getDetail:t=>e.get(`/care/exceptions/${t}`),create:t=>e.post(`/care/exceptions`,t),update:(t,n)=>e.put(`/care/exceptions/${t}`,n),handle:(t,n)=>e.put(`/care/exceptions/${t}/handle`,n),resolve:(t,n)=>e.put(`/care/exceptions/${t}/handle`,n)},a={getList:t=>e.get(`/care/health-metrics`,{params:t}),create:t=>e.post(`/care/health-metrics`,t)};export{a,r as i,n,t as r,i as t};
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
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
View File
@@ -1 +0,0 @@
import{t as e}from"./request-BcX6wdRT.js";var t={getList:t=>e.get(`/crm/channels`,{params:t}),getDetail:t=>e.get(`/crm/channels/${t}`),create:t=>e.post(`/crm/channels`,t),update:(t,n)=>e.put(`/crm/channels/${t}`,n),delete:t=>e.delete(`/crm/channels/${t}`)},n={getList:t=>e.get(`/crm/leads`,{params:t}),getDetail:t=>e.get(`/crm/leads/${t}`),create:t=>e.post(`/crm/leads`,t),update:(t,n)=>e.put(`/crm/leads/${t}`,n),delete:t=>e.delete(`/crm/leads/${t}`),follow:(t,n)=>e.post(`/crm/leads/${t}/follow`,n),assign:(t,n)=>e.put(`/crm/leads/${t}/assign`,n)},r={getList:t=>e.get(`/crm/customers`,{params:t}),getDetail:t=>e.get(`/crm/customers/${t}`),create:t=>e.post(`/crm/customers`,t),update:(t,n)=>e.put(`/crm/customers/${t}`,n),delete:t=>e.delete(`/crm/customers/${t}`)},i={getList:t=>e.get(`/crm/contracts`,{params:t}),getDetail:t=>e.get(`/crm/contracts/${t}`),create:t=>e.post(`/crm/contracts`,t),update:(t,n)=>e.put(`/crm/contracts/${t}`,n),delete:t=>e.delete(`/crm/contracts/${t}`),audit:(t,n)=>e.put(`/crm/contracts/${t}/audit`,n)},a={getList:t=>e.get(`/crm/questionnaires`,{params:t}),getDetail:t=>e.get(`/crm/questionnaires/${t}`),create:t=>e.post(`/crm/questionnaires`,t),update:(t,n)=>e.put(`/crm/questionnaires/${t}`,n),delete:t=>e.delete(`/crm/questionnaires/${t}`),submitAnswer:t=>e.post(`/crm/questionnaire-answers`,t),getAnswers:t=>e.get(`/crm/questionnaire-answers`,{params:t})},o={getList:t=>e.get(`/crm/complaints`,{params:t}),getDetail:t=>e.get(`/crm/complaints/${t}`),create:t=>e.post(`/crm/complaints`,t),update:(t,n)=>e.put(`/crm/complaints/${t}`,n),delete:t=>e.delete(`/crm/complaints/${t}`),handle:(t,n)=>e.put(`/crm/complaints/${t}/handle`,n)};export{n as a,r as i,o as n,a as o,i as r,t};
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
-1
View File
@@ -1 +0,0 @@
import{L as e,P as t,Vt as n,Wt as r,_ as i,_t as a,g as o,i as s,l as c,lt as l,p as u,u as d,v as f,z as p}from"./runtime-core.esm-bundler-DbRZbT7v.js";import{i as m}from"./index-DK5nh4op.js";import"./request-BcX6wdRT.js";import{t as h}from"./user-Tnoer2Cx.js";import{t as g}from"./iconify-f5JHLb1p.js";var _={class:`p-6 space-y-5`},v={class:`bg-gradient-to-r from-rose-50 to-orange-50 rounded-3xl p-8 flex items-center justify-between border border-rose-100`},y={class:`text-2xl font-bold text-gray-800 mb-1`},b={class:`text-gray-400 text-sm`},x={class:`grid grid-cols-4 gap-5`},S={class:`flex items-center gap-4 mb-4`},C={class:`text-gray-400 text-xs`},w={class:`text-2xl font-bold text-gray-800`},T={class:`bg-white rounded-3xl border border-gray-100 shadow-sm p-6`},E={class:`grid grid-cols-6 gap-4`},D=[`onClick`],O={class:`text-xs font-medium text-gray-600 group-hover:text-rose-500`},k={__name:`index`,setup(k){let A=h(),j=m(),M=c(()=>A.userInfo?.name||A.userInfo?.username||`用户`),N=c(()=>{let e=new Date;return`${e.getFullYear()}${e.getMonth()+1}${e.getDate()}${[`星期日`,`星期一`,`星期二`,`星期三`,`星期四`,`星期五`,`星期六`][e.getDay()]}`}),P=l([{title:`今日预约客户`,value:`--`,trend:`+12% 较昨日`,trendUp:!0,icon:`solar:users-group-rounded-bold-duotone`,iconBg:`bg-rose-50`,iconColor:`text-rose-500`},{title:`当前入驻率`,value:`--`,trend:`良好运营状态`,trendUp:!0,icon:`solar:home-bold-duotone`,iconBg:`bg-blue-50`,iconColor:`text-blue-500`},{title:`今日护理评分`,value:`--`,trend:`历史最高纪录`,trendUp:!0,icon:`solar:heart-pulse-bold-duotone`,iconBg:`bg-amber-50`,iconColor:`text-amber-500`},{title:`本月营收(预计)`,value:`--`,trend:`+8.4% 较上月`,trendUp:!0,icon:`solar:wad-of-money-bold-duotone`,iconBg:`bg-teal-50`,iconColor:`text-teal-500`}]),F=[{label:`新增客户`,icon:`solar:user-plus-bold-duotone`,path:`/crm/customers`},{label:`办理入住`,icon:`solar:home-bold-duotone`,path:`/room/reservations`},{label:`办理退住`,icon:`solar:door-open-bold-duotone`,path:`/room/rooms`},{label:`新建工单`,icon:`solar:document-add-bold-duotone`,path:`/service/orders`},{label:`今日月子餐`,icon:`solar:cup-bold`,path:`/meal/daily-plans`},{label:`护理记录`,icon:`solar:heart-pulse-bold-duotone`,path:`/care/records`}];return t(()=>{}),(t,c)=>(e(),u(`div`,_,[d(`div`,v,[d(`div`,null,[d(`h2`,y,`你好,`+r(M.value)+` 👋`,1),d(`p`,b,r(N.value)+`,祝您工作愉快!`,1)]),f(a(g),{icon:`solar:heart-bold`,class:`text-8xl text-rose-200`})]),d(`div`,x,[(e(!0),u(s,null,p(P.value,t=>(e(),u(`div`,{key:t.title,class:`bg-white rounded-3xl border border-gray-100 shadow-sm p-6`},[d(`div`,S,[d(`div`,{class:n([`w-12 h-12 rounded-2xl flex items-center justify-center text-2xl`,[t.iconBg,t.iconColor]])},[f(a(g),{icon:t.icon},null,8,[`icon`])],2),d(`div`,null,[d(`p`,C,r(t.title),1),d(`p`,w,r(t.value),1)])]),d(`div`,{class:n([`text-xs font-bold flex items-center gap-1`,t.trendUp?`text-green-500`:`text-red-400`])},[f(a(g),{icon:t.trendUp?`solar:double-alt-arrow-up-bold-duotone`:`solar:double-alt-arrow-down-bold-duotone`},null,8,[`icon`]),i(` `+r(t.trend),1)],2)]))),128))]),d(`div`,T,[c[0]||=d(`h3`,{class:`font-bold text-gray-800 mb-5 flex items-center gap-2`},[d(`span`,{class:`w-1 h-5 bg-rose-500 rounded-full inline-block`}),i(` 快捷入口 `)],-1),d(`div`,E,[(e(),u(s,null,p(F,e=>d(`button`,{key:e.label,class:`flex flex-col items-center justify-center gap-3 p-5 rounded-2xl bg-gray-50 hover:bg-rose-50 hover:text-rose-500 transition-all duration-150 group`,onClick:t=>a(j).push(e.path)},[f(a(g),{icon:e.icon,class:`text-3xl text-gray-400 group-hover:text-rose-500 transition-colors`},null,8,[`icon`]),d(`span`,O,r(e.label),1)],8,D)),64))])]),c[1]||=o(`<div class="bg-white rounded-3xl border border-gray-100 shadow-sm p-6"><h3 class="font-bold text-gray-800 mb-4 flex items-center gap-2"><span class="w-1 h-5 bg-rose-500 rounded-full inline-block"></span> 系统信息 </h3><div class="grid grid-cols-3 gap-4"><div class="flex gap-3 text-sm"><span class="text-gray-400 w-20 flex-shrink-0">系统名称</span><span class="text-gray-700 font-medium">宫中有喜月子会所综合管理系统</span></div><div class="flex gap-3 text-sm"><span class="text-gray-400 w-20 flex-shrink-0">当前版本</span><span class="text-gray-700 font-medium">v1.0.0</span></div><div class="flex gap-3 text-sm"><span class="text-gray-400 w-20 flex-shrink-0">技术支持</span><span class="text-gray-700 font-medium">宫中有喜运营团队</span></div></div></div>`,1)]))}};export{k 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
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
View File
@@ -1 +0,0 @@
import{t as e}from"./request-BcX6wdRT.js";var t={getList:t=>e.get(`/finance/categories`,{params:t}),getDetail:t=>e.get(`/finance/categories/${t}`),create:t=>e.post(`/finance/categories`,t),update:(t,n)=>e.put(`/finance/categories/${t}`,n),delete:t=>e.delete(`/finance/categories/${t}`)},n={getList:t=>e.get(`/finance/records`,{params:t}),getDetail:t=>e.get(`/finance/records/${t}`),create:t=>e.post(`/finance/records`,t),update:(t,n)=>e.put(`/finance/records/${t}`,n),delete:t=>e.delete(`/finance/records/${t}`),audit:(t,n)=>e.put(`/finance/records/${t}/audit`,n)},r={getList:t=>e.get(`/finance/accounts`,{params:t}),recharge:t=>e.post(`/finance/accounts/recharge`,t)},i={getList:t=>e.get(`/finance/transactions`,{params:t})},a={getList:t=>e.get(`/finance/prepaid-cards`,{params:t}),getDetail:t=>e.get(`/finance/prepaid-cards/${t}`),create:t=>e.post(`/finance/prepaid-cards`,t),update:(t,n)=>e.put(`/finance/prepaid-cards/${t}`,n),delete:t=>e.delete(`/finance/prepaid-cards/${t}`)},o={getList:t=>e.get(`/finance/invoices`,{params:t}),getDetail:t=>e.get(`/finance/invoices/${t}`),create:t=>e.post(`/finance/invoices`,t),update:(t,n)=>e.put(`/finance/invoices/${t}`,n),delete:t=>e.delete(`/finance/invoices/${t}`),issue:t=>e.put(`/finance/invoices/${t}/issue`)},s={getList:t=>e.get(`/finance/records`,{params:{type:`payment`,...t}}),create:t=>e.post(`/finance/records`,t),audit:(t,n)=>e.put(`/finance/records/${t}/audit`,n)};export{o as a,n as i,r as n,s as o,t as r,a as s,i as t};
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
-1
View File
@@ -1 +0,0 @@
import{t as e}from"./request-BcX6wdRT.js";var t={getList:t=>e.get(`/hr/profiles`,{params:t}),getDetail:t=>e.get(`/hr/profiles/${t}`),create:t=>e.post(`/hr/profiles`,t),update:(t,n)=>e.put(`/hr/profiles/${t}`,n),delete:t=>e.delete(`/hr/profiles/${t}`)},n={getList:t=>e.get(`/hr/schedules`,{params:t}),create:t=>e.post(`/hr/schedules`,t)},r={getList:t=>e.get(`/hr/attendances`,{params:t}),create:t=>e.post(`/hr/attendances`,t),clockIn:()=>e.post(`/hr/attendances/clock-in`),clockOut:()=>e.post(`/hr/attendances/clock-out`)},i={getList:t=>e.get(`/hr/leaves`,{params:t}),getDetail:t=>e.get(`/hr/leaves/${t}`),create:t=>e.post(`/hr/leaves`,t),update:(t,n)=>e.put(`/hr/leaves/${t}`,n),delete:t=>e.delete(`/hr/leaves/${t}`),audit:(t,n)=>e.put(`/hr/leaves/${t}/audit`,n)},a={getList:t=>e.get(`/hr/salaries`,{params:t}),getDetail:t=>e.get(`/hr/salaries/${t}`),create:t=>e.post(`/hr/salaries`,t),update:(t,n)=>e.put(`/hr/salaries/${t}`,n),delete:t=>e.delete(`/hr/salaries/${t}`),confirm:t=>e.put(`/hr/salaries/${t}/confirm`),pay:t=>e.put(`/hr/salaries/${t}/pay`)};export{n as a,a as i,t as n,i as r,r as t};
File diff suppressed because one or more lines are too long
-1
View File
@@ -1 +0,0 @@
import{t as e}from"./request-BcX6wdRT.js";var t={getList:t=>e.get(`/inventory/warehouses`,{params:t}),getDetail:t=>e.get(`/inventory/warehouses/${t}`),create:t=>e.post(`/inventory/warehouses`,t),update:(t,n)=>e.put(`/inventory/warehouses/${t}`,n),delete:t=>e.delete(`/inventory/warehouses/${t}`)},n={getList:t=>e.get(`/inventory/suppliers`,{params:t}),getDetail:t=>e.get(`/inventory/suppliers/${t}`),create:t=>e.post(`/inventory/suppliers`,t),update:(t,n)=>e.put(`/inventory/suppliers/${t}`,n),delete:t=>e.delete(`/inventory/suppliers/${t}`)},r={getList:t=>e.get(`/inventory/materials`,{params:t}),getDetail:t=>e.get(`/inventory/materials/${t}`),create:t=>e.post(`/inventory/materials`,t),update:(t,n)=>e.put(`/inventory/materials/${t}`,n),delete:t=>e.delete(`/inventory/materials/${t}`)},i={getList:t=>e.get(`/inventory/purchase-orders`,{params:t}),getDetail:t=>e.get(`/inventory/purchase-orders/${t}`),create:t=>e.post(`/inventory/purchase-orders`,t),update:(t,n)=>e.put(`/inventory/purchase-orders/${t}`,n),delete:t=>e.delete(`/inventory/purchase-orders/${t}`),audit:(t,n)=>e.put(`/inventory/purchase-orders/${t}/audit`,n)},a={getList:t=>e.get(`/inventory/stock-movements`,{params:t}),getDetail:t=>e.get(`/inventory/stock-movements/${t}`),create:t=>e.post(`/inventory/stock-movements`,t),confirm:t=>e.put(`/inventory/stock-movements/${t}/confirm`)},o={getList:t=>e.get(`/inventory/stock`,{params:t}),export:t=>e.get(`/inventory/stock/export`,{params:t,responseType:`blob`})},s={getList:t=>e.get(`/inventory/transfers`,{params:t}),getDetail:t=>e.get(`/inventory/transfers/${t}`),create:t=>e.post(`/inventory/transfers`,t),confirm:t=>e.put(`/inventory/transfers/${t}/confirm`),cancel:t=>e.put(`/inventory/transfers/${t}/cancel`)},c={getList:t=>e.get(`/inventory/checks`,{params:t}),getDetail:t=>e.get(`/inventory/checks/${t}`),create:t=>e.post(`/inventory/checks`,t),complete:(t,n)=>e.put(`/inventory/checks/${t}/complete`,n)};export{a,t as c,o as i,r as n,n as o,i as r,s,c as t};
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
-1
View File
@@ -1 +0,0 @@
import{t as e}from"./request-BcX6wdRT.js";var t={getList:t=>e.get(`/kb/categories`,{params:t}),getDetail:t=>e.get(`/kb/categories/${t}`),create:t=>e.post(`/kb/categories`,t),update:(t,n)=>e.put(`/kb/categories/${t}`,n),delete:t=>e.delete(`/kb/categories/${t}`)},n={getList:t=>e.get(`/kb/articles`,{params:t}),getDetail:t=>e.get(`/kb/articles/${t}`),create:t=>e.post(`/kb/articles`,t),update:(t,n)=>e.put(`/kb/articles/${t}`,n),delete:t=>e.delete(`/kb/articles/${t}`),publish:t=>e.put(`/kb/articles/${t}/publish`),offline:t=>e.put(`/kb/articles/${t}/offline`)};export{t as n,n as t};
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
View File
@@ -1 +0,0 @@
import{$ as e,L as t,V as n,Wt as r,_ as i,_t as a,lt as o,p as s,st as c,u as l,v as u}from"./runtime-core.esm-bundler-DbRZbT7v.js";import{i as d,r as f,s as p}from"./index-DK5nh4op.js";import"./request-BcX6wdRT.js";import{t as m}from"./user-Tnoer2Cx.js";import{t as h}from"./iconify-f5JHLb1p.js";var g={class:`min-h-screen flex items-center justify-center bg-rose-50 relative overflow-hidden`},_={class:`relative z-10 w-[420px] bg-white rounded-3xl p-12 shadow-2xl text-center`},v={class:`flex justify-center mb-6`},y={class:`w-20 h-20 bg-rose-500 rounded-2xl flex items-center justify-center text-white shadow-lg`},b={class:`text-center mt-2 text-sm text-gray-400`},x={class:`text-xs text-gray-300 mt-4`},S={__name:`index`,setup(S){let C=d(),w=f(),T=m(),E=o(null),D=o(!1),O=c({username:``,password:``}),k={username:[{required:!0,message:`请输入用户名`,trigger:`blur`},{min:2,max:50,message:`用户名长度为 2-50 个字符`,trigger:`blur`}],password:[{required:!0,message:`请输入密码`,trigger:`blur`},{min:6,message:`密码长度不少于 6 位`,trigger:`blur`}]};async function A(){if(E.value){try{await E.value.validate()}catch{return}D.value=!0;try{await T.login({username:O.username,password:O.password});let e=w.query.redirect||`/`;await C.push(e),p.success(`登录成功,欢迎回来!`)}catch{}finally{D.value=!1}}}function j(e){e.key===`Enter`&&A()}return(o,c)=>{let d=n(`el-input`),f=n(`el-form-item`),p=n(`el-button`),m=n(`el-form`),S=n(`router-link`);return t(),s(`div`,g,[c[6]||=l(`div`,{class:`absolute w-96 h-96 rounded-full opacity-20 pointer-events-none`,style:{background:`radial-gradient(circle, #f43f5e, transparent)`,top:`-120px`,right:`-80px`}},null,-1),c[7]||=l(`div`,{class:`absolute w-72 h-72 rounded-full opacity-20 pointer-events-none`,style:{background:`radial-gradient(circle, #fb7185, transparent)`,bottom:`-80px`,left:`-60px`}},null,-1),l(`div`,_,[l(`div`,v,[l(`div`,y,[u(a(h),{icon:`solar:heart-bold`,class:`text-4xl`})])]),c[4]||=l(`h1`,{class:`text-3xl font-bold text-gray-800 mb-2 tracking-widest`},`宫中有喜`,-1),c[5]||=l(`p`,{class:`text-gray-400 text-sm mb-8`},`月子会所综合管理系统`,-1),u(m,{ref_key:`formRef`,ref:E,model:O,rules:k,class:`text-left`,onKeydown:j},{default:e(()=>[u(f,{prop:`username`},{default:e(()=>[u(d,{modelValue:O.username,"onUpdate:modelValue":c[0]||=e=>O.username=e,placeholder:`请输入用户名`,size:`large`,"prefix-icon":`User`,autocomplete:`username`,clearable:``},null,8,[`modelValue`])]),_:1}),u(f,{prop:`password`},{default:e(()=>[u(d,{modelValue:O.password,"onUpdate:modelValue":c[1]||=e=>O.password=e,type:`password`,placeholder:`请输入密码`,size:`large`,"prefix-icon":`Lock`,autocomplete:`current-password`,"show-password":``,clearable:``},null,8,[`modelValue`])]),_:1}),u(f,null,{default:e(()=>[u(p,{type:`primary`,size:`large`,style:{width:`100%`,height:`48px`,"font-size":`16px`,"letter-spacing":`4px`,"border-radius":`12px`},loading:D.value,onClick:A},{default:e(()=>[i(r(D.value?`登录中...`:`登 录`),1)]),_:1},8,[`loading`])]),_:1})]),_:1},8,[`model`]),l(`div`,b,[c[3]||=i(` 还没有账号? `,-1),u(S,{to:`/register`,class:`text-blue-400 hover:text-blue-300 transition-colors`},{default:e(()=>[...c[2]||=[i(`申请注册`,-1)]]),_:1})]),l(`p`,x,`宫中有喜月子会所 © `+r(new Date().getFullYear()),1)])])}}};export{S as default};
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
-1
View File
@@ -1 +0,0 @@
import{t as e}from"./request-BcX6wdRT.js";var t={getList:t=>e.get(`/meal/dishes`,{params:t}),getDetail:t=>e.get(`/meal/dishes/${t}`),create:t=>e.post(`/meal/dishes`,t),update:(t,n)=>e.put(`/meal/dishes/${t}`,n),delete:t=>e.delete(`/meal/dishes/${t}`)},n={getList:t=>e.get(`/meal/templates`,{params:t}),getDetail:t=>e.get(`/meal/templates/${t}`),create:t=>e.post(`/meal/templates`,t),update:(t,n)=>e.put(`/meal/templates/${t}`,n),delete:t=>e.delete(`/meal/templates/${t}`)},r={getList:t=>e.get(`/meal/daily-plans`,{params:t}),getDetail:t=>e.get(`/meal/daily-plans/${t}`),create:t=>e.post(`/meal/daily-plans`,t),update:(t,n)=>e.put(`/meal/daily-plans/${t}`,n),delete:t=>e.delete(`/meal/daily-plans/${t}`),deliver:t=>e.put(`/meal/daily-plans/${t}/deliver`),updateStatus:(t,n)=>e.put(`/meal/daily-plans/${t}/status`,n)},i={getList:t=>e.get(`/meal/reviews`,{params:t}),getDetail:t=>e.get(`/meal/reviews/${t}`),create:t=>e.post(`/meal/reviews`,t)};export{n as i,t as n,i as r,r as t};
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
-1
View File
@@ -1 +0,0 @@
import{t as e}from"./request-BcX6wdRT.js";var t={getList:t=>e.get(`/nanny/nannies`,{params:t}),getDetail:t=>e.get(`/nanny/nannies/${t}`),create:t=>e.post(`/nanny/nannies`,t),update:(t,n)=>e.put(`/nanny/nannies/${t}`,n),delete:t=>e.delete(`/nanny/nannies/${t}`)},n={getList:t=>e.get(`/nanny/orders`,{params:t}),getDetail:t=>e.get(`/nanny/orders/${t}`),create:t=>e.post(`/nanny/orders`,t),update:(t,n)=>e.put(`/nanny/orders/${t}`,n),delete:t=>e.delete(`/nanny/orders/${t}`)},r={getList:t=>e.get(`/nanny/schedules`,{params:t}),create:t=>e.post(`/nanny/schedules`,t)};export{n,r,t};
-1
View File
@@ -1 +0,0 @@
import{$ as e,H as t,L as n,P as r,V as i,Vt as a,Wt as o,_ as s,d as c,et as l,i as u,lt as d,p as f,st as p,u as m,v as h,z as g}from"./runtime-core.esm-bundler-DbRZbT7v.js";import{s as _,t as v}from"./index-DK5nh4op.js";import"./request-BcX6wdRT.js";import{a as y}from"./office-65rbW6z0.js";var b={class:`p-6 space-y-4`},x={class:`bg-white rounded-2xl border border-gray-100 shadow-sm p-4 flex items-center flex-wrap gap-3`},S={class:`bg-white rounded-2xl border border-gray-100 shadow-sm`},C={class:`flex items-center justify-between px-5 py-4 border-b border-gray-50`},w={class:`px-2`},T={key:1,class:`text-muted`},E={class:`px-5 py-3 border-t border-gray-50`},D=v({__name:`index`,setup(v){let D=d([]),O=d(0),k=d(!1),A=p({type:``,is_read:``}),j=p({page:1,per_page:20}),M={1:`系统`,2:`审批`,3:`待办`,4:`提醒`},N={1:``,2:`warning`,3:`danger`,4:`success`};async function P(){k.value=!0;try{let e=await y.getList({...A,...j});D.value=e.data?.list||e.data?.data||[],O.value=e.data?.total||0}finally{k.value=!1}}function F(){j.page=1,P()}function I(){Object.assign(A,{type:``,is_read:``}),F()}async function L(e){await y.markRead(e.id),_.success(`已标记为已读`),P()}async function R(){await y.markAllRead(),_.success(`全部标记为已读`),P()}function z(e){j.page=e,P()}function B(e){j.per_page=e,j.page=1,P()}return r(P),(r,d)=>{let p=i(`el-option`),_=i(`el-select`),v=i(`el-button`),y=i(`el-table-column`),P=i(`el-tag`),V=i(`el-table`),H=i(`el-pagination`),U=t(`loading`);return n(),f(`div`,b,[m(`div`,x,[h(_,{modelValue:A.type,"onUpdate:modelValue":d[0]||=e=>A.type=e,placeholder:`通知类型`,clearable:``,style:{width:`140px`}},{default:e(()=>[(n(),f(u,null,g(M,(e,t)=>h(p,{key:t,label:e,value:Number(t)},null,8,[`label`,`value`])),64))]),_:1},8,[`modelValue`]),h(_,{modelValue:A.is_read,"onUpdate:modelValue":d[1]||=e=>A.is_read=e,placeholder:`读取状态`,clearable:``,style:{width:`130px`}},{default:e(()=>[h(p,{label:`未读`,value:0}),h(p,{label:`已读`,value:1})]),_:1},8,[`modelValue`]),h(v,{type:`primary`,onClick:F},{default:e(()=>[...d[4]||=[s(`查询`,-1)]]),_:1}),h(v,{onClick:I},{default:e(()=>[...d[5]||=[s(`重置`,-1)]]),_:1})]),m(`div`,S,[m(`div`,C,[d[7]||=m(`div`,{class:`flex items-center gap-3`},[m(`span`,{class:`font-medium text-gray-700`},`通知列表`)],-1),h(v,{type:`primary`,onClick:R},{default:e(()=>[...d[6]||=[s(`全部标记已读`,-1)]]),_:1})]),m(`div`,w,[l((n(),c(V,{data:D.value,style:{width:`100%`}},{default:e(()=>[h(y,{prop:`title`,label:`标题`,"min-width":`180`}),h(y,{prop:`content`,label:`内容`,"min-width":`260`,"show-overflow-tooltip":``}),h(y,{label:`类型`,width:`90`,align:`center`},{default:e(({row:t})=>[h(P,{type:N[t.type],size:`small`},{default:e(()=>[s(o(M[t.type]||`-`),1)]),_:2},1032,[`type`])]),_:1}),h(y,{label:`状态`,width:`80`,align:`center`},{default:e(({row:e})=>[m(`span`,{class:a([`read-dot`,e.is_read?`read`:`unread`])},null,2),m(`span`,null,o(e.is_read?`已读`:`未读`),1)]),_:1}),h(y,{prop:`created_at`,label:`创建时间`,"min-width":`160`}),h(y,{label:`操作`,width:`120`,fixed:`right`,align:`center`},{default:e(({row:t})=>[t.is_read?(n(),f(`span`,T,`-`)):(n(),c(v,{key:0,size:`small`,type:`primary`,text:``,onClick:e=>L(t)},{default:e(()=>[...d[8]||=[s(`标记已读`,-1)]]),_:1},8,[`onClick`]))]),_:1})]),_:1},8,[`data`])),[[U,k.value]])]),m(`div`,E,[h(H,{"current-page":j.page,"onUpdate:currentPage":d[2]||=e=>j.page=e,"page-size":j.per_page,"onUpdate:pageSize":d[3]||=e=>j.per_page=e,total:O.value,"page-sizes":[10,20,50],layout:`total, sizes, prev, pager, next, jumper`,background:``,onCurrentChange:z,onSizeChange:B},null,8,[`current-page`,`page-size`,`total`])])])])}}},[[`__scopeId`,`data-v-0e888ba3`]]);export{D as default};
-1
View File
@@ -1 +0,0 @@
import{t as e}from"./request-BcX6wdRT.js";var t={getList:t=>e.get(`/office/approval-templates`,{params:t}),getDetail:t=>e.get(`/office/approval-templates/${t}`),create:t=>e.post(`/office/approval-templates`,t),update:(t,n)=>e.put(`/office/approval-templates/${t}`,n),delete:t=>e.delete(`/office/approval-templates/${t}`)},n={getList:t=>e.get(`/office/approvals`,{params:t}),getDetail:t=>e.get(`/office/approvals/${t}`),create:t=>e.post(`/office/approvals`,t),approve:(t,n)=>e.put(`/office/approvals/${t}/approve`,n),reject:(t,n)=>e.put(`/office/approvals/${t}/reject`,n),withdraw:t=>e.put(`/office/approvals/${t}/withdraw`)},r={getList:t=>e.get(`/office/announcements`,{params:t}),getDetail:t=>e.get(`/office/announcements/${t}`),create:t=>e.post(`/office/announcements`,t),update:(t,n)=>e.put(`/office/announcements/${t}`,n),delete:t=>e.delete(`/office/announcements/${t}`),publish:t=>e.put(`/office/announcements/${t}/publish`)},i={getList:t=>e.get(`/office/handovers`,{params:t}),create:t=>e.post(`/office/handovers`,t),confirm:t=>e.put(`/office/handovers/${t}/confirm`)},a={getList:t=>e.get(`/office/notifications`,{params:t}),markRead:t=>e.put(`/office/notifications/${t}/read`),markAllRead:()=>e.put(`/office/notifications/read-all`)};export{a,i,n,t as r,r as t};
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
View File
@@ -1 +0,0 @@
import{$ as e,H as t,L as n,P as r,Ut as i,V as a,Wt as o,d as s,et as c,i as l,lt as u,p as d,u as f,v as p,z as m}from"./runtime-core.esm-bundler-DbRZbT7v.js";import{t as h}from"./index-DK5nh4op.js";import"./request-BcX6wdRT.js";import{t as g}from"./report-DwsbaDxh.js";var _={class:`p-6 space-y-4`},v={class:`bg-white rounded-2xl border border-gray-100 shadow-sm p-5 mb-4 flex items-center gap-4`},y={class:`flex-1 min-w-0`},b={class:`text-sm text-gray-500 mb-1`},x={class:`flex items-baseline gap-1`},S={class:`text-sm text-gray-400`},C=h({__name:`index`,setup(h){let C=u(!1),w=u([{key:`customer_count`,title:`客户数`,value:`--`,unit:``,color:`#E8A87C`,bg:`#FBE8D5`},{key:`contract_amount`,title:`合同金额`,value:`--`,unit:``,color:`#67C23A`,bg:`#E8F5E1`},{key:`total_rooms`,title:`总房间数`,value:`--`,unit:``,color:`#409EFF`,bg:`#E0EFFF`},{key:`occupied_rooms`,title:`入住房间数`,value:`--`,unit:``,color:`#E6A23C`,bg:`#FDF0D6`},{key:`today_revenue`,title:`今日营收`,value:`--`,unit:``,color:`#F56C6C`,bg:`#FDE2E2`},{key:`month_revenue`,title:`月度营收`,value:`--`,unit:``,color:`#C97B5E`,bg:`#F9E8E0`}]);async function T(){C.value=!0;try{let e=(await g.overview()).data||{};w.value.forEach(t=>{e[t.key]!==void 0&&e[t.key]!==null&&(t.value=e[t.key])})}finally{C.value=!1}}return r(T),(r,u)=>{let h=a(`el-col`),g=a(`el-row`),T=t(`loading`);return c((n(),d(`div`,_,[u[0]||=f(`div`,{class:`flex items-center gap-2 mb-2`},[f(`span`,{class:`w-1 h-5 rounded bg-primary inline-block`,style:{background:`var(--color-primary)`}}),f(`span`,{class:`font-semibold text-base text-gray-800`},`经营概览`)],-1),p(g,{gutter:16},{default:e(()=>[(n(!0),d(l,null,m(w.value,t=>(n(),s(h,{key:t.key,xs:24,sm:12,md:8,lg:8,xl:4},{default:e(()=>[f(`div`,v,[f(`div`,{class:`w-14 h-14 rounded-xl flex items-center justify-center flex-shrink-0`,style:i({background:t.bg})},[f(`span`,{class:`text-2xl font-bold`,style:i({color:t.color})},o(t.title.charAt(0)),5)],4),f(`div`,y,[f(`div`,b,o(t.title),1),f(`div`,x,[f(`span`,{class:`text-3xl font-bold leading-none`,style:i({color:t.color})},o(t.value),5),f(`span`,S,o(t.unit),1)])])])]),_:2},1024))),128))]),_:1})])),[[T,C.value]])}}},[[`__scopeId`,`data-v-5c43fcd0`]]);export{C 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
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
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
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
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
-1
View File
@@ -1 +0,0 @@
import{t as e}from"./request-BcX6wdRT.js";var t={overview:t=>e.get(`/report/overview`,{params:t}),revenue:t=>e.get(`/report/revenue`,{params:t}),occupancy:t=>e.get(`/report/occupancy`,{params:t}),crmConversion:t=>e.get(`/report/crm-conversion`,{params:t})},n={getList:t=>e.get(`/report/exports`,{params:t}),create:t=>e.post(`/report/exports`,t)};export{n,t};
-1
View File
@@ -1 +0,0 @@
import{s as e}from"./index-DK5nh4op.js";import{t}from"./axios-m2QKKPzv.js";var n=t.create({baseURL:`/api/v1`,timeout:15e3,headers:{"Content-Type":`application/json`,Accept:`application/json`}});n.interceptors.request.use(e=>{let t=localStorage.getItem(`token`);return t&&(e.headers.Authorization=`Bearer ${t}`),e},e=>Promise.reject(e)),n.interceptors.response.use(t=>{let n=t.data;return n.code===0?n:n.code>=40100&&n.code<=40199?(localStorage.removeItem(`token`),localStorage.removeItem(`userInfo`),e.error(`登录已过期,请重新登录`),window.location.href=`/login`,Promise.reject(Error(n.message||`未授权`))):(e.error(n.message||`请求失败`),Promise.reject(Error(n.message||`请求失败`)))},t=>{if(t.response){let n=t.response.status;if(n===401)return localStorage.removeItem(`token`),localStorage.removeItem(`userInfo`),e.error(`登录已过期,请重新登录`),window.location.href=`/login`,Promise.reject(t);if(n===403)return e.error(`无权限访问`),Promise.reject(t);if(n===404)return e.error(`请求的资源不存在`),Promise.reject(t);if(n>=500)return e.error(`服务器内部错误,请稍后重试`),Promise.reject(t)}return t.code===`ECONNABORTED`||t.message.includes(`timeout`)?(e.error(`请求超时,请检查网络连接`),Promise.reject(t)):(e.error(t.message||`网络错误`),Promise.reject(t))});export{n as t};
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
View File
@@ -1 +0,0 @@
.form-tip[data-v-2186d196]{color:var(--color-text-secondary);margin-top:4px;font-size:12px;line-height:1.4}
-1
View File
@@ -1 +0,0 @@
import{t as e}from"./request-BcX6wdRT.js";var t={getList:t=>e.get(`/room/room-types`,{params:t}),getDetail:t=>e.get(`/room/room-types/${t}`),create:t=>e.post(`/room/room-types`,t),update:(t,n)=>e.put(`/room/room-types/${t}`,n),delete:t=>e.delete(`/room/room-types/${t}`)},n={getList:t=>e.get(`/room/rooms`,{params:t}),getDetail:t=>e.get(`/room/rooms/${t}`),create:t=>e.post(`/room/rooms`,t),update:(t,n)=>e.put(`/room/rooms/${t}`,n),delete:t=>e.delete(`/room/rooms/${t}`),updateStatus:(t,n)=>e.put(`/room/rooms/${t}/status`,n)},r={getList:t=>e.get(`/room/reservations`,{params:t}),getDetail:t=>e.get(`/room/reservations/${t}`),create:t=>e.post(`/room/reservations`,t),update:(t,n)=>e.put(`/room/reservations/${t}`,n),delete:t=>e.delete(`/room/reservations/${t}`),checkIn:t=>e.put(`/room/reservations/${t}/check-in`),checkOut:t=>e.put(`/room/reservations/${t}/check-out`),cancel:(t,n)=>e.put(`/room/reservations/${t}/cancel`,n)},i={getList:t=>e.get(`/room/customer-outings`,{params:t}),getDetail:t=>e.get(`/room/customer-outings/${t}`),create:t=>e.post(`/room/customer-outings`,t),recordBack:(t,n)=>e.put(`/room/customer-outings/${t}/back`,n)},a={getList:t=>e.get(`/room/call-records`,{params:t}),create:t=>e.post(`/room/call-records`,t),handle:(t,n)=>e.put(`/room/call-records/${t}/handle`,n)};export{t as a,n as i,i as n,r,a as t};
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
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
-1
View File
@@ -1 +0,0 @@
import{t as e}from"./request-BcX6wdRT.js";var t={getList:t=>e.get(`/service/items`,{params:t}),getDetail:t=>e.get(`/service/items/${t}`),create:t=>e.post(`/service/items`,t),update:(t,n)=>e.put(`/service/items/${t}`,n),delete:t=>e.delete(`/service/items/${t}`)},n={getList:t=>e.get(`/service/packages`,{params:t}),getDetail:t=>e.get(`/service/packages/${t}`),create:t=>e.post(`/service/packages`,t),update:(t,n)=>e.put(`/service/packages/${t}`,n),delete:t=>e.delete(`/service/packages/${t}`)},r={getList:t=>e.get(`/service/orders`,{params:t}),getDetail:t=>e.get(`/service/orders/${t}`),create:t=>e.post(`/service/orders`,t),update:(t,n)=>e.put(`/service/orders/${t}`,n),delete:t=>e.delete(`/service/orders/${t}`),pay:(t,n)=>e.put(`/service/orders/${t}/pay`,n),complete:t=>e.put(`/service/orders/${t}/complete`)},i={getList:t=>e.get(`/service/executions`,{params:t}),create:t=>e.post(`/service/executions`,t),start:t=>e.put(`/service/executions/${t}/start`),finish:t=>e.put(`/service/executions/${t}/finish`)};export{n as i,t as n,r,i as t};
-1
View File
@@ -1 +0,0 @@
import{$ as e,H as t,L as n,P as r,V as i,Vt as a,Wt as o,_ as s,d as c,et as l,f as u,i as d,lt as f,p,st as m,u as h,v as g,z as _}from"./runtime-core.esm-bundler-DbRZbT7v.js";import{s as v}from"./index-DK5nh4op.js";import"./request-BcX6wdRT.js";import{c as y,i as b,n as x}from"./inventory-B_vJhWAi.js";var S={class:`p-6 space-y-4`},C={class:`bg-white rounded-2xl border border-gray-100 shadow-sm p-4 flex items-center flex-wrap gap-3`},w={class:`bg-white rounded-2xl border border-gray-100 shadow-sm`},T={class:`flex items-center gap-3 px-5 py-4 border-b border-gray-50`},E={class:`text-sm text-gray-400 ml-1`},D={class:`px-2`},O={class:`px-5 py-3 border-t border-gray-50`},k={__name:`index`,setup(k){let A=f([]),j=f(0),M=f(!1),N=f([]),P=f([]),F=m({warehouse_id:``,material_id:``,low_stock:``}),I=m({page:1,per_page:20});async function L(){M.value=!0;try{let e=await b.getList({...F,...I});A.value=e.data?.list||e.data?.data||[],j.value=e.data?.total||0}catch{v.error(`获取库存列表失败`)}finally{M.value=!1}}async function R(){try{let[e,t]=await Promise.all([y.getList({per_page:500}),x.getList({per_page:500})]);N.value=e.data?.list||e.data?.data||[],P.value=t.data?.list||t.data?.data||[]}catch{}}function z(){I.page=1,L()}function B(){Object.assign(F,{warehouse_id:``,material_id:``,low_stock:``}),z()}function V(e){I.page=e,L()}function H(e){I.per_page=e,I.page=1,L()}function U(e){return e.min_quantity!=null&&Number(e.quantity)<Number(e.min_quantity)}function W(){v.info(`导出功能待实现`)}return r(()=>{L(),R()}),(r,f)=>{let m=i(`el-option`),v=i(`el-select`),y=i(`el-button`),b=i(`el-alert`),x=i(`el-table-column`),k=i(`el-tag`),L=i(`el-table`),R=i(`el-pagination`),G=t(`loading`);return n(),p(`div`,S,[h(`div`,C,[g(v,{modelValue:F.warehouse_id,"onUpdate:modelValue":f[0]||=e=>F.warehouse_id=e,placeholder:`选择仓库`,clearable:``,filterable:``,style:{width:`160px`}},{default:e(()=>[(n(!0),p(d,null,_(N.value,e=>(n(),c(m,{key:e.id,label:e.name,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`]),g(v,{modelValue:F.material_id,"onUpdate:modelValue":f[1]||=e=>F.material_id=e,placeholder:`选择物料`,clearable:``,filterable:``,style:{width:`180px`}},{default:e(()=>[(n(!0),p(d,null,_(P.value,e=>(n(),c(m,{key:e.id,label:`${e.name}(${e.code||`-`})`,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`]),g(v,{modelValue:F.low_stock,"onUpdate:modelValue":f[2]||=e=>F.low_stock=e,placeholder:`库存状态`,clearable:``,style:{width:`130px`}},{default:e(()=>[g(m,{label:`全部`,value:``}),g(m,{label:`低库存预警`,value:`1`})]),_:1},8,[`modelValue`]),g(y,{type:`primary`,onClick:z},{default:e(()=>[...f[5]||=[s(`查询`,-1)]]),_:1}),g(y,{onClick:B},{default:e(()=>[...f[6]||=[s(`重置`,-1)]]),_:1}),g(y,{class:`ml-auto`,onClick:W},{default:e(()=>[...f[7]||=[s(`导出`,-1)]]),_:1})]),g(b,{title:`红色行表示当前库存低于最低库存量,请及时补货`,type:`warning`,"show-icon":``,closable:!1}),h(`div`,w,[h(`div`,T,[f[8]||=h(`span`,{class:`w-1 h-5 bg-rose-500 rounded-full inline-block`},null,-1),f[9]||=h(`span`,{class:`font-medium text-gray-700`},`库存查询`,-1),h(`span`,E,``+o(j.value)+``,1)]),h(`div`,D,[l((n(),c(L,{data:A.value,style:{width:`100%`},"row-class-name":({row:e})=>U(e)?`low-stock-row`:``},{default:e(()=>[g(x,{prop:`warehouse_name`,label:`仓库`,"min-width":`110`}),g(x,{prop:`material_code`,label:`物料编码`,width:`120`}),g(x,{prop:`material_name`,label:`物料名称`,"min-width":`140`}),g(x,{prop:`category`,label:`分类`,width:`100`,align:`center`}),g(x,{prop:`unit`,label:`单位`,width:`70`,align:`center`}),g(x,{label:`当前库存`,width:`110`,align:`right`},{default:e(({row:t})=>[h(`span`,{class:a(U(t)?`text-red-500 font-bold`:`text-gray-700`)},o(t.quantity),3),U(t)?(n(),c(k,{key:0,type:`danger`,size:`small`,class:`ml-1`},{default:e(()=>[...f[10]||=[s(`偏低`,-1)]]),_:1})):u(``,!0)]),_:1}),g(x,{prop:`min_quantity`,label:`最低库存`,width:`100`,align:`right`}),g(x,{prop:`max_quantity`,label:`最高库存`,width:`100`,align:`right`}),g(x,{prop:`updated_at`,label:`更新时间`,"min-width":`160`})]),_:1},8,[`data`,`row-class-name`])),[[G,M.value]])]),h(`div`,O,[g(R,{"current-page":I.page,"onUpdate:currentPage":f[3]||=e=>I.page=e,"page-size":I.per_page,"onUpdate:pageSize":f[4]||=e=>I.per_page=e,total:j.value,"page-sizes":[10,20,50],layout:`total,sizes,prev,pager,next,jumper`,background:``,onCurrentChange:V,onSizeChange:H},null,8,[`current-page`,`page-size`,`total`])])])])}}};export{k 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
View File
@@ -1 +0,0 @@
import{t as e}from"./request-BcX6wdRT.js";var t={getList:t=>e.get(`/system/stores`,{params:t}),getDetail:t=>e.get(`/system/stores/${t}`),create:t=>e.post(`/system/stores`,t),update:(t,n)=>e.put(`/system/stores/${t}`,n),delete:t=>e.delete(`/system/stores/${t}`)},n={getList:t=>e.get(`/system/departments`,{params:t}),create:t=>e.post(`/system/departments`,t),update:(t,n)=>e.put(`/system/departments/${t}`,n),delete:t=>e.delete(`/system/departments/${t}`)},r={getList:t=>e.get(`/system/positions`,{params:t}),create:t=>e.post(`/system/positions`,t),update:(t,n)=>e.put(`/system/positions/${t}`,n),delete:t=>e.delete(`/system/positions/${t}`)},i={getList:t=>e.get(`/system/users`,{params:t}),getDetail:t=>e.get(`/system/users/${t}`),create:t=>e.post(`/system/users`,t),update:(t,n)=>e.put(`/system/users/${t}`,n),delete:t=>e.delete(`/system/users/${t}`),resetPassword:(t,n)=>e.put(`/system/users/${t}/password`,n),updateStatus:(t,n)=>e.put(`/system/users/${t}/status`,{status:n}),approve:t=>e.put(`/system/users/${t}/approve`),reject:t=>e.put(`/system/users/${t}/reject`)},a={getList:t=>e.get(`/system/roles`,{params:t}),getDetail:t=>e.get(`/system/roles/${t}`),create:t=>e.post(`/system/roles`,t),update:(t,n)=>e.put(`/system/roles/${t}`,n),delete:t=>e.delete(`/system/roles/${t}`),assignPermissions:(t,n)=>e.put(`/system/roles/${t}/permissions`,{permission_ids:n})},o={getList:t=>e.get(`/system/menus`,{params:t}),create:t=>e.post(`/system/menus`,t),update:(t,n)=>e.put(`/system/menus/${t}`,n),delete:t=>e.delete(`/system/menus/${t}`)},s={getList:t=>e.get(`/system/permissions`,{params:t}),create:t=>e.post(`/system/permissions`,t),update:(t,n)=>e.put(`/system/permissions/${t}`,n),delete:t=>e.delete(`/system/permissions/${t}`)},c={getTypeList:t=>e.get(`/system/dictionaries`,{params:t}),createType:t=>e.post(`/system/dictionaries`,t),deleteType:t=>e.delete(`/system/dictionaries/${t}`),getItemList:(t,n)=>e.get(`/system/dictionaries/${t}/items`,{params:n}),createItem:(t,n)=>e.post(`/system/dictionaries/${t}/items`,n),updateItem:(t,n)=>e.put(`/system/dictionary-items/${t}`,n),deleteItem:t=>e.delete(`/system/dictionary-items/${t}`)},l={getList:t=>e.get(`/system/operation-logs`,{params:t})},u={getList:t=>e.get(`/system/registration-packages`,{params:t}),getDetail:t=>e.get(`/system/registration-packages/${t}`),create:t=>e.post(`/system/registration-packages`,t),update:(t,n)=>e.put(`/system/registration-packages/${t}`,n),delete:t=>e.delete(`/system/registration-packages/${t}`)};export{n as departmentApi,c as dictApi,l as logApi,o as menuApi,s as permissionApi,r as positionApi,u as registrationPackageApi,a as roleApi,t as storeApi,i as userApi};
File diff suppressed because one or more lines are too long
-1
View File
@@ -1 +0,0 @@
import{$ as e,H as t,L as n,P as r,V as i,Vt as a,Wt as o,_ as s,d as c,et as l,i as u,lt as d,p as f,st as p,u as m,v as h,z as g}from"./runtime-core.esm-bundler-DbRZbT7v.js";import{l as _,s as v}from"./index-DK5nh4op.js";import"./request-BcX6wdRT.js";import{t as y}from"./finance-BtB7VcrK.js";var b={class:`p-6 space-y-4`},x={class:`bg-white rounded-2xl border border-gray-100 shadow-sm p-4 flex items-center flex-wrap gap-3`},S={class:`bg-white rounded-2xl border border-gray-100 shadow-sm`},C={class:`flex items-center gap-3 px-5 py-4 border-b border-gray-50`},w={class:`px-2`},T={class:`text-gray-700`},E={class:`px-5 py-3 border-t border-gray-50`},D={__name:`index`,setup(D){let O=d([]),k=d(0),A=d(!1),j=p({account_id:``,type:``,date_from:``,date_to:``}),M=p({page:1,per_page:20}),N={deposit:`充值`,consume:`消费`,refund:`退款`,adjust:`调整`},P={deposit:`success`,consume:`danger`,refund:`warning`,adjust:`info`};async function F(){A.value=!0;try{let e=await y.getList({...j,...M});O.value=e.data?.list||e.data?.data||[],k.value=e.data?.total||0}catch{v.error(`获取流水列表失败`)}finally{A.value=!1}}function I(){M.page=1,F()}function L(){Object.assign(j,{account_id:``,type:``,date_from:``,date_to:``}),I()}function R(e){M.page=e,F()}function z(e){M.per_page=e,M.page=1,F()}function B(e){return[`deposit`,`refund`].includes(e.type)?`text-green-600 font-semibold`:`text-red-500 font-semibold`}function V(e){return[`deposit`,`refund`].includes(e.type)?`+`:`-`}return r(()=>F()),(r,d)=>{let p=i(`el-input`),v=i(`el-option`),y=i(`el-select`),D=i(`el-date-picker`),F=i(`el-button`),H=i(`el-tag`),U=i(`el-table-column`),W=i(`el-table`),G=i(`el-pagination`),K=t(`loading`);return n(),f(`div`,b,[m(`div`,x,[h(p,{modelValue:j.account_id,"onUpdate:modelValue":d[0]||=e=>j.account_id=e,placeholder:`账户ID`,style:{width:`150px`},clearable:``,onKeydown:_(I,[`enter`])},null,8,[`modelValue`]),h(y,{modelValue:j.type,"onUpdate:modelValue":d[1]||=e=>j.type=e,placeholder:`流水类型`,clearable:``,style:{width:`130px`}},{default:e(()=>[(n(),f(u,null,g(N,(e,t)=>h(v,{key:t,label:e,value:t},null,8,[`label`,`value`])),64))]),_:1},8,[`modelValue`]),h(D,{modelValue:j.date_from,"onUpdate:modelValue":d[2]||=e=>j.date_from=e,type:`date`,"value-format":`YYYY-MM-DD`,placeholder:`开始日期`,style:{width:`150px`}},null,8,[`modelValue`]),h(D,{modelValue:j.date_to,"onUpdate:modelValue":d[3]||=e=>j.date_to=e,type:`date`,"value-format":`YYYY-MM-DD`,placeholder:`结束日期`,style:{width:`150px`}},null,8,[`modelValue`]),h(F,{type:`primary`,onClick:I},{default:e(()=>[...d[6]||=[s(`查询`,-1)]]),_:1}),h(F,{onClick:L},{default:e(()=>[...d[7]||=[s(`重置`,-1)]]),_:1})]),m(`div`,S,[m(`div`,C,[d[9]||=m(`span`,{class:`w-1 h-5 bg-rose-500 rounded-full inline-block`},null,-1),d[10]||=m(`span`,{class:`font-medium text-gray-700`},`账户流水明细`,-1),h(H,{type:`info`,size:`small`,class:`ml-auto`},{default:e(()=>[...d[8]||=[s(`只读`,-1)]]),_:1})]),m(`div`,w,[l((n(),c(W,{data:O.value,style:{width:`100%`},stripe:``},{default:e(()=>[h(U,{prop:`id`,label:`流水ID`,width:`80`,align:`center`}),h(U,{prop:`customer_name`,label:`客户`,"min-width":`110`}),h(U,{label:`类型`,width:`90`,align:`center`},{default:e(({row:t})=>[h(H,{type:P[t.type],size:`small`},{default:e(()=>[s(o(N[t.type]||t.type),1)]),_:2},1032,[`type`])]),_:1}),h(U,{label:`金额`,width:`120`,align:`right`},{default:e(({row:e})=>[m(`span`,{class:a(B(e))},o(V(e))+o(Number(e.amount||0).toFixed(2)),3)]),_:1}),h(U,{label:`余额(后)`,width:`120`,align:`right`},{default:e(({row:e})=>[m(`span`,T,o(Number(e.balance_after||0).toFixed(2)),1)]),_:1}),h(U,{prop:`operator_name`,label:`操作人`,width:`100`,align:`center`}),h(U,{prop:`remark`,label:`备注`,"min-width":`140`,"show-overflow-tooltip":``}),h(U,{prop:`created_at`,label:`时间`,"min-width":`160`})]),_:1},8,[`data`])),[[K,A.value]])]),m(`div`,E,[h(G,{"current-page":M.page,"onUpdate:currentPage":d[4]||=e=>M.page=e,"page-size":M.per_page,"onUpdate:pageSize":d[5]||=e=>M.per_page=e,total:k.value,"page-sizes":[10,20,50],layout:`total,sizes,prev,pager,next,jumper`,background:``,onCurrentChange:R,onSizeChange:z},null,8,[`current-page`,`page-size`,`total`])])])])}}};export{D as default};
File diff suppressed because one or more lines are too long
-1
View File
@@ -1 +0,0 @@
import{l as e,lt as t}from"./runtime-core.esm-bundler-DbRZbT7v.js";import{a as n,d as r}from"./index-DK5nh4op.js";import{t as i}from"./request-BcX6wdRT.js";function a(e){return i.post(`/auth/login`,e)}function o(){return i.post(`/auth/logout`)}function s(){return i.get(`/auth/me`)}var c=r({useUserStore:()=>l}),l=n(`user`,()=>{let n=t(localStorage.getItem(`token`)||``),r=t(null),i=t([]),c=t([]),l=e(()=>!!n.value),u=e(()=>r.value?.is_super===!0||r.value?.is_super===1);async function d(e){let t=await a(e),{token:r}=t.data;return n.value=r,localStorage.setItem(`token`,r),t}async function f(){let e=await s(),t=e.data;return r.value=t,i.value=t.permissions||[],c.value=t.menus||[],e}async function p(){try{await o()}catch{}finally{n.value=``,r.value=null,i.value=[],c.value=[],localStorage.removeItem(`token`),localStorage.removeItem(`userInfo`)}}function m(e){return u.value?!0:i.value.includes(e)}return{token:n,userInfo:r,permissions:i,menus:c,isLoggedIn:l,isSuper:u,login:d,getInfo:f,logout:p,hasPermission:m}});export{c as n,l as t};
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
@@ -5,7 +5,7 @@
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>frontend</title>
<script type="module" crossorigin src="/assets/index-DK5nh4op.js"></script>
<script type="module" crossorigin src="/assets/index-ZRE77JpD.js"></script>
<link rel="modulepreload" crossorigin href="/assets/preload-helper-DSXbuxSR.js">
<link rel="modulepreload" crossorigin href="/assets/runtime-core.esm-bundler-DbRZbT7v.js">
<link rel="stylesheet" crossorigin href="/assets/index-BTxz3KtI.css">
+20 -14
View File
@@ -29,11 +29,11 @@ const form = reactive({
})
const formRules = {
name: [{ required: true, message: '请输入角色名称', trigger: 'blur' }],
code: [
{ required: true, message: '请输入角色标识', trigger: 'blur' },
{ pattern: /^[a-zA-Z][a-zA-Z0-9_:]*$/, message: '只允许字母、数字、下划线,以字母开头', trigger: 'blur' }
]
name: [{ required: true, message: '请输入角色名称', trigger: 'blur' }]
}
function genCode() {
return 'role_' + Date.now().toString(36)
}
// Permission assignment
@@ -68,17 +68,23 @@ async function fetchList() {
async function fetchPermTree() {
try {
const res = await permissionApi.getList({ per_page: 500 })
const flat = res.data?.list || res.data?.data || []
permTree.value = buildPermTree(flat)
const res = await permissionApi.getList({ page_size: 500 })
// API returns already-tree-structured array in res.data
const data = res.data
if (Array.isArray(data)) {
permTree.value = data
} else {
const flat = data?.list || data?.data || []
permTree.value = buildPermTree(flat)
}
} catch {
//
}
}
function buildPermTree(nodes, parentId = null) {
function buildPermTree(nodes, parentId = 0) {
return nodes
.filter(n => (n.parent_id ?? null) === parentId)
.filter(n => (n.parent_id ?? 0) === parentId)
.map(n => ({ ...n, children: buildPermTree(nodes, n.id) }))
}
@@ -97,7 +103,7 @@ function handleReset() {
function handleAdd() {
isEdit.value = false
dialogTitle.value = '新增角色'
Object.assign(form, { id: null, name: '', code: '', description: '', status: 1 })
Object.assign(form, { id: null, name: '', code: genCode(), description: '', status: 1 })
dialogVisible.value = true
}
@@ -274,9 +280,9 @@ onMounted(() => {
<el-form-item label="角色名称" prop="name">
<el-input v-model="form.name" placeholder="请输入角色名称" />
</el-form-item>
<el-form-item label="角色标识" prop="code">
<el-input v-model="form.code" placeholder="如: admin, nurse_manager" :disabled="isEdit" />
<div class="form-tip">标识用于程序内部权限判断创建后不可修改</div>
<el-form-item v-if="isEdit" label="角色标识">
<el-input v-model="form.code" disabled />
<div class="form-tip">角色标识由系统自动生成不可修改</div>
</el-form-item>
<el-form-item label="描述" prop="description">
<el-input