You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1 line
17 KiB

import{A as e,Dt as t,F as n,J as r,O as i,S as a,T as o,X as s,_ as c,an as l,d as u,en as d,f,gt as p,k as ee,lt as m,m as te,ot as ne,vt as h,w as g,x as _}from"./vue.runtime.esm-bundler-Dt_AyShc.js";import{f as re,g as ie,p as ae,s as v}from"./index-D9t8QC7c.js";import{s as oe}from"./competitions-DiM5-jwj.js";import{a as se,r as y}from"./signupOptionCodes-CykJMZca.js";import{t as ce}from"./scoreFormat-By5dDjGK.js";import{i as le,n as ue,o as de}from"./applications-Bu8boYIt.js";import{a as fe,n as pe,t as me}from"./schemaAdminColumns-Cyqpibe7.js";import{a as he,n as ge,o as _e,r as ve,t as ye}from"./listPageState-CRQ3rD3Z.js";import{t as be}from"./PortalPagination-BXSC41DF.js";async function xe(e,t){let{data:n}=await v.post(`/competitions/${e}/applications/batch-review-result`,t);return n}y.map(e=>e.value);var Se={class:`container-fluid p-3 p-md-4`},Ce={class:`filter-panel mb-3`},we={class:`row g-2 align-items-center`},Te={class:`col-md-3`},Ee={class:`col-md-2`},De=[`value`],Oe=[`value`],ke={class:`col-md-2`},Ae=[`value`],je={class:`col-md-2`},Me=[`onUpdate:modelValue`],Ne={value:``},Pe=[`value`],Fe={class:`col-md-2`},Ie={class:`col-md-2`},Le={class:`col-12 col-md-auto d-flex gap-2`},Re={class:`selection-toolbar mt-2`},ze={class:`d-flex flex-wrap align-items-center gap-2`},Be={class:`btn-group btn-group-sm portal-selection-mode-group`,role:`group`},Ve={key:0,class:`badge bg-light text-dark ms-1`},He={key:0,class:`badge bg-light text-dark ms-1`},Ue=[`disabled`],We=[`disabled`],Ge={key:1,class:`dropdown`},Ke={class:`dropdown-menu dropdown-menu-end`},qe=[`disabled`],Je={class:`small text-secondary mb-0 mt-2`},Ye={class:`portal-table-scroll table-panel`},Xe={class:`table table-hover align-middle mb-0 admin-list-table portal-data-table`},Ze={class:`text-center portal-sticky-left`,style:{width:`2.5rem`}},Qe=[`checked`],$e={class:`portal-sticky-right-3`},et={key:0},tt=[`colspan`],nt={key:1},rt=[`colspan`],it={class:`text-center portal-sticky-left`},at=[`checked`,`disabled`,`onChange`],ot={class:`text-secondary`},st={class:`cell-wrap`},ct={class:`cell-wrap`},lt={class:`cell-wrap`},ut={class:`cell-wrap`},dt={class:`portal-sticky-right-4`},ft={class:`portal-sticky-right-3`},pt={class:`portal-sticky-right-2`},mt={key:0,class:`admin-manage-status-tag admin-manage-status-pass`},ht={key:1,class:`admin-manage-status-tag admin-manage-status-fail`},gt={key:2},_t={class:`portal-sticky-right-1`},vt=[`onClick`],yt={key:0,class:`modal fade show d-block`,tabindex:`-1`,style:{background:`rgba(0,0,0,.35)`}},bt={class:`modal-dialog modal-dialog-centered`},xt={class:`modal-content`},St={class:`modal-header`},Ct={class:`modal-body`},wt={class:`mb-0`},Tt={class:`modal-footer`},Et=[`disabled`],Dt={key:1,class:`modal fade show d-block`,tabindex:`-1`,style:{background:`rgba(0,0,0,.35)`}},Ot={class:`modal-dialog modal-dialog-centered modal-lg`},kt={class:`modal-content`},At={class:`modal-body`},jt={class:`modal-footer`},Mt=[`disabled`],Nt={key:2,class:`modal fade show d-block`,tabindex:`-1`,style:{background:`rgba(0,0,0,.35)`}},Pt={class:`modal-dialog modal-dialog-centered modal-lg`},Ft={class:`modal-content`},It={class:`modal-body`},Lt={class:`modal-footer`},Rt=[`disabled`],b=e({__name:`ManageProjectsView`,setup(e){let v=re(),b=ae(),x=n(`manageCompetitionId`,h(null)),S=n(`manageCompetitionSlug`,h(``)),C=h(!1),w=h([]),T=p({page:1,perPage:15,total:0});function E(){return ye(`manage-projects`,S.value)}function D(){let e={};return M.keyword.trim()&&(e.keyword=M.keyword.trim()),M.track&&(e.track=M.track),M.event_location&&(e.event_location=M.event_location),M.signup_locale&&(e.signup_locale=M.signup_locale),M.review_result&&(e.review_result=M.review_result),M.review_eligible&&(e.review_eligible=M.review_eligible),F.value!==`desc`&&(e.sort_dir=F.value),e}function O(){return ge({page:T.page,perPage:T.perPage,filters:D()})}function k(){let e=E();e.endsWith(`.`)||_e(e,{page:T.page,perPage:T.perPage,filters:D()})}function zt(){let e=he(E(),v.query);T.page=e.page,T.perPage=e.perPage,M.keyword=e.filters.keyword??``,M.track=e.filters.track??``,M.event_location=e.filters.event_location??``,M.signup_locale=e.filters.signup_locale??``,M.review_result=e.filters.review_result===`passed`||e.filters.review_result===`rejected`||e.filters.review_result===`pending`?e.filters.review_result:``,(e.filters.review_eligible===`1`||e.filters.review_eligible===`0`)&&(M.review_eligible=e.filters.review_eligible),(e.filters.sort_dir===`asc`||e.filters.sort_dir===`desc`)&&(F.value=e.filters.sort_dir)}function A(){let e=O();ve(e,v.query)||b.replace({name:`manage-projects`,params:{slug:S.value},query:e})}let j=h([]),M=p({keyword:``,track:``,event_location:``,signup_locale:``,review_result:``,review_eligible:`1`}),Bt=y,N=p({}),Vt=h([]),Ht=h([]),P=_(()=>fe(Vt.value,pe)),Ut=_(()=>fe(Ht.value,me)),Wt=_(()=>21+P.value.length),F=h(`desc`),I=h(`audit`),L=h([]),R=h([]),z=h(!1),B=h(`xlsx`),Gt=_(()=>B.value===`xlsx`?`仅导出表格`:B.value===`selected`?`导出表格 + 所选附件`:`导出表格 + 全部附件`),V=h(!1),H=h(0),U=h(!1),W=h(!1),G=h(``),K=h(!1);function q(e){let t={page:e,per_page:T.perPage,status:`submitted`,sort_by:`team_avg`,sort_dir:F.value},n=M.keyword.trim();n&&(t.keyword=n),M.track&&(t.track=M.track),M.event_location&&(t.event_location=M.event_location),M.signup_locale&&(t.signup_locale=M.signup_locale),(M.review_result===`passed`||M.review_result===`rejected`||M.review_result===`pending`)&&(t.review_result=M.review_result),M.review_eligible===`1`&&(t.review_eligible=!0),M.review_eligible===`0`&&(t.review_eligible=!1);for(let[e,n]of Object.entries(N))String(n??``).trim()!==``&&(t[e]=n);return t}function Kt(e){return e.submitter_name?.trim()||e.submitter_mobile?.trim()||`—`}function qt(e){if(!e)return`—`;let t=new Date(e.includes(` `)?e.replace(/-/g,`/`):e);if(Number.isNaN(t.getTime()))return e;let n=e=>String(e).padStart(2,`0`);return`${t.getFullYear()}-${n(t.getMonth()+1)}-${n(t.getDate())} ${n(t.getHours())}:${n(t.getMinutes())}`}function Jt(e){return e.review_fully_completed?ce(e.team_sum,`-`):`待评审`}function Yt(e){return ce(e.team_avg,`-`)}function J(e){return I.value===`export`?!0:e.review_fully_completed}let Y=_(()=>I.value===`audit`?L.value:R.value);function Xt(e){I.value===`audit`?L.value=e:R.value=e}function X(e){I.value=e}let Zt=_(()=>I.value===`audit`?`当前勾选用于批量通过/未通过`:`当前勾选用于「导出表格 + 所选附件」,与审核勾选互不影响`);function Qt(e){return Y.value.includes(e)}let $t=_(()=>{let e=w.value.filter(J),t=Y.value;return e.length>0&&e.every(e=>t.includes(e.id))});function en(e){let t=e.target.checked,n=w.value.filter(J).map(e=>e.id),r=Y.value;Xt(t?Array.from(new Set([...r,...n])):r.filter(e=>!n.includes(e)))}function tn(e,t,n){if(!J(t)){n.target.checked=!1;return}let r=n.target.checked,i=[...Y.value];if(r)i.includes(e)||i.push(e);else{let t=i.indexOf(e);t>=0&&i.splice(t,1)}Xt(i)}function nn(){F.value=F.value===`desc`?`asc`:`desc`,Z(1)}function rn(e){Z(e)}function an(e){T.perPage=e,Z(1)}async function on(){let e=x.value;e&&(j.value=await oe(e))}async function Z(e=T.page){let t=x.value;if(t){C.value=!0,T.page=e,k(),A();try{let n=await de(t,q(e));w.value=n.data,Vt.value=n.schema_list_fields??[],Ht.value=n.schema_filter_fields??[],T.total=n.meta.total,n.meta.current_page&&n.meta.current_page!==T.page&&(T.page=n.meta.current_page,k(),A())}finally{C.value=!1}}}function sn(){M.keyword=``,M.track=``,M.event_location=``,M.signup_locale=``,M.review_result=``,M.review_eligible=`1`;for(let e of Object.keys(N))N[e]=``;L.value=[],R.value=[],Z(1)}async function Q(e){let t=x.value;if(t){if(e===`selected`&&R.value.length===0){ie.warning(`请切换到「导出选择」并勾选要导出附件的项目`);return}B.value=e,z.value=!0;try{H.value=(await le(t,{mode:e,...q(T.page),application_ids:e===`selected`?R.value:void 0})).total}catch{H.value=T.total}}}async function cn(){let e=x.value;if(e){V.value=!0;try{await ue(e,{mode:B.value,...q(T.page),application_ids:B.value===`selected`?R.value:void 0}),z.value=!1}finally{V.value=!1}}}async function $(e){let t=x.value;if(!(!t||L.value.length===0)){K.value=!0;try{await xe(t,{application_ids:L.value,result:e,note:G.value.trim()||void 0}),U.value=!1,W.value=!1,G.value=``,L.value=[],await Z(T.page)}finally{K.value=!1}}}function ln(e){k(),b.push({name:`manage-project-detail`,params:{slug:S.value,id:String(e.id)},query:O()})}return ne(x,async e=>{e&&(await on(),zt(),await Z(T.page))},{immediate:!0}),(e,n)=>(r(),o(`div`,Se,[n[54]||=a(`div`,{class:`d-flex justify-content-between align-items-center flex-wrap gap-2 mb-3`},[a(`h5`,{class:`mb-0 section-title`},`项目管理`)],-1),a(`div`,Ce,[a(`div`,we,[a(`div`,Te,[m(a(`input`,{"onUpdate:modelValue":n[0]||=e=>M.keyword=e,type:`search`,class:`form-control`,placeholder:`搜索项目、姓名、学校、手机号、推荐方`,onKeydown:n[1]||=te(e=>Z(1),[`enter`])},null,544),[[f,M.keyword]])]),a(`div`,Ee,[m(a(`select`,{"onUpdate:modelValue":n[2]||=e=>M.track=e,class:`form-select`},[n[23]||=a(`option`,{value:``},`全部赛道`,-1),(r(!0),o(c,null,s(j.value,e=>(r(),o(`option`,{key:e.track_code,value:e.track_code},l(e.title),9,De))),128)),j.value.some(e=>e.track_code===t(`other`))?g(``,!0):(r(),o(`option`,{key:0,value:t(se)},`其他`,8,Oe))],512),[[u,M.track]])]),a(`div`,ke,[m(a(`select`,{"onUpdate:modelValue":n[3]||=e=>M.event_location=e,class:`form-select`},[n[24]||=a(`option`,{value:``},`全部意向参赛地点`,-1),(r(!0),o(c,null,s(t(Bt),e=>(r(),o(`option`,{key:e.value,value:e.value},l(e.label),9,Ae))),128))],512),[[u,M.event_location]])]),a(`div`,je,[m(a(`select`,{"onUpdate:modelValue":n[4]||=e=>M.signup_locale=e,class:`form-select`},[...n[25]||=[a(`option`,{value:``},`全部填报语言`,-1),a(`option`,{value:`zh-CN`},`中文填报`,-1),a(`option`,{value:`en`},`英文填报`,-1)]],512),[[u,M.signup_locale]])]),(r(!0),o(c,null,s(Ut.value,e=>(r(),o(`div`,{key:`mf-${e.key}`,class:`col-md-2`},[m(a(`select`,{"onUpdate:modelValue":t=>N[e.key]=t,class:`form-select`},[a(`option`,Ne,`全部`+l(e.label),1),(r(!0),o(c,null,s(e.options??[],e=>(r(),o(`option`,{key:e.value,value:e.value},l(e.label),9,Pe))),128))],8,Me),[[u,N[e.key]]])]))),128)),a(`div`,Fe,[m(a(`select`,{"onUpdate:modelValue":n[5]||=e=>M.review_result=e,class:`form-select`},[...n[26]||=[a(`option`,{value:``},`全部状态`,-1),a(`option`,{value:`passed`},`通过`,-1),a(`option`,{value:`rejected`},`未通过`,-1),a(`option`,{value:`pending`},`待评定`,-1)]],512),[[u,M.review_result]])]),a(`div`,Ie,[m(a(`select`,{"onUpdate:modelValue":n[6]||=e=>M.review_eligible=e,class:`form-select`},[...n[27]||=[a(`option`,{value:``},`全部(是否参与评审)`,-1),a(`option`,{value:`1`},`参与评审`,-1),a(`option`,{value:`0`},`不参与评审`,-1)]],512),[[u,M.review_eligible]])]),a(`div`,Le,[a(`button`,{type:`button`,class:`btn btn-primary px-3`,onClick:n[7]||=e=>Z(1)},`查询`),a(`button`,{type:`button`,class:`btn btn-light border px-3`,onClick:sn},`重置`)])]),a(`div`,Re,[a(`div`,ze,[n[31]||=a(`span`,{class:`small text-secondary`},`勾选用途:`,-1),a(`div`,Be,[a(`button`,{type:`button`,class:d([`btn`,I.value===`audit`?`btn-primary`:`btn-outline-primary`]),onClick:n[8]||=e=>X(`audit`)},[n[28]||=i(` 审核选择 `,-1),L.value.length?(r(),o(`span`,Ve,l(L.value.length),1)):g(``,!0)],2),a(`button`,{type:`button`,class:d([`btn`,I.value===`export`?`btn-primary`:`btn-outline-primary`]),onClick:n[9]||=e=>X(`export`)},[n[29]||=i(` 导出选择 `,-1),R.value.length?(r(),o(`span`,He,l(R.value.length),1)):g(``,!0)],2)]),I.value===`audit`?(r(),o(c,{key:0},[a(`button`,{type:`button`,class:`btn btn-sm btn-manage-pass`,disabled:L.value.length===0,onClick:n[10]||=e=>{U.value=!0,G.value=`同意参赛。`}},` 通过 `,8,Ue),a(`button`,{type:`button`,class:`btn btn-sm btn-manage-reject`,disabled:L.value.length===0,onClick:n[11]||=e=>{W.value=!0,G.value=``}},` 未通过 `,8,We)],64)):(r(),o(`div`,Ge,[n[30]||=a(`button`,{class:`btn btn-primary btn-sm dropdown-toggle`,type:`button`,"data-bs-toggle":`dropdown`},` 导出 `,-1),a(`ul`,Ke,[a(`li`,null,[a(`button`,{class:`dropdown-item`,type:`button`,onClick:n[12]||=e=>Q(`xlsx`)},`仅导出表格`)]),a(`li`,null,[a(`button`,{class:`dropdown-item`,type:`button`,disabled:R.value.length===0,onClick:n[13]||=e=>Q(`selected`)},` 导出表格 + 所选附件 `,8,qe)]),a(`li`,null,[a(`button`,{class:`dropdown-item`,type:`button`,onClick:n[14]||=e=>Q(`all`)},`导出表格 + 全部附件`)])])]))]),a(`p`,Je,l(Zt.value),1)])]),a(`div`,Ye,[a(`table`,Xe,[a(`thead`,null,[a(`tr`,null,[a(`th`,Ze,[(r(),o(`input`,{key:`select-all-${I.value}-${T.page}`,class:`form-check-input`,type:`checkbox`,checked:$t.value,"aria-label":`全选本页`,onChange:en},null,40,Qe))]),n[32]||=a(`th`,{style:{width:`3rem`}},`序号`,-1),n[33]||=a(`th`,null,`填报语言`,-1),n[34]||=a(`th`,null,`项目编号`,-1),n[35]||=a(`th`,null,`项目名称`,-1),n[36]||=a(`th`,null,`负责人`,-1),n[37]||=a(`th`,null,`学校`,-1),n[38]||=a(`th`,null,`意向参赛地点`,-1),n[39]||=a(`th`,null,`赛道`,-1),(r(!0),o(c,null,s(P.value,e=>(r(),o(`th`,{key:`th-${e.key}`},l(e.label),1))),128)),n[40]||=a(`th`,null,`推荐方`,-1),n[41]||=a(`th`,null,`手机号`,-1),n[42]||=a(`th`,null,`提交人`,-1),n[43]||=a(`th`,null,`提交人手机号`,-1),n[44]||=a(`th`,null,`附件`,-1),n[45]||=a(`th`,null,`提交时间`,-1),n[46]||=a(`th`,{class:`portal-sticky-right-5`},`总分`,-1),n[47]||=a(`th`,{class:`portal-sticky-right-4`},`进程`,-1),a(`th`,$e,[a(`button`,{type:`button`,class:`btn btn-link btn-sm p-0 text-decoration-none`,onClick:nn},` 平均分 `+l(F.value===`desc`?`↓`:`↑`),1)]),n[48]||=a(`th`,{class:`portal-sticky-right-2`},`状态`,-1),n[49]||=a(`th`,null,`是否参与评审`,-1),n[50]||=a(`th`,{class:`portal-sticky-right-1`},`操作`,-1)])]),a(`tbody`,null,[C.value?(r(),o(`tr`,et,[a(`td`,{colspan:Wt.value,class:`text-center py-4 text-secondary`},`加载中…`,8,tt)])):w.value.length===0?(r(),o(`tr`,nt,[a(`td`,{colspan:Wt.value,class:`text-center py-4 text-secondary`},`暂无符合条件的数据`,8,rt)])):(r(!0),o(c,{key:2},s(w.value,(e,t)=>(r(),o(`tr`,{key:e.id},[a(`td`,it,[(r(),o(`input`,{key:`${I.value}-${T.page}-${e.id}`,class:`form-check-input`,type:`checkbox`,checked:Qt(e.id),disabled:!J(e),onChange:t=>tn(e.id,e,t)},null,40,at))]),a(`td`,ot,l((T.page-1)*T.perPage+t+1),1),a(`td`,null,l(e.signup_locale_label||`中文填报`),1),a(`td`,null,l(e.project_code),1),a(`td`,st,l(e.project_name),1),a(`td`,null,l(e.player_name),1),a(`td`,ct,l(e.school||`—`),1),a(`td`,null,l(e.event_location_label||e.event_location||`—`),1),a(`td`,lt,l(e.track_title),1),(r(!0),o(c,null,s(P.value,t=>(r(),o(`td`,{key:`td-${t.key}`,class:`cell-wrap`},l(e.schema_display?.[t.key]||`—`),1))),128)),a(`td`,ut,l(e.recommend||`—`),1),a(`td`,null,l(e.contact_mobile||`—`),1),a(`td`,null,l(Kt(e)),1),a(`td`,null,l(e.submitter_mobile||`—`),1),a(`td`,null,l(e.files_count),1),a(`td`,null,l(qt(e.submitted_at)),1),a(`td`,{class:d([`portal-sticky-right-5`,{"admin-total-pending-text":!e.review_fully_completed}])},l(Jt(e)),3),a(`td`,dt,l(e.review_progress),1),a(`td`,ft,l(Yt(e)),1),a(`td`,pt,[e.review_result===`passed`?(r(),o(`span`,mt,`通过`)):e.review_result===`rejected`?(r(),o(`span`,ht,`未通过`)):(r(),o(`span`,gt,`-`))]),a(`td`,null,l(e.review_eligible===!1?`否`:`是`),1),a(`td`,_t,[a(`button`,{type:`button`,class:`btn btn-sm btn-outline-primary`,onClick:t=>ln(e)},`查看`,8,vt)])]))),128))])])]),ee(be,{page:T.page,"per-page":T.perPage,total:T.total,"onUpdate:page":rn,"onUpdate:perPage":an},null,8,[`page`,`per-page`,`total`]),z.value?(r(),o(`div`,yt,[a(`div`,bt,[a(`div`,xt,[a(`div`,St,[n[51]||=a(`h5`,{class:`modal-title`},`导出报名材料`,-1),a(`button`,{type:`button`,class:`btn-close`,onClick:n[15]||=e=>z.value=!1})]),a(`div`,Ct,[a(`p`,wt,`共 `+l(H.value||T.total)+` 份数据,模式:`+l(Gt.value),1)]),a(`div`,Tt,[a(`button`,{type:`button`,class:`btn btn-light`,onClick:n[16]||=e=>z.value=!1},`取消`),a(`button`,{type:`button`,class:`btn btn-primary`,disabled:V.value,onClick:cn},l(V.value?`导出中…`:`开始导出`),9,Et)])])])])):g(``,!0),U.value?(r(),o(`div`,Dt,[a(`div`,Ot,[a(`div`,kt,[n[52]||=a(`div`,{class:`modal-header`},[a(`h5`,{class:`modal-title`},`审核意见`)],-1),a(`div`,At,[m(a(`textarea`,{"onUpdate:modelValue":n[17]||=e=>G.value=e,class:`form-control`,rows:`6`},null,512),[[f,G.value]])]),a(`div`,jt,[a(`button`,{type:`button`,class:`btn btn-secondary`,onClick:n[18]||=e=>U.value=!1},`取消`),a(`button`,{type:`button`,class:`btn btn-success`,disabled:K.value,onClick:n[19]||=e=>$(`passed`)},` 确认通过 `,8,Mt)])])])])):g(``,!0),W.value?(r(),o(`div`,Nt,[a(`div`,Pt,[a(`div`,Ft,[n[53]||=a(`div`,{class:`modal-header`},[a(`h5`,{class:`modal-title`},`审核意见`)],-1),a(`div`,It,[m(a(`textarea`,{"onUpdate:modelValue":n[20]||=e=>G.value=e,class:`form-control`,rows:`8`},null,512),[[f,G.value]])]),a(`div`,Lt,[a(`button`,{type:`button`,class:`btn btn-secondary`,onClick:n[21]||=e=>W.value=!1},`取消`),a(`button`,{type:`button`,class:`btn btn-warning text-dark`,disabled:K.value,onClick:n[22]||=e=>$(`rejected`)},` 确认未通过 `,8,Rt)])])])])):g(``,!0)]))}});export{b as default};