@qxs-bns/components 0.0.48 → 0.0.49

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (177) hide show
  1. package/es/index.css +5 -5
  2. package/es/package.json.mjs +1 -1
  3. package/es/src/data-chart/src/components/area.vue2.mjs.map +1 -1
  4. package/es/src/data-chart/src/components/bar.vue.mjs +1 -1
  5. package/es/src/data-chart/src/components/bar.vue.mjs.map +1 -1
  6. package/es/src/data-chart/src/components/card.vue2.mjs.map +1 -1
  7. package/es/src/data-chart/src/components/empty.svg.mjs +1 -1
  8. package/es/src/data-chart/src/components/empty.svg.mjs.map +1 -1
  9. package/es/src/data-chart/src/components/empty.vue.mjs +1 -1
  10. package/es/src/data-chart/src/components/empty.vue.mjs.map +1 -1
  11. package/es/src/data-chart/src/components/funnel.vue.mjs +1 -1
  12. package/es/src/data-chart/src/components/funnel.vue.mjs.map +1 -1
  13. package/es/src/data-chart/src/components/line.vue2.mjs +1 -1
  14. package/es/src/data-chart/src/components/line.vue2.mjs.map +1 -1
  15. package/es/src/data-chart/src/components/pie.vue.mjs +1 -1
  16. package/es/src/data-chart/src/components/pie.vue.mjs.map +1 -1
  17. package/es/src/data-chart/src/components/radar.vue.mjs +1 -1
  18. package/es/src/data-chart/src/components/radar.vue.mjs.map +1 -1
  19. package/es/src/data-chart/src/components/scatter-simple.vue.mjs +1 -1
  20. package/es/src/data-chart/src/components/scatter-simple.vue.mjs.map +1 -1
  21. package/es/src/data-chart/src/components/scatter.vue.mjs +1 -1
  22. package/es/src/data-chart/src/components/scatter.vue.mjs.map +1 -1
  23. package/es/src/data-chart/src/components/table.vue.mjs +1 -1
  24. package/es/src/data-chart/src/components/table.vue.mjs.map +1 -1
  25. package/es/src/data-chart/src/data-chart.vue.mjs +1 -1
  26. package/es/src/data-chart/src/data-chart.vue.mjs.map +1 -1
  27. package/es/src/data-chart/src/utils/config.mjs +1 -1
  28. package/es/src/data-chart/src/utils/config.mjs.map +1 -1
  29. package/es/src/data-chart/src/utils/safe-eval.mjs +2 -0
  30. package/es/src/data-chart/src/utils/safe-eval.mjs.map +1 -0
  31. package/es/src/data-chart/src/utils/useCharts.mjs +1 -1
  32. package/es/src/data-chart/src/utils/useCharts.mjs.map +1 -1
  33. package/es/src/file-upload/src/file-upload.vue.mjs +1 -1
  34. package/es/src/file-upload/src/file-upload.vue.mjs.map +1 -1
  35. package/es/src/fixed-action-bar/src/fixed-action-bar.vue.mjs +1 -1
  36. package/es/src/fixed-action-bar/src/fixed-action-bar.vue.mjs.map +1 -1
  37. package/es/src/image-upload/src/image-upload.vue.mjs +1 -1
  38. package/es/src/image-upload/src/image-upload.vue.mjs.map +1 -1
  39. package/es/src/photo-crop-tool/src/photo-crop-tool.vue.mjs.map +1 -1
  40. package/es/src/subject-action/index.mjs.map +1 -1
  41. package/es/src/subject-action/src/subject-action.vue.mjs +1 -1
  42. package/es/src/subject-action/src/subject-action.vue.mjs.map +1 -1
  43. package/es/src/subject-layout/index.mjs.map +1 -1
  44. package/es/src/subject-layout/src/subject-layout.vue.mjs.map +1 -1
  45. package/es/src/subject-list/src/components/SubjectPageEnd.vue.mjs +1 -1
  46. package/es/src/subject-list/src/components/SubjectPageEnd.vue.mjs.map +1 -1
  47. package/es/src/subject-list/src/components/SubjectRichText.vue.mjs +1 -1
  48. package/es/src/subject-list/src/components/SubjectRichText.vue.mjs.map +1 -1
  49. package/es/src/subject-list/src/components/subject-blank-fill.vue.mjs +1 -1
  50. package/es/src/subject-list/src/components/subject-blank-fill.vue.mjs.map +1 -1
  51. package/es/src/subject-list/src/components/subject-scale.vue.mjs +1 -1
  52. package/es/src/subject-list/src/components/subject-scale.vue.mjs.map +1 -1
  53. package/es/src/subject-list/src/components/subject-single.vue.mjs +1 -1
  54. package/es/src/subject-list/src/components/subject-single.vue.mjs.map +1 -1
  55. package/es/src/subject-list/src/components/subject-text-fill.vue.mjs +1 -1
  56. package/es/src/subject-list/src/components/subject-text-fill.vue.mjs.map +1 -1
  57. package/es/src/subject-list/src/subject-list.vue.mjs +1 -1
  58. package/es/src/subject-list/src/subject-list.vue.mjs.map +1 -1
  59. package/es/src/subject-type/index.mjs.map +1 -1
  60. package/es/src/subject-type/src/subject-type.vue.mjs.map +1 -1
  61. package/lib/index.css +5 -5
  62. package/lib/package.json.cjs +1 -1
  63. package/lib/src/data-chart/src/components/area.vue2.cjs.map +1 -1
  64. package/lib/src/data-chart/src/components/bar.vue.cjs +1 -1
  65. package/lib/src/data-chart/src/components/bar.vue.cjs.map +1 -1
  66. package/lib/src/data-chart/src/components/card.vue2.cjs.map +1 -1
  67. package/lib/src/data-chart/src/components/empty.svg.cjs +1 -1
  68. package/lib/src/data-chart/src/components/empty.svg.cjs.map +1 -1
  69. package/lib/src/data-chart/src/components/empty.vue.cjs +1 -1
  70. package/lib/src/data-chart/src/components/empty.vue.cjs.map +1 -1
  71. package/lib/src/data-chart/src/components/funnel.vue.cjs +1 -1
  72. package/lib/src/data-chart/src/components/funnel.vue.cjs.map +1 -1
  73. package/lib/src/data-chart/src/components/line.vue2.cjs +1 -1
  74. package/lib/src/data-chart/src/components/line.vue2.cjs.map +1 -1
  75. package/lib/src/data-chart/src/components/pie.vue.cjs +1 -1
  76. package/lib/src/data-chart/src/components/pie.vue.cjs.map +1 -1
  77. package/lib/src/data-chart/src/components/radar.vue.cjs +1 -1
  78. package/lib/src/data-chart/src/components/radar.vue.cjs.map +1 -1
  79. package/lib/src/data-chart/src/components/scatter-simple.vue.cjs +1 -1
  80. package/lib/src/data-chart/src/components/scatter-simple.vue.cjs.map +1 -1
  81. package/lib/src/data-chart/src/components/scatter.vue.cjs +1 -1
  82. package/lib/src/data-chart/src/components/scatter.vue.cjs.map +1 -1
  83. package/lib/src/data-chart/src/components/table.vue.cjs +1 -1
  84. package/lib/src/data-chart/src/components/table.vue.cjs.map +1 -1
  85. package/lib/src/data-chart/src/data-chart.vue.cjs +1 -1
  86. package/lib/src/data-chart/src/data-chart.vue.cjs.map +1 -1
  87. package/lib/src/data-chart/src/utils/config.cjs +1 -1
  88. package/lib/src/data-chart/src/utils/config.cjs.map +1 -1
  89. package/lib/src/data-chart/src/utils/safe-eval.cjs +2 -0
  90. package/lib/src/data-chart/src/utils/safe-eval.cjs.map +1 -0
  91. package/lib/src/data-chart/src/utils/useCharts.cjs +1 -1
  92. package/lib/src/data-chart/src/utils/useCharts.cjs.map +1 -1
  93. package/lib/src/file-upload/src/file-upload.vue.cjs +1 -1
  94. package/lib/src/file-upload/src/file-upload.vue.cjs.map +1 -1
  95. package/lib/src/fixed-action-bar/src/fixed-action-bar.vue.cjs +1 -1
  96. package/lib/src/fixed-action-bar/src/fixed-action-bar.vue.cjs.map +1 -1
  97. package/lib/src/image-upload/src/image-upload.vue.cjs +1 -1
  98. package/lib/src/image-upload/src/image-upload.vue.cjs.map +1 -1
  99. package/lib/src/photo-crop-tool/src/photo-crop-tool.vue.cjs.map +1 -1
  100. package/lib/src/subject-action/index.cjs.map +1 -1
  101. package/lib/src/subject-action/src/subject-action.vue.cjs +1 -1
  102. package/lib/src/subject-action/src/subject-action.vue.cjs.map +1 -1
  103. package/lib/src/subject-layout/index.cjs.map +1 -1
  104. package/lib/src/subject-layout/src/subject-layout.vue.cjs.map +1 -1
  105. package/lib/src/subject-list/src/components/SubjectPageEnd.vue.cjs +1 -1
  106. package/lib/src/subject-list/src/components/SubjectPageEnd.vue.cjs.map +1 -1
  107. package/lib/src/subject-list/src/components/SubjectRichText.vue.cjs +1 -1
  108. package/lib/src/subject-list/src/components/SubjectRichText.vue.cjs.map +1 -1
  109. package/lib/src/subject-list/src/components/subject-blank-fill.vue.cjs +1 -1
  110. package/lib/src/subject-list/src/components/subject-blank-fill.vue.cjs.map +1 -1
  111. package/lib/src/subject-list/src/components/subject-scale.vue.cjs +1 -1
  112. package/lib/src/subject-list/src/components/subject-scale.vue.cjs.map +1 -1
  113. package/lib/src/subject-list/src/components/subject-single.vue.cjs +1 -1
  114. package/lib/src/subject-list/src/components/subject-single.vue.cjs.map +1 -1
  115. package/lib/src/subject-list/src/components/subject-text-fill.vue.cjs +1 -1
  116. package/lib/src/subject-list/src/components/subject-text-fill.vue.cjs.map +1 -1
  117. package/lib/src/subject-list/src/subject-list.vue.cjs +1 -1
  118. package/lib/src/subject-list/src/subject-list.vue.cjs.map +1 -1
  119. package/lib/src/subject-type/index.cjs.map +1 -1
  120. package/lib/src/subject-type/src/subject-type.vue.cjs.map +1 -1
  121. package/package.json +4 -11
  122. package/theme-chalk/index.css +1 -1
  123. package/theme-chalk/src/base.scss +2 -2
  124. package/theme-chalk/src/fixed-action-bar.css +1 -1
  125. package/theme-chalk/src/fixed-action-bar.scss +1 -1
  126. package/theme-chalk/src/image-upload.css +1 -1
  127. package/theme-chalk/src/image-upload.scss +3 -1
  128. package/theme-chalk/src/subject-action.css +1 -1
  129. package/theme-chalk/src/subject-action.scss +3 -2
  130. package/theme-chalk/src/subject-layout.scss +19 -19
  131. package/theme-chalk/src/subject-list.css +1 -1
  132. package/theme-chalk/src/subject-list.scss +15 -14
  133. package/theme-chalk/src/tiny-mce-editor.scss +4 -2
  134. package/types/src/data-chart/src/components/area.vue.d.ts.map +1 -1
  135. package/types/src/data-chart/src/components/bar.vue.d.ts.map +1 -1
  136. package/types/src/data-chart/src/components/card.vue.d.ts.map +1 -1
  137. package/types/src/data-chart/src/components/empty.vue.d.ts.map +1 -1
  138. package/types/src/data-chart/src/components/funnel.vue.d.ts.map +1 -1
  139. package/types/src/data-chart/src/components/line.vue.d.ts.map +1 -1
  140. package/types/src/data-chart/src/components/pie.vue.d.ts +1 -1
  141. package/types/src/data-chart/src/components/pie.vue.d.ts.map +1 -1
  142. package/types/src/data-chart/src/components/radar.vue.d.ts.map +1 -1
  143. package/types/src/data-chart/src/components/scatter-simple.vue.d.ts.map +1 -1
  144. package/types/src/data-chart/src/components/scatter.vue.d.ts.map +1 -1
  145. package/types/src/data-chart/src/components/table.vue.d.ts.map +1 -1
  146. package/types/src/data-chart/src/data-chart.vue.d.ts.map +1 -1
  147. package/types/src/data-chart/src/utils/config.d.ts.map +1 -1
  148. package/types/src/data-chart/src/utils/safe-eval.d.ts +9 -0
  149. package/types/src/data-chart/src/utils/safe-eval.d.ts.map +1 -0
  150. package/types/src/data-chart/src/utils/useCharts.d.ts +4 -4
  151. package/types/src/data-chart/src/utils/useCharts.d.ts.map +1 -1
  152. package/types/src/file-upload/src/file-upload.vue.d.ts +5 -5
  153. package/types/src/file-upload/src/file-upload.vue.d.ts.map +1 -1
  154. package/types/src/fixed-action-bar/index.d.ts +3 -3
  155. package/types/src/fixed-action-bar/src/fixed-action-bar.vue.d.ts +1 -1
  156. package/types/src/fixed-action-bar/src/fixed-action-bar.vue.d.ts.map +1 -1
  157. package/types/src/image-upload/src/image-upload.vue.d.ts +6 -6
  158. package/types/src/image-upload/src/image-upload.vue.d.ts.map +1 -1
  159. package/types/src/photo-crop-tool/src/photo-crop-tool.vue.d.ts.map +1 -1
  160. package/types/src/subject-action/index.d.ts +11 -11
  161. package/types/src/subject-action/index.d.ts.map +1 -1
  162. package/types/src/subject-action/src/subject-action.vue.d.ts +10 -10
  163. package/types/src/subject-action/src/subject-action.vue.d.ts.map +1 -1
  164. package/types/src/subject-layout/index.d.ts +1 -1
  165. package/types/src/subject-layout/index.d.ts.map +1 -1
  166. package/types/src/subject-layout/src/subject-layout.vue.d.ts.map +1 -1
  167. package/types/src/subject-list/src/components/SubjectPageEnd.vue.d.ts.map +1 -1
  168. package/types/src/subject-list/src/components/SubjectRichText.vue.d.ts.map +1 -1
  169. package/types/src/subject-list/src/components/subject-blank-fill.vue.d.ts.map +1 -1
  170. package/types/src/subject-list/src/components/subject-scale.vue.d.ts.map +1 -1
  171. package/types/src/subject-list/src/components/subject-single.vue.d.ts.map +1 -1
  172. package/types/src/subject-list/src/components/subject-text-fill.vue.d.ts.map +1 -1
  173. package/types/src/subject-list/src/subject-list.vue.d.ts.map +1 -1
  174. package/types/src/subject-type/index.d.ts +1 -1
  175. package/types/src/subject-type/index.d.ts.map +1 -1
  176. package/types/src/subject-type/src/subject-type.vue.d.ts.map +1 -1
  177. package/types/tsconfig.tsbuildinfo +1 -1
