first
This commit is contained in:
@@ -0,0 +1 @@
|
||||
.tag-editor[data-v-c29a7c19]{display:flex;flex-wrap:wrap;gap:8px;align-items:center;min-height:36px;padding:6px;border:1px solid var(--border-color);border-radius:8px;background:#0000001a}.st-tag[data-v-c29a7c19]{border-radius:16px}.add-st-btn[data-v-c29a7c19]{border-radius:16px;border-style:dashed}.st-input[data-v-c29a7c19]{width:140px}
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
|
||||
import{q as R,c as w,a as u,t as y,b as t,w as n,x as A,k as I,h as d,r as o,v as T,f as j,o as B,e as r,E as C}from"./index-Au1XOH8d.js";import{s as f}from"./index-8cA9XdMr.js";const F={class:"content-card"},G={class:"card-title"},L={__name:"ClientManage",setup(H){const v=d([]),_=d(!1),p=d(!1),g=d(!1),m=d(null),k=d(null),s=j({name:"",description:""}),D={name:[{required:!0,message:"请输入客户名称",trigger:"blur"}]};async function b(){_.value=!0;try{const l=await f.getClients();v.value=l.data}finally{_.value=!1}}function V(l){m.value=(l==null?void 0:l.id)||null,s.name=(l==null?void 0:l.name)||"",s.description=(l==null?void 0:l.description)||"",p.value=!0}async function $(){var e;if(await((e=k.value)==null?void 0:e.validate().catch(()=>!1))){g.value=!0;try{m.value?(await f.updateClient(m.value,s),C.success("更新成功")):(await f.createClient(s),C.success("创建成功")),p.value=!1,b()}finally{g.value=!1}}}async function E(l){await f.updateClient(l.id,{status:l.status===1?0:1}),C.success("状态已更新"),b()}return R(b),(l,e)=>{const c=o("el-button"),i=o("el-table-column"),M=o("el-tag"),N=o("el-table"),x=o("el-input"),h=o("el-form-item"),S=o("el-form"),U=o("el-dialog"),q=T("loading");return B(),w("div",null,[e[9]||(e[9]=u("div",{class:"page-header"},[u("h1",null,"客户/项目管理"),u("p",null,"管理您名下的客户与项目")],-1)),u("div",F,[u("div",G,[u("span",null,"我的客户 ("+y(v.value.length)+")",1),t(c,{type:"primary",onClick:e[0]||(e[0]=a=>V())},{default:n(()=>[...e[5]||(e[5]=[r("+ 新增客户",-1)])]),_:1})]),A((B(),I(N,{data:v.value,stripe:""},{default:n(()=>[t(i,{prop:"name",label:"客户/项目名称","min-width":"160"}),t(i,{prop:"description",label:"描述","min-width":"200"}),t(i,{prop:"status",label:"状态",width:"100"},{default:n(({row:a})=>[t(M,{type:a.status===1?"success":"info",effect:"dark",round:""},{default:n(()=>[r(y(a.status===1?"进行中":"已结算"),1)]),_:2},1032,["type"])]),_:1}),t(i,{prop:"total_hours",label:"总工时(h)",width:"110"}),t(i,{prop:"rd_count",label:"参与研发",width:"100"}),t(i,{prop:"created_at",label:"创建时间",width:"170"}),t(i,{label:"操作",width:"180"},{default:n(({row:a})=>[t(c,{size:"small",onClick:z=>V(a)},{default:n(()=>[...e[6]||(e[6]=[r("编辑",-1)])]),_:1},8,["onClick"]),t(c,{size:"small",type:a.status===1?"warning":"success",onClick:z=>E(a)},{default:n(()=>[r(y(a.status===1?"结算":"激活"),1)]),_:2},1032,["type","onClick"])]),_:1})]),_:1},8,["data"])),[[q,_.value]])]),t(U,{modelValue:p.value,"onUpdate:modelValue":e[4]||(e[4]=a=>p.value=a),title:m.value?"编辑客户":"新增客户",width:"460px","destroy-on-close":""},{footer:n(()=>[t(c,{onClick:e[3]||(e[3]=a=>p.value=!1)},{default:n(()=>[...e[7]||(e[7]=[r("取消",-1)])]),_:1}),t(c,{type:"primary",loading:g.value,onClick:$},{default:n(()=>[...e[8]||(e[8]=[r("保存",-1)])]),_:1},8,["loading"])]),default:n(()=>[t(S,{model:s,rules:D,ref_key:"formRef",ref:k,"label-width":"80px"},{default:n(()=>[t(h,{label:"名称",prop:"name"},{default:n(()=>[t(x,{modelValue:s.name,"onUpdate:modelValue":e[1]||(e[1]=a=>s.name=a),placeholder:"客户/项目名称"},null,8,["modelValue"])]),_:1}),t(h,{label:"描述"},{default:n(()=>[t(x,{modelValue:s.description,"onUpdate:modelValue":e[2]||(e[2]=a=>s.description=a),type:"textarea",rows:3,placeholder:"项目描述(选填)"},null,8,["modelValue"])]),_:1})]),_:1},8,["model"])]),_:1},8,["modelValue","title"])])}}};export{L as default};
|
||||
@@ -0,0 +1 @@
|
||||
import{q as R,c as w,a as u,t as y,b as t,w as n,x as A,k as I,h as d,r as o,v as T,f as j,o as B,e as r,E as C}from"./index-NywRioUE.js";import{s as f}from"./index-IKxiqY7O.js";const F={class:"content-card"},G={class:"card-title"},L={__name:"ClientManage",setup(H){const v=d([]),_=d(!1),p=d(!1),g=d(!1),m=d(null),k=d(null),s=j({name:"",description:""}),D={name:[{required:!0,message:"请输入客户名称",trigger:"blur"}]};async function b(){_.value=!0;try{const l=await f.getClients();v.value=l.data}finally{_.value=!1}}function V(l){m.value=(l==null?void 0:l.id)||null,s.name=(l==null?void 0:l.name)||"",s.description=(l==null?void 0:l.description)||"",p.value=!0}async function $(){var e;if(await((e=k.value)==null?void 0:e.validate().catch(()=>!1))){g.value=!0;try{m.value?(await f.updateClient(m.value,s),C.success("更新成功")):(await f.createClient(s),C.success("创建成功")),p.value=!1,b()}finally{g.value=!1}}}async function E(l){await f.updateClient(l.id,{status:l.status===1?0:1}),C.success("状态已更新"),b()}return R(b),(l,e)=>{const c=o("el-button"),i=o("el-table-column"),M=o("el-tag"),N=o("el-table"),x=o("el-input"),h=o("el-form-item"),S=o("el-form"),U=o("el-dialog"),q=T("loading");return B(),w("div",null,[e[9]||(e[9]=u("div",{class:"page-header"},[u("h1",null,"客户/项目管理"),u("p",null,"管理您名下的客户与项目")],-1)),u("div",F,[u("div",G,[u("span",null,"我的客户 ("+y(v.value.length)+")",1),t(c,{type:"primary",onClick:e[0]||(e[0]=a=>V())},{default:n(()=>[...e[5]||(e[5]=[r("+ 新增客户",-1)])]),_:1})]),A((B(),I(N,{data:v.value,stripe:""},{default:n(()=>[t(i,{prop:"name",label:"客户/项目名称","min-width":"160"}),t(i,{prop:"description",label:"描述","min-width":"200"}),t(i,{prop:"status",label:"状态",width:"100"},{default:n(({row:a})=>[t(M,{type:a.status===1?"success":"info",effect:"dark",round:""},{default:n(()=>[r(y(a.status===1?"进行中":"已结算"),1)]),_:2},1032,["type"])]),_:1}),t(i,{prop:"total_hours",label:"总工时(h)",width:"110"}),t(i,{prop:"rd_count",label:"参与研发",width:"100"}),t(i,{prop:"created_at",label:"创建时间",width:"170"}),t(i,{label:"操作",width:"180"},{default:n(({row:a})=>[t(c,{size:"small",onClick:z=>V(a)},{default:n(()=>[...e[6]||(e[6]=[r("编辑",-1)])]),_:1},8,["onClick"]),t(c,{size:"small",type:a.status===1?"warning":"success",onClick:z=>E(a)},{default:n(()=>[r(y(a.status===1?"结算":"激活"),1)]),_:2},1032,["type","onClick"])]),_:1})]),_:1},8,["data"])),[[q,_.value]])]),t(U,{modelValue:p.value,"onUpdate:modelValue":e[4]||(e[4]=a=>p.value=a),title:m.value?"编辑客户":"新增客户",width:"460px","destroy-on-close":""},{footer:n(()=>[t(c,{onClick:e[3]||(e[3]=a=>p.value=!1)},{default:n(()=>[...e[7]||(e[7]=[r("取消",-1)])]),_:1}),t(c,{type:"primary",loading:g.value,onClick:$},{default:n(()=>[...e[8]||(e[8]=[r("保存",-1)])]),_:1},8,["loading"])]),default:n(()=>[t(S,{model:s,rules:D,ref_key:"formRef",ref:k,"label-width":"80px"},{default:n(()=>[t(h,{label:"名称",prop:"name"},{default:n(()=>[t(x,{modelValue:s.name,"onUpdate:modelValue":e[1]||(e[1]=a=>s.name=a),placeholder:"客户/项目名称"},null,8,["modelValue"])]),_:1}),t(h,{label:"描述"},{default:n(()=>[t(x,{modelValue:s.description,"onUpdate:modelValue":e[2]||(e[2]=a=>s.description=a),type:"textarea",rows:3,placeholder:"项目描述(选填)"},null,8,["modelValue"])]),_:1})]),_:1},8,["model"])]),_:1},8,["modelValue","title"])])}}};export{L as default};
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
|
||||
.dashboard-page[data-v-a0af1b80] .el-tabs--border-card{background:var(--bg-card)!important;border-color:var(--border-color)!important;border-radius:var(--radius)!important;overflow:visible!important}.dashboard-page[data-v-a0af1b80] .el-tabs__content{overflow:visible!important;padding:20px!important}.dashboard-page[data-v-a0af1b80] .el-tab-pane{overflow:visible!important}.dashboard-page[data-v-a0af1b80] .el-tabs__header{background:#3341554d!important;border-bottom-color:var(--border-color)!important}.dashboard-page[data-v-a0af1b80] .el-tabs__item{color:var(--text-secondary)!important}.dashboard-page[data-v-a0af1b80] .el-tabs__item.is-active{color:var(--primary-light)!important;background:var(--bg-card)!important}.dashboard-page[data-v-a0af1b80] .el-tabs__item:hover{color:var(--text-primary)!important}.dashboard-page[data-v-a0af1b80] .el-table__expanded-cell{background-color:#0000001a!important;padding:0!important}.dashboard-page[data-v-a0af1b80] .el-table__expanded-cell:hover{background-color:#0000001a!important}.section-title[data-v-a0af1b80]{font-size:15px;font-weight:600;color:var(--text-primary);margin-bottom:14px;padding-bottom:8px;border-bottom:1px solid var(--border-color)}.two-col-layout[data-v-a0af1b80]{display:flex;gap:24px;align-items:flex-start;margin-top:16px}.table-col[data-v-a0af1b80]{flex:2;min-width:0}.chart-col[data-v-a0af1b80]{flex:1;min-width:350px}.chart-card[data-v-a0af1b80]{background:#1e293b80;border:1px solid var(--border-color);border-radius:var(--radius);padding:20px}.chart-title[data-v-a0af1b80]{font-size:15px;font-weight:600;color:var(--text-primary);margin-bottom:16px;text-align:center}.big-chart[data-v-a0af1b80]{width:100%;height:400px}.matrix-table[data-v-a0af1b80]{width:100%;border-collapse:collapse;font-size:13px}.matrix-table th[data-v-a0af1b80],.matrix-table td[data-v-a0af1b80]{border:1px solid var(--border-color);padding:8px 12px;text-align:center;white-space:nowrap}.matrix-table thead th[data-v-a0af1b80]{background:#6366f126;color:var(--primary-light);font-weight:600}.matrix-table .row-header[data-v-a0af1b80]{text-align:left;font-weight:500;background:#ffffff08;min-width:160px}.matrix-table .total-col[data-v-a0af1b80]{font-weight:700;color:#818cf8;background:#6366f114}.matrix-table .total-row td[data-v-a0af1b80]{font-weight:700;background:#6366f11f;color:#c7d2fe}.matrix-table tbody tr:hover td[data-v-a0af1b80]{background:#ffffff0a}
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
|
||||
.danger-card[data-v-11408198]{border:1px solid rgba(248,113,113,.3)!important;background:#f871710a!important}code[data-v-11408198]{background:#ffffff1a;padding:1px 6px;border-radius:4px;font-family:monospace}
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
|
||||
import{c as p,a as s,t as o,F as C,i as B,b as h,w as r,j as i,r as m,u as L,o as l,k as v,n as S,T as x,l as D}from"./index-NywRioUE.js";import{u as F}from"./user-BStF_uHf.js";const N={class:"layout-container"},T={class:"sidebar"},V={class:"sidebar-header"},j={class:"user-info"},z={class:"avatar"},A={class:"user-detail"},E={class:"name"},I={class:"role"},R={class:"sidebar-nav"},U={class:"icon"},$={class:"main-content"},J={__name:"Layout",setup(q){const b=L(),c=F(),n=i(()=>c.user),f=i(()=>{var e;return{admin:"管理员",sales:"销售",rd:"研发"}[(e=n.value)==null?void 0:e.role]||""}),k=i(()=>{var e;const t=(e=n.value)==null?void 0:e.role;return t==="admin"?[{path:"/dashboard",label:"统计看板",icon:"📊"},{path:"/users",label:"账号管理",icon:"👥"},{path:"/workdays",label:"工作日设置",icon:"📅"}]:t==="sales"?[{path:"/clients",label:"客户管理",icon:"🏢"},{path:"/sales-stats",label:"数据统计",icon:"📈"}]:t==="rd"?[{path:"/timesheet",label:"工时填报",icon:"⏰"},{path:"/rd-stats",label:"个人统计",icon:"📊"}]:[]});function g(){c.logout(),b.push("/login")}return(t,e)=>{var u,d,_;const y=m("router-link"),w=m("router-view");return l(),p("div",N,[s("aside",T,[s("div",V,[e[0]||(e[0]=s("h2",null,"⚡ 工时管理",-1)),s("div",j,[s("div",z,o((d=(u=n.value)==null?void 0:u.realname)==null?void 0:d.charAt(0)),1),s("div",A,[s("div",E,o((_=n.value)==null?void 0:_.realname),1),s("div",I,o(f.value),1)])])]),s("nav",R,[(l(!0),p(C,null,B(k.value,a=>(l(),v(y,{key:a.path,to:a.path,class:S(["nav-item",{active:t.$route.path===a.path}])},{default:r(()=>[s("span",U,o(a.icon),1),s("span",null,o(a.label),1)]),_:2},1032,["to","class"]))),128))]),s("div",{class:"sidebar-footer"},[s("button",{class:"logout-btn",onClick:g},[...e[1]||(e[1]=[s("span",{class:"icon"},"🚪",-1),s("span",null,"退出登录",-1)])])])]),s("main",$,[h(w,null,{default:r(({Component:a})=>[h(x,{name:"fade",mode:"out-in"},{default:r(()=>[(l(),v(D(a)))]),_:2},1024)]),_:1})])])}}};export{J as default};
|
||||
@@ -0,0 +1 @@
|
||||
import{c as p,a as s,t as o,F as C,i as B,b as h,w as r,j as i,r as m,u as L,o as l,k as v,n as S,T as x,l as D}from"./index-Au1XOH8d.js";import{u as F}from"./user-IEPgLkWr.js";const N={class:"layout-container"},T={class:"sidebar"},V={class:"sidebar-header"},j={class:"user-info"},z={class:"avatar"},A={class:"user-detail"},E={class:"name"},I={class:"role"},R={class:"sidebar-nav"},U={class:"icon"},$={class:"main-content"},J={__name:"Layout",setup(q){const b=L(),c=F(),n=i(()=>c.user),f=i(()=>{var e;return{admin:"管理员",sales:"销售",rd:"研发"}[(e=n.value)==null?void 0:e.role]||""}),k=i(()=>{var e;const t=(e=n.value)==null?void 0:e.role;return t==="admin"?[{path:"/dashboard",label:"统计看板",icon:"📊"},{path:"/users",label:"账号管理",icon:"👥"},{path:"/workdays",label:"工作日设置",icon:"📅"}]:t==="sales"?[{path:"/clients",label:"客户管理",icon:"🏢"},{path:"/sales-stats",label:"数据统计",icon:"📈"}]:t==="rd"?[{path:"/timesheet",label:"工时填报",icon:"⏰"},{path:"/rd-stats",label:"个人统计",icon:"📊"}]:[]});function g(){c.logout(),b.push("/login")}return(t,e)=>{var u,d,_;const y=m("router-link"),w=m("router-view");return l(),p("div",N,[s("aside",T,[s("div",V,[e[0]||(e[0]=s("h2",null,"⚡ 工时管理",-1)),s("div",j,[s("div",z,o((d=(u=n.value)==null?void 0:u.realname)==null?void 0:d.charAt(0)),1),s("div",A,[s("div",E,o((_=n.value)==null?void 0:_.realname),1),s("div",I,o(f.value),1)])])]),s("nav",R,[(l(!0),p(C,null,B(k.value,a=>(l(),v(y,{key:a.path,to:a.path,class:S(["nav-item",{active:t.$route.path===a.path}])},{default:r(()=>[s("span",U,o(a.icon),1),s("span",null,o(a.label),1)]),_:2},1032,["to","class"]))),128))]),s("div",{class:"sidebar-footer"},[s("button",{class:"logout-btn",onClick:g},[...e[1]||(e[1]=[s("span",{class:"icon"},"🚪",-1),s("span",null,"退出登录",-1)])])])]),s("main",$,[h(w,null,{default:r(({Component:a})=>[h(x,{name:"fade",mode:"out-in"},{default:r(()=>[(l(),v(D(a)))]),_:2},1024)]),_:1})])])}}};export{J as default};
|
||||
@@ -0,0 +1 @@
|
||||
import{c as p,a as s,t as o,F as C,i as B,b as h,w as r,j as i,r as m,u as L,o as l,k as v,n as S,T as x,l as D}from"./index-Dn51426I.js";import{u as F}from"./user-Bx4bpwwe.js";const N={class:"layout-container"},T={class:"sidebar"},V={class:"sidebar-header"},j={class:"user-info"},z={class:"avatar"},A={class:"user-detail"},E={class:"name"},I={class:"role"},R={class:"sidebar-nav"},U={class:"icon"},$={class:"main-content"},J={__name:"Layout",setup(q){const b=L(),c=F(),n=i(()=>c.user),f=i(()=>{var a;return{admin:"管理员",sales:"销售",rd:"研发"}[(a=n.value)==null?void 0:a.role]||""}),k=i(()=>{var a;const t=(a=n.value)==null?void 0:a.role;return t==="admin"?[{path:"/dashboard",label:"统计看板",icon:"📊"},{path:"/clients",label:"客户/项目管理",icon:"🏢"},{path:"/users",label:"账号管理",icon:"👥"},{path:"/workdays",label:"工作日设置",icon:"📅"},{path:"/data-manage",label:"数据管理",icon:"🗄️"}]:t==="rd"?[{path:"/timesheet",label:"工时填报",icon:"⏰"},{path:"/rd-stats",label:"个人统计",icon:"📊"}]:[]});function g(){c.logout(),b.push("/login")}return(t,a)=>{var u,d,_;const y=m("router-link"),w=m("router-view");return l(),p("div",N,[s("aside",T,[s("div",V,[a[0]||(a[0]=s("h2",null,"⚡ 工时管理",-1)),s("div",j,[s("div",z,o((d=(u=n.value)==null?void 0:u.realname)==null?void 0:d.charAt(0)),1),s("div",A,[s("div",E,o((_=n.value)==null?void 0:_.realname),1),s("div",I,o(f.value),1)])])]),s("nav",R,[(l(!0),p(C,null,B(k.value,e=>(l(),v(y,{key:e.path,to:e.path,class:S(["nav-item",{active:t.$route.path===e.path}])},{default:r(()=>[s("span",U,o(e.icon),1),s("span",null,o(e.label),1)]),_:2},1032,["to","class"]))),128))]),s("div",{class:"sidebar-footer"},[s("button",{class:"logout-btn",onClick:g},[...a[1]||(a[1]=[s("span",{class:"icon"},"🚪",-1),s("span",null,"退出登录",-1)])])])]),s("main",$,[h(w,null,{default:r(({Component:e})=>[h(x,{name:"fade",mode:"out-in"},{default:r(()=>[(l(),v(D(e)))]),_:2},1024)]),_:1})])])}}};export{J as default};
|
||||
@@ -0,0 +1 @@
|
||||
import{c as x,a as r,b as t,w as a,d as y,r as l,u as V,o as b,e as h,f as k,E as z,g as L,h as p}from"./index-NywRioUE.js";import{a as R}from"./index-IKxiqY7O.js";import{u as U}from"./user-BStF_uHf.js";const B={class:"login-container"},C={class:"login-card"},S={__name:"Login",setup(E){const f=V(),c=U(),d=p(null),n=p(!1),s=k({username:"",password:""}),g={username:[{required:!0,message:"请输入用户名",trigger:"blur"}],password:[{required:!0,message:"请输入密码",trigger:"blur"}]};async function m(){var e;if(await((e=d.value)==null?void 0:e.validate().catch(()=>!1))){n.value=!0;try{const o=await R.login(s);c.setLogin(o.data.token,o.data.user),z.success(`欢迎回来,${o.data.user.realname}`),f.push(L(o.data.user.role))}catch{}finally{n.value=!1}}}return(_,e)=>{const o=l("el-input"),u=l("el-form-item"),w=l("el-button"),v=l("el-form");return b(),x("div",B,[r("div",C,[e[3]||(e[3]=r("h1",null,"⚡ 工时管理系统",-1)),e[4]||(e[4]=r("p",{class:"subtitle"},"跨部门工时管理与项目协同平台",-1)),t(v,{model:s,rules:g,ref_key:"formRef",ref:d,onKeyup:y(m,["enter"])},{default:a(()=>[t(u,{prop:"username"},{default:a(()=>[t(o,{modelValue:s.username,"onUpdate:modelValue":e[0]||(e[0]=i=>s.username=i),placeholder:"请输入用户名","prefix-icon":"User",size:"large"},null,8,["modelValue"])]),_:1}),t(u,{prop:"password"},{default:a(()=>[t(o,{modelValue:s.password,"onUpdate:modelValue":e[1]||(e[1]=i=>s.password=i),placeholder:"请输入密码",type:"password","show-password":"","prefix-icon":"Lock",size:"large"},null,8,["modelValue"])]),_:1}),t(u,null,{default:a(()=>[t(w,{type:"primary",size:"large",loading:n.value,onClick:m,style:{width:"100%",height:"48px","font-size":"16px","border-radius":"10px"}},{default:a(()=>[...e[2]||(e[2]=[h(" 登 录 ",-1)])]),_:1},8,["loading"])]),_:1})]),_:1},8,["model"]),e[5]||(e[5]=r("div",{style:{"text-align":"center",color:"var(--text-muted)","font-size":"12px","margin-top":"16px"}}," 默认管理员账号: admin / admin123 ",-1))])])}}};export{S as default};
|
||||
@@ -0,0 +1 @@
|
||||
import{c as x,a as r,b as t,w as a,d as y,r as l,u as V,o as b,e as h,f as k,E as z,g as L,h as p}from"./index-Dn51426I.js";import{a as R}from"./index-BRvS5RTm.js";import{u as U}from"./user-Bx4bpwwe.js";const B={class:"login-container"},C={class:"login-card"},S={__name:"Login",setup(E){const f=V(),c=U(),d=p(null),n=p(!1),s=k({username:"",password:""}),g={username:[{required:!0,message:"请输入用户名",trigger:"blur"}],password:[{required:!0,message:"请输入密码",trigger:"blur"}]};async function m(){var e;if(await((e=d.value)==null?void 0:e.validate().catch(()=>!1))){n.value=!0;try{const o=await R.login(s);c.setLogin(o.data.token,o.data.user),z.success(`欢迎回来,${o.data.user.realname}`),f.push(L(o.data.user.role))}catch{}finally{n.value=!1}}}return(_,e)=>{const o=l("el-input"),u=l("el-form-item"),w=l("el-button"),v=l("el-form");return b(),x("div",B,[r("div",C,[e[3]||(e[3]=r("h1",null,"⚡ 工时管理系统",-1)),e[4]||(e[4]=r("p",{class:"subtitle"},"跨部门工时管理与项目协同平台",-1)),t(v,{model:s,rules:g,ref_key:"formRef",ref:d,onKeyup:y(m,["enter"])},{default:a(()=>[t(u,{prop:"username"},{default:a(()=>[t(o,{modelValue:s.username,"onUpdate:modelValue":e[0]||(e[0]=i=>s.username=i),placeholder:"请输入用户名","prefix-icon":"User",size:"large"},null,8,["modelValue"])]),_:1}),t(u,{prop:"password"},{default:a(()=>[t(o,{modelValue:s.password,"onUpdate:modelValue":e[1]||(e[1]=i=>s.password=i),placeholder:"请输入密码",type:"password","show-password":"","prefix-icon":"Lock",size:"large"},null,8,["modelValue"])]),_:1}),t(u,null,{default:a(()=>[t(w,{type:"primary",size:"large",loading:n.value,onClick:m,style:{width:"100%",height:"48px","font-size":"16px","border-radius":"10px"}},{default:a(()=>[...e[2]||(e[2]=[h(" 登 录 ",-1)])]),_:1},8,["loading"])]),_:1})]),_:1},8,["model"]),e[5]||(e[5]=r("div",{style:{"text-align":"center",color:"var(--text-muted)","font-size":"12px","margin-top":"16px"}}," 默认管理员账号: admin / admin123 ",-1))])])}}};export{S as default};
|
||||
@@ -0,0 +1 @@
|
||||
import{c as x,a as r,b as t,w as a,d as y,r as l,u as V,o as b,e as h,f as k,E as z,g as L,h as p}from"./index-Au1XOH8d.js";import{a as R}from"./index-8cA9XdMr.js";import{u as U}from"./user-IEPgLkWr.js";const B={class:"login-container"},C={class:"login-card"},S={__name:"Login",setup(E){const f=V(),c=U(),d=p(null),n=p(!1),s=k({username:"",password:""}),g={username:[{required:!0,message:"请输入用户名",trigger:"blur"}],password:[{required:!0,message:"请输入密码",trigger:"blur"}]};async function m(){var e;if(await((e=d.value)==null?void 0:e.validate().catch(()=>!1))){n.value=!0;try{const o=await R.login(s);c.setLogin(o.data.token,o.data.user),z.success(`欢迎回来,${o.data.user.realname}`),f.push(L(o.data.user.role))}catch{}finally{n.value=!1}}}return(_,e)=>{const o=l("el-input"),u=l("el-form-item"),w=l("el-button"),v=l("el-form");return b(),x("div",B,[r("div",C,[e[3]||(e[3]=r("h1",null,"⚡ 工时管理系统",-1)),e[4]||(e[4]=r("p",{class:"subtitle"},"跨部门工时管理与项目协同平台",-1)),t(v,{model:s,rules:g,ref_key:"formRef",ref:d,onKeyup:y(m,["enter"])},{default:a(()=>[t(u,{prop:"username"},{default:a(()=>[t(o,{modelValue:s.username,"onUpdate:modelValue":e[0]||(e[0]=i=>s.username=i),placeholder:"请输入用户名","prefix-icon":"User",size:"large"},null,8,["modelValue"])]),_:1}),t(u,{prop:"password"},{default:a(()=>[t(o,{modelValue:s.password,"onUpdate:modelValue":e[1]||(e[1]=i=>s.password=i),placeholder:"请输入密码",type:"password","show-password":"","prefix-icon":"Lock",size:"large"},null,8,["modelValue"])]),_:1}),t(u,null,{default:a(()=>[t(w,{type:"primary",size:"large",loading:n.value,onClick:m,style:{width:"100%",height:"48px","font-size":"16px","border-radius":"10px"}},{default:a(()=>[...e[2]||(e[2]=[h(" 登 录 ",-1)])]),_:1},8,["loading"])]),_:1})]),_:1},8,["model"]),e[5]||(e[5]=r("div",{style:{"text-align":"center",color:"var(--text-muted)","font-size":"12px","margin-top":"16px"}}," 默认管理员账号: admin / admin123 ",-1))])])}}};export{S as default};
|
||||
@@ -0,0 +1 @@
|
||||
import{r as f}from"./index-8cA9XdMr.js";import{i as b,L as h}from"./index-Bn9PLWWT.js";import{q as y,c as w,a,e as d,t as c,b as e,w as g,s as x,h as p,r as u,o as k}from"./index-Au1XOH8d.js";const S={class:"stat-cards"},C={class:"stat-card purple"},L={class:"value"},A={class:"stat-card green"},B={class:"value"},N={class:"content-card"},R={class:"content-card"},D={__name:"RdStats",setup(V){const s=p({}),r=p(null);let n=null;async function v(){const l=await f.getStats();s.value=l.data,await x(),m()}function m(){if(!r.value)return;n||(n=b(r.value,"dark"));const l=[...s.value.monthly||[]].reverse();n.setOption({backgroundColor:"transparent",tooltip:{trigger:"axis"},xAxis:{type:"category",data:l.map(t=>t.month),axisLabel:{color:"#94a3b8"}},yAxis:{type:"value",name:"工时(h)",axisLabel:{color:"#94a3b8"}},series:[{type:"line",data:l.map(t=>t.total_hours),smooth:!0,lineStyle:{width:3,color:"#6366f1"},areaStyle:{color:new h(0,0,0,1,[{offset:0,color:"rgba(99, 102, 241, 0.4)"},{offset:1,color:"rgba(99, 102, 241, 0.05)"}])},itemStyle:{color:"#6366f1"}}]})}return y(v),(l,t)=>{var i;const o=u("el-table-column"),_=u("el-table");return k(),w("div",null,[t[6]||(t[6]=a("div",{class:"page-header"},[a("h1",null,"个人统计"),a("p",null,"查看您的工时分布与月度趋势")],-1)),a("div",S,[a("div",C,[t[1]||(t[1]=a("div",{class:"label"},"参与项目数",-1)),a("div",L,[d(c(((i=s.value.projects)==null?void 0:i.length)||0),1),t[0]||(t[0]=a("span",{class:"unit"},"个",-1))])]),a("div",A,[t[3]||(t[3]=a("div",{class:"label"},"累计总工时",-1)),a("div",B,[d(c(s.value.total_hours||0),1),t[2]||(t[2]=a("span",{class:"unit"},"小时",-1))])])]),a("div",N,[t[4]||(t[4]=a("div",{class:"card-title"},"各项目工时明细",-1)),e(_,{data:s.value.projects||[],stripe:""},{default:g(()=>[e(o,{prop:"client_name",label:"客户/项目","min-width":"180"}),e(o,{prop:"total_hours",label:"总工时(h)",width:"120"}),e(o,{prop:"work_days",label:"工作天数",width:"110"}),e(o,{prop:"first_date",label:"首次填报",width:"130"}),e(o,{prop:"last_date",label:"最近填报",width:"130"})]),_:1},8,["data"])]),a("div",R,[t[5]||(t[5]=a("div",{class:"card-title"},"月度工时趋势",-1)),a("div",{ref_key:"chartRef",ref:r,class:"chart-container"},null,512)])])}}};export{D as default};
|
||||
@@ -0,0 +1 @@
|
||||
import{r as b}from"./index-BRvS5RTm.js";import{i as w,L as x}from"./index-Bn9PLWWT.js";import{h as p,q as y,c as k,a as e,e as m,t as f,b as l,w as M,v as R,r as u,o as S}from"./index-Dn51426I.js";const D={class:"stat-cards"},V={class:"stat-card purple"},C={class:"value"},Y={class:"stat-card green"},j={class:"value"},L={class:"content-card"},A={class:"card-title"},B={class:"filter-bar",style:{"margin-bottom":"0"}},N={class:"content-card"},F={__name:"RdStats",setup($){const n=p({}),d=p(null);let c=null;const r=p((()=>{const a=new Date,t=new Date;t.setMonth(t.getMonth()-1);const i=o=>String(o).padStart(2,"0"),s=o=>`${o.getFullYear()}-${i(o.getMonth()+1)}-${i(o.getDate())}`;return[s(t),s(a)]})());async function v(){const a={};r.value&&(a.start_date=r.value[0],a.end_date=r.value[1]);const t=await b.getStats(a);n.value=t.data,await R(),h()}function h(){if(!d.value)return;c||(c=w(d.value,"dark"));const a=n.value.projects||[];c.setOption({backgroundColor:"transparent",tooltip:{trigger:"axis",axisPointer:{type:"shadow"}},xAxis:{type:"category",data:a.map(t=>t.client_name),axisLabel:{color:"#94a3b8",interval:0,rotate:30}},yAxis:{type:"value",name:"工时(h)",axisLabel:{color:"#94a3b8"}},series:[{type:"bar",barMaxWidth:60,data:a.map(t=>t.total_hours),itemStyle:{color:new x(0,0,0,1,[{offset:0,color:"#6366f1"},{offset:1,color:"#4338ca"}]),borderRadius:[4,4,0,0]}}]})}return y(v),(a,t)=>{var _;const i=u("el-date-picker"),s=u("el-table-column"),o=u("el-table");return S(),k("div",null,[t[7]||(t[7]=e("div",{class:"page-header"},[e("h1",null,"个人统计"),e("p",null,"查看您的工时分布与月度趋势")],-1)),e("div",D,[e("div",V,[t[2]||(t[2]=e("div",{class:"label"},"参与项目数",-1)),e("div",C,[m(f(((_=n.value.projects)==null?void 0:_.length)||0),1),t[1]||(t[1]=e("span",{class:"unit"},"个",-1))])]),e("div",Y,[t[4]||(t[4]=e("div",{class:"label"},"累计总工时",-1)),e("div",j,[m(f(n.value.total_hours||0),1),t[3]||(t[3]=e("span",{class:"unit"},"小时",-1))])])]),e("div",L,[e("div",A,[t[5]||(t[5]=e("span",null,"各项目工时明细",-1)),e("div",B,[l(i,{modelValue:r.value,"onUpdate:modelValue":t[0]||(t[0]=g=>r.value=g),type:"daterange","range-separator":"至","start-placeholder":"开始日期","end-placeholder":"结束日期","value-format":"YYYY-MM-DD",size:"default",onChange:v},null,8,["modelValue"])])]),l(o,{data:n.value.projects||[],stripe:""},{default:M(()=>[l(s,{prop:"client_name",label:"客户/项目","min-width":"180"}),l(s,{prop:"total_hours",label:"总工时(h)",width:"120"}),l(s,{prop:"work_days",label:"工作天数",width:"110"}),l(s,{prop:"first_date",label:"首次填报",width:"130"}),l(s,{prop:"last_date",label:"最近填报",width:"130"})]),_:1},8,["data"])]),e("div",N,[t[6]||(t[6]=e("div",{class:"card-title"},"各项目工时对比",-1)),e("div",{ref_key:"chartRef",ref:d,class:"chart-container"},null,512)])])}}};export{F as default};
|
||||
@@ -0,0 +1 @@
|
||||
import{r as f}from"./index-IKxiqY7O.js";import{i as b,L as h}from"./index-Bn9PLWWT.js";import{q as y,c as w,a,e as d,t as c,b as e,w as g,s as x,h as p,r as u,o as k}from"./index-NywRioUE.js";const S={class:"stat-cards"},C={class:"stat-card purple"},L={class:"value"},A={class:"stat-card green"},B={class:"value"},N={class:"content-card"},R={class:"content-card"},D={__name:"RdStats",setup(V){const s=p({}),r=p(null);let n=null;async function v(){const l=await f.getStats();s.value=l.data,await x(),m()}function m(){if(!r.value)return;n||(n=b(r.value,"dark"));const l=[...s.value.monthly||[]].reverse();n.setOption({backgroundColor:"transparent",tooltip:{trigger:"axis"},xAxis:{type:"category",data:l.map(t=>t.month),axisLabel:{color:"#94a3b8"}},yAxis:{type:"value",name:"工时(h)",axisLabel:{color:"#94a3b8"}},series:[{type:"line",data:l.map(t=>t.total_hours),smooth:!0,lineStyle:{width:3,color:"#6366f1"},areaStyle:{color:new h(0,0,0,1,[{offset:0,color:"rgba(99, 102, 241, 0.4)"},{offset:1,color:"rgba(99, 102, 241, 0.05)"}])},itemStyle:{color:"#6366f1"}}]})}return y(v),(l,t)=>{var i;const o=u("el-table-column"),_=u("el-table");return k(),w("div",null,[t[6]||(t[6]=a("div",{class:"page-header"},[a("h1",null,"个人统计"),a("p",null,"查看您的工时分布与月度趋势")],-1)),a("div",S,[a("div",C,[t[1]||(t[1]=a("div",{class:"label"},"参与项目数",-1)),a("div",L,[d(c(((i=s.value.projects)==null?void 0:i.length)||0),1),t[0]||(t[0]=a("span",{class:"unit"},"个",-1))])]),a("div",A,[t[3]||(t[3]=a("div",{class:"label"},"累计总工时",-1)),a("div",B,[d(c(s.value.total_hours||0),1),t[2]||(t[2]=a("span",{class:"unit"},"小时",-1))])])]),a("div",N,[t[4]||(t[4]=a("div",{class:"card-title"},"各项目工时明细",-1)),e(_,{data:s.value.projects||[],stripe:""},{default:g(()=>[e(o,{prop:"client_name",label:"客户/项目","min-width":"180"}),e(o,{prop:"total_hours",label:"总工时(h)",width:"120"}),e(o,{prop:"work_days",label:"工作天数",width:"110"}),e(o,{prop:"first_date",label:"首次填报",width:"130"}),e(o,{prop:"last_date",label:"最近填报",width:"130"})]),_:1},8,["data"])]),a("div",R,[t[5]||(t[5]=a("div",{class:"card-title"},"月度工时趋势",-1)),a("div",{ref_key:"chartRef",ref:r,class:"chart-container"},null,512)])])}}};export{D as default};
|
||||
@@ -0,0 +1 @@
|
||||
import{s as y}from"./index-IKxiqY7O.js";import{i as g,L as x}from"./index-Bn9PLWWT.js";import{q as w,c as k,a,e as i,t as c,b as s,w as d,s as S,h as f,r as p,o as j}from"./index-NywRioUE.js";const C={class:"stat-cards"},L={class:"stat-card purple"},A={class:"value"},B={class:"stat-card green"},N={class:"value"},R={class:"content-card"},V={class:"content-card"},G={__name:"SalesStats",setup(T){const e=f({}),n=f(null);let r=null;async function v(){const l=await y.getStats();e.value=l.data,await S(),m()}function m(){if(!n.value)return;r||(r=g(n.value,"dark"));const l=(e.value.projects||[]).filter(t=>t.total_hours>0);r.setOption({backgroundColor:"transparent",tooltip:{trigger:"axis"},xAxis:{type:"category",data:l.map(t=>t.client_name),axisLabel:{color:"#94a3b8",rotate:30}},yAxis:{type:"value",name:"工时(h)",axisLabel:{color:"#94a3b8"}},series:[{type:"bar",data:l.map(t=>t.total_hours),itemStyle:{borderRadius:[6,6,0,0],color:new x(0,0,0,1,[{offset:0,color:"#818cf8"},{offset:1,color:"#6366f1"}])}}]})}return w(v),(l,t)=>{var u;const o=p("el-table-column"),b=p("el-tag"),h=p("el-table");return j(),k("div",null,[t[6]||(t[6]=a("div",{class:"page-header"},[a("h1",null,"数据统计"),a("p",null,"查看您名下项目的研发工时消耗情况")],-1)),a("div",C,[a("div",L,[t[1]||(t[1]=a("div",{class:"label"},"项目总数",-1)),a("div",A,[i(c(((u=e.value.projects)==null?void 0:u.length)||0),1),t[0]||(t[0]=a("span",{class:"unit"},"个",-1))])]),a("div",B,[t[3]||(t[3]=a("div",{class:"label"},"累计总工时",-1)),a("div",N,[i(c(e.value.total_hours||0),1),t[2]||(t[2]=a("span",{class:"unit"},"小时",-1))])])]),a("div",R,[t[4]||(t[4]=a("div",{class:"card-title"},"各项目工时明细",-1)),s(h,{data:e.value.projects||[],stripe:""},{default:d(()=>[s(o,{prop:"client_name",label:"客户/项目","min-width":"180"}),s(o,{prop:"client_status",label:"状态",width:"100"},{default:d(({row:_})=>[s(b,{type:_.client_status===1?"success":"info",effect:"dark",round:""},{default:d(()=>[i(c(_.client_status===1?"进行中":"已结算"),1)]),_:2},1032,["type"])]),_:1}),s(o,{prop:"total_hours",label:"总工时(h)",width:"120"}),s(o,{prop:"rd_count",label:"参与研发人数",width:"130"}),s(o,{prop:"work_days",label:"工作天数",width:"110"})]),_:1},8,["data"])]),a("div",V,[t[5]||(t[5]=a("div",{class:"card-title"},"项目工时占比",-1)),a("div",{ref_key:"chartRef",ref:n,class:"chart-container"},null,512)])])}}};export{G as default};
|
||||
@@ -0,0 +1 @@
|
||||
import{s as y}from"./index-8cA9XdMr.js";import{i as g,L as x}from"./index-Bn9PLWWT.js";import{q as w,c as k,a,e as i,t as c,b as s,w as d,s as S,h as f,r as p,o as j}from"./index-Au1XOH8d.js";const C={class:"stat-cards"},L={class:"stat-card purple"},A={class:"value"},B={class:"stat-card green"},N={class:"value"},R={class:"content-card"},V={class:"content-card"},G={__name:"SalesStats",setup(T){const e=f({}),n=f(null);let r=null;async function v(){const l=await y.getStats();e.value=l.data,await S(),m()}function m(){if(!n.value)return;r||(r=g(n.value,"dark"));const l=(e.value.projects||[]).filter(t=>t.total_hours>0);r.setOption({backgroundColor:"transparent",tooltip:{trigger:"axis"},xAxis:{type:"category",data:l.map(t=>t.client_name),axisLabel:{color:"#94a3b8",rotate:30}},yAxis:{type:"value",name:"工时(h)",axisLabel:{color:"#94a3b8"}},series:[{type:"bar",data:l.map(t=>t.total_hours),itemStyle:{borderRadius:[6,6,0,0],color:new x(0,0,0,1,[{offset:0,color:"#818cf8"},{offset:1,color:"#6366f1"}])}}]})}return w(v),(l,t)=>{var u;const o=p("el-table-column"),b=p("el-tag"),h=p("el-table");return j(),k("div",null,[t[6]||(t[6]=a("div",{class:"page-header"},[a("h1",null,"数据统计"),a("p",null,"查看您名下项目的研发工时消耗情况")],-1)),a("div",C,[a("div",L,[t[1]||(t[1]=a("div",{class:"label"},"项目总数",-1)),a("div",A,[i(c(((u=e.value.projects)==null?void 0:u.length)||0),1),t[0]||(t[0]=a("span",{class:"unit"},"个",-1))])]),a("div",B,[t[3]||(t[3]=a("div",{class:"label"},"累计总工时",-1)),a("div",N,[i(c(e.value.total_hours||0),1),t[2]||(t[2]=a("span",{class:"unit"},"小时",-1))])])]),a("div",R,[t[4]||(t[4]=a("div",{class:"card-title"},"各项目工时明细",-1)),s(h,{data:e.value.projects||[],stripe:""},{default:d(()=>[s(o,{prop:"client_name",label:"客户/项目","min-width":"180"}),s(o,{prop:"client_status",label:"状态",width:"100"},{default:d(({row:_})=>[s(b,{type:_.client_status===1?"success":"info",effect:"dark",round:""},{default:d(()=>[i(c(_.client_status===1?"进行中":"已结算"),1)]),_:2},1032,["type"])]),_:1}),s(o,{prop:"total_hours",label:"总工时(h)",width:"120"}),s(o,{prop:"rd_count",label:"参与研发人数",width:"130"}),s(o,{prop:"work_days",label:"工作天数",width:"110"})]),_:1},8,["data"])]),a("div",V,[t[5]||(t[5]=a("div",{class:"card-title"},"项目工时占比",-1)),a("div",{ref_key:"chartRef",ref:n,class:"chart-container"},null,512)])])}}};export{G as default};
|
||||
@@ -0,0 +1 @@
|
||||
import{q as J,c as T,a as r,b as l,w as o,x as K,k as w,h as i,r as s,v as P,o as _,e as c,t as Q,F as W,i as X,A as Z,y as ee,E as V,f as le}from"./index-Au1XOH8d.js";import{r as f}from"./index-8cA9XdMr.js";const te={class:"content-card"},ae={class:"card-title"},oe={class:"filter-bar",style:{"margin-bottom":"0"}},ne={style:{"margin-top":"16px"}},de={__name:"TimesheetForm",setup(se){const $=new Date().toISOString().split("T")[0],v=i($),C=i([]),d=i(0),x=i([]),k=i(!1),u=i(!1),b=i(!1),m=i(null),D=i(null),t=le({client_id:"",hours:1,remark:""}),B={client_id:[{required:!0,message:"请选择项目",trigger:"change"}],hours:[{required:!0,message:"请输入工时",trigger:"blur"}]};async function g(){k.value=!0;try{const n=await f.getTimesheets({date:v.value});C.value=n.data.records,d.value=n.data.day_total}finally{k.value=!1}}async function E(){const n=await f.getClients();x.value=n.data}function M(){m.value=null,t.client_id="",t.hours=1,t.remark="",u.value=!0}function U(n){m.value=n.id,t.client_id=n.client_id,t.hours=n.hours,t.remark=n.remark||"",u.value=!0}async function z(){var e;if(await((e=D.value)==null?void 0:e.validate().catch(()=>!1))){b.value=!0;try{m.value?(await f.updateTimesheet(m.value,{hours:t.hours,remark:t.remark}),V.success("更新成功")):(await f.createTimesheet({client_id:t.client_id,work_date:v.value,hours:t.hours,remark:t.remark}),V.success("提交成功")),u.value=!1,g()}finally{b.value=!1}}}async function N(n){await ee.confirm("确定删除该工时记录吗?","确认",{type:"warning"}),await f.deleteTimesheet(n.id),V.success("删除成功"),g()}return J(()=>{g(),E()}),(n,e)=>{const S=s("el-date-picker"),Y=s("el-tag"),p=s("el-button"),y=s("el-table-column"),q=s("el-table"),A=s("el-progress"),F=s("el-option"),I=s("el-select"),h=s("el-form-item"),R=s("el-input-number"),L=s("el-input"),O=s("el-form"),j=s("el-dialog"),G=P("loading");return _(),T("div",null,[e[11]||(e[11]=r("div",{class:"page-header"},[r("h1",null,"每日工时填报"),r("p",null,"选择日期,为参与的项目填写工时")],-1)),r("div",te,[r("div",ae,[r("div",oe,[l(S,{modelValue:v.value,"onUpdate:modelValue":e[0]||(e[0]=a=>v.value=a),type:"date",placeholder:"选择日期","value-format":"YYYY-MM-DD",size:"default",onChange:g},null,8,["modelValue"]),l(Y,{type:"info",effect:"dark",round:"",size:"large",style:{"margin-left":"8px"}},{default:o(()=>[c(" 当日已填: "+Q(d.value)+" / 8 小时 ",1)]),_:1})]),l(p,{type:"primary",onClick:M,disabled:d.value>=8},{default:o(()=>[...e[6]||(e[6]=[c("+ 添加工时",-1)])]),_:1},8,["disabled"])]),K((_(),w(q,{data:C.value,stripe:""},{default:o(()=>[l(y,{prop:"client_name",label:"客户/项目","min-width":"180"}),l(y,{prop:"hours",label:"工时(h)",width:"100"}),l(y,{prop:"remark",label:"备注","min-width":"150"}),l(y,{label:"操作",width:"160"},{default:o(({row:a})=>[l(p,{size:"small",onClick:H=>U(a)},{default:o(()=>[...e[7]||(e[7]=[c("编辑",-1)])]),_:1},8,["onClick"]),l(p,{size:"small",type:"danger",onClick:H=>N(a)},{default:o(()=>[...e[8]||(e[8]=[c("删除",-1)])]),_:1},8,["onClick"])]),_:1})]),_:1},8,["data"])),[[G,k.value]]),r("div",ne,[l(A,{percentage:d.value/8*100,color:d.value>8?"#ef4444":"#6366f1","stroke-width":10,format:()=>`${d.value}/8h`},null,8,["percentage","color","format"])])]),l(j,{modelValue:u.value,"onUpdate:modelValue":e[5]||(e[5]=a=>u.value=a),title:m.value?"编辑工时":"添加工时",width:"460px","destroy-on-close":""},{footer:o(()=>[l(p,{onClick:e[4]||(e[4]=a=>u.value=!1)},{default:o(()=>[...e[9]||(e[9]=[c("取消",-1)])]),_:1}),l(p,{type:"primary",loading:b.value,onClick:z},{default:o(()=>[...e[10]||(e[10]=[c("保存",-1)])]),_:1},8,["loading"])]),default:o(()=>[l(O,{model:t,rules:B,ref_key:"formRef",ref:D,"label-width":"80px"},{default:o(()=>[m.value?Z("",!0):(_(),w(h,{key:0,label:"项目",prop:"client_id"},{default:o(()=>[l(I,{modelValue:t.client_id,"onUpdate:modelValue":e[1]||(e[1]=a=>t.client_id=a),placeholder:"选择客户/项目",style:{width:"100%"},filterable:""},{default:o(()=>[(_(!0),T(W,null,X(x.value,a=>(_(),w(F,{key:a.id,label:`${a.name} (${a.sales_name})`,value:a.id},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),_:1})),l(h,{label:"工时",prop:"hours"},{default:o(()=>[l(R,{modelValue:t.hours,"onUpdate:modelValue":e[2]||(e[2]=a=>t.hours=a),min:.5,max:8,step:.5,precision:1,style:{width:"100%"}},null,8,["modelValue"])]),_:1}),l(h,{label:"备注"},{default:o(()=>[l(L,{modelValue:t.remark,"onUpdate:modelValue":e[3]||(e[3]=a=>t.remark=a),type:"textarea",rows:2,placeholder:"工作内容说明(选填)"},null,8,["modelValue"])]),_:1})]),_:1},8,["model"])]),_:1},8,["modelValue","title"])])}}};export{de as default};
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
|
||||
import{q as J,c as T,a as r,b as l,w as o,x as K,k as w,h as i,r as s,v as P,o as _,e as c,t as Q,F as W,i as X,A as Z,y as ee,E as V,f as le}from"./index-NywRioUE.js";import{r as f}from"./index-IKxiqY7O.js";const te={class:"content-card"},ae={class:"card-title"},oe={class:"filter-bar",style:{"margin-bottom":"0"}},ne={style:{"margin-top":"16px"}},de={__name:"TimesheetForm",setup(se){const $=new Date().toISOString().split("T")[0],v=i($),C=i([]),d=i(0),x=i([]),k=i(!1),u=i(!1),b=i(!1),m=i(null),D=i(null),t=le({client_id:"",hours:1,remark:""}),B={client_id:[{required:!0,message:"请选择项目",trigger:"change"}],hours:[{required:!0,message:"请输入工时",trigger:"blur"}]};async function g(){k.value=!0;try{const n=await f.getTimesheets({date:v.value});C.value=n.data.records,d.value=n.data.day_total}finally{k.value=!1}}async function E(){const n=await f.getClients();x.value=n.data}function M(){m.value=null,t.client_id="",t.hours=1,t.remark="",u.value=!0}function U(n){m.value=n.id,t.client_id=n.client_id,t.hours=n.hours,t.remark=n.remark||"",u.value=!0}async function z(){var e;if(await((e=D.value)==null?void 0:e.validate().catch(()=>!1))){b.value=!0;try{m.value?(await f.updateTimesheet(m.value,{hours:t.hours,remark:t.remark}),V.success("更新成功")):(await f.createTimesheet({client_id:t.client_id,work_date:v.value,hours:t.hours,remark:t.remark}),V.success("提交成功")),u.value=!1,g()}finally{b.value=!1}}}async function N(n){await ee.confirm("确定删除该工时记录吗?","确认",{type:"warning"}),await f.deleteTimesheet(n.id),V.success("删除成功"),g()}return J(()=>{g(),E()}),(n,e)=>{const S=s("el-date-picker"),Y=s("el-tag"),p=s("el-button"),y=s("el-table-column"),q=s("el-table"),A=s("el-progress"),F=s("el-option"),I=s("el-select"),h=s("el-form-item"),R=s("el-input-number"),L=s("el-input"),O=s("el-form"),j=s("el-dialog"),G=P("loading");return _(),T("div",null,[e[11]||(e[11]=r("div",{class:"page-header"},[r("h1",null,"每日工时填报"),r("p",null,"选择日期,为参与的项目填写工时")],-1)),r("div",te,[r("div",ae,[r("div",oe,[l(S,{modelValue:v.value,"onUpdate:modelValue":e[0]||(e[0]=a=>v.value=a),type:"date",placeholder:"选择日期","value-format":"YYYY-MM-DD",size:"default",onChange:g},null,8,["modelValue"]),l(Y,{type:"info",effect:"dark",round:"",size:"large",style:{"margin-left":"8px"}},{default:o(()=>[c(" 当日已填: "+Q(d.value)+" / 8 小时 ",1)]),_:1})]),l(p,{type:"primary",onClick:M,disabled:d.value>=8},{default:o(()=>[...e[6]||(e[6]=[c("+ 添加工时",-1)])]),_:1},8,["disabled"])]),K((_(),w(q,{data:C.value,stripe:""},{default:o(()=>[l(y,{prop:"client_name",label:"客户/项目","min-width":"180"}),l(y,{prop:"hours",label:"工时(h)",width:"100"}),l(y,{prop:"remark",label:"备注","min-width":"150"}),l(y,{label:"操作",width:"160"},{default:o(({row:a})=>[l(p,{size:"small",onClick:H=>U(a)},{default:o(()=>[...e[7]||(e[7]=[c("编辑",-1)])]),_:1},8,["onClick"]),l(p,{size:"small",type:"danger",onClick:H=>N(a)},{default:o(()=>[...e[8]||(e[8]=[c("删除",-1)])]),_:1},8,["onClick"])]),_:1})]),_:1},8,["data"])),[[G,k.value]]),r("div",ne,[l(A,{percentage:d.value/8*100,color:d.value>8?"#ef4444":"#6366f1","stroke-width":10,format:()=>`${d.value}/8h`},null,8,["percentage","color","format"])])]),l(j,{modelValue:u.value,"onUpdate:modelValue":e[5]||(e[5]=a=>u.value=a),title:m.value?"编辑工时":"添加工时",width:"460px","destroy-on-close":""},{footer:o(()=>[l(p,{onClick:e[4]||(e[4]=a=>u.value=!1)},{default:o(()=>[...e[9]||(e[9]=[c("取消",-1)])]),_:1}),l(p,{type:"primary",loading:b.value,onClick:z},{default:o(()=>[...e[10]||(e[10]=[c("保存",-1)])]),_:1},8,["loading"])]),default:o(()=>[l(O,{model:t,rules:B,ref_key:"formRef",ref:D,"label-width":"80px"},{default:o(()=>[m.value?Z("",!0):(_(),w(h,{key:0,label:"项目",prop:"client_id"},{default:o(()=>[l(I,{modelValue:t.client_id,"onUpdate:modelValue":e[1]||(e[1]=a=>t.client_id=a),placeholder:"选择客户/项目",style:{width:"100%"},filterable:""},{default:o(()=>[(_(!0),T(W,null,X(x.value,a=>(_(),w(F,{key:a.id,label:`${a.name} (${a.sales_name})`,value:a.id},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),_:1})),l(h,{label:"工时",prop:"hours"},{default:o(()=>[l(R,{modelValue:t.hours,"onUpdate:modelValue":e[2]||(e[2]=a=>t.hours=a),min:.5,max:8,step:.5,precision:1,style:{width:"100%"}},null,8,["modelValue"])]),_:1}),l(h,{label:"备注"},{default:o(()=>[l(L,{modelValue:t.remark,"onUpdate:modelValue":e[3]||(e[3]=a=>t.remark=a),type:"textarea",rows:2,placeholder:"工作内容说明(选填)"},null,8,["modelValue"])]),_:1})]),_:1},8,["model"])]),_:1},8,["modelValue","title"])])}}};export{de as default};
|
||||
@@ -0,0 +1 @@
|
||||
import{q as L,c as j,a as p,b as l,w as s,x as F,k as G,r as o,v as H,h as m,f as J,o as q,e as r,t as U,E as _,y as K}from"./index-Au1XOH8d.js";import{b as c}from"./index-8cA9XdMr.js";const O={class:"content-card"},P={class:"card-title"},Y={__name:"UserManage",setup(Q){const C=m([]),b=m(!1),f=m(!1),y=m(!1),u=m(null),w=m(null),n=J({username:"",password:"",realname:"",role:""}),B={username:[{required:!0,message:"请输入用户名",trigger:"blur"}],password:[{required:!0,message:"请输入密码",trigger:"blur"}],realname:[{required:!0,message:"请输入姓名",trigger:"blur"}],role:[{required:!0,message:"请选择角色",trigger:"change"}]},E=a=>({admin:"管理员",sales:"销售",rd:"研发"})[a]||a,M=a=>({admin:"danger",sales:"warning",rd:""})[a]||"info";async function v(){b.value=!0;try{const a=await c.getUsers();C.value=a.data}finally{b.value=!1}}function x(a){u.value=(a==null?void 0:a.id)||null,n.username=(a==null?void 0:a.username)||"",n.password="",n.realname=(a==null?void 0:a.realname)||"",n.role=(a==null?void 0:a.role)||"",f.value=!0}async function z(){var e;if(await((e=w.value)==null?void 0:e.validate().catch(()=>!1))){y.value=!0;try{if(u.value){const d={realname:n.realname,role:n.role};n.password&&(d.password=n.password),await c.updateUser(u.value,d),_.success("更新成功")}else await c.createUser(n),_.success("创建成功");f.value=!1,v()}finally{y.value=!1}}}async function N(a){await c.updateUser(a.id,{status:a.status===1?0:1}),_.success("状态已更新"),v()}async function S(a){await K.confirm(`确定删除用户 "${a.realname}" 吗?`,"确认删除",{type:"warning"}),await c.deleteUser(a.id),_.success("删除成功"),v()}return L(v),(a,e)=>{const d=o("el-button"),i=o("el-table-column"),D=o("el-tag"),I=o("el-table"),V=o("el-input"),g=o("el-form-item"),k=o("el-option"),R=o("el-select"),T=o("el-form"),h=o("el-dialog"),A=H("loading");return q(),j("div",null,[e[13]||(e[13]=p("div",{class:"page-header"},[p("h1",null,"账号管理"),p("p",null,"管理系统用户账号,分配角色权限")],-1)),p("div",O,[p("div",P,[e[8]||(e[8]=p("span",null,"用户列表",-1)),l(d,{type:"primary",onClick:e[0]||(e[0]=t=>x())},{default:s(()=>[...e[7]||(e[7]=[r("+ 新增用户",-1)])]),_:1})]),F((q(),G(I,{data:C.value,stripe:""},{default:s(()=>[l(i,{prop:"id",label:"ID",width:"60"}),l(i,{prop:"username",label:"用户名",width:"120"}),l(i,{prop:"realname",label:"姓名",width:"120"}),l(i,{prop:"role",label:"角色",width:"100"},{default:s(({row:t})=>[l(D,{type:M(t.role),effect:"dark",round:""},{default:s(()=>[r(U(E(t.role)),1)]),_:2},1032,["type"])]),_:1}),l(i,{prop:"status",label:"状态",width:"80"},{default:s(({row:t})=>[l(D,{type:t.status===1?"success":"danger",effect:"dark",round:""},{default:s(()=>[r(U(t.status===1?"启用":"禁用"),1)]),_:2},1032,["type"])]),_:1}),l(i,{prop:"created_at",label:"创建时间",width:"180"}),l(i,{label:"操作","min-width":"200"},{default:s(({row:t})=>[l(d,{size:"small",onClick:$=>x(t)},{default:s(()=>[...e[9]||(e[9]=[r("编辑",-1)])]),_:1},8,["onClick"]),l(d,{size:"small",type:t.status===1?"warning":"success",onClick:$=>N(t)},{default:s(()=>[r(U(t.status===1?"禁用":"启用"),1)]),_:2},1032,["type","onClick"]),l(d,{size:"small",type:"danger",onClick:$=>S(t)},{default:s(()=>[...e[10]||(e[10]=[r("删除",-1)])]),_:1},8,["onClick"])]),_:1})]),_:1},8,["data"])),[[A,b.value]])]),l(h,{modelValue:f.value,"onUpdate:modelValue":e[6]||(e[6]=t=>f.value=t),title:u.value?"编辑用户":"新增用户",width:"460px","destroy-on-close":""},{footer:s(()=>[l(d,{onClick:e[5]||(e[5]=t=>f.value=!1)},{default:s(()=>[...e[11]||(e[11]=[r("取消",-1)])]),_:1}),l(d,{type:"primary",loading:y.value,onClick:z},{default:s(()=>[...e[12]||(e[12]=[r("保存",-1)])]),_:1},8,["loading"])]),default:s(()=>[l(T,{model:n,rules:B,ref_key:"formRef",ref:w,"label-width":"80px"},{default:s(()=>[l(g,{label:"用户名",prop:"username"},{default:s(()=>[l(V,{modelValue:n.username,"onUpdate:modelValue":e[1]||(e[1]=t=>n.username=t),disabled:!!u.value,placeholder:"登录用户名"},null,8,["modelValue","disabled"])]),_:1}),l(g,{label:"密码",prop:u.value?"":"password"},{default:s(()=>[l(V,{modelValue:n.password,"onUpdate:modelValue":e[2]||(e[2]=t=>n.password=t),type:"password","show-password":"",placeholder:u.value?"留空则不修改":"请输入密码"},null,8,["modelValue","placeholder"])]),_:1},8,["prop"]),l(g,{label:"姓名",prop:"realname"},{default:s(()=>[l(V,{modelValue:n.realname,"onUpdate:modelValue":e[3]||(e[3]=t=>n.realname=t),placeholder:"真实姓名"},null,8,["modelValue"])]),_:1}),l(g,{label:"角色",prop:"role"},{default:s(()=>[l(R,{modelValue:n.role,"onUpdate:modelValue":e[4]||(e[4]=t=>n.role=t),placeholder:"选择角色",style:{width:"100%"}},{default:s(()=>[l(k,{label:"管理员",value:"admin"}),l(k,{label:"销售",value:"sales"}),l(k,{label:"研发",value:"rd"})]),_:1},8,["modelValue"])]),_:1})]),_:1},8,["model"])]),_:1},8,["modelValue","title"])])}}};export{Y as default};
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
|
||||
import{q as L,c as j,a as p,b as l,w as s,x as F,k as G,r as o,v as H,h as m,f as J,o as q,e as r,t as U,E as _,y as K}from"./index-NywRioUE.js";import{b as c}from"./index-IKxiqY7O.js";const O={class:"content-card"},P={class:"card-title"},Y={__name:"UserManage",setup(Q){const C=m([]),b=m(!1),f=m(!1),y=m(!1),u=m(null),w=m(null),n=J({username:"",password:"",realname:"",role:""}),B={username:[{required:!0,message:"请输入用户名",trigger:"blur"}],password:[{required:!0,message:"请输入密码",trigger:"blur"}],realname:[{required:!0,message:"请输入姓名",trigger:"blur"}],role:[{required:!0,message:"请选择角色",trigger:"change"}]},E=a=>({admin:"管理员",sales:"销售",rd:"研发"})[a]||a,M=a=>({admin:"danger",sales:"warning",rd:""})[a]||"info";async function v(){b.value=!0;try{const a=await c.getUsers();C.value=a.data}finally{b.value=!1}}function x(a){u.value=(a==null?void 0:a.id)||null,n.username=(a==null?void 0:a.username)||"",n.password="",n.realname=(a==null?void 0:a.realname)||"",n.role=(a==null?void 0:a.role)||"",f.value=!0}async function z(){var e;if(await((e=w.value)==null?void 0:e.validate().catch(()=>!1))){y.value=!0;try{if(u.value){const d={realname:n.realname,role:n.role};n.password&&(d.password=n.password),await c.updateUser(u.value,d),_.success("更新成功")}else await c.createUser(n),_.success("创建成功");f.value=!1,v()}finally{y.value=!1}}}async function N(a){await c.updateUser(a.id,{status:a.status===1?0:1}),_.success("状态已更新"),v()}async function S(a){await K.confirm(`确定删除用户 "${a.realname}" 吗?`,"确认删除",{type:"warning"}),await c.deleteUser(a.id),_.success("删除成功"),v()}return L(v),(a,e)=>{const d=o("el-button"),i=o("el-table-column"),D=o("el-tag"),I=o("el-table"),V=o("el-input"),g=o("el-form-item"),k=o("el-option"),R=o("el-select"),T=o("el-form"),h=o("el-dialog"),A=H("loading");return q(),j("div",null,[e[13]||(e[13]=p("div",{class:"page-header"},[p("h1",null,"账号管理"),p("p",null,"管理系统用户账号,分配角色权限")],-1)),p("div",O,[p("div",P,[e[8]||(e[8]=p("span",null,"用户列表",-1)),l(d,{type:"primary",onClick:e[0]||(e[0]=t=>x())},{default:s(()=>[...e[7]||(e[7]=[r("+ 新增用户",-1)])]),_:1})]),F((q(),G(I,{data:C.value,stripe:""},{default:s(()=>[l(i,{prop:"id",label:"ID",width:"60"}),l(i,{prop:"username",label:"用户名",width:"120"}),l(i,{prop:"realname",label:"姓名",width:"120"}),l(i,{prop:"role",label:"角色",width:"100"},{default:s(({row:t})=>[l(D,{type:M(t.role),effect:"dark",round:""},{default:s(()=>[r(U(E(t.role)),1)]),_:2},1032,["type"])]),_:1}),l(i,{prop:"status",label:"状态",width:"80"},{default:s(({row:t})=>[l(D,{type:t.status===1?"success":"danger",effect:"dark",round:""},{default:s(()=>[r(U(t.status===1?"启用":"禁用"),1)]),_:2},1032,["type"])]),_:1}),l(i,{prop:"created_at",label:"创建时间",width:"180"}),l(i,{label:"操作","min-width":"200"},{default:s(({row:t})=>[l(d,{size:"small",onClick:$=>x(t)},{default:s(()=>[...e[9]||(e[9]=[r("编辑",-1)])]),_:1},8,["onClick"]),l(d,{size:"small",type:t.status===1?"warning":"success",onClick:$=>N(t)},{default:s(()=>[r(U(t.status===1?"禁用":"启用"),1)]),_:2},1032,["type","onClick"]),l(d,{size:"small",type:"danger",onClick:$=>S(t)},{default:s(()=>[...e[10]||(e[10]=[r("删除",-1)])]),_:1},8,["onClick"])]),_:1})]),_:1},8,["data"])),[[A,b.value]])]),l(h,{modelValue:f.value,"onUpdate:modelValue":e[6]||(e[6]=t=>f.value=t),title:u.value?"编辑用户":"新增用户",width:"460px","destroy-on-close":""},{footer:s(()=>[l(d,{onClick:e[5]||(e[5]=t=>f.value=!1)},{default:s(()=>[...e[11]||(e[11]=[r("取消",-1)])]),_:1}),l(d,{type:"primary",loading:y.value,onClick:z},{default:s(()=>[...e[12]||(e[12]=[r("保存",-1)])]),_:1},8,["loading"])]),default:s(()=>[l(T,{model:n,rules:B,ref_key:"formRef",ref:w,"label-width":"80px"},{default:s(()=>[l(g,{label:"用户名",prop:"username"},{default:s(()=>[l(V,{modelValue:n.username,"onUpdate:modelValue":e[1]||(e[1]=t=>n.username=t),disabled:!!u.value,placeholder:"登录用户名"},null,8,["modelValue","disabled"])]),_:1}),l(g,{label:"密码",prop:u.value?"":"password"},{default:s(()=>[l(V,{modelValue:n.password,"onUpdate:modelValue":e[2]||(e[2]=t=>n.password=t),type:"password","show-password":"",placeholder:u.value?"留空则不修改":"请输入密码"},null,8,["modelValue","placeholder"])]),_:1},8,["prop"]),l(g,{label:"姓名",prop:"realname"},{default:s(()=>[l(V,{modelValue:n.realname,"onUpdate:modelValue":e[3]||(e[3]=t=>n.realname=t),placeholder:"真实姓名"},null,8,["modelValue"])]),_:1}),l(g,{label:"角色",prop:"role"},{default:s(()=>[l(R,{modelValue:n.role,"onUpdate:modelValue":e[4]||(e[4]=t=>n.role=t),placeholder:"选择角色",style:{width:"100%"}},{default:s(()=>[l(k,{label:"管理员",value:"admin"}),l(k,{label:"销售",value:"sales"}),l(k,{label:"研发",value:"rd"})]),_:1},8,["modelValue"])]),_:1})]),_:1},8,["model"])]),_:1},8,["modelValue","title"])])}}};export{Y as default};
|
||||
@@ -0,0 +1 @@
|
||||
import{h as p,q as A,c as d,a as t,b as y,w as g,F as h,i as x,r as i,o as n,z as B,k as W,e as E,n as F,t as b,E as N}from"./index-Au1XOH8d.js";import{b as k}from"./index-8cA9XdMr.js";const S={class:"content-card"},U={class:"card-title"},Y={class:"filter-bar",style:{"margin-bottom":"0"}},D={style:{display:"grid","grid-template-columns":"repeat(auto-fill, minmax(200px, 1fr))",gap:"16px","margin-top":"8px"}},M={class:"label"},q={style:{display:"flex","align-items":"center",gap:"8px"}},L={style:{"margin-top":"6px","font-size":"12px",color:"var(--text-muted)"}},G={__name:"WorkdaySetting",setup(T){const _=new Date().getFullYear(),V=Array.from({length:5},(l,e)=>_-2+e),s=p(_),u=p(!1),c=p(Array.from({length:12},(l,e)=>({month:e+1,days:22})));async function v(){try{const l=await k.getWorkdays(s.value);l.data.length>0&&(c.value=Array.from({length:12},(e,o)=>{const r=l.data.find(m=>m.month===o+1);return{month:o+1,days:r?r.days:22}}))}catch{}}async function w(){u.value=!0;try{await k.setWorkdays({year:s.value,months:c.value.map(l=>({month:l.month,days:l.days}))}),N.success("保存成功")}finally{u.value=!1}}return A(v),(l,e)=>{const o=i("el-option"),r=i("el-select"),m=i("el-button"),C=i("el-input-number");return n(),d("div",null,[e[3]||(e[3]=t("div",{class:"page-header"},[t("h1",null,"工作日设置"),t("p",null,"按年份设定每月工作日天数,用于计算研发工时上限")],-1)),t("div",S,[t("div",U,[t("div",Y,[y(r,{modelValue:s.value,"onUpdate:modelValue":e[0]||(e[0]=a=>s.value=a),onChange:v,style:{width:"120px"}},{default:g(()=>[(n(!0),d(h,null,x(B(V),a=>(n(),W(o,{key:a,label:`${a}年`,value:a},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),y(m,{type:"primary",loading:u.value,onClick:w},{default:g(()=>[...e[1]||(e[1]=[E("保存设置",-1)])]),_:1},8,["loading"])]),t("div",D,[(n(!0),d(h,null,x(c.value,(a,f)=>(n(),d("div",{key:f,class:F(["stat-card",["purple","green","blue","orange"][f%4]])},[t("div",M,b(a.month)+"月",1),t("div",q,[y(C,{modelValue:a.days,"onUpdate:modelValue":z=>a.days=z,min:0,max:31,size:"default",style:{width:"120px"}},null,8,["modelValue","onUpdate:modelValue"]),e[2]||(e[2]=t("span",{class:"unit"},"天",-1))]),t("div",L," 工时上限: "+b(a.days*8)+" 小时 ",1)],2))),128))])])])}}};export{G as default};
|
||||
@@ -0,0 +1 @@
|
||||
import{h as p,q as A,c as d,a as t,b as y,w as g,F as h,i as x,r as i,o as n,B as W,k as z,e as E,n as F,t as b,E as N}from"./index-Dn51426I.js";import{b as k}from"./index-BRvS5RTm.js";const S={class:"content-card"},U={class:"card-title"},Y={class:"filter-bar",style:{"margin-bottom":"0"}},D={style:{display:"grid","grid-template-columns":"repeat(auto-fill, minmax(200px, 1fr))",gap:"16px","margin-top":"8px"}},M={class:"label"},q={style:{display:"flex","align-items":"center",gap:"8px"}},L={style:{"margin-top":"6px","font-size":"12px",color:"var(--text-muted)"}},G={__name:"WorkdaySetting",setup(T){const _=new Date().getFullYear(),V=Array.from({length:5},(l,e)=>_-2+e),s=p(_),u=p(!1),c=p(Array.from({length:12},(l,e)=>({month:e+1,days:22})));async function v(){try{const l=await k.getWorkdays(s.value);l.data.length>0&&(c.value=Array.from({length:12},(e,o)=>{const r=l.data.find(m=>m.month===o+1);return{month:o+1,days:r?r.days:22}}))}catch{}}async function w(){u.value=!0;try{await k.setWorkdays({year:s.value,months:c.value.map(l=>({month:l.month,days:l.days}))}),N.success("保存成功")}finally{u.value=!1}}return A(v),(l,e)=>{const o=i("el-option"),r=i("el-select"),m=i("el-button"),B=i("el-input-number");return n(),d("div",null,[e[3]||(e[3]=t("div",{class:"page-header"},[t("h1",null,"工作日设置"),t("p",null,"按年份设定每月工作日天数,用于计算研发工时上限")],-1)),t("div",S,[t("div",U,[t("div",Y,[y(r,{modelValue:s.value,"onUpdate:modelValue":e[0]||(e[0]=a=>s.value=a),onChange:v,style:{width:"120px"}},{default:g(()=>[(n(!0),d(h,null,x(W(V),a=>(n(),z(o,{key:a,label:`${a}年`,value:a},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),y(m,{type:"primary",loading:u.value,onClick:w},{default:g(()=>[...e[1]||(e[1]=[E("保存设置",-1)])]),_:1},8,["loading"])]),t("div",D,[(n(!0),d(h,null,x(c.value,(a,f)=>(n(),d("div",{key:f,class:F(["stat-card",["purple","green","blue","orange"][f%4]])},[t("div",M,b(a.month)+"月",1),t("div",q,[y(B,{modelValue:a.days,"onUpdate:modelValue":C=>a.days=C,min:0,max:31,size:"default",style:{width:"120px"}},null,8,["modelValue","onUpdate:modelValue"]),e[2]||(e[2]=t("span",{class:"unit"},"天",-1))]),t("div",L," 工时上限: "+b(a.days*8)+" 小时 ",1)],2))),128))])])])}}};export{G as default};
|
||||
@@ -0,0 +1 @@
|
||||
import{h as p,q as A,c as d,a as t,b as y,w as g,F as h,i as x,r as i,o as n,z as B,k as W,e as E,n as F,t as b,E as N}from"./index-NywRioUE.js";import{b as k}from"./index-IKxiqY7O.js";const S={class:"content-card"},U={class:"card-title"},Y={class:"filter-bar",style:{"margin-bottom":"0"}},D={style:{display:"grid","grid-template-columns":"repeat(auto-fill, minmax(200px, 1fr))",gap:"16px","margin-top":"8px"}},M={class:"label"},q={style:{display:"flex","align-items":"center",gap:"8px"}},L={style:{"margin-top":"6px","font-size":"12px",color:"var(--text-muted)"}},G={__name:"WorkdaySetting",setup(T){const _=new Date().getFullYear(),V=Array.from({length:5},(l,e)=>_-2+e),s=p(_),u=p(!1),c=p(Array.from({length:12},(l,e)=>({month:e+1,days:22})));async function v(){try{const l=await k.getWorkdays(s.value);l.data.length>0&&(c.value=Array.from({length:12},(e,o)=>{const r=l.data.find(m=>m.month===o+1);return{month:o+1,days:r?r.days:22}}))}catch{}}async function w(){u.value=!0;try{await k.setWorkdays({year:s.value,months:c.value.map(l=>({month:l.month,days:l.days}))}),N.success("保存成功")}finally{u.value=!1}}return A(v),(l,e)=>{const o=i("el-option"),r=i("el-select"),m=i("el-button"),C=i("el-input-number");return n(),d("div",null,[e[3]||(e[3]=t("div",{class:"page-header"},[t("h1",null,"工作日设置"),t("p",null,"按年份设定每月工作日天数,用于计算研发工时上限")],-1)),t("div",S,[t("div",U,[t("div",Y,[y(r,{modelValue:s.value,"onUpdate:modelValue":e[0]||(e[0]=a=>s.value=a),onChange:v,style:{width:"120px"}},{default:g(()=>[(n(!0),d(h,null,x(B(V),a=>(n(),W(o,{key:a,label:`${a}年`,value:a},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),y(m,{type:"primary",loading:u.value,onClick:w},{default:g(()=>[...e[1]||(e[1]=[E("保存设置",-1)])]),_:1},8,["loading"])]),t("div",D,[(n(!0),d(h,null,x(c.value,(a,f)=>(n(),d("div",{key:f,class:F(["stat-card",["purple","green","blue","orange"][f%4]])},[t("div",M,b(a.month)+"月",1),t("div",q,[y(C,{modelValue:a.days,"onUpdate:modelValue":z=>a.days=z,min:0,max:31,size:"default",style:{width:"120px"}},null,8,["modelValue","onUpdate:modelValue"]),e[2]||(e[2]=t("span",{class:"unit"},"天",-1))]),t("div",L," 工时上限: "+b(a.days*8)+" 小时 ",1)],2))),128))])])])}}};export{G 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
@@ -0,0 +1 @@
|
||||
import{m as n,h as r}from"./index-NywRioUE.js";const m=n("user",()=>{const o=r(JSON.parse(localStorage.getItem("user")||"null")),t=r(localStorage.getItem("token")||"");function s(e,l){t.value=e,o.value=l,localStorage.setItem("token",e),localStorage.setItem("user",JSON.stringify(l))}function a(){t.value="",o.value=null,localStorage.removeItem("token"),localStorage.removeItem("user")}return{user:o,token:t,setLogin:s,logout:a,isLoggedIn:()=>!!t.value,getRole:()=>{var e;return((e=o.value)==null?void 0:e.role)||""}}});export{m as u};
|
||||
@@ -0,0 +1 @@
|
||||
import{m as n,h as r}from"./index-Dn51426I.js";const m=n("user",()=>{const o=r(JSON.parse(localStorage.getItem("user")||"null")),t=r(localStorage.getItem("token")||"");function s(e,l){t.value=e,o.value=l,localStorage.setItem("token",e),localStorage.setItem("user",JSON.stringify(l))}function a(){t.value="",o.value=null,localStorage.removeItem("token"),localStorage.removeItem("user")}return{user:o,token:t,setLogin:s,logout:a,isLoggedIn:()=>!!t.value,getRole:()=>{var e;return((e=o.value)==null?void 0:e.role)||""}}});export{m as u};
|
||||
@@ -0,0 +1 @@
|
||||
import{m as n,h as r}from"./index-Au1XOH8d.js";const m=n("user",()=>{const o=r(JSON.parse(localStorage.getItem("user")||"null")),t=r(localStorage.getItem("token")||"");function s(e,l){t.value=e,o.value=l,localStorage.setItem("token",e),localStorage.setItem("user",JSON.stringify(l))}function a(){t.value="",o.value=null,localStorage.removeItem("token"),localStorage.removeItem("user")}return{user:o,token:t,setLogin:s,logout:a,isLoggedIn:()=>!!t.value,getRole:()=>{var e;return((e=o.value)==null?void 0:e.role)||""}}});export{m as u};
|
||||
@@ -0,0 +1,16 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="description" content="跨部门工时管理与项目协同系统 - 实现研发、销售和管理三个部门的工时统计、项目协同与成本核算">
|
||||
<title>工时管理系统</title>
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap" rel="stylesheet">
|
||||
<script type="module" crossorigin src="/assets/index-Dn51426I.js"></script>
|
||||
<link rel="stylesheet" crossorigin href="/assets/index-DkemfcLm.css">
|
||||
</head>
|
||||
<body>
|
||||
<div id="app"></div>
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user