@qxs-bns/components 0.0.69 → 0.0.70

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 (172) hide show
  1. package/es/package.json.mjs +1 -1
  2. package/es/src/data-chart/src/components/area.vue2.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.vue2.mjs.map +1 -1
  5. package/es/src/data-chart/src/components/card.vue2.mjs +1 -1
  6. package/es/src/data-chart/src/components/card.vue2.mjs.map +1 -1
  7. package/es/src/data-chart/src/components/funnel.vue2.mjs.map +1 -1
  8. package/es/src/data-chart/src/components/line.vue2.mjs.map +1 -1
  9. package/es/src/data-chart/src/components/pie.vue2.mjs.map +1 -1
  10. package/es/src/data-chart/src/components/radar.vue2.mjs.map +1 -1
  11. package/es/src/data-chart/src/components/scatter-simple.vue2.mjs.map +1 -1
  12. package/es/src/data-chart/src/components/scatter.vue2.mjs.map +1 -1
  13. package/es/src/data-chart/src/components/table.vue.mjs +1 -1
  14. package/es/src/data-chart/src/components/table.vue.mjs.map +1 -1
  15. package/es/src/data-chart/src/data-chart.vue.mjs +1 -1
  16. package/es/src/data-chart/src/data-chart.vue.mjs.map +1 -1
  17. package/es/src/data-chart/src/utils/config.mjs +1 -1
  18. package/es/src/data-chart/src/utils/config.mjs.map +1 -1
  19. package/es/src/data-chart/src/utils/mapData.mjs.map +1 -1
  20. package/es/src/data-chart/src/utils/useCharts.mjs +1 -1
  21. package/es/src/data-chart/src/utils/useCharts.mjs.map +1 -1
  22. package/es/src/file-upload/src/file-upload.vue.mjs +1 -1
  23. package/es/src/file-upload/src/file-upload.vue.mjs.map +1 -1
  24. package/es/src/fixed-action-bar/src/fixed-action-bar.vue.mjs +1 -1
  25. package/es/src/fixed-action-bar/src/fixed-action-bar.vue.mjs.map +1 -1
  26. package/es/src/icon/index.mjs +1 -1
  27. package/es/src/icon/index.mjs.map +1 -1
  28. package/es/src/icon/src/icon.vue.mjs +1 -1
  29. package/es/src/icon/src/icon.vue.mjs.map +1 -1
  30. package/es/src/image-upload/src/image-upload.vue.mjs +1 -1
  31. package/es/src/image-upload/src/image-upload.vue.mjs.map +1 -1
  32. package/es/src/photo-crop-tool/src/composables.mjs.map +1 -1
  33. package/es/src/photo-crop-tool/src/photo-crop-tool.vue.mjs +1 -1
  34. package/es/src/photo-crop-tool/src/photo-crop-tool.vue.mjs.map +1 -1
  35. package/es/src/subject-action/src/subject-action.vue.mjs +1 -1
  36. package/es/src/subject-action/src/subject-action.vue.mjs.map +1 -1
  37. package/es/src/subject-list/src/components/SubjectPageEnd.vue.mjs +1 -1
  38. package/es/src/subject-list/src/components/SubjectPageEnd.vue.mjs.map +1 -1
  39. package/es/src/subject-list/src/components/SubjectRichText.vue.mjs +1 -1
  40. package/es/src/subject-list/src/components/SubjectRichText.vue.mjs.map +1 -1
  41. package/es/src/subject-list/src/components/subject-blank-fill.vue.mjs +1 -1
  42. package/es/src/subject-list/src/components/subject-blank-fill.vue.mjs.map +1 -1
  43. package/es/src/subject-list/src/components/subject-scale.vue.mjs +1 -1
  44. package/es/src/subject-list/src/components/subject-scale.vue.mjs.map +1 -1
  45. package/es/src/subject-list/src/components/subject-single.vue.mjs +1 -1
  46. package/es/src/subject-list/src/components/subject-single.vue.mjs.map +1 -1
  47. package/es/src/subject-list/src/components/subject-text-fill.vue.mjs +1 -1
  48. package/es/src/subject-list/src/components/subject-text-fill.vue.mjs.map +1 -1
  49. package/es/src/subject-list/src/subject-list.vue.mjs +1 -1
  50. package/es/src/subject-list/src/subject-list.vue.mjs.map +1 -1
  51. package/es/src/subject-type/src/subject-type.vue.mjs +1 -1
  52. package/es/src/subject-type/src/subject-type.vue.mjs.map +1 -1
  53. package/es/src/tiny-mce-editor/src/tiny-mce-editor.vue.mjs +1 -1
  54. package/es/src/tiny-mce-editor/src/tiny-mce-editor.vue.mjs.map +1 -1
  55. package/lib/package.json.cjs +1 -1
  56. package/lib/src/data-chart/src/components/area.vue2.cjs +1 -1
  57. package/lib/src/data-chart/src/components/area.vue2.cjs.map +1 -1
  58. package/lib/src/data-chart/src/components/bar.vue2.cjs.map +1 -1
  59. package/lib/src/data-chart/src/components/card.vue2.cjs +1 -1
  60. package/lib/src/data-chart/src/components/card.vue2.cjs.map +1 -1
  61. package/lib/src/data-chart/src/components/funnel.vue2.cjs.map +1 -1
  62. package/lib/src/data-chart/src/components/line.vue2.cjs.map +1 -1
  63. package/lib/src/data-chart/src/components/pie.vue2.cjs.map +1 -1
  64. package/lib/src/data-chart/src/components/radar.vue2.cjs.map +1 -1
  65. package/lib/src/data-chart/src/components/scatter-simple.vue2.cjs.map +1 -1
  66. package/lib/src/data-chart/src/components/scatter.vue2.cjs.map +1 -1
  67. package/lib/src/data-chart/src/components/table.vue.cjs +1 -1
  68. package/lib/src/data-chart/src/components/table.vue.cjs.map +1 -1
  69. package/lib/src/data-chart/src/data-chart.vue.cjs +1 -1
  70. package/lib/src/data-chart/src/data-chart.vue.cjs.map +1 -1
  71. package/lib/src/data-chart/src/utils/config.cjs +1 -1
  72. package/lib/src/data-chart/src/utils/config.cjs.map +1 -1
  73. package/lib/src/data-chart/src/utils/mapData.cjs.map +1 -1
  74. package/lib/src/data-chart/src/utils/useCharts.cjs +1 -1
  75. package/lib/src/data-chart/src/utils/useCharts.cjs.map +1 -1
  76. package/lib/src/file-upload/src/file-upload.vue.cjs +1 -1
  77. package/lib/src/file-upload/src/file-upload.vue.cjs.map +1 -1
  78. package/lib/src/fixed-action-bar/src/fixed-action-bar.vue.cjs +1 -1
  79. package/lib/src/fixed-action-bar/src/fixed-action-bar.vue.cjs.map +1 -1
  80. package/lib/src/icon/index.cjs +1 -1
  81. package/lib/src/icon/index.cjs.map +1 -1
  82. package/lib/src/icon/src/icon.vue.cjs +1 -1
  83. package/lib/src/icon/src/icon.vue.cjs.map +1 -1
  84. package/lib/src/image-upload/src/image-upload.vue.cjs +1 -1
  85. package/lib/src/image-upload/src/image-upload.vue.cjs.map +1 -1
  86. package/lib/src/photo-crop-tool/src/composables.cjs.map +1 -1
  87. package/lib/src/photo-crop-tool/src/photo-crop-tool.vue.cjs +1 -1
  88. package/lib/src/photo-crop-tool/src/photo-crop-tool.vue.cjs.map +1 -1
  89. package/lib/src/subject-action/src/subject-action.vue.cjs +1 -1
  90. package/lib/src/subject-action/src/subject-action.vue.cjs.map +1 -1
  91. package/lib/src/subject-list/src/components/SubjectPageEnd.vue.cjs +1 -1
  92. package/lib/src/subject-list/src/components/SubjectPageEnd.vue.cjs.map +1 -1
  93. package/lib/src/subject-list/src/components/SubjectRichText.vue.cjs +1 -1
  94. package/lib/src/subject-list/src/components/SubjectRichText.vue.cjs.map +1 -1
  95. package/lib/src/subject-list/src/components/subject-blank-fill.vue.cjs +1 -1
  96. package/lib/src/subject-list/src/components/subject-blank-fill.vue.cjs.map +1 -1
  97. package/lib/src/subject-list/src/components/subject-scale.vue.cjs +1 -1
  98. package/lib/src/subject-list/src/components/subject-scale.vue.cjs.map +1 -1
  99. package/lib/src/subject-list/src/components/subject-single.vue.cjs +1 -1
  100. package/lib/src/subject-list/src/components/subject-single.vue.cjs.map +1 -1
  101. package/lib/src/subject-list/src/components/subject-text-fill.vue.cjs +1 -1
  102. package/lib/src/subject-list/src/components/subject-text-fill.vue.cjs.map +1 -1
  103. package/lib/src/subject-list/src/subject-list.vue.cjs +1 -1
  104. package/lib/src/subject-list/src/subject-list.vue.cjs.map +1 -1
  105. package/lib/src/subject-type/src/subject-type.vue.cjs +1 -1
  106. package/lib/src/subject-type/src/subject-type.vue.cjs.map +1 -1
  107. package/lib/src/tiny-mce-editor/src/tiny-mce-editor.vue.cjs +1 -1
  108. package/lib/src/tiny-mce-editor/src/tiny-mce-editor.vue.cjs.map +1 -1
  109. package/package.json +8 -15
  110. package/theme-chalk/index.css +1 -1
  111. package/theme-chalk/index.scss +1 -1
  112. package/theme-chalk/src/common/element-plus.scss +1 -1
  113. package/theme-chalk/src/data-chart/empty.css +1 -1
  114. package/theme-chalk/src/data-chart/empty.scss +3 -3
  115. package/theme-chalk/src/data-chart/index.css +1 -1
  116. package/theme-chalk/src/icon.css +1 -1
  117. package/theme-chalk/src/icon.scss +5 -5
  118. package/theme-chalk/src/image-upload.css +1 -1
  119. package/theme-chalk/src/image-upload.scss +21 -18
  120. package/theme-chalk/src/mixins/config.scss +1 -3
  121. package/theme-chalk/src/mixins/mixins.scss +1 -2
  122. package/theme-chalk/src/normalize.css +1 -1
  123. package/theme-chalk/src/normalize.scss +41 -19
  124. package/theme-chalk/src/photo-crop-tool.css +1 -1
  125. package/theme-chalk/src/photo-crop-tool.scss +7 -7
  126. package/theme-chalk/src/subject-action.css +1 -1
  127. package/theme-chalk/src/subject-action.scss +1 -1
  128. package/types/src/data-chart/index.d.ts +1 -1
  129. package/types/src/data-chart/src/components/area.vue.d.ts.map +1 -1
  130. package/types/src/data-chart/src/components/bar.vue.d.ts.map +1 -1
  131. package/types/src/data-chart/src/components/card.vue.d.ts +2 -2
  132. package/types/src/data-chart/src/components/funnel.vue.d.ts.map +1 -1
  133. package/types/src/data-chart/src/components/line.vue.d.ts.map +1 -1
  134. package/types/src/data-chart/src/components/pie.vue.d.ts.map +1 -1
  135. package/types/src/data-chart/src/components/radar.vue.d.ts.map +1 -1
  136. package/types/src/data-chart/src/components/scatter-simple.vue.d.ts.map +1 -1
  137. package/types/src/data-chart/src/components/scatter.vue.d.ts.map +1 -1
  138. package/types/src/data-chart/src/components/table.vue.d.ts +2 -2
  139. package/types/src/data-chart/src/components/table.vue.d.ts.map +1 -1
  140. package/types/src/data-chart/src/data-chart.vue.d.ts +2 -2
  141. package/types/src/data-chart/src/data-chart.vue.d.ts.map +1 -1
  142. package/types/src/data-chart/src/utils/config.d.ts.map +1 -1
  143. package/types/src/data-chart/src/utils/mapData.d.ts.map +1 -1
  144. package/types/src/data-chart/src/utils/useCharts.d.ts.map +1 -1
  145. package/types/src/file-upload/src/file-upload.vue.d.ts.map +1 -1
  146. package/types/src/fixed-action-bar/index.d.ts +3 -3
  147. package/types/src/fixed-action-bar/src/fixed-action-bar.vue.d.ts +2 -2
  148. package/types/src/fixed-action-bar/src/fixed-action-bar.vue.d.ts.map +1 -1
  149. package/types/src/icon/index.d.ts +2 -2
  150. package/types/src/icon/index.d.ts.map +1 -1
  151. package/types/src/icon/src/icon.vue.d.ts.map +1 -1
  152. package/types/src/image-upload/src/image-upload.vue.d.ts.map +1 -1
  153. package/types/src/photo-crop-tool/index.d.ts +4 -4
  154. package/types/src/photo-crop-tool/src/composables.d.ts.map +1 -1
  155. package/types/src/photo-crop-tool/src/photo-crop-tool.vue.d.ts +2 -2
  156. package/types/src/photo-crop-tool/src/photo-crop-tool.vue.d.ts.map +1 -1
  157. package/types/src/subject-action/index.d.ts +2 -2
  158. package/types/src/subject-action/src/subject-action.vue.d.ts +2 -2
  159. package/types/src/subject-action/src/subject-action.vue.d.ts.map +1 -1
  160. package/types/src/subject-list/index.d.ts +1 -1
  161. package/types/src/subject-list/src/components/SubjectPageEnd.vue.d.ts.map +1 -1
  162. package/types/src/subject-list/src/components/SubjectRichText.vue.d.ts.map +1 -1
  163. package/types/src/subject-list/src/components/subject-blank-fill.vue.d.ts.map +1 -1
  164. package/types/src/subject-list/src/components/subject-scale.vue.d.ts.map +1 -1
  165. package/types/src/subject-list/src/components/subject-single.vue.d.ts.map +1 -1
  166. package/types/src/subject-list/src/components/subject-text-fill.vue.d.ts.map +1 -1
  167. package/types/src/subject-list/src/subject-list.vue.d.ts +1 -1
  168. package/types/src/subject-list/src/subject-list.vue.d.ts.map +1 -1
  169. package/types/src/subject-type/src/subject-type.vue.d.ts.map +1 -1
  170. package/types/src/tiny-mce-editor/index.d.ts.map +1 -1
  171. package/types/src/tiny-mce-editor/src/tiny-mce-editor.vue.d.ts.map +1 -1
  172. package/types/tsconfig.tsbuildinfo +1 -1