@@ -1,2 +1,2 @@
1
- import{ElPopover as e,ElLink as l,ElCheckbox as t,ElButton as n,ElIcon as o,ElDialog as a,ElRadioGroup as s,ElRadio as i}from"element-plus/es";import"element-plus/es/components/base/style/index";import"element-plus/es/components/dialog/style/index";import"element-plus/es/components/radio-group/style/index";import"element-plus/es/components/radio/style/index";import"element-plus/es/components/button/style/index";import"element-plus/es/components/icon/style/index";import"element-plus/es/components/checkbox/style/index";import"element-plus/es/components/popover/style/index";import"element-plus/es/components/link/style/index";import{defineComponent as u,ref as d,computed as p,createElementBlock as m,openBlock as c,normalizeClass as r,unref as y,createElementVNode as f,createCommentVNode as v,createVNode as b,createBlock as k,withCtx as x,createTextVNode as h,isRef as _,Fragment as w,renderList as g,toDisplayString as V}from"vue";import{Edit as C,Delete as j,Top as O,Bottom as B}from"@element-plus/icons-vue";import{useNamespace as E}from"@qxs-bns/hooks";import T from"../../subject-type/src/subject-type.vue.mjs";const U={key:0,class:"flex-justify-between"},R={class:"flex-justify-between"},S={key:0,class:"has-set"},z={key:1,class:"flex flex-justify-end action-buttons"};var A=u({name:"QxsSubjectAction",__name:"subject-action",props:{isEdit:Boolean,isSet:{type:Boolean,default:!1},isKey:{type:Boolean,default:!1},answerCheckType:{type:Number,default:1},showOtherOption:{type:Boolean,default:!0},examAnswerRelationType:{type:Number,default:null},showRichText:{type:Boolean,default:!0},pageEnd:{type:Boolean,default:!1}},emits:["move-up","move-down","delete","save","edit","add","on-show-rich-text","set-key","set-answer-setting"],setup(u,{emit:A}){const K=u,N=d(K.isKey),q=d(!1),Q=A,D=d(K.answerCheckType),F=E("subject-action"),G=d(!0),H=[{value:2,label:"必须全部都是支持选项,方可下一步"},{value:1,label:"无需判断是否是支持选项"},{value:3,label:"包含全部支持选项,即可下一步"}],I=p((()=>H.find((e=>e.value===D.value))?.label));function J(){q.value=!1,Q("set-answer-setting",D.value)}function L(){Q("set-key",N.value)}function M(e,l){Q("add",e,l?K.examAnswerRelationType:null)}return(d,p)=>{const E=l,A=e,K=t,P=o,W=n,X=i,Y=s,Z=a;return c(),m("div",{class:r(y(F).e("action-exam"))},[f("div",{class:r(["action flex flex-justify-between",{active:u.isEdit}])},[v(" 编辑模式 "),u.isEdit?(c(),m("div",U,[b(A,{trigger:"click"},{reference:x((()=>[b(E,{type:"primary",class:"btn-margin"},{default:x((()=>p[15]||(p[15]=[h(" +在此题后加入新题")]))),_:1})])),default:x((()=>[b(T,{onSelect:M})])),_:1}),u.showRichText?(c(),k(E,{key:0,type:"primary",class:"btn-margin",onClick:p[0]||(p[0]=e=>Q("on-show-rich-text"))},{default:x((()=>p[16]||(p[16]=[h(" +添加题目描述(图文) ")]))),_:1})):v("v-if",!0),u.showOtherOption?(c(),k(E,{key:1,type:"primary",class:"btn-margin",onClick:p[1]||(p[1]=e=>q.value=!0)},{default:x((()=>p[17]||(p[17]=[h(" 答题设置 ")]))),_:1})):v("v-if",!0),u.showOtherOption?(c(),k(K,{key:2,modelValue:y(N),"onUpdate:modelValue":p[2]||(p[2]=e=>_(N)?N.value=e:null),label:"核心题",onChange:L},null,8,["modelValue"])):v("v-if",!0)])):(c(),m(w,{key:1},[v(" 非编辑模式 "),f("div",R,[u.showOtherOption?(c(),k(K,{key:0,modelValue:y(N),"onUpdate:modelValue":p[3]||(p[3]=e=>_(N)?N.value=e:null),label:"核心题",disabled:""},null,8,["modelValue"])):v("v-if",!0),u.showOtherOption?(c(),k(K,{key:1,modelValue:y(G),"onUpdate:modelValue":p[4]||(p[4]=e=>_(G)?G.value=e:null),label:y(I),disabled:"",class:"btn-margin"},null,8,["modelValue","label"])):v("v-if",!0)])],2112)),v(" 操作按钮 "),f("div",null,[u.isSet?(c(),m("div",S,"*此题设置了跳题逻辑")):(c(),m("div",z,[u.isEdit?(c(),m(w,{key:1},[b(W,{class:"btn-margin",onClick:p[9]||(p[9]=e=>Q("delete"))},{default:x((()=>p[22]||(p[22]=[h("删除")]))),_:1}),b(W,{type:"primary",onClick:p[10]||(p[10]=e=>Q("save"))},{default:x((()=>p[23]||(p[23]=[h("完成编辑")]))),_:1})],64)):(c(),m(w,{key:0},[u.pageEnd?v("v-if",!0):(c(),k(W,{key:0,onClick:p[5]||(p[5]=e=>Q("edit"))},{icon:x((()=>[b(P,null,{default:x((()=>[b(y(C))])),_:1})])),default:x((()=>[p[18]||(p[18]=h(" 编辑 "))])),_:1})),b(W,{onClick:p[6]||(p[6]=e=>Q("delete"))},{icon:x((()=>[b(P,null,{default:x((()=>[b(y(j))])),_:1})])),default:x((()=>[p[19]||(p[19]=h(" 删除 "))])),_:1}),b(W,{onClick:p[7]||(p[7]=e=>Q("move-up"))},{icon:x((()=>[b(P,null,{default:x((()=>[b(y(O))])),_:1})])),default:x((()=>[p[20]||(p[20]=h(" 上移 "))])),_:1}),b(W,{onClick:p[8]||(p[8]=e=>Q("move-down"))},{icon:x((()=>[b(P,null,{default:x((()=>[b(y(B))])),_:1})])),default:x((()=>[p[21]||(p[21]=h(" 下移 "))])),_:1})],64))]))]),v(" 答题设置弹窗 "),b(Z,{modelValue:y(q),"onUpdate:modelValue":p[13]||(p[13]=e=>_(q)?q.value=e:null),title:"答题设置",class:"customize-dialog",onClose:p[14]||(p[14]=e=>q.value=!1)},{footer:x((()=>[b(W,{class:"customize-button",type:"primary",plain:"",onClick:p[12]||(p[12]=e=>q.value=!1)},{default:x((()=>p[24]||(p[24]=[h(" 取消 ")]))),_:1}),b(W,{class:"customize-button",type:"primary",plain:"",onClick:J},{default:x((()=>p[25]||(p[25]=[h(" 保存 ")]))),_:1})])),default:x((()=>[b(Y,{modelValue:y(D),"onUpdate:modelValue":p[11]||(p[11]=e=>_(D)?D.value=e:null),class:"vertical-radio-group"},{default:x((()=>[(c(),m(w,null,g(H,(e=>b(X,{key:e.value,value:e.value},{default:x((()=>[h(V(e.label),1)])),_:2},1032,["value"]))),64))])),_:1},8,["modelValue"])])),_:1},8,["modelValue"])],2)],2)}}});export{A as default};
1
+ import{ElPopover as e,ElLink as l,ElCheckbox as t,ElButton as n,ElIcon as o,ElDialog as a,ElRadioGroup as s,ElRadio as i}from"element-plus/es";import"element-plus/es/components/base/style/index";import"element-plus/es/components/dialog/style/index";import"element-plus/es/components/radio-group/style/index";import"element-plus/es/components/radio/style/index";import"element-plus/es/components/button/style/index";import"element-plus/es/components/icon/style/index";import"element-plus/es/components/checkbox/style/index";import"element-plus/es/components/popover/style/index";import"element-plus/es/components/link/style/index";import{defineComponent as u,ref as d,computed as p,createElementBlock as m,openBlock as c,normalizeClass as r,unref as y,createElementVNode as f,createCommentVNode as v,createVNode as b,createBlock as k,withCtx as x,createTextVNode as h,isRef as _,Fragment as w,renderList as g,toDisplayString as V}from"vue";import{Edit as C,Delete as j,Top as O,Bottom as S}from"@element-plus/icons-vue";import{useNamespace as T}from"@qxs-bns/hooks";import U from"../../subject-type/src/subject-type.vue.mjs";const B={key:0,class:"flex-justify-between"},E={class:"flex-justify-between"},R={key:0,class:"has-set"},A={key:1,class:"flex flex-justify-end action-buttons"};var K=u({name:"QxsSubjectAction",__name:"subject-action",props:{isEdit:Boolean,isSet:{type:Boolean,default:!1},isKey:{type:Boolean,default:!1},answerCheckType:{type:Number,default:1},showOtherOption:{type:Boolean,default:!0},examAnswerRelationType:{type:Number,default:null},showRichText:{type:Boolean,default:!0},pageEnd:{type:Boolean,default:!1}},emits:["moveUp","moveDown","delete","save","edit","add","onShowRichText","setKey","setAnswerSetting"],setup(u,{emit:K}){const z=u,D=K,N=d(z.isKey),q=d(!1),Q=d(z.answerCheckType),F=T("subject-action"),G=d(!0),H=[{value:2,label:"必须全部都是支持选项,方可下一步"},{value:1,label:"无需判断是否是支持选项"},{value:3,label:"包含全部支持选项,即可下一步"}],I=p((()=>H.find((e=>e.value===Q.value))?.label));function J(){q.value=!1,D("setAnswerSetting",Q.value)}function L(){D("setKey",N.value)}function M(e,l){D("add",e,l?z.examAnswerRelationType:null)}return(d,p)=>{const T=l,K=e,z=t,P=o,W=n,X=i,Y=s,Z=a;return c(),m("div",{class:r(y(F).e("action-exam"))},[f("div",{class:r(["action flex flex-justify-between",{active:u.isEdit}])},[v(" 编辑模式 "),u.isEdit?(c(),m("div",B,[b(K,{trigger:"click"},{reference:x((()=>[b(T,{type:"primary",class:"btn-margin"},{default:x((()=>p[15]||(p[15]=[h(" +在此题后加入新题 ")]))),_:1})])),default:x((()=>[b(U,{onSelect:M})])),_:1}),u.showRichText?(c(),k(T,{key:0,type:"primary",class:"btn-margin",onClick:p[0]||(p[0]=e=>D("onShowRichText"))},{default:x((()=>p[16]||(p[16]=[h(" +添加题目描述(图文) ")]))),_:1})):v("v-if",!0),u.showOtherOption?(c(),k(T,{key:1,type:"primary",class:"btn-margin",onClick:p[1]||(p[1]=e=>q.value=!0)},{default:x((()=>p[17]||(p[17]=[h(" 答题设置 ")]))),_:1})):v("v-if",!0),u.showOtherOption?(c(),k(z,{key:2,modelValue:y(N),"onUpdate:modelValue":p[2]||(p[2]=e=>_(N)?N.value=e:null),label:"核心题",onChange:L},null,8,["modelValue"])):v("v-if",!0)])):(c(),m(w,{key:1},[v(" 非编辑模式 "),f("div",E,[u.showOtherOption?(c(),k(z,{key:0,modelValue:y(N),"onUpdate:modelValue":p[3]||(p[3]=e=>_(N)?N.value=e:null),label:"核心题",disabled:""},null,8,["modelValue"])):v("v-if",!0),u.showOtherOption?(c(),k(z,{key:1,modelValue:y(G),"onUpdate:modelValue":p[4]||(p[4]=e=>_(G)?G.value=e:null),label:y(I),disabled:"",class:"btn-margin"},null,8,["modelValue","label"])):v("v-if",!0)])],2112)),v(" 操作按钮 "),f("div",null,[u.isSet?(c(),m("div",R," *此题设置了跳题逻辑 ")):(c(),m("div",A,[u.isEdit?(c(),m(w,{key:1},[b(W,{class:"btn-margin",onClick:p[9]||(p[9]=e=>D("delete"))},{default:x((()=>p[22]||(p[22]=[h(" 删除 ")]))),_:1}),b(W,{type:"primary",onClick:p[10]||(p[10]=e=>D("save"))},{default:x((()=>p[23]||(p[23]=[h(" 完成编辑 ")]))),_:1})],64)):(c(),m(w,{key:0},[u.pageEnd?v("v-if",!0):(c(),k(W,{key:0,onClick:p[5]||(p[5]=e=>D("edit"))},{icon:x((()=>[b(P,null,{default:x((()=>[b(y(C))])),_:1})])),default:x((()=>[p[18]||(p[18]=h(" 编辑 "))])),_:1})),b(W,{onClick:p[6]||(p[6]=e=>D("delete"))},{icon:x((()=>[b(P,null,{default:x((()=>[b(y(j))])),_:1})])),default:x((()=>[p[19]||(p[19]=h(" 删除 "))])),_:1}),b(W,{onClick:p[7]||(p[7]=e=>D("moveUp"))},{icon:x((()=>[b(P,null,{default:x((()=>[b(y(O))])),_:1})])),default:x((()=>[p[20]||(p[20]=h(" 上移 "))])),_:1}),b(W,{onClick:p[8]||(p[8]=e=>D("moveDown"))},{icon:x((()=>[b(P,null,{default:x((()=>[b(y(S))])),_:1})])),default:x((()=>[p[21]||(p[21]=h(" 下移 "))])),_:1})],64))]))]),v(" 答题设置弹窗 "),b(Z,{modelValue:y(q),"onUpdate:modelValue":p[13]||(p[13]=e=>_(q)?q.value=e:null),title:"答题设置",class:"customize-dialog",onClose:p[14]||(p[14]=e=>q.value=!1)},{footer:x((()=>[b(W,{class:"customize-button",type:"primary",plain:"",onClick:p[12]||(p[12]=e=>q.value=!1)},{default:x((()=>p[24]||(p[24]=[h(" 取消 ")]))),_:1}),b(W,{class:"customize-button",type:"primary",plain:"",onClick:J},{default:x((()=>p[25]||(p[25]=[h(" 保存 ")]))),_:1})])),default:x((()=>[b(Y,{modelValue:y(Q),"onUpdate:modelValue":p[11]||(p[11]=e=>_(Q)?Q.value=e:null),class:"vertical-radio-group"},{default:x((()=>[(c(),m(w,null,g(H,(e=>b(X,{key:e.value,value:e.value},{default:x((()=>[h(V(e.label),1)])),_:2},1032,["value"]))),64))])),_:1},8,["modelValue"])])),_:1},8,["modelValue"])],2)],2)}}});export{K as default};
2
2
  //# sourceMappingURL=subject-action.vue.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"subject-action.vue.mjs","sources":["../../../../../../packages/components/src/subject-action/src/subject-action.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { Bottom, Delete, Edit, Top } from '@element-plus/icons-vue'\nimport { useNamespace } from '@qxs-bns/hooks'\nimport SubjectType from '../../subject-type/src/subject-type.vue'\n\ndefineOptions({\n name: 'QxsSubjectAction',\n})\n\nconst props = defineProps({\n isEdit: Boolean,\n isSet: {\n type: Boolean,\n default: false,\n },\n isKey: {\n type: Boolean,\n default: false,\n },\n answerCheckType: {\n type: Number,\n default: 1,\n },\n showOtherOption: {\n type: Boolean,\n default: true,\n },\n examAnswerRelationType: {\n type: Number,\n default: null,\n },\n showRichText: {\n type: Boolean,\n default: true,\n },\n pageEnd: {\n type: Boolean,\n default: false,\n },\n})\n\nconst isKey = ref(props.isKey)\nconst showAnswerSetting = ref(false)\nconst emits = defineEmits([\n 'move-up',\n 'move-down',\n 'delete',\n 'save',\n 'edit',\n 'add',\n 'on-show-rich-text',\n 'set-key',\n 'set-answer-setting',\n])\nconst answerType = ref(props.answerCheckType)\nconst ns = useNamespace('subject-action')\nconst checked = ref(true)\nconst answerTextList = [\n {\n value: 2,\n label: '必须全部都是支持选项,方可下一步',\n },\n {\n value: 1,\n label: '无需判断是否是支持选项',\n },\n {\n value: 3,\n label: '包含全部支持选项,即可下一步',\n },\n]\n\nconst answerText = computed(() => {\n return answerTextList.find((item) => item.value === answerType.value)?.label\n})\n\nfunction onSaveSetting() {\n showAnswerSetting.value = false\n emits('set-answer-setting', answerType.value)\n}\n\nfunction setKey() {\n emits('set-key', isKey.value)\n}\n\nfunction selectExam(type: string, canSet: boolean) {\n emits('add', type, canSet ? props.examAnswerRelationType : null)\n}\n</script>\n\n<template>\n <div :class=\"ns.e('action-exam')\">\n <div class=\"action flex flex-justify-between\" :class=\"{ active: isEdit }\">\n <!-- 编辑模式 -->\n <div v-if=\"isEdit\" class=\"flex-justify-between\">\n <el-popover trigger=\"click\">\n <template #reference>\n <el-link type=\"primary\" class=\"btn-margin\"> +在此题后加入新题</el-link>\n </template>\n <SubjectType @select=\"selectExam\" />\n </el-popover>\n <el-link\n v-if=\"showRichText\"\n type=\"primary\"\n class=\"btn-margin\"\n @click=\"emits('on-show-rich-text')\"\n >\n +添加题目描述(图文)\n </el-link>\n <el-link\n v-if=\"showOtherOption\"\n type=\"primary\"\n class=\"btn-margin\"\n @click=\"showAnswerSetting = true\"\n >\n 答题设置\n </el-link>\n <el-checkbox\n v-if=\"showOtherOption\"\n v-model=\"isKey\"\n label=\"核心题\"\n @change=\"setKey\"\n />\n </div>\n\n <!-- 非编辑模式 -->\n <div v-else class=\"flex-justify-between\">\n <el-checkbox\n v-if=\"showOtherOption\"\n v-model=\"isKey\"\n label=\"核心题\"\n disabled\n />\n <el-checkbox\n v-if=\"showOtherOption\"\n v-model=\"checked\"\n :label=\"answerText\"\n disabled\n class=\"btn-margin\"\n />\n </div>\n\n <!-- 操作按钮 -->\n <div>\n <div v-if=\"isSet\" class=\"has-set\">*此题设置了跳题逻辑</div>\n <div v-else class=\"flex flex-justify-end action-buttons\">\n <template v-if=\"!isEdit\">\n <el-button\n v-if=\"!pageEnd\"\n @click=\"emits('edit')\"\n >\n <template #icon>\n <el-icon><Edit /></el-icon>\n </template>\n 编辑\n </el-button>\n <el-button @click=\"emits('delete')\">\n <template #icon>\n <el-icon><Delete /></el-icon>\n </template>\n 删除\n </el-button>\n <el-button @click=\"emits('move-up')\">\n <template #icon>\n <el-icon><Top /></el-icon>\n </template>\n 上移\n </el-button>\n <el-button @click=\"emits('move-down')\">\n <template #icon>\n <el-icon><Bottom /></el-icon>\n </template>\n 下移\n </el-button>\n </template>\n <template v-else>\n <el-button class=\"btn-margin\" @click=\"emits('delete')\">删除</el-button>\n <el-button type=\"primary\" @click=\"emits('save')\">完成编辑</el-button>\n </template>\n </div>\n </div>\n\n <!-- 答题设置弹窗 -->\n <el-dialog\n v-model=\"showAnswerSetting\"\n title=\"答题设置\"\n class=\"customize-dialog\"\n @close=\"showAnswerSetting = false\"\n >\n <el-radio-group v-model=\"answerType\" class=\"vertical-radio-group\">\n <el-radio\n v-for=\"item in answerTextList\"\n :key=\"item.value\"\n :value=\"item.value\"\n >\n {{ item.label }}\n </el-radio>\n </el-radio-group>\n <template #footer>\n <el-button\n class=\"customize-button\"\n type=\"primary\"\n plain\n @click=\"showAnswerSetting = false\"\n >\n 取消\n </el-button>\n <el-button\n class=\"customize-button\"\n type=\"primary\"\n plain\n @click=\"onSaveSetting\"\n >\n 保存\n </el-button>\n </template>\n </el-dialog>\n </div>\n </div>\n</template>"],"names":["props","__props","isKey","ref","showAnswerSetting","emits","__emit","answerType","answerCheckType","ns","useNamespace","checked","answerTextList","value","label","answerText","computed","find","item","onSaveSetting","setKey","selectExam","type","canSet","examAnswerRelationType"],"mappings":"guDASA,MAAMA,EAAQC,EAgCRC,EAAQC,EAAIH,EAAME,OAClBE,EAAoBD,GAAI,GACxBE,EAAQC,EAWRC,EAAaJ,EAAIH,EAAMQ,iBACvBC,EAAKC,EAAa,kBAClBC,EAAUR,GAAI,GACdS,EAAiB,CACrB,CACEC,MAAO,EACPC,MAAO,oBAET,CACED,MAAO,EACPC,MAAO,eAET,CACED,MAAO,EACPC,MAAO,mBAILC,EAAaC,GAAS,IACnBJ,EAAeK,MAAMC,GAASA,EAAKL,QAAUN,EAAWM,SAAQC,QAGzE,SAASK,IACPf,EAAkBS,OAAQ,EACpBR,EAAA,qBAAsBE,EAAWM,MAAK,CAG9C,SAASO,IACDf,EAAA,UAAWH,EAAMW,MAAK,CAGrB,SAAAQ,EAAWC,EAAcC,GAChClB,EAAM,MAAOiB,EAAMC,EAASvB,EAAMwB,uBAAyB,KAAI"}
