feat: 注册页加部门选择/用户管理修部门下拉/超管可跨店建用户/公开部门接口

This commit is contained in:
li
2026-03-14 18:28:35 +08:00
parent f7adb5f609
commit 94b46611d3
98 changed files with 209 additions and 129 deletions
@@ -86,6 +86,25 @@ class AuthController extends Controller
]);
}
/**
* 获取门店部门列表(公开接口,注册时使用)
*/
public function departments(Request $request): JsonResponse
{
$storeId = $request->input('store_id');
if (!$storeId) {
return $this->error('请选择门店', 42200);
}
$departments = \App\Models\Department::withoutGlobalScope('store')
->where('store_id', $storeId)
->where('status', 1)
->orderBy('sort')
->get(['id', 'name', 'parent_id']);
return $this->success($departments);
}
/**
* 获取可用注册套餐列表(公开接口)
*/
@@ -118,6 +137,7 @@ class AuthController extends Controller
'password' => 'required|string|min:6',
'name' => 'required|string|max:50',
'phone' => 'required|string|max:20',
'department_id' => 'nullable|exists:departments,id',
]);
// 验证套餐属于该门店
@@ -128,12 +148,13 @@ class AuthController extends Controller
->firstOrFail();
$user = \App\Models\User::create([
'store_id' => $data['store_id'],
'username' => $data['username'],
'password' => $data['password'],
'name' => $data['name'],
'phone' => $data['phone'],
'status' => 2, // Pending
'store_id' => $data['store_id'],
'username' => $data['username'],
'password' => $data['password'],
'name' => $data['name'],
'phone' => $data['phone'],
'department_id' => $data['department_id'] ?? null,
'status' => 2, // Pending
]);
// 绑定套餐角色
@@ -47,12 +47,20 @@ class UserController extends Controller
'status' => 'in:0,1,2',
'role_ids' => 'array',
'role_ids.*' => 'exists:roles,id',
'store_id' => 'nullable|exists:stores,id',
]);
$roleIds = $data['role_ids'] ?? [];
unset($data['role_ids']);
$data['store_id'] = auth()->user()->store_id;
$authUser = auth()->user();
// 超级管理员可指定 store_id,普通管理员只能在自己门店下创建
if ($authUser->is_super && !empty($data['store_id'])) {
// use provided store_id
} else {
$data['store_id'] = $authUser->store_id;
}
$user = User::create($data);
if ($roleIds) {
+1
View File
@@ -80,6 +80,7 @@ use App\Http\Controllers\Admin\System\RegistrationPackageController;
Route::post('/auth/login', [AuthController::class, 'login']);
Route::post('/auth/register', [AuthController::class, 'register']);
Route::get('/auth/register/packages', [AuthController::class, 'registrationPackages']);
Route::get('/auth/register/departments', [AuthController::class, 'departments']);
Route::get('/auth/stores', [\App\Http\Controllers\Admin\System\StoreController::class, 'publicList']);
// ===== 需要认证的路由 =====
@@ -1 +1 @@
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-3YculFMX.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};
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-Mgun2LFs.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 +1 @@
import{t as e}from"./request-DD5g7hLU.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};
import{t as e}from"./request-DG5cMCYw.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 +1 @@
import{t as e}from"./request-DD5g7hLU.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};
import{t as e}from"./request-DG5cMCYw.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 +1 @@
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-3YculFMX.js";import"./request-DD5g7hLU.js";import{t as h}from"./user-BFl2lhly.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};
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-Mgun2LFs.js";import"./request-DG5cMCYw.js";import{t as h}from"./user-MeQHut5G.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 +1 @@
import{t as e}from"./request-DD5g7hLU.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};
import{t as e}from"./request-DG5cMCYw.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 +1 @@
import{t as e}from"./request-DD5g7hLU.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};
import{t as e}from"./request-DG5cMCYw.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 +1 @@
import{t as e}from"./request-DD5g7hLU.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};
import{t as e}from"./request-DG5cMCYw.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 +1 @@
import{t as e}from"./request-DD5g7hLU.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};
import{t as e}from"./request-DG5cMCYw.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 +1 @@
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-3YculFMX.js";import"./request-DD5g7hLU.js";import{t as m}from"./user-BFl2lhly.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};
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-Mgun2LFs.js";import"./request-DG5cMCYw.js";import{t as m}from"./user-MeQHut5G.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 +1 @@
import{t as e}from"./request-DD5g7hLU.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};
import{t as e}from"./request-DG5cMCYw.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 +1 @@
import{t as e}from"./request-DD5g7hLU.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};
import{t as e}from"./request-DG5cMCYw.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 +1 @@
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-3YculFMX.js";import"./request-DD5g7hLU.js";import{a as y}from"./office-CIThbrL3.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};
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-Mgun2LFs.js";import"./request-DG5cMCYw.js";import{a as y}from"./office-B6vgiUI4.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 +1 @@
import{t as e}from"./request-DD5g7hLU.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};
import{t as e}from"./request-DG5cMCYw.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 +1 @@
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-3YculFMX.js";import"./request-DD5g7hLU.js";import{t as g}from"./report-wIlYRH-f.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};
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-Mgun2LFs.js";import"./request-DG5cMCYw.js";import{t as g}from"./report-B0fHHL3b.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
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
import{t as e}from"./request-DD5g7hLU.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};
import{t as e}from"./request-DG5cMCYw.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 +1 @@
import{s as e}from"./index-3YculFMX.js";import{t}from"./axios-M7beJlyD.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};
import{s as e}from"./index-Mgun2LFs.js";import{t}from"./axios-BvjS45eU.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 +1 @@
import{t as e}from"./request-DD5g7hLU.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};
import{t as e}from"./request-DG5cMCYw.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 +1 @@
import{t as e}from"./request-DD5g7hLU.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};
import{t as e}from"./request-DG5cMCYw.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 +1 @@
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-3YculFMX.js";import"./request-DD5g7hLU.js";import{c as y,i as b,n as x}from"./inventory-BVEZNzEQ.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};
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-Mgun2LFs.js";import"./request-DG5cMCYw.js";import{c as y,i as b,n as x}from"./inventory-DpS3CSeB.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 +1 @@
import{t as e}from"./request-DD5g7hLU.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};
import{t as e}from"./request-DG5cMCYw.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 +1 @@
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-3YculFMX.js";import"./request-DD5g7hLU.js";import{t as y}from"./finance-xn2Nlkdw.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};
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-Mgun2LFs.js";import"./request-DG5cMCYw.js";import{t as y}from"./finance-Cw6lAEm1.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 +1 @@
import{l as e,lt as t}from"./runtime-core.esm-bundler-DbRZbT7v.js";import{a as n,d as r}from"./index-3YculFMX.js";import{t as i}from"./request-DD5g7hLU.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};
import{l as e,lt as t}from"./runtime-core.esm-bundler-DbRZbT7v.js";import{a as n,d as r}from"./index-Mgun2LFs.js";import{t as i}from"./request-DG5cMCYw.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
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-3YculFMX.js"></script>
<script type="module" crossorigin src="/assets/index-Mgun2LFs.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">
+43 -16
View File
@@ -7,12 +7,15 @@ import axios from 'axios'
const router = useRouter()
const loading = ref(false)
const packagesLoading = ref(false)
const deptLoading = ref(false)
const packages = ref([])
const stores = ref([])
const departments = ref([])
const form = reactive({
store_id: '',
registration_package_id: '',
department_id: '',
username: '',
password: '',
name: '',
@@ -22,7 +25,7 @@ const form = reactive({
const formRef = ref(null)
const rules = {
store_id: [{ required: true, message: '请选择门店', trigger: 'change' }],
registration_package_id: [{ required: true, message: '请选择岗位套餐', trigger: 'change' }],
registration_package_id: [{ required: true, message: '请选择申请岗位', trigger: 'change' }],
username: [
{ required: true, message: '请输入登录账号', trigger: 'blur' },
{ min: 2, max: 50, message: '2-50个字符', trigger: 'blur' },
@@ -47,19 +50,29 @@ async function fetchStores() {
}
}
async function fetchPackages() {
if (!form.store_id) return
packagesLoading.value = true
async function onStoreChange() {
form.registration_package_id = ''
form.department_id = ''
packages.value = []
departments.value = []
if (!form.store_id) return
packagesLoading.value = true
deptLoading.value = true
try {
const res = await axios.get('/api/v1/auth/register/packages', {
params: { store_id: form.store_id },
})
packages.value = res.data?.data || []
const [pkgRes, deptRes] = await Promise.all([
axios.get('/api/v1/auth/register/packages', { params: { store_id: form.store_id } }),
axios.get('/api/v1/auth/register/departments', { params: { store_id: form.store_id } }),
])
packages.value = pkgRes.data?.data || []
departments.value = deptRes.data?.data || []
} catch {
packages.value = []
departments.value = []
} finally {
packagesLoading.value = false
deptLoading.value = false
}
}
@@ -95,22 +108,19 @@ onMounted(fetchStores)
</div>
<el-form ref="formRef" :model="form" :rules="rules" label-position="top">
<!-- 门店 -->
<el-form-item label="所属门店" prop="store_id">
<el-select
v-model="form.store_id"
placeholder="请选择门店"
style="width: 100%"
@change="fetchPackages"
@change="onStoreChange"
>
<el-option
v-for="s in stores"
:key="s.id"
:label="s.name"
:value="s.id"
/>
<el-option v-for="s in stores" :key="s.id" :label="s.name" :value="s.id" />
</el-select>
</el-form-item>
<!-- 申请岗位套餐 -->
<el-form-item label="申请岗位" prop="registration_package_id">
<el-select
v-model="form.registration_package_id"
@@ -129,7 +139,24 @@ onMounted(fetchStores)
<span v-if="p.description" class="text-gray-400 text-xs ml-2">{{ p.description }}</span>
</el-option>
<template v-if="packages.length === 0 && form.store_id && !packagesLoading" #empty>
<div class="text-center py-4 text-gray-400 text-sm">该门店暂无可用套餐</div>
<div class="text-center py-4 text-gray-400 text-sm">该门店暂无可用套餐请联系管理员</div>
</template>
</el-select>
</el-form-item>
<!-- 所属部门 -->
<el-form-item label="所属部门" prop="department_id">
<el-select
v-model="form.department_id"
placeholder="请先选择门店"
style="width: 100%"
:loading="deptLoading"
:disabled="!form.store_id"
clearable
>
<el-option v-for="d in departments" :key="d.id" :label="d.name" :value="d.id" />
<template v-if="departments.length === 0 && form.store_id && !deptLoading" #empty>
<div class="text-center py-4 text-gray-400 text-sm">该门店暂无部门数据</div>
</template>
</el-select>
</el-form-item>
+36 -13
View File
@@ -1,11 +1,16 @@
<script setup>
import { ref, reactive, onMounted } from 'vue'
import { ref, reactive, onMounted, computed } from 'vue'
import { ElMessage, ElMessageBox } from 'element-plus'
import { userApi, roleApi, departmentApi } from '@/api/system.js'
import { userApi, roleApi, departmentApi, storeApi } from '@/api/system.js'
import { useUserStore } from '@/stores/user.js'
const userStore = useUserStore()
const isSuper = computed(() => userStore.userInfo?.is_super)
// ─── State ───────────────────────────────────────────────────────────────────
const tableData = ref([])
const stores = ref([])
const total = ref(0)
const loading = ref(false)
const dialogVisible = ref(false)
@@ -42,7 +47,8 @@ const form = reactive({
role_ids: [],
status: 1,
password: '',
password_confirm: ''
password_confirm: '',
store_id: ''
})
const isEdit = ref(false)
@@ -99,6 +105,14 @@ const resetPwdRules = {
// ─── Methods ──────────────────────────────────────────────────────────────────
function flattenDeptTree(nodes, result = []) {
for (const n of nodes) {
result.push({ id: n.id, name: n.name })
if (n.children?.length) flattenDeptTree(n.children, result)
}
return result
}
async function fetchList() {
loading.value = true
try {
@@ -124,7 +138,9 @@ async function fetchRoles() {
async function fetchDepartments() {
try {
const res = await departmentApi.getList({ per_page: 500 })
departments.value = res.data?.list || res.data?.data || []
// API returns tree array directly in res.data, flatten it for selects
const raw = Array.isArray(res.data) ? res.data : (res.data?.list || res.data?.data || [])
departments.value = flattenDeptTree(raw)
} catch {
//
}
@@ -146,7 +162,7 @@ function handleAdd() {
Object.assign(form, {
id: null, username: '', name: '', phone: '', email: '',
department_id: '', position_id: '', role_ids: [], status: 1,
password: '', password_confirm: ''
password: '', password_confirm: '', store_id: ''
})
dialogVisible.value = true
}
@@ -276,6 +292,11 @@ onMounted(() => {
fetchList()
fetchRoles()
fetchDepartments()
if (isSuper.value) {
storeApi.getList({ page_size: 200 }).then(res => {
stores.value = res.data?.list || []
}).catch(() => {})
}
})
</script>
@@ -411,6 +432,13 @@ onMounted(() => {
label-position="right"
>
<el-row :gutter="16">
<el-col v-if="isSuper && !isEdit" :span="24">
<el-form-item label="所属门店" prop="store_id">
<el-select v-model="form.store_id" placeholder="超管可指定门店(不选则为当前门店)" clearable style="width:100%">
<el-option v-for="s in stores" :key="s.id" :label="s.name" :value="s.id" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="用户名" prop="username">
<el-input v-model="form.username" placeholder="请输入用户名" :disabled="isEdit" />
@@ -433,14 +461,9 @@ onMounted(() => {
</el-col>
<el-col :span="12">
<el-form-item label="部门" prop="department_id">
<el-tree-select
v-model="form.department_id"
:data="departments"
:props="{ label: 'name', value: 'id', children: 'children' }"
placeholder="选择部门"
clearable
style="width: 100%"
/>
<el-select v-model="form.department_id" placeholder="选择部门" clearable style="width:100%">
<el-option v-for="d in departments" :key="d.id" :label="d.name" :value="d.id" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">