|
|
import{$t as e,C as t,D as n,O as r,P as i,W as a,Y as o,_t as s,at as c,b as l,ct as ee,d as te,g as u,in as d,k as ne,m as f,p as re,q as p,w as m,x as h}from"./vue.runtime.esm-bundler-OsdSFvn7.js";import{A as ie,M as ae,j as oe,k as g}from"./api-Dpfxb1ca.js";import{S as _,f as v,l as se,u as ce}from"./index-CpTiFmNV.js";import{t as y}from"./_plugin-vue_export-helper-CXTkFu_Z.js";import{r as le,t as ue}from"./downloadFeedback-CjBZS_vk.js";import{t as de}from"./ApplicationSignupDetailFields-CkGBLRcw.js";import{i as fe,t as pe}from"./listPageState-y2a2WJrd.js";var me={class:`container-fluid p-3 p-md-4 reviewer-detail-page`},he={class:`d-flex justify-content-between align-items-center flex-wrap gap-2 mb-3`},ge={class:`d-flex align-items-center gap-2 flex-wrap`},_e={key:0,class:`alert alert-warning py-2 small`,role:`alert`},ve={key:1,class:`small text-secondary`},ye={key:2,class:`card mb-4 border-0 shadow-sm`},be={class:`card-body pb-4`},xe={class:`row g-3 mt-1`},Se={class:`col-12`},Ce={key:0,class:`form-control-plaintext border rounded px-3 py-2 mb-0 bg-light small text-secondary`},we={key:1,class:`form-control-plaintext border rounded px-3 py-2 mb-0 bg-light small text-secondary`},Te={class:`col-12`},Ee={key:0,class:`list-unstyled mb-0 border rounded px-3 py-2 bg-light small`},De=[`onClick`],Oe={key:1,class:`form-control-plaintext border rounded px-3 py-2 mb-0 bg-light small text-secondary`},ke={class:`col-12`},b={class:`form-control-plaintext border rounded px-3 py-2 mb-0 bg-light small text-secondary`},x={class:`text-secondary ms-2`},S={class:`col-12 pt-3 mt-2 border-top d-flex flex-wrap gap-2 align-items-center reviewer-score-action-bar`},C=[`disabled`],w={key:0,class:`small text-danger`},Ae={key:1,class:`small text-secondary`},je={id:`reviewerPledgeModal`,class:`modal fade`,tabindex:`-1`,"aria-labelledby":`reviewerPledgeDocHeading`,"aria-hidden":`true`},Me={class:`modal-dialog modal-dialog-centered modal-dialog-scrollable reviewer-detail-modal reviewer-detail-modal--pledge`},Ne={class:`modal-content promise-sign-sheet`},Pe={class:`modal-body pt-2`},Fe={key:0,class:`promise-doc-paper`},Ie={id:`reviewerPledgeDocHeading`,class:`promise-doc-heading text-center`},Le={class:`promise-doc-scroll`},Re=[`innerHTML`],ze={key:1,class:`promise-doc-body promise-doc-body--rich`},Be={key:0,class:`promise-doc-signblock`},Ve={class:`reviewer-pledge-sig-row`},He=[`src`],Ue={key:1,class:`small text-secondary`},We={class:`promise-doc-daterow`},Ge={class:`promise-doc-dateline`},Ke={id:`reviewerScoreModal`,class:`modal fade`,tabindex:`-1`,"aria-labelledby":`reviewerScoreModalLabel`,"aria-hidden":`true`},qe={class:`modal-dialog modal-dialog-centered modal-dialog-scrollable reviewer-detail-modal reviewer-detail-modal--score`},Je={class:`modal-content`},Ye={class:`modal-header scoring-modal-header`},Xe={id:`reviewerScoreModalLabel`,class:`modal-title scoring-modal-title w-100 text-center`},Ze={class:`modal-body`},Qe={key:0,class:`small text-danger mb-2 text-center`,role:`alert`},$e={class:`table-responsive scoring-sheet-wrap`},et={class:`table table-bordered align-middle mb-0 scoring-sheet-table`},tt={class:`text-center text-secondary`},nt=[`rowspan`],rt={class:`text-center fw-semibold scoring-indicator`},it={class:`small text-secondary scoring-criteria`},at={class:`text-center`},ot={class:`scoring-total-block`},st={class:`scoring-total-row-inner`},ct=[`onKeydown`],lt={class:`scoring-total-full small text-secondary`},T={key:0,class:`invalid-feedback d-block`},ut={class:`modal-footer flex-wrap gap-2`},dt=[`disabled`],ft=100,E=2,D=y(ne({__name:`ReviewerApplicationDetailView`,setup(ne){let y=se(),D=ce(),O=l(()=>String(y.params.slug??``).trim()),k=l(()=>String(y.params.id??``).trim()),pt=i(`reviewerCompetitionName`,s(``)),mt=l(()=>{let e=pt.value.trim();return e?`${e} 赛事承诺书`:`赛事承诺书`});function ht(e){let t=(e??``).trim();if(!t)return`—`;let n=t.match(/^(\d{4})-(\d{1,2})-(\d{1,2})/);if(n)return`${parseInt(n[1],10)}年${parseInt(n[2],10)}月${parseInt(n[3],10)}日`;let r=new Date(t.includes(` `)?t.replace(/-/g,`/`):t);return Number.isNaN(r.getTime())?t:`${r.getFullYear()}年${r.getMonth()+1}月${r.getDate()}日`}let A=s(null),j=s(!1),M=s(``),N=l(()=>ht(A.value?.promise_signed_at)),P=s(``),F=s(!1),I=s(!1),L=s(!1),gt=l(()=>Number(A.value?.scoring_sheet?.full_score??100)||100);function R(){return String(P.value??``).trim()}let z=l({get:()=>P.value,set:e=>{let t=(e==null?``:String(e)).replace(/[^\d.-]/g,``);t=t.replace(/(?!^)-/g,``),t=t.replace(/(\..*)\./g,`$1`),P.value=t}});function B(){let e=A.value;if(!e?.scoring_sheet?.items?.length){P.value=``,I.value=!1,L.value=!1;return}let t=e.my_review_score?.line_total,n=e.my_review_score?.payload_json?.line_total,r=t!=null&&String(t).trim()!==``?String(t):n!=null&&String(n).trim()!==``?String(n):``;if(r===``)P.value=``;else{let e=Number(r);P.value=Number.isFinite(e)?V(e.toFixed(E)):``}I.value=!1,L.value=!1}c(A,()=>B(),{deep:!0});function V(e){return e.replace(/\.?0+$/,``)}function H(e){return V(Number(e).toFixed(E))}function _t(e){return/\.\d{3,}/.test(e)}let U=l(()=>A.value?.scoring_sheet?.items??[]),vt=l(()=>{let e=U.value,t=[],n=0;for(;n<e.length;){let r=e[n].category,i=1;for(;n+i<e.length&&e[n+i].category===r;)i+=1;for(let r=0;r<i;r++)t.push({item:e[n+r],idx:n+r,categoryRowspan:r===0?i:0});n+=i}return t});function W(){let e=R();if(e===``)return L.value||I.value?`请填写项目总分`:null;if(e===`-`||e===`.`||e===`-.`)return`须为数字`;if(_t(e))return`项目总分最多保留两位小数`;let t=Number(e);return Number.isFinite(t)?t<0?`项目总分不能为负数`:t>ft?`项目总分不能大于 100`:null:`须为数字`}function yt(){I.value=!0}let bt=l(()=>!A.value?.scoring_allowed||!U.value.length?!1:W()===null&&R()!==``),G=l(()=>{if(!U.value.length)return``;let e=W();return e&&(L.value||I.value||R()!==``)?e:``}),xt=l(()=>{let e=A.value;return e?`项目编号:${e.project_code} · ${e.score_display}`:``}),K=l(()=>A.value?.files.find(e=>e.kind===`plan`)??null),q=l(()=>A.value?.files.filter(e=>e.kind===`supporting`)??[]),J=l(()=>{let e=A.value?.promise_signature;if(e==null||typeof e!=`string`)return``;let t=e.trim();return t===``?``:t.startsWith(`data:`)?t:`data:image/png;base64,${t}`});async function Y(){let e=k.value,t=O.value,{token:n}=g();if(!/^\d+$/.test(e)||!t||!n){M.value=`参数无效或未登录`,A.value=null;return}j.value=!0,M.value=``;try{let r=ie(parseInt(e,10),t),i=await fetch(r,{headers:{Authorization:`Bearer ${n}`,Accept:`application/json`}});if(!i.ok){let e=await i.json().catch(()=>({}));M.value=(typeof e==`object`&&e&&`message`in e?String(e.message??``):``)||`加载失败(${i.status})`,A.value=null;return}A.value=(await i.json()).data??null}catch{M.value=`网络错误`,A.value=null}finally{j.value=!1}}c([k,O],()=>void Y()),a(()=>void Y());function St(){let e=O.value;if(!e){D.push(`/c`);return}D.push({name:`reviewer-projects`,params:{slug:e},query:fe(pe(`reviewer-projects`,e),y.query)})}let X=s(null);async function Z(e){if(X.value!=null){v.warning(`附件正在下载中,请勿重复点击`);return}let t=k.value,n=O.value,{token:r}=g();if(!/^\d+$/.test(t)||!n||!r){v.warning(`未登录或参数无效`);return}let i=e.original_name?.trim()||`附件`,a=ue(i,e.size);if(!a)return;X.value=e.id;let o=oe(parseInt(t,10),e.id,n);try{let e=await fetch(o,{headers:{Authorization:`Bearer ${r}`,Accept:`application/json,*/*`}});if(!e.ok){let t=`下载附件失败`;try{let n=await e.json();typeof n.message==`string`&&n.message.trim()&&(t=n.message.trim())}catch{}v.error(t);return}a.setText(`正在保存「${i}」…`);let t=await e.blob(),n=URL.createObjectURL(t),s=document.createElement(`a`);s.href=n,s.download=i===`附件`?`download`:i,s.rel=`noopener`,document.body.appendChild(s),s.click(),s.remove(),URL.revokeObjectURL(n),le()}catch{v.error(`网络错误,无法下载`)}finally{a.close(),X.value=null}}function Ct(){return{line_total:Number(R())}}function Q(){typeof document>`u`||(document.querySelectorAll(`.modal-backdrop`).forEach(e=>e.remove()),document.body.classList.remove(`modal-open`),document.body.style.removeProperty(`overflow`),document.body.style.removeProperty(`padding-right`))}function wt(){return new Promise(e=>{if(typeof document>`u`){e();return}let t=document.getElementById(`reviewerScoreModal`);if(!t){Q(),e();return}let n=!1,r=()=>{n||(n=!0,t.removeEventListener(`hidden.bs.modal`,i),Q(),e())},i=()=>r();t.addEventListener(`hidden.bs.modal`,i),(_.getInstance(t)??_.getOrCreateInstance(t)).hide(),window.setTimeout(r,450)})}function Tt(){if(!A.value?.scoring_allowed){v.warning(A.value?.scoring_blocked_reason||`该赛道未配置打分表,暂不可评审`);return}if(L.value=!1,I.value=!1,Q(),typeof document>`u`)return;let e=document.getElementById(`reviewerScoreModal`);e&&_.getOrCreateInstance(e).show()}async function $(){let e=k.value,t=O.value,{token:n}=g();if(!/^\d+$/.test(e)||!t||!n){v.warning(`未登录或参数无效`);return}if(!A.value?.scoring_allowed||!U.value.length){v.warning(A.value?.scoring_blocked_reason||`该赛道未配置打分表,暂不可评审`);return}if(!bt.value){L.value=!0,v.warning(W()||`请填写 0~100 之间的项目总分`);return}F.value=!0;try{let r=Ct(),i=ae(parseInt(e,10)),a=await fetch(i,{method:`POST`,headers:{Authorization:`Bearer ${n}`,Accept:`application/json`,"Content-Type":`application/json`},body:JSON.stringify({competition_slug:t,payload:r})}),o=await a.json().catch(()=>({}));if(!a.ok){let e=o,t=e.errors?.payload?.[0],n=typeof t==`string`&&t?t:typeof e.message==`string`?e.message:`提交失败(${a.status})`;v.error(n);return}await wt();let s=o.data;A.value&&s&&(s.my_review_score!==void 0&&(A.value.my_review_score=s.my_review_score),typeof s.score_display==`string`&&(A.value.score_display=s.score_display),typeof s.score_is_pending==`boolean`&&(A.value.score_is_pending=s.score_is_pending)),B(),v.success(typeof o.message==`string`?String(o.message):`提交成功`)}catch{v.error(`网络错误,提交失败`)}finally{F.value=!1}}return(i,a)=>(p(),m(`div`,me,[h(`div`,he,[a[2]||=h(`h5`,{class:`mb-0 section-title`},`项目详情`,-1),h(`div`,ge,[A.value?(p(),m(`span`,{key:0,class:e([`status-pill`,A.value.score_is_pending?`status-pending`:`status-pass`])},d(xt.value),3)):t(``,!0),h(`button`,{type:`button`,class:`btn btn-sm btn-outline-secondary event-back-btn`,onClick:St},` 返回列表 `)])]),M.value?(p(),m(`p`,_e,d(M.value),1)):j.value?(p(),m(`p`,ve,`加载中…`)):A.value?(p(),m(`div`,ye,[h(`div`,be,[r(de,{detail:A.value,"show-recommend":!1},null,8,[`detail`]),h(`div`,xe,[h(`div`,Se,[a[3]||=h(`label`,{class:`form-label`},`商业计划书`,-1),K.value?(p(),m(`p`,Ce,[h(`a`,{role:`button`,href:`#`,class:e([`text-danger text-decoration-none`,{"pe-none opacity-75":X.value!=null}]),onClick:a[0]||=f(e=>Z(K.value),[`prevent`])},d(X.value===K.value.id?`下载中… ${K.value.original_name}`:K.value.original_name),3)])):(p(),m(`p`,we,`—`))]),h(`div`,Te,[a[4]||=h(`label`,{class:`form-label`},`其他佐证材料`,-1),q.value.length?(p(),m(`ul`,Ee,[(p(!0),m(u,null,o(q.value,t=>(p(),m(`li`,{key:t.id},[h(`a`,{role:`button`,href:`#`,class:e([`text-danger text-decoration-none`,{"pe-none opacity-75":X.value!=null}]),onClick:f(e=>Z(t),[`prevent`])},d(X.value===t.id?`下载中… ${t.original_name}`:t.original_name),11,De)]))),128))])):(p(),m(`p`,Oe,`—`))]),h(`div`,ke,[a[6]||=h(`label`,{class:`form-label`},`参赛承诺书`,-1),h(`p`,b,[A.value.promise_signed?(p(),m(u,{key:0},[a[5]||=h(`button`,{type:`button`,class:`btn btn-link btn-sm p-0 align-baseline text-danger`,"data-bs-toggle":`modal`,"data-bs-target":`#reviewerPledgeModal`},` 已签署 · 查看承诺书与签名 `,-1),h(`span`,x,`日期:`+d(N.value),1)],64)):(p(),m(u,{key:1},[n(`未签署`)],64))])]),h(`div`,S,[h(`button`,{type:`button`,class:`btn btn-primary px-4`,style:{"background-color":`var(--primary, #109bd3)`,"border-color":`var(--primary, #109bd3)`},disabled:!A.value.scoring_allowed,onClick:Tt},d(A.value.score_is_pending?`项目评分`:`修改项目评分`),9,C),A.value.scoring_allowed?A.value.my_review_score?(p(),m(`span`,Ae,`最近保存:`+d(A.value.my_review_score.updated_at)+` · 项目得分 `+d(V(Number(A.value.my_review_score.line_total).toFixed(2)))+` 分`,1)):t(``,!0):(p(),m(`span`,w,d(A.value.scoring_blocked_reason||`该赛道未配置打分表,暂不可评审`),1))])])])])):t(``,!0),h(`div`,je,[h(`div`,Me,[h(`div`,Ne,[h(`div`,Pe,[A.value?(p(),m(`div`,Fe,[h(`h1`,Ie,d(mt.value),1),h(`div`,Le,[A.value.pledge_content_html?.trim()?(p(),m(`div`,{key:0,class:`promise-doc-body promise-doc-body--rich`,innerHTML:A.value.pledge_content_html},null,8,Re)):(p(),m(`div`,ze,[...a[7]||=[h(`p`,{class:`text-secondary mb-0`},`本场赛事未配置承诺书正文(可在管理端赛事中心维护)。`,-1)]]))]),A.value.promise_signed?(p(),m(`div`,Be,[h(`div`,Ve,[a[8]||=h(`span`,{class:`promise-doc-signlabel`},`参赛人签名:`,-1),J.value?(p(),m(`img`,{key:0,src:J.value,alt:``,class:`reviewer-promise-sig-img`,loading:`lazy`},null,8,He)):(p(),m(`span`,Ue,`暂无`))]),h(`div`,We,[h(`span`,Ge,[a[9]||=n(`日期:`,-1),h(`strong`,null,d(N.value),1)])])])):t(``,!0)])):t(``,!0),a[10]||=h(`div`,{class:`promise-sign-actions`},[h(`button`,{type:`button`,class:`btn btn-light notice-cancel-btn`,"data-bs-dismiss":`modal`},`关闭`)],-1)])])])]),h(`div`,Ke,[h(`div`,qe,[h(`div`,Je,[h(`div`,Ye,[h(`h5`,Xe,d(A.value?.scoring_sheet?.title||`项目评分`),1),a[11]||=h(`button`,{type:`button`,class:`btn-close scoring-modal-close`,"data-bs-dismiss":`modal`,"aria-label":`关闭`},null,-1)]),h(`div`,Ze,[a[15]||=h(`p`,{class:`small text-secondary mb-2 text-center scoring-modal-hint`},` 下表为评审参考;请在底部填写项目总分(0~100,最多两位小数,可为 0)。 `,-1),G.value?(p(),m(`p`,Qe,d(G.value),1)):t(``,!0),h(`div`,$e,[h(`table`,et,[a[12]||=h(`colgroup`,null,[h(`col`,{class:`col-seq`}),h(`col`,{class:`col-category`}),h(`col`,{class:`col-indicator`}),h(`col`,{class:`col-criteria`}),h(`col`,{class:`col-max`})],-1),a[13]||=h(`thead`,null,[h(`tr`,null,[h(`th`,{class:`text-nowrap text-center`},`序号`),h(`th`,{class:`text-nowrap text-center`},`指标分类`),h(`th`,{class:`text-nowrap text-center`},`评审指标`),h(`th`,{class:`text-center`},`核心评审要素(评委打分依据)`),h(`th`,{class:`text-nowrap text-center`},`分值`)])],-1),h(`tbody`,null,[(p(!0),m(u,null,o(vt.value,e=>(p(),m(`tr`,{key:e.item.key},[h(`td`,tt,d(e.item.sort||e.idx+1),1),e.categoryRowspan>0?(p(),m(`td`,{key:0,rowspan:e.categoryRowspan,class:`text-center scoring-category`},d(e.item.category),9,nt)):t(``,!0),h(`td`,rt,d(e.item.title),1),h(`td`,it,d(e.item.criteria||`—`),1),h(`td`,at,d(H(e.item.max_score)),1)]))),128))])])]),h(`div`,ot,[a[14]||=h(`label`,{class:`form-label mb-1 fw-semibold`,for:`reviewer-total-score-input`},`项目总分`,-1),h(`div`,st,[ee(h(`input`,{id:`reviewer-total-score-input`,"onUpdate:modelValue":a[1]||=e=>z.value=e,class:e([`form-control scoring-total-input text-center`,{"is-invalid":!!W()}]),type:`text`,inputmode:`decimal`,autocomplete:`off`,placeholder:`请输入总分`,"aria-label":`项目总分`,onBlur:yt,onKeydown:re(f($,[`prevent`]),[`enter`])},null,42,ct),[[te,z.value]]),h(`span`,lt,`满分 `+d(H(gt.value)),1)]),W()?(p(),m(`div`,T,d(W()),1)):t(``,!0)])]),h(`div`,ut,[a[16]||=h(`button`,{type:`button`,class:`btn btn-secondary`,"data-bs-dismiss":`modal`},`取消`,-1),h(`button`,{type:`button`,class:`btn btn-primary`,style:{"background-color":`var(--primary, #109bd3)`,"border-color":`var(--primary, #109bd3)`},disabled:F.value,onClick:$},d(F.value?`提交中…`:`确认提交`),9,dt)])])])])]))}}),[[`__scopeId`,`data-v-75c810e2`]]);export{D as default}; |