@qxs-bns/components 0.0.16 → 0.0.18

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 (120) hide show
  1. package/es/index.js +0 -1
  2. package/es/index.js.map +1 -1
  3. package/es/package.json.js +1 -1
  4. package/es/src/components.js +0 -1
  5. package/es/src/components.js.map +1 -1
  6. package/es/src/subject-list/src/components/subject-single.vue.js +1 -1
  7. package/es/src/subject-list/src/components/subject-single.vue.js.map +1 -1
  8. package/es/src/subject-list/src/subject-list.vue.js +32 -10
  9. package/es/src/subject-list/src/subject-list.vue.js.map +1 -1
  10. package/lib/index.js +18 -20
  11. package/lib/index.js.map +1 -1
  12. package/lib/package.json.js +1 -1
  13. package/lib/src/components.js +18 -20
  14. package/lib/src/components.js.map +1 -1
  15. package/lib/src/subject-list/src/components/subject-single.vue.js +1 -1
  16. package/lib/src/subject-list/src/components/subject-single.vue.js.map +1 -1
  17. package/lib/src/subject-list/src/subject-list.vue.js +32 -10
  18. package/lib/src/subject-list/src/subject-list.vue.js.map +1 -1
  19. package/package.json +10 -4
  20. package/types/index.d.ts +6 -0
  21. package/types/index.d.ts.map +1 -0
  22. package/types/src/base/style/css.d.ts +2 -0
  23. package/types/src/base/style/css.d.ts.map +1 -0
  24. package/types/src/base/style/index.d.ts +2 -0
  25. package/types/src/base/style/index.d.ts.map +1 -0
  26. package/types/src/components.d.ts +10 -0
  27. package/types/src/components.d.ts.map +1 -0
  28. package/types/src/data-chart/index.d.ts +4 -0
  29. package/types/src/data-chart/index.d.ts.map +1 -0
  30. package/types/src/data-chart/src/analyze.d.ts +23 -0
  31. package/types/src/data-chart/src/analyze.d.ts.map +1 -0
  32. package/types/src/data-chart/src/utils/config.d.ts +41 -0
  33. package/types/src/data-chart/src/utils/config.d.ts.map +1 -0
  34. package/types/src/data-chart/src/utils/injectionKeys.d.ts +3 -0
  35. package/types/src/data-chart/src/utils/injectionKeys.d.ts.map +1 -0
  36. package/types/src/data-chart/src/utils/useCharts.d.ts +16 -0
  37. package/types/src/data-chart/src/utils/useCharts.d.ts.map +1 -0
  38. package/types/src/data-chart/style/index.d.ts +3 -0
  39. package/types/src/data-chart/style/index.d.ts.map +1 -0
  40. package/types/src/defaults.d.ts +6 -0
  41. package/types/src/defaults.d.ts.map +1 -0
  42. package/types/src/file-upload/index.d.ts +4 -0
  43. package/types/src/file-upload/index.d.ts.map +1 -0
  44. package/types/src/file-upload/style/index.d.ts +3 -0
  45. package/types/src/file-upload/style/index.d.ts.map +1 -0
  46. package/types/src/fixed-action-bar/index.d.ts +4 -0
  47. package/types/src/fixed-action-bar/index.d.ts.map +1 -0
  48. package/types/src/fixed-action-bar/style/index.d.ts +3 -0
  49. package/types/src/fixed-action-bar/style/index.d.ts.map +1 -0
  50. package/types/src/image-upload/index.d.ts +4 -0
  51. package/types/src/image-upload/index.d.ts.map +1 -0
  52. package/types/src/image-upload/style/index.d.ts +3 -0
  53. package/types/src/image-upload/style/index.d.ts.map +1 -0
  54. package/types/src/make-installer.d.ts +9 -0
  55. package/types/src/make-installer.d.ts.map +1 -0
  56. package/types/src/photo-crop-tool/index.d.ts +4 -0
  57. package/types/src/photo-crop-tool/index.d.ts.map +1 -0
  58. package/types/src/photo-crop-tool/src/composables.d.ts +7 -0
  59. package/types/src/photo-crop-tool/src/composables.d.ts.map +1 -0
  60. package/types/src/photo-crop-tool/style/index.d.ts +3 -0
  61. package/types/src/photo-crop-tool/style/index.d.ts.map +1 -0
  62. package/types/src/subject-action/index.d.ts +4 -0
  63. package/types/src/subject-action/index.d.ts.map +1 -0
  64. package/types/src/subject-action/style/index.d.ts +3 -0
  65. package/types/src/subject-action/style/index.d.ts.map +1 -0
  66. package/types/src/subject-layout/index.d.ts +4 -0
  67. package/types/src/subject-layout/index.d.ts.map +1 -0
  68. package/types/src/subject-layout/style/index.d.ts +3 -0
  69. package/types/src/subject-layout/style/index.d.ts.map +1 -0
  70. package/types/src/subject-list/index.d.ts +4 -0
  71. package/types/src/subject-list/index.d.ts.map +1 -0
  72. package/types/src/subject-list/style/index.d.ts +3 -0
  73. package/types/src/subject-list/style/index.d.ts.map +1 -0
  74. package/types/src/subject-type/index.d.ts +4 -0
  75. package/types/src/subject-type/index.d.ts.map +1 -0
  76. package/types/src/subject-type/style/index.d.ts +3 -0
  77. package/types/src/subject-type/style/index.d.ts.map +1 -0
  78. package/types/src/tiny-mce-editor/index.d.ts +4 -0
  79. package/types/src/tiny-mce-editor/index.d.ts.map +1 -0
  80. package/types/src/tiny-mce-editor/style/index.d.ts +3 -0
  81. package/types/src/tiny-mce-editor/style/index.d.ts.map +1 -0
  82. package/types/src/withInstall.d.ts +4 -0
  83. package/types/src/withInstall.d.ts.map +1 -0
  84. package/types/tsconfig.tsbuildinfo +1 -0
  85. package/es/_virtual/_plugin-vue_export-helper.js +0 -10
  86. package/es/_virtual/_plugin-vue_export-helper.js.map +0 -1
  87. package/es/node_modules/.pnpm/style-inject@0.3.0/node_modules/style-inject/dist/style-inject.es.js +0 -27
  88. package/es/node_modules/.pnpm/style-inject@0.3.0/node_modules/style-inject/dist/style-inject.es.js.map +0 -1
  89. package/es/src/data-chart/index.js +0 -7
  90. package/es/src/data-chart/index.js.map +0 -1
  91. package/es/src/data-chart/src/data-chart.vue.js +0 -8
  92. package/es/src/data-chart/src/data-chart.vue.js.map +0 -1
  93. package/es/src/data-chart/src/data-chart.vue2.js +0 -108
  94. package/es/src/data-chart/src/data-chart.vue2.js.map +0 -1
  95. package/es/src/data-chart/src/data-chart.vue3.js +0 -7
  96. package/es/src/data-chart/src/data-chart.vue3.js.map +0 -1
  97. package/es/src/data-chart/src/utils/config.js +0 -380
  98. package/es/src/data-chart/src/utils/config.js.map +0 -1
  99. package/es/src/data-chart/src/utils/injectionKeys.js +0 -4
  100. package/es/src/data-chart/src/utils/injectionKeys.js.map +0 -1
  101. package/es/src/data-chart/src/utils/useCharts.js +0 -23
  102. package/es/src/data-chart/src/utils/useCharts.js.map +0 -1
  103. package/lib/_virtual/_plugin-vue_export-helper.js +0 -14
  104. package/lib/_virtual/_plugin-vue_export-helper.js.map +0 -1
  105. package/lib/node_modules/.pnpm/style-inject@0.3.0/node_modules/style-inject/dist/style-inject.es.js +0 -31
  106. package/lib/node_modules/.pnpm/style-inject@0.3.0/node_modules/style-inject/dist/style-inject.es.js.map +0 -1
  107. package/lib/src/data-chart/index.js +0 -12
  108. package/lib/src/data-chart/index.js.map +0 -1
  109. package/lib/src/data-chart/src/data-chart.vue.js +0 -12
  110. package/lib/src/data-chart/src/data-chart.vue.js.map +0 -1
  111. package/lib/src/data-chart/src/data-chart.vue2.js +0 -112
  112. package/lib/src/data-chart/src/data-chart.vue2.js.map +0 -1
  113. package/lib/src/data-chart/src/data-chart.vue3.js +0 -11
  114. package/lib/src/data-chart/src/data-chart.vue3.js.map +0 -1
  115. package/lib/src/data-chart/src/utils/config.js +0 -384
  116. package/lib/src/data-chart/src/utils/config.js.map +0 -1
  117. package/lib/src/data-chart/src/utils/injectionKeys.js +0 -6
  118. package/lib/src/data-chart/src/utils/injectionKeys.js.map +0 -1
  119. package/lib/src/data-chart/src/utils/useCharts.js +0 -25
  120. package/lib/src/data-chart/src/utils/useCharts.js.map +0 -1
