index.B2ZNpczt.js 15 KB

1
  1. import{x as R,T as oe,M as ue,E as I}from"./index.DxnZRVX_.js";import{U as me,A as _e,a as ce,b as le,D as fe}from"./api.BoN8ARHz.js";import{a as ge,r as W,w as H,_ as E,t as ye,aj as c,J as D,o as g,K as l,S as t,b as q,P as w,c as N,a9 as L,R as F,M as G,Q as ve,u as X}from"./vue.D1BjjNmv.js";import{_ as be}from"./_plugin-vue_export-helper.DlAUqK2U.js";function we(){return R({url:"/api/system/device/category/",method:"get"})}function Ve(){return R({url:"/api/system/app_user/?user_type=3",method:"get"})}function ke(j){return R({url:"/api/system/approval/workflow_step/?workflow_id="+j,method:"get"})}function qe(j){return R({url:"/api/system/role/",method:"get",params:j})}const he={class:"workflow-steps"},xe={class:"workflow-step"},$e={class:"step-title"},Ue={class:"step-roles"},Se={style:{"text-align":"center",margin:"16px 0"}},De={class:"workflow-step"},Ce=ge({__name:"index",props:{visible:{type:Boolean},editData:{},mode:{}},emits:["update:visible","success"],setup(j,{emit:ae}){const y=j,Y=ae,A=W(y.visible);H(()=>y.visible,s=>A.value=s),H(A,s=>Y("update:visible",s));const J=E([]);Ve().then(s=>{const e=s.data||[];J.splice(0,J.length,...e)}).catch(s=>{console.error("请求失败:",s)});const P=E([]);qe({page:1,limit:20}).then(s=>{var p;const e=((p=s.data)==null?void 0:p.results)||s.data||[];P.splice(0,P.length,...e)}).catch(s=>{console.error("获取角色列表失败:",s)});const z=E([]);we().then(s=>{const e=s.data||[];console.log("获取到的data值:",e),z.splice(0,z.length,...e)}).catch(s=>{console.error("请求失败:",s)});const se=()=>({name:"",passType:"",leaderId:null}),M=()=>({roles:[se()]}),o=E({name:"",scene:"",workflow_type:"0",description:"",is_active:!0,condition:{min_days:1,max_days:null,roles:[],equipment:[],borrow_types:[],team_type:[]},steps:[M()]}),K=E({name:[{required:!0,message:"请输入流程名称",trigger:"blur"}],workflow_type:[{required:!0,message:"请选择流程类型",trigger:"change"}],description:[{required:!0,message:"请输入流程描述",trigger:"blur"}],is_active:[{required:!0,message:"请输选择是否启用",trigger:"blur"}],"condition.min_days":[{required:!0,message:"请输入最少借用天数",trigger:"change"}],"condition.max_days":[{required:!1,validator:(s,e,p)=>{const i=o.condition.min_days;return e==null||e===void 0||e===""?p():typeof e=="number"&&typeof i=="number"&&e<i?p(new Error("最多借用天数不能小于最少借用天数")):p()},trigger:"change"}],"condition.roles":[{required:!0,message:"请选择用户角色",trigger:"change"}],"condition.equipment":[{required:!1,message:"请选择设备标签",trigger:"change"}],"condition.borrow_types":[{required:!0,message:"请选择借用类型",trigger:"change"}],"condition.team_type":[{required:!0,message:"请选择借用方式",trigger:"change"}]}),Z=W();function ee(){o.steps.forEach((s,e)=>{s.roles.forEach((p,i)=>{K[`steps.${e}.roles.${i}.name`]=[{required:!0,message:"请选择角色",trigger:"change"}],K[`steps.${e}.roles.${i}.passType`]=[{required:!0,message:"请选择通过条件",trigger:"change"}]})})}const T=W([]);H(()=>y.editData,async s=>{var e,p,i,f,v,h;if(console.log("编辑时获取到的值val:",s),s){const u=JSON.parse(JSON.stringify(s));o.name=u.name||"",o.scene=u.scene||"",o.workflow_type=String(u.workflow_type??"0"),o.description=u.description||"",o.is_active=u.is_active??!0;const x=u.trigger_conditions||{};o.condition={min_days:(p=(e=u.duration_rules)==null?void 0:e[0])==null?void 0:p.min_days,max_days:(f=(i=u.duration_rules)==null?void 0:i[0])==null?void 0:f.max_days,roles:x.user_types||[],equipment:Array.isArray(x.equipment_categories)?x.equipment_categories[0]:"",borrow_types:Array.isArray((h=(v=u.duration_rules)==null?void 0:v[0])==null?void 0:h.borrow_types)?u.duration_rules[0].borrow_types.map(m=>String(m)):[],team_type:Array.isArray(x.team_type)?x.team_type.map(m=>String(m)):[]};const U=await ke(u.id);if(console.log("workflowSteps",U),U&&U.data){const m=U.data.sort((d,C)=>(d.step_order||0)-(C.step_order||0));T.value=m.map(d=>d.id),o.steps=m.map(d=>({roles:[{name:d.step_name||"",passType:String(d.step_type??"1"),leaderId:d.app_approvers&&d.app_approvers.length>0?Array.isArray(d.app_approvers)?d.app_approvers[0]:d.app_approvers:d.app_approver_names&&d.app_approver_names.length>0?d.app_approver_names[0]:null}]}))}else T.value=[],o.steps=[M()];ee()}else T.value=[],o.name="",o.scene="",o.workflow_type="0",o.description="",o.is_active=!0,o.condition={min_days:1,max_days:null,roles:[],equipment:[],borrow_types:[],team_type:[]},o.steps=[M()];ee(),await ye()},{immediate:!0});function ne(){if(o.steps.length>=5){I.warning("最多只能添加 5 个审批步骤");return}o.steps.push(M())}function re(s){o.steps.length>1&&o.steps.splice(s,1)}function ie(s,e){o.steps[s].roles.length>1&&o.steps[s].roles.splice(e,1)}function te(){A.value=!1}const de={管理员:1,指导老师:2};async function pe(){var i,f,v,h,u,x,U,m,d,C,O;try{await((i=Z.value)==null?void 0:i.validate())}catch(r){console.warn("表单验证失败:",r);return}const s=!!y.editData,e={name:o.name,workflow_type:o.workflow_type,description:o.description,is_active:typeof o.is_active=="boolean"?o.is_active:!0,trigger_conditions:{min_days:((f=o.condition)==null?void 0:f.min_days)??0,max_days:((v=o.condition)==null?void 0:v.max_days)??null,equipment_categories:(h=o.condition)!=null&&h.equipment?[o.condition.equipment]:[],borrow_types:(x=(u=o.condition)==null?void 0:u.borrow_types)!=null&&x.length?o.condition.borrow_types:[],team_type:(m=(U=o.condition)==null?void 0:U.team_type)!=null&&m.length?o.condition.team_type:[],user_types:(C=(d=o.condition)==null?void 0:d.roles)!=null&&C.length?o.condition.roles:[],require_approval:!0}};let p="";if(s){p=y.editData.id;const r=await me(Number(p),e);if(console.log("流程更新结果:",r),!r||r.code!==2e3){I.error((r==null?void 0:r.msg)||"编辑流程失败");return}}else{const r=await _e(e);if(p=(O=r==null?void 0:r.data)==null?void 0:O.id,!p){I.error("新增未能获取流程 ID");return}}for(let r=0;r<o.steps.length;r++){const V=o.steps[r],S=r+1,B=V.roles.map(a=>a.name).filter(Boolean),Q=V.roles.map(a=>a.passType).filter(Boolean),n=V.roles.map(a=>a.leaderId).filter(a=>!!a).map(a=>typeof a=="string"&&a.includes(",")?a.split(",").map(_=>parseInt(_.trim())).filter(_=>!isNaN(_)):typeof a=="number"?[a]:[parseInt(String(a))].filter(_=>!isNaN(_))).flat(),k=Q[0]||"1",$=B.map(a=>de[a]).filter(Boolean),b={step_name:B.join(",")||`审批步骤${S}`,step_order:S,step_type:k,description:`由${B.join(",")}进行审批`,approvers:[1],app_approvers:n.length>0?n:[],approver_roles:$,approver_depts:[],approval_conditions:{required_fields:[],value_ranges:{}},timeout_hours:24,timeout_action:"auto_reject",is_active:!0};if(console.log(`步骤 ${S} payload`,b),s){const a=T.value[r];if(a){const _=await ce(a,b);if(!_||_.code!==2e3){I.error(`更新步骤${S}失败: ${(_==null?void 0:_.msg)||"未知错误"}`);return}}else{b.workflow=p;const _=await le(b);if(!_||_.code!==2e3){I.error(`创建步骤${S}失败: ${(_==null?void 0:_.msg)||"未知错误"}`);return}}}else{b.workflow=p;const a=await le(b);if(!a||a.code!==2e3){I.error(`创建步骤${S}失败: ${(a==null?void 0:a.msg)||"未知错误"}`);return}}}if(s&&T.value.length>o.steps.length)for(let r=o.steps.length;r<T.value.length;r++){const V=T.value[r];try{await fe(V)}catch(S){console.warn(`删除步骤失败 (ID: ${V}):`,S)}}I.success("保存成功"),Y("success"),A.value=!1}return(s,e)=>{const p=c("el-input"),i=c("el-form-item"),f=c("el-col"),v=c("el-option"),h=c("el-select"),u=c("el-row"),x=c("el-divider"),U=c("el-input-number"),m=c("el-checkbox"),d=c("el-checkbox-group"),C=c("el-card"),O=c("el-icon"),r=c("el-button"),V=c("el-radio"),S=c("el-radio-group"),B=c("el-form"),Q=c("el-dialog");return g(),D(Q,{title:s.editData?y.mode==="view"?"查看":"编辑":"新建审批流程",modelValue:A.value,"onUpdate:modelValue":e[10]||(e[10]=n=>A.value=n),width:"900px",onClose:te},{footer:l(()=>[t(r,{onClick:te},{default:l(()=>e[27]||(e[27]=[w("关闭")])),_:1}),y.mode!=="view"?(g(),D(r,{key:0,type:"primary",onClick:pe},{default:l(()=>e[28]||(e[28]=[w("提交")])),_:1})):G("",!0)]),default:l(()=>[t(B,{model:o,"label-width":"110px",rules:K,ref_key:"formRef",ref:Z,disabled:y.mode==="view"},{default:l(()=>[t(u,{gutter:20},{default:l(()=>[t(f,{span:12},{default:l(()=>[t(i,{label:"流程名称",prop:"name"},{default:l(()=>[t(p,{modelValue:o.name,"onUpdate:modelValue":e[0]||(e[0]=n=>o.name=n),placeholder:"请输入"},null,8,["modelValue"])]),_:1})]),_:1}),t(f,{span:12},{default:l(()=>[t(i,{label:"流程类型",prop:"workflow_type"},{default:l(()=>[t(h,{modelValue:o.workflow_type,"onUpdate:modelValue":e[1]||(e[1]=n=>o.workflow_type=n),placeholder:"请选择流程类型",disabled:y.mode==="view"},{default:l(()=>[t(v,{label:"设备借用申请",value:"0"})]),_:1},8,["modelValue","disabled"])]),_:1})]),_:1})]),_:1}),t(u,{gutter:20},{default:l(()=>[t(f,{span:12},{default:l(()=>[t(i,{label:"流程描述",prop:"description"},{default:l(()=>[t(p,{modelValue:o.description,"onUpdate:modelValue":e[2]||(e[2]=n=>o.description=n),type:"textarea",rows:2,placeholder:"请输入流程描述",disabled:y.mode==="view"},null,8,["modelValue","disabled"])]),_:1})]),_:1}),t(f,{span:12},{default:l(()=>[t(i,{label:"是否启用",prop:"is_active"},{default:l(()=>[t(h,{modelValue:o.is_active,"onUpdate:modelValue":e[3]||(e[3]=n=>o.is_active=n),placeholder:"请选择启用还是禁用",disabled:y.mode==="view"},{default:l(()=>[t(v,{label:"启用",value:!0}),t(v,{label:"禁用",value:!1})]),_:1},8,["modelValue","disabled"])]),_:1})]),_:1})]),_:1}),t(x,null,{default:l(()=>e[11]||(e[11]=[w("条件选择")])),_:1}),t(u,{gutter:20},{default:l(()=>[t(f,{span:8},{default:l(()=>[t(i,{label:"最少借用天数",prop:"condition.min_days"},{default:l(()=>[t(U,{modelValue:o.condition.min_days,"onUpdate:modelValue":e[4]||(e[4]=n=>o.condition.min_days=n),min:0,"controls-position":"right",style:{width:"100px"}},null,8,["modelValue"]),e[12]||(e[12]=q("span",{style:{"margin-left":"8px"}},"天",-1))]),_:1})]),_:1}),t(f,{span:8},{default:l(()=>[t(i,{label:"最多借用天数",prop:"condition.max_days"},{default:l(()=>[t(U,{modelValue:o.condition.max_days,"onUpdate:modelValue":e[5]||(e[5]=n=>o.condition.max_days=n),min:1,"controls-position":"right",style:{width:"100px"}},null,8,["modelValue"]),e[13]||(e[13]=q("span",{style:{"margin-left":"8px"}},"天",-1))]),_:1})]),_:1}),t(f,{span:8},{default:l(()=>[t(i,{label:"用户角色",prop:"condition.roles"},{default:l(()=>[t(d,{modelValue:o.condition.roles,"onUpdate:modelValue":e[6]||(e[6]=n=>o.condition.roles=n)},{default:l(()=>[t(m,{label:"教师",value:"teacher"}),t(m,{label:"学生",value:"student"}),t(m,{label:"非本院师生",value:"external"})]),_:1},8,["modelValue"])]),_:1})]),_:1}),t(f,{span:8},{default:l(()=>[t(i,{label:"设备标签",prop:"condition.equipment"},{default:l(()=>[t(h,{modelValue:o.condition.equipment,"onUpdate:modelValue":e[7]||(e[7]=n=>o.condition.equipment=n),placeholder:"请选择"},{default:l(()=>[(g(!0),N(F,null,L(z,(n,k)=>(g(),D(v,{key:k,label:n.name,value:n.id},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),_:1})]),_:1}),t(f,{span:8},{default:l(()=>[t(i,{label:"借用类型",prop:"condition.borrow_types"},{default:l(()=>[t(d,{modelValue:o.condition.borrow_types,"onUpdate:modelValue":e[8]||(e[8]=n=>o.condition.borrow_types=n),disabled:y.mode==="view"},{default:l(()=>[t(m,{label:"0"},{default:l(()=>e[14]||(e[14]=[w("常规借用")])),_:1}),t(m,{label:"1"},{default:l(()=>e[15]||(e[15]=[w("课堂借用")])),_:1}),t(m,{label:"2"},{default:l(()=>e[16]||(e[16]=[w("特殊借用")])),_:1})]),_:1},8,["modelValue","disabled"])]),_:1})]),_:1}),t(f,{span:8},{default:l(()=>[t(i,{label:"借用方式",prop:"condition.team_type"},{default:l(()=>[t(d,{modelValue:o.condition.team_type,"onUpdate:modelValue":e[9]||(e[9]=n=>o.condition.team_type=n),disabled:y.mode==="view"},{default:l(()=>[t(m,{label:"0"},{default:l(()=>e[17]||(e[17]=[w("个人借用")])),_:1}),t(m,{label:"1"},{default:l(()=>e[18]||(e[18]=[w("团队借用")])),_:1})]),_:1},8,["modelValue","disabled"])]),_:1})]),_:1})]),_:1}),t(x,null,{default:l(()=>e[19]||(e[19]=[w("流程配置")])),_:1}),q("div",he,[q("div",xe,[t(C,{shadow:"never",class:"step-card borrower"},{default:l(()=>e[20]||(e[20]=[q("div",{class:"step-title"},"借用人",-1)])),_:1}),e[21]||(e[21]=q("div",{class:"step-line"},null,-1))]),(g(!0),N(F,null,L(o.steps,(n,k)=>(g(),N("div",{class:"workflow-step",key:k},[t(C,{shadow:"never",class:"step-card"},{default:l(()=>[q("div",$e,[w(" 审批步骤"+ve(k+1)+" ",1),o.steps.length>1&&k!==0?(g(),D(r,{key:0,type:"danger",size:"small",onClick:$=>re(k),style:{"margin-left":"10px"}},{default:l(()=>[t(O,null,{default:l(()=>[t(X(oe))]),_:1}),e[22]||(e[22]=w(" 删除步骤 "))]),_:2},1032,["onClick"])):G("",!0)]),q("div",Ue,[(g(!0),N(F,null,L(n.roles,($,b)=>(g(),N("div",{key:b,class:"role-row",style:{position:"relative",padding:"0 20px"}},[t(i,{label:"角色","label-position":"left","label-width":"100px",prop:`steps.${k}.roles.${b}.name`,rules:[{required:!0,message:"请选择角色",trigger:"change"}]},{default:l(()=>[t(h,{modelValue:$.name,"onUpdate:modelValue":a=>$.name=a,placeholder:"请选择角色",style:{width:"300px"}},{default:l(()=>[t(v,{label:"老师",value:"老师"}),(g(!0),N(F,null,L(P,a=>(g(),D(v,{key:a.id,label:a.name,value:a.name},null,8,["label","value"]))),128)),t(v,{label:"学院领导",value:"学院领导"})]),_:2},1032,["modelValue","onUpdate:modelValue"])]),_:2},1032,["prop"]),$.name==="学院领导审批"||$.name==="学院领导"?(g(),D(i,{key:0,label:"领导姓名","label-position":"left","label-width":"100px",prop:`steps.${k}.roles.${b}.leaderId`,rules:[{required:!0,message:"请选择领导姓名",trigger:"change"}]},{default:l(()=>[t(h,{modelValue:$.leaderId,"onUpdate:modelValue":a=>$.leaderId=a,placeholder:"请选择领导姓名",style:{width:"300px"}},{default:l(()=>[(g(!0),N(F,null,L(J,a=>(g(),D(v,{key:a.id,label:a.name,value:a.id},null,8,["label","value"]))),128))]),_:2},1032,["modelValue","onUpdate:modelValue"])]),_:2},1032,["prop"])):G("",!0),t(i,{label:"通过条件","label-position":"left",prop:`steps.${k}.roles.${b}.passType`,rules:[{required:!0,message:"请选择通过条件",trigger:"change"}]},{default:l(()=>[t(S,{modelValue:$.passType,"onUpdate:modelValue":a=>$.passType=a},{default:l(()=>[t(V,{label:"1名通过即可",value:"1"}),t(V,{label:"所有人员通过",value:"2"}),t(V,{label:"部门负责人审批",value:"3"}),t(V,{label:"角色审批",value:"4"}),t(V,{label:"自动审批",value:"5"})]),_:2},1032,["modelValue","onUpdate:modelValue"])]),_:2},1032,["prop"]),n.roles.length>1&&b!==0?(g(),D(r,{key:1,type:"danger",size:"small",onClick:a=>ie(k,b),style:{position:"absolute",right:"0",top:"0"}},{default:l(()=>[t(O,null,{default:l(()=>[t(X(oe))]),_:1}),e[23]||(e[23]=w(" 删除角色 "))]),_:2},1032,["onClick"])):G("",!0)]))),128))])]),_:2},1024),e[24]||(e[24]=q("div",{class:"step-line"},null,-1))]))),128)),q("div",Se,[y.mode!=="view"?(g(),D(r,{key:0,type:"primary",onClick:ne,disabled:o.steps.length>=5},{default:l(()=>[t(O,null,{default:l(()=>[t(X(ue))]),_:1}),e[25]||(e[25]=w(" 添加审批步骤 "))]),_:1},8,["disabled"])):G("",!0)]),q("div",De,[t(C,{shadow:"never",class:"step-card done"},{default:l(()=>e[26]||(e[26]=[q("div",{class:"step-title"},"审批完成",-1)])),_:1})])])]),_:1},8,["model","rules","disabled"])]),_:1},8,["title","modelValue"])}}}),Oe=be(Ce,[["__scopeId","data-v-0cf0b9bb"]]);export{Oe as default};