@@ -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\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","_createElementBlock","class","_normalizeClass","_unref","e","_createVNode","SubjectLayout","isEdit","preview","_createElementVNode","_hoisted_1","_hoisted_2","_hoisted_3","_toDisplayString","orderIndex","_hoisted_4","innerHTML","some","_openBlock","_hoisted_6","_cache","_Fragment","_renderList","index","key","style","edit","_hoisted_7","_hoisted_8","_component_el_input","$event","type","rows","maxlength","placeholder","disabled","isSave","_hoisted_9","_createCommentVNode","_component_el_link","onClick","_hoisted_10","_component_el_checkbox_group","_component_el_checkbox","_createTextVNode","_hoisted_11","_hoisted_12","_hoisted_13","split","i","_createBlock","_component_el_tag","closable","onClose","tags","findIndex","join","closeTag","modelValue","width","onBlur","handleAddTag","_component_el_button","size","_component_el_icon","Plus","showAnalysis","_hoisted_14","_hoisted_15","_hoisted_16","_hoisted_17","TinyMceEditor","_mergeProps","_hoisted_18","showAction","SubjectAction","isSet","examAnswerRelationType","onMoveUp","onMoveDown","onDelete","onSave","onEdit","onAdd","onOnShowRichText"],"mappings":"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"}
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 { onMounted, ref, useAttrs, watch } from 'vue'\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","_createElementBlock","class","_normalizeClass","_unref","e","_createVNode","SubjectLayout","isEdit","preview","_createElementVNode","_hoisted_1","_hoisted_2","_hoisted_3","_toDisplayString","orderIndex","_hoisted_4","innerHTML","some","_openBlock","_hoisted_6","_cache","_Fragment","_renderList","index","key","style","edit","_hoisted_7","_hoisted_8","_component_el_input","$event","type","rows","maxlength","placeholder","disabled","isSave","_hoisted_9","_createCommentVNode","_component_el_link","onClick","_hoisted_10","_component_el_checkbox_group","_component_el_checkbox","_createTextVNode","_hoisted_11","_hoisted_12","_hoisted_13","split","i","_createBlock","_component_el_tag","closable","onClose","tags","findIndex","join","closeTag","modelValue","width","onBlur","handleAddTag","_component_el_button","size","_component_el_icon","Plus","showAnalysis","_hoisted_14","_hoisted_15","_hoisted_16","_hoisted_17","TinyMceEditor","_mergeProps","_hoisted_18","showAction","SubjectAction","isSet","examAnswerRelationType","onMoveUp","onMoveDown","onDelete","onSave","onEdit","onAdd","onOnShowRichText"],"mappings":"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"}
@@ -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 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)])),_:1,__:[13]})])])])):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};
1
+ import{defineComponent as e,useAttrs as l,ref as a,computed as t,onMounted as s,resolveComponent as i,createElementBlock as n,openBlock as u,normalizeClass as o,unref as r,createVNode as d,withCtx as c,createBlock as v,createCommentVNode as p,createElementVNode as m,Fragment as f,renderList as x,toDisplayString as y,mergeProps as h,createTextVNode as w}from"vue";import{CirclePlus as b,Remove as g}from"@element-plus/icons-vue";import{useNamespace as j}from"@qxs-bns/hooks";import{ElMessage as C}from"element-plus";import S from"../../../subject-action/src/subject-action.vue.mjs";import k from"../../../subject-layout/src/subject-layout.vue.mjs";import V from"../../../tiny-mce-editor/src/tiny-mce-editor.vue.mjs";const q={class:"preview"},_={class:"title"},L={key:0},T=["innerHTML"],A={class:"answer-radio flex-col"},R={style:{flex:"1"}},U={class:"answer flex"},M={class:"flex"},E={class:"answer-list flex-col"},Q={class:"order"},B={class:"flex",style:{"margin-bottom":"20px"}},O={style:{flex:"1"}},D={key:0,class:"margin-bottom flex"},H={style:{flex:"1"}},I={class:"flex flex-justify-end"};var N=e({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(e,{emit:N}){const $=e,P=N,z=l(),F=a([{title:""},{title:""},{title:""},{title:""},{title:""}]),G=a(""),J=a(""),K=a(""),W=a(!1),X=a(""),Y=a([]),Z=t(()=>Math.ceil(24/(F.value.length+1)));function ee(){5!==F.value.length&&F.value.push({title:""})}function le(){W.value=!1,X.value=""}function ae(){if(!G.value)return void C.error("题目标题不能为空!");let e="";F.value.forEach((l,a)=>{l.title||(e+=`选项${String.fromCharCode(65+a)}未填写。`)}),e?C.error(e):K.value?(Y.value=K.value.split("\n").filter(e=>e),P("save",{title:G.value,answers:F.value,analysis:J.value,scaleQuestionList:Y.value,examRichTextContent:W.value?X.value:""})):C.error("行标题不能为空!")}s(function(){$.title&&(G.value=$.title),$.answerList&&$.answerList.length&&(F.value=$.answerList),$.analysis&&(J.value=$.analysis),$.scaleQuestionList&&(Y.value=$.scaleQuestionList,K.value=Y.value.join("\n")),$.examRichTextContent&&(X.value=$.examRichTextContent,W.value=!0)});const te=j("subject-scale");return(e,l)=>{const a=i("el-col"),t=i("el-row"),s=i("el-radio"),j=i("el-input"),C=i("el-icon"),N=i("el-link");return u(),n("div",{class:o(r(te).e("scale-exam"))},[d(k,{"show-edit":e.isEdit},{preview:c(()=>[m("div",q,[m("div",null,[m("span",_,y(e.orderIndex+1)+"."+y(G.value)+"(量表题)",1),W.value?(u(),n("div",L,[m("div",{class:"rich-text",innerHTML:X.value},null,8,T)])):p("v-if",!0)]),m("div",A,[d(t,{style:{padding:"10px 0"}},{default:c(()=>[d(a,{span:Z.value},null,8,["span"]),(u(!0),n(f,null,x(F.value,e=>(u(),v(a,{key:e.title,class:"flex flex-center",span:Z.value},{default:c(()=>[m("span",null,y(e.title),1)]),_:2},1032,["span"]))),128))]),_:1}),(u(!0),n(f,null,x(Y.value,e=>(u(),v(t,{key:e,style:{padding:"10px 0"}},{default:c(()=>[d(a,{span:Z.value,class:"flex flex-center"},{default:c(()=>[m("span",null,y(e),1)]),_:2},1032,["span"]),(u(!0),n(f,null,x(F.value.length,e=>(u(),v(a,{key:e,class:"radio-item flex flex-center",span:Z.value},{default:c(()=>[d(s,{disabled:!0})]),_:2},1032,["span"]))),128))]),_:2},1024))),128))])])]),edit:c(()=>[m("div",{class:o(["flex",[{"margin-bottom":W.value}]])},[l[10]||(l[10]=m("div",{class:"label flex flex-justify-center"},[m("span",null,"题目:")],-1)),m("div",R,[d(j,{modelValue:G.value,"onUpdate:modelValue":l[0]||(l[0]=e=>G.value=e),type:"textarea",rows:2,placeholder:"【量表题】请输入问题",disabled:e.isSave},null,8,["modelValue","disabled"])])],2),m("div",U,[l[11]||(l[11]=m("div",{class:"label flex flex-justify-center"},[m("span",null,"行标题:")],-1)),m("div",M,[d(j,{modelValue:K.value,"onUpdate:modelValue":l[1]||(l[1]=e=>K.value=e),type:"textarea",placeholder:"请输入行标题",style:{width:"160px"},rows:10},null,8,["modelValue"]),m("div",E,[(u(!0),n(f,null,x(F.value,(l,a)=>(u(),n("div",{key:a,class:"answer-item flex flex-items-center"},[m("span",Q,y(String.fromCharCode(65+a))+".",1),d(j,{modelValue:l.title,"onUpdate:modelValue":e=>l.title=e,class:"input","show-word-limit":"",maxlength:10,placeholder:`选项${String.fromCharCode(65+a)}`,disabled:e.isSave},null,8,["modelValue","onUpdate:modelValue","placeholder","disabled"]),p(' <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 /> '),d(C,{class:"icon"},{default:c(()=>[d(r(b),{class:o([{disabled:5===F.value.length}]),onClick:ee},null,8,["class"])]),_:1}),d(C,{class:"icon"},{default:c(()=>[d(r(g),{class:o([{disabled:F.value.length<3}]),onClick:e=>function(e){F.value.length<3||F.value.splice(e,1)}(a)},null,8,["class","onClick"])]),_:2},1024)]))),128))])])]),m("div",B,[l[12]||(l[12]=m("div",{class:"label flex flex-justify-center"},[m("span",null,"解析:")],-1)),m("div",O,[d(j,{modelValue:J.value,"onUpdate:modelValue":l[2]||(l[2]=e=>J.value=e),type:"textarea",rows:2,placeholder:"请输入题目解析"},null,8,["modelValue"])])]),W.value?(u(),n("div",D,[l[14]||(l[14]=m("div",{class:"label flex flex-justify-center"},[m("span",null,"富文本:")],-1)),m("div",H,[d(V,h({"model-value":X.value,"onUpdate:modelValue":l[3]||(l[3]=e=>X.value=e)},r(z),{style:{width:"100%"}}),null,16,["model-value"]),m("div",I,[d(N,{type:"danger",onClick:le},{default:c(()=>l[13]||(l[13]=[w(" 删除富文本 ",-1)])),_:1,__:[13]})])])])):p("v-if",!0)]),default:c(()=>[e.showAction?(u(),v(S,{key:0,"is-edit":e.isEdit,"is-set":e.isSet,"show-other-option":!1,"exam-answer-relation-type":$.examAnswerRelationType,onMoveUp:l[4]||(l[4]=e=>P("move","up")),onMoveDown:l[5]||(l[5]=e=>P("move","down")),onDelete:l[6]||(l[6]=e=>P("delete")),onSave:ae,onEdit:l[7]||(l[7]=e=>P("edit")),onAdd:l[8]||(l[8]=e=>P("add",e)),onOnShowRichText:l[9]||(l[9]=e=>W.value=!0)},null,8,["is-edit","is-set","exam-answer-relation-type"])):p("v-if",!0)]),_:1},8,["show-edit"])],2)}}});export{N 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\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","_createElementBlock","class","_normalizeClass","_unref","e","_createVNode","SubjectLayout","isEdit","preview","_createElementVNode","_hoisted_1","_hoisted_2","_toDisplayString","orderIndex","_hoisted_3","innerHTML","_hoisted_5","_component_el_row","style","padding","_component_el_col","_Fragment","_renderList","item","_createBlock","key","_openBlock","_component_el_radio","disabled","edit","_hoisted_6","_component_el_input","$event","type","rows","placeholder","isSave","_hoisted_7","_hoisted_8","width","_hoisted_9","index","_hoisted_10","modelValue","maxlength","_createCommentVNode","_component_el_icon","CirclePlus","onClick","Remove","splice","deleteAnswer","_hoisted_11","_hoisted_12","_hoisted_13","_hoisted_14","TinyMceEditor","_mergeProps","_hoisted_15","_component_el_link","_cache","showAction","SubjectAction","isSet","examAnswerRelationType","onMoveUp","onMoveDown","onDelete","onSave","onEdit","onAdd","onOnShowRichText"],"mappings":"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"}
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 { computed, onMounted, ref, useAttrs } from 'vue'\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","_createElementBlock","class","_normalizeClass","_unref","e","_createVNode","SubjectLayout","isEdit","preview","_createElementVNode","_hoisted_1","_hoisted_2","_toDisplayString","orderIndex","_hoisted_3","innerHTML","_hoisted_5","_component_el_row","style","padding","_component_el_col","_Fragment","_renderList","item","_createBlock","key","_openBlock","_component_el_radio","disabled","edit","_hoisted_6","_component_el_input","$event","type","rows","placeholder","isSave","_hoisted_7","_hoisted_8","width","_hoisted_9","index","_hoisted_10","modelValue","maxlength","_createCommentVNode","_component_el_icon","CirclePlus","onClick","Remove","splice","deleteAnswer","_hoisted_11","_hoisted_12","_hoisted_13","_hoisted_14","TinyMceEditor","_mergeProps","_hoisted_15","_component_el_link","_cache","showAction","SubjectAction","isSet","examAnswerRelationType","onMoveUp","onMoveDown","onDelete","onSave","onEdit","onAdd","onOnShowRichText"],"mappings":"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"}
@@ -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 V,createTextVNode as A,toDisplayString as _,Fragment as q,renderList as T,isRef as j,mergeProps as R}from"vue";import{CirclePlus as I,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 _e(){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 Te(){Ce.value=!1,ge.value=""}function je(e){de.value=e}function Re(e){me.value=e}function Ie(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(_(u.orderIndex+1)+"."+_(h(ye))+" ",1),"single"===u.type?(x(),f("span",M,"(单选题)")):["multiple","sort"].includes(u.type)?(x(),f("span",D," ("+_(h(be))+_(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(q,{key:0},T(h(ce),(e,l)=>(x(),k(m,{key:l,class:"radio",disabled:!0},{default:b(()=>[V("span",F,_(String.fromCharCode(65+l))+". ",1),A(" "+_(e.title),1)]),_:2},1024))),128)):(x(!0),f(q,{key:1},T(h(ce),(e,l)=>(x(),k(p,{key:l,class:"radio",value:"disabled",disabled:""},{default:b(()=>[V("span",G,_(String.fromCharCode(65+l))+". ",1),A(" "+_(e.title)+" "+_(e.isCorrect?"(支持选项)":"")+" "+_(1===h(pe)?e.resultItem?"(已设置结果项)":"(未设置结果项)":"")+" "+_(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:_e,onEdit:d[8]||(d[8]=e=>oe("edit")),onAdd:Ie,onOnShowRichText:d[9]||(d[9]=e=>xe.value=!0),onSetKey:je,onSetAnswerSetting:Re},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=>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),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=>j(ve)?ve.value=e:null),style:{width:"150px"},placeholder:"至少选择几项",disabled:u.isSave},{default:b(()=>[(x(!0),f(q,null,T(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(q,null,T(h(ce),(e,l)=>(x(),f("div",{key:l,class:"answer-item flex flex-items-center"},[V("span",X,_(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(" 支持选项 ",-1)])]),_:2,__:[14]},1032,["modelValue","onUpdate:modelValue","class","disabled","onChange"])):S("v-if",!0),C(U,{class:"icon"},{default:b(()=>[C(h(I),{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,_(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,_(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=>j(ke)?ke.value=e:null),multiple:"",style:{width:"360px"},placeholder:"请按顺序选择排序答案","show-arrow":!0},{default:b(()=>[(x(!0),f(q,null,T(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=>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]=V("div",{class:"label flex flex-justify-center"},[V("span",null,"富文本:")],-1)),V("div",se,[C(K,R({"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"]),V("div",ae,[C(ne,{type:"danger",onClick:Ae},{default:b(()=>d[17]||(d[17]=[A(" 删除富文本 ",-1)])),_:1,__:[17]})])])])):S("v-if",!0)]),key:"0"}:void 0]),1032,["show-edit"]),C(Be,{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:Te},{default:b(()=>d[19]||(d[19]=[A(" 取消 ",-1)])),_:1,__:[19]}),C(he,{class:"customize-button",type:"primary",plain:"",onClick:qe},{default:b(()=>d[20]||(d[20]=[A(" 保存 ",-1)])),_:1,__:[20]})]),default:b(()=>[(x(),k(K,R({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{defineComponent as e,useAttrs as l,ref as t,computed as a,watch as i,onMounted as s,resolveComponent as n,createElementBlock as r,openBlock as o,normalizeClass as u,unref as d,createVNode as v,createSlots as c,withCtx as m,createBlock as p,createCommentVNode as y,createElementVNode as f,createTextVNode as x,toDisplayString as w,Fragment as h,renderList as C,mergeProps as g}from"vue";import{CirclePlus as b,Remove as k}from"@element-plus/icons-vue";import{useNamespace as S}from"@qxs-bns/hooks";import{setGuid as V}from"@qxs-bns/utils";import{ElMessage as A}from"element-plus";import _ 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 j={class:"preview"},R={class:"title"},I={key:0},E={key:1},U={key:0},B=["innerHTML"],L={class:"preview-answer"},$={class:"order"},K={class:"order"},N={style:{flex:"1"}},z={class:"margin-bottom flex flex-items-center"},M={class:"margin-bottom answer-list"},D={class:"label flex flex-justify-center"},H={key:0,class:"margin-bottom flex flex-items-center"},O={style:{flex:"1"}},Q={key:1,class:"flex"},F={style:{flex:"1"}},G={key:2,class:"margin-bottom flex"},J={style:{flex:"1"}},P={class:"flex flex-justify-end"};var W=e({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(e,{emit:W}){const X=e,Y=W,Z=l(),ee=t(0),le=t(X.isKey),te=t(1),ae=t(X.examAnswerRelationType),ie=t([{title:"",isCorrect:!1},{title:"",isCorrect:!1},{title:"",isCorrect:!1},{title:"",isCorrect:!1}]),se=t(2),ne=t(""),re=t(""),oe=t(!1),ue=t(""),de=t(0),ve=t(!1),ce=t(""),me=a(()=>"single"===X.type?"单选题":"multiple"===X.type?"多选题":"排序题"),pe=t([]),ye=a(()=>{const e=[];for(let l=ie.value.length;l>1;l--)e.push({label:`至少选择${l}项`,value:l});return e.reverse()});function fe(){X.isSave||ie.value.push({title:"",isCorrect:!1,customAnswerId:V()})}function xe(){oe.value=!1,ue.value=""}function we(){if(!ne.value)return void A.error("题目标题不能为空!");if(!te.value)return void A.error("请选择答题设置");let e="",l=!1,t=0;if("multiple"===X.type||"single"===X.type?ie.value.forEach((a,i)=>{a.title?.trim()||(e+=`选项${String.fromCharCode(65+i)}未填写。`),a.isCorrect&&(l=!0,t++),a.relationType=a.resultItem?1:a.answerRelations?.length?2:null}):"sort"===X.type&&pe.value.length&&(l=!0),e)return void A.error(e);if(new Set(ie.value.map(e=>e.title)).size===ie.value.length){if("multiple"===X.type){if(1===t)return void A.error("请至少设置两个支持选项");if(l&&t<se.value)return void A.error("至少选几项与支持选项数不符")}2!==te.value&&3!==te.value||l?Y("save",{title:ne.value,answers:ie.value.map((e,l)=>({...e,orderIndex:l+1})),examExpand:pe.value.map(e=>e.charCodeAt(0)-65+1).join(","),analysis:re.value,isSetCorrectAnswer:l,leastAnswerCount:se.value,examRichTextContent:oe.value?ue.value:"",examAnswerRelationType:ae.value,isKey:le.value,answerCheckType:te.value}):A.error("请设置支持选项")}else A.error("选项不能重复")}function he(){ie.value[ee.value].resultItem=ce.value||"",ve.value=!1}function Ce(){ve.value=!1,ce.value=""}function ge(e){le.value=e}function be(e){te.value=e}function ke(e,l){Y("add",e,l?X.examAnswerRelationType:null)}i(()=>X.isEdit,()=>{X.isEdit&&(de.value=(new Date).getTime())});const Se=a(()=>e=>{let l=0;return e.forEach(e=>{e.relationAnswers&&(l+=e.relationAnswers.length)}),l}),Ve=S("subject-single");return s(function(){if(X.title&&(ne.value=X.title),X.answerCheckType&&(te.value=X.answerCheckType),X.isKey&&(le.value=X.isKey),X.examAnswerRelationType&&(ae.value=X.examAnswerRelationType),X.answerList&&X.answerList.length&&(ie.value=X.answerList),X.leastAnswerCount&&(se.value=X.leastAnswerCount),X.examExpand&&X.examExpand){const e=X.examExpand.split(",");pe.value=e.map(e=>{const l=X.answerList.find(l=>l.answerId?.toString()===e);return l?String.fromCharCode(65+l.orderIndex-1):e}).filter(Boolean)}X.analysis&&(re.value=X.analysis),X.examRichTextContent&&(ue.value=X.examRichTextContent,oe.value=!0)}),(e,l)=>{const t=n("el-checkbox"),a=n("el-radio"),i=n("el-input"),s=n("el-option"),S=n("el-select"),A=n("el-icon"),W=n("el-link"),de=n("el-button"),Ae=n("el-dialog");return o(),r("div",{class:u(d(Ve).e("single-exam"))},[v(q,{"show-edit":e.isEdit},c({preview:m(()=>[f("div",j,[f("div",null,[f("span",R,[x(w(e.orderIndex+1)+"."+w(ne.value)+" ",1),"single"===e.type?(o(),r("span",I,"(单选题)")):["multiple","sort"].includes(e.type)?(o(),r("span",E," ("+w(me.value)+w(se.value?`至少选${se.value}项${"sort"===e.type?"并排序":""}`:"")+") ",1)):y("v-if",!0)])]),oe.value?(o(),r("div",U,[f("div",{class:"rich-text",innerHTML:ue.value},null,8,B)])):y("v-if",!0),f("div",L,["sort"===e.type?(o(!0),r(h,{key:0},C(ie.value,(e,l)=>(o(),p(t,{key:l,class:"radio",disabled:!0},{default:m(()=>[f("span",$,w(String.fromCharCode(65+l))+". ",1),x(" "+w(e.title),1)]),_:2},1024))),128)):(o(!0),r(h,{key:1},C(ie.value,(e,l)=>(o(),p(a,{key:l,class:"radio",value:"disabled",disabled:""},{default:m(()=>[f("span",K,w(String.fromCharCode(65+l))+". ",1),x(" "+w(e.title)+" "+w(e.isCorrect?"(支持选项)":"")+" "+w(1===ae.value?e.resultItem?"(已设置结果项)":"(未设置结果项)":"")+" "+w(2===ae.value?e.answerRelations?.length?"(已设置关联)":"(未设置关联)":""),1)]),_:2},1024))),128))])])]),default:m(()=>[e.showAction?(o(),p(_,{key:0,"is-edit":e.isEdit,"is-set":e.isSet,"is-key":le.value,"show-other-option":"multiple"===X.type||"single"===X.type,"exam-answer-relation-type":X.examAnswerRelationType,"answer-check-type":te.value,onMoveUp:l[5]||(l[5]=e=>Y("move","up")),onMoveDown:l[6]||(l[6]=e=>Y("move","down")),onDelete:l[7]||(l[7]=e=>Y("delete")),onSave:we,onEdit:l[8]||(l[8]=e=>Y("edit")),onAdd:ke,onOnShowRichText:l[9]||(l[9]=e=>oe.value=!0),onSetKey:ge,onSetAnswerSetting:be},null,8,["is-edit","is-set","is-key","show-other-option","exam-answer-relation-type","answer-check-type"])):y("v-if",!0)]),_:2},[e.isEdit?{name:"edit",fn:m(()=>[f("div",{class:u(["flex",[{"margin-bottom":oe.value}]])},[l[12]||(l[12]=f("div",{class:"label flex flex-justify-center"},[f("span",null,"题目:")],-1)),f("div",N,[v(i,{modelValue:ne.value,"onUpdate:modelValue":l[0]||(l[0]=e=>ne.value=e),type:"textarea",rows:2,placeholder:`【${me.value}】请输入问题`,disabled:e.isSave,"show-word-limit":"",maxlength:"200",class:"margin-bottom"},null,8,["modelValue","placeholder","disabled"])])],2),f("div",z,[l[13]||(l[13]=f("div",{class:"label flex flex-justify-center"},[f("span",null,"设置:")],-1)),["multiple","sort"].includes(e.type)?(o(),p(S,{key:0,modelValue:se.value,"onUpdate:modelValue":l[1]||(l[1]=e=>se.value=e),style:{width:"150px"},placeholder:"至少选择几项",disabled:e.isSave},{default:m(()=>[(o(!0),r(h,null,C(ye.value,e=>(o(),p(s,{key:e.value,value:e.value,label:e.label},null,8,["value","label"]))),128))]),_:1},8,["modelValue","disabled"])):y("v-if",!0)]),f("div",M,[(o(!0),r(h,null,C(ie.value,(a,s)=>(o(),r("div",{key:s,class:"answer-item flex flex-items-center"},[f("span",D,w(String.fromCharCode(65+s))+".",1),v(i,{modelValue:a.title,"onUpdate:modelValue":e=>a.title=e,class:"input","show-word-limit":"",maxlength:"100",placeholder:`选项${String.fromCharCode(65+s)}`,disabled:e.isSave},null,8,["modelValue","onUpdate:modelValue","placeholder","disabled"]),["single","multiple"].includes(e.type)?(o(),p(t,{key:0,modelValue:a.isCorrect,"onUpdate:modelValue":e=>a.isCorrect=e,class:u([{"is-correct":a.isCorrect}]),disabled:e.isSave,style:{"margin-left":"10px"},onChange:e=>function(e,l){"single"===X.type?(l&&ie.value.forEach(l=>{l!==e&&(l.isCorrect=!1)}),e.isCorrect=l):"multiple"===X.type&&(e.isCorrect=l)}(a,e)},{default:m(()=>[...l[14]||(l[14]=[x(" 支持选项 ",-1)])]),_:2,__:[14]},1032,["modelValue","onUpdate:modelValue","class","disabled","onChange"])):y("v-if",!0),v(A,{class:"icon"},{default:m(()=>[v(d(b),{class:u([{disabled:e.isSave}]),onClick:fe},null,8,["class"])]),_:1}),v(A,{class:"icon"},{default:m(()=>[v(d(k),{class:u([{disabled:ie.value.length<3||e.isSave}]),onClick:e=>function(e){ie.value.length<3||X.isSave||ie.value.splice(e,1)}(s)},null,8,["class","onClick"])]),_:2},1024),1===ae.value&&"sort"!==e.type?(o(),p(W,{key:1,type:"primary",class:"margin-left-10",onClick:e=>{return l=s,ee.value=l,ce.value=ie.value[l].resultItem||"",void(ve.value=!0);var l}},{default:m(()=>[f("span",null,w(a.resultItem?"编辑结果":"添加结果"),1)]),_:2},1032,["onClick"])):y("v-if",!0),2===ae.value&&"sort"!==e.type?(o(),p(W,{key:2,type:"primary",class:"margin-left-10",onClick:e=>function(e){e.customAnswerId=e.examAnswerId||V(),Y("setRelation",X.customId,e)}(a)},{default:m(()=>[f("span",null,w(a.answerRelations?.length?`关联了${Se.value(a.answerRelations)}项`:"关联检查"),1)]),_:2},1032,["onClick"])):y("v-if",!0)]))),128))]),"sort"===e.type?(o(),r("div",H,[l[15]||(l[15]=f("div",{class:"label flex flex-justify-end"},[f("span",null,"排序答案:")],-1)),f("div",O,[v(S,{modelValue:pe.value,"onUpdate:modelValue":l[2]||(l[2]=e=>pe.value=e),multiple:"",style:{width:"360px"},placeholder:"请按顺序选择排序答案","show-arrow":!0},{default:m(()=>[(o(!0),r(h,null,C(ie.value,(e,l)=>(o(),p(s,{key:l,label:e.title,value:String.fromCharCode(65+l)},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])])])):y("v-if",!0),e.showAnalysis?(o(),r("div",Q,[l[16]||(l[16]=f("div",{class:"label flex flex-justify-center"},[f("span",null,"解析:")],-1)),f("div",F,[v(i,{modelValue:re.value,"onUpdate:modelValue":l[3]||(l[3]=e=>re.value=e),type:"textarea",rows:2,placeholder:"请输入题目解析"},null,8,["modelValue"])])])):y("v-if",!0),oe.value?(o(),r("div",G,[l[18]||(l[18]=f("div",{class:"label flex flex-justify-center"},[f("span",null,"富文本:")],-1)),f("div",J,[v(T,g({"model-value":ue.value,"onUpdate:modelValue":l[4]||(l[4]=e=>ue.value=e)},d(Z),{style:{width:"100%"}}),null,16,["model-value"]),f("div",P,[v(W,{type:"danger",onClick:xe},{default:m(()=>l[17]||(l[17]=[x(" 删除富文本 ",-1)])),_:1,__:[17]})])])])):y("v-if",!0)]),key:"0"}:void 0]),1032,["show-edit"]),v(Ae,{modelValue:ve.value,"onUpdate:modelValue":l[11]||(l[11]=e=>ve.value=e),title:"添加结果",class:"customize-dialog"},{footer:m(()=>[v(de,{class:"customize-button",type:"primary",plain:"",onClick:Ce},{default:m(()=>l[19]||(l[19]=[x(" 取消 ",-1)])),_:1,__:[19]}),v(de,{class:"customize-button",type:"primary",plain:"",onClick:he},{default:m(()=>l[20]||(l[20]=[x(" 保存 ",-1)])),_:1,__:[20]})]),default:m(()=>[(o(),p(T,g({key:ee.value,"model-value":ce.value,"onUpdate:modelValue":l[10]||(l[10]=e=>ce.value=e)},d(Z),{style:{width:"100%"}}),null,16,["model-value"]))]),_:1},8,["modelValue"])],2)}}});export{W as default};
2
2
  //# sourceMappingURL=subject-single.vue.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"subject-single.vue.mjs","sources":["../../../../../../../packages/components/src/subject-list/src/components/subject-single.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { CirclePlus, Remove } from '@element-plus/icons-vue'\nimport { useNamespace } from '@qxs-bns/hooks'\nimport { setGuid } from '@qxs-bns/utils'\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: 'QxsSubjectSingle',\n})\nconst props = defineProps<{\n orderIndex: number\n title?: string\n isSave: boolean\n showAction?: boolean\n type: 'single' | 'multiple' | 'sort'\n isEdit: boolean\n isSet: boolean\n answerList?: any\n leastAnswerCount?: number\n analysis?: string\n examExpand?: string\n examRichTextContent?: string\n showAnalysis?: boolean\n examAnswerRelationType?: number\n customId?: number\n examId?: number\n isKey: boolean\n answerCheckType: number\n}>()\nconst emits = defineEmits(['move', 'save', 'delete', 'edit', 'add', 'setRelation'])\n\nconst attrs = useAttrs()\n\nconst answersIndex = ref(0)\nconst isKey = ref(props.isKey)\nconst answerCheckType = ref(1)\nconst examAnswerRelationType = ref(props.examAnswerRelationType)\nconst answers = ref<{\n title: string\n isCorrect: boolean\n orderIndex?: number\n resultItem?: string\n customAnswerId?: string\n answerRelations?: {\n relationExamId: number\n relationAnswers: {\n relationAnswerId: number\n relationAnswerIndex: number\n }[]\n }[]\n}[]>([{\n title: '',\n isCorrect: false,\n}, {\n title: '',\n isCorrect: false,\n}, {\n title: '',\n isCorrect: false,\n}, {\n title: '',\n isCorrect: false,\n}])\n\nconst leastAnswerCount = ref(2)\nconst title = ref('')\nconst analysis = ref('')\nconst showRichText = ref(false)\nconst richText = ref('')\nconst startTime = ref(0)\nconst showRichContent = ref(false)\nconst resultItem = ref<string>('')\nconst titlePlaceholder = computed(() => {\n if (props.type === 'single') {\n return '单选题'\n }\n else if (props.type === 'multiple') {\n return '多选题'\n }\n else {\n return '排序题'\n }\n})\n\nconst orderList = ref<string[]>([])\n\nconst leastAnswerOptions = computed(() => {\n const items = []\n const length = answers.value.length\n for (let count = length; count > 1; count--) {\n items.push({\n label: `至少选择${count}项`,\n value: count,\n })\n }\n return items.reverse()\n})\nfunction addAnswer() {\n if (props.isSave) {\n return\n }\n answers.value.push({\n title: '',\n isCorrect: false,\n customAnswerId: setGuid(),\n })\n}\n\nfunction deleteAnswer(index: number) {\n if (answers.value.length < 3 || props.isSave) {\n return\n }\n answers.value.splice(index, 1)\n}\n\nfunction setCorrect(it: any, event: any) {\n if (props.type === 'single') {\n // 单选题:确保只有一个支持选项\n if (event) {\n answers.value.forEach((answer: any) => {\n if (answer !== it) {\n answer.isCorrect = false\n }\n })\n }\n it.isCorrect = event\n }\n else if (props.type === 'multiple') {\n // 多选题:可以有多个支持选项\n it.isCorrect = event\n }\n}\nfunction setRelation(item: any) {\n item.customAnswerId = item.examAnswerId || setGuid()\n emits('setRelation', props.customId, item)\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 (!answerCheckType.value) {\n ElMessage.error('请选择答题设置')\n return\n }\n let msg = ''\n let isSetCorrectAnswer = false\n let correctAnswerCount = 0\n if (props.type === 'multiple' || props.type === 'single') {\n answers.value.forEach((v: any, i: number) => {\n if (!v.title?.trim()) {\n msg += `选项${String.fromCharCode(65 + i)}未填写。`\n }\n if (v.isCorrect) {\n isSetCorrectAnswer = true\n correctAnswerCount++\n }\n v.relationType = v.resultItem ? 1 : (v.answerRelations?.length ? 2 : null)\n })\n }\n else if (props.type === 'sort') {\n // 如果设置了支持选项\n if (orderList.value.length) {\n isSetCorrectAnswer = true\n }\n }\n if (msg) {\n ElMessage.error(msg)\n return\n }\n\n const uniqueAnswer = new Set(answers.value.map((item: any) => item.title))\n\n if (uniqueAnswer.size !== answers.value.length) {\n ElMessage.error('选项不能重复')\n return\n }\n\n if (props.type === 'multiple') {\n if (correctAnswerCount === 1) {\n ElMessage.error('请至少设置两个支持选项')\n return\n }\n\n if (isSetCorrectAnswer && correctAnswerCount < leastAnswerCount.value) {\n ElMessage.error('至少选几项与支持选项数不符')\n return\n }\n }\n\n if (answerCheckType.value === 2 || answerCheckType.value === 3) {\n // 必须有设置支持选项\n if (!isSetCorrectAnswer) {\n ElMessage.error('请设置支持选项')\n return\n }\n }\n\n emits('save', {\n title: title.value,\n answers: answers.value.map((item: any, index: number) => {\n return { ...item, orderIndex: index + 1 }\n }),\n examExpand: orderList.value.map((i: string) => i.charCodeAt(0) - 65 + 1).join(','),\n analysis: analysis.value,\n isSetCorrectAnswer,\n leastAnswerCount: leastAnswerCount.value,\n examRichTextContent: showRichText.value ? richText.value : '',\n examAnswerRelationType: examAnswerRelationType.value,\n isKey: isKey.value,\n answerCheckType: answerCheckType.value,\n })\n}\n\nfunction init() {\n if (props.title) {\n title.value = props.title\n }\n\n if (props.answerCheckType) {\n answerCheckType.value = props.answerCheckType\n }\n\n if (props.isKey) {\n isKey.value = props.isKey\n }\n\n if (props.examAnswerRelationType) {\n examAnswerRelationType.value = props.examAnswerRelationType\n }\n\n if (props.answerList && props.answerList.length) {\n answers.value = props.answerList\n }\n\n if (props.leastAnswerCount) {\n leastAnswerCount.value = props.leastAnswerCount\n }\n\n if (props.examExpand) {\n // 设置支持选项 props.examExpand里是答案id\n if (props.examExpand) {\n const correctAnswerIdList = props.examExpand.split(',')\n\n // 遍历 correctAnswerIdList,直接在 props.answerList 中查找对应的 orderIndex 并转换成字母\n orderList.value = correctAnswerIdList.map((id: string) => {\n const answer = props.answerList.find((item: any) => item.answerId?.toString() === id)\n return answer ? String.fromCharCode(65 + answer.orderIndex - 1) : id\n }).filter(Boolean) // 过滤掉任何可能的空字符串\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}\nfunction onOpenResult(i: number) {\n answersIndex.value = i\n resultItem.value = answers.value[i].resultItem || ''\n showRichContent.value = true\n}\n\nfunction onSaveResult() {\n answers.value[answersIndex.value].resultItem = resultItem.value || ''\n showRichContent.value = false\n}\nfunction onCloseResult() {\n showRichContent.value = false\n resultItem.value = ''\n}\nfunction setKey(key: boolean) {\n isKey.value = key\n}\nfunction setAnswerSetting(type: number) {\n answerCheckType.value = type\n}\n\nfunction add(type: string, canSet: boolean) {\n emits('add', type, canSet ? props.examAnswerRelationType : null)\n}\n// 监听isEdit\nwatch(() => props.isEdit, () => {\n if (props.isEdit) {\n startTime.value = new Date().getTime()\n }\n})\n\nconst relationLength = computed(() => {\n return (v: any) => {\n let count = 0\n v.forEach((item: any) => {\n if (item.relationAnswers) {\n count += item.relationAnswers.length\n }\n })\n return count\n }\n})\n\nconst ns = useNamespace('subject-single')\n\nonMounted(init)\n</script>\n\n<template>\n <div :class=\"ns.e('single-exam')\">\n <SubjectLayout\n :show-edit=\"isEdit\"\n >\n <template #preview>\n <div class=\"preview\">\n <div>\n <span class=\"title\">\n {{ orderIndex + 1 }}.{{ title }}\n <span v-if=\"type === 'single'\">(单选题)</span>\n <span v-else-if=\"['multiple', 'sort'].includes(type)\">\n ({{ titlePlaceholder }}{{ leastAnswerCount ? `至少选${leastAnswerCount}项${type === 'sort' ? '并排序' : ''}` : '' }})\n </span>\n </span>\n </div>\n <div v-if=\"showRichText\">\n <div\n class=\"rich-text\"\n v-html=\"richText\"\n />\n </div>\n <div class=\"preview-answer\">\n <template v-if=\"type === 'sort'\">\n <el-checkbox\n v-for=\"(item, index) in answers\"\n :key=\"index\"\n class=\"radio\"\n :disabled=\"true\"\n >\n <span class=\"order\">\n {{ String.fromCharCode(65 + index) }}.\n </span>\n {{ item.title }}\n </el-checkbox>\n </template>\n <template v-else>\n <el-radio\n v-for=\"(item, index) in answers\"\n :key=\"index\"\n class=\"radio\"\n value=\"disabled\"\n disabled\n >\n <span class=\"order\">\n {{ String.fromCharCode(65 + index) }}.\n </span>\n {{ item.title }}\n {{ item.isCorrect ? '(支持选项)' : '' }}\n {{ examAnswerRelationType === 1 ? (item.resultItem ? '(已设置结果项)' : '(未设置结果项)') : '' }}\n {{ examAnswerRelationType === 2 ? (item.answerRelations?.length ? '(已设置关联)' : '(未设置关联)') : '' }}\n </el-radio>\n </template>\n </div>\n </div>\n </template>\n <template\n v-if=\"isEdit\"\n #edit\n >\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=\"`【${titlePlaceholder}】请输入问题`\"\n :disabled=\"isSave\"\n show-word-limit\n maxlength=\"200\"\n class=\"margin-bottom\"\n />\n </div>\n </div>\n <div class=\"margin-bottom flex flex-items-center\">\n <div class=\"label flex flex-justify-center\">\n <span>设置:</span>\n </div>\n <el-select\n v-if=\"['multiple', 'sort'].includes(type)\"\n v-model=\"leastAnswerCount\"\n style=\"width: 150px;\"\n placeholder=\"至少选择几项\"\n :disabled=\"isSave\"\n >\n <el-option\n v-for=\"item in leastAnswerOptions\"\n :key=\"item.value\"\n :value=\"item.value\"\n :label=\"item.label\"\n />\n </el-select>\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 <span class=\"label flex flex-justify-center\">{{ String.fromCharCode(65 + index) }}.</span>\n <el-input\n v-model=\"item.title\"\n class=\"input\"\n show-word-limit\n maxlength=\"100\"\n :placeholder=\"`选项${String.fromCharCode(65 + index)}`\"\n :disabled=\"isSave\"\n />\n <el-checkbox\n v-if=\"['single', 'multiple'].includes(type)\"\n v-model=\"item.isCorrect\"\n :class=\"[{ 'is-correct': item.isCorrect }]\"\n :disabled=\"isSave\"\n style=\"margin-left: 10px;\"\n @change=\"(event: any) => setCorrect(item, event)\"\n >\n 支持选项\n </el-checkbox>\n <el-icon class=\"icon\">\n <CirclePlus\n :class=\"[{ disabled: isSave }]\"\n @click=\"addAnswer\"\n />\n </el-icon>\n <el-icon class=\"icon\">\n <Remove\n :class=\"[{ disabled: answers.length < 3 || isSave }]\"\n @click=\"deleteAnswer(index)\"\n />\n </el-icon>\n <el-link\n v-if=\"examAnswerRelationType === 1 && type !== 'sort'\"\n type=\"primary\"\n class=\"margin-left-10\"\n @click=\"onOpenResult(index)\"\n >\n <span>{{ item.resultItem ? '编辑结果' : '添加结果' }}</span>\n </el-link>\n <el-link\n v-if=\"examAnswerRelationType === 2 && type !== 'sort'\"\n type=\"primary\"\n class=\"margin-left-10\"\n @click=\"setRelation(item)\"\n >\n <span>{{ item.answerRelations?.length ? `关联了${relationLength(item.answerRelations)}项` : '关联检查' }}</span>\n </el-link>\n </div>\n </div>\n <div\n v-if=\"type === 'sort'\"\n class=\"margin-bottom flex flex-items-center\"\n >\n <div class=\"label flex flex-justify-end\">\n <span>排序答案:</span>\n </div>\n <div style=\"flex: 1;\">\n <el-select\n v-model=\"orderList\"\n multiple\n style=\"width: 360px;\"\n placeholder=\"请按顺序选择排序答案\"\n :show-arrow=\"true\"\n >\n <el-option\n v-for=\"(item, index) in answers\"\n :key=\"index\"\n :label=\"item.title\"\n :value=\"String.fromCharCode(65 + index)\"\n />\n </el-select>\n </div>\n </div>\n <div\n v-if=\"showAnalysis\"\n class=\"flex\"\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 :is-key=\"isKey\"\n :show-other-option=\"props.type === 'multiple' || props.type === 'single'\"\n :exam-answer-relation-type=\"props.examAnswerRelationType\"\n :answer-check-type=\"answerCheckType\"\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=\"add\"\n @on-show-rich-text=\"showRichText = true\"\n @set-key=\"setKey\"\n @set-answer-setting=\"setAnswerSetting\"\n />\n </SubjectLayout>\n <el-dialog\n v-model=\"showRichContent\"\n title=\"添加结果\"\n class=\"customize-dialog\"\n >\n <TinyMceEditor\n :key=\"answersIndex\"\n v-model:model-value=\"resultItem\"\n v-bind=\"attrs\"\n style=\"width: 100%;\"\n />\n <template #footer>\n <el-button\n class=\"customize-button\"\n type=\"primary\"\n plain\n @click=\"onCloseResult\"\n >\n 取消\n </el-button>\n <el-button\n class=\"customize-button\"\n type=\"primary\"\n plain\n @click=\"onSaveResult\"\n >\n 保存\n </el-button>\n </template>\n </el-dialog>\n </div>\n</template>\n"],"names":["props","__props","emits","__emit","attrs","useAttrs","answersIndex","ref","isKey","answerCheckType","examAnswerRelationType","answers","title","isCorrect","leastAnswerCount","analysis","showRichText","richText","startTime","showRichContent","resultItem","titlePlaceholder","computed","type","orderList","leastAnswerOptions","items","count","value","length","push","label","reverse","addAnswer","isSave","customAnswerId","setGuid","deleteRichText","save","ElMessage","error","msg","isSetCorrectAnswer","correctAnswerCount","forEach","v","i","trim","String","fromCharCode","relationType","answerRelations","Set","map","item","size","index","orderIndex","examExpand","charCodeAt","join","examRichTextContent","onSaveResult","onCloseResult","setKey","key","setAnswerSetting","add","canSet","watch","isEdit","Date","getTime","relationLength","relationAnswers","ns","useNamespace","onMounted","answerList","correctAnswerIdList","split","id","answer","find","answerId","toString","filter","Boolean","_createElementBlock","class","_normalizeClass","_unref","e","_createVNode","SubjectLayout","_createSlots","preview","_createElementVNode","_hoisted_1","_hoisted_2","_toDisplayString","_openBlock","includes","_hoisted_4","_hoisted_5","innerHTML","_hoisted_7","_Fragment","_renderList","_createBlock","_component_el_checkbox","disabled","_hoisted_8","_component_el_radio","_hoisted_9","showAction","SubjectAction","isSet","onMoveUp","onMoveDown","onDelete","onSave","onEdit","onAdd","onOnShowRichText","onSetKey","onSetAnswerSetting","_hoisted_10","_component_el_input","$event","rows","placeholder","maxlength","_hoisted_11","_component_el_select","style","width","_component_el_option","_hoisted_12","_hoisted_13","modelValue","onChange","event","it","setCorrect","_cache","_component_el_icon","CirclePlus","onClick","Remove","splice","deleteAnswer","_component_el_link","onOpenResult","examAnswerId","customId","setRelation","_hoisted_14","_hoisted_15","multiple","showAnalysis","_hoisted_16","_hoisted_17","_hoisted_18","_hoisted_19","TinyMceEditor","_mergeProps","_hoisted_20","_component_el_dialog","footer","_component_el_button","plain"],"mappings":"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"}
1
+ {"version":3,"file":"subject-single.vue.mjs","sources":["../../../../../../../packages/components/src/subject-list/src/components/subject-single.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { CirclePlus, Remove } from '@element-plus/icons-vue'\nimport { useNamespace } from '@qxs-bns/hooks'\nimport { setGuid } from '@qxs-bns/utils'\nimport { ElMessage } from 'element-plus'\nimport { computed, onMounted, ref, useAttrs, watch } from 'vue'\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: 'QxsSubjectSingle',\n})\nconst props = defineProps<{\n orderIndex: number\n title?: string\n isSave: boolean\n showAction?: boolean\n type: 'single' | 'multiple' | 'sort'\n isEdit: boolean\n isSet: boolean\n answerList?: any\n leastAnswerCount?: number\n analysis?: string\n examExpand?: string\n examRichTextContent?: string\n showAnalysis?: boolean\n examAnswerRelationType?: number\n customId?: number\n examId?: number\n isKey: boolean\n answerCheckType: number\n}>()\nconst emits = defineEmits(['move', 'save', 'delete', 'edit', 'add', 'setRelation'])\n\nconst attrs = useAttrs()\n\nconst answersIndex = ref(0)\nconst isKey = ref(props.isKey)\nconst answerCheckType = ref(1)\nconst examAnswerRelationType = ref(props.examAnswerRelationType)\nconst answers = ref<{\n title: string\n isCorrect: boolean\n orderIndex?: number\n resultItem?: string\n customAnswerId?: string\n answerRelations?: {\n relationExamId: number\n relationAnswers: {\n relationAnswerId: number\n relationAnswerIndex: number\n }[]\n }[]\n}[]>([{\n title: '',\n isCorrect: false,\n}, {\n title: '',\n isCorrect: false,\n}, {\n title: '',\n isCorrect: false,\n}, {\n title: '',\n isCorrect: false,\n}])\n\nconst leastAnswerCount = ref(2)\nconst title = ref('')\nconst analysis = ref('')\nconst showRichText = ref(false)\nconst richText = ref('')\nconst startTime = ref(0)\nconst showRichContent = ref(false)\nconst resultItem = ref<string>('')\nconst titlePlaceholder = computed(() => {\n if (props.type === 'single') {\n return '单选题'\n }\n else if (props.type === 'multiple') {\n return '多选题'\n }\n else {\n return '排序题'\n }\n})\n\nconst orderList = ref<string[]>([])\n\nconst leastAnswerOptions = computed(() => {\n const items = []\n const length = answers.value.length\n for (let count = length; count > 1; count--) {\n items.push({\n label: `至少选择${count}项`,\n value: count,\n })\n }\n return items.reverse()\n})\nfunction addAnswer() {\n if (props.isSave) {\n return\n }\n answers.value.push({\n title: '',\n isCorrect: false,\n customAnswerId: setGuid(),\n })\n}\n\nfunction deleteAnswer(index: number) {\n if (answers.value.length < 3 || props.isSave) {\n return\n }\n answers.value.splice(index, 1)\n}\n\nfunction setCorrect(it: any, event: any) {\n if (props.type === 'single') {\n // 单选题:确保只有一个支持选项\n if (event) {\n answers.value.forEach((answer: any) => {\n if (answer !== it) {\n answer.isCorrect = false\n }\n })\n }\n it.isCorrect = event\n }\n else if (props.type === 'multiple') {\n // 多选题:可以有多个支持选项\n it.isCorrect = event\n }\n}\nfunction setRelation(item: any) {\n item.customAnswerId = item.examAnswerId || setGuid()\n emits('setRelation', props.customId, item)\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 (!answerCheckType.value) {\n ElMessage.error('请选择答题设置')\n return\n }\n let msg = ''\n let isSetCorrectAnswer = false\n let correctAnswerCount = 0\n if (props.type === 'multiple' || props.type === 'single') {\n answers.value.forEach((v: any, i: number) => {\n if (!v.title?.trim()) {\n msg += `选项${String.fromCharCode(65 + i)}未填写。`\n }\n if (v.isCorrect) {\n isSetCorrectAnswer = true\n correctAnswerCount++\n }\n v.relationType = v.resultItem ? 1 : (v.answerRelations?.length ? 2 : null)\n })\n }\n else if (props.type === 'sort') {\n // 如果设置了支持选项\n if (orderList.value.length) {\n isSetCorrectAnswer = true\n }\n }\n if (msg) {\n ElMessage.error(msg)\n return\n }\n\n const uniqueAnswer = new Set(answers.value.map((item: any) => item.title))\n\n if (uniqueAnswer.size !== answers.value.length) {\n ElMessage.error('选项不能重复')\n return\n }\n\n if (props.type === 'multiple') {\n if (correctAnswerCount === 1) {\n ElMessage.error('请至少设置两个支持选项')\n return\n }\n\n if (isSetCorrectAnswer && correctAnswerCount < leastAnswerCount.value) {\n ElMessage.error('至少选几项与支持选项数不符')\n return\n }\n }\n\n if (answerCheckType.value === 2 || answerCheckType.value === 3) {\n // 必须有设置支持选项\n if (!isSetCorrectAnswer) {\n ElMessage.error('请设置支持选项')\n return\n }\n }\n\n emits('save', {\n title: title.value,\n answers: answers.value.map((item: any, index: number) => {\n return { ...item, orderIndex: index + 1 }\n }),\n examExpand: orderList.value.map((i: string) => i.charCodeAt(0) - 65 + 1).join(','),\n analysis: analysis.value,\n isSetCorrectAnswer,\n leastAnswerCount: leastAnswerCount.value,\n examRichTextContent: showRichText.value ? richText.value : '',\n examAnswerRelationType: examAnswerRelationType.value,\n isKey: isKey.value,\n answerCheckType: answerCheckType.value,\n })\n}\n\nfunction init() {\n if (props.title) {\n title.value = props.title\n }\n\n if (props.answerCheckType) {\n answerCheckType.value = props.answerCheckType\n }\n\n if (props.isKey) {\n isKey.value = props.isKey\n }\n\n if (props.examAnswerRelationType) {\n examAnswerRelationType.value = props.examAnswerRelationType\n }\n\n if (props.answerList && props.answerList.length) {\n answers.value = props.answerList\n }\n\n if (props.leastAnswerCount) {\n leastAnswerCount.value = props.leastAnswerCount\n }\n\n if (props.examExpand) {\n // 设置支持选项 props.examExpand里是答案id\n if (props.examExpand) {\n const correctAnswerIdList = props.examExpand.split(',')\n\n // 遍历 correctAnswerIdList,直接在 props.answerList 中查找对应的 orderIndex 并转换成字母\n orderList.value = correctAnswerIdList.map((id: string) => {\n const answer = props.answerList.find((item: any) => item.answerId?.toString() === id)\n return answer ? String.fromCharCode(65 + answer.orderIndex - 1) : id\n }).filter(Boolean) // 过滤掉任何可能的空字符串\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}\nfunction onOpenResult(i: number) {\n answersIndex.value = i\n resultItem.value = answers.value[i].resultItem || ''\n showRichContent.value = true\n}\n\nfunction onSaveResult() {\n answers.value[answersIndex.value].resultItem = resultItem.value || ''\n showRichContent.value = false\n}\nfunction onCloseResult() {\n showRichContent.value = false\n resultItem.value = ''\n}\nfunction setKey(key: boolean) {\n isKey.value = key\n}\nfunction setAnswerSetting(type: number) {\n answerCheckType.value = type\n}\n\nfunction add(type: string, canSet: boolean) {\n emits('add', type, canSet ? props.examAnswerRelationType : null)\n}\n// 监听isEdit\nwatch(() => props.isEdit, () => {\n if (props.isEdit) {\n startTime.value = new Date().getTime()\n }\n})\n\nconst relationLength = computed(() => {\n return (v: any) => {\n let count = 0\n v.forEach((item: any) => {\n if (item.relationAnswers) {\n count += item.relationAnswers.length\n }\n })\n return count\n }\n})\n\nconst ns = useNamespace('subject-single')\n\nonMounted(init)\n</script>\n\n<template>\n <div :class=\"ns.e('single-exam')\">\n <SubjectLayout\n :show-edit=\"isEdit\"\n >\n <template #preview>\n <div class=\"preview\">\n <div>\n <span class=\"title\">\n {{ orderIndex + 1 }}.{{ title }}\n <span v-if=\"type === 'single'\">(单选题)</span>\n <span v-else-if=\"['multiple', 'sort'].includes(type)\">\n ({{ titlePlaceholder }}{{ leastAnswerCount ? `至少选${leastAnswerCount}项${type === 'sort' ? '并排序' : ''}` : '' }})\n </span>\n </span>\n </div>\n <div v-if=\"showRichText\">\n <div\n class=\"rich-text\"\n v-html=\"richText\"\n />\n </div>\n <div class=\"preview-answer\">\n <template v-if=\"type === 'sort'\">\n <el-checkbox\n v-for=\"(item, index) in answers\"\n :key=\"index\"\n class=\"radio\"\n :disabled=\"true\"\n >\n <span class=\"order\">\n {{ String.fromCharCode(65 + index) }}.\n </span>\n {{ item.title }}\n </el-checkbox>\n </template>\n <template v-else>\n <el-radio\n v-for=\"(item, index) in answers\"\n :key=\"index\"\n class=\"radio\"\n value=\"disabled\"\n disabled\n >\n <span class=\"order\">\n {{ String.fromCharCode(65 + index) }}.\n </span>\n {{ item.title }}\n {{ item.isCorrect ? '(支持选项)' : '' }}\n {{ examAnswerRelationType === 1 ? (item.resultItem ? '(已设置结果项)' : '(未设置结果项)') : '' }}\n {{ examAnswerRelationType === 2 ? (item.answerRelations?.length ? '(已设置关联)' : '(未设置关联)') : '' }}\n </el-radio>\n </template>\n </div>\n </div>\n </template>\n <template\n v-if=\"isEdit\"\n #edit\n >\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=\"`【${titlePlaceholder}】请输入问题`\"\n :disabled=\"isSave\"\n show-word-limit\n maxlength=\"200\"\n class=\"margin-bottom\"\n />\n </div>\n </div>\n <div class=\"margin-bottom flex flex-items-center\">\n <div class=\"label flex flex-justify-center\">\n <span>设置:</span>\n </div>\n <el-select\n v-if=\"['multiple', 'sort'].includes(type)\"\n v-model=\"leastAnswerCount\"\n style=\"width: 150px;\"\n placeholder=\"至少选择几项\"\n :disabled=\"isSave\"\n >\n <el-option\n v-for=\"item in leastAnswerOptions\"\n :key=\"item.value\"\n :value=\"item.value\"\n :label=\"item.label\"\n />\n </el-select>\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 <span class=\"label flex flex-justify-center\">{{ String.fromCharCode(65 + index) }}.</span>\n <el-input\n v-model=\"item.title\"\n class=\"input\"\n show-word-limit\n maxlength=\"100\"\n :placeholder=\"`选项${String.fromCharCode(65 + index)}`\"\n :disabled=\"isSave\"\n />\n <el-checkbox\n v-if=\"['single', 'multiple'].includes(type)\"\n v-model=\"item.isCorrect\"\n :class=\"[{ 'is-correct': item.isCorrect }]\"\n :disabled=\"isSave\"\n style=\"margin-left: 10px;\"\n @change=\"(event: any) => setCorrect(item, event)\"\n >\n 支持选项\n </el-checkbox>\n <el-icon class=\"icon\">\n <CirclePlus\n :class=\"[{ disabled: isSave }]\"\n @click=\"addAnswer\"\n />\n </el-icon>\n <el-icon class=\"icon\">\n <Remove\n :class=\"[{ disabled: answers.length < 3 || isSave }]\"\n @click=\"deleteAnswer(index)\"\n />\n </el-icon>\n <el-link\n v-if=\"examAnswerRelationType === 1 && type !== 'sort'\"\n type=\"primary\"\n class=\"margin-left-10\"\n @click=\"onOpenResult(index)\"\n >\n <span>{{ item.resultItem ? '编辑结果' : '添加结果' }}</span>\n </el-link>\n <el-link\n v-if=\"examAnswerRelationType === 2 && type !== 'sort'\"\n type=\"primary\"\n class=\"margin-left-10\"\n @click=\"setRelation(item)\"\n >\n <span>{{ item.answerRelations?.length ? `关联了${relationLength(item.answerRelations)}项` : '关联检查' }}</span>\n </el-link>\n </div>\n </div>\n <div\n v-if=\"type === 'sort'\"\n class=\"margin-bottom flex flex-items-center\"\n >\n <div class=\"label flex flex-justify-end\">\n <span>排序答案:</span>\n </div>\n <div style=\"flex: 1;\">\n <el-select\n v-model=\"orderList\"\n multiple\n style=\"width: 360px;\"\n placeholder=\"请按顺序选择排序答案\"\n :show-arrow=\"true\"\n >\n <el-option\n v-for=\"(item, index) in answers\"\n :key=\"index\"\n :label=\"item.title\"\n :value=\"String.fromCharCode(65 + index)\"\n />\n </el-select>\n </div>\n </div>\n <div\n v-if=\"showAnalysis\"\n class=\"flex\"\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 :is-key=\"isKey\"\n :show-other-option=\"props.type === 'multiple' || props.type === 'single'\"\n :exam-answer-relation-type=\"props.examAnswerRelationType\"\n :answer-check-type=\"answerCheckType\"\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=\"add\"\n @on-show-rich-text=\"showRichText = true\"\n @set-key=\"setKey\"\n @set-answer-setting=\"setAnswerSetting\"\n />\n </SubjectLayout>\n <el-dialog\n v-model=\"showRichContent\"\n title=\"添加结果\"\n class=\"customize-dialog\"\n >\n <TinyMceEditor\n :key=\"answersIndex\"\n v-model:model-value=\"resultItem\"\n v-bind=\"attrs\"\n style=\"width: 100%;\"\n />\n <template #footer>\n <el-button\n class=\"customize-button\"\n type=\"primary\"\n plain\n @click=\"onCloseResult\"\n >\n 取消\n </el-button>\n <el-button\n class=\"customize-button\"\n type=\"primary\"\n plain\n @click=\"onSaveResult\"\n >\n 保存\n </el-button>\n </template>\n </el-dialog>\n </div>\n</template>\n"],"names":["props","__props","emits","__emit","attrs","useAttrs","answersIndex","ref","isKey","answerCheckType","examAnswerRelationType","answers","title","isCorrect","leastAnswerCount","analysis","showRichText","richText","startTime","showRichContent","resultItem","titlePlaceholder","computed","type","orderList","leastAnswerOptions","items","count","value","length","push","label","reverse","addAnswer","isSave","customAnswerId","setGuid","deleteRichText","save","ElMessage","error","msg","isSetCorrectAnswer","correctAnswerCount","forEach","v","i","trim","String","fromCharCode","relationType","answerRelations","Set","map","item","size","index","orderIndex","examExpand","charCodeAt","join","examRichTextContent","onSaveResult","onCloseResult","setKey","key","setAnswerSetting","add","canSet","watch","isEdit","Date","getTime","relationLength","relationAnswers","ns","useNamespace","onMounted","answerList","correctAnswerIdList","split","id","answer","find","answerId","toString","filter","Boolean","_createElementBlock","class","_normalizeClass","_unref","e","_createVNode","SubjectLayout","_createSlots","preview","_createElementVNode","_hoisted_1","_hoisted_2","_toDisplayString","_openBlock","includes","_hoisted_4","_hoisted_5","innerHTML","_hoisted_7","_Fragment","_renderList","_createBlock","_component_el_checkbox","disabled","_hoisted_8","_component_el_radio","_hoisted_9","showAction","SubjectAction","isSet","onMoveUp","onMoveDown","onDelete","onSave","onEdit","onAdd","onOnShowRichText","onSetKey","onSetAnswerSetting","_hoisted_10","_component_el_input","$event","rows","placeholder","maxlength","_hoisted_11","_component_el_select","style","width","_component_el_option","_hoisted_12","_hoisted_13","modelValue","onChange","event","it","setCorrect","_cache","_component_el_icon","CirclePlus","onClick","Remove","splice","deleteAnswer","_component_el_link","onOpenResult","examAnswerId","customId","setRelation","_hoisted_14","_hoisted_15","multiple","showAnalysis","_hoisted_16","_hoisted_17","_hoisted_18","_hoisted_19","TinyMceEditor","_mergeProps","_hoisted_20","_component_el_dialog","footer","_component_el_button","plain"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{ElInput as e,ElInputNumber as l,ElCheckboxGroup as t,ElCheckbox as s,ElTag as n,ElButton as i,ElIcon as a,ElLink as o}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/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/input-number/style/index";import"element-plus/es/components/input/style/index";import"element-plus/es/components/checkbox/style/index";import{defineComponent as u,useAttrs as r,ref as d,onMounted as m,createElementBlock as p,openBlock as c,normalizeClass as v,unref as x,createVNode as f,withCtx as y,createBlock as w,createCommentVNode as g,createElementVNode as h,isRef as b,Fragment as k,renderList as V,createTextVNode as C,toDisplayString as S,mergeProps as j}from"vue";import{Plus as I,CirclePlus as O,Remove as A}from"@element-plus/icons-vue";import{useNamespace as q}from"@qxs-bns/hooks";import{ElMessage as _}from"element-plus";import E from"../../../subject-action/src/subject-action.vue.mjs";import T from"../../../subject-layout/src/subject-layout.vue.mjs";import U from"../../../tiny-mce-editor/src/tiny-mce-editor.vue.mjs";const B={class:"preview"},R={class:"content"},L={class:"title"},M={key:0},D=["innerHTML"],H={class:"content flex flex-col"},N={key:1,class:"flex",style:{"margin-top":"10px",color:"#a8abb2"}},z={class:"title"},$={class:"flex"},F={style:{flex:"1"},class:"margin-bottom"},G={class:"margin-bottom flex flex-items-center"},J={class:"flex"},K={style:{flex:"1"}},P={class:"margin-bottom answer-list"},Q={class:"label flex flex-justify-end"},W={class:"answer-tags"},X={class:"operation"},Y={key:0,class:"margin-bottom flex"},Z={style:{flex:"1"}},ee={key:1,class:"margin-bottom flex"},le={style:{flex:"1"}},te={class:"flex flex-justify-end"};var se=u({__name:"subject-text-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},examExpand:{type:String,required:!1},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(u,{emit:se}){const ne=u,ie=se,ae=r(),oe=d([{title:"",tag:"",showInput:!1}]),ue=d(""),re=d(""),de=d(),me=d(""),pe=d(!1),ce=d(""),ve=[{label:"答案不分顺序",value:"isInOrder"},{label:"忽略大小写",value:"isIgnoreCase"}],xe=d(["isInOrder","isIgnoreCase"]);function fe(){oe.value.push({title:"",tag:"",showInput:!1})}function ye(){pe.value=!1,ce.value=""}function we(){if(ue.value){if(de.value||me.value){if(!de.value)return void _.error("请完善答题设置!");if(!me.value)return void _.error("请输入问题正确答案!");if(oe.value.length!==de.value)return void _.error("关键词个数设置有误!");const e=[];if(oe.value.forEach((l,t)=>{l.title||e.push(`关键词${t+1}未设置`)}),e.length>0)return void _.error(e.join(","))}ie("save",{title:ue.value,answers:oe.value.filter(e=>e.title).map(e=>({title:e.title})),analysis:re.value,isSetCorrectAnswer:!!me.value,examExpand:me.value,examAnswerSettingBO:{isIgnoreCase:xe.value?.includes("isIgnoreCase"),isInOrder:xe.value?.includes("isInOrder"),keywordCount:de.value},examRichTextContent:pe.value?ce.value:""})}else _.error("题目标题不能为空!")}m(function(){ne.title&&(ue.value=ne.title),ne.answerList&&ne.answerList.length&&(oe.value=ne.answerList),ne.examAnswerSettingVO&&(xe.value=xe.value.filter(e=>"isIgnoreCase"===e&&ne.examAnswerSettingVO?.isIgnoreCase||"isInOrder"===e&&ne.examAnswerSettingVO?.isInOrder)),ne.examAnswerSettingVO?.keywordCount&&(de.value=ne.examAnswerSettingVO?.keywordCount),ne.examExpand&&(me.value=ne.examExpand),ne.analysis&&(re.value=ne.analysis),ne.examRichTextContent&&(ce.value=ne.examRichTextContent,pe.value=!0)});const ge=q("subject-text-fill");return(u,r)=>{const d=s,m=e,q=l,_=t,se=n,he=a,be=i,ke=o;return c(),p("div",{class:v(x(ge).e("text-fill-exam"))},[f(T,{"show-edit":u.isEdit},{preview:y(()=>[h("div",B,[h("div",R,[h("span",L,S(u.orderIndex+1)+"."+S(x(ue))+"(问答题)",1),x(pe)?(c(),p("div",M,[h("div",{class:"rich-text",innerHTML:x(ce)},null,8,D)])):g("v-if",!0),h("div",H,[x(oe).some(e=>e.title)?(c(!0),p(k,{key:0},V(x(oe),(e,l)=>(c(),w(d,{key:l,class:"radio",disabled:!0},{default:y(()=>[C(S(e.title),1)]),_:2},1024))),128)):g("v-if",!0)]),x(me)?(c(),p("div",N,[h("span",z,"正确答案:"+S(x(me)),1)])):g("v-if",!0)])])]),edit:y(()=>[h("div",$,[r[12]||(r[12]=h("div",{class:"label flex flex-justify-end"},[h("span",null,"题目:")],-1)),h("div",F,[f(m,{modelValue:x(ue),"onUpdate:modelValue":r[0]||(r[0]=e=>b(ue)?ue.value=e:null),type:"textarea",rows:2,placeholder:"【问答题】请输入问题",maxlength:200,"show-word-limit":"",disabled:u.isSave},null,8,["modelValue","disabled"])])]),h("div",G,[r[13]||(r[13]=h("div",{class:"label flex flex-justify-end"},[h("span",null,"答题设置:")],-1)),r[14]||(r[14]=h("span",null,"共答对",-1)),f(q,{modelValue:x(de),"onUpdate:modelValue":r[1]||(r[1]=e=>b(de)?de.value=e:null),style:{width:"100px",margin:"0 10px"},min:1},null,8,["modelValue"]),r[15]||(r[15]=h("span",{style:{"margin-right":"10px"}},"个关键词,算是正确的",-1)),(c(),p(k,null,V(ve,e=>f(_,{key:e.value,modelValue:x(xe),"onUpdate:modelValue":r[2]||(r[2]=e=>b(xe)?xe.value=e:null)},{default:y(()=>[f(d,{label:e.value,class:"margin-left-10"},{default:y(()=>[C(S(e.label),1)]),_:2},1032,["label"])]),_:2},1032,["modelValue"])),64))]),h("div",J,[r[16]||(r[16]=h("div",{class:"label flex flex-justify-end"},[h("span",null,"答案:")],-1)),h("div",K,[f(m,{modelValue:x(me),"onUpdate:modelValue":r[3]||(r[3]=e=>b(me)?me.value=e:null),type:"textarea",rows:2,placeholder:"请输入正确答案",maxlength:200,"show-word-limit":"",disabled:u.isSave},null,8,["modelValue","disabled"])])]),h("div",P,[r[17]||(r[17]=h("span",{style:{"padding-left":"60px"}},"*如遇包含特殊字符的关键词,需添加多个同义词,例:'CO₂'需添加同义词'CO2'",-1)),(c(!0),p(k,null,V(x(oe),(e,l)=>(c(),p("div",{key:l,class:"answer-item flex flex-items-center"},[h("div",Q,[h("span",null,"关键词"+S(l+1)+":",1)]),h("div",W,[(c(!0),p(k,null,V(e.title.split(","),l=>(c(),p(k,{key:l},[l?(c(),w(se,{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(S(l),1)]),_:2},1032,["onClose"])):g("v-if",!0)],64))),128)),u.isSave?g("v-if",!0):(c(),p(k,{key:0},[e.showInput?(c(),w(m,{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(),w(be,{key:1,size:"small",onClick:l=>e.showInput=!0},{default:y(()=>[f(he,null,{default:y(()=>[f(x(I))]),_:1}),h("span",null,S(e.title?"添加同义词":"添加关键词"),1)]),_:2},1032,["onClick"]))],64))]),h("div",X,[f(he,{class:"icon"},{default:y(()=>[f(x(O),{class:v([{disabled:u.isSave}]),onClick:fe},null,8,["class"])]),_:1}),f(he,{class:"icon"},{default:y(()=>[f(x(A),{class:v([{disabled:x(oe).length<2||u.isSave}]),onClick:e=>function(e){oe.value.length<2||ne.isSave||oe.value.splice(e,1)}(l)},null,8,["class","onClick"])]),_:2},1024)])]))),128))]),u.showAnalysis?(c(),p("div",Y,[r[18]||(r[18]=h("div",{class:"label flex flex-justify-end"},[h("span",null,"解析:")],-1)),h("div",Z,[f(m,{modelValue:x(re),"onUpdate:modelValue":r[4]||(r[4]=e=>b(re)?re.value=e:null),type:"textarea",rows:2,placeholder:"请输入题目解析"},null,8,["modelValue"])])])):g("v-if",!0),x(pe)?(c(),p("div",ee,[r[20]||(r[20]=h("div",{class:"label flex flex-justify-center"},[h("span",null,"富文本:")],-1)),h("div",le,[f(U,j({"model-value":x(ce),"onUpdate:modelValue":r[5]||(r[5]=e=>b(ce)?ce.value=e:null)},x(ae),{style:{width:"100%"}}),null,16,["model-value"]),h("div",te,[f(ke,{type:"danger",onClick:ye},{default:y(()=>r[19]||(r[19]=[C(" 删除富文本 ",-1)])),_:1,__:[19]})])])])):g("v-if",!0)]),default:y(()=>[u.showAction?(c(),w(E,{key:0,"is-edit":u.isEdit,"is-set":u.isSet,"show-other-option":!1,"exam-answer-relation-type":ne.examAnswerRelationType,onMoveUp:r[6]||(r[6]=e=>ie("move","up")),onMoveDown:r[7]||(r[7]=e=>ie("move","down")),onDelete:r[8]||(r[8]=e=>ie("delete")),onSave:we,onEdit:r[9]||(r[9]=e=>ie("edit")),onAdd:r[10]||(r[10]=e=>ie("add",e)),onOnShowRichText:r[11]||(r[11]=e=>pe.value=!0)},null,8,["is-edit","is-set","exam-answer-relation-type"])):g("v-if",!0)]),_:1},8,["show-edit"])],2)}}});export{se as default};
1
+ import{defineComponent as e,useAttrs as l,ref as t,onMounted as a,resolveComponent as i,createElementBlock as s,openBlock as n,normalizeClass as o,unref as u,createVNode as r,withCtx as d,createBlock as v,createCommentVNode as c,createElementVNode as m,Fragment as p,renderList as f,createTextVNode as x,toDisplayString as y,mergeProps as w}from"vue";import{Plus as g,CirclePlus as h,Remove as b}from"@element-plus/icons-vue";import{useNamespace as k}from"@qxs-bns/hooks";import{ElMessage as V}from"element-plus";import C from"../../../subject-action/src/subject-action.vue.mjs";import S from"../../../subject-layout/src/subject-layout.vue.mjs";import j from"../../../tiny-mce-editor/src/tiny-mce-editor.vue.mjs";const I={class:"preview"},O={class:"content"},A={class:"title"},q={key:0},_=["innerHTML"],E={class:"content flex flex-col"},T={key:1,class:"flex",style:{"margin-top":"10px",color:"#a8abb2"}},U={class:"title"},B={class:"flex"},R={style:{flex:"1"},class:"margin-bottom"},L={class:"margin-bottom flex flex-items-center"},M={class:"flex"},D={style:{flex:"1"}},H={class:"margin-bottom answer-list"},N={class:"label flex flex-justify-end"},z={class:"answer-tags"},$={class:"operation"},F={key:0,class:"margin-bottom flex"},G={style:{flex:"1"}},J={key:1,class:"margin-bottom flex"},K={style:{flex:"1"}},P={class:"flex flex-justify-end"};var Q=e({__name:"subject-text-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},examExpand:{type:String,required:!1},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(e,{emit:Q}){const W=e,X=Q,Y=l(),Z=t([{title:"",tag:"",showInput:!1}]),ee=t(""),le=t(""),te=t(),ae=t(""),ie=t(!1),se=t(""),ne=[{label:"答案不分顺序",value:"isInOrder"},{label:"忽略大小写",value:"isIgnoreCase"}],oe=t(["isInOrder","isIgnoreCase"]);function ue(){Z.value.push({title:"",tag:"",showInput:!1})}function re(){ie.value=!1,se.value=""}function de(){if(ee.value){if(te.value||ae.value){if(!te.value)return void V.error("请完善答题设置!");if(!ae.value)return void V.error("请输入问题正确答案!");if(Z.value.length!==te.value)return void V.error("关键词个数设置有误!");const e=[];if(Z.value.forEach((l,t)=>{l.title||e.push(`关键词${t+1}未设置`)}),e.length>0)return void V.error(e.join(","))}X("save",{title:ee.value,answers:Z.value.filter(e=>e.title).map(e=>({title:e.title})),analysis:le.value,isSetCorrectAnswer:!!ae.value,examExpand:ae.value,examAnswerSettingBO:{isIgnoreCase:oe.value?.includes("isIgnoreCase"),isInOrder:oe.value?.includes("isInOrder"),keywordCount:te.value},examRichTextContent:ie.value?se.value:""})}else V.error("题目标题不能为空!")}a(function(){W.title&&(ee.value=W.title),W.answerList&&W.answerList.length&&(Z.value=W.answerList),W.examAnswerSettingVO&&(oe.value=oe.value.filter(e=>"isIgnoreCase"===e&&W.examAnswerSettingVO?.isIgnoreCase||"isInOrder"===e&&W.examAnswerSettingVO?.isInOrder)),W.examAnswerSettingVO?.keywordCount&&(te.value=W.examAnswerSettingVO?.keywordCount),W.examExpand&&(ae.value=W.examExpand),W.analysis&&(le.value=W.analysis),W.examRichTextContent&&(se.value=W.examRichTextContent,ie.value=!0)});const ve=k("subject-text-fill");return(e,l)=>{const t=i("el-checkbox"),a=i("el-input"),k=i("el-input-number"),V=i("el-checkbox-group"),Q=i("el-tag"),ce=i("el-icon"),me=i("el-button"),pe=i("el-link");return n(),s("div",{class:o(u(ve).e("text-fill-exam"))},[r(S,{"show-edit":e.isEdit},{preview:d(()=>[m("div",I,[m("div",O,[m("span",A,y(e.orderIndex+1)+"."+y(ee.value)+"(问答题)",1),ie.value?(n(),s("div",q,[m("div",{class:"rich-text",innerHTML:se.value},null,8,_)])):c("v-if",!0),m("div",E,[Z.value.some(e=>e.title)?(n(!0),s(p,{key:0},f(Z.value,(e,l)=>(n(),v(t,{key:l,class:"radio",disabled:!0},{default:d(()=>[x(y(e.title),1)]),_:2},1024))),128)):c("v-if",!0)]),ae.value?(n(),s("div",T,[m("span",U,"正确答案:"+y(ae.value),1)])):c("v-if",!0)])])]),edit:d(()=>[m("div",B,[l[12]||(l[12]=m("div",{class:"label flex flex-justify-end"},[m("span",null,"题目:")],-1)),m("div",R,[r(a,{modelValue:ee.value,"onUpdate:modelValue":l[0]||(l[0]=e=>ee.value=e),type:"textarea",rows:2,placeholder:"【问答题】请输入问题",maxlength:200,"show-word-limit":"",disabled:e.isSave},null,8,["modelValue","disabled"])])]),m("div",L,[l[13]||(l[13]=m("div",{class:"label flex flex-justify-end"},[m("span",null,"答题设置:")],-1)),l[14]||(l[14]=m("span",null,"共答对",-1)),r(k,{modelValue:te.value,"onUpdate:modelValue":l[1]||(l[1]=e=>te.value=e),style:{width:"100px",margin:"0 10px"},min:1},null,8,["modelValue"]),l[15]||(l[15]=m("span",{style:{"margin-right":"10px"}},"个关键词,算是正确的",-1)),(n(),s(p,null,f(ne,e=>r(V,{key:e.value,modelValue:oe.value,"onUpdate:modelValue":l[2]||(l[2]=e=>oe.value=e)},{default:d(()=>[r(t,{label:e.value,class:"margin-left-10"},{default:d(()=>[x(y(e.label),1)]),_:2},1032,["label"])]),_:2},1032,["modelValue"])),64))]),m("div",M,[l[16]||(l[16]=m("div",{class:"label flex flex-justify-end"},[m("span",null,"答案:")],-1)),m("div",D,[r(a,{modelValue:ae.value,"onUpdate:modelValue":l[3]||(l[3]=e=>ae.value=e),type:"textarea",rows:2,placeholder:"请输入正确答案",maxlength:200,"show-word-limit":"",disabled:e.isSave},null,8,["modelValue","disabled"])])]),m("div",H,[l[17]||(l[17]=m("span",{style:{"padding-left":"60px"}},"*如遇包含特殊字符的关键词,需添加多个同义词,例:'CO₂'需添加同义词'CO2'",-1)),(n(!0),s(p,null,f(Z.value,(l,t)=>(n(),s("div",{key:t,class:"answer-item flex flex-items-center"},[m("div",N,[m("span",null,"关键词"+y(t+1)+":",1)]),m("div",z,[(n(!0),s(p,null,f(l.title.split(","),e=>(n(),s(p,{key:e},[e?(n(),v(Q,{key:0,closable:"",onClose:t=>function(e,l){if(e){const t=l.title.split(","),a=t.findIndex(l=>l===e);a>-1&&(t.splice(a,1),l.title=t.join(","))}}(e,l)},{default:d(()=>[x(y(e),1)]),_:2},1032,["onClose"])):c("v-if",!0)],64))),128)),e.isSave?c("v-if",!0):(n(),s(p,{key:0},[l.showInput?(n(),v(a,{key:0,modelValue:l.tag,"onUpdate:modelValue":e=>l.tag=e,style:{width:"80px"},onBlur:()=>function(e){e.showInput=!1,e.tag&&(e.title=e.title?[e.title,e.tag].join(","):e.tag,e.tag="")}(l)},null,8,["modelValue","onUpdate:modelValue","onBlur"])):(n(),v(me,{key:1,size:"small",onClick:e=>l.showInput=!0},{default:d(()=>[r(ce,null,{default:d(()=>[r(u(g))]),_:1}),m("span",null,y(l.title?"添加同义词":"添加关键词"),1)]),_:2},1032,["onClick"]))],64))]),m("div",$,[r(ce,{class:"icon"},{default:d(()=>[r(u(h),{class:o([{disabled:e.isSave}]),onClick:ue},null,8,["class"])]),_:1}),r(ce,{class:"icon"},{default:d(()=>[r(u(b),{class:o([{disabled:Z.value.length<2||e.isSave}]),onClick:e=>function(e){Z.value.length<2||W.isSave||Z.value.splice(e,1)}(t)},null,8,["class","onClick"])]),_:2},1024)])]))),128))]),e.showAnalysis?(n(),s("div",F,[l[18]||(l[18]=m("div",{class:"label flex flex-justify-end"},[m("span",null,"解析:")],-1)),m("div",G,[r(a,{modelValue:le.value,"onUpdate:modelValue":l[4]||(l[4]=e=>le.value=e),type:"textarea",rows:2,placeholder:"请输入题目解析"},null,8,["modelValue"])])])):c("v-if",!0),ie.value?(n(),s("div",J,[l[20]||(l[20]=m("div",{class:"label flex flex-justify-center"},[m("span",null,"富文本:")],-1)),m("div",K,[r(j,w({"model-value":se.value,"onUpdate:modelValue":l[5]||(l[5]=e=>se.value=e)},u(Y),{style:{width:"100%"}}),null,16,["model-value"]),m("div",P,[r(pe,{type:"danger",onClick:re},{default:d(()=>l[19]||(l[19]=[x(" 删除富文本 ",-1)])),_:1,__:[19]})])])])):c("v-if",!0)]),default:d(()=>[e.showAction?(n(),v(C,{key:0,"is-edit":e.isEdit,"is-set":e.isSet,"show-other-option":!1,"exam-answer-relation-type":W.examAnswerRelationType,onMoveUp:l[6]||(l[6]=e=>X("move","up")),onMoveDown:l[7]||(l[7]=e=>X("move","down")),onDelete:l[8]||(l[8]=e=>X("delete")),onSave:de,onEdit:l[9]||(l[9]=e=>X("edit")),onAdd:l[10]||(l[10]=e=>X("add",e)),onOnShowRichText:l[11]||(l[11]=e=>ie.value=!0)},null,8,["is-edit","is-set","exam-answer-relation-type"])):c("v-if",!0)]),_:1},8,["show-edit"])],2)}}});export{Q as default};
2
2
  //# sourceMappingURL=subject-text-fill.vue.mjs.map