package/es/index.js CHANGED
@@ -1,5 +1,4 @@
1
1
  import installer from './src/defaults.js';
2
- export { QxsDataChart } from './src/data-chart/index.js';
3
2
  export { QxsFileUpload } from './src/file-upload/index.js';
4
3
  export { QxsFixedActionBar } from './src/fixed-action-bar/index.js';
5
4
  export { QxsImageUpload } from './src/image-upload/index.js';
package/es/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../packages/components/index.ts"],"sourcesContent":["import installer from './src/defaults'\n\nexport * from './src/components'\n\nexport const install = installer.install\nexport const version = installer.version\nexport default installer\n"],"names":["install","installer","version"],"mappings":";;;;;;;;;;;;AAIaA,MAAAA,UAAUC,SAAU,CAAAD;AACpBE,MAAAA,UAAUD,SAAU,CAAAC;;;;"}
1
+ {"version":3,"file":"index.js","sources":["../../../packages/components/index.ts"],"sourcesContent":["import installer from './src/defaults'\n\nexport * from './src/components'\n\nexport const install = installer.install\nexport const version = installer.version\nexport default installer\n"],"names":["install","installer","version"],"mappings":";;;;;;;;;;;AAIaA,MAAAA,UAAUC,SAAU,CAAAD;AACpBE,MAAAA,UAAUD,SAAU,CAAAC;;;;"}
@@ -1,4 +1,4 @@
1
- var version = "0.0.16";
1
+ var version = "0.0.18";
2
2
 
3
3
  export { version };
4
4
  //# sourceMappingURL=package.json.js.map
@@ -1,4 +1,3 @@
1
- export { QxsDataChart } from './data-chart/index.js';
2
1
  export { QxsFileUpload } from './file-upload/index.js';
3
2
  export { QxsFixedActionBar } from './fixed-action-bar/index.js';
4
3
  export { QxsImageUpload } from './image-upload/index.js';
@@ -1 +1 @@
1
- {"version":3,"file":"components.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;"}
1
+ {"version":3,"file":"components.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;"}
@@ -136,7 +136,7 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
136
136
  }
137
137
  }
138
138
  function setRelation(item) {
139
- emits("setRelation", props.id, item.answerId);
139
+ emits("setRelation", props.id, item);
140
140
  }
141
141
  function deleteRichText() {
142
142
  showRichText.value = false;
@@ -1 +1 @@
1
- {"version":3,"file":"subject-single.vue.js","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 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 id?: string\n}>()\nconst emits = defineEmits(['move', 'save', 'delete', 'edit', 'add', 'setRelation'])\n\nconst attrs = useAttrs()\n\nconst answersIndex = ref(0)\nconst isKey = ref(false)\nconst answerCheckType = ref(2)\nconst answers = ref<{\n title: string\n isCorrect: boolean\n orderIndex?: number\n resultItem?: 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}, {\n title: '',\n isCorrect: false,\n\n}, {\n title: '',\n isCorrect: false,\n}])\n\nconst leastAnswerCount = ref()\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})\n\nfunction addAnswer() {\n if (props.isSave) {\n return\n }\n answers.value.push({\n title: '',\n isCorrect: false,\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) => {\n if (answer !== it) {\n answer.isCorrect = false\n }\n })\n }\n it.isCorrect = event\n } else if (props.type === 'multiple') {\n // 多选题:可以有多个正确答案\n it.isCorrect = event\n }\n}\n\nfunction setRelation(item: any) {\n emits('setRelation', props.id, item.answerId)\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 let isSetCorrectAnswer = false\n let examAnswerRelationType = null\n let correctAnswerCount = 0\n if (props.type === 'multiple' || props.type === 'single') {\n answers.value.forEach((v: any, i: number) => {\n if (!v.title) {\n msg += `选项${String.fromCharCode(65 + i)}未填写。`\n }\n if (v.isCorrect) {\n isSetCorrectAnswer = true\n correctAnswerCount++\n }\n if (v.resultItem) {\n examAnswerRelationType = 1\n }\n if (v.answerRelations?.length) {\n examAnswerRelationType = 2\n }\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 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,\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.answerList && props.answerList.length) {\n answers.value = props.answerList\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}\n\nfunction onCloseResult() {\n showRichContent.value = false\n resultItem.value = ''\n}\n\nfunction onOpenResult(i: number) {\n answersIndex.value = i\n console.log(answers.value[i].resultItem, 1);\n resultItem.value = answers.value[i].resultItem || ''\n showRichContent.value = true\n}\n\nfunction onSaveResult(i: number) {\n answers.value[i].resultItem = resultItem.value || ''\n showRichContent.value = false\n}\n\nfunction setKey(key: boolean) {\n isKey.value = key\n}\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})\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)\">({{ titlePlaceholder }}{{ leastAnswerCount ? `至少选${leastAnswerCount}项${type === 'sort' ? '并排序' : ''}` : '' }})</span>\n </span>\n </div>\n <div v-if=\"showRichText\">\n <div v-html=\"richText\" />\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 </el-radio>\n </template>\n </div>\n </div>\n </template>\n <template v-if=\"isEdit\" #edit>\n <div class=\"flex\" :class=\"[{ 'margin-bottom': showRichText }]\">\n <div class=\"label flex flex-justify-center\">\n <span>题目:</span>\n </div>\n <div style=\"flex: 1;\">\n <el-input\n v-model=\"title\"\n type=\"textarea\"\n :rows=\"2\"\n :placeholder=\"`【${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: 120px;\"\n placeholder=\"至少选择几项\"\n :disabled=\"isSave\"\n >\n <el-option\n v-for=\"item in leastAnswerOptions\"\n :key=\"item.value\"\n :value=\"item.value\"\n >\n {{ item.label }}\n </el-option>\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=\"order\">{{ 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 :value=\"item.isCorrect\"\n :class=\"[{ 'is-correct': item.isCorrect }]\"\n :disabled=\"isSave\"\n style=\"margin-left: 10px;\"\n @change=\"(event) => 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\"\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\"\n type=\"primary\"\n class=\"margin-left-10\"\n @click=\"setRelation(item)\"\n >\n <span>{{ item.answerRelations?.length ? `关联了${item.answerRelations?.length}项` : '关联检查' }}</span>\n </el-link>\n </div>\n </div>\n <div v-if=\"type === 'sort'\" class=\"margin-bottom flex flex-items-center\">\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 mode=\"multiple\"\n style=\"width: 360px;\"\n placeholder=\"请按顺序选择排序答案\"\n :show-arrow=\"true\"\n >\n <!-- :options=\"[...Array(answers.length)].map((_, i) => ({ value: String.fromCharCode(65 + i) }))\" -->\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 v-if=\"showRichText\" class=\"margin-bottom flex\">\n <div class=\"label flex flex-justify-center\">\n <span>富文本:</span>\n </div>\n <div style=\"flex: 1;\">\n <TinyMceEditor v-model:model-value=\"richText\" v-bind=\"attrs\" style=\"width: 100%;\" />\n <div class=\"flex flex-justify-end\">\n <el-link\n type=\"danger\"\n @click=\"deleteRichText\"\n >\n 删除富文本\n </el-link>\n </div>\n </div>\n </div>\n </template>\n <SubjectAction\n v-if=\"showAction\"\n :is-edit=\"isEdit\"\n :is-set=\"isSet\"\n :isKey=\"isKey\"\n :examAnswerRelationType=\"props.examAnswerRelationType\"\n :answerCheckType=\"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 @onShowRichText=\"showRichText = true\"\n @setKey=\"setKey\"\n @setAnswerSetting=\"setAnswerSetting\"\n />\n </SubjectLayout>\n <el-dialog\n v-model=\"showRichContent\"\n title=\"添加结果\"\n class=\"customize-dialog\"\n >\n <TinyMceEditor v-model:model-value=\"resultItem\" v-bind=\"attrs\" style=\"width: 100%;\" />\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(answersIndex)\"\n >\n 保存\n </el-button>\n </template>\n </el-dialog>\n </div>\n</template>\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"subject-single.vue.js","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 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 id?: string\n}>()\nconst emits = defineEmits(['move', 'save', 'delete', 'edit', 'add', 'setRelation'])\n\nconst attrs = useAttrs()\n\nconst answersIndex = ref(0)\nconst isKey = ref(false)\nconst answerCheckType = ref(2)\nconst answers = ref<{\n title: string\n isCorrect: boolean\n orderIndex?: number\n resultItem?: 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}, {\n title: '',\n isCorrect: false,\n\n}, {\n title: '',\n isCorrect: false,\n}])\n\nconst leastAnswerCount = ref()\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})\n\nfunction addAnswer() {\n if (props.isSave) {\n return\n }\n answers.value.push({\n title: '',\n isCorrect: false,\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) => {\n if (answer !== it) {\n answer.isCorrect = false\n }\n })\n }\n it.isCorrect = event\n } else if (props.type === 'multiple') {\n // 多选题:可以有多个正确答案\n it.isCorrect = event\n }\n}\n\nfunction setRelation(item: any) {\n emits('setRelation', props.id, 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 let msg = ''\n let isSetCorrectAnswer = false\n let examAnswerRelationType = null\n let correctAnswerCount = 0\n if (props.type === 'multiple' || props.type === 'single') {\n answers.value.forEach((v: any, i: number) => {\n if (!v.title) {\n msg += `选项${String.fromCharCode(65 + i)}未填写。`\n }\n if (v.isCorrect) {\n isSetCorrectAnswer = true\n correctAnswerCount++\n }\n if (v.resultItem) {\n examAnswerRelationType = 1\n }\n if (v.answerRelations?.length) {\n examAnswerRelationType = 2\n }\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 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,\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.answerList && props.answerList.length) {\n answers.value = props.answerList\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}\n\nfunction onCloseResult() {\n showRichContent.value = false\n resultItem.value = ''\n}\n\nfunction onOpenResult(i: number) {\n answersIndex.value = i\n console.log(answers.value[i].resultItem, 1);\n resultItem.value = answers.value[i].resultItem || ''\n showRichContent.value = true\n}\n\nfunction onSaveResult(i: number) {\n answers.value[i].resultItem = resultItem.value || ''\n showRichContent.value = false\n}\n\nfunction setKey(key: boolean) {\n isKey.value = key\n}\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})\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)\">({{ titlePlaceholder }}{{ leastAnswerCount ? `至少选${leastAnswerCount}项${type === 'sort' ? '并排序' : ''}` : '' }})</span>\n </span>\n </div>\n <div v-if=\"showRichText\">\n <div v-html=\"richText\" />\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 </el-radio>\n </template>\n </div>\n </div>\n </template>\n <template v-if=\"isEdit\" #edit>\n <div class=\"flex\" :class=\"[{ 'margin-bottom': showRichText }]\">\n <div class=\"label flex flex-justify-center\">\n <span>题目:</span>\n </div>\n <div style=\"flex: 1;\">\n <el-input\n v-model=\"title\"\n type=\"textarea\"\n :rows=\"2\"\n :placeholder=\"`【${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: 120px;\"\n placeholder=\"至少选择几项\"\n :disabled=\"isSave\"\n >\n <el-option\n v-for=\"item in leastAnswerOptions\"\n :key=\"item.value\"\n :value=\"item.value\"\n >\n {{ item.label }}\n </el-option>\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=\"order\">{{ 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 :value=\"item.isCorrect\"\n :class=\"[{ 'is-correct': item.isCorrect }]\"\n :disabled=\"isSave\"\n style=\"margin-left: 10px;\"\n @change=\"(event) => 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\"\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\"\n type=\"primary\"\n class=\"margin-left-10\"\n @click=\"setRelation(item)\"\n >\n <span>{{ item.answerRelations?.length ? `关联了${item.answerRelations?.length}项` : '关联检查' }}</span>\n </el-link>\n </div>\n </div>\n <div v-if=\"type === 'sort'\" class=\"margin-bottom flex flex-items-center\">\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 mode=\"multiple\"\n style=\"width: 360px;\"\n placeholder=\"请按顺序选择排序答案\"\n :show-arrow=\"true\"\n >\n <!-- :options=\"[...Array(answers.length)].map((_, i) => ({ value: String.fromCharCode(65 + i) }))\" -->\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 v-if=\"showRichText\" class=\"margin-bottom flex\">\n <div class=\"label flex flex-justify-center\">\n <span>富文本:</span>\n </div>\n <div style=\"flex: 1;\">\n <TinyMceEditor v-model:model-value=\"richText\" v-bind=\"attrs\" style=\"width: 100%;\" />\n <div class=\"flex flex-justify-end\">\n <el-link\n type=\"danger\"\n @click=\"deleteRichText\"\n >\n 删除富文本\n </el-link>\n </div>\n </div>\n </div>\n </template>\n <SubjectAction\n v-if=\"showAction\"\n :is-edit=\"isEdit\"\n :is-set=\"isSet\"\n :isKey=\"isKey\"\n :examAnswerRelationType=\"props.examAnswerRelationType\"\n :answerCheckType=\"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 @onShowRichText=\"showRichText = true\"\n @setKey=\"setKey\"\n @setAnswerSetting=\"setAnswerSetting\"\n />\n </SubjectLayout>\n <el-dialog\n v-model=\"showRichContent\"\n title=\"添加结果\"\n class=\"customize-dialog\"\n >\n <TinyMceEditor v-model:model-value=\"resultItem\" v-bind=\"attrs\" style=\"width: 100%;\" />\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(answersIndex)\"\n >\n 保存\n </el-button>\n </template>\n </el-dialog>\n </div>\n</template>\n"],"names":[],"mappings":"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"}
@@ -26,7 +26,8 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
26
26
  addSubject,
27
27
  currentList,
28
28
  uploadExcel,
29
- addExam
29
+ addExam,
30
+ setAnswerRelation
30
31
  });
