editor.DjTAqo0R.js 12 KB

1
  1. import{E as k,S as T,ag as Y}from"./index.CL7yl-Wb.js";import{k as Z,e as $,b as ee,c as te,d as oe,U as le}from"./api.RkBqaXeZ.js";import{a as se,r as V,w as I,_ as ne,q as ie,aj as c,J as x,o as d,K as m,b as l,c as f,M as E,S as r,P as w,a9 as C,R as U,G as ae,Q as R,u as re}from"./vue.D1BjjNmv.js";import{_ as de}from"./_plugin-vue_export-helper.DlAUqK2U.js";const ue={class:"question-form"},me={class:"form-item"},pe={class:"form-item"},ce={class:"form-item"},fe={class:"competency-config"},ge={class:"tag-name"},_e={class:"form-tip"},ve={class:"form-item"},ye={key:0,class:"form-item"},xe={key:1,class:"form-item"},we=["onClick"],be={style:{display:"flex","justify-content":"space-between","margin-top":"10px"}},Ve={class:"form-item"},qe={class:"form-item"},he={key:2,class:"form-item"},ke={class:"form-item"},Ce={class:"form-item"},Ue={class:"dialog-footer"},De=se({__name:"editor",props:{questionId:{type:[String,Number],default:""}},setup(S,{expose:j}){const q=S,b=V(!1);I(()=>b.value,n=>{n&&q.questionId&&L(q.questionId)});const L=async n=>{var e;if(n)try{const o=await Z({question_id:n});if((o==null?void 0:o.code)===2e3&&o.data){const i=o.data;t.content=i.question||"",t.type=i.question_form===1?"single":i.question_form===2?"multiple":i.question_form===6?"fill":"open",t.position=i.position_types||[],t.category=i.category_id||"",t.tags=i.tags||[];const a=i.competency_tags||[];t.competency_tags=a,t.question_form=i.question_form,t.suggestedDuration=i.recommended_duration||0,t.scoring_reference=i.scoring_reference||"",t.is_required_correct=i.is_required_correct,t.follow_up_count=i.follow_up_count||1,h.value=a.map(u=>u.id),t.options=((e=i.options)==null?void 0:e.map(u=>(u&&(u.text=u.option_text),u)))||[]}else k.warning("未找到问题详情数据")}catch(o){console.error("获取问题详情失败:",o),k.error(o.message||"获取问题详情失败")}};I(()=>q.questionId,n=>{console.log(n),L(n)},{immediate:!0}),ie(async()=>{try{const n=await $({page:1,limit:1e3});console.log(n),n&&n.code===2e3&&n.data&&(O.value=n.data.items.map(a=>({id:a.id,name:a.name,weight:0})));const e=await ee({page:1,limit:50,tenant_id:T.get("tenant_id")});e&&e.code===2e3&&e.data&&(B.value=e.data.map(a=>({value:a.id,label:a.title})));const o=await te({page:1,limit:50,tenant_id:T.get("tenant_id")});o&&o.code===2e3&&o.data.items&&(Q.value=o.data.items.map(a=>({value:a.id,label:a.name})));const i=await oe({page:1,limit:50,tenant_id:T.get("tenant_id")});i&&i.code===2e3&&i.data.items&&(W.value=i.data.items.map(a=>({value:a.id,label:a.name})))}catch(n){console.error("加载选项数据失败:",n),k.error("加载选项数据失败")}});const t=ne({content:"",type:"open",position:[],category:"",tags:[],competency_tags:[],options:[],question_form:0,suggestedDuration:0,scoring_reference:"",is_required_correct:!1,follow_up_count:1,blank_answer_template:[]}),h=V([]),O=V([]);I(()=>h.value,n=>{if(n&&(t.competency_tags=n.map(e=>{const o=O.value.find(i=>i.id===e);return{id:(o==null?void 0:o.id)||0,name:(o==null?void 0:o.name)||"",weight:(o==null?void 0:o.weight)||0}}),t.competency_tags.length>0)){const e=Math.floor(100/t.competency_tags.length),o=100-e*t.competency_tags.length;t.competency_tags.forEach((i,a)=>{i.weight=e+(a===0?o:0)})}});const B=V([]),Q=V([]),W=V([]),G=()=>t.competency_tags.reduce((n,e)=>n+(e.weight||0),0),F=(n,e)=>{const o=t.competency_tags;if(!o||o.length<=1)return;const i=o[n].weight,a=e-i;if(a===0)return;const u=o.reduce((p,_,v)=>v!==n?p+_.weight:p,0);if(u===0){const p=100-e,_=Math.floor(p/(o.length-1)),v=p-_*(o.length-1);o.forEach((M,y)=>{y!==n&&(M.weight=_+(y===0?v:0))})}else o.forEach((p,_)=>{if(_!==n){const v=p.weight/u;p.weight=Math.max(0,Math.round(p.weight-a*v))}})},z=n=>{t.question_form=n==="single"?1:n==="multiple"?2:0,n==="single"||n==="multiple"?(!t.options||t.options.length===0)&&(t.options=[{text:"",is_correct:!1,sort:1},{text:"",is_correct:!1,sort:2}]):n==="open"?(t.question_form=0,t.follow_up_count===void 0&&(t.follow_up_count=1)):t.blank_answer_template=[{blank_index:1,correct_answer:"",score:5}]},A=n=>{t.question_form===1&&t.options.forEach((e,o)=>{e.is_correct=o===n})},P=()=>{const n=t.options.length>0?Math.max(...t.options.map(e=>e.sort||0))+1:1;t.options.push({text:"",is_correct:!1,sort:n})},J=()=>{t.options&&t.options.length>2&&t.options.pop()},N=()=>{t.content="",t.type="open",t.position=[],t.category="",t.tags=[],t.competency_tags=[],t.options=[],t.suggestedDuration=0,t.scoring_reference="",t.is_required_correct=!1,t.follow_up_count=1,t.blank_answer_template=[],h.value=[]},K=()=>{N(),b.value=!1},H=async()=>{var n;try{const e={id:q.questionId,question:t.content,question_form:t.question_form,position_types:t.position,category_id:t.category,tags:t.tags,competency_tags:t.competency_tags,recommended_duration:t.suggestedDuration,scoring_reference:t.scoring_reference,is_required_correct:t.is_required_correct,follow_up_count:t.follow_up_count,options:(n=t.options)==null?void 0:n.map(o=>(o&&(o.option_text=o.text),o))};try{const o=await le(e);if(o&&o.code===2e3)k.success(q.questionId?"编辑成功":"添加成功"),b.value=!1,window.dispatchEvent(new CustomEvent("refreshQuestionList"));else throw new Error(o.msg||"保存失败")}catch(o){throw new Error(o.message||"保存失败")}}catch(e){console.error("保存问题失败:",e),k.error(e.message||"保存失败")}};return j({showQuestionDialog:b}),(n,e)=>{const o=c("el-input"),i=c("el-option"),a=c("el-select"),u=c("el-input-number"),p=c("el-icon"),_=c("el-radio"),v=c("el-checkbox"),M=c("el-tooltip"),y=c("el-button"),X=c("el-dialog");return d(),x(X,{title:"编辑问题",modelValue:b.value,"onUpdate:modelValue":e[9]||(e[9]=s=>b.value=s),width:"500px","close-on-click-modal":!1,class:"question-dialog",onClose:N},{footer:m(()=>[l("span",Ue,[r(y,{onClick:K},{default:m(()=>e[37]||(e[37]=[w("取消")])),_:1}),r(y,{type:"primary",onClick:H},{default:m(()=>e[38]||(e[38]=[w("确认")])),_:1})])]),default:m(()=>[l("div",ue,[l("div",me,[e[10]||(e[10]=l("div",{class:"form-label"},[w(" 题目内容"),l("span",{class:"required"},"*")],-1)),r(o,{modelValue:t.content,"onUpdate:modelValue":e[0]||(e[0]=s=>t.content=s),type:"textarea",rows:"4",placeholder:"请描述一次你如何在紧迫的时间内完成一个复杂的后端开发任务的经历",maxlength:"300","show-word-limit":""},null,8,["modelValue"])]),l("div",pe,[e[11]||(e[11]=l("div",{class:"form-label"},"胜任力标签",-1)),r(a,{modelValue:h.value,"onUpdate:modelValue":e[1]||(e[1]=s=>h.value=s),placeholder:"请选择胜任力标签",class:"full-width",multiple:""},{default:m(()=>[(d(!0),f(U,null,C(O.value,s=>(d(),x(i,{key:s.id,label:s.name,value:s.id},null,8,["label","value"]))),128))]),_:1},8,["modelValue"]),e[12]||(e[12]=l("div",{class:"form-tip"},"选择胜任力标签和胜任力标签,可多选",-1))]),l("div",ce,[e[18]||(e[18]=l("div",{class:"form-label"}," 胜任力配置 ",-1)),l("div",fe,[e[14]||(e[14]=l("div",{class:"config-row"},[l("span",{class:"config-label"},"标签"),l("span",{class:"config-label"},"权重")],-1)),(d(!0),f(U,null,C(t.competency_tags,(s,D)=>(d(),f("div",{class:"config-row",key:s.id},[l("span",ge,R(s.name),1),r(u,{modelValue:s.weight,"onUpdate:modelValue":g=>s.weight=g,min:0,max:100,step:1,"controls-position":"right",onChange:g=>F(D,g)},null,8,["modelValue","onUpdate:modelValue","onChange"]),e[13]||(e[13]=w(" % "))]))),128))]),l("div",_e,[e[15]||(e[15]=w(" 配置各个胜任力标签的权重,总和需要100% ")),l("span",{class:ae(["weight-sum",{"weight-error":G()!==100}])}," (当前总计: "+R(G())+"%) ",3),e[16]||(e[16]=l("br",null,null,-1)),r(p,{style:{color:"#409eff","margin-right":"4px","margin-top":"4px"}},{default:m(()=>[r(re(Y))]),_:1}),e[17]||(e[17]=l("span",{style:{color:"#909399","font-size":"11px"}},' 修改任意权重时,其他权重会自动按比例调整以保持总和为100%。点击"平均分配"可快速平均分配所有权重。 ',-1))])]),l("div",ve,[e[19]||(e[19]=l("div",{class:"form-label"},"题目形式",-1)),r(a,{modelValue:t.type,"onUpdate:modelValue":e[2]||(e[2]=s=>t.type=s),placeholder:"开放问题",class:"full-width",onChange:z},{default:m(()=>[r(i,{label:"开放问题",value:"open"}),r(i,{label:"单选题",value:"single"}),r(i,{label:"多选题",value:"multiple"}),r(i,{label:"填空题",value:"fill"}),r(i,{label:"自言语",value:"self"})]),_:1},8,["modelValue"]),e[20]||(e[20]=l("div",{class:"form-tip"},"选择题目的形式:开放问题、单选题、多选题、填空题、自言语",-1))]),t.question_form===0?(d(),f("div",ye,[e[21]||(e[21]=l("div",{class:"form-label"},"追问次数",-1)),r(u,{modelValue:t.follow_up_count,"onUpdate:modelValue":e[3]||(e[3]=s=>t.follow_up_count=s),min:1,max:2,step:1,precision:0,placeholder:"请输入追问次数",class:"full-width"},null,8,["modelValue"]),e[22]||(e[22]=l("div",{class:"form-tip"},"设置开放问题的追问次数,范围为1-2次",-1))])):E("",!0),t.question_form===1||t.question_form===2?(d(),f("div",xe,[e[26]||(e[26]=l("div",{class:"form-label"},"选项",-1)),l("div",null,[e[25]||(e[25]=l("div",{class:"option-header",style:{display:"flex","margin-bottom":"10px","font-weight":"bold"}},[l("span",{style:{flex:"1"}},"选项内容"),l("span",{style:{width:"80px","text-align":"center"}},"是否正确")],-1)),(d(!0),f(U,null,C(t.options,(s,D)=>(d(),f("div",{key:D,class:"option-item",style:{display:"flex","align-items":"center","margin-bottom":"10px"}},[r(o,{modelValue:s.text,"onUpdate:modelValue":g=>s.text=g,placeholder:"请输入选项内容",style:{flex:"1","margin-right":"10px"}},null,8,["modelValue","onUpdate:modelValue"]),r(M,{content:"设置为正确答案",placement:"top",effect:"light"},{default:m(()=>[l("div",{onClick:()=>A(D),style:{cursor:"pointer",width:"80px","text-align":"center"}},[t.question_form===1?(d(),x(_,{key:0,modelValue:s.is_correct,"onUpdate:modelValue":g=>s.is_correct=g,label:!0},null,8,["modelValue","onUpdate:modelValue"])):(d(),x(v,{key:1,modelValue:s.is_correct,"onUpdate:modelValue":g=>s.is_correct=g},null,8,["modelValue","onUpdate:modelValue"]))],8,we)]),_:2},1024)]))),128)),l("div",be,[r(y,{type:"primary",onClick:P},{default:m(()=>e[23]||(e[23]=[w(" 添加选项 ")])),_:1}),t.options&&t.options.length>2?(d(),x(y,{key:0,type:"danger",onClick:J},{default:m(()=>e[24]||(e[24]=[w(" 删除最后一项 ")])),_:1})):E("",!0)])]),e[27]||(e[27]=l("div",{class:"form-tip"},"添加选项并设置正确答案,单选题只能有一个正确答案,多选题可以有多个正确答案",-1))])):E("",!0),l("div",Ve,[e[28]||(e[28]=l("div",{class:"form-label"},"分类",-1)),r(a,{modelValue:t.category,"onUpdate:modelValue":e[4]||(e[4]=s=>t.category=s),placeholder:"请选择题目分类",class:"full-width"},{default:m(()=>[(d(!0),f(U,null,C(Q.value,s=>(d(),x(i,{key:s.value,label:s.label,value:s.value},null,8,["label","value"]))),128))]),_:1},8,["modelValue"]),e[29]||(e[29]=l("div",{class:"form-tip"},"选择题目所属分类",-1))]),l("div",qe,[e[30]||(e[30]=l("div",{class:"form-label"},"标签",-1)),r(a,{modelValue:t.tags,"onUpdate:modelValue":e[5]||(e[5]=s=>t.tags=s),placeholder:"请选择标签",class:"full-width",multiple:""},{default:m(()=>[(d(!0),f(U,null,C(W.value,s=>(d(),x(i,{key:s.value,label:s.label,value:s.value},null,8,["label","value"]))),128))]),_:1},8,["modelValue"]),e[31]||(e[31]=l("div",{class:"form-tip"},"选择题目相关标签,可多选",-1))]),t.question_form===1?(d(),f("div",he,[e[32]||(e[32]=l("div",{class:"form-label"},"是否为红线题",-1)),r(a,{modelValue:t.is_required_correct,"onUpdate:modelValue":e[6]||(e[6]=s=>t.is_required_correct=s),placeholder:"请选择是否为红线问题",style:{width:"100%"}},{default:m(()=>[r(i,{label:"否",value:!1}),r(i,{label:"是",value:!0})]),_:1},8,["modelValue"])])):E("",!0),l("div",ke,[e[33]||(e[33]=l("div",{class:"form-label"},"建议时长(秒)",-1)),r(u,{modelValue:t.suggestedDuration,"onUpdate:modelValue":e[7]||(e[7]=s=>t.suggestedDuration=s),min:0,step:1,"controls-position":"right",placeholder:"请输入建议回答时长",class:"full-width"},null,8,["modelValue"]),e[34]||(e[34]=l("div",{class:"form-tip"},"建议回答题目的时长,单位为秒",-1))]),l("div",Ce,[e[35]||(e[35]=l("div",{class:"form-label"},"评价标准",-1)),r(o,{modelValue:t.scoring_reference,"onUpdate:modelValue":e[8]||(e[8]=s=>t.scoring_reference=s),type:"textarea",rows:"4",placeholder:"评分标准说明,例如:【团队协作能力】1.优秀:xxxxxx。2.xxxx。3.一般:xxxxx。",class:"full-width"},null,8,["modelValue"]),e[36]||(e[36]=l("div",{class:"form-tip"},"评分标准说明,例如:【团队协作能力】1.优秀:xxxxxx。2.xxxx。3.一般:xxxxx。",-1))])])]),_:1},8,["modelValue"])}}}),Ie=de(De,[["__scopeId","data-v-2146929c"]]);export{Ie as default};