2 lines
31 KiB
JavaScript
2 lines
31 KiB
JavaScript
import{l as Ns,p as Is,h as Ds,a as y,f as t,e as l,w as o,j as d,x as C,v as r,s as F,z as Us,D as qe,r as g,i as ie,o as m,g as i,t as p,F as A,b as X,n as $,c as Y,d as E,k as _,_ as Os}from"./index-B9l-oRop.js";import{t as D}from"./leaveTime-ZdUoa0wT.js";import{M as Ke}from"./index-hoJvqpve.js";const Hs={class:"page-wrapper"},$s={class:"main-container setting-container"},Ls={class:"panel-tip"},Rs={class:"form-section"},zs={class:"section-head"},Fs={class:"section-extra"},As={class:"period-row"},Ps={class:"period-row"},Bs={class:"form-section"},Ws={class:"form-footer"},Gs={class:"type-toolbar fix"},js={class:"fr type-meta"},qs={class:"type-grid mt-12"},Ks=["onDragstart","onDragover"],Js={class:"type-head"},Qs=["title"],Xs={class:"type-name"},Ys=["title","onDblclick"],Zs={class:"type-actions"},et=["onClick"],st=["onClick"],tt=["onClick"],lt={key:0,class:"empty-tip"},nt={class:"managed-box"},at={class:"managed-head"},ot={class:"managed-head-l"},it={class:"managed-title"},rt={class:"managed-types"},ut={key:0,class:"managed-empty"},dt={class:"stat-row"},ct={class:"stat-card"},pt={class:"sc-icon ic-blue"},mt={class:"sc-body"},vt={class:"sc-num"},gt={class:"stat-card"},ft={class:"sc-icon ic-green"},bt={class:"sc-body"},yt={class:"sc-num"},wt={class:"stat-card"},_t={class:"sc-icon ic-purple"},kt={class:"sc-body"},Tt={class:"sc-num"},Mt={class:"sc-icon ic-red"},ht={class:"sc-body"},Vt={class:"sc-num"},xt={class:"usertime-box"},Ct={class:"tree-panel"},Et={class:"panel-side-title"},St={class:"table-panel"},Nt={class:"table-toolbar"},It={class:"tt-left"},Dt={class:"tt-count"},Ut={class:"tt-right"},Ot={class:"foot-info"},Ht={class:"fi-item"},$t={class:"hl-blue"},Lt={class:"fi-item"},Rt={class:"hl-orange"},zt={class:"foot-btns"},Ft={class:"panel-tip"},At={class:"sec-toolbar"},Pt={class:"sec-stat"},Bt={class:"stat-chip"},Wt={key:0,class:"stat-chip am"},Gt={key:1,class:"stat-chip pm"},jt={key:2,class:"stat-chip night"},qt={key:3,class:"stat-chip total"},Kt={class:"panel-tip"},Jt={key:0,class:"opt-skeleton"},Qt={class:"opt-group"},Xt={class:"opt-row"},Yt={class:"opt-ctrl"},Zt={class:"opt-group"},el={class:"opt-row"},sl={class:"opt-ctrl"},tl={class:"opt-row"},ll={class:"opt-ctrl"},nl={class:"opt-group"},al={class:"opt-group-head"},ol={class:"opt-row"},il={class:"opt-ctrl"},rl={class:"opt-row"},ul={class:"opt-ctrl"},dl={class:"form-footer opt-footer"},cl={class:"opt-foot-tip"},pl={class:"opt-foot-btns"},ml={class:"import-upload"},vl={key:0,class:"import-errors"},gl={class:"period-row sec-period-row"},fl={key:0,class:"sec-dur-hint"},Me=-1,bl=Ns({__name:"LeaveSetting",setup(yl){const re=d("time"),b=d({forenoon1:"08:00",forenoon2:"12:00",afternoon1:"13:00",afternoon2:"17:00",intervalMinutes:10,minMinutes:0}),ue=d(!1),Je=_(()=>{const s=n=>{const[u,c]=String(n||"0:0").split(":").map(Number);return(u||0)*60+(c||0)},e=s(b.value.forenoon2)-s(b.value.forenoon1)+s(b.value.afternoon2)-s(b.value.afternoon1);return!isFinite(e)||e<=0?"0":String(Number((e/60).toFixed(2)))});async function Qe(){try{const s=await C.getTimeSet().send();s&&(b.value={...b.value,...s})}catch(s){r.Message.error(s.message||"加载作息时间失败")}}async function Xe(){ue.value=!0;try{await C.setTimeSet(b.value).send(),r.Message.success("作息时间已保存(影响新提交的时长计算)")}catch(s){r.Message.error(s.message||"保存失败")}finally{ue.value=!1}}const U=d([]),Z=d(""),de=d(null),ee=d("");async function O(){try{U.value=await F.manageList().send()||[]}catch(s){r.Message.error(s.message||"加载请假类型失败")}}async function he(){const s=Z.value.trim();if(!s){r.Message.warning("请输入类型名称");return}try{await F.add(s).send(),r.Message.success("新增成功"),Z.value="",O()}catch(e){r.Message.error(e.message||"新增失败")}}function Ve(s){de.value=s.SerID,ee.value=s.Name}async function xe(s){const e=ee.value.trim();if(!e){r.Message.warning("类型名称不得为空");return}try{await F.update(s.SerID,e,s.Enable).send(),r.Message.success("修改成功"),de.value=null,O()}catch(n){r.Message.error(n.message||"修改失败")}}async function Ye(s){try{await F.update(s.SerID,s.Name,s.Enable===1?0:1).send(),r.Message.success(s.Enable===1?"已停用":"已启用"),O()}catch(e){r.Message.error(e.message||"操作失败")}}const S=d(null);function Ze(s){S.value=s}function es(s,e){if(e.preventDefault(),S.value===null||S.value===s)return;const n=U.value,[u]=n.splice(S.value,1);n.splice(s,0,u),S.value=s}async function ss(){if(S.value!==null){S.value=null;try{await F.sort(U.value.map(s=>s.SerID).join(",")),O()}catch(s){r.Message.error(s.message||"排序保存失败"),O()}}}function ts(s){Ke({title:"删除类型",msg:`确定删除请假类型「${s.Name}」吗?`,info:"已被请假记录引用的类型无法删除",async onOk(){try{await F.remove(s.SerID).send(),r.Message.success("删除成功"),O()}catch(e){r.Message.error(e.message||"删除失败")}}})}const V=d([]),ce=d(""),pe=d(!1);function L(s){return s.editTime!==null&&s.editTime!==void 0&&s.editTime!==""}function ls(s){const e=Number(s)||0;return e<=0?"danger":e<8?"warn":"ok"}function ns(s){return L(s)?D((s.usableHours||0)+(Number(s.editTime)||0)):""}const me=d([]),Ce=d([]),ve=d(new Map),P=d(null);function as(s){if(!s.length)return[];const e=s.some(v=>v.pid!==void 0&&v.pid!==null);if(s.some(v=>v.children&&v.children.length)||!e)return s;const u=new Map;s.forEach(v=>{const M=v.pid===void 0||v.pid===null?0:v.pid;u.has(M)||u.set(M,[]),u.get(M).push(v)});const c=[],f=(v,M)=>{(u.get(v)||[]).forEach(q=>{const w=[];f(q.id,w),w.length&&(q.children=w),M.push(q)})};return f(0,c),c.length?c:s}function Ee(s){const e=[];for(const n of s){if(!(n.type===1||!!n.isParent))continue;const c=new Set,f=v=>v.forEach(M=>{(M.type===2||!M.isParent&&!(M.children&&M.children.length))&&c.add(M.id),M.children&&f(M.children)});n.children&&f(n.children),ve.value.set(n.id,c),e.push({id:n.id,title:n.name,expand:!0,render:v=>v("span",{class:"g-node"},[v("span",{class:"g-name"},n.name),v("span",{class:"g-count"},String(c.size))]),children:Ee(n.children||[])})}return e}async function os(){try{Ce.value=as(await Us.getSchoolAll().send()||[]),ve.value=new Map;const s=Ee(Ce.value);me.value=[{id:Me,title:"全部教师",expand:!0,selected:!0,render:e=>e("span",{class:"g-node is-root"},[e("span",{class:"g-name"},"全部教师"),e("span",{class:"g-count"},String(V.value.length))]),children:s}],P.value=Me}catch(s){r.Message.error(s.message||"加载教师组树失败")}}function is(s){s.length&&(P.value=s[0].id)}const se=_(()=>{if(!P.value||P.value===Me)return V.value;const s=ve.value.get(P.value);return s?V.value.filter(e=>s.has(e.userId)):V.value}),Se=_(()=>se.value.reduce((s,e)=>s+(e.usableHours||0),0)),te=_(()=>se.value.length),Ne=_(()=>D(Se.value)),rs=_(()=>te.value?D(Se.value/te.value):"0"),Ie=_(()=>se.value.filter(s=>(s.usableHours||0)<=0).length),De=_(()=>V.value.filter(L)),R=_(()=>De.value.length),ge=_(()=>D(De.value.reduce((s,e)=>s+(Number(e.editTime)||0),0)));async function z(){pe.value=!0;try{const s=await qe.userTimeList({keyword:ce.value||void 0}).send()||[];V.value=s.map(n=>({...n,editTime:null,editRemark:""}));const e=me.value[0];e&&e.render&&(e.render=n=>n("span",{class:"g-node is-root"},[n("span",{class:"g-name"},"全部教师"),n("span",{class:"g-count"},String(V.value.length))]))}catch(s){r.Message.error(s.message||"加载教师时长失败")}finally{pe.value=!1}}const fe=d(!1);async function us(){const s=V.value.filter(L).map(e=>({userId:e.userId,editHours:e.editTime,remark:(e.editRemark||"").trim()}));if(!s.length){r.Message.warning("请先填写需要新加的时长");return}fe.value=!0;try{await qe.adjust(s).send(),r.Message.success(`设置成功!共调整 ${s.length} 位教师`),await z()}catch(e){r.Message.error(e.message||"提交失败")}finally{fe.value=!1}}function be(s,e){const n=Number(s.editTime)||0,u=Math.round((n+e)*100)/100;if(Math.abs(u)<.001){s.editTime=null;return}if((s.usableHours||0)+u<0){r.Message.warning(`「${s.userName||"该教师"}」剩余仅 ${D(s.usableHours||0)} 小时,不能再扣减`);return}s.editTime=u}function Ue(){V.value.forEach(s=>{s.editTime=null,s.editRemark=""})}function ds(s){s.editTime=null,s.editRemark=""}function cs(s){return s&&L(s)?"row-edited":""}const ps=[{title:"序号",type:"index",width:60,align:"center"},{title:"教师",key:"userName",minWidth:120,align:"left",render:(s,e)=>{const n=e.row.userName||"未命名",u=n.charAt(0);return s("div",{class:"u-cell"},[s("span",{class:"u-avatar"},u),s("span",{class:"u-name"},[s("span",{class:"u-name-main"},n),e.row.remark?s("span",{class:"u-remark"},e.row.remark):null])])}},{title:"剩余时长",key:"usableHours",width:150,align:"left",render:(s,e)=>{const n=e.row.usableHours||0,u=ls(n);return s("div",{class:"h-cell lv-"+u},[s("span",{class:"h-num"},[D(n),s("i",{},"小时")]),s("span",{class:"h-day"},`≈ ${D(n/8)} 天`)])}},{title:"本次新加(小时)",width:230,align:"center",render:(s,e)=>s("div",{class:"edit-cell"},[s("InputNumber",{props:{value:e.row.editTime,max:9999,precision:2,activeChange:!1,placeholder:"可填负数"},class:"edit-hours-input",on:{"on-change":n=>{e.row.editTime=n??null}}}),s("div",{class:"quick-btns"},[s("button",{class:"q-btn",title:"+1 小时",onClick:()=>be(e.row,1)},"+1"),s("button",{class:"q-btn",title:"+4 小时(半天)",onClick:()=>be(e.row,4)},"+4"),s("button",{class:"q-btn danger",title:"-1 小时",onClick:()=>be(e.row,-1)},"-1")])])},{title:"调整后",width:130,align:"center",render:(s,e)=>{if(!L(e.row))return s("span",{class:"pf-empty"},"—");const n=Number(e.row.editTime)||0;return s("div",{class:"pf-cell"},[s("span",{class:"pf-num"},ns(e.row)),s("span",{class:n>=0?"pf-delta up":"pf-delta down"},(n>=0?"+":"")+D(n))])}},{title:"情况备注",minWidth:180,align:"center",render:(s,e)=>s("Input",{props:{type:"textarea",rows:1,maxlength:50,value:e.row.editRemark,placeholder:"如:补课补时"},on:{"on-blur":n=>{e.row.editRemark=n.target.value}}})},{title:"操作",width:70,align:"center",render:(s,e)=>L(e.row)?s("a",{class:"act-link reset",onClick:()=>ds(e.row)},"撤销"):s("span",{class:"pf-empty"},"—")}],le=d(!1),ms=(ie.isMock?"":ie.serviceHost)+"/api/leave/time/Import",vs=(ie.isMock?"":ie.serviceHost)+"/api/leave/time/ImportTemplate",ne=d([]);function gs(){ne.value=[],le.value=!0}function fs(s){if(s.code!==0){r.Message.error(s.msg||"导入失败");return}const e=s.data||{};e.success?(r.Message.success("导入成功!"),le.value=!1,z()):(ne.value=e.errors||[],r.Message.error(e.message||"导入失败!"))}function bs(){r.Message.error("不支持的上传类型!仅支持 xls / xlsx 格式")}const ye=d([]),B=d(!1),k=d({name:"",beginTime:"08:00",endTime:"08:45"});async function we(){try{ye.value=await C.sectionList().send()||[]}catch(s){r.Message.error(s.message||"加载节次失败")}}function Oe(s){k.value=s?{...s}:{name:"",beginTime:"08:00",endTime:"08:45"},B.value=!0}async function ys(){if(!k.value.name.trim()){r.Message.warning("请输入节次名称");return}try{await C.sectionSave(k.value).send(),r.Message.success("保存成功"),B.value=!1,we()}catch(s){r.Message.error(s.message||"保存失败")}}function ws(s){Ke({title:"删除节次",msg:`确定删除「${s.name}」吗?`,async onOk(){try{await C.sectionDelete(s.id).send(),r.Message.success("删除成功"),we()}catch(e){r.Message.error(e.message||"删除失败")}}})}const T=d({reasonMust:1,showExplain:1,timeLimitEnabled:0,timeManagedTypes:"",enableCourse:0,allowExchange:0,calcWay:1}),W=d(!1),He=d(!1),N=d(!1),_e=d(!1),I=d([]);function $e(s){const e=(u,c)=>{const f=Number(u);return Number.isFinite(f)?f===0?0:1:c},n=typeof(s==null?void 0:s.timeManagedTypes)=="string"?s.timeManagedTypes:"";return{reasonMust:e(s==null?void 0:s.reasonMust,1),showExplain:e(s==null?void 0:s.showExplain,1),enableCourse:e(s==null?void 0:s.enableCourse,0),allowExchange:e(s==null?void 0:s.allowExchange,0),timeLimitEnabled:e(s==null?void 0:s.timeLimitEnabled,0),calcWay:Number(s==null?void 0:s.calcWay)===0?0:1,timeManagedTypes:n}}const Le=_({get:()=>T.value.calcWay===0?0:1,set:s=>T.value.calcWay=Number(s)===0?0:1}),Re=_({get:()=>T.value.reasonMust===1,set:s=>T.value.reasonMust=s?1:0}),ze=_({get:()=>T.value.showExplain===1,set:s=>T.value.showExplain=s?1:0}),Fe=_({get:()=>T.value.enableCourse===1,set:s=>T.value.enableCourse=s?1:0}),Ae=_({get:()=>T.value.allowExchange===1,set:s=>T.value.allowExchange=s?1:0});function Pe(s){const e=$e(s);T.value=e,I.value=e.timeManagedTypes?e.timeManagedTypes.split(",").filter(Boolean):[],N.value=!0}async function G(s=!1){_e.value=!0,s||(N.value=!1);try{const e=await C.getOption().send();Pe(e)}catch(e){N.value=!0,r.Message.error(e.message||"加载其他设置失败")}finally{_e.value=!1}}async function _s(){if(!W.value){if(!N.value){r.Message.warning("设置尚未加载完成,请稍后再试");return}W.value=!0;try{const s={...$e({...T.value,timeManagedTypes:I.value.join(",")})};await C.setOption(s).send();const e=await C.getOption().send();Pe(e),r.Message.success("设置已保存")}catch(s){r.Message.error(s.message||"保存失败"),G(!0)}finally{W.value=!1}}}async function ks(){const s=I.value.join(",");T.value.timeManagedTypes=s,T.value.timeLimitEnabled=I.value.length?1:0;try{await C.setOption({timeManagedTypes:s,timeLimitEnabled:T.value.timeLimitEnabled}).send(),r.Message.success("已保存")}catch(e){r.Message.error(e.message||"保存失败"),G(!0)}}async function Ts(){He.value=!0;try{await ks()}finally{He.value=!1}}const Be=_(()=>U.value.filter(s=>s.Enable===1));function j(s){const[e,n]=String(s||"0:0").split(":").map(Number);return(e||0)*60+(n||0)}function ke(s){const e=j(s.endTime)-j(s.beginTime);return!s.beginTime||!s.endTime||e<=0?"":e>=60?`${Number((e/60).toFixed(1))} 小时`:`${e} 分钟`}function H(s){const e=j(s.beginTime);return s.beginTime?e<12*60?"上午":e<18*60?"下午":"晚上":"—"}const Ms=[{title:"序号",type:"index",width:70,align:"center"},{title:"节次名称",key:"name",minWidth:150,align:"left",render:(s,e)=>{const n=e.row;return s("span",{class:"sec-name",attrs:{title:n.name}},n.name)}},{title:"时段",width:100,align:"center",render:(s,e)=>{const n=e.row,u=H(n);return s("span",{class:`sec-tag ${u==="上午"?"am":u==="下午"?"pm":u==="晚上"?"night":"none"}`},u)}},{title:"上课时间",width:210,align:"center",render:(s,e)=>{const n=e.row;return s("span",{class:"sec-time"},[s("b",{},n.beginTime||"--:--"),s("i",{},"—"),s("b",{},n.endTime||"--:--")])}},{title:"时长",width:110,align:"center",render:(s,e)=>{const n=ke(e.row);return n?s("span",{class:"sec-dur"},n):s("span",{class:"sec-dur muted"},"—")}},{title:"操作",width:150,align:"center",render:(s,e)=>[s("a",{class:"sec-op",onClick:()=>Oe(e.row)},"编辑"),s("span",{class:"sec-split"},"|"),s("a",{class:"sec-op danger",onClick:()=>ws(e.row)},"删除")]}],x=_(()=>{const s=ye.value||[],e=s.filter(f=>H(f)==="上午").length,n=s.filter(f=>H(f)==="下午").length,u=s.filter(f=>H(f)==="晚上").length,c=s.reduce((f,v)=>f+Math.max(j(v.endTime)-j(v.beginTime),0),0);return{count:s.length,am:e,pm:n,night:u,totalText:c>=60?`${Number((c/60).toFixed(1))} 小时`:`${c} 分钟`}});return Is(()=>{Qe(),O(),z(),we(),G(),os()}),Ds(re,s=>{s==="option"&&!N.value&&G(!0)}),(s,e)=>{const n=g("Icon"),u=g("TimePicker"),c=g("FormItem"),f=g("Form"),v=g("Option"),M=g("Select"),q=g("InputNumber"),w=g("Button"),K=g("Card"),J=g("TabPane"),ae=g("Input"),Te=g("Tag"),hs=g("Checkbox"),Vs=g("CheckboxGroup"),xs=g("Tree"),We=g("Table"),Ge=g("Radio"),Cs=g("RadioGroup"),oe=g("i-switch"),Es=g("Tabs"),Ss=g("Upload"),je=g("Modal");return m(),y("div",Hs,[t("div",$s,[l(Es,{modelValue:re.value,"onUpdate:modelValue":e[17]||(e[17]=a=>re.value=a),class:"sett-tabs"},{default:o(()=>[l(J,{label:"作息时间",name:"time"},{default:o(()=>[l(K,{bordered:!1,"dis-hover":"",class:"panel-card"},{default:o(()=>[t("div",Ls,[l(n,{type:"ios-information-circle-outline"}),e[24]||(e[24]=t("span",null,"学校作息用于计算请假时长:同日扣除午休,跨天按整天 8 小时折算。修改后仅影响新提交的申请。",-1))]),t("div",Rs,[t("div",zs,[e[27]||(e[27]=t("span",{class:"section-title"},"上下班时段",-1)),t("span",Fs,[e[25]||(e[25]=i("每日工作时长 ",-1)),t("b",null,p(Je.value),1),e[26]||(e[26]=i(" 小时",-1))])]),l(f,{"label-width":96,class:"section-form"},{default:o(()=>[l(c,{label:"上午"},{default:o(()=>[t("div",As,[l(u,{modelValue:b.value.forenoon1,"onUpdate:modelValue":e[0]||(e[0]=a=>b.value.forenoon1=a),format:"HH:mm",placeholder:"08:00",style:{width:"150px"}},null,8,["modelValue"]),e[28]||(e[28]=t("span",{class:"period-sep"},"至",-1)),l(u,{modelValue:b.value.forenoon2,"onUpdate:modelValue":e[1]||(e[1]=a=>b.value.forenoon2=a),format:"HH:mm",placeholder:"12:00",style:{width:"150px"}},null,8,["modelValue"])])]),_:1}),l(c,{label:"下午"},{default:o(()=>[t("div",Ps,[l(u,{modelValue:b.value.afternoon1,"onUpdate:modelValue":e[2]||(e[2]=a=>b.value.afternoon1=a),format:"HH:mm",placeholder:"13:00",style:{width:"150px"}},null,8,["modelValue"]),e[29]||(e[29]=t("span",{class:"period-sep"},"至",-1)),l(u,{modelValue:b.value.afternoon2,"onUpdate:modelValue":e[3]||(e[3]=a=>b.value.afternoon2=a),format:"HH:mm",placeholder:"17:00",style:{width:"150px"}},null,8,["modelValue"])])]),_:1})]),_:1})]),t("div",Bs,[e[33]||(e[33]=t("div",{class:"section-head"},[t("span",{class:"section-title"},"请假规则")],-1)),l(f,{"label-width":96,class:"section-form"},{default:o(()=>[l(c,{label:"最短请假间隔"},{default:o(()=>[l(M,{modelValue:b.value.intervalMinutes,"onUpdate:modelValue":e[4]||(e[4]=a=>b.value.intervalMinutes=a),style:{width:"150px"}},{default:o(()=>[(m(),y(A,null,X([5,10,15,20,30,60],a=>l(v,{key:a,value:a},{default:o(()=>[i(p(a)+" 分钟",1)]),_:2},1032,["value"])),64))]),_:1},8,["modelValue"]),e[30]||(e[30]=t("span",{class:"form-tip"},"起止时间按该间隔取整",-1))]),_:1}),l(c,{label:"最少请假时间"},{default:o(()=>[l(q,{modelValue:b.value.minMinutes,"onUpdate:modelValue":e[5]||(e[5]=a=>b.value.minMinutes=a),min:0,step:10,precision:0,style:{width:"150px"}},null,8,["modelValue"]),e[31]||(e[31]=t("span",{class:"unit-text"},"分钟",-1)),e[32]||(e[32]=t("div",{class:"form-tip"},"0 = 不限制;低于该时长的申请将被拒绝",-1))]),_:1})]),_:1})]),t("div",Ws,[l(w,{type:"primary",loading:ue.value,icon:"md-checkmark",onClick:Xe},{default:o(()=>[...e[34]||(e[34]=[i("保存设置",-1)])]),_:1},8,["loading"])])]),_:1})]),_:1}),l(J,{label:"请假类型",name:"type"},{default:o(()=>[l(K,{bordered:!1,"dis-hover":"",class:"panel-card"},{default:o(()=>[t("div",Gs,[l(ae,{modelValue:Z.value,"onUpdate:modelValue":e[6]||(e[6]=a=>Z.value=a),placeholder:"输入名称,回车快速新增",style:{width:"240px"},class:"fl",clearable:"",onOnEnter:he},null,8,["modelValue"]),l(w,{type:"primary",class:"fl ml-8",icon:"md-add",onClick:he},{default:o(()=>[...e[35]||(e[35]=[i("新增类型",-1)])]),_:1}),t("span",js,[e[36]||(e[36]=i(" 共 ",-1)),t("b",null,p(U.value.length),1),e[37]||(e[37]=i(" 个类型 · 拖动卡片排序 / 双击名称编辑 ",-1))])]),t("div",qs,[(m(!0),y(A,null,X(U.value,(a,Q)=>(m(),y("div",{key:a.SerID,class:$(["type-card",{disabled:a.Enable===0,dragging:S.value===Q}]),draggable:"true",onDragstart:h=>Ze(Q),onDragover:h=>es(Q,h),onDragend:ss},[t("div",Js,[t("span",{class:$(["status-dot",a.Enable===1?"on":"off"]),title:a.Enable===1?"启用中":"已停用"},null,10,Qs),t("div",Xs,[de.value===a.SerID?(m(),Y(ae,{key:0,modelValue:ee.value,"onUpdate:modelValue":e[7]||(e[7]=h=>ee.value=h),size:"small",onOnEnter:h=>xe(a),onOnBlur:h=>xe(a)},null,8,["modelValue","onOnEnter","onOnBlur"])):(m(),y("span",{key:1,title:a.Name,onDblclick:h=>Ve(a)},p(a.Name),41,Ys))]),l(n,{class:"drag-handle",type:"ios-reorder"})]),t("div",Zs,[t("a",{class:"act-link act-toggle",onClick:h=>Ye(a)},p(a.Enable===1?"停用":"启用"),9,et),t("a",{class:"act-link",onClick:h=>Ve(a)},"编辑",8,st),t("a",{class:"act-link act-del",onClick:h=>ts(a)},"删除",8,tt)])],42,Ks))),128)),U.value.length?E("",!0):(m(),y("div",lt,[l(n,{type:"ios-apps-outline"}),e[38]||(e[38]=t("p",null,"暂无请假类型,请在上方输入名称新增",-1))]))])]),_:1})]),_:1}),l(J,{label:"教师时长",name:"usertime"},{default:o(()=>[l(K,{bordered:!1,"dis-hover":"",class:"panel-card"},{default:o(()=>[t("div",nt,[t("div",at,[t("div",ot,[l(n,{type:"ios-shield-checkmark-outline",class:"mh-icon"}),t("div",null,[t("div",it,[e[40]||(e[40]=i(" 需扣减时长的请假类型 ",-1)),I.value.length?(m(),Y(Te,{key:0,color:"success",class:"mini-tag"},{default:o(()=>[i(" 已启用 "+p(I.value.length)+" 项 ",1)]),_:1})):(m(),Y(Te,{key:1,color:"warning",class:"mini-tag"},{default:o(()=>[...e[39]||(e[39]=[i("未启用",-1)])]),_:1}))]),e[41]||(e[41]=t("div",{class:"managed-tip"}," 勾选后,该类型请假审批通过将自动扣减教师时长;取消勾选即停止扣减。变更即时保存。 ",-1))])]),l(w,{type:"primary",ghost:"",icon:"ios-cloud-upload-outline",onClick:gs},{default:o(()=>[...e[42]||(e[42]=[i("批量导入",-1)])]),_:1})]),t("div",rt,[l(Vs,{modelValue:I.value,"onUpdate:modelValue":e[8]||(e[8]=a=>I.value=a),onOnChange:Ts},{default:o(()=>[(m(!0),y(A,null,X(Be.value,a=>(m(),Y(hs,{key:a.CodeID,label:a.CodeID},{default:o(()=>[i(p(a.Name),1)]),_:2},1032,["label"]))),128))]),_:1},8,["modelValue"]),Be.value.length?E("",!0):(m(),y("div",ut,"暂无可选的请假类型,请先到「请假类型」新增并启用"))])]),t("div",dt,[t("div",ct,[t("div",pt,[l(n,{type:"ios-people-outline"})]),t("div",mt,[t("div",vt,[i(p(te.value),1),e[43]||(e[43]=t("i",null,"人",-1))]),e[44]||(e[44]=t("div",{class:"sc-label"},"当前范围教师",-1))])]),t("div",gt,[t("div",ft,[l(n,{type:"ios-time-outline"})]),t("div",bt,[t("div",yt,[i(p(Ne.value),1),e[45]||(e[45]=t("i",null,"小时",-1))]),e[46]||(e[46]=t("div",{class:"sc-label"},"剩余时长合计",-1))])]),t("div",wt,[t("div",_t,[l(n,{type:"ios-stats-outline"})]),t("div",kt,[t("div",Tt,[i(p(rs.value),1),e[47]||(e[47]=t("i",null,"小时",-1))]),e[48]||(e[48]=t("div",{class:"sc-label"},"人均可用时长",-1))])]),t("div",{class:$(["stat-card",{"is-warn":Ie.value>0}])},[t("div",Mt,[l(n,{type:"ios-warning-outline"})]),t("div",ht,[t("div",Vt,[i(p(Ie.value),1),e[49]||(e[49]=t("i",null,"人",-1))]),e[50]||(e[50]=t("div",{class:"sc-label"},"时长已用尽",-1))])],2)]),t("div",xt,[t("div",Ct,[t("div",Et,[l(n,{type:"ios-git-branch-outline"}),e[51]||(e[51]=t("span",null,"教师分组",-1)),e[52]||(e[52]=t("em",null,"点击筛选",-1))]),l(xs,{data:me.value,onOnSelectChange:is,class:"grp-tree"},null,8,["data"])]),t("div",St,[t("div",Nt,[t("div",It,[l(ae,{class:"tt-search",search:"",suffix:"ios-search",modelValue:ce.value,"onUpdate:modelValue":e[9]||(e[9]=a=>ce.value=a),placeholder:"搜索教师姓名 / 备注",onOnSearch:z,onOnClear:z},null,8,["modelValue"]),t("span",Dt,[e[53]||(e[53]=i("共 ",-1)),t("b",null,p(te.value),1),e[54]||(e[54]=i(" 位教师",-1))])]),t("div",Ut,[l(w,{size:"small",icon:"md-refresh",onClick:z},{default:o(()=>[...e[55]||(e[55]=[i("刷新",-1)])]),_:1}),l(w,{size:"small",icon:"ios-undo-outline",disabled:!R.value,onClick:Ue},{default:o(()=>[...e[56]||(e[56]=[i(" 清空改动 ",-1)])]),_:1},8,["disabled"])])]),l(We,{columns:ps,data:se.value,loading:pe.value,"row-class-name":cs,"no-data-text":"暂无教师时长数据"},null,8,["data","loading"]),t("div",{class:$(["usertime-footer",{active:R.value>0}])},[t("div",Ot,[t("span",Ht,[e[57]||(e[57]=i(" 范围剩余合计",-1)),t("b",$t,p(Ne.value),1),e[58]||(e[58]=i(" 小时 ",-1))]),e[63]||(e[63]=t("span",{class:"fi-sep"},null,-1)),t("span",Lt,[e[61]||(e[61]=i(" 待提交",-1)),t("b",Rt,p(R.value),1),e[62]||(e[62]=i(" 人 ",-1)),R.value>0?(m(),y(A,{key:0},[e[59]||(e[59]=i(" ,净增减 ",-1)),t("b",{class:$(Number(ge.value)>=0?"hl-green":"hl-red")},p(Number(ge.value)>0?"+":"")+p(ge.value),3),e[60]||(e[60]=i(" 小时 ",-1))],64)):E("",!0)])]),t("div",zt,[l(w,{disabled:!R.value,onClick:Ue},{default:o(()=>[...e[64]||(e[64]=[i("取消",-1)])]),_:1},8,["disabled"]),l(w,{type:"primary",icon:"md-checkmark",disabled:!R.value,loading:fe.value,onClick:us},{default:o(()=>[...e[65]||(e[65]=[i(" 提交本次调整 ",-1)])]),_:1},8,["disabled","loading"])])],2)])])]),_:1})]),_:1}),l(J,{label:"节次",name:"section"},{default:o(()=>[l(K,{bordered:!1,"dis-hover":"",class:"panel-card"},{default:o(()=>[t("div",Ft,[l(n,{type:"ios-information-circle-outline"}),e[66]||(e[66]=t("span",null,"节次供「指派代课」等课务场景使用(P7 规划);可按学校作息维护。课务功能启用后,请假将按节次精确扣减。",-1))]),t("div",At,[t("div",Pt,[t("span",Bt,[e[67]||(e[67]=i(" 共 ",-1)),t("b",null,p(x.value.count),1),e[68]||(e[68]=i(" 个节次 ",-1))]),x.value.am?(m(),y("span",Wt,"上午 "+p(x.value.am),1)):E("",!0),x.value.pm?(m(),y("span",Gt,"下午 "+p(x.value.pm),1)):E("",!0),x.value.night?(m(),y("span",jt,"晚上 "+p(x.value.night),1)):E("",!0),x.value.count?(m(),y("span",qt,"累计课时 "+p(x.value.totalText),1)):E("",!0)]),l(w,{type:"primary",icon:"md-add",onClick:e[10]||(e[10]=a=>Oe())},{default:o(()=>[...e[69]||(e[69]=[i("新增节次",-1)])]),_:1})]),l(We,{class:"sec-table",columns:Ms,data:ye.value,"no-data-text":"暂无节次",stripe:""},null,8,["data"])]),_:1})]),_:1}),l(J,{label:"其他设置",name:"option"},{default:o(()=>[l(K,{bordered:!1,"dis-hover":"",class:"panel-card"},{default:o(()=>[t("div",Kt,[l(n,{type:"ios-information-circle-outline"}),e[70]||(e[70]=t("span",null,"此处设置全校统一的请假规则,保存后立即对新的请假申请生效(已提交的申请按提交时的规则计算)。",-1))]),_e.value&&!N.value?(m(),y("div",Jt,[(m(),y(A,null,X(5,a=>t("div",{class:"sk-row",key:a},[...e[71]||(e[71]=[t("span",{class:"sk-label"},null,-1),t("span",{class:"sk-ctrl"},null,-1)])])),64))])):(m(),Y(f,{key:1,"label-width":0,class:$(["opt-form",{"is-disabled":!N.value}])},{default:o(()=>[t("div",Qt,[e[75]||(e[75]=t("div",{class:"opt-group-head"},[t("span",{class:"opt-group-title"},"计算口径"),t("span",{class:"opt-group-desc"},"决定请假时长如何录入与统计")],-1)),t("div",Xt,[e[74]||(e[74]=t("div",{class:"opt-label"},[t("span",{class:"opt-label-main"},"请假计算"),t("span",{class:"opt-label-sub"},"按天时,申请页改为「半天 / 半天以上 + 上午 / 下午」选择")],-1)),t("div",Yt,[l(Cs,{modelValue:Le.value,"onUpdate:modelValue":e[11]||(e[11]=a=>Le.value=a),class:"opt-seg"},{default:o(()=>[l(Ge,{label:1},{default:o(()=>[...e[72]||(e[72]=[i("按小时",-1)])]),_:1}),l(Ge,{label:0},{default:o(()=>[...e[73]||(e[73]=[i("按天",-1)])]),_:1})]),_:1},8,["modelValue"])])])]),t("div",Zt,[e[78]||(e[78]=t("div",{class:"opt-group-head"},[t("span",{class:"opt-group-title"},"申请表单"),t("span",{class:"opt-group-desc"},"控制申请页的填写要求与提示")],-1)),t("div",el,[e[76]||(e[76]=t("div",{class:"opt-label"},[t("span",{class:"opt-label-main"},"请假事由必填"),t("span",{class:"opt-label-sub"},"关闭后事由可留空,仅审批时可见")],-1)),t("div",sl,[l(oe,{modelValue:Re.value,"onUpdate:modelValue":e[12]||(e[12]=a=>Re.value=a),size:"large"},null,8,["modelValue"])])]),t("div",tl,[e[77]||(e[77]=t("div",{class:"opt-label"},[t("span",{class:"opt-label-main"},"显示请假说明"),t("span",{class:"opt-label-sub"},"在申请页顶部展示作息时间说明")],-1)),t("div",ll,[l(oe,{modelValue:ze.value,"onUpdate:modelValue":e[13]||(e[13]=a=>ze.value=a),size:"large"},null,8,["modelValue"])])])]),t("div",nl,[t("div",al,[e[80]||(e[80]=t("span",{class:"opt-group-title"},"课务安排",-1)),l(Te,{color:"warning",size:"small"},{default:o(()=>[...e[79]||(e[79]=[i("规划中",-1)])]),_:1}),e[81]||(e[81]=t("span",{class:"opt-group-desc"},"启用后申请页出现课务三选一",-1))]),t("div",ol,[e[82]||(e[82]=t("div",{class:"opt-label"},[t("span",{class:"opt-label-main"},"启用课务安排"),t("span",{class:"opt-label-sub"},"申请页可选择「无 / 自行安排 / 教务安排」")],-1)),t("div",il,[l(oe,{modelValue:Fe.value,"onUpdate:modelValue":e[14]||(e[14]=a=>Fe.value=a),size:"large"},null,8,["modelValue"])])]),t("div",rl,[e[83]||(e[83]=t("div",{class:"opt-label"},[t("span",{class:"opt-label-main"},"允许换课"),t("span",{class:"opt-label-sub"},"允许教师在请假期间申请调课")],-1)),t("div",ul,[l(oe,{modelValue:Ae.value,"onUpdate:modelValue":e[15]||(e[15]=a=>Ae.value=a),size:"large"},null,8,["modelValue"])])])]),t("div",dl,[t("span",cl,[l(n,{type:"ios-information-circle-outline"}),e[84]||(e[84]=i(" 修改后需点击「保存设置」才会生效 ",-1))]),t("div",pl,[l(w,{onClick:e[16]||(e[16]=a=>G()),disabled:W.value},{default:o(()=>[...e[85]||(e[85]=[i("重新加载",-1)])]),_:1},8,["disabled"]),l(w,{type:"primary",icon:"md-checkmark",loading:W.value,disabled:!N.value,onClick:_s},{default:o(()=>[...e[86]||(e[86]=[i(" 保存设置 ",-1)])]),_:1},8,["loading","disabled"])])])]),_:1},8,["class"]))]),_:1})]),_:1})]),_:1},8,["modelValue"]),l(je,{modelValue:le.value,"onUpdate:modelValue":e[18]||(e[18]=a=>le.value=a),title:"教师时长导入","mask-closable":!1,width:520},{default:o(()=>[t("a",{href:vs},"点击链接下载[教师时长导入模板.xlsx]"),t("div",ml,[l(Ss,{action:ms,accept:".xls,.xlsx",format:["xls","xlsx"],"on-success":fs,"on-format-error":bs,"show-upload-list":""},{default:o(()=>[l(w,null,{default:o(()=>[l(n,{type:"ios-cloud-upload-outline"}),e[87]||(e[87]=i(" 选择要上传的文件",-1))]),_:1})]),_:1})]),ne.value.length?(m(),y("div",vl,[(m(!0),y(A,null,X(ne.value,(a,Q)=>(m(),y("div",{key:Q,class:"import-error-line"}," 第 "+p(a.row)+" 行:"+p(a.msg),1))),128))])):E("",!0)]),_:1},8,["modelValue"]),l(je,{modelValue:B.value,"onUpdate:modelValue":e[23]||(e[23]=a=>B.value=a),title:k.value.id?"编辑节次":"新增节次",width:520},{footer:o(()=>[l(w,{onClick:e[22]||(e[22]=a=>B.value=!1)},{default:o(()=>[...e[90]||(e[90]=[i("取消",-1)])]),_:1}),l(w,{type:"primary",onClick:ys},{default:o(()=>[...e[91]||(e[91]=[i("保存",-1)])]),_:1})]),default:o(()=>[l(f,{"label-width":96,model:k.value},{default:o(()=>[l(c,{label:"节次名称",prop:"name",rules:[{required:!0,message:"请输入节次名称",trigger:"blur"}]},{default:o(()=>[l(ae,{modelValue:k.value.name,"onUpdate:modelValue":e[19]||(e[19]=a=>k.value.name=a),placeholder:"如:第一节",maxlength:20},null,8,["modelValue"])]),_:1}),l(c,{label:"上课时间"},{default:o(()=>[t("div",gl,[l(u,{modelValue:k.value.beginTime,"onUpdate:modelValue":e[20]||(e[20]=a=>k.value.beginTime=a),format:"HH:mm",placeholder:"08:00",class:"sec-time-picker"},null,8,["modelValue"]),e[88]||(e[88]=t("span",{class:"period-sep"},"至",-1)),l(u,{modelValue:k.value.endTime,"onUpdate:modelValue":e[21]||(e[21]=a=>k.value.endTime=a),format:"HH:mm",placeholder:"08:45",class:"sec-time-picker"},null,8,["modelValue"]),ke(k.value)?(m(),y("span",fl,p(ke(k.value)),1)):E("",!0)])]),_:1}),l(c,{label:"所属时段"},{default:o(()=>[t("span",{class:$(["sec-tag",H(k.value)==="上午"?"am":H(k.value)==="下午"?"pm":"night"])},p(H(k.value)),3),e[89]||(e[89]=t("span",{class:"form-tip sec-form-tip"},"时段由开始时间自动归类,无需手动设置",-1))]),_:1})]),_:1},8,["model"])]),_:1},8,["modelValue","title"])])])}}}),Tl=Os(bl,[["__scopeId","data-v-bdbbd87c"]]);export{Tl as default};
|