31
32
  function totalPageIndex() {
32
33
  let totalPageIndex2 = 0;
@@ -79,9 +80,22 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
79
80
  });
80
81
  }
81
82
  }
83
+ function setAnswerRelation(answerRelations, examId, examAnswerId) {
84
+ if (answerRelations.length) {
85
+ currentList.value.forEach((c) => {
86
+ if (c.examId === examId) {
87
+ c.answer.forEach((c2) => {
88
+ if (c2.examAnswerId === examAnswerId) {
89
+ c2.answerRelations = answerRelations;
90
+ }
91
+ });
92
+ }
93
+ });
94
+ }
95
+ }
82
96
  function addExam(item) {
83
97
  const answerList = [];
84
- item.answer?.map((v) => {
98
+ item.answers?.map((v) => {
85
99
  answerList.push({
86
100
  ...v,
87
101
  title: v.answer,
@@ -92,7 +106,7 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
92
106
  ...item,
93
107
  examId: "",
94
108
  answerType: item.richTextContent ? "rich_text" : item.examTypeEnum,
95
- answerList: item.answer,
109
+ answers: answerList,
96
110
  isSave: false,
97
111
  isEdit: true,
98
112
  isRealCanDel: true,
@@ -126,8 +140,8 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
126
140
  currentList.value.splice(index, 1);
127
141
  ElMessage.success("\u5220\u9664\u6210\u529F");
128
142
  }
129
- function setRelation(examId, examAnswerId) {
130
- emits("setRelation", examId, examAnswerId);
143
+ function setRelation(examId, examAnswers) {
144
+ emits("setRelation", examId, examAnswers);
131
145
  }
132
146
  watch(() => props.subjectList, (newList) => {
133
147
  if (newList) {
@@ -167,8 +181,10 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
167
181
  onSave: (item2) => saveSubject(index, item2),
168
182
  onEdit: ($event) => item.isEdit = true,
169
183
  onAdd: (type, examAnswerRelationType) => addSubject(type, index, examAnswerRelationType)
170
- }), null, 16, ["order-index", "title", "type", "is-save", "id", "is-set", "answer-list", "analysis", "least-answer-count", "is-edit", "show-action", "exam-expand", "exam-rich-text-content", "examAnswerRelationType", "onMove", "onDelete", "onSave", "onEdit", "onAdd"])) : item.answerType === "scale" ? (openBlock(), createBlock(_sfc_main$2, {
184
+ }), null, 16, ["order-index", "title", "type", "is-save", "id", "is-set", "answer-list", "analysis", "least-answer-count", "is-edit", "show-action", "exam-expand", "exam-rich-text-content", "examAnswerRelationType", "onMove", "onDelete", "onSave", "onEdit", "onAdd"])) : item.answerType === "scale" ? (openBlock(), createBlock(_sfc_main$2, mergeProps({
171
185
  key: 1,
186
+ ref_for: true
187
+ }, unref(attrs), {
172
188
  "order-index": index,
173
189
  title: item.title,
174
190
  "is-save": !item.isRealCanDel,
@@ -185,8 +201,10 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
185
201
  onSave: (item2) => saveSubject(index, item2),
186
202
  onEdit: ($event) => item.isEdit = true,
187
203
  onAdd: (type) => addSubject(type, index, null)
188
- }, null, 8, ["order-index", "title", "is-save", "is-set", "answer-list", "analysis", "is-edit", "scale-question-list", "show-action", "exam-rich-text-content", "examAnswerRelationType", "onMove", "onDelete", "onSave", "onEdit", "onAdd"])) : item.answerType === "blank_fill" ? (openBlock(), createBlock(_sfc_main$3, {
204
+ }), null, 16, ["order-index", "title", "is-save", "is-set", "answer-list", "analysis", "is-edit", "scale-question-list", "show-action", "exam-rich-text-content", "examAnswerRelationType", "onMove", "onDelete", "onSave", "onEdit", "onAdd"])) : item.answerType === "blank_fill" ? (openBlock(), createBlock(_sfc_main$3, mergeProps({
189
205
  key: 2,
206
+ ref_for: true
207
+ }, unref(attrs), {
190
208
  "order-index": index,
191
209
  title: item.title,
192
210
  "is-save": !item.isRealCanDel,
@@ -203,8 +221,10 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
203
221
  onSave: (item2) => saveSubject(index, item2),
204
222
  onEdit: ($event) => item.isEdit = true,
205
223
  onAdd: (type) => addSubject(type, index, null)
206
- }, null, 8, ["order-index", "title", "is-save", "is-set", "answer-list", "analysis", "show-action", "is-edit", "exam-answer-setting-v-o", "exam-rich-text-content", "examAnswerRelationType", "onMove", "onDelete", "onSave", "onEdit", "onAdd"])) : item.answerType === "text_fill" ? (openBlock(), createBlock(_sfc_main$4, {
224
+ }), null, 16, ["order-index", "title", "is-save", "is-set", "answer-list", "analysis", "show-action", "is-edit", "exam-answer-setting-v-o", "exam-rich-text-content", "examAnswerRelationType", "onMove", "onDelete", "onSave", "onEdit", "onAdd"])) : item.answerType === "text_fill" ? (openBlock(), createBlock(_sfc_main$4, mergeProps({
207
225
  key: 3,
226
+ ref_for: true
227
+ }, unref(attrs), {
208
228
  "order-index": index,
209
229
  title: item.title,
210
230
  "is-save": !item.isRealCanDel,
@@ -222,8 +242,10 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
222
242
  onSave: (item2) => saveSubject(index, item2),
223
243
  onEdit: ($event) => item.isEdit = true,
224
244
  onAdd: (type) => addSubject(type, index, null)
225
- }, null, 8, ["order-index", "title", "is-save", "is-set", "answer-list", "analysis", "show-action", "is-edit", "exam-expand", "exam-answer-setting-v-o", "examAnswerRelationType", "exam-rich-text-content", "onMove", "onDelete", "onSave", "onEdit", "onAdd"])) : item.answerType === "rich_text" ? (openBlock(), createBlock(_sfc_main$5, {
245
+ }), null, 16, ["order-index", "title", "is-save", "is-set", "answer-list", "analysis", "show-action", "is-edit", "exam-expand", "exam-answer-setting-v-o", "examAnswerRelationType", "exam-rich-text-content", "onMove", "onDelete", "onSave", "onEdit", "onAdd"])) : item.answerType === "rich_text" ? (openBlock(), createBlock(_sfc_main$5, mergeProps({
226
246
  key: 4,
247
+ ref_for: true
248
+ }, unref(attrs), {
227
249
  "order-index": index,
228
250
  richTextContent: item.richTextContent,
229
251
  "is-set": item.hasSet || false,
@@ -236,7 +258,7 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
236
258
  onSave: (item2) => saveSubject(index, item2),
237
259
  onEdit: ($event) => item.isEdit = true,
238
260
  onAdd: (type) => addSubject(type, index, null)
239
- }, null, 8, ["order-index", "richTextContent", "is-set", "is-save", "is-edit", "show-action", "onMove", "onDelete", "examAnswerRelationType", "onSave", "onEdit", "onAdd"])) : item.answerType === "page_end" ? (openBlock(), createBlock(_sfc_main$6, {
261
+ }), null, 16, ["order-index", "richTextContent", "is-set", "is-save", "is-edit", "show-action", "onMove", "onDelete", "examAnswerRelationType", "onSave", "onEdit", "onAdd"])) : item.answerType === "page_end" ? (openBlock(), createBlock(_sfc_main$6, {
240
262
  key: 5,
241
263
  "total-page": totalPageIndex(),
242
264
  "current-page-index": currentPageIndex()(item.id),
@@ -1 +1 @@
1
- {"version":3,"file":"subject-list.vue.js","sources":["../../../../../../packages/components/src/subject-list/src/subject-list.vue"],"sourcesContent":["<script setup lang=\"ts\">\n// import isEqual from 'lodash/isEqual'\nimport SubjectBlankFill from './components/subject-blank-fill.vue'\nimport SubjectScale from './components/subject-scale.vue'\nimport SubjectSingle from './components/subject-single.vue'\nimport SubjectTextFill from './components/subject-text-fill.vue'\nimport SubjectRichText from './components/SubjectRichText.vue'\nimport SubjectPageEnd from './components/SubjectPageEnd.vue'\n\ndefineOptions({\n name: 'QxsSubjectList',\n})\n\nconst props = defineProps<{\n subjectList: any[]\n isPreview: boolean\n}>()\nconst currentList = ref([] as any)\nconst emits = defineEmits(['setRelation'])\n\nconst attrs = useAttrs()\n\ndefineExpose({\n addSubject,\n currentList,\n uploadExcel,\n addExam,\n})\n\nfunction totalPageIndex() {\n let totalPageIndex = 0\n let isLastPageIndex = false\n currentList.value.map((v: any, i: number, arr: any) => {\n if (v.answerType === 'page_end') {\n totalPageIndex++\n isLastPageIndex = i === arr.length - 1\n }\n })\n // 假设最后是一个分页器认为是最后一页\n return isLastPageIndex ? totalPageIndex : totalPageIndex + 1\n}\n\nfunction currentPageIndex() {\n return (currentId: any) => {\n const currentPageList = currentList.value.filter(\n (v: any) => v.answerType === 'page_end'\n )\n let currentIndex = 0\n currentPageList.forEach((c: any, i: number) => {\n if (currentId === c.id) {\n currentIndex = i + 1\n }\n })\n return currentIndex\n }\n}\n\nfunction addSubject(type: string, index: number, examAnswerRelationType: number | null) {\n console.log(index, 'index')\n if (index || index === 0) {\n currentList.value.splice(index + 1, 0, {\n answerType: type,\n analysis: '',\n scaleQuestionList: [],\n isSave: false,\n isEdit: true,\n isRealCanDel: true,\n hasSet: false,\n examAnswerRelationType: examAnswerRelationType,\n })\n }\n else {\n currentList.value.push({\n answerType: type,\n analysis: '',\n scaleQuestionList: [],\n isSave: false,\n isEdit: true,\n isRealCanDel: true,\n hasSet: false,\n examAnswerRelationType: examAnswerRelationType,\n })\n }\n}\n\nfunction addExam(item: any) {\n const answerList = []\n item.answer?.map((v: any) => {\n answerList.push({\n ...v,\n title: v.answer,\n answerId: v.examAnswerId,\n })\n })\n currentList.value.push({\n ...item,\n examId: '',\n answerType: item.richTextContent? 'rich_text': item.examTypeEnum,\n answerList: item.answer,\n isSave: false,\n isEdit: true,\n isRealCanDel: true,\n hasSet: false,\n })\n}\n\nfunction uploadExcel(list: any[]) {\n currentList.value = currentList.value.concat(list)\n}\n\nfunction move(index: number, type: 'up' | 'down') {\n if (type === 'up' && index > 0) {\n const [item] = currentList.value.splice(index, 1)\n currentList.value.splice(index - 1, 0, item)\n }\n else if (type === 'down' && index < currentList.value.length - 1) {\n const [item] = currentList.value.splice(index, 1)\n currentList.value.splice(index + 1, 0, item)\n }\n}\n\nfunction saveSubject(index: number, item: any) {\n for (let idx = 0; idx < currentList.value.length; idx++) {\n if (index === idx) {\n currentList.value[index] =\n {\n ...currentList.value[index],\n ...item,\n isEdit: false,\n }\n }\n }\n}\n\nfunction deleteSubject(index: number) {\n currentList.value.splice(index, 1)\n ElMessage.success('删除成功')\n}\n\nfunction setRelation(examId: string, examAnswerId: string) {\n emits('setRelation', examId, examAnswerId)\n}\n\nwatch(() => props.subjectList, (newList: any) => {\n if (newList) {\n currentList.value = [...newList]\n }\n}, { immediate: true })\n</script>\n\n<template>\n <div class=\"subject-list-wrapper\">\n <div v-for=\"(item, index) in currentList\" :key=\"index + item.examId || item.title\">\n <template v-if=\"['single', 'multiple', 'sort'].includes(item.answerType)\">\n <SubjectSingle v-bind=\"attrs\" :order-index=\"index\" :title=\"item.title\" :type=\"item.answerType\" :is-save=\"!item.isRealCanDel\"\n :id=\"item.examId\"\n :is-set=\"item.hasSet || false\" :answer-list=\"item.answers\" :analysis=\"item.analysis\"\n :least-answer-count=\"item.leastAnswerCount\" :is-edit=\"item.isEdit || false\" :show-action=\"!isPreview\"\n :exam-expand=\"item.examExpand\" :exam-rich-text-content=\"item.examRichTextContent\"\n :examAnswerRelationType=\"item.examAnswerRelationType\" @setRelation=\"setRelation\"\n @move=\"(type: 'up' | 'down') => move(index, type)\" @delete=\"deleteSubject(index)\"\n @save=\"item => saveSubject(index, item)\" @edit=\"item.isEdit = true\"\n @add=\"(type, examAnswerRelationType) => addSubject(type, index, examAnswerRelationType)\" />\n </template>\n <SubjectScale v-else-if=\"item.answerType === 'scale'\" :order-index=\"index\" :title=\"item.title\"\n :is-save=\"!item.isRealCanDel\" :is-set=\"item.hasSet || false\" :answer-list=\"item.answers\"\n :analysis=\"item.analysis\" :is-edit=\"item.isEdit || false\" :scale-question-list=\"item.scaleQuestionList\"\n :show-action=\"!isPreview\" :exam-rich-text-content=\"item.examRichTextContent\"\n :examAnswerRelationType=\"item.examAnswerRelationType\" @move=\"(type: 'up' | 'down') => move(index, type)\"\n @delete=\"deleteSubject(index)\" @save=\"(item: any) => saveSubject(index, item)\" @edit=\"item.isEdit = true\"\n @add=\"(type: string) => addSubject(type, index, null)\" />\n <SubjectBlankFill v-else-if=\"item.answerType === 'blank_fill'\" :order-index=\"index\" :title=\"item.title\"\n :is-save=\"!item.isRealCanDel\" :is-set=\"item.hasSet || false\" :answer-list=\"item.answers\"\n :analysis=\"item.analysis\" :show-action=\"!isPreview\" :is-edit=\"item.isEdit || false\"\n :exam-answer-setting-v-o=\"item.examAnswerSettingVO || {}\" :exam-rich-text-content=\"item.examRichTextContent\"\n :examAnswerRelationType=\"item.examAnswerRelationType\" @move=\"(type: 'up' | 'down') => move(index, type)\"\n @delete=\"deleteSubject(index)\" @save=\"(item: any) => saveSubject(index, item)\" @edit=\"item.isEdit = true\"\n @add=\"(type: string) => addSubject(type, index, null)\" />\n <SubjectTextFill v-else-if=\"item.answerType === 'text_fill'\" :order-index=\"index\" :title=\"item.title\"\n :is-save=\"!item.isRealCanDel\" :is-set=\"item.hasSet || false\" :answer-list=\"item.answers\"\n :analysis=\"item.analysis\" :show-action=\"!isPreview\" :is-edit=\"item.isEdit || false\"\n :exam-expand=\"item.examExpand\" :exam-answer-setting-v-o=\"item.examAnswerSettingVO || {}\"\n :examAnswerRelationType=\"item.examAnswerRelationType\" :exam-rich-text-content=\"item.examRichTextContent\"\n @move=\"(type: 'up' | 'down') => move(index, type)\" @delete=\"deleteSubject(index)\"\n @save=\"(item: any) => saveSubject(index, item)\" @edit=\"item.isEdit = true\"\n @add=\"(type: string) => addSubject(type, index, null)\" />\n <SubjectRichText v-else-if=\"item.answerType === 'rich_text'\" :order-index=\"index\"\n :richTextContent=\"item.richTextContent\" :is-set=\"item.hasSet || false\" :is-save=\"!item.isRealCanDel\"\n :is-edit=\"item.isEdit || false\" :show-action=\"!isPreview\" @move=\"(type: 'up' | 'down') => move(index, type)\"\n @delete=\"deleteSubject(index)\" :examAnswerRelationType=\"item.examAnswerRelationType\"\n @save=\"(item: any) => saveSubject(index, item)\" @edit=\"item.isEdit = true\"\n @add=\"(type: string) => addSubject(type, index, null)\" />\n <SubjectPageEnd v-else-if=\"item.answerType === 'page_end'\" :total-page=\"totalPageIndex()\"\n :current-page-index=\"currentPageIndex()(item.id)\" :item=\"item\" :order-index=\"index\"\n :is-edit=\"item.isEdit || false\" :is-set=\"item.hasSet || false\" :is-save=\"!item.isRealCanDel\"\n :examAnswerRelationType=\"item.examAnswerRelationType\" @move=\"(type: 'up' | 'down') => move(index, type)\"\n @delete=\"deleteSubject(index)\" @save=\"(item: any) => saveSubject(index, item)\" @edit=\"item.isEdit = true\"\n @add=\"(type: string) => addSubject(type, index, null)\" />\n </div>\n </div>\n</template>\n"],"names":["totalPageIndex"],"mappings":"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"}
1
+ {"version":3,"file":"subject-list.vue.js","sources":["../../../../../../packages/components/src/subject-list/src/subject-list.vue"],"sourcesContent":["<script setup lang=\"ts\">\n// import isEqual from 'lodash/isEqual'\nimport SubjectBlankFill from './components/subject-blank-fill.vue'\nimport SubjectScale from './components/subject-scale.vue'\nimport SubjectSingle from './components/subject-single.vue'\nimport SubjectTextFill from './components/subject-text-fill.vue'\nimport SubjectRichText from './components/SubjectRichText.vue'\nimport SubjectPageEnd from './components/SubjectPageEnd.vue'\n\ndefineOptions({\n name: 'QxsSubjectList',\n})\n\nconst props = defineProps<{\n subjectList: any[]\n isPreview: boolean\n}>()\nconst currentList = ref([] as any)\nconst emits = defineEmits(['setRelation'])\n\nconst attrs = useAttrs()\n\ndefineExpose({\n addSubject,\n currentList,\n uploadExcel,\n addExam,\n setAnswerRelation,\n})\n\nfunction totalPageIndex() {\n let totalPageIndex = 0\n let isLastPageIndex = false\n currentList.value.map((v: any, i: number, arr: any) => {\n if (v.answerType === 'page_end') {\n totalPageIndex++\n isLastPageIndex = i === arr.length - 1\n }\n })\n // 假设最后是一个分页器认为是最后一页\n return isLastPageIndex ? totalPageIndex : totalPageIndex + 1\n}\n\nfunction currentPageIndex() {\n return (currentId: any) => {\n const currentPageList = currentList.value.filter(\n (v: any) => v.answerType === 'page_end'\n )\n let currentIndex = 0\n currentPageList.forEach((c: any, i: number) => {\n if (currentId === c.id) {\n currentIndex = i + 1\n }\n })\n return currentIndex\n }\n}\n\nfunction addSubject(type: string, index: number, examAnswerRelationType: number | null) {\n console.log(index, 'index')\n if (index || index === 0) {\n currentList.value.splice(index + 1, 0, {\n answerType: type,\n analysis: '',\n scaleQuestionList: [],\n isSave: false,\n isEdit: true,\n isRealCanDel: true,\n hasSet: false,\n examAnswerRelationType: examAnswerRelationType,\n })\n }\n else {\n currentList.value.push({\n answerType: type,\n analysis: '',\n scaleQuestionList: [],\n isSave: false,\n isEdit: true,\n isRealCanDel: true,\n hasSet: false,\n examAnswerRelationType: examAnswerRelationType,\n })\n }\n}\n\nfunction setAnswerRelation(answerRelations: any, examId: string, examAnswerId: string, ) {\n // 给examId设置答案关联\n if (answerRelations.length) {\n currentList.value.forEach((c: any) => {\n if (c.examId === examId) {\n c.answer.forEach((c: any) => {\n if (c.examAnswerId === examAnswerId) {\n c.answerRelations = answerRelations\n }\n })\n }\n })\n }\n}\n\nfunction addExam(item: any) {\n const answerList: any[] = []\n item.answers?.map((v: any) => {\n answerList.push({\n ...v,\n title: v.answer,\n answerId: v.examAnswerId,\n })\n })\n currentList.value.push({\n ...item,\n examId: '',\n answerType: item.richTextContent? 'rich_text': item.examTypeEnum,\n answers:answerList,\n isSave: false,\n isEdit: true,\n isRealCanDel: true,\n hasSet: false,\n })\n}\n\nfunction uploadExcel(list: any[]) {\n currentList.value = currentList.value.concat(list)\n}\n\nfunction move(index: number, type: 'up' | 'down') {\n if (type === 'up' && index > 0) {\n const [item] = currentList.value.splice(index, 1)\n currentList.value.splice(index - 1, 0, item)\n }\n else if (type === 'down' && index < currentList.value.length - 1) {\n const [item] = currentList.value.splice(index, 1)\n currentList.value.splice(index + 1, 0, item)\n }\n}\n\nfunction saveSubject(index: number, item: any) {\n for (let idx = 0; idx < currentList.value.length; idx++) {\n if (index === idx) {\n currentList.value[index] =\n {\n ...currentList.value[index],\n ...item,\n isEdit: false,\n }\n }\n }\n}\n\nfunction deleteSubject(index: number) {\n currentList.value.splice(index, 1)\n ElMessage.success('删除成功')\n}\n\nfunction setRelation(examId: string, examAnswers: any) {\n emits('setRelation', examId, examAnswers)\n}\n\nwatch(() => props.subjectList, (newList: any) => {\n if (newList) {\n currentList.value = [...newList]\n }\n}, { immediate: true })\n</script>\n\n<template>\n <div class=\"subject-list-wrapper\">\n <div v-for=\"(item, index) in currentList\" :key=\"index + item.examId || item.title\">\n <template v-if=\"['single', 'multiple', 'sort'].includes(item.answerType)\">\n <SubjectSingle v-bind=\"attrs\" :order-index=\"index\" :title=\"item.title\" :type=\"item.answerType\" :is-save=\"!item.isRealCanDel\"\n :id=\"item.examId\"\n :is-set=\"item.hasSet || false\" :answer-list=\"item.answers\" :analysis=\"item.analysis\"\n :least-answer-count=\"item.leastAnswerCount\" :is-edit=\"item.isEdit || false\" :show-action=\"!isPreview\"\n :exam-expand=\"item.examExpand\" :exam-rich-text-content=\"item.examRichTextContent\"\n :examAnswerRelationType=\"item.examAnswerRelationType\" @setRelation=\"setRelation\"\n @move=\"(type: 'up' | 'down') => move(index, type)\" @delete=\"deleteSubject(index)\"\n @save=\"item => saveSubject(index, item)\" @edit=\"item.isEdit = true\"\n @add=\"(type, examAnswerRelationType) => addSubject(type, index, examAnswerRelationType)\" />\n </template>\n <SubjectScale v-bind=\"attrs\" v-else-if=\"item.answerType === 'scale'\" :order-index=\"index\" :title=\"item.title\"\n :is-save=\"!item.isRealCanDel\" :is-set=\"item.hasSet || false\" :answer-list=\"item.answers\"\n :analysis=\"item.analysis\" :is-edit=\"item.isEdit || false\" :scale-question-list=\"item.scaleQuestionList\"\n :show-action=\"!isPreview\" :exam-rich-text-content=\"item.examRichTextContent\"\n :examAnswerRelationType=\"item.examAnswerRelationType\" @move=\"(type: 'up' | 'down') => move(index, type)\"\n @delete=\"deleteSubject(index)\" @save=\"(item: any) => saveSubject(index, item)\" @edit=\"item.isEdit = true\"\n @add=\"(type: string) => addSubject(type, index, null)\" />\n <SubjectBlankFill v-bind=\"attrs\" v-else-if=\"item.answerType === 'blank_fill'\" :order-index=\"index\" :title=\"item.title\"\n :is-save=\"!item.isRealCanDel\" :is-set=\"item.hasSet || false\" :answer-list=\"item.answers\"\n :analysis=\"item.analysis\" :show-action=\"!isPreview\" :is-edit=\"item.isEdit || false\"\n :exam-answer-setting-v-o=\"item.examAnswerSettingVO || {}\" :exam-rich-text-content=\"item.examRichTextContent\"\n :examAnswerRelationType=\"item.examAnswerRelationType\" @move=\"(type: 'up' | 'down') => move(index, type)\"\n @delete=\"deleteSubject(index)\" @save=\"(item: any) => saveSubject(index, item)\" @edit=\"item.isEdit = true\"\n @add=\"(type: string) => addSubject(type, index, null)\" />\n <SubjectTextFill v-bind=\"attrs\" v-else-if=\"item.answerType === 'text_fill'\" :order-index=\"index\" :title=\"item.title\"\n :is-save=\"!item.isRealCanDel\" :is-set=\"item.hasSet || false\" :answer-list=\"item.answers\"\n :analysis=\"item.analysis\" :show-action=\"!isPreview\" :is-edit=\"item.isEdit || false\"\n :exam-expand=\"item.examExpand\" :exam-answer-setting-v-o=\"item.examAnswerSettingVO || {}\"\n :examAnswerRelationType=\"item.examAnswerRelationType\" :exam-rich-text-content=\"item.examRichTextContent\"\n @move=\"(type: 'up' | 'down') => move(index, type)\" @delete=\"deleteSubject(index)\"\n @save=\"(item: any) => saveSubject(index, item)\" @edit=\"item.isEdit = true\"\n @add=\"(type: string) => addSubject(type, index, null)\" />\n <SubjectRichText \n v-bind=\"attrs\"\n v-else-if=\"item.answerType === 'rich_text'\" :order-index=\"index\"\n :richTextContent=\"item.richTextContent\" :is-set=\"item.hasSet || false\" :is-save=\"!item.isRealCanDel\"\n :is-edit=\"item.isEdit || false\" :show-action=\"!isPreview\" @move=\"(type: 'up' | 'down') => move(index, type)\"\n @delete=\"deleteSubject(index)\" :examAnswerRelationType=\"item.examAnswerRelationType\"\n @save=\"(item: any) => saveSubject(index, item)\" @edit=\"item.isEdit = true\"\n @add=\"(type: string) => addSubject(type, index, null)\" />\n <SubjectPageEnd v-else-if=\"item.answerType === 'page_end'\" :total-page=\"totalPageIndex()\"\n :current-page-index=\"currentPageIndex()(item.id)\" :item=\"item\" :order-index=\"index\"\n :is-edit=\"item.isEdit || false\" :is-set=\"item.hasSet || false\" :is-save=\"!item.isRealCanDel\"\n :examAnswerRelationType=\"item.examAnswerRelationType\" @move=\"(type: 'up' | 'down') => move(index, type)\"\n @delete=\"deleteSubject(index)\" @save=\"(item: any) => saveSubject(index, item)\" @edit=\"item.isEdit = true\"\n @add=\"(type: string) => addSubject(type, index, null)\" />\n </div>\n </div>\n</template>\n"],"names":["totalPageIndex","c"],"mappings":"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"}
package/lib/index.js CHANGED
@@ -3,31 +3,29 @@
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  var defaults = require('./src/defaults.js');
6
- var index = require('./src/data-chart/index.js');
7
- var index$1 = require('./src/file-upload/index.js');
8
- var index$2 = require('./src/fixed-action-bar/index.js');
9
- var index$3 = require('./src/image-upload/index.js');
10
- var index$4 = require('./src/photo-crop-tool/index.js');
11
- var index$5 = require('./src/subject-action/index.js');
12
- var index$6 = require('./src/subject-layout/index.js');
13
- var index$7 = require('./src/subject-list/index.js');
14
- var index$8 = require('./src/subject-type/index.js');
15
- var index$9 = require('./src/tiny-mce-editor/index.js');
6
+ var index = require('./src/file-upload/index.js');
7
+ var index$1 = require('./src/fixed-action-bar/index.js');
8
+ var index$2 = require('./src/image-upload/index.js');
9
+ var index$3 = require('./src/photo-crop-tool/index.js');
10
+ var index$4 = require('./src/subject-action/index.js');
11
+ var index$5 = require('./src/subject-layout/index.js');
12
+ var index$6 = require('./src/subject-list/index.js');
13
+ var index$7 = require('./src/subject-type/index.js');
14
+ var index$8 = require('./src/tiny-mce-editor/index.js');
16
15
 
17
16
  const install = defaults.default.install;
18
17
  const version = defaults.default.version;
19
18
 
20
19
  exports.default = defaults.default;
21
- exports.QxsDataChart = index.QxsDataChart;
22
- exports.QxsFileUpload = index$1.QxsFileUpload;
23
- exports.QxsFixedActionBar = index$2.QxsFixedActionBar;
24
- exports.QxsImageUpload = index$3.QxsImageUpload;
25
- exports.QxsPhotoCropTool = index$4.QxsPhotoCropTool;
26
- exports.QxsSubjectAction = index$5.QxsSubjectAction;
27
- exports.QxsSubjectLayout = index$6.QxsSubjectLayout;
28
- exports.QxsSubjectList = index$7.QxsSubjectList;
29
- exports.QxsSubjectType = index$8.QxsSubjectType;
30
- exports.QxsTinyMceEditor = index$9.QxsTinyMceEditor;
20
+ exports.QxsFileUpload = index.QxsFileUpload;
21
+ exports.QxsFixedActionBar = index$1.QxsFixedActionBar;
22
+ exports.QxsImageUpload = index$2.QxsImageUpload;
23
+ exports.QxsPhotoCropTool = index$3.QxsPhotoCropTool;
24
+ exports.QxsSubjectAction = index$4.QxsSubjectAction;
25
+ exports.QxsSubjectLayout = index$5.QxsSubjectLayout;
26
+ exports.QxsSubjectList = index$6.QxsSubjectList;
27
+ exports.QxsSubjectType = index$7.QxsSubjectType;
28
+ exports.QxsTinyMceEditor = index$8.QxsTinyMceEditor;
31
29
  exports.install = install;
32
30
  exports.version = version;
33
31
  //# sourceMappingURL=index.js.map
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../packages/components/index.ts"],"sourcesContent":["import installer from './src/defaults'\n\nexport * from './src/components'\n\nexport const install = installer.install\nexport const version = installer.version\nexport default installer\n"],"names":["install","installer","version"],"mappings":";;;;;;;;;;;;;;;;AAIaA,MAAAA,UAAUC,gBAAU,CAAAD;AACpBE,MAAAA,UAAUD,gBAAU,CAAAC;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":["../../../packages/components/index.ts"],"sourcesContent":["import installer from './src/defaults'\n\nexport * from './src/components'\n\nexport const install = installer.install\nexport const version = installer.version\nexport default installer\n"],"names":["install","installer","version"],"mappings":";;;;;;;;;;;;;;;AAIaA,MAAAA,UAAUC,gBAAU,CAAAD;AACpBE,MAAAA,UAAUD,gBAAU,CAAAC;;;;;;;;;;;;;;;"}
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var version = "0.0.16";
3
+ var version = "0.0.18";
4
4
 
5
5
  exports.version = version;
6
6
  //# sourceMappingURL=package.json.js.map
@@ -1,26 +1,24 @@
1
1
  'use strict';
2
2
 
3
- var index = require('./data-chart/index.js');
4
- var index$1 = require('./file-upload/index.js');
5
- var index$2 = require('./fixed-action-bar/index.js');
6
- var index$3 = require('./image-upload/index.js');
7
- var index$4 = require('./photo-crop-tool/index.js');
8
- var index$5 = require('./subject-action/index.js');
9
- var index$6 = require('./subject-layout/index.js');
10
- var index$7 = require('./subject-list/index.js');
11
- var index$8 = require('./subject-type/index.js');
12
- var index$9 = require('./tiny-mce-editor/index.js');
3
+ var index = require('./file-upload/index.js');
4
+ var index$1 = require('./fixed-action-bar/index.js');
5
+ var index$2 = require('./image-upload/index.js');
6
+ var index$3 = require('./photo-crop-tool/index.js');
7
+ var index$4 = require('./subject-action/index.js');
8
+ var index$5 = require('./subject-layout/index.js');
9
+ var index$6 = require('./subject-list/index.js');
10
+ var index$7 = require('./subject-type/index.js');
11
+ var index$8 = require('./tiny-mce-editor/index.js');
13
12
 
14
13
 
15
14
 
16
- exports.QxsDataChart = index.QxsDataChart;
17
- exports.QxsFileUpload = index$1.QxsFileUpload;
18
- exports.QxsFixedActionBar = index$2.QxsFixedActionBar;
19
- exports.QxsImageUpload = index$3.QxsImageUpload;
20
- exports.QxsPhotoCropTool = index$4.QxsPhotoCropTool;
21
- exports.QxsSubjectAction = index$5.QxsSubjectAction;
22
- exports.QxsSubjectLayout = index$6.QxsSubjectLayout;
23
- exports.QxsSubjectList = index$7.QxsSubjectList;
24
- exports.QxsSubjectType = index$8.QxsSubjectType;
25
- exports.QxsTinyMceEditor = index$9.QxsTinyMceEditor;
15
+ exports.QxsFileUpload = index.QxsFileUpload;
16
+ exports.QxsFixedActionBar = index$1.QxsFixedActionBar;
17
+ exports.QxsImageUpload = index$2.QxsImageUpload;
18
+ exports.QxsPhotoCropTool = index$3.QxsPhotoCropTool;
19
+ exports.QxsSubjectAction = index$4.QxsSubjectAction;
20
+ exports.QxsSubjectLayout = index$5.QxsSubjectLayout;
21
+ exports.QxsSubjectList = index$6.QxsSubjectList;
22
+ exports.QxsSubjectType = index$7.QxsSubjectType;
23
+ exports.QxsTinyMceEditor = index$8.QxsTinyMceEditor;
26
24
  //# sourceMappingURL=components.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"components.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"components.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;"}
@@ -140,7 +140,7 @@ var _sfc_main = /* @__PURE__ */ vue.defineComponent({
140
140
  }
141
141
  }
142
142
  function setRelation(item) {
143
- emits("setRelation", props.id, item.answerId);
143
+ emits("setRelation", props.id, item);
144
144
  }
145
145
  function deleteRichText() {
146
146
  showRichText.value = false;
@@ -1 +1 @@
1
- {"version":3,"file":"subject-single.vue.js","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 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 id?: string\n}>()\nconst emits = defineEmits(['move', 'save', 'delete', 'edit', 'add', 'setRelation'])\n\nconst attrs = useAttrs()\n\nconst answersIndex = ref(0)\nconst isKey = ref(false)\nconst answerCheckType = ref(2)\nconst answers = ref<{\n title: string\n isCorrect: boolean\n orderIndex?: number\n resultItem?: 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}, {\n title: '',\n isCorrect: false,\n\n}, {\n title: '',\n isCorrect: false,\n}])\n\nconst leastAnswerCount = ref()\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})\n\nfunction addAnswer() {\n if (props.isSave) {\n return\n }\n answers.value.push({\n title: '',\n isCorrect: false,\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) => {\n if (answer !== it) {\n answer.isCorrect = false\n }\n })\n }\n it.isCorrect = event\n } else if (props.type === 'multiple') {\n // 多选题:可以有多个正确答案\n it.isCorrect = event\n }\n}\n\nfunction setRelation(item: any) {\n emits('setRelation', props.id, item.answerId)\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 let isSetCorrectAnswer = false\n let examAnswerRelationType = null\n let correctAnswerCount = 0\n if (props.type === 'multiple' || props.type === 'single') {\n answers.value.forEach((v: any, i: number) => {\n if (!v.title) {\n msg += `选项${String.fromCharCode(65 + i)}未填写。`\n }\n if (v.isCorrect) {\n isSetCorrectAnswer = true\n correctAnswerCount++\n }\n if (v.resultItem) {\n examAnswerRelationType = 1\n }\n if (v.answerRelations?.length) {\n examAnswerRelationType = 2\n }\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 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,\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.answerList && props.answerList.length) {\n answers.value = props.answerList\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}\n\nfunction onCloseResult() {\n showRichContent.value = false\n resultItem.value = ''\n}\n\nfunction onOpenResult(i: number) {\n answersIndex.value = i\n console.log(answers.value[i].resultItem, 1);\n resultItem.value = answers.value[i].resultItem || ''\n showRichContent.value = true\n}\n\nfunction onSaveResult(i: number) {\n answers.value[i].resultItem = resultItem.value || ''\n showRichContent.value = false\n}\n\nfunction setKey(key: boolean) {\n isKey.value = key\n}\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})\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)\">({{ titlePlaceholder }}{{ leastAnswerCount ? `至少选${leastAnswerCount}项${type === 'sort' ? '并排序' : ''}` : '' }})</span>\n </span>\n </div>\n <div v-if=\"showRichText\">\n <div v-html=\"richText\" />\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 </el-radio>\n </template>\n </div>\n </div>\n </template>\n <template v-if=\"isEdit\" #edit>\n <div class=\"flex\" :class=\"[{ 'margin-bottom': showRichText }]\">\n <div class=\"label flex flex-justify-center\">\n <span>题目:</span>\n </div>\n <div style=\"flex: 1;\">\n <el-input\n v-model=\"title\"\n type=\"textarea\"\n :rows=\"2\"\n :placeholder=\"`【${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: 120px;\"\n placeholder=\"至少选择几项\"\n :disabled=\"isSave\"\n >\n <el-option\n v-for=\"item in leastAnswerOptions\"\n :key=\"item.value\"\n :value=\"item.value\"\n >\n {{ item.label }}\n </el-option>\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=\"order\">{{ 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 :value=\"item.isCorrect\"\n :class=\"[{ 'is-correct': item.isCorrect }]\"\n :disabled=\"isSave\"\n style=\"margin-left: 10px;\"\n @change=\"(event) => 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\"\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\"\n type=\"primary\"\n class=\"margin-left-10\"\n @click=\"setRelation(item)\"\n >\n <span>{{ item.answerRelations?.length ? `关联了${item.answerRelations?.length}项` : '关联检查' }}</span>\n </el-link>\n </div>\n </div>\n <div v-if=\"type === 'sort'\" class=\"margin-bottom flex flex-items-center\">\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 mode=\"multiple\"\n style=\"width: 360px;\"\n placeholder=\"请按顺序选择排序答案\"\n :show-arrow=\"true\"\n >\n <!-- :options=\"[...Array(answers.length)].map((_, i) => ({ value: String.fromCharCode(65 + i) }))\" -->\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 v-if=\"showRichText\" class=\"margin-bottom flex\">\n <div class=\"label flex flex-justify-center\">\n <span>富文本:</span>\n </div>\n <div style=\"flex: 1;\">\n <TinyMceEditor v-model:model-value=\"richText\" v-bind=\"attrs\" style=\"width: 100%;\" />\n <div class=\"flex flex-justify-end\">\n <el-link\n type=\"danger\"\n @click=\"deleteRichText\"\n >\n 删除富文本\n </el-link>\n </div>\n </div>\n </div>\n </template>\n <SubjectAction\n v-if=\"showAction\"\n :is-edit=\"isEdit\"\n :is-set=\"isSet\"\n :isKey=\"isKey\"\n :examAnswerRelationType=\"props.examAnswerRelationType\"\n :answerCheckType=\"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 @onShowRichText=\"showRichText = true\"\n @setKey=\"setKey\"\n @setAnswerSetting=\"setAnswerSetting\"\n />\n </SubjectLayout>\n <el-dialog\n v-model=\"showRichContent\"\n title=\"添加结果\"\n class=\"customize-dialog\"\n >\n <TinyMceEditor v-model:model-value=\"resultItem\" v-bind=\"attrs\" style=\"width: 100%;\" />\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(answersIndex)\"\n >\n 保存\n </el-button>\n </template>\n </el-dialog>\n </div>\n</template>\n"],"names":["useNamespace"],"mappings":"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"}
1
+ {"version":3,"file":"subject-single.vue.js","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 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 id?: string\n}>()\nconst emits = defineEmits(['move', 'save', 'delete', 'edit', 'add', 'setRelation'])\n\nconst attrs = useAttrs()\n\nconst answersIndex = ref(0)\nconst isKey = ref(false)\nconst answerCheckType = ref(2)\nconst answers = ref<{\n title: string\n isCorrect: boolean\n orderIndex?: number\n resultItem?: 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}, {\n title: '',\n isCorrect: false,\n\n}, {\n title: '',\n isCorrect: false,\n}])\n\nconst leastAnswerCount = ref()\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})\n\nfunction addAnswer() {\n if (props.isSave) {\n return\n }\n answers.value.push({\n title: '',\n isCorrect: false,\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) => {\n if (answer !== it) {\n answer.isCorrect = false\n }\n })\n }\n it.isCorrect = event\n } else if (props.type === 'multiple') {\n // 多选题:可以有多个正确答案\n it.isCorrect = event\n }\n}\n\nfunction setRelation(item: any) {\n emits('setRelation', props.id, 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 let msg = ''\n let isSetCorrectAnswer = false\n let examAnswerRelationType = null\n let correctAnswerCount = 0\n if (props.type === 'multiple' || props.type === 'single') {\n answers.value.forEach((v: any, i: number) => {\n if (!v.title) {\n msg += `选项${String.fromCharCode(65 + i)}未填写。`\n }\n if (v.isCorrect) {\n isSetCorrectAnswer = true\n correctAnswerCount++\n }\n if (v.resultItem) {\n examAnswerRelationType = 1\n }\n if (v.answerRelations?.length) {\n examAnswerRelationType = 2\n }\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 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,\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.answerList && props.answerList.length) {\n answers.value = props.answerList\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}\n\nfunction onCloseResult() {\n showRichContent.value = false\n resultItem.value = ''\n}\n\nfunction onOpenResult(i: number) {\n answersIndex.value = i\n console.log(answers.value[i].resultItem, 1);\n resultItem.value = answers.value[i].resultItem || ''\n showRichContent.value = true\n}\n\nfunction onSaveResult(i: number) {\n answers.value[i].resultItem = resultItem.value || ''\n showRichContent.value = false\n}\n\nfunction setKey(key: boolean) {\n isKey.value = key\n}\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})\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)\">({{ titlePlaceholder }}{{ leastAnswerCount ? `至少选${leastAnswerCount}项${type === 'sort' ? '并排序' : ''}` : '' }})</span>\n </span>\n </div>\n <div v-if=\"showRichText\">\n <div v-html=\"richText\" />\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 </el-radio>\n </template>\n </div>\n </div>\n </template>\n <template v-if=\"isEdit\" #edit>\n <div class=\"flex\" :class=\"[{ 'margin-bottom': showRichText }]\">\n <div class=\"label flex flex-justify-center\">\n <span>题目:</span>\n </div>\n <div style=\"flex: 1;\">\n <el-input\n v-model=\"title\"\n type=\"textarea\"\n :rows=\"2\"\n :placeholder=\"`【${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: 120px;\"\n placeholder=\"至少选择几项\"\n :disabled=\"isSave\"\n >\n <el-option\n v-for=\"item in leastAnswerOptions\"\n :key=\"item.value\"\n :value=\"item.value\"\n >\n {{ item.label }}\n </el-option>\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=\"order\">{{ 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 :value=\"item.isCorrect\"\n :class=\"[{ 'is-correct': item.isCorrect }]\"\n :disabled=\"isSave\"\n style=\"margin-left: 10px;\"\n @change=\"(event) => 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\"\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\"\n type=\"primary\"\n class=\"margin-left-10\"\n @click=\"setRelation(item)\"\n >\n <span>{{ item.answerRelations?.length ? `关联了${item.answerRelations?.length}项` : '关联检查' }}</span>\n </el-link>\n </div>\n </div>\n <div v-if=\"type === 'sort'\" class=\"margin-bottom flex flex-items-center\">\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 mode=\"multiple\"\n style=\"width: 360px;\"\n placeholder=\"请按顺序选择排序答案\"\n :show-arrow=\"true\"\n >\n <!-- :options=\"[...Array(answers.length)].map((_, i) => ({ value: String.fromCharCode(65 + i) }))\" -->\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 v-if=\"showRichText\" class=\"margin-bottom flex\">\n <div class=\"label flex flex-justify-center\">\n <span>富文本:</span>\n </div>\n <div style=\"flex: 1;\">\n <TinyMceEditor v-model:model-value=\"richText\" v-bind=\"attrs\" style=\"width: 100%;\" />\n <div class=\"flex flex-justify-end\">\n <el-link\n type=\"danger\"\n @click=\"deleteRichText\"\n >\n 删除富文本\n </el-link>\n </div>\n </div>\n </div>\n </template>\n <SubjectAction\n v-if=\"showAction\"\n :is-edit=\"isEdit\"\n :is-set=\"isSet\"\n :isKey=\"isKey\"\n :examAnswerRelationType=\"props.examAnswerRelationType\"\n :answerCheckType=\"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 @onShowRichText=\"showRichText = true\"\n @setKey=\"setKey\"\n @setAnswerSetting=\"setAnswerSetting\"\n />\n </SubjectLayout>\n <el-dialog\n v-model=\"showRichContent\"\n title=\"添加结果\"\n class=\"customize-dialog\"\n >\n <TinyMceEditor v-model:model-value=\"resultItem\" v-bind=\"attrs\" style=\"width: 100%;\" />\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(answersIndex)\"\n >\n 保存\n </el-button>\n </template>\n </el-dialog>\n </div>\n</template>\n"],"names":["useNamespace"],"mappings":"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"}