|
|
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{C as ie,S as ae,w as oe,x as g}from"./api-rQwE0AaH.js";import{S as _,f as v,l as se,u as ce}from"./index-CTTi3enD.js";import{t as y}from"./_plugin-vue_export-helper-CXTkFu_Z.js";import{t as le}from"./ApplicationSignupDetailFields-CTZXV9CB.js";import{i as b,n as x,r as ue,t as de}from"./listPageState-DCKW-cgV.js";var fe={class:`container-fluid p-3 p-md-4 reviewer-detail-page`},pe={class:`d-flex justify-content-between align-items-center flex-wrap gap-2 mb-3`},me={class:`d-flex align-items-center gap-2 flex-wrap`},he={key:0,class:`alert alert-warning py-2 small`,role:`alert`},ge={key:1,class:`small text-secondary`},_e={key:2,class:`card mb-4 border-0 shadow-sm`},ve={class:`card-body pb-4`},ye={class:`row g-3 mt-1`},be={class:`col-12`},xe={key:0,class:`form-control-plaintext border rounded px-3 py-2 mb-0 bg-light small text-secondary`},Se={key:1,class:`form-control-plaintext border rounded px-3 py-2 mb-0 bg-light small text-secondary`},Ce={class:`col-12`},we={key:0,class:`list-unstyled mb-0 border rounded px-3 py-2 bg-light small`},Te=[`onClick`],Ee={key:1,class:`form-control-plaintext border rounded px-3 py-2 mb-0 bg-light small text-secondary`},De={class:`col-12`},Oe={class:`form-control-plaintext border rounded px-3 py-2 mb-0 bg-light small text-secondary`},S={class:`text-secondary ms-2`},C={class:`col-12 pt-3 mt-2 border-top d-flex flex-wrap gap-2 align-items-center reviewer-score-action-bar`},w=[`disabled`],T={key:0,class:`small text-danger`},ke={key:1,class:`small text-secondary`},Ae={id:`reviewerPledgeModal`,class:`modal fade`,tabindex:`-1`,"aria-labelledby":`reviewerPledgeDocHeading`,"aria-hidden":`true`},je={class:`modal-dialog modal-dialog-centered modal-dialog-scrollable reviewer-detail-modal reviewer-detail-modal--pledge`},Me={class:`modal-content promise-sign-sheet`},Ne={class:`modal-body pt-2`},Pe={key:0,class:`promise-doc-paper`},Fe={id:`reviewerPledgeDocHeading`,class:`promise-doc-heading text-center`},Ie={class:`promise-doc-scroll`},Le=[`innerHTML`],Re={key:1,class:`promise-doc-body promise-doc-body--rich`},ze={key:0,class:`promise-doc-signblock`},Be={class:`reviewer-pledge-sig-row`},Ve=[`src`],He={key:1,class:`small text-secondary`},Ue={class:`promise-doc-daterow`},We={class:`promise-doc-dateline`},Ge={id:`reviewerScoreModal`,class:`modal fade`,tabindex:`-1`,"aria-labelledby":`reviewerScoreModalLabel`,"aria-hidden":`true`},Ke={class:`modal-dialog modal-dialog-centered modal-dialog-scrollable reviewer-detail-modal reviewer-detail-modal--score`},qe={class:`modal-content`},Je={class:`modal-header scoring-modal-header`},Ye={id:`reviewerScoreModalLabel`,class:`modal-title scoring-modal-title w-100 text-center`},Xe={class:`modal-body`},Ze={class:`small text-secondary mb-2 text-center scoring-modal-hint`},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`},E={class:`scoring-total-block`},ot={class:`scoring-total-row-inner`},st=[`onKeydown`],ct={class:`scoring-total-full small text-secondary`},lt={key:0,class:`invalid-feedback d-block`},ut={class:`modal-footer flex-wrap gap-2`},dt=[`disabled`],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()),ft=i(`reviewerCompetitionName`,s(``)),pt=l(()=>{let e=ft.value.trim();return e?`${e} 赛事承诺书`:`赛事承诺书`});function mt(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(()=>mt(A.value?.promise_signed_at)),P=s(``),F=s(!1),I=s(!1),L=s(!1),R=l(()=>Number(A.value?.scoring_sheet?.full_score??100)||100);function z(){return String(P.value??``).trim()}let B=l({get:()=>P.value,set:e=>{P.value=(e==null?``:String(e)).replace(/[^\d.-]/g,``).replace(/(?!^)-/g,``).replace(/(\..*)\./g,`$1`)}});function V(){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):``,i=Number(r);P.value=Number.isFinite(i)?H(i.toFixed(4)):``,I.value=!1,L.value=!1}c(A,()=>V(),{deep:!0});function H(e){return e.replace(/\.?0+$/,``)}function U(e){return H(Number(e).toFixed(4))}let W=l(()=>A.value?.scoring_sheet?.items??[]),ht=l(()=>{let e=W.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 G(){let e=z();if(e===``)return L.value||I.value?`请填写项目总分`:null;let t=Number(e);return Number.isFinite(t)?t<0?`不能小于 0`:t>R.value?`不得超过 ${U(R.value)} 分`:null:`须为数字`}function gt(){I.value=!0}let _t=l(()=>{if(!A.value?.scoring_allowed||!W.value.length)return!1;let e=z();if(e===``)return!1;let t=Number(e);return Number.isFinite(t)&&t>=0&&t<=R.value}),K=l(()=>{if(!W.value.length)return``;let e=G();return e&&(L.value||I.value||z()!==``)?e:``}),vt=l(()=>{let e=A.value;return e?`项目编号:${e.project_code} · ${e.score_display}`:``}),q=l(()=>A.value?.files.find(e=>e.kind===`plan`)??null),J=l(()=>A.value?.files.filter(e=>e.kind===`supporting`)??[]),Y=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 X(){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=ae(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 X()),a(()=>void X());function yt(){let e=O.value;if(!e){D.push(`/c`);return}let t=b(y.query.page,0),n=b(y.query.per_page,0),r={};if(t>0)r=x({page:t,perPage:n>0?n:15});else{let t=ue(de(`reviewer-projects`,e));t&&(r=x(t))}D.push({name:`reviewer-projects`,params:{slug:e},query:r})}async function Z(e){let t=k.value,n=O.value,{token:r}=g();if(!/^\d+$/.test(t)||!n||!r){v.warning(`未登录或参数无效`);return}let i=ie(parseInt(t,10),e.id,n);try{let t=await fetch(i,{headers:{Authorization:`Bearer ${r}`,Accept:`application/json,*/*`}});if(!t.ok){let e=`下载附件失败`;try{let n=await t.json();typeof n.message==`string`&&n.message.trim()&&(e=n.message.trim())}catch{}v.error(e);return}let n=await t.blob(),a=URL.createObjectURL(n),o=document.createElement(`a`);o.href=a,o.download=e.original_name?.trim()?e.original_name:`download`,o.rel=`noopener`,document.body.appendChild(o),o.click(),o.remove(),URL.revokeObjectURL(a)}catch{v.error(`网络错误,无法下载`)}}function bt(){let e=Number(z());return{line_total:Number.isFinite(e)?e:0}}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 xt(){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 St(){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||!W.value.length){v.warning(A.value?.scoring_blocked_reason||`该赛道未配置打分表,暂不可评审`);return}if(!_t.value){L.value=!0,v.warning(G()||`请填写 0~100 之间的项目总分`);return}F.value=!0;try{let r=bt(),i=oe(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 xt();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)),V(),v.success(typeof o.message==`string`?String(o.message):`提交成功`)}catch{v.error(`网络错误,提交失败`)}finally{F.value=!1}}return(i,a)=>(p(),m(`div`,fe,[h(`div`,pe,[a[2]||=h(`h5`,{class:`mb-0 section-title`},`项目详情`,-1),h(`div`,me,[A.value?(p(),m(`span`,{key:0,class:e([`status-pill`,A.value.score_is_pending?`status-pending`:`status-pass`])},d(vt.value),3)):t(``,!0),h(`button`,{type:`button`,class:`btn btn-sm btn-outline-secondary event-back-btn`,onClick:yt},` 返回列表 `)])]),M.value?(p(),m(`p`,he,d(M.value),1)):j.value?(p(),m(`p`,ge,`加载中…`)):A.value?(p(),m(`div`,_e,[h(`div`,ve,[r(le,{detail:A.value,"show-recommend":!1},null,8,[`detail`]),h(`div`,ye,[h(`div`,be,[a[3]||=h(`label`,{class:`form-label`},`商业计划书`,-1),q.value?(p(),m(`p`,xe,[h(`a`,{role:`button`,href:`#`,class:`text-danger text-decoration-none`,onClick:a[0]||=f(e=>Z(q.value),[`prevent`])},d(q.value.original_name),1)])):(p(),m(`p`,Se,`—`))]),h(`div`,Ce,[a[4]||=h(`label`,{class:`form-label`},`其他佐证材料`,-1),J.value.length?(p(),m(`ul`,we,[(p(!0),m(u,null,o(J.value,e=>(p(),m(`li`,{key:e.id},[h(`a`,{role:`button`,href:`#`,class:`text-danger text-decoration-none`,onClick:f(t=>Z(e),[`prevent`])},d(e.original_name),9,Te)]))),128))])):(p(),m(`p`,Ee,`—`))]),h(`div`,De,[a[6]||=h(`label`,{class:`form-label`},`参赛承诺书`,-1),h(`p`,Oe,[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`,S,`日期:`+d(N.value),1)],64)):(p(),m(u,{key:1},[n(`未签署`)],64))])]),h(`div`,C,[h(`button`,{type:`button`,class:`btn btn-primary px-4`,style:{"background-color":`var(--primary, #052d62)`,"border-color":`var(--primary, #052d62)`},disabled:!A.value.scoring_allowed,onClick:St},d(A.value.score_is_pending?`项目评分`:`修改项目评分`),9,w),A.value.scoring_allowed?A.value.my_review_score?(p(),m(`span`,ke,`最近保存:`+d(A.value.my_review_score.updated_at)+` · 项目得分 `+d(H(Number(A.value.my_review_score.line_total).toFixed(4)))+` 分`,1)):t(``,!0):(p(),m(`span`,T,d(A.value.scoring_blocked_reason||`该赛道未配置打分表,暂不可评审`),1))])])])])):t(``,!0),h(`div`,Ae,[h(`div`,je,[h(`div`,Me,[h(`div`,Ne,[A.value?(p(),m(`div`,Pe,[h(`h1`,Fe,d(pt.value),1),h(`div`,Ie,[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,Le)):(p(),m(`div`,Re,[...a[7]||=[h(`p`,{class:`text-secondary mb-0`},`本场赛事未配置承诺书正文(可在管理端赛事中心维护)。`,-1)]]))]),A.value.promise_signed?(p(),m(`div`,ze,[h(`div`,Be,[a[8]||=h(`span`,{class:`promise-doc-signlabel`},`参赛人签名:`,-1),Y.value?(p(),m(`img`,{key:0,src:Y.value,alt:``,class:`reviewer-promise-sig-img`,loading:`lazy`},null,8,Ve)):(p(),m(`span`,He,`暂无`))]),h(`div`,Ue,[h(`span`,We,[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`,Ge,[h(`div`,Ke,[h(`div`,qe,[h(`div`,Je,[h(`h5`,Ye,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`,Xe,[h(`p`,Ze,` 下表为评审参考;请在底部填写项目总分(0~`+d(U(R.value))+`,可为 0)。 `,1),K.value?(p(),m(`p`,Qe,d(K.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(ht.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(U(e.item.max_score)),1)]))),128))])])]),h(`div`,E,[a[14]||=h(`label`,{class:`form-label mb-1 fw-semibold`,for:`reviewer-total-score-input`},`项目总分`,-1),h(`div`,ot,[ee(h(`input`,{id:`reviewer-total-score-input`,"onUpdate:modelValue":a[1]||=e=>B.value=e,class:e([`form-control scoring-total-input text-center`,{"is-invalid":!!G()}]),type:`text`,inputmode:`decimal`,autocomplete:`off`,placeholder:`请输入总分`,"aria-label":`项目总分`,onBlur:gt,onKeydown:re(f($,[`prevent`]),[`enter`])},null,42,st),[[te,B.value]]),h(`span`,ct,`满分 `+d(U(R.value)),1)]),G()?(p(),m(`div`,lt,d(G()),1)):t(``,!0)])]),h(`div`,ut,[a[15]||=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, #052d62)`,"border-color":`var(--primary, #052d62)`},disabled:F.value,onClick:$},d(F.value?`提交中…`:`确认提交`),9,dt)])])])])]))}}),[[`__scopeId`,`data-v-19708cd3`]]);export{D as default}; |