Files
tongjiweb/server/public/assets/ClientManage-BMjCZ7Uu.js

2 lines
6.1 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import{_ as W,q as X,c as g,a as m,t as b,b as a,w as s,y as Y,k as v,h as u,r as d,x as Z,f as w,o as i,e as r,F as B,i as D,d as ee,E as z,A as le,v as te}from"./index-CYgyy2lw.js";import{b as _}from"./index-B5S4JoyK.js";const ae={class:"content-card"},se={class:"card-title"},ne={key:1,style:{color:"var(--text-muted)","font-size":"12px"}},ie={class:"tag-editor"},oe={__name:"ClientManage",setup(ue){const S=u([]),R=u([]),h=u(!1),y=u(!1),T=u(!1),k=u(null),M=u(null),C=u(!1),f=u(""),E=u(null),n=w({name:"",description:"",sales_id:"",service_types:[]}),A={name:[{required:!0,message:"请输入名称",trigger:"blur"}],sales_id:[{required:!0,message:"请选择所属销售",trigger:"change"}]};async function V(){h.value=!0;try{const[e,l]=await Promise.all([_.getClients(),_.getSalesUsers()]);S.value=e.data,R.value=l.data}finally{h.value=!1}}function I(e){k.value=(e==null?void 0:e.id)||null,n.name=(e==null?void 0:e.name)||"",n.description=(e==null?void 0:e.description)||"",n.sales_id=(e==null?void 0:e.sales_id)||"",n.service_types=e!=null&&e.service_types?[...e.service_types]:[],C.value=!1,f.value="",y.value=!0}async function N(){var e;C.value=!0,f.value="",await te(),(e=E.value)==null||e.focus()}function q(){const e=f.value.trim();e&&!n.service_types.includes(e)&&n.service_types.push(e),C.value=!1,f.value=""}function F(e){n.service_types.splice(e,1)}async function K(){var l;if(await((l=M.value)==null?void 0:l.validate().catch(()=>!1))){T.value=!0;try{const o={name:n.name,description:n.description,sales_id:n.sales_id,service_types:n.service_types};k.value?(await _.updateClient(k.value,o),z.success("更新成功")):(await _.createClient(o),z.success("创建成功")),y.value=!1,V()}finally{T.value=!1}}}async function L(e){await _.updateClient(e.id,{status:e.status===1?0:1}),z.success("状态已更新"),V()}async function P(e){await le.confirm(`确定删除项目「${e.name}」吗?如已有工时记录则无法删除,建议使用“结算”操作。`,"确认删除",{type:"warning"}),await _.deleteClient(e.id),z.success("删除成功"),V()}return X(V),(e,l)=>{const o=d("el-button"),p=d("el-table-column"),U=d("el-tag"),j=d("el-table"),$=d("el-input"),x=d("el-form-item"),G=d("el-option"),H=d("el-select"),J=d("el-form"),O=d("el-dialog"),Q=Z("loading");return i(),g("div",null,[l[14]||(l[14]=m("div",{class:"page-header"},[m("h1",null,"客户/项目管理"),m("p",null,"管理系统中的客户与项目,并指定所属销售")],-1)),m("div",ae,[m("div",se,[m("span",null,"全部客户/项目 ("+b(S.value.length)+")",1),a(o,{type:"primary",onClick:l[0]||(l[0]=t=>I())},{default:s(()=>[...l[7]||(l[7]=[r("+ 新增客户/项目",-1)])]),_:1})]),Y((i(),v(j,{data:S.value,stripe:""},{default:s(()=>[a(p,{prop:"name",label:"客户/项目名称","min-width":"160"}),a(p,{prop:"sales_name",label:"所属销售","min-width":"100"}),a(p,{label:"子项目预设","min-width":"200"},{default:s(({row:t})=>[t.service_types&&t.service_types.length?(i(!0),g(B,{key:0},D(t.service_types,c=>(i(),v(U,{key:c,size:"small",style:{margin:"2px"}},{default:s(()=>[r(b(c),1)]),_:2},1024))),128)):(i(),g("span",ne,"未设置"))]),_:1}),a(p,{prop:"description",label:"描述","min-width":"120","show-overflow-tooltip":""}),a(p,{prop:"status",label:"状态",width:"90"},{default:s(({row:t})=>[a(U,{type:t.status===1?"success":"info",effect:"dark",round:""},{default:s(()=>[r(b(t.status===1?"进行中":"已结算"),1)]),_:2},1032,["type"])]),_:1}),a(p,{prop:"total_hours",label:"总工时(h)",width:"100"}),a(p,{prop:"rd_count",label:"参与研发",width:"90"}),a(p,{label:"操作",width:"200"},{default:s(({row:t})=>[a(o,{size:"small",onClick:c=>I(t)},{default:s(()=>[...l[8]||(l[8]=[r("编辑",-1)])]),_:1},8,["onClick"]),a(o,{size:"small",type:t.status===1?"warning":"success",onClick:c=>L(t)},{default:s(()=>[r(b(t.status===1?"结算":"激活"),1)]),_:2},1032,["type","onClick"]),a(o,{size:"small",type:"danger",onClick:c=>P(t)},{default:s(()=>[...l[9]||(l[9]=[r("删除",-1)])]),_:1},8,["onClick"])]),_:1})]),_:1},8,["data"])),[[Q,h.value]])]),a(O,{modelValue:y.value,"onUpdate:modelValue":l[6]||(l[6]=t=>y.value=t),title:k.value?"编辑客户/项目":"新增客户/项目",width:"500px","destroy-on-close":""},{footer:s(()=>[a(o,{onClick:l[5]||(l[5]=t=>y.value=!1)},{default:s(()=>[...l[12]||(l[12]=[r("取消",-1)])]),_:1}),a(o,{type:"primary",loading:T.value,onClick:K},{default:s(()=>[...l[13]||(l[13]=[r("保存",-1)])]),_:1},8,["loading"])]),default:s(()=>[a(J,{model:n,rules:A,ref_key:"formRef",ref:M,"label-width":"100px"},{default:s(()=>[a(x,{label:"名称",prop:"name"},{default:s(()=>[a($,{modelValue:n.name,"onUpdate:modelValue":l[1]||(l[1]=t=>n.name=t),placeholder:"客户/项目名称"},null,8,["modelValue"])]),_:1}),a(x,{label:"所属销售",prop:"sales_id"},{default:s(()=>[a(H,{modelValue:n.sales_id,"onUpdate:modelValue":l[2]||(l[2]=t=>n.sales_id=t),placeholder:"请选择销售人员",style:{width:"100%"},filterable:""},{default:s(()=>[(i(!0),g(B,null,D(R.value,t=>(i(),v(G,{key:t.id,label:t.realname,value:t.id},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),_:1}),a(x,{label:"子项目"},{default:s(()=>[m("div",ie,[(i(!0),g(B,null,D(n.service_types,(t,c)=>(i(),v(U,{key:c,closable:"",effect:"dark",size:"default",class:"st-tag",onClose:de=>F(c)},{default:s(()=>[r(b(t),1)]),_:2},1032,["onClose"]))),128)),C.value?(i(),v($,{key:1,ref_key:"stInputRef",ref:E,modelValue:f.value,"onUpdate:modelValue":l[3]||(l[3]=t=>f.value=t),size:"small",class:"st-input",placeholder:"类型名,回车确认",onKeyup:ee(q,["enter"]),onBlur:q,maxlength:"20"},null,8,["modelValue"])):(i(),v(o,{key:0,size:"small",class:"add-st-btn",onClick:N},{default:s(()=>[...l[10]||(l[10]=[r(" 添加",-1)])]),_:1}))]),l[11]||(l[11]=m("div",{style:{"font-size":"12px",color:"var(--text-muted)","margin-top":"6px"}}," 研发填报该项目工时时,可从这里选择子项目 ",-1))]),_:1}),a(x,{label:"描述"},{default:s(()=>[a($,{modelValue:n.description,"onUpdate:modelValue":l[4]||(l[4]=t=>n.description=t),type:"textarea",rows:2,placeholder:"项目描述(选填)"},null,8,["modelValue"])]),_:1})]),_:1},8,["model"])]),_:1},8,["modelValue","title"])])}}},ce=W(oe,[["__scopeId","data-v-c29a7c19"]]);export{ce as default};