1
+ {"version":3,"file":"subject-action.vue.mjs","sources":["../../../../../../packages/components/src/subject-action/src/subject-action.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { Bottom, Delete, Edit, Top } from '@element-plus/icons-vue'\nimport { useNamespace } from '@qxs-bns/hooks'\nimport SubjectType from '../../subject-type/src/subject-type.vue'\n\ndefineOptions({\n name: 'QxsSubjectAction',\n})\n\nconst props = defineProps({\n isEdit: Boolean,\n isSet: {\n type: Boolean,\n default: false,\n },\n isKey: {\n type: Boolean,\n default: false,\n },\n answerCheckType: {\n type: Number,\n default: 1,\n },\n showOtherOption: {\n type: Boolean,\n default: true,\n },\n examAnswerRelationType: {\n type: Number,\n default: null,\n },\n showRichText: {\n type: Boolean,\n default: true,\n },\n pageEnd: {\n type: Boolean,\n default: false,\n },\n})\n\nconst emits = defineEmits([\n 'moveUp',\n 'moveDown',\n 'delete',\n 'save',\n 'edit',\n 'add',\n 'onShowRichText',\n 'setKey',\n 'setAnswerSetting',\n])\nconst isKey = ref(props.isKey)\nconst showAnswerSetting = ref(false)\nconst answerType = ref(props.answerCheckType)\nconst ns = useNamespace('subject-action')\nconst checked = ref(true)\nconst answerTextList = [\n {\n value: 2,\n label: '必须全部都是支持选项,方可下一步',\n },\n {\n value: 1,\n label: '无需判断是否是支持选项',\n },\n {\n value: 3,\n label: '包含全部支持选项,即可下一步',\n },\n]\n\nconst answerText = computed(() => {\n return answerTextList.find(item => item.value === answerType.value)?.label\n})\n\nfunction onSaveSetting() {\n showAnswerSetting.value = false\n emits('setAnswerSetting', answerType.value)\n}\n\nfunction setKey() {\n emits('setKey', isKey.value)\n}\n\nfunction selectExam(type: string, canSet: boolean) {\n emits('add', type, canSet ? props.examAnswerRelationType : null)\n}\n</script>\n\n<template>\n <div :class=\"ns.e('action-exam')\">\n <div\n class=\"action flex flex-justify-between\"\n :class=\"{ active: isEdit }\"\n >\n <!-- 编辑模式 -->\n <div\n v-if=\"isEdit\"\n class=\"flex-justify-between\"\n >\n <el-popover trigger=\"click\">\n <template #reference>\n <el-link\n type=\"primary\"\n class=\"btn-margin\"\n >\n +在此题后加入新题\n </el-link>\n </template>\n <SubjectType @select=\"selectExam\" />\n </el-popover>\n <el-link\n v-if=\"showRichText\"\n type=\"primary\"\n class=\"btn-margin\"\n @click=\"emits('onShowRichText')\"\n >\n +添加题目描述(图文)\n </el-link>\n <el-link\n v-if=\"showOtherOption\"\n type=\"primary\"\n class=\"btn-margin\"\n @click=\"showAnswerSetting = true\"\n >\n 答题设置\n </el-link>\n <el-checkbox\n v-if=\"showOtherOption\"\n v-model=\"isKey\"\n label=\"核心题\"\n @change=\"setKey\"\n />\n </div>\n\n <!-- 非编辑模式 -->\n <div\n v-else\n class=\"flex-justify-between\"\n >\n <el-checkbox\n v-if=\"showOtherOption\"\n v-model=\"isKey\"\n label=\"核心题\"\n disabled\n />\n <el-checkbox\n v-if=\"showOtherOption\"\n v-model=\"checked\"\n :label=\"answerText\"\n disabled\n class=\"btn-margin\"\n />\n </div>\n\n <!-- 操作按钮 -->\n <div>\n <div\n v-if=\"isSet\"\n class=\"has-set\"\n >\n *此题设置了跳题逻辑\n </div>\n <div\n v-else\n class=\"flex flex-justify-end action-buttons\"\n >\n <template v-if=\"!isEdit\">\n <el-button\n v-if=\"!pageEnd\"\n @click=\"emits('edit')\"\n >\n <template #icon>\n <el-icon><Edit /></el-icon>\n </template>\n 编辑\n </el-button>\n <el-button @click=\"emits('delete')\">\n <template #icon>\n <el-icon><Delete /></el-icon>\n </template>\n 删除\n </el-button>\n <el-button @click=\"emits('moveUp')\">\n <template #icon>\n <el-icon><Top /></el-icon>\n </template>\n 上移\n </el-button>\n <el-button @click=\"emits('moveDown')\">\n <template #icon>\n <el-icon><Bottom /></el-icon>\n </template>\n 下移\n </el-button>\n </template>\n <template v-else>\n <el-button\n class=\"btn-margin\"\n @click=\"emits('delete')\"\n >\n 删除\n </el-button>\n <el-button\n type=\"primary\"\n @click=\"emits('save')\"\n >\n 完成编辑\n </el-button>\n </template>\n </div>\n </div>\n\n <!-- 答题设置弹窗 -->\n <el-dialog\n v-model=\"showAnswerSetting\"\n title=\"答题设置\"\n class=\"customize-dialog\"\n @close=\"showAnswerSetting = false\"\n >\n <el-radio-group\n v-model=\"answerType\"\n class=\"vertical-radio-group\"\n >\n <el-radio\n v-for=\"item in answerTextList\"\n :key=\"item.value\"\n :value=\"item.value\"\n >\n {{ item.label }}\n </el-radio>\n </el-radio-group>\n <template #footer>\n <el-button\n class=\"customize-button\"\n type=\"primary\"\n plain\n @click=\"showAnswerSetting = false\"\n >\n 取消\n </el-button>\n <el-button\n class=\"customize-button\"\n type=\"primary\"\n plain\n @click=\"onSaveSetting\"\n >\n 保存\n </el-button>\n </template>\n </el-dialog>\n </div>\n </div>\n</template>\n"],"names":["props","__props","emits","__emit","isKey","ref","showAnswerSetting","answerType","answerCheckType","ns","useNamespace","checked","answerTextList","value","label","answerText","computed","find","item","onSaveSetting","setKey","selectExam","type","canSet","examAnswerRelationType"],"mappings":"wtDASA,MAAMA,EAAQC,EAgCRC,EAAQC,EAWRC,EAAQC,EAAIL,EAAMI,OAClBE,EAAoBD,GAAI,GACxBE,EAAaF,EAAIL,EAAMQ,iBACvBC,EAAKC,EAAa,kBAClBC,EAAUN,GAAI,GACdO,EAAiB,CACrB,CACEC,MAAO,EACPC,MAAO,oBAET,CACED,MAAO,EACPC,MAAO,eAET,CACED,MAAO,EACPC,MAAO,mBAILC,EAAaC,GAAS,IACnBJ,EAAeK,MAAKC,GAAQA,EAAKL,QAAUN,EAAWM,SAAQC,QAGvE,SAASK,IACPb,EAAkBO,OAAQ,EACpBX,EAAA,mBAAoBK,EAAWM,MAAK,CAG5C,SAASO,IACDlB,EAAA,SAAUE,EAAMS,MAAK,CAGpB,SAAAQ,EAAWC,EAAcC,GAChCrB,EAAM,MAAOoB,EAAMC,EAASvB,EAAMwB,uBAAyB,KAAI"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../../../../../packages/components/src/subject-layout/index.ts"],"sourcesContent":["import { withInstall } from '../withInstall'\nimport component from './src/subject-layout.vue'\n\nconst QxsSubjectLayout = withInstall(component)\n \nexport {\n QxsSubjectLayout\n}\n \nexport default QxsSubjectLayout"],"names":["QxsSubjectLayout","withInstall","component"],"mappings":"6FAGA,MAAMA,EAAmBC,EAAYC"}
1
+ {"version":3,"file":"index.mjs","sources":["../../../../../packages/components/src/subject-layout/index.ts"],"sourcesContent":["import { withInstall } from '../withInstall'\nimport component from './src/subject-layout.vue'\n\nconst QxsSubjectLayout = withInstall(component)\n\nexport {\n QxsSubjectLayout,\n}\n\nexport default QxsSubjectLayout\n"],"names":["QxsSubjectLayout","withInstall","component"],"mappings":"6FAGA,MAAMA,EAAmBC,EAAYC"}
@@ -1 +1 @@
1
- {"version":3,"file":"subject-layout.vue.mjs","sources":["../../../../../../packages/components/src/subject-layout/src/subject-layout.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { useNamespace } from '@qxs-bns/hooks'\n\ndefineOptions({\n name: 'QxsSubjectLayout',\n})\ndefineProps<{\n showEdit: boolean\n}>()\n\nconst ns = useNamespace('subject-layout')\n</script>\n\n<template>\n <div :class=\"ns.e('layout-exam')\">\n <!-- <div class=\"subject-layout\"> -->\n <slot name=\"preview\" />\n <div v-if=\"showEdit\" class=\"edit\">\n <div class=\"triangle-up\" />\n <slot name=\"edit\" />\n </div>\n <slot />\n <!-- </div> -->\n</div>\n</template>\n"],"names":["ns","useNamespace"],"mappings":"qWAUM,MAAAA,EAAKC,EAAa"}
1
+ {"version":3,"file":"subject-layout.vue.mjs","sources":["../../../../../../packages/components/src/subject-layout/src/subject-layout.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { useNamespace } from '@qxs-bns/hooks'\n\ndefineOptions({\n name: 'QxsSubjectLayout',\n})\ndefineProps<{\n showEdit: boolean\n}>()\n\nconst ns = useNamespace('subject-layout')\n</script>\n\n<template>\n <div :class=\"ns.e('layout-exam')\">\n <!-- <div class=\"subject-layout\"> -->\n <slot name=\"preview\" />\n <div\n v-if=\"showEdit\"\n class=\"edit\"\n >\n <div class=\"triangle-up\" />\n <slot name=\"edit\" />\n </div>\n <slot />\n <!-- </div> -->\n </div>\n</template>\n"],"names":["ns","useNamespace"],"mappings":"qWAUM,MAAAA,EAAKC,EAAa"}
@@ -1,2 +1,2 @@
1
- import{ElRow as e}from"element-plus/es";import"element-plus/es/components/base/style/index";import"element-plus/es/components/row/style/index";import{defineComponent as t,onMounted as n,createElementBlock as o,openBlock as s,normalizeClass as r,unref as a,createVNode as i,withCtx as l,createElementVNode as u,toDisplayString as d}from"vue";import{useNamespace as p}from"@qxs-bns/hooks";import m from"../../../subject-action/src/subject-action.vue.mjs";var c=t({name:"QxsSubjectScale",__name:"SubjectPageEnd",props:{currentPageIndex:{type:Number,required:!0},totalPage:{type:Number,required:!0},isSave:{type:Boolean,required:!0},showAction:{type:Boolean,required:!1},isEdit:{type:Boolean,required:!0},isSet:{type:Boolean,required:!0},examAnswerRelationType:{type:Number,required:!1}},emits:["move","save","delete","edit","add"],setup(t,{emit:c}){const x=t,y=c;n((function(){}));const v=p("subject-end");return(t,n)=>{const p=e;return s(),o("div",{class:r(a(v).e("end-exam"))},[i(p,{type:"flex",align:"middle"},{default:l((()=>[n[5]||(n[5]=u("span",{class:"auto-line"},null,-1)),u("span",null,"第"+d(x.currentPageIndex)+" / "+d(t.totalPage)+"页",1),n[6]||(n[6]=u("span",{class:"auto-line"},null,-1))])),_:1}),i(m,{"is-edit":!1,"is-set":t.isSet,pageEnd:!0,examAnswerRelationType:x.examAnswerRelationType,showOtherOption:!1,showRichText:!1,onMoveUp:n[0]||(n[0]=e=>y("move","up")),onMoveDown:n[1]||(n[1]=e=>y("move","down")),onDelete:n[2]||(n[2]=e=>y("delete")),onEdit:n[3]||(n[3]=e=>y("edit")),onAdd:n[4]||(n[4]=e=>y("add",e))},null,8,["is-set","examAnswerRelationType"])],2)}}});export{c as default};
1
+ import{ElRow as e}from"element-plus/es";import"element-plus/es/components/base/style/index";import"element-plus/es/components/row/style/index";import{defineComponent as t,onMounted as n,createElementBlock as o,openBlock as s,normalizeClass as r,unref as a,createVNode as i,withCtx as l,createElementVNode as u,toDisplayString as d}from"vue";import{useNamespace as p}from"@qxs-bns/hooks";import m from"../../../subject-action/src/subject-action.vue.mjs";var c=t({name:"QxsSubjectScale",__name:"SubjectPageEnd",props:{currentPageIndex:{type:Number,required:!0},totalPage:{type:Number,required:!0},isSave:{type:Boolean,required:!0},showAction:{type:Boolean,required:!1},isEdit:{type:Boolean,required:!0},isSet:{type:Boolean,required:!0},examAnswerRelationType:{type:Number,required:!1}},emits:["move","save","delete","edit","add"],setup(t,{emit:c}){const x=t,y=c;n((function(){}));const v=p("subject-end");return(t,n)=>{const p=e;return s(),o("div",{class:r(a(v).e("end-exam"))},[i(p,{type:"flex",align:"middle"},{default:l((()=>[n[5]||(n[5]=u("span",{class:"auto-line"},null,-1)),u("span",null,"第"+d(x.currentPageIndex)+" / "+d(t.totalPage)+"页",1),n[6]||(n[6]=u("span",{class:"auto-line"},null,-1))])),_:1}),i(m,{"is-edit":!1,"is-set":t.isSet,"page-end":!0,"exam-answer-relation-type":x.examAnswerRelationType,"show-other-option":!1,"show-rich-text":!1,onMoveUp:n[0]||(n[0]=e=>y("move","up")),onMoveDown:n[1]||(n[1]=e=>y("move","down")),onDelete:n[2]||(n[2]=e=>y("delete")),onEdit:n[3]||(n[3]=e=>y("edit")),onAdd:n[4]||(n[4]=e=>y("add",e))},null,8,["is-set","exam-answer-relation-type"])],2)}}});export{c as default};
2
2
  //# sourceMappingURL=SubjectPageEnd.vue.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"SubjectPageEnd.vue.mjs","sources":["../../../../../../../packages/components/src/subject-list/src/components/SubjectPageEnd.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { useNamespace } from '@qxs-bns/hooks'\nimport SubjectAction from '../../../subject-action/src/subject-action.vue'\n\ndefineOptions({\n name: 'QxsSubjectScale',\n})\nconst props = defineProps<{\n currentPageIndex: number\n totalPage: number\n isSave: boolean\n showAction?: boolean\n isEdit: boolean\n isSet: boolean\n examAnswerRelationType?: number\n}>()\nconst emits = defineEmits(['move', 'save', 'delete', 'edit', 'add'])\n\nfunction init() {\n\n}\n\nonMounted(init)\nconst ns = useNamespace('subject-end')\n</script>\n\n<template>\n <div :class=\"ns.e('end-exam')\">\n <el-row type=\"flex\" align=\"middle\">\n <span class=\"auto-line\" />\n <span>第{{ props.currentPageIndex }} / {{ totalPage }}页</span>\n <span class=\"auto-line\" />\n </el-row>\n <SubjectAction\n :is-edit=\"false\"\n :is-set=\"isSet\"\n :pageEnd=\"true\"\n :examAnswerRelationType=\"props.examAnswerRelationType\"\n :showOtherOption=\"false\"\n :showRichText=\"false\"\n @move-up=\"emits('move', 'up')\"\n @move-down=\"emits('move', 'down')\"\n @delete=\"emits('delete')\"\n @edit=\"emits('edit')\"\n @add=\"type => emits('add', type)\"\n />\n </div>\n</template>\n"],"names":["props","__props","emits","__emit","onMounted","ns","useNamespace"],"mappings":"80BAOA,MAAMA,EAAQC,EASRC,EAAQC,EAMdC,GAJA,WAAgB,IAKV,MAAAC,EAAKC,EAAa"}
1
+ {"version":3,"file":"SubjectPageEnd.vue.mjs","sources":["../../../../../../../packages/components/src/subject-list/src/components/SubjectPageEnd.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { useNamespace } from '@qxs-bns/hooks'\nimport SubjectAction from '../../../subject-action/src/subject-action.vue'\n\ndefineOptions({\n name: 'QxsSubjectScale',\n})\nconst props = defineProps<{\n currentPageIndex: number\n totalPage: number\n isSave: boolean\n showAction?: boolean\n isEdit: boolean\n isSet: boolean\n examAnswerRelationType?: number\n}>()\nconst emits = defineEmits(['move', 'save', 'delete', 'edit', 'add'])\n\nfunction init() {\n\n}\n\nonMounted(init)\nconst ns = useNamespace('subject-end')\n</script>\n\n<template>\n <div :class=\"ns.e('end-exam')\">\n <el-row\n type=\"flex\"\n align=\"middle\"\n >\n <span class=\"auto-line\" />\n <span>第{{ props.currentPageIndex }} / {{ totalPage }}页</span>\n <span class=\"auto-line\" />\n </el-row>\n <SubjectAction\n :is-edit=\"false\"\n :is-set=\"isSet\"\n :page-end=\"true\"\n :exam-answer-relation-type=\"props.examAnswerRelationType\"\n :show-other-option=\"false\"\n :show-rich-text=\"false\"\n @move-up=\"emits('move', 'up')\"\n @move-down=\"emits('move', 'down')\"\n @delete=\"emits('delete')\"\n @edit=\"emits('edit')\"\n @add=\"type => emits('add', type)\"\n />\n </div>\n</template>\n"],"names":["props","__props","emits","__emit","onMounted","ns","useNamespace"],"mappings":"80BAOA,MAAMA,EAAQC,EASRC,EAAQC,EAMdC,GAJA,WAAgB,IAKV,MAAAC,EAAKC,EAAa"}
@@ -1,2 +1,2 @@
1
- import{defineComponent as e,useAttrs as t,ref as o,onMounted as i,createElementBlock as r,openBlock as n,normalizeClass as s,unref as d,createVNode as a,withCtx as l,createBlock as u,createCommentVNode as m,mergeProps as c,isRef as p,createElementVNode as v,createTextVNode as y,toDisplayString as x}from"vue";import{useNamespace as h}from"@qxs-bns/hooks";import{ElMessage as w}from"element-plus";import T from"../../../subject-action/src/subject-action.vue.mjs";import f from"../../../subject-layout/src/subject-layout.vue.mjs";import b from"../../../tiny-mce-editor/src/tiny-mce-editor.vue.mjs";const j={class:"preview"},q=["innerHTML"];var S=e({name:"QxsSubjectScale",__name:"SubjectRichText",props:{orderIndex:{type:Number,required:!0},richTextContent:{type:String,required:!0},title:{type:String,required:!1},isSave:{type:Boolean,required:!0},showAction:{type:Boolean,required:!1},isEdit:{type:Boolean,required:!0},isSet:{type:Boolean,required:!0},examAnswerRelationType:{type:Number,required:!1}},emits:["move","save","delete","edit","add"],setup(e,{emit:S}){const A=e,R=S,B=t(),C=o("");function E(){C.value?R("save",{richTextContent:C.value||""}):w.error("富文本内容不能为空!")}i((function(){A.richTextContent&&(C.value=A.richTextContent)}));const M=h("subject-scale");return(e,t)=>(n(),r("div",{class:s(d(M).e("scale-exam"))},[a(f,{"show-edit":e.isEdit},{preview:l((()=>[v("div",j,[y(x(e.orderIndex+1)+".",1),v("div",{innerHTML:d(C)},null,8,q)])])),edit:l((()=>[a(b,c({"model-value":d(C),"onUpdate:modelValue":t[0]||(t[0]=e=>p(C)?C.value=e:null)},d(B),{style:{width:"100%"}}),null,16,["model-value"])])),default:l((()=>[e.showAction?(n(),u(T,{key:0,"is-edit":e.isEdit,"is-set":e.isSet,examAnswerRelationType:A.examAnswerRelationType,showOtherOption:!1,showRichText:!1,onMoveUp:t[1]||(t[1]=e=>R("move","up")),onMoveDown:t[2]||(t[2]=e=>R("move","down")),onDelete:t[3]||(t[3]=e=>R("delete")),onSave:E,onEdit:t[4]||(t[4]=e=>R("edit")),onAdd:t[5]||(t[5]=e=>R("add",e))},null,8,["is-edit","is-set","examAnswerRelationType"])):m("v-if",!0)])),_:1},8,["show-edit"])],2))}});export{S as default};
1
+ import{defineComponent as e,useAttrs as t,ref as o,onMounted as i,createElementBlock as r,openBlock as n,normalizeClass as s,unref as a,createVNode as d,withCtx as l,createBlock as u,createCommentVNode as m,mergeProps as c,isRef as p,createElementVNode as v,createTextVNode as y,toDisplayString as x}from"vue";import{useNamespace as h}from"@qxs-bns/hooks";import{ElMessage as w}from"element-plus";import f from"../../../subject-action/src/subject-action.vue.mjs";import b from"../../../subject-layout/src/subject-layout.vue.mjs";import j from"../../../tiny-mce-editor/src/tiny-mce-editor.vue.mjs";const q={class:"preview"},S=["innerHTML"];var T=e({name:"QxsSubjectScale",__name:"SubjectRichText",props:{orderIndex:{type:Number,required:!0},richTextContent:{type:String,required:!0},title:{type:String,required:!1},isSave:{type:Boolean,required:!0},showAction:{type:Boolean,required:!1},isEdit:{type:Boolean,required:!0},isSet:{type:Boolean,required:!0},examAnswerRelationType:{type:Number,required:!1}},emits:["move","save","delete","edit","add"],setup(e,{emit:T}){const A=e,B=T,C=t(),E=o("");function M(){E.value?B("save",{richTextContent:E.value||""}):w.error("富文本内容不能为空!")}i((function(){A.richTextContent&&(E.value=A.richTextContent)}));const R=h("subject-scale");return(e,t)=>(n(),r("div",{class:s(a(R).e("scale-exam"))},[d(b,{"show-edit":e.isEdit},{preview:l((()=>[v("div",q,[y(x(e.orderIndex+1)+".",1),v("div",{innerHTML:a(E)},null,8,S)])])),edit:l((()=>[d(j,c({"model-value":a(E),"onUpdate:modelValue":t[0]||(t[0]=e=>p(E)?E.value=e:null)},a(C),{style:{width:"100%"}}),null,16,["model-value"])])),default:l((()=>[e.showAction?(n(),u(f,{key:0,"is-edit":e.isEdit,"is-set":e.isSet,"exam-answer-relation-type":A.examAnswerRelationType,"show-other-option":!1,"show-rich-text":!1,onMoveUp:t[1]||(t[1]=e=>B("move","up")),onMoveDown:t[2]||(t[2]=e=>B("move","down")),onDelete:t[3]||(t[3]=e=>B("delete")),onSave:M,onEdit:t[4]||(t[4]=e=>B("edit")),onAdd:t[5]||(t[5]=e=>B("add",e))},null,8,["is-edit","is-set","exam-answer-relation-type"])):m("v-if",!0)])),_:1},8,["show-edit"])],2))}});export{T as default};
2
2
  //# sourceMappingURL=SubjectRichText.vue.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"SubjectRichText.vue.mjs","sources":["../../../../../../../packages/components/src/subject-list/src/components/SubjectRichText.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { useNamespace } from '@qxs-bns/hooks'\nimport { ElMessage } from 'element-plus'\nimport SubjectAction from '../../../subject-action/src/subject-action.vue'\nimport SubjectLayout from '../../../subject-layout/src/subject-layout.vue'\nimport TinyMceEditor from '../../../tiny-mce-editor/src/tiny-mce-editor.vue'\n\ndefineOptions({\n name: 'QxsSubjectScale',\n})\nconst props = defineProps<{\n orderIndex: number\n richTextContent: string\n title?: string\n isSave: boolean\n showAction?: boolean\n isEdit: boolean\n isSet: boolean\n examAnswerRelationType?: number\n}>()\nconst emits = defineEmits(['move', 'save', 'delete', 'edit', 'add'])\n\nconst attrs = useAttrs()\n\nconst richContent = ref('')\n\nfunction save() {\n if (!richContent.value) {\n ElMessage.error('富文本内容不能为空!')\n return\n }\n\n\n emits('save', {\n richTextContent: richContent.value ||'',\n })\n}\n\nfunction init() {\n if (props.richTextContent) {\n richContent.value = props.richTextContent\n }\n}\n\nonMounted(init)\nconst ns = useNamespace('subject-scale')\n</script>\n\n<template>\n <div :class=\"ns.e('scale-exam')\">\n <SubjectLayout :show-edit=\"isEdit\">\n <template #preview>\n <div class=\"preview\">\n {{ orderIndex + 1 }}.<div v-html=\"richContent\" />\n </div>\n </template>\n <template #edit>\n <TinyMceEditor v-model:model-value=\"richContent\" v-bind=\"attrs\" style=\"width: 100%;\" />\n </template>\n <SubjectAction\n v-if=\"showAction\"\n :is-edit=\"isEdit\"\n :is-set=\"isSet\"\n :examAnswerRelationType=\"props.examAnswerRelationType\"\n :showOtherOption=\"false\"\n :showRichText=\"false\"\n @move-up=\"emits('move', 'up')\"\n @move-down=\"emits('move', 'down')\"\n @delete=\"emits('delete')\"\n @save=\"save\"\n @edit=\"emits('edit')\"\n @add=\"type => emits('add', type)\"\n />\n </SubjectLayout>\n </div>\n</template>\n"],"names":["props","__props","emits","__emit","attrs","useAttrs","richContent","ref","save","value","richTextContent","ElMessage","error","onMounted","ns","useNamespace"],"mappings":"yiCAUA,MAAMA,EAAQC,EAURC,EAAQC,EAERC,EAAQC,IAERC,EAAcC,EAAI,IAExB,SAASC,IACFF,EAAYG,MAMjBP,EAAM,OAAQ,CACZQ,gBAAiBJ,EAAYG,OAAQ,KANrCE,EAAUC,MAAM,aAOjB,CASHC,GANA,WACMb,EAAMU,kBACRJ,EAAYG,MAAQT,EAAMU,gBAC5B,IAII,MAAAI,EAAKC,EAAa"}
1
+ {"version":3,"file":"SubjectRichText.vue.mjs","sources":["../../../../../../../packages/components/src/subject-list/src/components/SubjectRichText.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { useNamespace } from '@qxs-bns/hooks'\nimport { ElMessage } from 'element-plus'\nimport SubjectAction from '../../../subject-action/src/subject-action.vue'\nimport SubjectLayout from '../../../subject-layout/src/subject-layout.vue'\nimport TinyMceEditor from '../../../tiny-mce-editor/src/tiny-mce-editor.vue'\n\ndefineOptions({\n name: 'QxsSubjectScale',\n})\nconst props = defineProps<{\n orderIndex: number\n richTextContent: string\n title?: string\n isSave: boolean\n showAction?: boolean\n isEdit: boolean\n isSet: boolean\n examAnswerRelationType?: number\n}>()\nconst emits = defineEmits(['move', 'save', 'delete', 'edit', 'add'])\n\nconst attrs = useAttrs()\n\nconst richContent = ref('')\n\nfunction save() {\n if (!richContent.value) {\n ElMessage.error('富文本内容不能为空!')\n return\n }\n\n emits('save', {\n richTextContent: richContent.value || '',\n })\n}\n\nfunction init() {\n if (props.richTextContent) {\n richContent.value = props.richTextContent\n }\n}\n\nonMounted(init)\nconst ns = useNamespace('subject-scale')\n</script>\n\n<template>\n <div :class=\"ns.e('scale-exam')\">\n <SubjectLayout :show-edit=\"isEdit\">\n <template #preview>\n <div class=\"preview\">\n {{ orderIndex + 1 }}.<div v-html=\"richContent\" />\n </div>\n </template>\n <template #edit>\n <TinyMceEditor\n v-model:model-value=\"richContent\"\n v-bind=\"attrs\"\n style=\"width: 100%;\"\n />\n </template>\n <SubjectAction\n v-if=\"showAction\"\n :is-edit=\"isEdit\"\n :is-set=\"isSet\"\n :exam-answer-relation-type=\"props.examAnswerRelationType\"\n :show-other-option=\"false\"\n :show-rich-text=\"false\"\n @move-up=\"emits('move', 'up')\"\n @move-down=\"emits('move', 'down')\"\n @delete=\"emits('delete')\"\n @save=\"save\"\n @edit=\"emits('edit')\"\n @add=\"type => emits('add', type)\"\n />\n </SubjectLayout>\n </div>\n</template>\n"],"names":["props","__props","emits","__emit","attrs","useAttrs","richContent","ref","save","value","richTextContent","ElMessage","error","onMounted","ns","useNamespace"],"mappings":"yiCAUA,MAAMA,EAAQC,EAURC,EAAQC,EAERC,EAAQC,IAERC,EAAcC,EAAI,IAExB,SAASC,IACFF,EAAYG,MAKjBP,EAAM,OAAQ,CACZQ,gBAAiBJ,EAAYG,OAAS,KALtCE,EAAUC,MAAM,aAMjB,CASHC,GANA,WACMb,EAAMU,kBACRJ,EAAYG,MAAQT,EAAMU,gBAC5B,IAII,MAAAI,EAAKC,EAAa"}
@@ -1,2 +1,2 @@
1
- import{ElInput as e,ElLink as l,ElCheckboxGroup as t,ElCheckbox as s,ElTag as n,ElButton as i,ElIcon as a}from"element-plus/es";import"element-plus/es/components/base/style/index";import"element-plus/es/components/button/style/index";import"element-plus/es/components/icon/style/index";import"element-plus/es/components/tag/style/index";import"element-plus/es/components/checkbox-group/style/index";import"element-plus/es/components/checkbox/style/index";import"element-plus/es/components/link/style/index";import"element-plus/es/components/input/style/index";import{defineComponent as o,useAttrs as r,ref as u,watch as d,onMounted as m,createElementBlock as p,openBlock as c,normalizeClass as v,unref as f,createVNode as x,withCtx as y,createBlock as g,createCommentVNode as w,createElementVNode as h,isRef as b,createTextVNode as _,Fragment as k,renderList as j,toDisplayString as A,mergeProps as C}from"vue";import{Plus as I}from"@element-plus/icons-vue";import{useNamespace as V}from"@qxs-bns/hooks";import{ElMessage as S}from"element-plus";import O from"../../../subject-action/src/subject-action.vue.mjs";import q from"../../../subject-layout/src/subject-layout.vue.mjs";import T from"../../../tiny-mce-editor/src/tiny-mce-editor.vue.mjs";const R={class:"preview"},B={class:"content"},U={class:"title"},L={key:0},E=["innerHTML"],M={key:1,class:"flex flex-wrap",style:{"margin-top":"10px",color:"#a8abb2"}},D={class:"flex"},H={style:{flex:"1"}},N={class:"flex flex-justify-end"},z={class:"margin-bottom flex flex-items-center"},F={class:"margin-bottom answer-list"},G={class:"label flex flex-justify-end"},J={class:"answer-tags"},K={key:0,class:"margin-bottom flex"},P={style:{flex:"1"}},Q={key:1,class:"margin-bottom flex"},W={style:{flex:"1"}},X={class:"flex flex-justify-end"};var Y=o({__name:"subject-blank-fill",props:{orderIndex:{type:Number,required:!0},title:{type:String,required:!1},isSave:{type:Boolean,required:!0},showAction:{type:Boolean,required:!1},answerList:{type:null,required:!1},analysis:{type:String,required:!1},isEdit:{type:Boolean,required:!0},isSet:{type:Boolean,required:!0},examAnswerSettingVO:{type:Object,required:!1},examRichTextContent:{type:String,required:!1},showAnalysis:{type:Boolean,required:!1},examAnswerRelationType:{type:Number,required:!1}},emits:["move","save","delete","edit","add"],setup(o,{emit:Y}){const Z=o,$=Y,ee=r(),le=u([]),te=u(""),se=u(""),ne=u(!1),ie=u(""),ae=[{label:"答案不分顺序",value:"isInOrder"},{label:"忽略大小写",value:"isIgnoreCase"}],oe=u(["isIgnoreCase"]);function re(){te.value+=" ______",le.value.push({title:"",tag:"",showInput:!1})}function ue(){ne.value=!1,ie.value=""}function de(){te.value?le.value.length<1?S.error("至少添加一个填空符!"):$("save",{title:te.value.replaceAll(/ ______/g,"<filter></filter>"),answers:le.value.map((e=>({title:e.title,isCorrect:!0}))),analysis:se.value,isSetCorrectAnswer:!0,examAnswerSettingBO:{isIgnoreCase:oe.value?.includes("isIgnoreCase"),isInOrder:oe.value?.includes("isInOrder")},examRichTextContent:ne.value?ie.value:""}):S.error("题目标题不能为空!")}d((()=>te.value),(()=>{const[...e]=te.value.matchAll(/ ______/g);if(e.length!==le.value.length){const l=le.value.length-e.length;le.value.splice(le.value.length-l,l)}})),m((function(){Z.title&&(te.value=Z.title.replaceAll(/<filter><\/filter>/g," ______")),Z.answerList&&Z.answerList.length&&(le.value=Z.answerList),Z.examAnswerSettingVO&&(oe.value=oe.value.filter((e=>"isIgnoreCase"===e&&Z.examAnswerSettingVO?.isIgnoreCase||"isInOrder"===e&&Z.examAnswerSettingVO?.isInOrder))),Z.analysis&&(se.value=Z.analysis),Z.examRichTextContent&&(ie.value=Z.examRichTextContent,ne.value=!0)}));const me=V("subject-blank-fill");return(o,r)=>{const u=e,d=l,m=s,V=t,S=n,Y=a,pe=i;return c(),p("div",{class:v(f(me).e("blank-fill-exam"))},[x(q,{"show-edit":o.isEdit},{preview:y((()=>[h("div",R,[h("div",B,[h("span",U,A(o.orderIndex+1)+"."+A(f(te))+"(填空题)",1),f(ne)?(c(),p("div",L,[h("div",{innerHTML:f(ie),class:"rich-text"},null,8,E)])):w("v-if",!0),f(le).some((e=>e.title))?(c(),p("div",M,[r[10]||(r[10]=h("span",{class:"title"},"正确答案:",-1)),(c(!0),p(k,null,j(f(le),((e,l)=>(c(),p("div",{key:l,class:"flex flex-wrap flex-items-center",style:{"margin-right":"10px"}},[h("span",null,"填空"+A(l+1)+":",1),h("span",null,A(e.title),1)])))),128))])):w("v-if",!0)])])])),edit:y((()=>[h("div",D,[r[11]||(r[11]=h("div",{class:"label flex flex-justify-end"},[h("span",null,"题目:")],-1)),h("div",H,[x(u,{modelValue:f(te),"onUpdate:modelValue":r[0]||(r[0]=e=>b(te)?te.value=e:null),type:"textarea",rows:7,"show-word-limit":"",maxlength:"400",placeholder:"【填空题】请输入问题",disabled:o.isSave},null,8,["modelValue","disabled"])])]),h("div",N,[w(' <el-link\n v-if="!showRichText"\n type="primary"\n @click="showRichText = true"\n >\n 添加富文本\n </el-link> '),x(d,{class:"margin-left-10",type:"primary",disabled:o.isSave,onClick:re},{default:y((()=>r[12]||(r[12]=[_(" 插入填空符 ")]))),_:1},8,["disabled"])]),h("div",z,[r[13]||(r[13]=h("div",{class:"label flex flex-justify-end"},[h("span",null,"答题设置:")],-1)),(c(),p(k,null,j(ae,(e=>x(V,{key:e.value,modelValue:f(oe),"onUpdate:modelValue":r[1]||(r[1]=e=>b(oe)?oe.value=e:null)},{default:y((()=>[x(m,{value:e.value,class:"margin-left-10"},{default:y((()=>[_(A(e.label),1)])),_:2},1032,["value"])])),_:2},1032,["modelValue"]))),64))]),h("div",F,[(c(!0),p(k,null,j(f(le),((e,l)=>(c(),p("div",{key:l,class:"answer-item flex flex-items-center"},[h("div",G,[h("span",null,"第"+A(l+1)+"空答案:",1)]),h("div",J,[(c(!0),p(k,null,j(e.title.split(","),(l=>(c(),p(k,{key:l},[l?(c(),g(S,{key:0,closable:"",onClose:t=>function(e,l){if(e){const t=l.title.split(","),s=t.findIndex((l=>l===e));s>-1&&(t.splice(s,1),l.title=t.join(","))}}(l,e)},{default:y((()=>[_(A(l),1)])),_:2},1032,["onClose"])):w("v-if",!0)],64)))),128)),o.isSave?w("v-if",!0):(c(),p(k,{key:0},[e.showInput?(c(),g(u,{key:0,modelValue:e.tag,"onUpdate:modelValue":l=>e.tag=l,style:{width:"80px"},onBlur:()=>function(e){e.showInput=!1,e.tag&&(e.title=e.title?[e.title,e.tag].join(","):e.tag,e.tag="")}(e)},null,8,["modelValue","onUpdate:modelValue","onBlur"])):(c(),g(pe,{key:1,size:"small",onClick:l=>e.showInput=!0},{default:y((()=>[x(Y,null,{default:y((()=>[x(f(I))])),_:1}),h("span",null,A(e.title?"添加同义词":"添加答案"),1)])),_:2},1032,["onClick"]))],64))])])))),128))]),o.showAnalysis?(c(),p("div",K,[r[14]||(r[14]=h("div",{class:"label flex flex-justify-end"},[h("span",null,"解析:")],-1)),h("div",P,[x(u,{modelValue:f(se),"onUpdate:modelValue":r[2]||(r[2]=e=>b(se)?se.value=e:null),type:"textarea",rows:2,placeholder:"请输入题目解析"},null,8,["modelValue"])])])):w("v-if",!0),f(ne)?(c(),p("div",Q,[r[16]||(r[16]=h("div",{class:"label flex flex-justify-center"},[h("span",null,"富文本:")],-1)),h("div",W,[x(T,C({"model-value":f(ie),"onUpdate:modelValue":r[3]||(r[3]=e=>b(ie)?ie.value=e:null)},f(ee),{style:{width:"100%"}}),null,16,["model-value"]),h("div",X,[x(d,{type:"danger",onClick:ue},{default:y((()=>r[15]||(r[15]=[_(" 删除富文本 ")]))),_:1})])])])):w("v-if",!0)])),default:y((()=>[o.showAction?(c(),g(O,{key:0,"is-edit":o.isEdit,"is-set":o.isSet,showOtherOption:!1,examAnswerRelationType:Z.examAnswerRelationType,onMoveUp:r[4]||(r[4]=e=>$("move","up")),onMoveDown:r[5]||(r[5]=e=>$("move","down")),onDelete:r[6]||(r[6]=e=>$("delete")),onSave:de,onEdit:r[7]||(r[7]=e=>$("edit")),onAdd:r[8]||(r[8]=e=>$("add",e)),onOnShowRichText:r[9]||(r[9]=e=>ne.value=!0)},null,8,["is-edit","is-set","examAnswerRelationType"])):w("v-if",!0)])),_:1},8,["show-edit"])],2)}}});export{Y as default};
1
+ import{ElInput as e,ElLink as l,ElCheckboxGroup as t,ElCheckbox as s,ElTag as n,ElButton as i,ElIcon as a}from"element-plus/es";import"element-plus/es/components/base/style/index";import"element-plus/es/components/button/style/index";import"element-plus/es/components/icon/style/index";import"element-plus/es/components/tag/style/index";import"element-plus/es/components/checkbox-group/style/index";import"element-plus/es/components/checkbox/style/index";import"element-plus/es/components/link/style/index";import"element-plus/es/components/input/style/index";import{defineComponent as o,useAttrs as r,ref as u,watch as d,onMounted as m,createElementBlock as p,openBlock as c,normalizeClass as v,unref as f,createVNode as x,withCtx as y,createBlock as g,createCommentVNode as w,createElementVNode as h,isRef as b,createTextVNode as _,Fragment as k,renderList as j,toDisplayString as C,mergeProps as I}from"vue";import{Plus as V}from"@element-plus/icons-vue";import{useNamespace as S}from"@qxs-bns/hooks";import{ElMessage as A}from"element-plus";import q from"../../../subject-action/src/subject-action.vue.mjs";import O from"../../../subject-layout/src/subject-layout.vue.mjs";import T from"../../../tiny-mce-editor/src/tiny-mce-editor.vue.mjs";const R={class:"preview"},B={class:"content"},U={class:"title"},L={key:0},E=["innerHTML"],M={key:1,class:"flex flex-wrap",style:{"margin-top":"10px",color:"#a8abb2"}},D={class:"flex"},H={style:{flex:"1"}},N={class:"flex flex-justify-end"},z={class:"margin-bottom flex flex-items-center"},F={class:"margin-bottom answer-list"},G={class:"label flex flex-justify-end"},J={class:"answer-tags"},K={key:0,class:"margin-bottom flex"},P={style:{flex:"1"}},Q={key:1,class:"margin-bottom flex"},W={style:{flex:"1"}},X={class:"flex flex-justify-end"};var Y=o({__name:"subject-blank-fill",props:{orderIndex:{type:Number,required:!0},title:{type:String,required:!1},isSave:{type:Boolean,required:!0},showAction:{type:Boolean,required:!1},answerList:{type:null,required:!1},analysis:{type:String,required:!1},isEdit:{type:Boolean,required:!0},isSet:{type:Boolean,required:!0},examAnswerSettingVO:{type:Object,required:!1},examRichTextContent:{type:String,required:!1},showAnalysis:{type:Boolean,required:!1},examAnswerRelationType:{type:Number,required:!1}},emits:["move","save","delete","edit","add"],setup(o,{emit:Y}){const Z=o,$=Y,ee=r(),le=u([]),te=u(""),se=u(""),ne=u(!1),ie=u(""),ae=[{label:"答案不分顺序",value:"isInOrder"},{label:"忽略大小写",value:"isIgnoreCase"}],oe=u(["isIgnoreCase"]);function re(){te.value+=" ______",le.value.push({title:"",tag:"",showInput:!1})}function ue(){ne.value=!1,ie.value=""}function de(){te.value?le.value.length<1?A.error("至少添加一个填空符!"):$("save",{title:te.value.replaceAll(/ ______/g,"<filter></filter>"),answers:le.value.map((e=>({title:e.title,isCorrect:!0}))),analysis:se.value,isSetCorrectAnswer:!0,examAnswerSettingBO:{isIgnoreCase:oe.value?.includes("isIgnoreCase"),isInOrder:oe.value?.includes("isInOrder")},examRichTextContent:ne.value?ie.value:""}):A.error("题目标题不能为空!")}d((()=>te.value),(()=>{const[...e]=te.value.matchAll(/ ______/g);if(e.length!==le.value.length){const l=le.value.length-e.length;le.value.splice(le.value.length-l,l)}})),m((function(){Z.title&&(te.value=Z.title.replaceAll(/<filter><\/filter>/g," ______")),Z.answerList&&Z.answerList.length&&(le.value=Z.answerList),Z.examAnswerSettingVO&&(oe.value=oe.value.filter((e=>"isIgnoreCase"===e&&Z.examAnswerSettingVO?.isIgnoreCase||"isInOrder"===e&&Z.examAnswerSettingVO?.isInOrder))),Z.analysis&&(se.value=Z.analysis),Z.examRichTextContent&&(ie.value=Z.examRichTextContent,ne.value=!0)}));const me=S("subject-blank-fill");return(o,r)=>{const u=e,d=l,m=s,S=t,A=n,Y=a,pe=i;return c(),p("div",{class:v(f(me).e("blank-fill-exam"))},[x(O,{"show-edit":o.isEdit},{preview:y((()=>[h("div",R,[h("div",B,[h("span",U,C(o.orderIndex+1)+"."+C(f(te))+"(填空题)",1),f(ne)?(c(),p("div",L,[h("div",{class:"rich-text",innerHTML:f(ie)},null,8,E)])):w("v-if",!0),f(le).some((e=>e.title))?(c(),p("div",M,[r[10]||(r[10]=h("span",{class:"title"},"正确答案:",-1)),(c(!0),p(k,null,j(f(le),((e,l)=>(c(),p("div",{key:l,class:"flex flex-wrap flex-items-center",style:{"margin-right":"10px"}},[h("span",null,"填空"+C(l+1)+":",1),h("span",null,C(e.title),1)])))),128))])):w("v-if",!0)])])])),edit:y((()=>[h("div",D,[r[11]||(r[11]=h("div",{class:"label flex flex-justify-end"},[h("span",null,"题目:")],-1)),h("div",H,[x(u,{modelValue:f(te),"onUpdate:modelValue":r[0]||(r[0]=e=>b(te)?te.value=e:null),type:"textarea",rows:7,"show-word-limit":"",maxlength:"400",placeholder:"【填空题】请输入问题",disabled:o.isSave},null,8,["modelValue","disabled"])])]),h("div",N,[w(' <el-link\n v-if="!showRichText"\n type="primary"\n @click="showRichText = true"\n >\n 添加富文本\n </el-link> '),x(d,{class:"margin-left-10",type:"primary",disabled:o.isSave,onClick:re},{default:y((()=>r[12]||(r[12]=[_(" 插入填空符 ")]))),_:1},8,["disabled"])]),h("div",z,[r[13]||(r[13]=h("div",{class:"label flex flex-justify-end"},[h("span",null,"答题设置:")],-1)),(c(),p(k,null,j(ae,(e=>x(S,{key:e.value,modelValue:f(oe),"onUpdate:modelValue":r[1]||(r[1]=e=>b(oe)?oe.value=e:null)},{default:y((()=>[x(m,{value:e.value,class:"margin-left-10"},{default:y((()=>[_(C(e.label),1)])),_:2},1032,["value"])])),_:2},1032,["modelValue"]))),64))]),h("div",F,[(c(!0),p(k,null,j(f(le),((e,l)=>(c(),p("div",{key:l,class:"answer-item flex flex-items-center"},[h("div",G,[h("span",null,"第"+C(l+1)+"空答案:",1)]),h("div",J,[(c(!0),p(k,null,j(e.title.split(","),(l=>(c(),p(k,{key:l},[l?(c(),g(A,{key:0,closable:"",onClose:t=>function(e,l){if(e){const t=l.title.split(","),s=t.findIndex((l=>l===e));s>-1&&(t.splice(s,1),l.title=t.join(","))}}(l,e)},{default:y((()=>[_(C(l),1)])),_:2},1032,["onClose"])):w("v-if",!0)],64)))),128)),o.isSave?w("v-if",!0):(c(),p(k,{key:0},[e.showInput?(c(),g(u,{key:0,modelValue:e.tag,"onUpdate:modelValue":l=>e.tag=l,style:{width:"80px"},onBlur:()=>function(e){e.showInput=!1,e.tag&&(e.title=e.title?[e.title,e.tag].join(","):e.tag,e.tag="")}(e)},null,8,["modelValue","onUpdate:modelValue","onBlur"])):(c(),g(pe,{key:1,size:"small",onClick:l=>e.showInput=!0},{default:y((()=>[x(Y,null,{default:y((()=>[x(f(V))])),_:1}),h("span",null,C(e.title?"添加同义词":"添加答案"),1)])),_:2},1032,["onClick"]))],64))])])))),128))]),o.showAnalysis?(c(),p("div",K,[r[14]||(r[14]=h("div",{class:"label flex flex-justify-end"},[h("span",null,"解析:")],-1)),h("div",P,[x(u,{modelValue:f(se),"onUpdate:modelValue":r[2]||(r[2]=e=>b(se)?se.value=e:null),type:"textarea",rows:2,placeholder:"请输入题目解析"},null,8,["modelValue"])])])):w("v-if",!0),f(ne)?(c(),p("div",Q,[r[16]||(r[16]=h("div",{class:"label flex flex-justify-center"},[h("span",null,"富文本:")],-1)),h("div",W,[x(T,I({"model-value":f(ie),"onUpdate:modelValue":r[3]||(r[3]=e=>b(ie)?ie.value=e:null)},f(ee),{style:{width:"100%"}}),null,16,["model-value"]),h("div",X,[x(d,{type:"danger",onClick:ue},{default:y((()=>r[15]||(r[15]=[_(" 删除富文本 ")]))),_:1})])])])):w("v-if",!0)])),default:y((()=>[o.showAction?(c(),g(q,{key:0,"is-edit":o.isEdit,"is-set":o.isSet,"show-other-option":!1,"exam-answer-relation-type":Z.examAnswerRelationType,onMoveUp:r[4]||(r[4]=e=>$("move","up")),onMoveDown:r[5]||(r[5]=e=>$("move","down")),onDelete:r[6]||(r[6]=e=>$("delete")),onSave:de,onEdit:r[7]||(r[7]=e=>$("edit")),onAdd:r[8]||(r[8]=e=>$("add",e)),onOnShowRichText:r[9]||(r[9]=e=>ne.value=!0)},null,8,["is-edit","is-set","exam-answer-relation-type"])):w("v-if",!0)])),_:1},8,["show-edit"])],2)}}});export{Y as default};
2
2
  //# sourceMappingURL=subject-blank-fill.vue.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"subject-blank-fill.vue.mjs","sources":["../../../../../../../packages/components/src/subject-list/src/components/subject-blank-fill.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { Plus } from '@element-plus/icons-vue'\nimport { useNamespace } from '@qxs-bns/hooks'\nimport { ElMessage } from 'element-plus'\nimport SubjectAction from '../../../subject-action/src/subject-action.vue'\nimport SubjectLayout from '../../../subject-layout/src/subject-layout.vue'\nimport TinyMceEditor from '../../../tiny-mce-editor/src/tiny-mce-editor.vue'\n\nconst props = defineProps<{\n orderIndex: number\n title?: string\n isSave: boolean\n showAction?: boolean\n answerList?: any\n analysis?: string\n isEdit: boolean\n isSet: boolean\n examAnswerSettingVO?: {\n isInOrder: boolean\n isIgnoreCase: boolean\n }\n examRichTextContent?: string\n showAnalysis?: boolean\n examAnswerRelationType?: number\n}>()\nconst emits = defineEmits(['move', 'save', 'delete', 'edit', 'add'])\n\nconst attrs = useAttrs()\n\nconst answers = ref<{\n title: string\n tag: string\n showInput: boolean\n}[]>([])\n\nconst title = ref('')\nconst analysis = ref('')\nconst showRichText = ref(false)\nconst richText = ref('')\n\nconst checkList = [\n {\n label: '答案不分顺序',\n value: 'isInOrder',\n },\n {\n label: '忽略大小写',\n value: 'isIgnoreCase',\n },\n]\n\nconst isCheckList = ref(['isIgnoreCase'])\n\nfunction handleAddTag(item: any) {\n item.showInput = false\n if (item.tag) {\n item.title = item.title ? [item.title, item.tag].join(',') : item.tag\n item.tag = ''\n }\n}\n\nfunction closeTag(tag: string, item: any) {\n if (tag) {\n const tags = item.title.split(',')\n const index = tags.findIndex((i: string) => i === tag)\n if (index > -1) {\n tags.splice(index, 1)\n item.title = tags.join(',')\n }\n }\n}\n\nfunction addBlank() {\n title.value += ' ______'\n answers.value.push({\n title: '',\n tag: '',\n showInput: false,\n })\n}\n\nfunction deleteRichText() {\n showRichText.value = false\n richText.value = ''\n}\n\nfunction save() {\n if (!title.value) {\n ElMessage.error('题目标题不能为空!')\n return\n }\n\n if (answers.value.length < 1) {\n ElMessage.error('至少添加一个填空符!')\n return\n }\n\n emits('save', {\n title: title.value.replaceAll(/ ______/g, '<filter></filter>'),\n answers: answers.value.map((item: any) => {\n return { title: item.title, isCorrect: true }\n }),\n analysis: analysis.value,\n isSetCorrectAnswer: true,\n examAnswerSettingBO: {\n isIgnoreCase: isCheckList.value?.includes('isIgnoreCase'),\n isInOrder: isCheckList.value?.includes('isInOrder'),\n },\n examRichTextContent: showRichText.value ? richText.value : '',\n })\n}\n\nfunction init() {\n if (props.title) {\n title.value = props.title.replaceAll(/<filter><\\/filter>/g, ' ______')\n }\n\n if (props.answerList && props.answerList.length) {\n answers.value = props.answerList\n }\n\n if (props.examAnswerSettingVO) {\n // 仅保留与设置匹配的选项\n isCheckList.value = isCheckList.value.filter((item: any) =>\n (item === 'isIgnoreCase' && props.examAnswerSettingVO?.isIgnoreCase)\n || (item === 'isInOrder' && props.examAnswerSettingVO?.isInOrder),\n )\n }\n\n if (props.analysis) {\n analysis.value = props.analysis\n }\n\n if (props.examRichTextContent) {\n richText.value = props.examRichTextContent\n showRichText.value = true\n }\n}\n\nwatch(() => title.value, () => {\n const [...matchs] = title.value.matchAll(/ ______/g)\n if (matchs.length !== answers.value.length) {\n const differ = answers.value.length - matchs.length\n answers.value.splice(answers.value.length - differ, differ)\n }\n})\n\nonMounted(init)\nconst ns = useNamespace('subject-blank-fill')\n</script>\n\n<template>\n <div :class=\"ns.e('blank-fill-exam')\">\n <SubjectLayout :show-edit=\"isEdit\">\n <template #preview>\n <div class=\"preview\">\n <div class=\"content\">\n <span class=\"title\">{{ orderIndex + 1 }}.{{ title }}(填空题)</span>\n <div v-if=\"showRichText\">\n <div v-html=\"richText\" class=\"rich-text\"/>\n </div>\n <div\n v-if=\"answers.some((item) => item.title)\"\n class=\"flex flex-wrap\"\n style=\"margin-top: 10px;color: #a8abb2;\"\n >\n <span class=\"title\">正确答案:</span>\n <div\n v-for=\"(item, index) in answers\"\n :key=\"index\"\n class=\"flex flex-wrap flex-items-center\"\n style=\"margin-right: 10px;\"\n >\n <span>填空{{ index + 1 }}:</span>\n <span>{{ item.title }}</span>\n </div>\n </div>\n </div>\n </div>\n </template>\n <template #edit>\n <div class=\"flex\">\n <div class=\"label flex flex-justify-end\">\n <span>题目:</span>\n </div>\n <div style=\"flex: 1;\">\n <el-input\n v-model=\"title\"\n type=\"textarea\"\n :rows=\"7\"\n show-word-limit\n maxlength=\"400\"\n placeholder=\"【填空题】请输入问题\"\n :disabled=\"isSave\"\n />\n </div>\n </div>\n <div class=\"flex flex-justify-end\">\n <!-- <el-link\n v-if=\"!showRichText\"\n type=\"primary\"\n @click=\"showRichText = true\"\n >\n 添加富文本\n </el-link> -->\n <el-link\n class=\"margin-left-10\"\n type=\"primary\"\n :disabled=\"isSave\"\n @click=\"addBlank\"\n >\n 插入填空符\n </el-link>\n </div>\n <div class=\"margin-bottom flex flex-items-center\">\n <div class=\"label flex flex-justify-end\">\n <span>答题设置:</span>\n </div>\n\n <el-checkbox-group\n v-for=\"item in checkList\"\n :key=\"item.value\"\n v-model=\"isCheckList\"\n >\n <el-checkbox :value=\"item.value\" class=\"margin-left-10\">\n {{ item.label }}\n </el-checkbox>\n </el-checkbox-group>\n </div>\n <div class=\"margin-bottom answer-list\">\n <div\n v-for=\"(item, index) in answers\"\n :key=\"index\"\n class=\"answer-item flex flex-items-center\"\n >\n <div class=\"label flex flex-justify-end\">\n <span>第{{ index + 1 }}空答案:</span>\n </div>\n\n <div class=\"answer-tags\">\n <template\n v-for=\"i in item.title.split(',')\"\n :key=\"i\"\n >\n <el-tag\n v-if=\"i\"\n closable\n @close=\"closeTag(i, item)\"\n >\n {{ i }}\n </el-tag>\n </template>\n <template v-if=\"!isSave\">\n <el-input\n v-if=\"item.showInput\"\n v-model=\"item.tag\"\n style=\"width: 80px;\"\n @blur=\"() => handleAddTag(item)\"\n />\n <el-button\n v-else\n size=\"small\"\n @click=\"item.showInput = true\"\n >\n <el-icon><Plus /></el-icon>\n <span>{{ item.title ? '添加同义词' : '添加答案' }}</span>\n </el-button>\n </template>\n </div>\n </div>\n </div>\n <div v-if=\"showAnalysis\" class=\"margin-bottom flex\">\n <div class=\"label flex flex-justify-end\">\n <span>解析:</span>\n </div>\n <div style=\"flex: 1;\">\n <el-input\n v-model=\"analysis\"\n type=\"textarea\"\n :rows=\"2\"\n placeholder=\"请输入题目解析\"\n />\n </div>\n </div>\n <div v-if=\"showRichText\" class=\"margin-bottom flex\">\n <div class=\"label flex flex-justify-center\">\n <span>富文本:</span>\n </div>\n <div style=\"flex: 1;\">\n <TinyMceEditor v-model:model-value=\"richText\" v-bind=\"attrs\" style=\"width: 100%;\" />\n <div class=\"flex flex-justify-end\">\n <el-link\n type=\"danger\"\n @click=\"deleteRichText\"\n >\n 删除富文本\n </el-link>\n </div>\n </div>\n </div>\n </template>\n <SubjectAction\n v-if=\"showAction\"\n :is-edit=\"isEdit\"\n :is-set=\"isSet\"\n :showOtherOption=\"false\"\n :examAnswerRelationType=\"props.examAnswerRelationType\"\n @move-up=\"emits('move', 'up')\"\n @move-down=\"emits('move', 'down')\"\n @delete=\"emits('delete')\"\n @save=\"save\"\n @edit=\"emits('edit')\"\n @add=\"type => emits('add', type)\"\n @onShowRichText=\"showRichText = true\"\n />\n </SubjectLayout>\n </div>\n</template>\n"],"names":["props","__props","emits","__emit","attrs","useAttrs","answers","ref","title","analysis","showRichText","richText","checkList","label","value","isCheckList","addBlank","push","tag","showInput","deleteRichText","save","length","ElMessage","error","replaceAll","map","item","isCorrect","isSetCorrectAnswer","examAnswerSettingBO","isIgnoreCase","includes","isInOrder","examRichTextContent","watch","matchs","matchAll","differ","splice","onMounted","answerList","examAnswerSettingVO","filter","ns","useNamespace","tags","split","index","findIndex","i","join"],"mappings":"+yEAQA,MAAMA,EAAQC,EAiBRC,EAAQC,EAERC,GAAQC,IAERC,GAAUC,EAIX,IAECC,GAAQD,EAAI,IACZE,GAAWF,EAAI,IACfG,GAAeH,GAAI,GACnBI,GAAWJ,EAAI,IAEfK,GAAY,CAChB,CACEC,MAAO,SACPC,MAAO,aAET,CACED,MAAO,QACPC,MAAO,iBAILC,GAAcR,EAAI,CAAC,iBAqBzB,SAASS,KACPR,GAAMM,OAAS,UACfR,GAAQQ,MAAMG,KAAK,CACjBT,MAAO,GACPU,IAAK,GACLC,WAAW,GACZ,CAGH,SAASC,KACPV,GAAaI,OAAQ,EACrBH,GAASG,MAAQ,EAAA,CAGnB,SAASO,KACFb,GAAMM,MAKPR,GAAQQ,MAAMQ,OAAS,EACzBC,EAAUC,MAAM,cAIlBtB,EAAM,OAAQ,CACZM,MAAOA,GAAMM,MAAMW,WAAW,WAAY,qBAC1CnB,QAASA,GAAQQ,MAAMY,KAAKC,IACnB,CAAEnB,MAAOmB,EAAKnB,MAAOoB,WAAW,MAEzCnB,SAAUA,GAASK,MACnBe,oBAAoB,EACpBC,oBAAqB,CACnBC,aAAchB,GAAYD,OAAOkB,SAAS,gBAC1CC,UAAWlB,GAAYD,OAAOkB,SAAS,cAEzCE,oBAAqBxB,GAAaI,MAAQH,GAASG,MAAQ,KApB3DS,EAAUC,MAAM,YAqBjB,CA8BGW,GAAA,IAAM3B,GAAMM,QAAO,KACvB,SAAUsB,GAAU5B,GAAMM,MAAMuB,SAAS,YACzC,GAAID,EAAOd,SAAWhB,GAAQQ,MAAMQ,OAAQ,CAC1C,MAAMgB,EAAShC,GAAQQ,MAAMQ,OAASc,EAAOd,OAC7ChB,GAAQQ,MAAMyB,OAAOjC,GAAQQ,MAAMQ,OAASgB,EAAQA,EAAM,KAI9DE,GAnCA,WACMxC,EAAMQ,QACRA,GAAMM,MAAQd,EAAMQ,MAAMiB,WAAW,sBAAuB,YAG1DzB,EAAMyC,YAAczC,EAAMyC,WAAWnB,SACvChB,GAAQQ,MAAQd,EAAMyC,YAGpBzC,EAAM0C,sBAEI3B,GAAAD,MAAQC,GAAYD,MAAM6B,QAAQhB,GAClC,iBAATA,GAA2B3B,EAAM0C,qBAAqBX,cAC1C,cAATJ,GAAwB3B,EAAM0C,qBAAqBT,aAIvDjC,EAAMS,WACRA,GAASK,MAAQd,EAAMS,UAGrBT,EAAMkC,sBACRvB,GAASG,MAAQd,EAAMkC,oBACvBxB,GAAaI,OAAQ,EACvB,IAYI,MAAA8B,GAAKC,EAAa,k7DAvFf,SAAS3B,EAAaS,GAC7B,GAAIT,EAAK,CACP,MAAM4B,EAAOnB,EAAKnB,MAAMuC,MAAM,KACxBC,EAAQF,EAAKG,WAAWC,GAAcA,IAAMhC,IAC9C8B,GAAQ,IACLF,EAAAP,OAAOS,EAAO,GACdrB,EAAAnB,MAAQsC,EAAKK,KAAK,KACzB,CACF,+OAhBF,SAAsBxB,GACpBA,EAAKR,WAAY,EACbQ,EAAKT,MACPS,EAAKnB,MAAQmB,EAAKnB,MAAQ,CAACmB,EAAKnB,MAAOmB,EAAKT,KAAKiC,KAAK,KAAOxB,EAAKT,IAClES,EAAKT,IAAM,GACb"}
1
+ {"version":3,"file":"subject-blank-fill.vue.mjs","sources":["../../../../../../../packages/components/src/subject-list/src/components/subject-blank-fill.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { Plus } from '@element-plus/icons-vue'\nimport { useNamespace } from '@qxs-bns/hooks'\nimport { ElMessage } from 'element-plus'\nimport SubjectAction from '../../../subject-action/src/subject-action.vue'\nimport SubjectLayout from '../../../subject-layout/src/subject-layout.vue'\nimport TinyMceEditor from '../../../tiny-mce-editor/src/tiny-mce-editor.vue'\n\nconst props = defineProps<{\n orderIndex: number\n title?: string\n isSave: boolean\n showAction?: boolean\n answerList?: any\n analysis?: string\n isEdit: boolean\n isSet: boolean\n examAnswerSettingVO?: {\n isInOrder: boolean\n isIgnoreCase: boolean\n }\n examRichTextContent?: string\n showAnalysis?: boolean\n examAnswerRelationType?: number\n}>()\nconst emits = defineEmits(['move', 'save', 'delete', 'edit', 'add'])\n\nconst attrs = useAttrs()\n\nconst answers = ref<{\n title: string\n tag: string\n showInput: boolean\n}[]>([])\n\nconst title = ref('')\nconst analysis = ref('')\nconst showRichText = ref(false)\nconst richText = ref('')\n\nconst checkList = [\n {\n label: '答案不分顺序',\n value: 'isInOrder',\n },\n {\n label: '忽略大小写',\n value: 'isIgnoreCase',\n },\n]\n\nconst isCheckList = ref(['isIgnoreCase'])\n\nfunction handleAddTag(item: any) {\n item.showInput = false\n if (item.tag) {\n item.title = item.title ? [item.title, item.tag].join(',') : item.tag\n item.tag = ''\n }\n}\n\nfunction closeTag(tag: string, item: any) {\n if (tag) {\n const tags = item.title.split(',')\n const index = tags.findIndex((i: string) => i === tag)\n if (index > -1) {\n tags.splice(index, 1)\n item.title = tags.join(',')\n }\n }\n}\n\nfunction addBlank() {\n title.value += ' ______'\n answers.value.push({\n title: '',\n tag: '',\n showInput: false,\n })\n}\n\nfunction deleteRichText() {\n showRichText.value = false\n richText.value = ''\n}\n\nfunction save() {\n if (!title.value) {\n ElMessage.error('题目标题不能为空!')\n return\n }\n\n if (answers.value.length < 1) {\n ElMessage.error('至少添加一个填空符!')\n return\n }\n\n emits('save', {\n title: title.value.replaceAll(/ ______/g, '<filter></filter>'),\n answers: answers.value.map((item: any) => {\n return { title: item.title, isCorrect: true }\n }),\n analysis: analysis.value,\n isSetCorrectAnswer: true,\n examAnswerSettingBO: {\n isIgnoreCase: isCheckList.value?.includes('isIgnoreCase'),\n isInOrder: isCheckList.value?.includes('isInOrder'),\n },\n examRichTextContent: showRichText.value ? richText.value : '',\n })\n}\n\nfunction init() {\n if (props.title) {\n title.value = props.title.replaceAll(/<filter><\\/filter>/g, ' ______')\n }\n\n if (props.answerList && props.answerList.length) {\n answers.value = props.answerList\n }\n\n if (props.examAnswerSettingVO) {\n // 仅保留与设置匹配的选项\n isCheckList.value = isCheckList.value.filter((item: any) =>\n (item === 'isIgnoreCase' && props.examAnswerSettingVO?.isIgnoreCase)\n || (item === 'isInOrder' && props.examAnswerSettingVO?.isInOrder),\n )\n }\n\n if (props.analysis) {\n analysis.value = props.analysis\n }\n\n if (props.examRichTextContent) {\n richText.value = props.examRichTextContent\n showRichText.value = true\n }\n}\n\nwatch(() => title.value, () => {\n const [...matchs] = title.value.matchAll(/ ______/g)\n if (matchs.length !== answers.value.length) {\n const differ = answers.value.length - matchs.length\n answers.value.splice(answers.value.length - differ, differ)\n }\n})\n\nonMounted(init)\nconst ns = useNamespace('subject-blank-fill')\n</script>\n\n<template>\n <div :class=\"ns.e('blank-fill-exam')\">\n <SubjectLayout :show-edit=\"isEdit\">\n <template #preview>\n <div class=\"preview\">\n <div class=\"content\">\n <span class=\"title\">{{ orderIndex + 1 }}.{{ title }}(填空题)</span>\n <div v-if=\"showRichText\">\n <div\n class=\"rich-text\"\n v-html=\"richText\"\n />\n </div>\n <div\n v-if=\"answers.some((item) => item.title)\"\n class=\"flex flex-wrap\"\n style=\"margin-top: 10px;color: #a8abb2;\"\n >\n <span class=\"title\">正确答案:</span>\n <div\n v-for=\"(item, index) in answers\"\n :key=\"index\"\n class=\"flex flex-wrap flex-items-center\"\n style=\"margin-right: 10px;\"\n >\n <span>填空{{ index + 1 }}:</span>\n <span>{{ item.title }}</span>\n </div>\n </div>\n </div>\n </div>\n </template>\n <template #edit>\n <div class=\"flex\">\n <div class=\"label flex flex-justify-end\">\n <span>题目:</span>\n </div>\n <div style=\"flex: 1;\">\n <el-input\n v-model=\"title\"\n type=\"textarea\"\n :rows=\"7\"\n show-word-limit\n maxlength=\"400\"\n placeholder=\"【填空题】请输入问题\"\n :disabled=\"isSave\"\n />\n </div>\n </div>\n <div class=\"flex flex-justify-end\">\n <!-- <el-link\n v-if=\"!showRichText\"\n type=\"primary\"\n @click=\"showRichText = true\"\n >\n 添加富文本\n </el-link> -->\n <el-link\n class=\"margin-left-10\"\n type=\"primary\"\n :disabled=\"isSave\"\n @click=\"addBlank\"\n >\n 插入填空符\n </el-link>\n </div>\n <div class=\"margin-bottom flex flex-items-center\">\n <div class=\"label flex flex-justify-end\">\n <span>答题设置:</span>\n </div>\n\n <el-checkbox-group\n v-for=\"item in checkList\"\n :key=\"item.value\"\n v-model=\"isCheckList\"\n >\n <el-checkbox\n :value=\"item.value\"\n class=\"margin-left-10\"\n >\n {{ item.label }}\n </el-checkbox>\n </el-checkbox-group>\n </div>\n <div class=\"margin-bottom answer-list\">\n <div\n v-for=\"(item, index) in answers\"\n :key=\"index\"\n class=\"answer-item flex flex-items-center\"\n >\n <div class=\"label flex flex-justify-end\">\n <span>第{{ index + 1 }}空答案:</span>\n </div>\n\n <div class=\"answer-tags\">\n <template\n v-for=\"i in item.title.split(',')\"\n :key=\"i\"\n >\n <el-tag\n v-if=\"i\"\n closable\n @close=\"closeTag(i, item)\"\n >\n {{ i }}\n </el-tag>\n </template>\n <template v-if=\"!isSave\">\n <el-input\n v-if=\"item.showInput\"\n v-model=\"item.tag\"\n style=\"width: 80px;\"\n @blur=\"() => handleAddTag(item)\"\n />\n <el-button\n v-else\n size=\"small\"\n @click=\"item.showInput = true\"\n >\n <el-icon><Plus /></el-icon>\n <span>{{ item.title ? '添加同义词' : '添加答案' }}</span>\n </el-button>\n </template>\n </div>\n </div>\n </div>\n <div\n v-if=\"showAnalysis\"\n class=\"margin-bottom flex\"\n >\n <div class=\"label flex flex-justify-end\">\n <span>解析:</span>\n </div>\n <div style=\"flex: 1;\">\n <el-input\n v-model=\"analysis\"\n type=\"textarea\"\n :rows=\"2\"\n placeholder=\"请输入题目解析\"\n />\n </div>\n </div>\n <div\n v-if=\"showRichText\"\n class=\"margin-bottom flex\"\n >\n <div class=\"label flex flex-justify-center\">\n <span>富文本:</span>\n </div>\n <div style=\"flex: 1;\">\n <TinyMceEditor\n v-model:model-value=\"richText\"\n v-bind=\"attrs\"\n style=\"width: 100%;\"\n />\n <div class=\"flex flex-justify-end\">\n <el-link\n type=\"danger\"\n @click=\"deleteRichText\"\n >\n 删除富文本\n </el-link>\n </div>\n </div>\n </div>\n </template>\n <SubjectAction\n v-if=\"showAction\"\n :is-edit=\"isEdit\"\n :is-set=\"isSet\"\n :show-other-option=\"false\"\n :exam-answer-relation-type=\"props.examAnswerRelationType\"\n @move-up=\"emits('move', 'up')\"\n @move-down=\"emits('move', 'down')\"\n @delete=\"emits('delete')\"\n @save=\"save\"\n @edit=\"emits('edit')\"\n @add=\"type => emits('add', type)\"\n @on-show-rich-text=\"showRichText = true\"\n />\n </SubjectLayout>\n </div>\n</template>\n"],"names":["props","__props","emits","__emit","attrs","useAttrs","answers","ref","title","analysis","showRichText","richText","checkList","label","value","isCheckList","addBlank","push","tag","showInput","deleteRichText","save","length","ElMessage","error","replaceAll","map","item","isCorrect","isSetCorrectAnswer","examAnswerSettingBO","isIgnoreCase","includes","isInOrder","examRichTextContent","watch","matchs","matchAll","differ","splice","onMounted","answerList","examAnswerSettingVO","filter","ns","useNamespace","tags","split","index","findIndex","i","join"],"mappings":"+yEAQA,MAAMA,EAAQC,EAiBRC,EAAQC,EAERC,GAAQC,IAERC,GAAUC,EAIX,IAECC,GAAQD,EAAI,IACZE,GAAWF,EAAI,IACfG,GAAeH,GAAI,GACnBI,GAAWJ,EAAI,IAEfK,GAAY,CAChB,CACEC,MAAO,SACPC,MAAO,aAET,CACED,MAAO,QACPC,MAAO,iBAILC,GAAcR,EAAI,CAAC,iBAqBzB,SAASS,KACPR,GAAMM,OAAS,UACfR,GAAQQ,MAAMG,KAAK,CACjBT,MAAO,GACPU,IAAK,GACLC,WAAW,GACZ,CAGH,SAASC,KACPV,GAAaI,OAAQ,EACrBH,GAASG,MAAQ,EAAA,CAGnB,SAASO,KACFb,GAAMM,MAKPR,GAAQQ,MAAMQ,OAAS,EACzBC,EAAUC,MAAM,cAIlBtB,EAAM,OAAQ,CACZM,MAAOA,GAAMM,MAAMW,WAAW,WAAY,qBAC1CnB,QAASA,GAAQQ,MAAMY,KAAKC,IACnB,CAAEnB,MAAOmB,EAAKnB,MAAOoB,WAAW,MAEzCnB,SAAUA,GAASK,MACnBe,oBAAoB,EACpBC,oBAAqB,CACnBC,aAAchB,GAAYD,OAAOkB,SAAS,gBAC1CC,UAAWlB,GAAYD,OAAOkB,SAAS,cAEzCE,oBAAqBxB,GAAaI,MAAQH,GAASG,MAAQ,KApB3DS,EAAUC,MAAM,YAqBjB,CA8BGW,GAAA,IAAM3B,GAAMM,QAAO,KACvB,SAAUsB,GAAU5B,GAAMM,MAAMuB,SAAS,YACzC,GAAID,EAAOd,SAAWhB,GAAQQ,MAAMQ,OAAQ,CAC1C,MAAMgB,EAAShC,GAAQQ,MAAMQ,OAASc,EAAOd,OAC7ChB,GAAQQ,MAAMyB,OAAOjC,GAAQQ,MAAMQ,OAASgB,EAAQA,EAAM,KAI9DE,GAnCA,WACMxC,EAAMQ,QACRA,GAAMM,MAAQd,EAAMQ,MAAMiB,WAAW,sBAAuB,YAG1DzB,EAAMyC,YAAczC,EAAMyC,WAAWnB,SACvChB,GAAQQ,MAAQd,EAAMyC,YAGpBzC,EAAM0C,sBAEI3B,GAAAD,MAAQC,GAAYD,MAAM6B,QAAQhB,GAClC,iBAATA,GAA2B3B,EAAM0C,qBAAqBX,cAC1C,cAATJ,GAAwB3B,EAAM0C,qBAAqBT,aAIvDjC,EAAMS,WACRA,GAASK,MAAQd,EAAMS,UAGrBT,EAAMkC,sBACRvB,GAASG,MAAQd,EAAMkC,oBACvBxB,GAAaI,OAAQ,EACvB,IAYI,MAAA8B,GAAKC,EAAa,k7DAvFf,SAAS3B,EAAaS,GAC7B,GAAIT,EAAK,CACP,MAAM4B,EAAOnB,EAAKnB,MAAMuC,MAAM,KACxBC,EAAQF,EAAKG,WAAWC,GAAcA,IAAMhC,IAC9C8B,GAAQ,IACLF,EAAAP,OAAOS,EAAO,GACdrB,EAAAnB,MAAQsC,EAAKK,KAAK,KACzB,CACF,+OAhBF,SAAsBxB,GACpBA,EAAKR,WAAY,EACbQ,EAAKT,MACPS,EAAKnB,MAAQmB,EAAKnB,MAAQ,CAACmB,EAAKnB,MAAOmB,EAAKT,KAAKiC,KAAK,KAAOxB,EAAKT,IAClES,EAAKT,IAAM,GACb"}
@@ -1,2 +1,2 @@
1
- import{ElInput as e,ElIcon as l,ElLink as t,ElRow as s,ElCol as n,ElRadio as a}from"element-plus/es";import"element-plus/es/components/base/style/index";import"element-plus/es/components/link/style/index";import"element-plus/es/components/icon/style/index";import"element-plus/es/components/input/style/index";import"element-plus/es/components/radio/style/index";import"element-plus/es/components/row/style/index";import"element-plus/es/components/col/style/index";import{defineComponent as i,useAttrs as o,ref as u,computed as r,onMounted as d,createElementBlock as c,openBlock as p,normalizeClass as m,unref as v,createVNode as f,withCtx as x,createBlock as y,createCommentVNode as h,createElementVNode as w,isRef as b,Fragment as g,renderList as j,toDisplayString as C,mergeProps as S,createTextVNode as k}from"vue";import{CirclePlus as V,Remove as q}from"@element-plus/icons-vue";import{useNamespace as T}from"@qxs-bns/hooks";import{ElMessage as _}from"element-plus";import L from"../../../subject-action/src/subject-action.vue.mjs";import A from"../../../subject-layout/src/subject-layout.vue.mjs";import R from"../../../tiny-mce-editor/src/tiny-mce-editor.vue.mjs";const U={class:"preview"},M={class:"title"},E={key:0},O=["innerHTML"],Q={class:"answer-radio flex-col"},B={style:{flex:"1"}},D={class:"answer flex"},H={class:"flex"},I={class:"answer-list flex-col"},N={class:"order"},$={class:"flex",style:{"margin-bottom":"20px"}},P={style:{flex:"1"}},z={key:0,class:"margin-bottom flex"},F={style:{flex:"1"}},G={class:"flex flex-justify-end"};var J=i({name:"QxsSubjectScale",__name:"subject-scale",props:{orderIndex:{type:Number,required:!0},title:{type:String,required:!1},isSave:{type:Boolean,required:!0},showAction:{type:Boolean,required:!1},answerList:{type:null,required:!1},analysis:{type:String,required:!1},rowTitle:{type:String,required:!1},isEdit:{type:Boolean,required:!0},isSet:{type:Boolean,required:!0},scaleQuestionList:{type:null,required:!1},examRichTextContent:{type:String,required:!1},examAnswerRelationType:{type:Number,required:!1}},emits:["move","save","delete","edit","add"],setup(i,{emit:J}){const K=i,W=J,X=o(),Y=u([{title:""},{title:""},{title:""},{title:""},{title:""}]),Z=u(""),ee=u(""),le=u(""),te=u(!1),se=u(""),ne=u([]),ae=r((()=>Math.ceil(24/(Y.value.length+1))));function ie(){5!==Y.value.length&&Y.value.push({title:""})}function oe(){te.value=!1,se.value=""}function ue(){if(!Z.value)return void _.error("题目标题不能为空!");let e="";Y.value.forEach(((l,t)=>{l.title||(e+=`选项${String.fromCharCode(65+t)}未填写。`)})),e?_.error(e):le.value?(ne.value=le.value.split("\n").filter((e=>e)),W("save",{title:Z.value,answers:Y.value,analysis:ee.value,scaleQuestionList:ne.value,examRichTextContent:te.value?se.value:""})):_.error("行标题不能为空!")}d((function(){K.title&&(Z.value=K.title),K.answerList&&K.answerList.length&&(Y.value=K.answerList),K.analysis&&(ee.value=K.analysis),K.scaleQuestionList&&(ne.value=K.scaleQuestionList,le.value=ne.value.join("\n")),K.examRichTextContent&&(se.value=K.examRichTextContent,te.value=!0)}));const re=T("subject-scale");return(i,o)=>{const u=n,r=s,d=a,T=e,_=l,J=t;return p(),c("div",{class:m(v(re).e("scale-exam"))},[f(A,{"show-edit":i.isEdit},{preview:x((()=>[w("div",U,[w("div",null,[w("span",M,C(i.orderIndex+1)+"."+C(v(Z))+"(量表题)",1),v(te)?(p(),c("div",E,[w("div",{innerHTML:v(se),class:"rich-text"},null,8,O)])):h("v-if",!0)]),w("div",Q,[f(r,{style:{padding:"10px 0"}},{default:x((()=>[f(u,{span:v(ae)},null,8,["span"]),(p(!0),c(g,null,j(v(Y),(e=>(p(),y(u,{key:e.title,class:"flex flex-center",span:v(ae)},{default:x((()=>[w("span",null,C(e.title),1)])),_:2},1032,["span"])))),128))])),_:1}),(p(!0),c(g,null,j(v(ne),(e=>(p(),y(r,{key:e,style:{padding:"10px 0"}},{default:x((()=>[f(u,{span:v(ae),class:"flex flex-center"},{default:x((()=>[w("span",null,C(e),1)])),_:2},1032,["span"]),(p(!0),c(g,null,j(v(Y).length,(e=>(p(),y(u,{key:e,class:"radio-item flex flex-center",span:v(ae)},{default:x((()=>[f(d,{disabled:!0})])),_:2},1032,["span"])))),128))])),_:2},1024)))),128))])])])),edit:x((()=>[w("div",{class:m(["flex",[{"margin-bottom":v(te)}]])},[o[10]||(o[10]=w("div",{class:"label flex flex-justify-center"},[w("span",null,"题目:")],-1)),w("div",B,[f(T,{modelValue:v(Z),"onUpdate:modelValue":o[0]||(o[0]=e=>b(Z)?Z.value=e:null),type:"textarea",rows:2,placeholder:"【量表题】请输入问题",disabled:i.isSave},null,8,["modelValue","disabled"])])],2),w("div",D,[o[11]||(o[11]=w("div",{class:"label flex flex-justify-center"},[w("span",null,"行标题:")],-1)),w("div",H,[f(T,{modelValue:v(le),"onUpdate:modelValue":o[1]||(o[1]=e=>b(le)?le.value=e:null),type:"textarea",placeholder:"请输入行标题",style:{width:"160px"},rows:10},null,8,["modelValue"]),w("div",I,[(p(!0),c(g,null,j(v(Y),((e,l)=>(p(),c("div",{key:l,class:"answer-item flex flex-items-center"},[w("span",N,C(String.fromCharCode(65+l))+".",1),f(T,{modelValue:e.title,"onUpdate:modelValue":l=>e.title=l,class:"input","show-word-limit":"",maxlength:10,placeholder:`选项${String.fromCharCode(65+l)}`,disabled:i.isSave},null,8,["modelValue","onUpdate:modelValue","placeholder","disabled"]),h(' <PlusCircleOutlined\n class="icon"\n :class="[{ disabled: answers.length === 5 }]"\n @click="addAnswer"\n />\n <MinusCircleOutlined\n class="icon"\n :class="[{ disabled: answers.length < 3 }]"\n @click="deleteAnswer(index)"\n /> '),f(_,{class:"icon"},{default:x((()=>[f(v(V),{class:m([{disabled:5===v(Y).length}]),onClick:ie},null,8,["class"])])),_:1}),f(_,{class:"icon"},{default:x((()=>[f(v(q),{class:m([{disabled:v(Y).length<3}]),onClick:e=>function(e){Y.value.length<3||Y.value.splice(e,1)}(l)},null,8,["class","onClick"])])),_:2},1024)])))),128))])])]),w("div",$,[o[12]||(o[12]=w("div",{class:"label flex flex-justify-center"},[w("span",null,"解析:")],-1)),w("div",P,[f(T,{modelValue:v(ee),"onUpdate:modelValue":o[2]||(o[2]=e=>b(ee)?ee.value=e:null),type:"textarea",rows:2,placeholder:"请输入题目解析"},null,8,["modelValue"])])]),v(te)?(p(),c("div",z,[o[14]||(o[14]=w("div",{class:"label flex flex-justify-center"},[w("span",null,"富文本:")],-1)),w("div",F,[f(R,S({"model-value":v(se),"onUpdate:modelValue":o[3]||(o[3]=e=>b(se)?se.value=e:null)},v(X),{style:{width:"100%"}}),null,16,["model-value"]),w("div",G,[f(J,{type:"danger",onClick:oe},{default:x((()=>o[13]||(o[13]=[k(" 删除富文本 ")]))),_:1})])])])):h("v-if",!0)])),default:x((()=>[i.showAction?(p(),y(L,{key:0,"is-edit":i.isEdit,"is-set":i.isSet,showOtherOption:!1,examAnswerRelationType:K.examAnswerRelationType,onMoveUp:o[4]||(o[4]=e=>W("move","up")),onMoveDown:o[5]||(o[5]=e=>W("move","down")),onDelete:o[6]||(o[6]=e=>W("delete")),onSave:ue,onEdit:o[7]||(o[7]=e=>W("edit")),onAdd:o[8]||(o[8]=e=>W("add",e)),onOnShowRichText:o[9]||(o[9]=e=>te.value=!0)},null,8,["is-edit","is-set","examAnswerRelationType"])):h("v-if",!0)])),_:1},8,["show-edit"])],2)}}});export{J as default};
1
+ import{ElInput as e,ElIcon as l,ElLink as t,ElRow as s,ElCol as n,ElRadio as a}from"element-plus/es";import"element-plus/es/components/base/style/index";import"element-plus/es/components/link/style/index";import"element-plus/es/components/icon/style/index";import"element-plus/es/components/input/style/index";import"element-plus/es/components/radio/style/index";import"element-plus/es/components/row/style/index";import"element-plus/es/components/col/style/index";import{defineComponent as i,useAttrs as o,ref as r,computed as u,onMounted as d,createElementBlock as c,openBlock as p,normalizeClass as m,unref as v,createVNode as f,withCtx as x,createBlock as y,createCommentVNode as h,createElementVNode as w,isRef as b,Fragment as g,renderList as j,toDisplayString as C,mergeProps as S,createTextVNode as k}from"vue";import{CirclePlus as V,Remove as q}from"@element-plus/icons-vue";import{useNamespace as _}from"@qxs-bns/hooks";import{ElMessage as L}from"element-plus";import T from"../../../subject-action/src/subject-action.vue.mjs";import A from"../../../subject-layout/src/subject-layout.vue.mjs";import R from"../../../tiny-mce-editor/src/tiny-mce-editor.vue.mjs";const U={class:"preview"},M={class:"title"},E={key:0},Q=["innerHTML"],B={class:"answer-radio flex-col"},O={style:{flex:"1"}},D={class:"answer flex"},H={class:"flex"},I={class:"answer-list flex-col"},N={class:"order"},$={class:"flex",style:{"margin-bottom":"20px"}},P={style:{flex:"1"}},z={key:0,class:"margin-bottom flex"},F={style:{flex:"1"}},G={class:"flex flex-justify-end"};var J=i({name:"QxsSubjectScale",__name:"subject-scale",props:{orderIndex:{type:Number,required:!0},title:{type:String,required:!1},isSave:{type:Boolean,required:!0},showAction:{type:Boolean,required:!1},answerList:{type:null,required:!1},analysis:{type:String,required:!1},rowTitle:{type:String,required:!1},isEdit:{type:Boolean,required:!0},isSet:{type:Boolean,required:!0},scaleQuestionList:{type:null,required:!1},examRichTextContent:{type:String,required:!1},examAnswerRelationType:{type:Number,required:!1}},emits:["move","save","delete","edit","add"],setup(i,{emit:J}){const K=i,W=J,X=o(),Y=r([{title:""},{title:""},{title:""},{title:""},{title:""}]),Z=r(""),ee=r(""),le=r(""),te=r(!1),se=r(""),ne=r([]),ae=u((()=>Math.ceil(24/(Y.value.length+1))));function ie(){5!==Y.value.length&&Y.value.push({title:""})}function oe(){te.value=!1,se.value=""}function re(){if(!Z.value)return void L.error("题目标题不能为空!");let e="";Y.value.forEach(((l,t)=>{l.title||(e+=`选项${String.fromCharCode(65+t)}未填写。`)})),e?L.error(e):le.value?(ne.value=le.value.split("\n").filter((e=>e)),W("save",{title:Z.value,answers:Y.value,analysis:ee.value,scaleQuestionList:ne.value,examRichTextContent:te.value?se.value:""})):L.error("行标题不能为空!")}d((function(){K.title&&(Z.value=K.title),K.answerList&&K.answerList.length&&(Y.value=K.answerList),K.analysis&&(ee.value=K.analysis),K.scaleQuestionList&&(ne.value=K.scaleQuestionList,le.value=ne.value.join("\n")),K.examRichTextContent&&(se.value=K.examRichTextContent,te.value=!0)}));const ue=_("subject-scale");return(i,o)=>{const r=n,u=s,d=a,_=e,L=l,J=t;return p(),c("div",{class:m(v(ue).e("scale-exam"))},[f(A,{"show-edit":i.isEdit},{preview:x((()=>[w("div",U,[w("div",null,[w("span",M,C(i.orderIndex+1)+"."+C(v(Z))+"(量表题)",1),v(te)?(p(),c("div",E,[w("div",{class:"rich-text",innerHTML:v(se)},null,8,Q)])):h("v-if",!0)]),w("div",B,[f(u,{style:{padding:"10px 0"}},{default:x((()=>[f(r,{span:v(ae)},null,8,["span"]),(p(!0),c(g,null,j(v(Y),(e=>(p(),y(r,{key:e.title,class:"flex flex-center",span:v(ae)},{default:x((()=>[w("span",null,C(e.title),1)])),_:2},1032,["span"])))),128))])),_:1}),(p(!0),c(g,null,j(v(ne),(e=>(p(),y(u,{key:e,style:{padding:"10px 0"}},{default:x((()=>[f(r,{span:v(ae),class:"flex flex-center"},{default:x((()=>[w("span",null,C(e),1)])),_:2},1032,["span"]),(p(!0),c(g,null,j(v(Y).length,(e=>(p(),y(r,{key:e,class:"radio-item flex flex-center",span:v(ae)},{default:x((()=>[f(d,{disabled:!0})])),_:2},1032,["span"])))),128))])),_:2},1024)))),128))])])])),edit:x((()=>[w("div",{class:m(["flex",[{"margin-bottom":v(te)}]])},[o[10]||(o[10]=w("div",{class:"label flex flex-justify-center"},[w("span",null,"题目:")],-1)),w("div",O,[f(_,{modelValue:v(Z),"onUpdate:modelValue":o[0]||(o[0]=e=>b(Z)?Z.value=e:null),type:"textarea",rows:2,placeholder:"【量表题】请输入问题",disabled:i.isSave},null,8,["modelValue","disabled"])])],2),w("div",D,[o[11]||(o[11]=w("div",{class:"label flex flex-justify-center"},[w("span",null,"行标题:")],-1)),w("div",H,[f(_,{modelValue:v(le),"onUpdate:modelValue":o[1]||(o[1]=e=>b(le)?le.value=e:null),type:"textarea",placeholder:"请输入行标题",style:{width:"160px"},rows:10},null,8,["modelValue"]),w("div",I,[(p(!0),c(g,null,j(v(Y),((e,l)=>(p(),c("div",{key:l,class:"answer-item flex flex-items-center"},[w("span",N,C(String.fromCharCode(65+l))+".",1),f(_,{modelValue:e.title,"onUpdate:modelValue":l=>e.title=l,class:"input","show-word-limit":"",maxlength:10,placeholder:`选项${String.fromCharCode(65+l)}`,disabled:i.isSave},null,8,["modelValue","onUpdate:modelValue","placeholder","disabled"]),h(' <PlusCircleOutlined\n class="icon"\n :class="[{ disabled: answers.length === 5 }]"\n @click="addAnswer"\n />\n <MinusCircleOutlined\n class="icon"\n :class="[{ disabled: answers.length < 3 }]"\n @click="deleteAnswer(index)"\n /> '),f(L,{class:"icon"},{default:x((()=>[f(v(V),{class:m([{disabled:5===v(Y).length}]),onClick:ie},null,8,["class"])])),_:1}),f(L,{class:"icon"},{default:x((()=>[f(v(q),{class:m([{disabled:v(Y).length<3}]),onClick:e=>function(e){Y.value.length<3||Y.value.splice(e,1)}(l)},null,8,["class","onClick"])])),_:2},1024)])))),128))])])]),w("div",$,[o[12]||(o[12]=w("div",{class:"label flex flex-justify-center"},[w("span",null,"解析:")],-1)),w("div",P,[f(_,{modelValue:v(ee),"onUpdate:modelValue":o[2]||(o[2]=e=>b(ee)?ee.value=e:null),type:"textarea",rows:2,placeholder:"请输入题目解析"},null,8,["modelValue"])])]),v(te)?(p(),c("div",z,[o[14]||(o[14]=w("div",{class:"label flex flex-justify-center"},[w("span",null,"富文本:")],-1)),w("div",F,[f(R,S({"model-value":v(se),"onUpdate:modelValue":o[3]||(o[3]=e=>b(se)?se.value=e:null)},v(X),{style:{width:"100%"}}),null,16,["model-value"]),w("div",G,[f(J,{type:"danger",onClick:oe},{default:x((()=>o[13]||(o[13]=[k(" 删除富文本 ")]))),_:1})])])])):h("v-if",!0)])),default:x((()=>[i.showAction?(p(),y(T,{key:0,"is-edit":i.isEdit,"is-set":i.isSet,"show-other-option":!1,"exam-answer-relation-type":K.examAnswerRelationType,onMoveUp:o[4]||(o[4]=e=>W("move","up")),onMoveDown:o[5]||(o[5]=e=>W("move","down")),onDelete:o[6]||(o[6]=e=>W("delete")),onSave:re,onEdit:o[7]||(o[7]=e=>W("edit")),onAdd:o[8]||(o[8]=e=>W("add",e)),onOnShowRichText:o[9]||(o[9]=e=>te.value=!0)},null,8,["is-edit","is-set","exam-answer-relation-type"])):h("v-if",!0)])),_:1},8,["show-edit"])],2)}}});export{J as default};
2
2
  //# sourceMappingURL=subject-scale.vue.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"subject-scale.vue.mjs","sources":["../../../../../../../packages/components/src/subject-list/src/components/subject-scale.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { CirclePlus, Remove } from '@element-plus/icons-vue'\nimport { useNamespace } from '@qxs-bns/hooks'\nimport { ElMessage } from 'element-plus'\nimport SubjectAction from '../../../subject-action/src/subject-action.vue'\nimport SubjectLayout from '../../../subject-layout/src/subject-layout.vue'\nimport TinyMceEditor from '../../../tiny-mce-editor/src/tiny-mce-editor.vue'\n\ndefineOptions({\n name: 'QxsSubjectScale',\n})\nconst props = defineProps<{\n orderIndex: number\n title?: string\n isSave: boolean\n showAction?: boolean\n answerList?: any\n analysis?: string\n rowTitle?: string\n isEdit: boolean\n isSet: boolean\n scaleQuestionList?: any\n examRichTextContent?: string\n examAnswerRelationType?: number\n}>()\nconst emits = defineEmits(['move', 'save', 'delete', 'edit', 'add'])\n\nconst attrs = useAttrs()\n\nconst answers = ref<{\n title: string\n}[]>([{\n title: '',\n}, {\n title: '',\n}, {\n title: '',\n}, {\n title: '',\n}, {\n title: '',\n}])\n\nconst title = ref('')\nconst analysis = ref('')\nconst rowTitle = ref('')\nconst showRichText = ref(false)\nconst richText = ref('')\nconst scaleQuestionList = ref<string[]>([])\nconst span = computed(() => Math.ceil(24 / (answers.value.length + 1)))\nfunction addAnswer() {\n if (answers.value.length === 5) {\n return\n }\n answers.value.push({\n title: '',\n })\n}\n\nfunction deleteAnswer(index: number) {\n if (answers.value.length < 3) {\n return\n }\n answers.value.splice(index, 1)\n}\n\nfunction deleteRichText() {\n showRichText.value = false\n richText.value = ''\n}\n\nfunction save() {\n if (!title.value) {\n ElMessage.error('题目标题不能为空!')\n return\n }\n let msg = ''\n answers.value.forEach((v, i) => {\n if (!v.title) {\n msg += `选项${String.fromCharCode(65 + i)}未填写。`\n }\n })\n\n if (msg) {\n ElMessage.error(msg)\n return\n }\n\n if (!rowTitle.value) {\n ElMessage.error('行标题不能为空!')\n return\n }\n\n scaleQuestionList.value = rowTitle.value.split('\\n').filter(i => i)\n\n emits('save', {\n title: title.value,\n answers: answers.value,\n analysis: analysis.value,\n scaleQuestionList: scaleQuestionList.value,\n examRichTextContent: showRichText.value ? richText.value : '',\n })\n}\n\nfunction init() {\n if (props.title) {\n title.value = props.title\n }\n\n if (props.answerList && props.answerList.length) {\n answers.value = props.answerList\n }\n\n if (props.analysis) {\n analysis.value = props.analysis\n }\n\n if (props.scaleQuestionList) {\n scaleQuestionList.value = props.scaleQuestionList\n rowTitle.value = scaleQuestionList.value.join('\\n')\n }\n if (props.examRichTextContent) {\n richText.value = props.examRichTextContent\n showRichText.value = true\n }\n}\n\nonMounted(init)\nconst ns = useNamespace('subject-scale')\n</script>\n\n<template>\n <div :class=\"ns.e('scale-exam')\">\n <SubjectLayout :show-edit=\"isEdit\">\n <template #preview>\n <div class=\"preview\">\n <div>\n <span class=\"title\">{{ orderIndex + 1 }}.{{ title }}(量表题)</span>\n <div v-if=\"showRichText\">\n <div v-html=\"richText\" class=\"rich-text\"/>\n </div>\n </div>\n <div class=\"answer-radio flex-col\">\n <el-row style=\"padding: 10px 0;\">\n <el-col :span=\"span\" />\n <el-col\n v-for=\"item in answers\"\n :key=\"item.title\"\n class=\"flex flex-center\"\n :span=\"span\"\n >\n <span>{{ item.title }}</span>\n </el-col>\n </el-row>\n <el-row\n v-for=\"item in scaleQuestionList\"\n :key=\"item\"\n style=\"padding: 10px 0;\"\n >\n <el-col :span=\"span\" class=\"flex flex-center\">\n <span>{{ item }}</span>\n </el-col>\n <el-col\n v-for=\"i in answers.length\"\n :key=\"i\"\n class=\"radio-item flex flex-center\"\n :span=\"span\"\n >\n <el-radio :disabled=\"true\" />\n </el-col>\n </el-row>\n </div>\n </div>\n </template>\n <template #edit>\n <div class=\"flex\" :class=\"[{ 'margin-bottom': showRichText }]\">\n <div class=\"label flex flex-justify-center\">\n <span>题目:</span>\n </div>\n <div style=\"flex: 1;\">\n <el-input\n v-model=\"title\"\n type=\"textarea\"\n :rows=\"2\"\n placeholder=\"【量表题】请输入问题\"\n :disabled=\"isSave\"\n />\n </div>\n </div>\n <div class=\"answer flex\">\n <div class=\"label flex flex-justify-center\">\n <span>行标题:</span>\n </div>\n <div class=\"flex\">\n <el-input\n v-model=\"rowTitle\"\n type=\"textarea\"\n placeholder=\"请输入行标题\"\n style=\"width: 160px;\"\n :rows=\"10\"\n />\n <div class=\"answer-list flex-col\">\n <div\n v-for=\"(item, index) in answers\"\n :key=\"index\"\n class=\"answer-item flex flex-items-center\"\n >\n <span class=\"order\">{{ String.fromCharCode(65 + index) }}.</span>\n <el-input\n v-model=\"item.title\"\n class=\"input\"\n show-word-limit\n :maxlength=\"10\"\n :placeholder=\"`选项${String.fromCharCode(65 + index)}`\"\n :disabled=\"isSave\"\n />\n <!-- <PlusCircleOutlined\n class=\"icon\"\n :class=\"[{ disabled: answers.length === 5 }]\"\n @click=\"addAnswer\"\n />\n <MinusCircleOutlined\n class=\"icon\"\n :class=\"[{ disabled: answers.length < 3 }]\"\n @click=\"deleteAnswer(index)\"\n /> -->\n <el-icon class=\"icon\">\n <CirclePlus\n :class=\"[{ disabled: answers.length === 5 }]\"\n @click=\"addAnswer\"\n />\n </el-icon>\n <el-icon class=\"icon\">\n <Remove\n :class=\"[{ disabled: answers.length < 3 }]\"\n @click=\"deleteAnswer(index)\"\n />\n </el-icon>\n </div>\n </div>\n </div>\n </div>\n <div class=\"flex\" style=\"margin-bottom: 20px;\">\n <div class=\"label flex flex-justify-center\">\n <span>解析:</span>\n </div>\n <div style=\"flex: 1;\">\n <el-input\n v-model=\"analysis\"\n type=\"textarea\"\n :rows=\"2\"\n placeholder=\"请输入题目解析\"\n />\n </div>\n </div>\n <div v-if=\"showRichText\" class=\"margin-bottom flex\">\n <div class=\"label flex flex-justify-center\">\n <span>富文本:</span>\n </div>\n <div style=\"flex: 1;\">\n <TinyMceEditor v-model:model-value=\"richText\" v-bind=\"attrs\" style=\"width: 100%;\" />\n <div class=\"flex flex-justify-end\">\n <el-link\n type=\"danger\"\n @click=\"deleteRichText\"\n >\n 删除富文本\n </el-link>\n </div>\n </div>\n </div>\n </template>\n <SubjectAction\n v-if=\"showAction\"\n :is-edit=\"isEdit\"\n :is-set=\"isSet\"\n :showOtherOption=\"false\"\n :examAnswerRelationType=\"props.examAnswerRelationType\"\n @move-up=\"emits('move', 'up')\"\n @move-down=\"emits('move', 'down')\"\n @delete=\"emits('delete')\"\n @save=\"save\"\n @edit=\"emits('edit')\"\n @add=\"(type: any) => emits('add', type)\"\n @onShowRichText=\"showRichText = true\"\n />\n </SubjectLayout>\n </div>\n</template>\n"],"names":["props","__props","emits","__emit","attrs","useAttrs","answers","ref","title","analysis","rowTitle","showRichText","richText","scaleQuestionList","span","computed","Math","ceil","value","length","addAnswer","push","deleteRichText","save","ElMessage","error","msg","forEach","v","i","String","fromCharCode","split","filter","examRichTextContent","onMounted","answerList","join","ns","useNamespace","index","splice"],"mappings":"4kEAWA,MAAMA,EAAQC,EAcRC,EAAQC,EAERC,EAAQC,IAERC,EAAUC,EAEX,CAAC,CACJC,MAAO,IACN,CACDA,MAAO,IACN,CACDA,MAAO,IACN,CACDA,MAAO,IACN,CACDA,MAAO,MAGHA,EAAQD,EAAI,IACZE,GAAWF,EAAI,IACfG,GAAWH,EAAI,IACfI,GAAeJ,GAAI,GACnBK,GAAWL,EAAI,IACfM,GAAoBN,EAAc,IAClCO,GAAOC,GAAS,IAAMC,KAAKC,KAAK,IAAMX,EAAQY,MAAMC,OAAS,MACnE,SAASC,KACsB,IAAzBd,EAAQY,MAAMC,QAGlBb,EAAQY,MAAMG,KAAK,CACjBb,MAAO,IACR,CAUH,SAASc,KACPX,GAAaO,OAAQ,EACrBN,GAASM,MAAQ,EAAA,CAGnB,SAASK,KACH,IAACf,EAAMU,MAET,YADAM,EAAUC,MAAM,aAGlB,IAAIC,EAAM,GACVpB,EAAQY,MAAMS,SAAQ,CAACC,EAAGC,KACnBD,EAAEpB,QACLkB,GAAO,KAAKI,OAAOC,aAAa,GAAKF,SAAE,IAIvCH,EACFF,EAAUC,MAAMC,GAIbhB,GAASQ,OAKIL,GAAAK,MAAQR,GAASQ,MAAMc,MAAM,MAAMC,WAAYJ,IAEjE3B,EAAM,OAAQ,CACZM,MAAOA,EAAMU,MACbZ,QAASA,EAAQY,MACjBT,SAAUA,GAASS,MACnBL,kBAAmBA,GAAkBK,MACrCgB,oBAAqBvB,GAAaO,MAAQN,GAASM,MAAQ,MAX3DM,EAAUC,MAAM,WAYjB,CA0BHU,GAvBA,WACMnC,EAAMQ,QACRA,EAAMU,MAAQlB,EAAMQ,OAGlBR,EAAMoC,YAAcpC,EAAMoC,WAAWjB,SACvCb,EAAQY,MAAQlB,EAAMoC,YAGpBpC,EAAMS,WACRA,GAASS,MAAQlB,EAAMS,UAGrBT,EAAMa,oBACRA,GAAkBK,MAAQlB,EAAMa,kBAChCH,GAASQ,MAAQL,GAAkBK,MAAMmB,KAAK,OAE5CrC,EAAMkC,sBACRtB,GAASM,MAAQlB,EAAMkC,oBACvBvB,GAAaO,OAAQ,EACvB,IAII,MAAAoB,GAAKC,EAAa,oiFArExB,SAAsBC,GAChBlC,EAAQY,MAAMC,OAAS,GAGnBb,EAAAY,MAAMuB,OAAOD,EAAO,EAAC"}
1
+ {"version":3,"file":"subject-scale.vue.mjs","sources":["../../../../../../../packages/components/src/subject-list/src/components/subject-scale.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { CirclePlus, Remove } from '@element-plus/icons-vue'\nimport { useNamespace } from '@qxs-bns/hooks'\nimport { ElMessage } from 'element-plus'\nimport SubjectAction from '../../../subject-action/src/subject-action.vue'\nimport SubjectLayout from '../../../subject-layout/src/subject-layout.vue'\nimport TinyMceEditor from '../../../tiny-mce-editor/src/tiny-mce-editor.vue'\n\ndefineOptions({\n name: 'QxsSubjectScale',\n})\nconst props = defineProps<{\n orderIndex: number\n title?: string\n isSave: boolean\n showAction?: boolean\n answerList?: any\n analysis?: string\n rowTitle?: string\n isEdit: boolean\n isSet: boolean\n scaleQuestionList?: any\n examRichTextContent?: string\n examAnswerRelationType?: number\n}>()\nconst emits = defineEmits(['move', 'save', 'delete', 'edit', 'add'])\n\nconst attrs = useAttrs()\n\nconst answers = ref<{\n title: string\n}[]>([{\n title: '',\n}, {\n title: '',\n}, {\n title: '',\n}, {\n title: '',\n}, {\n title: '',\n}])\n\nconst title = ref('')\nconst analysis = ref('')\nconst rowTitle = ref('')\nconst showRichText = ref(false)\nconst richText = ref('')\nconst scaleQuestionList = ref<string[]>([])\nconst span = computed(() => Math.ceil(24 / (answers.value.length + 1)))\nfunction addAnswer() {\n if (answers.value.length === 5) {\n return\n }\n answers.value.push({\n title: '',\n })\n}\n\nfunction deleteAnswer(index: number) {\n if (answers.value.length < 3) {\n return\n }\n answers.value.splice(index, 1)\n}\n\nfunction deleteRichText() {\n showRichText.value = false\n richText.value = ''\n}\n\nfunction save() {\n if (!title.value) {\n ElMessage.error('题目标题不能为空!')\n return\n }\n let msg = ''\n answers.value.forEach((v, i) => {\n if (!v.title) {\n msg += `选项${String.fromCharCode(65 + i)}未填写。`\n }\n })\n\n if (msg) {\n ElMessage.error(msg)\n return\n }\n\n if (!rowTitle.value) {\n ElMessage.error('行标题不能为空!')\n return\n }\n\n scaleQuestionList.value = rowTitle.value.split('\\n').filter(i => i)\n\n emits('save', {\n title: title.value,\n answers: answers.value,\n analysis: analysis.value,\n scaleQuestionList: scaleQuestionList.value,\n examRichTextContent: showRichText.value ? richText.value : '',\n })\n}\n\nfunction init() {\n if (props.title) {\n title.value = props.title\n }\n\n if (props.answerList && props.answerList.length) {\n answers.value = props.answerList\n }\n\n if (props.analysis) {\n analysis.value = props.analysis\n }\n\n if (props.scaleQuestionList) {\n scaleQuestionList.value = props.scaleQuestionList\n rowTitle.value = scaleQuestionList.value.join('\\n')\n }\n if (props.examRichTextContent) {\n richText.value = props.examRichTextContent\n showRichText.value = true\n }\n}\n\nonMounted(init)\nconst ns = useNamespace('subject-scale')\n</script>\n\n<template>\n <div :class=\"ns.e('scale-exam')\">\n <SubjectLayout :show-edit=\"isEdit\">\n <template #preview>\n <div class=\"preview\">\n <div>\n <span class=\"title\">{{ orderIndex + 1 }}.{{ title }}(量表题)</span>\n <div v-if=\"showRichText\">\n <div\n class=\"rich-text\"\n v-html=\"richText\"\n />\n </div>\n </div>\n <div class=\"answer-radio flex-col\">\n <el-row style=\"padding: 10px 0;\">\n <el-col :span=\"span\" />\n <el-col\n v-for=\"item in answers\"\n :key=\"item.title\"\n class=\"flex flex-center\"\n :span=\"span\"\n >\n <span>{{ item.title }}</span>\n </el-col>\n </el-row>\n <el-row\n v-for=\"item in scaleQuestionList\"\n :key=\"item\"\n style=\"padding: 10px 0;\"\n >\n <el-col\n :span=\"span\"\n class=\"flex flex-center\"\n >\n <span>{{ item }}</span>\n </el-col>\n <el-col\n v-for=\"i in answers.length\"\n :key=\"i\"\n class=\"radio-item flex flex-center\"\n :span=\"span\"\n >\n <el-radio :disabled=\"true\" />\n </el-col>\n </el-row>\n </div>\n </div>\n </template>\n <template #edit>\n <div\n class=\"flex\"\n :class=\"[{ 'margin-bottom': showRichText }]\"\n >\n <div class=\"label flex flex-justify-center\">\n <span>题目:</span>\n </div>\n <div style=\"flex: 1;\">\n <el-input\n v-model=\"title\"\n type=\"textarea\"\n :rows=\"2\"\n placeholder=\"【量表题】请输入问题\"\n :disabled=\"isSave\"\n />\n </div>\n </div>\n <div class=\"answer flex\">\n <div class=\"label flex flex-justify-center\">\n <span>行标题:</span>\n </div>\n <div class=\"flex\">\n <el-input\n v-model=\"rowTitle\"\n type=\"textarea\"\n placeholder=\"请输入行标题\"\n style=\"width: 160px;\"\n :rows=\"10\"\n />\n <div class=\"answer-list flex-col\">\n <div\n v-for=\"(item, index) in answers\"\n :key=\"index\"\n class=\"answer-item flex flex-items-center\"\n >\n <span class=\"order\">{{ String.fromCharCode(65 + index) }}.</span>\n <el-input\n v-model=\"item.title\"\n class=\"input\"\n show-word-limit\n :maxlength=\"10\"\n :placeholder=\"`选项${String.fromCharCode(65 + index)}`\"\n :disabled=\"isSave\"\n />\n <!-- <PlusCircleOutlined\n class=\"icon\"\n :class=\"[{ disabled: answers.length === 5 }]\"\n @click=\"addAnswer\"\n />\n <MinusCircleOutlined\n class=\"icon\"\n :class=\"[{ disabled: answers.length < 3 }]\"\n @click=\"deleteAnswer(index)\"\n /> -->\n <el-icon class=\"icon\">\n <CirclePlus\n :class=\"[{ disabled: answers.length === 5 }]\"\n @click=\"addAnswer\"\n />\n </el-icon>\n <el-icon class=\"icon\">\n <Remove\n :class=\"[{ disabled: answers.length < 3 }]\"\n @click=\"deleteAnswer(index)\"\n />\n </el-icon>\n </div>\n </div>\n </div>\n </div>\n <div\n class=\"flex\"\n style=\"margin-bottom: 20px;\"\n >\n <div class=\"label flex flex-justify-center\">\n <span>解析:</span>\n </div>\n <div style=\"flex: 1;\">\n <el-input\n v-model=\"analysis\"\n type=\"textarea\"\n :rows=\"2\"\n placeholder=\"请输入题目解析\"\n />\n </div>\n </div>\n <div\n v-if=\"showRichText\"\n class=\"margin-bottom flex\"\n >\n <div class=\"label flex flex-justify-center\">\n <span>富文本:</span>\n </div>\n <div style=\"flex: 1;\">\n <TinyMceEditor\n v-model:model-value=\"richText\"\n v-bind=\"attrs\"\n style=\"width: 100%;\"\n />\n <div class=\"flex flex-justify-end\">\n <el-link\n type=\"danger\"\n @click=\"deleteRichText\"\n >\n 删除富文本\n </el-link>\n </div>\n </div>\n </div>\n </template>\n <SubjectAction\n v-if=\"showAction\"\n :is-edit=\"isEdit\"\n :is-set=\"isSet\"\n :show-other-option=\"false\"\n :exam-answer-relation-type=\"props.examAnswerRelationType\"\n @move-up=\"emits('move', 'up')\"\n @move-down=\"emits('move', 'down')\"\n @delete=\"emits('delete')\"\n @save=\"save\"\n @edit=\"emits('edit')\"\n @add=\"(type: any) => emits('add', type)\"\n @on-show-rich-text=\"showRichText = true\"\n />\n </SubjectLayout>\n </div>\n</template>\n"],"names":["props","__props","emits","__emit","attrs","useAttrs","answers","ref","title","analysis","rowTitle","showRichText","richText","scaleQuestionList","span","computed","Math","ceil","value","length","addAnswer","push","deleteRichText","save","ElMessage","error","msg","forEach","v","i","String","fromCharCode","split","filter","examRichTextContent","onMounted","answerList","join","ns","useNamespace","index","splice"],"mappings":"4kEAWA,MAAMA,EAAQC,EAcRC,EAAQC,EAERC,EAAQC,IAERC,EAAUC,EAEX,CAAC,CACJC,MAAO,IACN,CACDA,MAAO,IACN,CACDA,MAAO,IACN,CACDA,MAAO,IACN,CACDA,MAAO,MAGHA,EAAQD,EAAI,IACZE,GAAWF,EAAI,IACfG,GAAWH,EAAI,IACfI,GAAeJ,GAAI,GACnBK,GAAWL,EAAI,IACfM,GAAoBN,EAAc,IAClCO,GAAOC,GAAS,IAAMC,KAAKC,KAAK,IAAMX,EAAQY,MAAMC,OAAS,MACnE,SAASC,KACsB,IAAzBd,EAAQY,MAAMC,QAGlBb,EAAQY,MAAMG,KAAK,CACjBb,MAAO,IACR,CAUH,SAASc,KACPX,GAAaO,OAAQ,EACrBN,GAASM,MAAQ,EAAA,CAGnB,SAASK,KACH,IAACf,EAAMU,MAET,YADAM,EAAUC,MAAM,aAGlB,IAAIC,EAAM,GACVpB,EAAQY,MAAMS,SAAQ,CAACC,EAAGC,KACnBD,EAAEpB,QACLkB,GAAO,KAAKI,OAAOC,aAAa,GAAKF,SAAE,IAIvCH,EACFF,EAAUC,MAAMC,GAIbhB,GAASQ,OAKIL,GAAAK,MAAQR,GAASQ,MAAMc,MAAM,MAAMC,WAAYJ,IAEjE3B,EAAM,OAAQ,CACZM,MAAOA,EAAMU,MACbZ,QAASA,EAAQY,MACjBT,SAAUA,GAASS,MACnBL,kBAAmBA,GAAkBK,MACrCgB,oBAAqBvB,GAAaO,MAAQN,GAASM,MAAQ,MAX3DM,EAAUC,MAAM,WAYjB,CA0BHU,GAvBA,WACMnC,EAAMQ,QACRA,EAAMU,MAAQlB,EAAMQ,OAGlBR,EAAMoC,YAAcpC,EAAMoC,WAAWjB,SACvCb,EAAQY,MAAQlB,EAAMoC,YAGpBpC,EAAMS,WACRA,GAASS,MAAQlB,EAAMS,UAGrBT,EAAMa,oBACRA,GAAkBK,MAAQlB,EAAMa,kBAChCH,GAASQ,MAAQL,GAAkBK,MAAMmB,KAAK,OAE5CrC,EAAMkC,sBACRtB,GAASM,MAAQlB,EAAMkC,oBACvBvB,GAAaO,OAAQ,EACvB,IAII,MAAAoB,GAAKC,EAAa,oiFArExB,SAAsBC,GAChBlC,EAAQY,MAAMC,OAAS,GAGnBb,EAAAY,MAAMuB,OAAOD,EAAO,EAAC"}
@@ -1,2 +1,2 @@
1
- import{ElCheckbox as e,ElRadio as l,ElInput as t,ElSelect as s,ElOption as a,ElIcon as n,ElLink as i,ElDialog as o,ElButton as r,ElMessage as u}from"element-plus/es";import"element-plus/es/components/base/style/index";import"element-plus/es/components/dialog/style/index";import"element-plus/es/components/button/style/index";import"element-plus/es/components/link/style/index";import"element-plus/es/components/icon/style/index";import"element-plus/es/components/select/style/index";import"element-plus/es/components/option/style/index";import"element-plus/es/components/input/style/index";import"element-plus/es/components/radio/style/index";import"element-plus/es/components/checkbox/style/index";import{defineComponent as d,useAttrs as m,ref as p,computed as c,watch as v,onMounted as y,createElementBlock as f,openBlock as x,normalizeClass as w,unref as h,createVNode as C,createSlots as g,withCtx as b,createBlock as k,createCommentVNode as S,createElementVNode as A,createTextVNode as V,toDisplayString as T,Fragment as q,renderList as R,isRef as j,mergeProps as I}from"vue";import{CirclePlus as _,Remove as E}from"@element-plus/icons-vue";import{useNamespace as U}from"@qxs-bns/hooks";import K from"../../../subject-action/src/subject-action.vue.mjs";import B from"../../../subject-layout/src/subject-layout.vue.mjs";import L from"../../../tiny-mce-editor/src/tiny-mce-editor.vue.mjs";import{setGuid as $}from"@qxs-bns/utils";import"element-plus/es/components/message/style/index";const N={class:"preview"},O={class:"title"},z={key:0},M={key:1},D={key:0},H=["innerHTML"],Q={class:"preview-answer"},F={class:"order"},G={class:"order"},J={style:{flex:"1"}},P={class:"margin-bottom flex flex-items-center"},W={class:"margin-bottom answer-list"},X={class:"label flex flex-justify-center"},Y={key:0,class:"margin-bottom flex flex-items-center"},Z={style:{flex:"1"}},ee={key:1,class:"flex"},le={style:{flex:"1"}},te={key:2,class:"margin-bottom flex"},se={style:{flex:"1"}},ae={class:"flex flex-justify-end"};var ne=d({name:"QxsSubjectSingle",__name:"subject-single",props:{orderIndex:{type:Number,required:!0},title:{type:String,required:!1},isSave:{type:Boolean,required:!0},showAction:{type:Boolean,required:!1},type:{type:String,required:!0},isEdit:{type:Boolean,required:!0},isSet:{type:Boolean,required:!0},answerList:{type:null,required:!1},leastAnswerCount:{type:Number,required:!1},analysis:{type:String,required:!1},examExpand:{type:String,required:!1},examRichTextContent:{type:String,required:!1},showAnalysis:{type:Boolean,required:!1},examAnswerRelationType:{type:Number,required:!1},customId:{type:Number,required:!1},examId:{type:Number,required:!1},isKey:{type:Boolean,required:!0},answerCheckType:{type:Number,required:!0}},emits:["move","save","delete","edit","add","setRelation"],setup(d,{emit:ne}){const ie=d,oe=ne,re=m(),ue=p(0),de=p(ie.isKey),me=p(1),pe=p(ie.examAnswerRelationType),ce=p([{title:"",isCorrect:!1},{title:"",isCorrect:!1},{title:"",isCorrect:!1},{title:"",isCorrect:!1}]),ve=p(2),ye=p(""),fe=p(""),xe=p(!1),we=p(""),he=p(0),Ce=p(!1),ge=p(""),be=c((()=>"single"===ie.type?"单选题":"multiple"===ie.type?"多选题":"排序题")),ke=p([]),Se=c((()=>{const e=[];for(let l=ce.value.length;l>1;l--)e.push({label:`至少选择${l}项`,value:l});return e.reverse()}));function Ae(){ie.isSave||ce.value.push({title:"",isCorrect:!1,customAnswerId:$()})}function Ve(){xe.value=!1,we.value=""}function Te(){if(!ye.value)return void u.error("题目标题不能为空!");if(!me.value)return void u.error("请选择答题设置");let e="",l=!1,t=0;if("multiple"===ie.type||"single"===ie.type?ce.value.forEach(((s,a)=>{s.title?.trim()||(e+=`选项${String.fromCharCode(65+a)}未填写。`),s.isCorrect&&(l=!0,t++),s.relationType=s.resultItem?1:s.answerRelations?.length?2:null})):"sort"===ie.type&&ke.value.length&&(l=!0),e)return void u.error(e);if(new Set(ce.value.map((e=>e.title))).size===ce.value.length){if("multiple"===ie.type){if(1===t)return void u.error("请至少设置两个支持选项");if(l&&t<ve.value)return void u.error("至少选几项与支持选项数不符")}2!==me.value&&3!==me.value||l?oe("save",{title:ye.value,answers:ce.value.map(((e,l)=>({...e,orderIndex:l+1}))),examExpand:ke.value.map((e=>e.charCodeAt(0)-65+1)).join(","),analysis:fe.value,isSetCorrectAnswer:l,leastAnswerCount:ve.value,examRichTextContent:xe.value?we.value:"",examAnswerRelationType:pe.value,isKey:de.value,answerCheckType:me.value}):u.error("请设置支持选项")}else u.error("选项不能重复")}function qe(){ce.value[ue.value].resultItem=ge.value||"",Ce.value=!1}function Re(){Ce.value=!1,ge.value=""}function je(e){de.value=e}function Ie(e){me.value=e}function _e(e,l){oe("add",e,l?ie.examAnswerRelationType:null)}v((()=>ie.isEdit),(()=>{ie.isEdit&&(he.value=(new Date).getTime())}));const Ee=c((()=>e=>{let l=0;return e.forEach((e=>{e.relationAnswers&&(l+=e.relationAnswers.length)})),l})),Ue=U("subject-single");return y((function(){if(ie.title&&(ye.value=ie.title),ie.answerCheckType&&(me.value=ie.answerCheckType),ie.isKey&&(de.value=ie.isKey),ie.examAnswerRelationType&&(pe.value=ie.examAnswerRelationType),ie.answerList&&ie.answerList.length&&(ce.value=ie.answerList),ie.leastAnswerCount&&(ve.value=ie.leastAnswerCount),ie.examExpand&&ie.examExpand){const e=ie.examExpand.split(",");ke.value=e.map((e=>{const l=ie.answerList.find((l=>l.answerId?.toString()===e));return l?String.fromCharCode(65+l.orderIndex-1):e})).filter(Boolean)}ie.analysis&&(fe.value=ie.analysis),ie.examRichTextContent&&(we.value=ie.examRichTextContent,xe.value=!0)})),(u,d)=>{const m=e,p=l,c=t,v=a,y=s,U=n,ne=i,he=r,Ke=o;return x(),f("div",{class:w(h(Ue).e("single-exam"))},[C(B,{"show-edit":u.isEdit},g({preview:b((()=>[A("div",N,[A("div",null,[A("span",O,[V(T(u.orderIndex+1)+"."+T(h(ye))+" ",1),"single"===u.type?(x(),f("span",z,"(单选题)")):["multiple","sort"].includes(u.type)?(x(),f("span",M," ("+T(h(be))+T(h(ve)?`至少选${h(ve)}项${"sort"===u.type?"并排序":""}`:"")+") ",1)):S("v-if",!0)])]),h(xe)?(x(),f("div",D,[A("div",{innerHTML:h(we),class:"rich-text"},null,8,H)])):S("v-if",!0),A("div",Q,["sort"===u.type?(x(!0),f(q,{key:0},R(h(ce),((e,l)=>(x(),k(m,{key:l,class:"radio",disabled:!0},{default:b((()=>[A("span",F,T(String.fromCharCode(65+l))+". ",1),V(" "+T(e.title),1)])),_:2},1024)))),128)):(x(!0),f(q,{key:1},R(h(ce),((e,l)=>(x(),k(p,{key:l,class:"radio",value:"disabled",disabled:""},{default:b((()=>[A("span",G,T(String.fromCharCode(65+l))+". ",1),V(" "+T(e.title)+" "+T(e.isCorrect?"(支持选项)":"")+" "+T(1===h(pe)?e.resultItem?"(已设置结果项)":"(未设置结果项)":"")+" "+T(2===h(pe)?e.answerRelations?.length?"(已设置关联)":"(未设置关联)":""),1)])),_:2},1024)))),128))])])])),default:b((()=>[u.showAction?(x(),k(K,{key:0,"is-edit":u.isEdit,"is-set":u.isSet,isKey:h(de),showOtherOption:"multiple"===ie.type||"single"===ie.type,examAnswerRelationType:ie.examAnswerRelationType,answerCheckType:h(me),onMoveUp:d[5]||(d[5]=e=>oe("move","up")),onMoveDown:d[6]||(d[6]=e=>oe("move","down")),onDelete:d[7]||(d[7]=e=>oe("delete")),onSave:Te,onEdit:d[8]||(d[8]=e=>oe("edit")),onAdd:_e,onOnShowRichText:d[9]||(d[9]=e=>xe.value=!0),onSetKey:je,onSetAnswerSetting:Ie},null,8,["is-edit","is-set","isKey","showOtherOption","examAnswerRelationType","answerCheckType"])):S("v-if",!0)])),_:2},[u.isEdit?{name:"edit",fn:b((()=>[A("div",{class:w(["flex",[{"margin-bottom":h(xe)}]])},[d[12]||(d[12]=A("div",{class:"label flex flex-justify-center"},[A("span",null,"题目:")],-1)),A("div",J,[C(c,{modelValue:h(ye),"onUpdate:modelValue":d[0]||(d[0]=e=>j(ye)?ye.value=e:null),type:"textarea",rows:2,placeholder:`【${h(be)}】请输入问题`,disabled:u.isSave,"show-word-limit":"",maxlength:"200",class:"margin-bottom"},null,8,["modelValue","placeholder","disabled"])])],2),A("div",P,[d[13]||(d[13]=A("div",{class:"label flex flex-justify-center"},[A("span",null,"设置:")],-1)),["multiple","sort"].includes(u.type)?(x(),k(y,{key:0,modelValue:h(ve),"onUpdate:modelValue":d[1]||(d[1]=e=>j(ve)?ve.value=e:null),style:{width:"150px"},placeholder:"至少选择几项",disabled:u.isSave},{default:b((()=>[(x(!0),f(q,null,R(h(Se),(e=>(x(),k(v,{key:e.value,value:e.value,label:e.label},null,8,["value","label"])))),128))])),_:1},8,["modelValue","disabled"])):S("v-if",!0)]),A("div",W,[(x(!0),f(q,null,R(h(ce),((e,l)=>(x(),f("div",{key:l,class:"answer-item flex flex-items-center"},[A("span",X,T(String.fromCharCode(65+l))+".",1),C(c,{modelValue:e.title,"onUpdate:modelValue":l=>e.title=l,class:"input","show-word-limit":"",maxlength:"100",placeholder:`选项${String.fromCharCode(65+l)}`,disabled:u.isSave},null,8,["modelValue","onUpdate:modelValue","placeholder","disabled"]),["single","multiple"].includes(u.type)?(x(),k(m,{key:0,modelValue:e.isCorrect,"onUpdate:modelValue":l=>e.isCorrect=l,class:w([{"is-correct":e.isCorrect}]),disabled:u.isSave,style:{"margin-left":"10px"},onChange:l=>function(e,l){"single"===ie.type?(l&&ce.value.forEach((l=>{l!==e&&(l.isCorrect=!1)})),e.isCorrect=l):"multiple"===ie.type&&(e.isCorrect=l)}(e,l)},{default:b((()=>[...d[14]||(d[14]=[V(" 支持选项 ")])])),_:2},1032,["modelValue","onUpdate:modelValue","class","disabled","onChange"])):S("v-if",!0),C(U,{class:"icon"},{default:b((()=>[C(h(_),{class:w([{disabled:u.isSave}]),onClick:Ae},null,8,["class"])])),_:1}),C(U,{class:"icon"},{default:b((()=>[C(h(E),{class:w([{disabled:h(ce).length<3||u.isSave}]),onClick:e=>function(e){ce.value.length<3||ie.isSave||ce.value.splice(e,1)}(l)},null,8,["class","onClick"])])),_:2},1024),1===h(pe)&&"sort"!==u.type?(x(),k(ne,{key:1,type:"primary",class:"margin-left-10",onClick:e=>{return t=l,ue.value=t,ge.value=ce.value[t].resultItem||"",void(Ce.value=!0);var t}},{default:b((()=>[A("span",null,T(e.resultItem?"编辑结果":"添加结果"),1)])),_:2},1032,["onClick"])):S("v-if",!0),2===h(pe)&&"sort"!==u.type?(x(),k(ne,{key:2,type:"primary",class:"margin-left-10",onClick:l=>function(e){e.customAnswerId=e.examAnswerId||$(),oe("setRelation",ie.customId,e)}(e)},{default:b((()=>[A("span",null,T(e.answerRelations?.length?`关联了${h(Ee)(e.answerRelations)}项`:"关联检查"),1)])),_:2},1032,["onClick"])):S("v-if",!0)])))),128))]),"sort"===u.type?(x(),f("div",Y,[d[15]||(d[15]=A("div",{class:"label flex flex-justify-end"},[A("span",null,"排序答案:")],-1)),A("div",Z,[C(y,{modelValue:h(ke),"onUpdate:modelValue":d[2]||(d[2]=e=>j(ke)?ke.value=e:null),multiple:"",style:{width:"360px"},placeholder:"请按顺序选择排序答案","show-arrow":!0},{default:b((()=>[(x(!0),f(q,null,R(h(ce),((e,l)=>(x(),k(v,{key:l,label:e.title,value:String.fromCharCode(65+l)},null,8,["label","value"])))),128))])),_:1},8,["modelValue"])])])):S("v-if",!0),u.showAnalysis?(x(),f("div",ee,[d[16]||(d[16]=A("div",{class:"label flex flex-justify-center"},[A("span",null,"解析:")],-1)),A("div",le,[C(c,{modelValue:h(fe),"onUpdate:modelValue":d[3]||(d[3]=e=>j(fe)?fe.value=e:null),type:"textarea",rows:2,placeholder:"请输入题目解析"},null,8,["modelValue"])])])):S("v-if",!0),h(xe)?(x(),f("div",te,[d[18]||(d[18]=A("div",{class:"label flex flex-justify-center"},[A("span",null,"富文本:")],-1)),A("div",se,[C(L,I({"model-value":h(we),"onUpdate:modelValue":d[4]||(d[4]=e=>j(we)?we.value=e:null)},h(re),{style:{width:"100%"}}),null,16,["model-value"]),A("div",ae,[C(ne,{type:"danger",onClick:Ve},{default:b((()=>d[17]||(d[17]=[V(" 删除富文本 ")]))),_:1})])])])):S("v-if",!0)])),key:"0"}:void 0]),1032,["show-edit"]),C(Ke,{modelValue:h(Ce),"onUpdate:modelValue":d[11]||(d[11]=e=>j(Ce)?Ce.value=e:null),title:"添加结果",class:"customize-dialog"},{footer:b((()=>[C(he,{class:"customize-button",type:"primary",plain:"",onClick:Re},{default:b((()=>d[19]||(d[19]=[V(" 取消 ")]))),_:1}),C(he,{class:"customize-button",type:"primary",plain:"",onClick:qe},{default:b((()=>d[20]||(d[20]=[V(" 保存 ")]))),_:1})])),default:b((()=>[(x(),k(L,I({key:h(ue),"model-value":h(ge),"onUpdate:modelValue":d[10]||(d[10]=e=>j(ge)?ge.value=e:null)},h(re),{style:{width:"100%"}}),null,16,["model-value"]))])),_:1},8,["modelValue"])],2)}}});export{ne as default};
1
+ import{ElCheckbox as e,ElRadio as l,ElInput as t,ElSelect as s,ElOption as a,ElIcon as n,ElLink as i,ElDialog as o,ElButton as r,ElMessage as u}from"element-plus/es";import"element-plus/es/components/base/style/index";import"element-plus/es/components/dialog/style/index";import"element-plus/es/components/button/style/index";import"element-plus/es/components/link/style/index";import"element-plus/es/components/icon/style/index";import"element-plus/es/components/select/style/index";import"element-plus/es/components/option/style/index";import"element-plus/es/components/input/style/index";import"element-plus/es/components/radio/style/index";import"element-plus/es/components/checkbox/style/index";import{defineComponent as d,useAttrs as m,ref as p,computed as c,watch as v,onMounted as y,createElementBlock as f,openBlock as x,normalizeClass as w,unref as h,createVNode as C,createSlots as g,withCtx as b,createBlock as k,createCommentVNode as S,createElementVNode as V,createTextVNode as A,toDisplayString as q,Fragment as T,renderList as j,isRef as R,mergeProps as I}from"vue";import{CirclePlus as _,Remove as E}from"@element-plus/icons-vue";import{useNamespace as U}from"@qxs-bns/hooks";import{setGuid as B}from"@qxs-bns/utils";import L from"../../../subject-action/src/subject-action.vue.mjs";import $ from"../../../subject-layout/src/subject-layout.vue.mjs";import K from"../../../tiny-mce-editor/src/tiny-mce-editor.vue.mjs";import"element-plus/es/components/message/style/index";const N={class:"preview"},z={class:"title"},M={key:0},D={key:1},H={key:0},O=["innerHTML"],Q={class:"preview-answer"},F={class:"order"},G={class:"order"},J={style:{flex:"1"}},P={class:"margin-bottom flex flex-items-center"},W={class:"margin-bottom answer-list"},X={class:"label flex flex-justify-center"},Y={key:0,class:"margin-bottom flex flex-items-center"},Z={style:{flex:"1"}},ee={key:1,class:"flex"},le={style:{flex:"1"}},te={key:2,class:"margin-bottom flex"},se={style:{flex:"1"}},ae={class:"flex flex-justify-end"};var ne=d({name:"QxsSubjectSingle",__name:"subject-single",props:{orderIndex:{type:Number,required:!0},title:{type:String,required:!1},isSave:{type:Boolean,required:!0},showAction:{type:Boolean,required:!1},type:{type:String,required:!0},isEdit:{type:Boolean,required:!0},isSet:{type:Boolean,required:!0},answerList:{type:null,required:!1},leastAnswerCount:{type:Number,required:!1},analysis:{type:String,required:!1},examExpand:{type:String,required:!1},examRichTextContent:{type:String,required:!1},showAnalysis:{type:Boolean,required:!1},examAnswerRelationType:{type:Number,required:!1},customId:{type:Number,required:!1},examId:{type:Number,required:!1},isKey:{type:Boolean,required:!0},answerCheckType:{type:Number,required:!0}},emits:["move","save","delete","edit","add","setRelation"],setup(d,{emit:ne}){const ie=d,oe=ne,re=m(),ue=p(0),de=p(ie.isKey),me=p(1),pe=p(ie.examAnswerRelationType),ce=p([{title:"",isCorrect:!1},{title:"",isCorrect:!1},{title:"",isCorrect:!1},{title:"",isCorrect:!1}]),ve=p(2),ye=p(""),fe=p(""),xe=p(!1),we=p(""),he=p(0),Ce=p(!1),ge=p(""),be=c((()=>"single"===ie.type?"单选题":"multiple"===ie.type?"多选题":"排序题")),ke=p([]),Se=c((()=>{const e=[];for(let l=ce.value.length;l>1;l--)e.push({label:`至少选择${l}项`,value:l});return e.reverse()}));function Ve(){ie.isSave||ce.value.push({title:"",isCorrect:!1,customAnswerId:B()})}function Ae(){xe.value=!1,we.value=""}function qe(){if(!ye.value)return void u.error("题目标题不能为空!");if(!me.value)return void u.error("请选择答题设置");let e="",l=!1,t=0;if("multiple"===ie.type||"single"===ie.type?ce.value.forEach(((s,a)=>{s.title?.trim()||(e+=`选项${String.fromCharCode(65+a)}未填写。`),s.isCorrect&&(l=!0,t++),s.relationType=s.resultItem?1:s.answerRelations?.length?2:null})):"sort"===ie.type&&ke.value.length&&(l=!0),e)return void u.error(e);if(new Set(ce.value.map((e=>e.title))).size===ce.value.length){if("multiple"===ie.type){if(1===t)return void u.error("请至少设置两个支持选项");if(l&&t<ve.value)return void u.error("至少选几项与支持选项数不符")}2!==me.value&&3!==me.value||l?oe("save",{title:ye.value,answers:ce.value.map(((e,l)=>({...e,orderIndex:l+1}))),examExpand:ke.value.map((e=>e.charCodeAt(0)-65+1)).join(","),analysis:fe.value,isSetCorrectAnswer:l,leastAnswerCount:ve.value,examRichTextContent:xe.value?we.value:"",examAnswerRelationType:pe.value,isKey:de.value,answerCheckType:me.value}):u.error("请设置支持选项")}else u.error("选项不能重复")}function Te(){ce.value[ue.value].resultItem=ge.value||"",Ce.value=!1}function je(){Ce.value=!1,ge.value=""}function Re(e){de.value=e}function Ie(e){me.value=e}function _e(e,l){oe("add",e,l?ie.examAnswerRelationType:null)}v((()=>ie.isEdit),(()=>{ie.isEdit&&(he.value=(new Date).getTime())}));const Ee=c((()=>e=>{let l=0;return e.forEach((e=>{e.relationAnswers&&(l+=e.relationAnswers.length)})),l})),Ue=U("subject-single");return y((function(){if(ie.title&&(ye.value=ie.title),ie.answerCheckType&&(me.value=ie.answerCheckType),ie.isKey&&(de.value=ie.isKey),ie.examAnswerRelationType&&(pe.value=ie.examAnswerRelationType),ie.answerList&&ie.answerList.length&&(ce.value=ie.answerList),ie.leastAnswerCount&&(ve.value=ie.leastAnswerCount),ie.examExpand&&ie.examExpand){const e=ie.examExpand.split(",");ke.value=e.map((e=>{const l=ie.answerList.find((l=>l.answerId?.toString()===e));return l?String.fromCharCode(65+l.orderIndex-1):e})).filter(Boolean)}ie.analysis&&(fe.value=ie.analysis),ie.examRichTextContent&&(we.value=ie.examRichTextContent,xe.value=!0)})),(u,d)=>{const m=e,p=l,c=t,v=a,y=s,U=n,ne=i,he=r,Be=o;return x(),f("div",{class:w(h(Ue).e("single-exam"))},[C($,{"show-edit":u.isEdit},g({preview:b((()=>[V("div",N,[V("div",null,[V("span",z,[A(q(u.orderIndex+1)+"."+q(h(ye))+" ",1),"single"===u.type?(x(),f("span",M,"(单选题)")):["multiple","sort"].includes(u.type)?(x(),f("span",D," ("+q(h(be))+q(h(ve)?`至少选${h(ve)}项${"sort"===u.type?"并排序":""}`:"")+") ",1)):S("v-if",!0)])]),h(xe)?(x(),f("div",H,[V("div",{class:"rich-text",innerHTML:h(we)},null,8,O)])):S("v-if",!0),V("div",Q,["sort"===u.type?(x(!0),f(T,{key:0},j(h(ce),((e,l)=>(x(),k(m,{key:l,class:"radio",disabled:!0},{default:b((()=>[V("span",F,q(String.fromCharCode(65+l))+". ",1),A(" "+q(e.title),1)])),_:2},1024)))),128)):(x(!0),f(T,{key:1},j(h(ce),((e,l)=>(x(),k(p,{key:l,class:"radio",value:"disabled",disabled:""},{default:b((()=>[V("span",G,q(String.fromCharCode(65+l))+". ",1),A(" "+q(e.title)+" "+q(e.isCorrect?"(支持选项)":"")+" "+q(1===h(pe)?e.resultItem?"(已设置结果项)":"(未设置结果项)":"")+" "+q(2===h(pe)?e.answerRelations?.length?"(已设置关联)":"(未设置关联)":""),1)])),_:2},1024)))),128))])])])),default:b((()=>[u.showAction?(x(),k(L,{key:0,"is-edit":u.isEdit,"is-set":u.isSet,"is-key":h(de),"show-other-option":"multiple"===ie.type||"single"===ie.type,"exam-answer-relation-type":ie.examAnswerRelationType,"answer-check-type":h(me),onMoveUp:d[5]||(d[5]=e=>oe("move","up")),onMoveDown:d[6]||(d[6]=e=>oe("move","down")),onDelete:d[7]||(d[7]=e=>oe("delete")),onSave:qe,onEdit:d[8]||(d[8]=e=>oe("edit")),onAdd:_e,onOnShowRichText:d[9]||(d[9]=e=>xe.value=!0),onSetKey:Re,onSetAnswerSetting:Ie},null,8,["is-edit","is-set","is-key","show-other-option","exam-answer-relation-type","answer-check-type"])):S("v-if",!0)])),_:2},[u.isEdit?{name:"edit",fn:b((()=>[V("div",{class:w(["flex",[{"margin-bottom":h(xe)}]])},[d[12]||(d[12]=V("div",{class:"label flex flex-justify-center"},[V("span",null,"题目:")],-1)),V("div",J,[C(c,{modelValue:h(ye),"onUpdate:modelValue":d[0]||(d[0]=e=>R(ye)?ye.value=e:null),type:"textarea",rows:2,placeholder:`【${h(be)}】请输入问题`,disabled:u.isSave,"show-word-limit":"",maxlength:"200",class:"margin-bottom"},null,8,["modelValue","placeholder","disabled"])])],2),V("div",P,[d[13]||(d[13]=V("div",{class:"label flex flex-justify-center"},[V("span",null,"设置:")],-1)),["multiple","sort"].includes(u.type)?(x(),k(y,{key:0,modelValue:h(ve),"onUpdate:modelValue":d[1]||(d[1]=e=>R(ve)?ve.value=e:null),style:{width:"150px"},placeholder:"至少选择几项",disabled:u.isSave},{default:b((()=>[(x(!0),f(T,null,j(h(Se),(e=>(x(),k(v,{key:e.value,value:e.value,label:e.label},null,8,["value","label"])))),128))])),_:1},8,["modelValue","disabled"])):S("v-if",!0)]),V("div",W,[(x(!0),f(T,null,j(h(ce),((e,l)=>(x(),f("div",{key:l,class:"answer-item flex flex-items-center"},[V("span",X,q(String.fromCharCode(65+l))+".",1),C(c,{modelValue:e.title,"onUpdate:modelValue":l=>e.title=l,class:"input","show-word-limit":"",maxlength:"100",placeholder:`选项${String.fromCharCode(65+l)}`,disabled:u.isSave},null,8,["modelValue","onUpdate:modelValue","placeholder","disabled"]),["single","multiple"].includes(u.type)?(x(),k(m,{key:0,modelValue:e.isCorrect,"onUpdate:modelValue":l=>e.isCorrect=l,class:w([{"is-correct":e.isCorrect}]),disabled:u.isSave,style:{"margin-left":"10px"},onChange:l=>function(e,l){"single"===ie.type?(l&&ce.value.forEach((l=>{l!==e&&(l.isCorrect=!1)})),e.isCorrect=l):"multiple"===ie.type&&(e.isCorrect=l)}(e,l)},{default:b((()=>[...d[14]||(d[14]=[A(" 支持选项 ")])])),_:2},1032,["modelValue","onUpdate:modelValue","class","disabled","onChange"])):S("v-if",!0),C(U,{class:"icon"},{default:b((()=>[C(h(_),{class:w([{disabled:u.isSave}]),onClick:Ve},null,8,["class"])])),_:1}),C(U,{class:"icon"},{default:b((()=>[C(h(E),{class:w([{disabled:h(ce).length<3||u.isSave}]),onClick:e=>function(e){ce.value.length<3||ie.isSave||ce.value.splice(e,1)}(l)},null,8,["class","onClick"])])),_:2},1024),1===h(pe)&&"sort"!==u.type?(x(),k(ne,{key:1,type:"primary",class:"margin-left-10",onClick:e=>{return t=l,ue.value=t,ge.value=ce.value[t].resultItem||"",void(Ce.value=!0);var t}},{default:b((()=>[V("span",null,q(e.resultItem?"编辑结果":"添加结果"),1)])),_:2},1032,["onClick"])):S("v-if",!0),2===h(pe)&&"sort"!==u.type?(x(),k(ne,{key:2,type:"primary",class:"margin-left-10",onClick:l=>function(e){e.customAnswerId=e.examAnswerId||B(),oe("setRelation",ie.customId,e)}(e)},{default:b((()=>[V("span",null,q(e.answerRelations?.length?`关联了${h(Ee)(e.answerRelations)}项`:"关联检查"),1)])),_:2},1032,["onClick"])):S("v-if",!0)])))),128))]),"sort"===u.type?(x(),f("div",Y,[d[15]||(d[15]=V("div",{class:"label flex flex-justify-end"},[V("span",null,"排序答案:")],-1)),V("div",Z,[C(y,{modelValue:h(ke),"onUpdate:modelValue":d[2]||(d[2]=e=>R(ke)?ke.value=e:null),multiple:"",style:{width:"360px"},placeholder:"请按顺序选择排序答案","show-arrow":!0},{default:b((()=>[(x(!0),f(T,null,j(h(ce),((e,l)=>(x(),k(v,{key:l,label:e.title,value:String.fromCharCode(65+l)},null,8,["label","value"])))),128))])),_:1},8,["modelValue"])])])):S("v-if",!0),u.showAnalysis?(x(),f("div",ee,[d[16]||(d[16]=V("div",{class:"label flex flex-justify-center"},[V("span",null,"解析:")],-1)),V("div",le,[C(c,{modelValue:h(fe),"onUpdate:modelValue":d[3]||(d[3]=e=>R(fe)?fe.value=e:null),type:"textarea",rows:2,placeholder:"请输入题目解析"},null,8,["modelValue"])])])):S("v-if",!0),h(xe)?(x(),f("div",te,[d[18]||(d[18]=V("div",{class:"label flex flex-justify-center"},[V("span",null,"富文本:")],-1)),V("div",se,[C(K,I({"model-value":h(we),"onUpdate:modelValue":d[4]||(d[4]=e=>R(we)?we.value=e:null)},h(re),{style:{width:"100%"}}),null,16,["model-value"]),V("div",ae,[C(ne,{type:"danger",onClick:Ae},{default:b((()=>d[17]||(d[17]=[A(" 删除富文本 ")]))),_:1})])])])):S("v-if",!0)])),key:"0"}:void 0]),1032,["show-edit"]),C(Be,{modelValue:h(Ce),"onUpdate:modelValue":d[11]||(d[11]=e=>R(Ce)?Ce.value=e:null),title:"添加结果",class:"customize-dialog"},{footer:b((()=>[C(he,{class:"customize-button",type:"primary",plain:"",onClick:je},{default:b((()=>d[19]||(d[19]=[A(" 取消 ")]))),_:1}),C(he,{class:"customize-button",type:"primary",plain:"",onClick:Te},{default:b((()=>d[20]||(d[20]=[A(" 保存 ")]))),_:1})])),default:b((()=>[(x(),k(K,I({key:h(ue),"model-value":h(ge),"onUpdate:modelValue":d[10]||(d[10]=e=>R(ge)?ge.value=e:null)},h(re),{style:{width:"100%"}}),null,16,["model-value"]))])),_:1},8,["modelValue"])],2)}}});export{ne as default};
2
2
  //# sourceMappingURL=subject-single.vue.mjs.map