|
|
import{A as e,F as t,G as n,J as r,O as i,S as a,T as o,X as s,_ as c,an as l,en as u,f as ee,h as d,k as te,lt as ne,m as re,ot as f,vt as p,w as m,x as h}from"./vue.runtime.esm-bundler-EOeHqR7Z.js";import{A as ie,M as ae,j as oe,k as g}from"./api-IlNPlR49.js";import{T as _,f as se,h as v,p as ce}from"./index-xGP6mfsH.js";import{t as y}from"./_plugin-vue_export-helper-BOai-rQB.js";import{r as le,t as ue}from"./downloadFeedback-DK64SCVK.js";import{t as de}from"./ApplicationSignupDetailFields-BKfqz2Sl.js";import{i as fe,t as pe}from"./listPageState-374ZtbZX.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(e({__name:`ReviewerApplicationDetailView`,setup(e){let y=se(),D=ce(),O=h(()=>String(y.params.slug??``).trim()),k=h(()=>String(y.params.id??``).trim()),pt=t(`reviewerCompetitionName`,p(``)),mt=h(()=>{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=p(null),j=p(!1),M=p(``),N=h(()=>ht(A.value?.promise_signed_at)),P=p(``),F=p(!1),I=p(!1),L=p(!1),gt=h(()=>Number(A.value?.scoring_sheet?.full_score??100)||100);function R(){return String(P.value??``).trim()}let z=h({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}f(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=h(()=>A.value?.scoring_sheet?.items??[]),vt=h(()=>{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=h(()=>!A.value?.scoring_allowed||!U.value.length?!1:W()===null&&R()!==``),G=h(()=>{if(!U.value.length)return``;let e=W();return e&&(L.value||I.value||R()!==``)?e:``}),xt=h(()=>{let e=A.value;return e?`项目编号:${e.project_code} · ${e.score_display}`:``}),K=h(()=>A.value?.files.find(e=>e.kind===`plan`)??null),q=h(()=>A.value?.files.filter(e=>e.kind===`supporting`)??[]),J=h(()=>{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}}f([k,O],()=>void Y()),n(()=>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=p(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(e,t)=>(r(),o(`div`,me,[a(`div`,he,[t[2]||=a(`h5`,{class:`mb-0 section-title`},`项目详情`,-1),a(`div`,ge,[A.value?(r(),o(`span`,{key:0,class:u([`status-pill`,A.value.score_is_pending?`status-pending`:`status-pass`])},l(xt.value),3)):m(``,!0),a(`button`,{type:`button`,class:`btn btn-sm btn-outline-secondary event-back-btn`,onClick:St},` 返回列表 `)])]),M.value?(r(),o(`p`,_e,l(M.value),1)):j.value?(r(),o(`p`,ve,`加载中…`)):A.value?(r(),o(`div`,ye,[a(`div`,be,[te(de,{detail:A.value,"show-recommend":!1},null,8,[`detail`]),a(`div`,xe,[a(`div`,Se,[t[3]||=a(`label`,{class:`form-label`},`商业计划书`,-1),K.value?(r(),o(`p`,Ce,[a(`a`,{role:`button`,href:`#`,class:u([`text-danger text-decoration-none`,{"pe-none opacity-75":X.value!=null}]),onClick:t[0]||=d(e=>Z(K.value),[`prevent`])},l(X.value===K.value.id?`下载中… ${K.value.original_name}`:K.value.original_name),3)])):(r(),o(`p`,we,`—`))]),a(`div`,Te,[t[4]||=a(`label`,{class:`form-label`},`其他佐证材料`,-1),q.value.length?(r(),o(`ul`,Ee,[(r(!0),o(c,null,s(q.value,e=>(r(),o(`li`,{key:e.id},[a(`a`,{role:`button`,href:`#`,class:u([`text-danger text-decoration-none`,{"pe-none opacity-75":X.value!=null}]),onClick:d(t=>Z(e),[`prevent`])},l(X.value===e.id?`下载中… ${e.original_name}`:e.original_name),11,De)]))),128))])):(r(),o(`p`,Oe,`—`))]),a(`div`,ke,[t[6]||=a(`label`,{class:`form-label`},`参赛承诺书`,-1),a(`p`,b,[A.value.promise_signed?(r(),o(c,{key:0},[t[5]||=a(`button`,{type:`button`,class:`btn btn-link btn-sm p-0 align-baseline text-danger`,"data-bs-toggle":`modal`,"data-bs-target":`#reviewerPledgeModal`},` 已签署 · 查看承诺书与签名 `,-1),a(`span`,x,`日期:`+l(N.value),1)],64)):(r(),o(c,{key:1},[i(`未签署`)],64))])]),a(`div`,S,[a(`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},l(A.value.score_is_pending?`项目评分`:`修改项目评分`),9,C),A.value.scoring_allowed?A.value.my_review_score?(r(),o(`span`,Ae,`最近保存:`+l(A.value.my_review_score.updated_at)+` · 项目得分 `+l(V(Number(A.value.my_review_score.line_total).toFixed(2)))+` 分`,1)):m(``,!0):(r(),o(`span`,w,l(A.value.scoring_blocked_reason||`该赛道未配置打分表,暂不可评审`),1))])])])])):m(``,!0),a(`div`,je,[a(`div`,Me,[a(`div`,Ne,[a(`div`,Pe,[A.value?(r(),o(`div`,Fe,[a(`h1`,Ie,l(mt.value),1),a(`div`,Le,[A.value.pledge_content_html?.trim()?(r(),o(`div`,{key:0,class:`promise-doc-body promise-doc-body--rich`,innerHTML:A.value.pledge_content_html},null,8,Re)):(r(),o(`div`,ze,[...t[7]||=[a(`p`,{class:`text-secondary mb-0`},`本场赛事未配置承诺书正文(可在管理端赛事中心维护)。`,-1)]]))]),A.value.promise_signed?(r(),o(`div`,Be,[a(`div`,Ve,[t[8]||=a(`span`,{class:`promise-doc-signlabel`},`参赛人签名:`,-1),J.value?(r(),o(`img`,{key:0,src:J.value,alt:``,class:`reviewer-promise-sig-img`,loading:`lazy`},null,8,He)):(r(),o(`span`,Ue,`暂无`))]),a(`div`,We,[a(`span`,Ge,[t[9]||=i(`日期:`,-1),a(`strong`,null,l(N.value),1)])])])):m(``,!0)])):m(``,!0),t[10]||=a(`div`,{class:`promise-sign-actions`},[a(`button`,{type:`button`,class:`btn btn-light notice-cancel-btn`,"data-bs-dismiss":`modal`},`关闭`)],-1)])])])]),a(`div`,Ke,[a(`div`,qe,[a(`div`,Je,[a(`div`,Ye,[a(`h5`,Xe,l(A.value?.scoring_sheet?.title||`项目评分`),1),t[11]||=a(`button`,{type:`button`,class:`btn-close scoring-modal-close`,"data-bs-dismiss":`modal`,"aria-label":`关闭`},null,-1)]),a(`div`,Ze,[t[15]||=a(`p`,{class:`small text-secondary mb-2 text-center scoring-modal-hint`},` 下表为评审参考;请在底部填写项目总分(0~100,最多两位小数,可为 0)。 `,-1),G.value?(r(),o(`p`,Qe,l(G.value),1)):m(``,!0),a(`div`,$e,[a(`table`,et,[t[12]||=a(`colgroup`,null,[a(`col`,{class:`col-seq`}),a(`col`,{class:`col-category`}),a(`col`,{class:`col-indicator`}),a(`col`,{class:`col-criteria`}),a(`col`,{class:`col-max`})],-1),t[13]||=a(`thead`,null,[a(`tr`,null,[a(`th`,{class:`text-nowrap text-center`},`序号`),a(`th`,{class:`text-nowrap text-center`},`指标分类`),a(`th`,{class:`text-nowrap text-center`},`评审指标`),a(`th`,{class:`text-center`},`核心评审要素(评委打分依据)`),a(`th`,{class:`text-nowrap text-center`},`分值`)])],-1),a(`tbody`,null,[(r(!0),o(c,null,s(vt.value,e=>(r(),o(`tr`,{key:e.item.key},[a(`td`,tt,l(e.item.sort||e.idx+1),1),e.categoryRowspan>0?(r(),o(`td`,{key:0,rowspan:e.categoryRowspan,class:`text-center scoring-category`},l(e.item.category),9,nt)):m(``,!0),a(`td`,rt,l(e.item.title),1),a(`td`,it,l(e.item.criteria||`—`),1),a(`td`,at,l(H(e.item.max_score)),1)]))),128))])])]),a(`div`,ot,[t[14]||=a(`label`,{class:`form-label mb-1 fw-semibold`,for:`reviewer-total-score-input`},`项目总分`,-1),a(`div`,st,[ne(a(`input`,{id:`reviewer-total-score-input`,"onUpdate:modelValue":t[1]||=e=>z.value=e,class:u([`form-control scoring-total-input text-center`,{"is-invalid":!!W()}]),type:`text`,inputmode:`decimal`,autocomplete:`off`,placeholder:`请输入总分`,"aria-label":`项目总分`,onBlur:yt,onKeydown:re(d($,[`prevent`]),[`enter`])},null,42,ct),[[ee,z.value]]),a(`span`,lt,`满分 `+l(H(gt.value)),1)]),W()?(r(),o(`div`,T,l(W()),1)):m(``,!0)])]),a(`div`,ut,[t[16]||=a(`button`,{type:`button`,class:`btn btn-secondary`,"data-bs-dismiss":`modal`},`取消`,-1),a(`button`,{type:`button`,class:`btn btn-primary`,style:{"background-color":`var(--primary, #109bd3)`,"border-color":`var(--primary, #109bd3)`},disabled:F.value,onClick:$},l(F.value?`提交中…`:`确认提交`),9,dt)])])])])]))}}),[[`__scopeId`,`data-v-75c810e2`]]);export{D as default}; |