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