@qxs-bns/components 0.0.45 → 0.0.46

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 (110) hide show
  1. package/es/_virtual/_plugin-vue_export-helper.mjs +1 -1
  2. package/es/node_modules/.pnpm/style-inject@0.3.0/node_modules/style-inject/dist/style-inject.es.mjs +1 -1
  3. package/es/package.json.mjs +1 -1
  4. package/es/src/data-chart/src/components/area.vue2.mjs +1 -1
  5. package/es/src/data-chart/src/components/bar.vue.mjs +1 -1
  6. package/es/src/data-chart/src/components/card.vue2.mjs +1 -1
  7. package/es/src/data-chart/src/components/empty.vue.mjs +1 -1
  8. package/es/src/data-chart/src/components/funnel.vue.mjs +1 -1
  9. package/es/src/data-chart/src/components/line.vue2.mjs +1 -1
  10. package/es/src/data-chart/src/components/pie.vue.mjs +1 -1
  11. package/es/src/data-chart/src/components/radar.vue.mjs +1 -1
  12. package/es/src/data-chart/src/components/scatter-simple.vue.mjs +1 -1
  13. package/es/src/data-chart/src/components/scatter.vue.mjs +1 -1
  14. package/es/src/data-chart/src/components/table.vue.mjs +1 -1
  15. package/es/src/data-chart/src/data-chart.vue.mjs +1 -1
  16. package/es/src/data-chart/src/utils/config.mjs +1 -1
  17. package/es/src/data-chart/src/utils/useCharts.mjs +1 -1
  18. package/es/src/file-upload/src/file-upload.vue.mjs +1 -1
  19. package/es/src/file-upload/src/file-upload.vue.mjs.map +1 -1
  20. package/es/src/fixed-action-bar/src/fixed-action-bar.vue.mjs +1 -1
  21. package/es/src/image-upload/src/image-upload.vue.mjs +1 -1
  22. package/es/src/image-upload/src/image-upload.vue.mjs.map +1 -1
  23. package/es/src/photo-crop-tool/src/composables.mjs +1 -1
  24. package/es/src/photo-crop-tool/src/photo-crop-tool.vue.mjs +1 -1
  25. package/es/src/subject-action/src/subject-action.vue.mjs +1 -1
  26. package/es/src/subject-action/src/subject-action.vue.mjs.map +1 -1
  27. package/es/src/subject-layout/src/subject-layout.vue.mjs +1 -1
  28. package/es/src/subject-list/src/components/SubjectPageEnd.vue.mjs +1 -1
  29. package/es/src/subject-list/src/components/SubjectRichText.vue.mjs +1 -1
  30. package/es/src/subject-list/src/components/subject-blank-fill.vue.mjs +1 -1
  31. package/es/src/subject-list/src/components/subject-blank-fill.vue.mjs.map +1 -1
  32. package/es/src/subject-list/src/components/subject-scale.vue.mjs +1 -1
  33. package/es/src/subject-list/src/components/subject-scale.vue.mjs.map +1 -1
  34. package/es/src/subject-list/src/components/subject-single.vue.mjs +1 -1
  35. package/es/src/subject-list/src/components/subject-single.vue.mjs.map +1 -1
  36. package/es/src/subject-list/src/components/subject-text-fill.vue.mjs +1 -1
  37. package/es/src/subject-list/src/components/subject-text-fill.vue.mjs.map +1 -1
  38. package/es/src/subject-list/src/subject-list.vue.mjs +1 -1
  39. package/es/src/subject-type/src/subject-type.vue.mjs +1 -1
  40. package/es/src/tiny-mce-editor/src/tiny-mce-editor.vue.mjs +1 -1
  41. package/es/src/withInstall.mjs +1 -1
  42. package/lib/_virtual/_plugin-vue_export-helper.cjs +1 -1
  43. package/lib/index.cjs +1 -1
  44. package/lib/node_modules/.pnpm/style-inject@0.3.0/node_modules/style-inject/dist/style-inject.es.cjs +1 -1
  45. package/lib/package.json.cjs +1 -1
  46. package/lib/src/components.cjs +1 -1
  47. package/lib/src/data-chart/index.cjs +1 -1
  48. package/lib/src/data-chart/src/components/area.vue2.cjs +1 -1
  49. package/lib/src/data-chart/src/components/area.vue3.cjs +1 -1
  50. package/lib/src/data-chart/src/components/bar.vue.cjs +1 -1
  51. package/lib/src/data-chart/src/components/card.vue2.cjs +1 -1
  52. package/lib/src/data-chart/src/components/empty.vue.cjs +1 -1
  53. package/lib/src/data-chart/src/components/funnel.vue.cjs +1 -1
  54. package/lib/src/data-chart/src/components/line.vue2.cjs +1 -1
  55. package/lib/src/data-chart/src/components/pie.vue.cjs +1 -1
  56. package/lib/src/data-chart/src/components/radar.vue.cjs +1 -1
  57. package/lib/src/data-chart/src/components/scatter-simple.vue.cjs +1 -1
  58. package/lib/src/data-chart/src/components/scatter.vue.cjs +1 -1
  59. package/lib/src/data-chart/src/components/table.vue.cjs +1 -1
  60. package/lib/src/data-chart/src/data-chart.vue.cjs +1 -1
  61. package/lib/src/data-chart/src/utils/useCharts.cjs +1 -1
  62. package/lib/src/file-upload/index.cjs +1 -1
  63. package/lib/src/file-upload/src/file-upload.vue.cjs +1 -1
  64. package/lib/src/file-upload/src/file-upload.vue.cjs.map +1 -1
  65. package/lib/src/fixed-action-bar/index.cjs +1 -1
  66. package/lib/src/fixed-action-bar/src/fixed-action-bar.vue.cjs +1 -1
  67. package/lib/src/image-upload/index.cjs +1 -1
  68. package/lib/src/image-upload/src/image-upload.vue.cjs +1 -1
  69. package/lib/src/image-upload/src/image-upload.vue.cjs.map +1 -1
  70. package/lib/src/make-installer.cjs +1 -1
  71. package/lib/src/photo-crop-tool/index.cjs +1 -1
  72. package/lib/src/photo-crop-tool/src/composables.cjs +1 -1
  73. package/lib/src/photo-crop-tool/src/photo-crop-tool.vue.cjs +1 -1
  74. package/lib/src/subject-action/index.cjs +1 -1
  75. package/lib/src/subject-action/src/subject-action.vue.cjs +1 -1
  76. package/lib/src/subject-action/src/subject-action.vue.cjs.map +1 -1
  77. package/lib/src/subject-layout/index.cjs +1 -1
  78. package/lib/src/subject-layout/src/subject-layout.vue.cjs +1 -1
  79. package/lib/src/subject-list/index.cjs +1 -1
  80. package/lib/src/subject-list/src/components/SubjectPageEnd.vue.cjs +1 -1
  81. package/lib/src/subject-list/src/components/SubjectRichText.vue.cjs +1 -1
  82. package/lib/src/subject-list/src/components/subject-blank-fill.vue.cjs +1 -1
  83. package/lib/src/subject-list/src/components/subject-blank-fill.vue.cjs.map +1 -1
  84. package/lib/src/subject-list/src/components/subject-scale.vue.cjs +1 -1
  85. package/lib/src/subject-list/src/components/subject-scale.vue.cjs.map +1 -1
  86. package/lib/src/subject-list/src/components/subject-single.vue.cjs +1 -1
  87. package/lib/src/subject-list/src/components/subject-single.vue.cjs.map +1 -1
  88. package/lib/src/subject-list/src/components/subject-text-fill.vue.cjs +1 -1
  89. package/lib/src/subject-list/src/components/subject-text-fill.vue.cjs.map +1 -1
  90. package/lib/src/subject-list/src/subject-list.vue.cjs +1 -1
  91. package/lib/src/subject-type/index.cjs +1 -1
  92. package/lib/src/subject-type/src/subject-type.vue.cjs +1 -1
  93. package/lib/src/tiny-mce-editor/index.cjs +1 -1
  94. package/lib/src/tiny-mce-editor/src/tiny-mce-editor.vue.cjs +1 -1
  95. package/lib/src/withInstall.cjs +1 -1
  96. package/package.json +2 -1
  97. package/theme-chalk/file-upload.css +1 -1
  98. package/theme-chalk/image-upload.css +1 -1
  99. package/theme-chalk/index.css +1 -1
  100. package/theme-chalk/subject-action.css +1 -1
  101. package/theme-chalk/subject-list.css +1 -1
  102. package/theme-chalk/subject-type.css +1 -1
  103. package/types/src/file-upload/src/file-upload.vue.d.ts.map +1 -1
  104. package/types/src/image-upload/src/image-upload.vue.d.ts.map +1 -1
  105. package/types/src/subject-action/src/subject-action.vue.d.ts.map +1 -1
  106. package/types/src/subject-list/src/components/subject-blank-fill.vue.d.ts.map +1 -1
  107. package/types/src/subject-list/src/components/subject-scale.vue.d.ts.map +1 -1
  108. package/types/src/subject-list/src/components/subject-single.vue.d.ts.map +1 -1
  109. package/types/src/subject-list/src/components/subject-text-fill.vue.d.ts.map +1 -1
  110. package/types/tsconfig.tsbuildinfo +1 -1
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("element-plus/es"),t=require("vue"),l=require("@element-plus/icons-vue"),i=require("@qxs-bns/hooks");const r={key:1,class:"image"},s={class:"mask"},a={class:"actions"},u={key:0,class:"el-upload__tip-text"},p={style:{display:"inline-block"}};var n=t.defineComponent({name:"QxsImageUpload",__name:"image-upload",props:{action:{type:String,required:!0},headers:{type:null,required:!1},data:{type:null,required:!1},name:{type:String,required:!1,default:"file"},url:{type:String,required:!1,default:""},size:{type:Number,required:!1,default:20},width:{type:Number,required:!1,default:160},accept:{type:String,required:!1,default:"image/jpeg,image/jpg,image/png,image/gif"},height:{type:Number,required:!1,default:90},placeholder:{type:String,required:!1,default:"点击上传图片"},notip:{type:Boolean,required:!1,default:!1},tipText:{type:String,required:!1},beforeUpload:{type:null,required:!1}},emits:["update:url","onSuccess"],setup(n,{emit:d}){const c=n,o=d,g=i.useNamespace("image-upload"),f=t.ref({imageViewerVisible:!1,progress:{preview:"",percent:0}}),y=t.computed((()=>c.accept.split(",").map((e=>e.split("/").pop()))));function h(){f.value.imageViewerVisible=!0}function m(){f.value.imageViewerVisible=!1}function q(){o("update:url","")}const v=t=>{const l=t.name.split(".").at(-1)??"",i=y.value.includes(l),r=t.size/1024/1024<c.size;return i?r?f.value.progress.preview=URL.createObjectURL(t):e.ElMessage.error(`上传图片大小不能超过 ${c.size}MB!`):e.ElMessage.error(`上传图片只支持${y.value.join(" / ")}格式!`),i&&r&&(!c.beforeUpload||c.beforeUpload(t))},x=e=>{f.value.progress.percent=~~e.percent},$=(...e)=>{f.value.progress.preview="",f.value.progress.percent=0,o("onSuccess",...e)};return(i,n)=>{const d=e.ElIcon,c=e.ElImage,o=e.ElProgress,w=e.ElUpload,_=e.ElImageViewer;return t.openBlock(),t.createElementBlock("div",{class:t.normalizeClass(t.unref(g).e("upload-container"))},[t.createVNode(w,{"show-file-list":!1,headers:i.headers,action:i.action,data:i.data,name:i.name,"before-upload":v,"on-progress":x,"on-success":$,drag:"",accept:i.accept,class:t.normalizeClass(t.unref(g).e("image-upload"))},{default:t.withCtx((()=>[""===i.url?(t.openBlock(),t.createBlock(c,{key:0,src:""===i.url?i.placeholder:i.url,style:t.normalizeStyle(`width:${i.width}px;height:${i.height}px;`),fit:"fill"},{error:t.withCtx((()=>[t.createElementVNode("div",{class:"image-slot",style:t.normalizeStyle(`width:${i.width}px;height:${i.height}px;`)},[t.createVNode(d,null,{default:t.withCtx((()=>[t.createVNode(t.unref(l.Plus))])),_:1}),t.createElementVNode("p",null,t.toDisplayString(i.placeholder),1)],4)])),_:1},8,["src","style"])):(t.openBlock(),t.createElementBlock("div",r,[t.createVNode(c,{src:i.url,style:t.normalizeStyle(`width:${i.width}px;height:${i.height}px;`),fit:"fill"},null,8,["src","style"]),t.createElementVNode("div",s,[t.createElementVNode("div",a,[t.createElementVNode("span",{title:"预览",onClick:t.withModifiers(h,["stop"])},[t.createVNode(d,null,{default:t.withCtx((()=>[t.createVNode(t.unref(l.ZoomIn))])),_:1})]),t.createElementVNode("span",{title:"移除",onClick:t.withModifiers(q,["stop"])},[t.createVNode(d,null,{default:t.withCtx((()=>[t.createVNode(t.unref(l.Delete))])),_:1})])])])])),t.withDirectives(t.createElementVNode("div",{class:"progress",style:t.normalizeStyle(`width:${i.width}px;height:${i.height}px;`)},[t.createVNode(c,{src:t.unref(f).progress.preview,style:t.normalizeStyle(`width:${i.width}px;height:${i.height}px;`),fit:"fill"},null,8,["src","style"]),t.createVNode(o,{type:"circle",width:.8*Math.min(i.width,i.height),percentage:t.unref(f).progress.percent},null,8,["width","percentage"])],4),[[t.vShow,""===i.url&&t.unref(f).progress.percent]])])),_:1},8,["headers","action","data","name","accept","class"]),i.notip?t.createCommentVNode("v-if",!0):(t.openBlock(),t.createElementBlock("div",u,[t.createElementVNode("div",p,t.toDisplayString(i.tipText||`上传图片支持 ${t.unref(y).join(" / ")} 格式,且图片大小不超过 ${i.size}MB,建议图片尺寸为 ${i.width}*${i.height}`),1)])),t.unref(f).imageViewerVisible?(t.openBlock(),t.createBlock(_,{key:1,"url-list":[i.url],teleported:"",onClose:m},null,8,["url-list"])):t.createCommentVNode("v-if",!0)],2)}}});exports.default=n;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("element-plus/es"),t=require("vue"),r=require("@element-plus/icons-vue"),l=require("@qxs-bns/hooks"),i=require("element-plus");const a={key:1,class:"image"},s={class:"mask"},o={class:"actions"},n={style:{display:"inline-block"}};var c=t.defineComponent({name:"QxsImageUpload",__name:"image-upload",props:{action:{type:String,required:!0},headers:{type:null,required:!1},data:{type:null,required:!1},name:{type:String,required:!1,default:"file"},url:{type:String,required:!1,default:""},size:{type:Number,required:!1,default:20},width:{type:Number,required:!1,default:160},accept:{type:String,required:!1,default:"image/jpeg,image/jpg,image/png,image/gif"},height:{type:Number,required:!1,default:90},placeholder:{type:String,required:!1,default:"点击上传图片"},notip:{type:Boolean,required:!1,default:!1},tipText:{type:String,required:!1},beforeUpload:{type:null,required:!1}},emits:["update:url","onSuccess"],setup(c,{emit:p}){const u=c,d=p,m=l.useNamespace("image-upload"),h=i.useNamespace("image-upload"),g=t.ref({imageViewerVisible:!1,progress:{preview:"",percent:0}}),f=t.computed((()=>u.accept.split(",").map((e=>e.split("/").pop()))));function y(){g.value.imageViewerVisible=!0}function w(){g.value.imageViewerVisible=!1}function v(){d("update:url","")}const V=t=>{const r=t.name.split(".").at(-1)??"",l=f.value.includes(r),i=t.size/1024/1024<u.size;return l?i?g.value.progress.preview=URL.createObjectURL(t):e.ElMessage.error(`上传图片大小不能超过 ${u.size}MB!`):e.ElMessage.error(`上传图片只支持${f.value.join(" / ")}格式!`),l&&i&&(!u.beforeUpload||u.beforeUpload(t))},N=e=>{g.value.progress.percent=~~e.percent},x=(...e)=>{g.value.progress.preview="",g.value.progress.percent=0,d("onSuccess",...e)};return(l,i)=>{const c=e.ElIcon,p=e.ElImage,u=e.ElProgress,d=e.ElUpload,k=e.ElImageViewer;return t.openBlock(),t.createElementBlock("div",{class:t.normalizeClass(t.unref(m).e("container"))},[t.createVNode(d,{"show-file-list":!1,headers:l.headers,action:l.action,data:l.data,name:l.name,"before-upload":V,"on-progress":N,"on-success":x,drag:"",accept:l.accept,class:t.normalizeClass(t.unref(m).e("control"))},{default:t.withCtx((()=>[""===l.url?(t.openBlock(),t.createBlock(p,{key:0,style:t.normalizeStyle(`width:${l.width}px;height:${l.height}px;`),src:""===l.url?l.placeholder:l.url,fit:"fill"},{error:t.withCtx((()=>[t.createElementVNode("div",{class:"image-slot",style:t.normalizeStyle(`width:${l.width}px;height:${l.height}px;`)},[t.createVNode(c,null,{default:t.withCtx((()=>[t.createVNode(t.unref(r.Plus))])),_:1}),t.createElementVNode("p",null,t.toDisplayString(l.placeholder),1)],4)])),_:1},8,["style","src"])):(t.openBlock(),t.createElementBlock("div",a,[t.createVNode(p,{src:l.url,style:t.normalizeStyle(`width:${l.width}px;height:${l.height}px;`),fit:"fill"},null,8,["src","style"]),t.createElementVNode("div",s,[t.createElementVNode("div",o,[t.createElementVNode("span",{title:"预览",onClick:t.withModifiers(y,["stop"])},[t.createVNode(c,null,{default:t.withCtx((()=>[t.createVNode(t.unref(r.ZoomIn))])),_:1})]),t.createElementVNode("span",{title:"移除",onClick:t.withModifiers(v,["stop"])},[t.createVNode(c,null,{default:t.withCtx((()=>[t.createVNode(t.unref(r.Delete))])),_:1})])])])])),t.withDirectives(t.createElementVNode("div",{class:"progress",style:t.normalizeStyle(`width:${l.width}px;height:${l.height}px;`)},[t.createVNode(p,{src:t.unref(g).progress.preview,style:t.normalizeStyle(`width:${l.width}px;height:${l.height}px;`),fit:"fill"},null,8,["src","style"]),t.createVNode(u,{type:"circle",width:.8*Math.min(l.width,l.height),percentage:t.unref(g).progress.percent},null,8,["width","percentage"])],4),[[t.vShow,""===l.url&&t.unref(g).progress.percent]])])),_:1},8,["headers","action","data","name","accept","class"]),l.notip?t.createCommentVNode("v-if",!0):(t.openBlock(),t.createElementBlock("div",{key:0,class:t.normalizeClass(t.unref(h).namespace.value+"-upload__tip-text")},[t.createElementVNode("div",n,t.toDisplayString(l.tipText||`上传图片支持 ${t.unref(f).join(" / ")} 格式,且图片大小不超过 ${l.size}MB,建议图片尺寸为 ${l.width}*${l.height}`),1)],2)),t.unref(g).imageViewerVisible?(t.openBlock(),t.createBlock(k,{key:1,"url-list":[l.url],teleported:"",onClose:w},null,8,["url-list"])):t.createCommentVNode("v-if",!0)],2)}}});exports.default=c;
2
2
  //# sourceMappingURL=image-upload.vue.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"image-upload.vue.cjs","sources":["../../../../../../packages/components/src/image-upload/src/image-upload.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { UploadFile, UploadFiles, UploadProps } from 'element-plus'\nimport { Delete, Plus, ZoomIn } from '@element-plus/icons-vue'\nimport { useNamespace } from '@qxs-bns/hooks'\n\ndefineOptions({\n name: 'QxsImageUpload',\n})\nconst props = withDefaults(\n defineProps<{\n action: UploadProps['action']\n headers?: UploadProps['headers']\n data?: UploadProps['data']\n name?: UploadProps['name']\n url?: string\n size?: number\n width?: number\n accept?: string\n height?: number\n placeholder?: string\n notip?: boolean\n tipText?: string\n beforeUpload?: UploadProps['beforeUpload']\n }>(),\n {\n name: 'file',\n url: '',\n size: 20,\n width: 160,\n height: 90,\n placeholder: '点击上传图片',\n notip: false,\n accept: 'image/jpeg,image/jpg,image/png,image/gif',\n },\n)\nconst emits = defineEmits<{\n 'update:url': [\n url: string,\n ]\n 'onSuccess': [\n res: any,\n uploadFile: UploadFile,\n uploadFiles: UploadFiles,\n ]\n}>()\n\nconst ns = useNamespace('image-upload')\n\nconst uploadData = ref({\n imageViewerVisible: false,\n progress: {\n preview: '',\n percent: 0,\n },\n})\n\nconst exts = computed(() => {\n return props.accept.split(',').map(ext => ext.split('/').pop())\n})\n\n// 预览\nfunction preview() {\n uploadData.value.imageViewerVisible = true\n}\n// 关闭预览\nfunction previewClose() {\n uploadData.value.imageViewerVisible = false\n}\n// 移除\nfunction remove() {\n emits('update:url', '')\n}\nconst handleBeforeUpload: UploadProps['beforeUpload'] = (file) => {\n const fileName = file.name.split('.')\n const fileExt = fileName.at(-1) ?? ''\n const isTypeOk = exts.value.includes(fileExt)\n const isSizeOk = file.size / 1024 / 1024 < props.size\n\n if (!isTypeOk) {\n ElMessage.error(`上传图片只支持${exts.value.join(' / ')}格式!`)\n }\n\n else if (!isSizeOk) {\n ElMessage.error(`上传图片大小不能超过 ${props.size}MB!`)\n }\n else {\n uploadData.value.progress.preview = URL.createObjectURL(file)\n }\n\n return isTypeOk && isSizeOk && (!props.beforeUpload || props.beforeUpload(file))\n}\nconst onProgress: UploadProps['onProgress'] = (file) => {\n uploadData.value.progress.percent = ~~file.percent\n}\nconst onSuccess: UploadProps['onSuccess'] = (...res) => {\n uploadData.value.progress.preview = ''\n uploadData.value.progress.percent = 0\n emits('onSuccess', ...res)\n}\n</script>\n\n<template>\n <div :class=\"ns.e('upload-container')\">\n <el-upload\n :show-file-list=\"false\"\n :headers=\"headers\"\n :action=\"action\"\n :data=\"data\"\n :name=\"name\"\n :before-upload=\"handleBeforeUpload\"\n :on-progress=\"onProgress\"\n :on-success=\"onSuccess\"\n drag\n :accept=\"accept\"\n :class=\"ns.e('image-upload')\"\n >\n <el-image\n v-if=\"url === ''\"\n :src=\"url === '' ? placeholder : url\"\n :style=\"`width:${width}px;height:${height}px;`\"\n fit=\"fill\"\n >\n <template #error>\n <div class=\"image-slot\" :style=\"`width:${width}px;height:${height}px;`\">\n <el-icon>\n <Plus />\n </el-icon>\n <p>\n {{ placeholder }}\n </p>\n </div>\n </template>\n </el-image>\n <div v-else class=\"image\">\n <el-image\n :src=\"url\"\n :style=\"`width:${width}px;height:${height}px;`\"\n fit=\"fill\"\n />\n <div class=\"mask\">\n <div class=\"actions\">\n <span title=\"预览\" @click.stop=\"preview\">\n <el-icon><ZoomIn /></el-icon>\n </span>\n <span title=\"移除\" @click.stop=\"remove\">\n <el-icon>\n <Delete />\n </el-icon>\n </span>\n </div>\n </div>\n </div>\n <div\n v-show=\"url === '' && uploadData.progress.percent\"\n class=\"progress\"\n :style=\"`width:${width}px;height:${height}px;`\"\n >\n <el-image\n :src=\"uploadData.progress.preview\"\n :style=\"`width:${width}px;height:${height}px;`\"\n fit=\"fill\"\n />\n <el-progress\n type=\"circle\"\n :width=\"Math.min(width, height) * 0.8\"\n :percentage=\"uploadData.progress.percent\"\n />\n </div>\n </el-upload>\n <div v-if=\"!notip\" class=\"el-upload__tip-text\">\n <div style=\"display: inline-block;\">\n {{ tipText || `上传图片支持 ${exts.join(' / ')} 格式,且图片大小不超过 ${size}MB,建议图片尺寸为 ${width}*${height}` }}\n </div>\n </div>\n <el-image-viewer\n v-if=\"uploadData.imageViewerVisible\"\n :url-list=\"[url]\"\n teleported\n @close=\"previewClose\"\n />\n </div>\n</template>\n"],"names":["props","__props","emits","__emit","ns","useNamespace","uploadData","ref","imageViewerVisible","progress","preview","percent","exts","computed","accept","split","map","ext","pop","value","previewClose","remove","handleBeforeUpload","file","fileExt","name","at","isTypeOk","includes","isSizeOk","size","URL","createObjectURL","ElMessage","error","join","beforeUpload","onProgress","onSuccess","res"],"mappings":"w/BAQA,MAAMA,EAAQC,EA2BRC,EAAQC,EAWRC,EAAKC,eAAa,gBAElBC,EAAaC,EAAAA,IAAI,CACrBC,oBAAoB,EACpBC,SAAU,CACRC,QAAS,GACTC,QAAS,KAIPC,EAAOC,EAAAA,UAAS,IACbb,EAAMc,OAAOC,MAAM,KAAKC,KAAWC,GAAAA,EAAIF,MAAM,KAAKG,UAI3D,SAASR,IACPJ,EAAWa,MAAMX,oBAAqB,CAAA,CAGxC,SAASY,IACPd,EAAWa,MAAMX,oBAAqB,CAAA,CAGxC,SAASa,IACPnB,EAAM,aAAc,GAAE,CAElB,MAAAoB,EAAmDC,IACvD,MACMC,EADWD,EAAKE,KAAKV,MAAM,KACRW,IAAG,IAAO,GAC7BC,EAAWf,EAAKO,MAAMS,SAASJ,GAC/BK,EAAWN,EAAKO,KAAO,KAAO,KAAO9B,EAAM8B,KAajD,OAXKH,EAIKE,EAIRvB,EAAWa,MAAMV,SAASC,QAAUqB,IAAIC,gBAAgBT,GAHxDU,EAAAA,UAAUC,MAAM,cAAclC,EAAM8B,WAJpCG,YAAUC,MAAM,UAAUtB,EAAKO,MAAMgB,KAAK,aAUrCR,GAAYE,KAAc7B,EAAMoC,cAAgBpC,EAAMoC,aAAab,GAAI,EAE1Ec,EAAyCd,IAC7CjB,EAAWa,MAAMV,SAASE,UAAYY,EAAKZ,OAAA,EAEvC2B,EAAsC,IAAIC,KACnCjC,EAAAa,MAAMV,SAASC,QAAU,GACzBJ,EAAAa,MAAMV,SAASE,QAAU,EAC9BT,EAAA,eAAgBqC,EAAG"}
1
+ {"version":3,"file":"image-upload.vue.cjs","sources":["../../../../../../packages/components/src/image-upload/src/image-upload.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { UploadFile, UploadFiles, UploadProps } from 'element-plus'\nimport { Delete, Plus, ZoomIn } from '@element-plus/icons-vue'\nimport { useNamespace } from '@qxs-bns/hooks'\nimport { useNamespace as useElNamespace } from 'element-plus'\n\ndefineOptions({\n name: 'QxsImageUpload',\n})\nconst props = withDefaults(\n defineProps<{\n action: UploadProps['action']\n headers?: UploadProps['headers']\n data?: UploadProps['data']\n name?: UploadProps['name']\n url?: string\n size?: number\n width?: number\n accept?: string\n height?: number\n placeholder?: string\n notip?: boolean\n tipText?: string\n beforeUpload?: UploadProps['beforeUpload']\n }>(),\n {\n name: 'file',\n url: '',\n size: 20,\n width: 160,\n height: 90,\n placeholder: '点击上传图片',\n notip: false,\n accept: 'image/jpeg,image/jpg,image/png,image/gif',\n },\n)\nconst emits = defineEmits<{\n 'update:url': [\n url: string,\n ]\n 'onSuccess': [\n res: any,\n uploadFile: UploadFile,\n uploadFiles: UploadFiles,\n ]\n}>()\n\nconst ns = useNamespace('image-upload')\nconst nsEl = useElNamespace('image-upload')\n\nconst uploadData = ref({\n imageViewerVisible: false,\n progress: {\n preview: '',\n percent: 0,\n },\n})\n\nconst exts = computed(() => {\n return props.accept.split(',').map(ext => ext.split('/').pop())\n})\n\n// 预览\nfunction preview() {\n uploadData.value.imageViewerVisible = true\n}\n// 关闭预览\nfunction previewClose() {\n uploadData.value.imageViewerVisible = false\n}\n// 移除\nfunction remove() {\n emits('update:url', '')\n}\nconst handleBeforeUpload: UploadProps['beforeUpload'] = (file) => {\n const fileName = file.name.split('.')\n const fileExt = fileName.at(-1) ?? ''\n const isTypeOk = exts.value.includes(fileExt)\n const isSizeOk = file.size / 1024 / 1024 < props.size\n\n if (!isTypeOk) {\n ElMessage.error(`上传图片只支持${exts.value.join(' / ')}格式!`)\n }\n\n else if (!isSizeOk) {\n ElMessage.error(`上传图片大小不能超过 ${props.size}MB!`)\n }\n else {\n uploadData.value.progress.preview = URL.createObjectURL(file)\n }\n\n return isTypeOk && isSizeOk && (!props.beforeUpload || props.beforeUpload(file))\n}\nconst onProgress: UploadProps['onProgress'] = (file) => {\n uploadData.value.progress.percent = ~~file.percent\n}\nconst onSuccess: UploadProps['onSuccess'] = (...res) => {\n uploadData.value.progress.preview = ''\n uploadData.value.progress.percent = 0\n emits('onSuccess', ...res)\n}\n</script>\n\n<template>\n <div :class=\"ns.e('container')\">\n <el-upload\n :show-file-list=\"false\"\n :headers=\"headers\"\n :action=\"action\"\n :data=\"data\"\n :name=\"name\"\n :before-upload=\"handleBeforeUpload\"\n :on-progress=\"onProgress\"\n :on-success=\"onSuccess\"\n drag\n :accept=\"accept\"\n :class=\"ns.e('control')\"\n >\n <el-image\n :style=\"`width:${width}px;height:${height}px;`\"\n v-if=\"url === ''\"\n :src=\"url === '' ? placeholder : url\"\n fit=\"fill\"\n >\n <template #error>\n <div class=\"image-slot\" :style=\"`width:${width}px;height:${height}px;`\">\n <el-icon>\n <Plus />\n </el-icon>\n <p>\n {{ placeholder }}\n </p>\n </div>\n </template>\n </el-image>\n <div v-else class=\"image\">\n <el-image\n :src=\"url\"\n :style=\"`width:${width}px;height:${height}px;`\"\n fit=\"fill\"\n />\n <div class=\"mask\">\n <div class=\"actions\">\n <span title=\"预览\" @click.stop=\"preview\">\n <el-icon><ZoomIn /></el-icon>\n </span>\n <span title=\"移除\" @click.stop=\"remove\">\n <el-icon>\n <Delete />\n </el-icon>\n </span>\n </div>\n </div>\n </div>\n <div\n v-show=\"url === '' && uploadData.progress.percent\"\n class=\"progress\"\n :style=\"`width:${width}px;height:${height}px;`\"\n >\n <el-image\n :src=\"uploadData.progress.preview\"\n :style=\"`width:${width}px;height:${height}px;`\"\n fit=\"fill\"\n />\n <el-progress\n type=\"circle\"\n :width=\"Math.min(width, height) * 0.8\"\n :percentage=\"uploadData.progress.percent\"\n />\n </div>\n </el-upload>\n <div v-if=\"!notip\" :class=\"nsEl.namespace.value + '-upload__tip-text'\">\n <div style=\"display: inline-block;\">\n {{ tipText || `上传图片支持 ${exts.join(' / ')} 格式,且图片大小不超过 ${size}MB,建议图片尺寸为 ${width}*${height}` }}\n </div>\n </div>\n <el-image-viewer\n v-if=\"uploadData.imageViewerVisible\"\n :url-list=\"[url]\"\n teleported\n @close=\"previewClose\"\n />\n </div>\n</template>\n"],"names":["props","__props","emits","__emit","ns","useNamespace","nsEl","useElNamespace","uploadData","ref","imageViewerVisible","progress","preview","percent","exts","computed","accept","split","map","ext","pop","value","previewClose","remove","handleBeforeUpload","file","fileExt","name","at","isTypeOk","includes","isSizeOk","size","URL","createObjectURL","ElMessage","error","join","beforeUpload","onProgress","onSuccess","res"],"mappings":"4+BASA,MAAMA,EAAQC,EA2BRC,EAAQC,EAWRC,EAAKC,eAAa,gBAClBC,EAAOC,eAAe,gBAEtBC,EAAaC,EAAAA,IAAI,CACrBC,oBAAoB,EACpBC,SAAU,CACRC,QAAS,GACTC,QAAS,KAIPC,EAAOC,EAAAA,UAAS,IACbf,EAAMgB,OAAOC,MAAM,KAAKC,KAAWC,GAAAA,EAAIF,MAAM,KAAKG,UAI3D,SAASR,IACPJ,EAAWa,MAAMX,oBAAqB,CAAA,CAGxC,SAASY,IACPd,EAAWa,MAAMX,oBAAqB,CAAA,CAGxC,SAASa,IACPrB,EAAM,aAAc,GAAE,CAElB,MAAAsB,EAAmDC,IACvD,MACMC,EADWD,EAAKE,KAAKV,MAAM,KACRW,IAAG,IAAO,GAC7BC,EAAWf,EAAKO,MAAMS,SAASJ,GAC/BK,EAAWN,EAAKO,KAAO,KAAO,KAAOhC,EAAMgC,KAajD,OAXKH,EAIKE,EAIRvB,EAAWa,MAAMV,SAASC,QAAUqB,IAAIC,gBAAgBT,GAHxDU,EAAAA,UAAUC,MAAM,cAAcpC,EAAMgC,WAJpCG,YAAUC,MAAM,UAAUtB,EAAKO,MAAMgB,KAAK,aAUrCR,GAAYE,KAAc/B,EAAMsC,cAAgBtC,EAAMsC,aAAab,GAAI,EAE1Ec,EAAyCd,IAC7CjB,EAAWa,MAAMV,SAASE,UAAYY,EAAKZ,OAAA,EAEvC2B,EAAsC,IAAIC,KACnCjC,EAAAa,MAAMV,SAASC,QAAU,GACzBJ,EAAAa,MAAMV,SAASE,QAAU,EAC9BX,EAAA,eAAgBuC,EAAG"}
@@ -1,2 +1,2 @@
1
- "use strict";var r=require("../package.json.cjs");exports.makeInstaller=function(n){return{version:r.version,install:r=>{for(const s in n)r.use(n[s])}}};
1
+ "use strict";var e=require("../package.json.cjs");exports.makeInstaller=function(r){return{version:e.version,install:e=>{for(const s in r)e.use(r[s])}}};
2
2
  //# sourceMappingURL=make-installer.cjs.map
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../withInstall.cjs"),r=require("./src/photo-crop-tool.vue.cjs");const s=e.withInstall(r.default);exports.QxsPhotoCropTool=s,exports.default=s;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../withInstall.cjs"),t=require("./src/photo-crop-tool.vue.cjs");const o=e.withInstall(t.default);exports.QxsPhotoCropTool=o,exports.default=o;
2
2
  //# sourceMappingURL=index.cjs.map
@@ -1,2 +1,2 @@
1
- "use strict";var e=require("vue");exports.useCanvas=function(n){const a=e.ref(null);return n&&(a.value=n.getContext("2d")),{clearCanvas:()=>{a.value&&a.value.clearRect(0,0,n.width,n.height)},drawColor:(e,n,r,l,s)=>{a.value&&(a.value.fillStyle=s,a.value.fillRect(e,n,r,l))},drawImage:(e,n,r,l,s)=>{a.value.drawImage(e,n,r,l,s)},cropCanvas:(e,r,l,s)=>new Promise((o=>{if(a.value){const a=document.createElement("canvas");a.width=l,a.height=s;const c=a.getContext("2d");c?(c.drawImage(n,e,r,l,s,0,0,l,s),a.toBlob((e=>{if(e){const n=new File([e],"cropped_image.png",{type:"image/png"});o(n)}else o(null)}),"image/png")):o(null)}else o(null)}))}};
1
+ "use strict";var e=require("vue");exports.useCanvas=function(a){const l=e.ref(null);return a&&(l.value=a.getContext("2d")),{clearCanvas:()=>{l.value&&l.value.clearRect(0,0,a.width,a.height)},drawColor:(e,a,t,n,r)=>{l.value&&(l.value.fillStyle=r,l.value.fillRect(e,a,t,n))},drawImage:(e,a,t,n,r)=>{l.value.drawImage(e,a,t,n,r)},cropCanvas:(e,t,n,r)=>new Promise((u=>{if(l.value){const l=document.createElement("canvas");l.width=n,l.height=r;const i=l.getContext("2d");i?(i.drawImage(a,e,t,n,r,0,0,n,r),l.toBlob((e=>{if(e){const a=new File([e],"cropped_image.png",{type:"image/png"});u(a)}else u(null)}),"image/png")):u(null)}else u(null)}))}};
2
2
  //# sourceMappingURL=composables.cjs.map
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var t=require("vue"),e=require("@qxs-bns/hooks"),o=require("./composables.cjs"),i=require("@vueuse/core");const s=["src"];var n=t.defineComponent({name:"QxsPhotoCropTool",__name:"photo-crop-tool",props:{imgFile:{type:Object,default:()=>null},aspectRatio:{type:String,default:()=>"16 / 9"},defaultWidth:{type:Number,default:()=>320},defaultHeight:{type:Number,default:()=>180},zoomType:{type:String,default:()=>"fixed"}},setup(n,{expose:r}){const l=n;let u=0,c=0,f=0,h=0;const a=e.useNamespace("photo-crop-tool"),d=t.ref(null),m=t.ref(null),p=t.ref(null),g=t.ref(""),b=t.ref(""),x=t.ref({x:0,y:0}),w=t.ref({width:l.defaultWidth,height:l.defaultHeight,x:0,y:0}),{width:y,height:v}=i.useElementSize(d),{width:N}=i.useElementSize(p),{x:M,y:R,style:_}=i.useDraggable(d,{containerElement:m,draggingElement:d,disabled:t.computed((()=>!!b.value)),exact:!0,initialValue:x}),k=t.computed((()=>l.imgFile?URL.createObjectURL(l.imgFile):""));t.watch((()=>l.imgFile),(t=>{t&&!t.type.startsWith("image/")?g.value="文件类型错误":g.value=""}));const $=t.computed((()=>(p.value?.naturalWidth||0)/N.value)),q=t.computed((()=>{const t={left:0,top:0};return"bottom-right"===b.value?(t.left=w.value.x,t.top=w.value.y):"top-left"===b.value?(t.left=w.value.x-y.value,t.top=w.value.y-v.value):"top-right"===b.value?(t.top=w.value.y-v.value,t.left=w.value.x):"bottom-left"===b.value&&(t.left=w.value.x-y.value,t.top=w.value.y),t})),j=t.computed((()=>{const{aspectRatio:t}=l,e={width:`${w.value.width||l.defaultWidth}`,height:`${w.value.height||l.defaultHeight}`,"aspect-ratio":t,top:`${q.value.top}px`,left:`${q.value.left}px`};return"free"===l.zoomType?delete e["aspect-ratio"]:"fixed"===l.zoomType&&delete e.height,a.cssVarBlock(e)}));function C(t){return t*$.value}function z(t,e){const o=m.value?.clientWidth||1/0,i=m.value?.clientHeight||1/0;return{width:Math.min(Math.max(t,0),o),height:Math.min(Math.max(e,0),i)}}function B(t){const e=t.clientX-u,o=t.clientY-c;if("bottom-right"===b.value){if("free"===l.zoomType){const{width:t,height:i}=z(f+e,h+o);w.value.width=t,w.value.height=i}else if("fixed"===l.zoomType){const t=Number.parseFloat(l.aspectRatio.split(" / ")[0])/Number.parseFloat(l.aspectRatio.split(" / ")[1]);let o=f+e,i=o/t;const{width:s,height:n}=z(o,i);n>(m.value?.clientHeight||1/0)&&(i=m.value?.clientHeight||1/0,o=i*t),w.value.width=s,w.value.height=n}}else if("top-left"===b.value){if("free"===l.zoomType){const{width:t,height:i}=z(f-e,h-o);w.value.width=t,w.value.height=i}else if("fixed"===l.zoomType){const t=Number.parseFloat(l.aspectRatio.split(" / ")[0])/Number.parseFloat(l.aspectRatio.split(" / ")[1]);let o=f-e,i=o/t;const{width:s,height:n}=z(o,i);n>(m.value?.clientHeight||1/0)&&(i=m.value?.clientHeight||1/0,o=i*t),w.value.width=s,w.value.height=n}M.value=q.value.left,R.value=q.value.top}else if("top-right"===b.value){if("free"===l.zoomType){const{width:t,height:i}=z(f+e,h-o);w.value.width=t,w.value.height=i}else if("fixed"===l.zoomType){const t=Number.parseFloat(l.aspectRatio.split(" / ")[0])/Number.parseFloat(l.aspectRatio.split(" / ")[1]);let o=f+e,i=o/t;const{width:s,height:n}=z(o,i);n>(m.value?.clientHeight||1/0)&&(i=m.value?.clientHeight||1/0,o=i*t),w.value.width=s,w.value.height=n}M.value=q.value.left,R.value=q.value.top}else if("bottom-left"===b.value){if("free"===l.zoomType){const{width:t,height:i}=z(f-e,h+o);w.value.width=t,w.value.height=i}else if("fixed"===l.zoomType){const t=Number.parseFloat(l.aspectRatio.split(" / ")[0])/Number.parseFloat(l.aspectRatio.split(" / ")[1]);let o=f-e,i=o/t;const{width:s,height:n}=z(o,i);n>(m.value?.clientHeight||1/0)&&(i=m.value?.clientHeight||1/0,o=i*t),w.value.width=s,w.value.height=n}M.value=q.value.left,R.value=q.value.top}t.preventDefault(),t.stopPropagation()}function E(t,e){b.value=e,u=t.clientX,c=t.clientY,f=w.value.width,h=w.value.height,"bottom-right"===e?(w.value.x=M.value,w.value.y=R.value):"top-left"===e?(w.value.x=M.value+y.value,w.value.y=R.value+v.value):"top-right"===e?(w.value.x=M.value,w.value.y=R.value+v.value):"bottom-left"===e&&(w.value.x=M.value+y.value,w.value.y=R.value)}function L(){b.value=""}return document.addEventListener("mouseup",L),document.addEventListener("mousemove",B),t.onMounted((()=>{t.nextTick((()=>{x.value.x=(m.value?.offsetWidth||0)/2-w.value.width/2,x.value.y=(m.value?.offsetHeight||0)/2-w.value.height/2}))})),t.onUnmounted((()=>{k.value&&URL.revokeObjectURL(k.value),document.removeEventListener("mouseup",L),document.removeEventListener("mousemove",B)})),r({crop:async function(t=p.value){let e="transparent";m.value&&(e=window.getComputedStyle(m.value).backgroundColor);const i=document.createElement("canvas");i.width=C(m.value?.clientWidth||0),i.height=C(m.value?.clientHeight||0);const{drawImage:s,cropCanvas:n,drawColor:r}=o.useCanvas(i);return r(0,0,i.width,i.height,e),s(t,C(t.offsetLeft),C(t.offsetTop),t.naturalWidth,t.naturalHeight),await n(C(M.value),C(R.value),C(y.value),C(v.value))},resize:function(){w.value.width=l.defaultWidth,w.value.height=l.defaultHeight,M.value=0,R.value=0}}),(e,o)=>(t.openBlock(),t.createElementBlock("div",{ref_key:"containerBoxRef",ref:m,class:t.normalizeClass([t.unref(a).e("img-box")])},[t.unref(g)?(t.openBlock(),t.createElementBlock("div",{key:0,class:t.normalizeClass([t.unref(a).e("error-message")])},t.toDisplayString(t.unref(g)),3)):(t.openBlock(),t.createElementBlock(t.Fragment,{key:1},[t.createElementVNode("img",{ref_key:"imgRef",ref:p,class:t.normalizeClass([t.unref(a).e("image")]),src:t.unref(k)},null,10,s),t.createElementVNode("div",{ref_key:"cropBoxRef",ref:d,class:t.normalizeClass([t.unref(a).e("crop-tool-box")]),style:t.normalizeStyle([t.unref(j),t.unref(b)?`left: ${t.unref(q).left}px;top: ${t.unref(q).top}px`:t.unref(_)])},[t.createElementVNode("div",{class:t.normalizeClass([t.unref(a).e("top-left")]),onMousedown:o[0]||(o[0]=t=>E(t,"top-left"))},null,34),t.createElementVNode("div",{class:t.normalizeClass([t.unref(a).e("top-right")]),onMousedown:o[1]||(o[1]=t=>E(t,"top-right"))},null,34),t.createElementVNode("div",{class:t.normalizeClass([t.unref(a).e("bottom-right")]),onMousedown:o[2]||(o[2]=t=>E(t,"bottom-right"))},null,34),t.createElementVNode("div",{class:t.normalizeClass([t.unref(a).e("bottom-left")]),onMousedown:o[3]||(o[3]=t=>E(t,"bottom-left"))},null,34)],6)],64))],2))}});exports.default=n;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("vue"),t=require("@qxs-bns/hooks"),l=require("./composables.cjs"),a=require("@vueuse/core");const o=["src"];var u=e.defineComponent({name:"QxsPhotoCropTool",__name:"photo-crop-tool",props:{imgFile:{type:Object,default:()=>null},aspectRatio:{type:String,default:()=>"16 / 9"},defaultWidth:{type:Number,default:()=>320},defaultHeight:{type:Number,default:()=>180},zoomType:{type:String,default:()=>"fixed"}},setup(u,{expose:i}){const n=u;let r=0,s=0,v=0,h=0;const c=t.useNamespace("photo-crop-tool"),f=e.ref(null),p=e.ref(null),d=e.ref(null),m=e.ref(""),g=e.ref(""),y=e.ref({x:0,y:0}),w=e.ref({width:n.defaultWidth,height:n.defaultHeight,x:0,y:0}),{width:x,height:b}=a.useElementSize(f),{width:z}=a.useElementSize(d),{x:E,y:N,style:R}=a.useDraggable(f,{containerElement:p,draggingElement:f,disabled:e.computed((()=>!!g.value)),exact:!0,initialValue:y}),k=e.computed((()=>n.imgFile?URL.createObjectURL(n.imgFile):""));e.watch((()=>n.imgFile),(e=>{e&&!e.type.startsWith("image/")?m.value="文件类型错误":m.value=""}));const H=e.computed((()=>(d.value?.naturalWidth||0)/z.value)),C=e.computed((()=>{const e={left:0,top:0};return"bottom-right"===g.value?(e.left=w.value.x,e.top=w.value.y):"top-left"===g.value?(e.left=w.value.x-x.value,e.top=w.value.y-b.value):"top-right"===g.value?(e.top=w.value.y-b.value,e.left=w.value.x):"bottom-left"===g.value&&(e.left=w.value.x-x.value,e.top=w.value.y),e})),T=e.computed((()=>{const{aspectRatio:e}=n,t={width:`${w.value.width||n.defaultWidth}`,height:`${w.value.height||n.defaultHeight}`,"aspect-ratio":e,top:`${C.value.top}px`,left:`${C.value.left}px`};return"free"===n.zoomType?delete t["aspect-ratio"]:"fixed"===n.zoomType&&delete t.height,c.cssVarBlock(t)}));function F(e){return e*H.value}function M(e,t){const l=p.value?.clientWidth||1/0,a=p.value?.clientHeight||1/0;return{width:Math.min(Math.max(e,0),l),height:Math.min(Math.max(t,0),a)}}function W(e){const t=e.clientX-r,l=e.clientY-s;if("bottom-right"===g.value){if("free"===n.zoomType){const{width:e,height:a}=M(v+t,h+l);w.value.width=e,w.value.height=a}else if("fixed"===n.zoomType){const e=Number.parseFloat(n.aspectRatio.split(" / ")[0])/Number.parseFloat(n.aspectRatio.split(" / ")[1]);let l=v+t,a=l/e;const{width:o,height:u}=M(l,a);u>(p.value?.clientHeight||1/0)&&(a=p.value?.clientHeight||1/0,l=a*e),w.value.width=o,w.value.height=u}}else if("top-left"===g.value){if("free"===n.zoomType){const{width:e,height:a}=M(v-t,h-l);w.value.width=e,w.value.height=a}else if("fixed"===n.zoomType){const e=Number.parseFloat(n.aspectRatio.split(" / ")[0])/Number.parseFloat(n.aspectRatio.split(" / ")[1]);let l=v-t,a=l/e;const{width:o,height:u}=M(l,a);u>(p.value?.clientHeight||1/0)&&(a=p.value?.clientHeight||1/0,l=a*e),w.value.width=o,w.value.height=u}E.value=C.value.left,N.value=C.value.top}else if("top-right"===g.value){if("free"===n.zoomType){const{width:e,height:a}=M(v+t,h-l);w.value.width=e,w.value.height=a}else if("fixed"===n.zoomType){const e=Number.parseFloat(n.aspectRatio.split(" / ")[0])/Number.parseFloat(n.aspectRatio.split(" / ")[1]);let l=v+t,a=l/e;const{width:o,height:u}=M(l,a);u>(p.value?.clientHeight||1/0)&&(a=p.value?.clientHeight||1/0,l=a*e),w.value.width=o,w.value.height=u}E.value=C.value.left,N.value=C.value.top}else if("bottom-left"===g.value){if("free"===n.zoomType){const{width:e,height:a}=M(v-t,h+l);w.value.width=e,w.value.height=a}else if("fixed"===n.zoomType){const e=Number.parseFloat(n.aspectRatio.split(" / ")[0])/Number.parseFloat(n.aspectRatio.split(" / ")[1]);let l=v-t,a=l/e;const{width:o,height:u}=M(l,a);u>(p.value?.clientHeight||1/0)&&(a=p.value?.clientHeight||1/0,l=a*e),w.value.width=o,w.value.height=u}E.value=C.value.left,N.value=C.value.top}e.preventDefault(),e.stopPropagation()}function B(e,t){g.value=t,r=e.clientX,s=e.clientY,v=w.value.width,h=w.value.height,"bottom-right"===t?(w.value.x=E.value,w.value.y=N.value):"top-left"===t?(w.value.x=E.value+x.value,w.value.y=N.value+b.value):"top-right"===t?(w.value.x=E.value,w.value.y=N.value+b.value):"bottom-left"===t&&(w.value.x=E.value+x.value,w.value.y=N.value)}function L(){g.value=""}return document.addEventListener("mouseup",L),document.addEventListener("mousemove",W),e.onMounted((()=>{e.nextTick((()=>{y.value.x=(p.value?.offsetWidth||0)/2-w.value.width/2,y.value.y=(p.value?.offsetHeight||0)/2-w.value.height/2}))})),e.onUnmounted((()=>{k.value&&URL.revokeObjectURL(k.value),document.removeEventListener("mouseup",L),document.removeEventListener("mousemove",W)})),i({crop:async function(e=d.value){let t="transparent";p.value&&(t=window.getComputedStyle(p.value).backgroundColor);const a=document.createElement("canvas");a.width=F(p.value?.clientWidth||0),a.height=F(p.value?.clientHeight||0);const{drawImage:o,cropCanvas:u,drawColor:i}=l.useCanvas(a);return i(0,0,a.width,a.height,t),o(e,F(e.offsetLeft),F(e.offsetTop),e.naturalWidth,e.naturalHeight),await u(F(E.value),F(N.value),F(x.value),F(b.value))},resize:function(){w.value.width=n.defaultWidth,w.value.height=n.defaultHeight,E.value=0,N.value=0}}),(t,l)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"containerBoxRef",ref:p,class:e.normalizeClass([e.unref(c).e("img-box")])},[e.unref(m)?(e.openBlock(),e.createElementBlock("div",{key:0,class:e.normalizeClass([e.unref(c).e("error-message")])},e.toDisplayString(e.unref(m)),3)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createElementVNode("img",{ref_key:"imgRef",ref:d,class:e.normalizeClass([e.unref(c).e("image")]),src:e.unref(k)},null,10,o),e.createElementVNode("div",{ref_key:"cropBoxRef",ref:f,class:e.normalizeClass([e.unref(c).e("crop-tool-box")]),style:e.normalizeStyle([e.unref(T),e.unref(g)?`left: ${e.unref(C).left}px;top: ${e.unref(C).top}px`:e.unref(R)])},[e.createElementVNode("div",{class:e.normalizeClass([e.unref(c).e("top-left")]),onMousedown:l[0]||(l[0]=e=>B(e,"top-left"))},null,34),e.createElementVNode("div",{class:e.normalizeClass([e.unref(c).e("top-right")]),onMousedown:l[1]||(l[1]=e=>B(e,"top-right"))},null,34),e.createElementVNode("div",{class:e.normalizeClass([e.unref(c).e("bottom-right")]),onMousedown:l[2]||(l[2]=e=>B(e,"bottom-right"))},null,34),e.createElementVNode("div",{class:e.normalizeClass([e.unref(c).e("bottom-left")]),onMousedown:l[3]||(l[3]=e=>B(e,"bottom-left"))},null,34)],6)],64))],2))}});exports.default=u;
2
2
  //# sourceMappingURL=photo-crop-tool.vue.cjs.map
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../withInstall.cjs"),s=require("./src/subject-action.vue.cjs");const t=e.withInstall(s.default);exports.QxsSubjectAction=t,exports.default=t;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../withInstall.cjs"),t=require("./src/subject-action.vue.cjs");const s=e.withInstall(t.default);exports.QxsSubjectAction=s,exports.default=s;
2
2
  //# sourceMappingURL=index.cjs.map
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("element-plus/es"),l=require("vue"),t=require("@element-plus/icons-vue"),a=require("@qxs-bns/hooks"),n=require("../../subject-type/src/subject-type.vue.cjs");const u={key:0,class:"flex-justify-between"},s={class:"flex-justify-between"},o={key:0,class:"has-set"},i={key:1,class:"flex flex-justify-end action-buttons"};var d=l.defineComponent({name:"QxsSubjectAction",__name:"subject-action",props:{isEdit:Boolean,isSet:{type:Boolean,default:!1},isKey:{type:Boolean,default:!1},answerCheckType:{type:Number,default:1},showOtherOption:{type:Boolean,default:!0},examAnswerRelationType:{type:Number,default:null},showRichText:{type:Boolean,default:!0},pageEnd:{type:Boolean,default:!1}},emits:["move-up","move-down","delete","save","edit","add","on-show-rich-text","set-key","set-answer-setting"],setup(d,{emit:c}){const r=d,f=l.ref(r.isKey),m=l.ref(!1),y=c,p=l.ref(r.answerCheckType),b=a.useNamespace("subject-action"),v=l.ref(!0),k=[{value:2,label:"必须全部都是支持选项,方可下一步"},{value:1,label:"无需判断是否是支持选项"},{value:3,label:"包含全部支持选项,即可下一步"}],_=l.computed((()=>k.find((e=>e.value===p.value))?.label));function g(){m.value=!1,y("set-answer-setting",p.value)}function x(){y("set-key",f.value)}function V(e,l){y("add",e,l?r.examAnswerRelationType:null)}return(a,c)=>{const r=e.ElLink,w=e.ElPopover,C=e.ElCheckbox,h=e.ElIcon,j=e.ElButton,q=e.ElRadio,B=e.ElRadioGroup,U=e.ElDialog;return l.openBlock(),l.createElementBlock("div",{class:l.normalizeClass(l.unref(b).e("action-exam"))},[l.createElementVNode("div",{class:l.normalizeClass(["action flex flex-justify-between",{active:d.isEdit}])},[l.createCommentVNode(" 编辑模式 "),d.isEdit?(l.openBlock(),l.createElementBlock("div",u,[l.createVNode(w,{trigger:"click"},{reference:l.withCtx((()=>[l.createVNode(r,{type:"primary",class:"btn-margin"},{default:l.withCtx((()=>c[15]||(c[15]=[l.createTextVNode("+在此题后加入新题")]))),_:1})])),default:l.withCtx((()=>[l.createVNode(n.default,{onSelect:V})])),_:1}),d.showRichText?(l.openBlock(),l.createBlock(r,{key:0,type:"primary",class:"btn-margin",onClick:c[0]||(c[0]=e=>y("on-show-rich-text"))},{default:l.withCtx((()=>c[16]||(c[16]=[l.createTextVNode(" +添加题目描述(图文) ")]))),_:1})):l.createCommentVNode("v-if",!0),d.showOtherOption?(l.openBlock(),l.createBlock(r,{key:1,type:"primary",class:"btn-margin",onClick:c[1]||(c[1]=e=>m.value=!0)},{default:l.withCtx((()=>c[17]||(c[17]=[l.createTextVNode(" 答题设置 ")]))),_:1})):l.createCommentVNode("v-if",!0),d.showOtherOption?(l.openBlock(),l.createBlock(C,{key:2,modelValue:l.unref(f),"onUpdate:modelValue":c[2]||(c[2]=e=>l.isRef(f)?f.value=e:null),label:"核心题",onChange:x},null,8,["modelValue"])):l.createCommentVNode("v-if",!0)])):(l.openBlock(),l.createElementBlock(l.Fragment,{key:1},[l.createCommentVNode(" 非编辑模式 "),l.createElementVNode("div",s,[d.showOtherOption?(l.openBlock(),l.createBlock(C,{key:0,modelValue:l.unref(f),"onUpdate:modelValue":c[3]||(c[3]=e=>l.isRef(f)?f.value=e:null),label:"核心题",disabled:""},null,8,["modelValue"])):l.createCommentVNode("v-if",!0),d.showOtherOption?(l.openBlock(),l.createBlock(C,{key:1,modelValue:l.unref(v),"onUpdate:modelValue":c[4]||(c[4]=e=>l.isRef(v)?v.value=e:null),label:l.unref(_),disabled:"",class:"btn-margin"},null,8,["modelValue","label"])):l.createCommentVNode("v-if",!0)])],2112)),l.createCommentVNode(" 操作按钮 "),l.createElementVNode("div",null,[d.isSet?(l.openBlock(),l.createElementBlock("div",o,"*此题设置了跳题逻辑")):(l.openBlock(),l.createElementBlock("div",i,[d.isEdit?(l.openBlock(),l.createElementBlock(l.Fragment,{key:1},[l.createVNode(j,{class:"btn-margin",onClick:c[9]||(c[9]=e=>y("delete"))},{default:l.withCtx((()=>c[22]||(c[22]=[l.createTextVNode("删除")]))),_:1}),l.createVNode(j,{type:"primary",onClick:c[10]||(c[10]=e=>y("save"))},{default:l.withCtx((()=>c[23]||(c[23]=[l.createTextVNode("完成编辑")]))),_:1})],64)):(l.openBlock(),l.createElementBlock(l.Fragment,{key:0},[d.pageEnd?l.createCommentVNode("v-if",!0):(l.openBlock(),l.createBlock(j,{key:0,class:"btn-margin",onClick:c[5]||(c[5]=e=>y("edit"))},{icon:l.withCtx((()=>[l.createVNode(h,null,{default:l.withCtx((()=>[l.createVNode(l.unref(t.Edit))])),_:1})])),default:l.withCtx((()=>[c[18]||(c[18]=l.createTextVNode(" 编辑 "))])),_:1})),l.createVNode(j,{class:"btn-margin",onClick:c[6]||(c[6]=e=>y("delete"))},{icon:l.withCtx((()=>[l.createVNode(h,null,{default:l.withCtx((()=>[l.createVNode(l.unref(t.Delete))])),_:1})])),default:l.withCtx((()=>[c[19]||(c[19]=l.createTextVNode(" 删除 "))])),_:1}),l.createVNode(j,{class:"btn-margin",onClick:c[7]||(c[7]=e=>y("move-up"))},{icon:l.withCtx((()=>[l.createVNode(h,null,{default:l.withCtx((()=>[l.createVNode(l.unref(t.Top))])),_:1})])),default:l.withCtx((()=>[c[20]||(c[20]=l.createTextVNode(" 上移 "))])),_:1}),l.createVNode(j,{class:"btn-margin",onClick:c[8]||(c[8]=e=>y("move-down"))},{icon:l.withCtx((()=>[l.createVNode(h,null,{default:l.withCtx((()=>[l.createVNode(l.unref(t.Bottom))])),_:1})])),default:l.withCtx((()=>[c[21]||(c[21]=l.createTextVNode(" 下移 "))])),_:1})],64))]))]),l.createCommentVNode(" 答题设置弹窗 "),l.createVNode(U,{modelValue:l.unref(m),"onUpdate:modelValue":c[13]||(c[13]=e=>l.isRef(m)?m.value=e:null),title:"答题设置",class:"customize-dialog",onClose:c[14]||(c[14]=e=>m.value=!1)},{footer:l.withCtx((()=>[l.createVNode(j,{class:"customize-button",type:"primary",plain:"",onClick:c[12]||(c[12]=e=>m.value=!1)},{default:l.withCtx((()=>c[24]||(c[24]=[l.createTextVNode(" 取消 ")]))),_:1}),l.createVNode(j,{class:"customize-button",type:"primary",plain:"",onClick:g},{default:l.withCtx((()=>c[25]||(c[25]=[l.createTextVNode(" 保存 ")]))),_:1})])),default:l.withCtx((()=>[l.createVNode(B,{modelValue:l.unref(p),"onUpdate:modelValue":c[11]||(c[11]=e=>l.isRef(p)?p.value=e:null),class:"vertical-radio-group"},{default:l.withCtx((()=>[(l.openBlock(),l.createElementBlock(l.Fragment,null,l.renderList(k,(e=>l.createVNode(q,{key:e.value,value:e.value},{default:l.withCtx((()=>[l.createTextVNode(l.toDisplayString(e.label),1)])),_:2},1032,["value"]))),64))])),_:1},8,["modelValue"])])),_:1},8,["modelValue"])],2)],2)}}});exports.default=d;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("element-plus/es"),t=require("vue"),l=require("@element-plus/icons-vue"),o=require("@qxs-bns/hooks"),a=require("../../subject-type/src/subject-type.vue.cjs");const n={key:0,class:"flex-justify-between"},c={class:"flex-justify-between"},r={key:0,class:"has-set"},i={key:1,class:"flex flex-justify-end action-buttons"};var d=t.defineComponent({name:"QxsSubjectAction",__name:"subject-action",props:{isEdit:Boolean,isSet:{type:Boolean,default:!1},isKey:{type:Boolean,default:!1},answerCheckType:{type:Number,default:1},showOtherOption:{type:Boolean,default:!0},examAnswerRelationType:{type:Number,default:null},showRichText:{type:Boolean,default:!0},pageEnd:{type:Boolean,default:!1}},emits:["move-up","move-down","delete","save","edit","add","on-show-rich-text","set-key","set-answer-setting"],setup(d,{emit:u}){const s=d,m=t.ref(s.isKey),f=t.ref(!1),p=u,V=t.ref(s.answerCheckType),k=o.useNamespace("subject-action"),x=t.ref(!0),C=[{value:2,label:"必须全部都是支持选项,方可下一步"},{value:1,label:"无需判断是否是支持选项"},{value:3,label:"包含全部支持选项,即可下一步"}],h=t.computed((()=>C.find((e=>e.value===V.value))?.label));function N(){f.value=!1,p("set-answer-setting",V.value)}function v(){p("set-key",m.value)}function y(e,t){p("add",e,t?s.examAnswerRelationType:null)}return(o,u)=>{const s=e.ElLink,w=e.ElPopover,B=e.ElCheckbox,b=e.ElIcon,E=e.ElButton,_=e.ElRadio,g=e.ElRadioGroup,T=e.ElDialog;return t.openBlock(),t.createElementBlock("div",{class:t.normalizeClass(t.unref(k).e("action-exam"))},[t.createElementVNode("div",{class:t.normalizeClass(["action flex flex-justify-between",{active:d.isEdit}])},[t.createCommentVNode(" 编辑模式 "),d.isEdit?(t.openBlock(),t.createElementBlock("div",n,[t.createVNode(w,{trigger:"click"},{reference:t.withCtx((()=>[t.createVNode(s,{type:"primary",class:"btn-margin"},{default:t.withCtx((()=>u[15]||(u[15]=[t.createTextVNode(" +在此题后加入新题")]))),_:1})])),default:t.withCtx((()=>[t.createVNode(a.default,{onSelect:y})])),_:1}),d.showRichText?(t.openBlock(),t.createBlock(s,{key:0,type:"primary",class:"btn-margin",onClick:u[0]||(u[0]=e=>p("on-show-rich-text"))},{default:t.withCtx((()=>u[16]||(u[16]=[t.createTextVNode(" +添加题目描述(图文) ")]))),_:1})):t.createCommentVNode("v-if",!0),d.showOtherOption?(t.openBlock(),t.createBlock(s,{key:1,type:"primary",class:"btn-margin",onClick:u[1]||(u[1]=e=>f.value=!0)},{default:t.withCtx((()=>u[17]||(u[17]=[t.createTextVNode(" 答题设置 ")]))),_:1})):t.createCommentVNode("v-if",!0),d.showOtherOption?(t.openBlock(),t.createBlock(B,{key:2,modelValue:t.unref(m),"onUpdate:modelValue":u[2]||(u[2]=e=>t.isRef(m)?m.value=e:null),label:"核心题",onChange:v},null,8,["modelValue"])):t.createCommentVNode("v-if",!0)])):(t.openBlock(),t.createElementBlock(t.Fragment,{key:1},[t.createCommentVNode(" 非编辑模式 "),t.createElementVNode("div",c,[d.showOtherOption?(t.openBlock(),t.createBlock(B,{key:0,modelValue:t.unref(m),"onUpdate:modelValue":u[3]||(u[3]=e=>t.isRef(m)?m.value=e:null),label:"核心题",disabled:""},null,8,["modelValue"])):t.createCommentVNode("v-if",!0),d.showOtherOption?(t.openBlock(),t.createBlock(B,{key:1,modelValue:t.unref(x),"onUpdate:modelValue":u[4]||(u[4]=e=>t.isRef(x)?x.value=e:null),label:t.unref(h),disabled:"",class:"btn-margin"},null,8,["modelValue","label"])):t.createCommentVNode("v-if",!0)])],2112)),t.createCommentVNode(" 操作按钮 "),t.createElementVNode("div",null,[d.isSet?(t.openBlock(),t.createElementBlock("div",r,"*此题设置了跳题逻辑")):(t.openBlock(),t.createElementBlock("div",i,[d.isEdit?(t.openBlock(),t.createElementBlock(t.Fragment,{key:1},[t.createVNode(E,{class:"btn-margin",onClick:u[9]||(u[9]=e=>p("delete"))},{default:t.withCtx((()=>u[22]||(u[22]=[t.createTextVNode("删除")]))),_:1}),t.createVNode(E,{type:"primary",onClick:u[10]||(u[10]=e=>p("save"))},{default:t.withCtx((()=>u[23]||(u[23]=[t.createTextVNode("完成编辑")]))),_:1})],64)):(t.openBlock(),t.createElementBlock(t.Fragment,{key:0},[d.pageEnd?t.createCommentVNode("v-if",!0):(t.openBlock(),t.createBlock(E,{key:0,onClick:u[5]||(u[5]=e=>p("edit"))},{icon:t.withCtx((()=>[t.createVNode(b,null,{default:t.withCtx((()=>[t.createVNode(t.unref(l.Edit))])),_:1})])),default:t.withCtx((()=>[u[18]||(u[18]=t.createTextVNode(" 编辑 "))])),_:1})),t.createVNode(E,{onClick:u[6]||(u[6]=e=>p("delete"))},{icon:t.withCtx((()=>[t.createVNode(b,null,{default:t.withCtx((()=>[t.createVNode(t.unref(l.Delete))])),_:1})])),default:t.withCtx((()=>[u[19]||(u[19]=t.createTextVNode(" 删除 "))])),_:1}),t.createVNode(E,{onClick:u[7]||(u[7]=e=>p("move-up"))},{icon:t.withCtx((()=>[t.createVNode(b,null,{default:t.withCtx((()=>[t.createVNode(t.unref(l.Top))])),_:1})])),default:t.withCtx((()=>[u[20]||(u[20]=t.createTextVNode(" 上移 "))])),_:1}),t.createVNode(E,{onClick:u[8]||(u[8]=e=>p("move-down"))},{icon:t.withCtx((()=>[t.createVNode(b,null,{default:t.withCtx((()=>[t.createVNode(t.unref(l.Bottom))])),_:1})])),default:t.withCtx((()=>[u[21]||(u[21]=t.createTextVNode(" 下移 "))])),_:1})],64))]))]),t.createCommentVNode(" 答题设置弹窗 "),t.createVNode(T,{modelValue:t.unref(f),"onUpdate:modelValue":u[13]||(u[13]=e=>t.isRef(f)?f.value=e:null),title:"答题设置",class:"customize-dialog",onClose:u[14]||(u[14]=e=>f.value=!1)},{footer:t.withCtx((()=>[t.createVNode(E,{class:"customize-button",type:"primary",plain:"",onClick:u[12]||(u[12]=e=>f.value=!1)},{default:t.withCtx((()=>u[24]||(u[24]=[t.createTextVNode(" 取消 ")]))),_:1}),t.createVNode(E,{class:"customize-button",type:"primary",plain:"",onClick:N},{default:t.withCtx((()=>u[25]||(u[25]=[t.createTextVNode(" 保存 ")]))),_:1})])),default:t.withCtx((()=>[t.createVNode(g,{modelValue:t.unref(V),"onUpdate:modelValue":u[11]||(u[11]=e=>t.isRef(V)?V.value=e:null),class:"vertical-radio-group"},{default:t.withCtx((()=>[(t.openBlock(),t.createElementBlock(t.Fragment,null,t.renderList(C,(e=>t.createVNode(_,{key:e.value,value:e.value},{default:t.withCtx((()=>[t.createTextVNode(t.toDisplayString(e.label),1)])),_:2},1032,["value"]))),64))])),_:1},8,["modelValue"])])),_:1},8,["modelValue"])],2)],2)}}});exports.default=d;
2
2
  //# sourceMappingURL=subject-action.vue.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"subject-action.vue.cjs","sources":["../../../../../../packages/components/src/subject-action/src/subject-action.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { Bottom, Delete, Edit, Top } from '@element-plus/icons-vue'\nimport { useNamespace } from '@qxs-bns/hooks'\nimport SubjectType from '../../subject-type/src/subject-type.vue'\n\ndefineOptions({\n name: 'QxsSubjectAction',\n})\n\nconst props = defineProps({\n isEdit: Boolean,\n isSet: {\n type: Boolean,\n default: false,\n },\n isKey: {\n type: Boolean,\n default: false,\n },\n answerCheckType: {\n type: Number,\n default: 1,\n },\n showOtherOption: {\n type: Boolean,\n default: true,\n },\n examAnswerRelationType: {\n type: Number,\n default: null,\n },\n showRichText: {\n type: Boolean,\n default: true,\n },\n pageEnd: {\n type: Boolean,\n default: false,\n },\n})\n\nconst isKey = ref(props.isKey)\nconst showAnswerSetting = ref(false)\nconst emits = defineEmits([\n 'move-up',\n 'move-down',\n 'delete',\n 'save',\n 'edit',\n 'add',\n 'on-show-rich-text',\n 'set-key',\n 'set-answer-setting',\n])\nconst answerType = ref(props.answerCheckType)\nconst ns = useNamespace('subject-action')\nconst checked = ref(true)\nconst answerTextList = [\n {\n value: 2,\n label: '必须全部都是支持选项,方可下一步',\n },\n {\n value: 1,\n label: '无需判断是否是支持选项',\n },\n {\n value: 3,\n label: '包含全部支持选项,即可下一步',\n },\n]\n\nconst answerText = computed(() => {\n return answerTextList.find((item) => item.value === answerType.value)?.label\n})\n\nfunction onSaveSetting() {\n showAnswerSetting.value = false\n emits('set-answer-setting', answerType.value)\n}\n\nfunction setKey() {\n emits('set-key', isKey.value)\n}\n\nfunction selectExam(type: string, canSet: boolean) {\n emits('add', type, canSet ? props.examAnswerRelationType : null)\n}\n</script>\n\n<template>\n <div :class=\"ns.e('action-exam')\">\n <div class=\"action flex flex-justify-between\" :class=\"{ active: isEdit }\">\n <!-- 编辑模式 -->\n <div v-if=\"isEdit\" class=\"flex-justify-between\">\n <el-popover trigger=\"click\">\n <template #reference>\n <el-link type=\"primary\" class=\"btn-margin\">+在此题后加入新题</el-link>\n </template>\n <SubjectType @select=\"selectExam\" />\n </el-popover>\n <el-link\n v-if=\"showRichText\"\n type=\"primary\"\n class=\"btn-margin\"\n @click=\"emits('on-show-rich-text')\"\n >\n +添加题目描述(图文)\n </el-link>\n <el-link\n v-if=\"showOtherOption\"\n type=\"primary\"\n class=\"btn-margin\"\n @click=\"showAnswerSetting = true\"\n >\n 答题设置\n </el-link>\n <el-checkbox\n v-if=\"showOtherOption\"\n v-model=\"isKey\"\n label=\"核心题\"\n @change=\"setKey\"\n />\n </div>\n\n <!-- 非编辑模式 -->\n <div v-else class=\"flex-justify-between\">\n <el-checkbox\n v-if=\"showOtherOption\"\n v-model=\"isKey\"\n label=\"核心题\"\n disabled\n />\n <el-checkbox\n v-if=\"showOtherOption\"\n v-model=\"checked\"\n :label=\"answerText\"\n disabled\n class=\"btn-margin\"\n />\n </div>\n\n <!-- 操作按钮 -->\n <div>\n <div v-if=\"isSet\" class=\"has-set\">*此题设置了跳题逻辑</div>\n <div v-else class=\"flex flex-justify-end action-buttons\">\n <template v-if=\"!isEdit\">\n <el-button\n v-if=\"!pageEnd\"\n class=\"btn-margin\"\n @click=\"emits('edit')\"\n >\n <template #icon>\n <el-icon><Edit /></el-icon>\n </template>\n 编辑\n </el-button>\n <el-button class=\"btn-margin\" @click=\"emits('delete')\">\n <template #icon>\n <el-icon><Delete /></el-icon>\n </template>\n 删除\n </el-button>\n <el-button class=\"btn-margin\" @click=\"emits('move-up')\">\n <template #icon>\n <el-icon><Top /></el-icon>\n </template>\n 上移\n </el-button>\n <el-button class=\"btn-margin\" @click=\"emits('move-down')\">\n <template #icon>\n <el-icon><Bottom /></el-icon>\n </template>\n 下移\n </el-button>\n </template>\n <template v-else>\n <el-button class=\"btn-margin\" @click=\"emits('delete')\">删除</el-button>\n <el-button type=\"primary\" @click=\"emits('save')\">完成编辑</el-button>\n </template>\n </div>\n </div>\n\n <!-- 答题设置弹窗 -->\n <el-dialog\n v-model=\"showAnswerSetting\"\n title=\"答题设置\"\n class=\"customize-dialog\"\n @close=\"showAnswerSetting = false\"\n >\n <el-radio-group v-model=\"answerType\" class=\"vertical-radio-group\">\n <el-radio\n v-for=\"item in answerTextList\"\n :key=\"item.value\"\n :value=\"item.value\"\n >\n {{ item.label }}\n </el-radio>\n </el-radio-group>\n <template #footer>\n <el-button\n class=\"customize-button\"\n type=\"primary\"\n plain\n @click=\"showAnswerSetting = false\"\n >\n 取消\n </el-button>\n <el-button\n class=\"customize-button\"\n type=\"primary\"\n plain\n @click=\"onSaveSetting\"\n >\n 保存\n </el-button>\n </template>\n </el-dialog>\n </div>\n </div>\n</template>"],"names":["props","__props","isKey","ref","showAnswerSetting","emits","__emit","answerType","answerCheckType","ns","useNamespace","checked","answerTextList","value","label","answerText","computed","find","item","onSaveSetting","setKey","selectExam","type","canSet","examAnswerRelationType"],"mappings":"43BASA,MAAMA,EAAQC,EAgCRC,EAAQC,EAAAA,IAAIH,EAAME,OAClBE,EAAoBD,OAAI,GACxBE,EAAQC,EAWRC,EAAaJ,EAAAA,IAAIH,EAAMQ,iBACvBC,EAAKC,eAAa,kBAClBC,EAAUR,OAAI,GACdS,EAAiB,CACrB,CACEC,MAAO,EACPC,MAAO,oBAET,CACED,MAAO,EACPC,MAAO,eAET,CACED,MAAO,EACPC,MAAO,mBAILC,EAAaC,EAAAA,UAAS,IACnBJ,EAAeK,MAAMC,GAASA,EAAKL,QAAUN,EAAWM,SAAQC,QAGzE,SAASK,IACPf,EAAkBS,OAAQ,EACpBR,EAAA,qBAAsBE,EAAWM,MAAK,CAG9C,SAASO,IACDf,EAAA,UAAWH,EAAMW,MAAK,CAGrB,SAAAQ,EAAWC,EAAcC,GAChClB,EAAM,MAAOiB,EAAMC,EAASvB,EAAMwB,uBAAyB,KAAI"}
1
+ {"version":3,"file":"subject-action.vue.cjs","sources":["../../../../../../packages/components/src/subject-action/src/subject-action.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { Bottom, Delete, Edit, Top } from '@element-plus/icons-vue'\nimport { useNamespace } from '@qxs-bns/hooks'\nimport SubjectType from '../../subject-type/src/subject-type.vue'\n\ndefineOptions({\n name: 'QxsSubjectAction',\n})\n\nconst props = defineProps({\n isEdit: Boolean,\n isSet: {\n type: Boolean,\n default: false,\n },\n isKey: {\n type: Boolean,\n default: false,\n },\n answerCheckType: {\n type: Number,\n default: 1,\n },\n showOtherOption: {\n type: Boolean,\n default: true,\n },\n examAnswerRelationType: {\n type: Number,\n default: null,\n },\n showRichText: {\n type: Boolean,\n default: true,\n },\n pageEnd: {\n type: Boolean,\n default: false,\n },\n})\n\nconst isKey = ref(props.isKey)\nconst showAnswerSetting = ref(false)\nconst emits = defineEmits([\n 'move-up',\n 'move-down',\n 'delete',\n 'save',\n 'edit',\n 'add',\n 'on-show-rich-text',\n 'set-key',\n 'set-answer-setting',\n])\nconst answerType = ref(props.answerCheckType)\nconst ns = useNamespace('subject-action')\nconst checked = ref(true)\nconst answerTextList = [\n {\n value: 2,\n label: '必须全部都是支持选项,方可下一步',\n },\n {\n value: 1,\n label: '无需判断是否是支持选项',\n },\n {\n value: 3,\n label: '包含全部支持选项,即可下一步',\n },\n]\n\nconst answerText = computed(() => {\n return answerTextList.find((item) => item.value === answerType.value)?.label\n})\n\nfunction onSaveSetting() {\n showAnswerSetting.value = false\n emits('set-answer-setting', answerType.value)\n}\n\nfunction setKey() {\n emits('set-key', isKey.value)\n}\n\nfunction selectExam(type: string, canSet: boolean) {\n emits('add', type, canSet ? props.examAnswerRelationType : null)\n}\n</script>\n\n<template>\n <div :class=\"ns.e('action-exam')\">\n <div class=\"action flex flex-justify-between\" :class=\"{ active: isEdit }\">\n <!-- 编辑模式 -->\n <div v-if=\"isEdit\" class=\"flex-justify-between\">\n <el-popover trigger=\"click\">\n <template #reference>\n <el-link type=\"primary\" class=\"btn-margin\"> +在此题后加入新题</el-link>\n </template>\n <SubjectType @select=\"selectExam\" />\n </el-popover>\n <el-link\n v-if=\"showRichText\"\n type=\"primary\"\n class=\"btn-margin\"\n @click=\"emits('on-show-rich-text')\"\n >\n +添加题目描述(图文)\n </el-link>\n <el-link\n v-if=\"showOtherOption\"\n type=\"primary\"\n class=\"btn-margin\"\n @click=\"showAnswerSetting = true\"\n >\n 答题设置\n </el-link>\n <el-checkbox\n v-if=\"showOtherOption\"\n v-model=\"isKey\"\n label=\"核心题\"\n @change=\"setKey\"\n />\n </div>\n\n <!-- 非编辑模式 -->\n <div v-else class=\"flex-justify-between\">\n <el-checkbox\n v-if=\"showOtherOption\"\n v-model=\"isKey\"\n label=\"核心题\"\n disabled\n />\n <el-checkbox\n v-if=\"showOtherOption\"\n v-model=\"checked\"\n :label=\"answerText\"\n disabled\n class=\"btn-margin\"\n />\n </div>\n\n <!-- 操作按钮 -->\n <div>\n <div v-if=\"isSet\" class=\"has-set\">*此题设置了跳题逻辑</div>\n <div v-else class=\"flex flex-justify-end action-buttons\">\n <template v-if=\"!isEdit\">\n <el-button\n v-if=\"!pageEnd\"\n @click=\"emits('edit')\"\n >\n <template #icon>\n <el-icon><Edit /></el-icon>\n </template>\n 编辑\n </el-button>\n <el-button @click=\"emits('delete')\">\n <template #icon>\n <el-icon><Delete /></el-icon>\n </template>\n 删除\n </el-button>\n <el-button @click=\"emits('move-up')\">\n <template #icon>\n <el-icon><Top /></el-icon>\n </template>\n 上移\n </el-button>\n <el-button @click=\"emits('move-down')\">\n <template #icon>\n <el-icon><Bottom /></el-icon>\n </template>\n 下移\n </el-button>\n </template>\n <template v-else>\n <el-button class=\"btn-margin\" @click=\"emits('delete')\">删除</el-button>\n <el-button type=\"primary\" @click=\"emits('save')\">完成编辑</el-button>\n </template>\n </div>\n </div>\n\n <!-- 答题设置弹窗 -->\n <el-dialog\n v-model=\"showAnswerSetting\"\n title=\"答题设置\"\n class=\"customize-dialog\"\n @close=\"showAnswerSetting = false\"\n >\n <el-radio-group v-model=\"answerType\" class=\"vertical-radio-group\">\n <el-radio\n v-for=\"item in answerTextList\"\n :key=\"item.value\"\n :value=\"item.value\"\n >\n {{ item.label }}\n </el-radio>\n </el-radio-group>\n <template #footer>\n <el-button\n class=\"customize-button\"\n type=\"primary\"\n plain\n @click=\"showAnswerSetting = false\"\n >\n 取消\n </el-button>\n <el-button\n class=\"customize-button\"\n type=\"primary\"\n plain\n @click=\"onSaveSetting\"\n >\n 保存\n </el-button>\n </template>\n </el-dialog>\n </div>\n </div>\n</template>"],"names":["props","__props","isKey","ref","showAnswerSetting","emits","__emit","answerType","answerCheckType","ns","useNamespace","checked","answerTextList","value","label","answerText","computed","find","item","onSaveSetting","setKey","selectExam","type","canSet","examAnswerRelationType"],"mappings":"43BASA,MAAMA,EAAQC,EAgCRC,EAAQC,EAAAA,IAAIH,EAAME,OAClBE,EAAoBD,OAAI,GACxBE,EAAQC,EAWRC,EAAaJ,EAAAA,IAAIH,EAAMQ,iBACvBC,EAAKC,eAAa,kBAClBC,EAAUR,OAAI,GACdS,EAAiB,CACrB,CACEC,MAAO,EACPC,MAAO,oBAET,CACED,MAAO,EACPC,MAAO,eAET,CACED,MAAO,EACPC,MAAO,mBAILC,EAAaC,EAAAA,UAAS,IACnBJ,EAAeK,MAAMC,GAASA,EAAKL,QAAUN,EAAWM,SAAQC,QAGzE,SAASK,IACPf,EAAkBS,OAAQ,EACpBR,EAAA,qBAAsBE,EAAWM,MAAK,CAG9C,SAASO,IACDf,EAAA,UAAWH,EAAMW,MAAK,CAGrB,SAAAQ,EAAWC,EAAcC,GAChClB,EAAM,MAAOiB,EAAMC,EAASvB,EAAMwB,uBAAyB,KAAI"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../withInstall.cjs"),s=require("./src/subject-layout.vue.cjs");const t=e.withInstall(s.default);exports.QxsSubjectLayout=t,exports.default=t;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../withInstall.cjs"),t=require("./src/subject-layout.vue.cjs");const s=e.withInstall(t.default);exports.QxsSubjectLayout=s,exports.default=s;
2
2
  //# sourceMappingURL=index.cjs.map
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("vue"),s=require("@qxs-bns/hooks");const t={key:0,class:"edit"};var u=e.defineComponent({name:"QxsSubjectLayout",__name:"subject-layout",props:{showEdit:{type:Boolean,required:!0}},setup(u){const a=s.useNamespace("subject-layout");return(s,u)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(e.unref(a).e("layout-exam"))},[e.createCommentVNode(' <div class="subject-layout"> '),e.renderSlot(s.$slots,"preview"),s.showEdit?(e.openBlock(),e.createElementBlock("div",t,[u[0]||(u[0]=e.createElementVNode("div",{class:"triangle-up"},null,-1)),e.renderSlot(s.$slots,"edit")])):e.createCommentVNode("v-if",!0),e.renderSlot(s.$slots,"default"),e.createCommentVNode(" </div> ")],2))}});exports.default=u;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("vue"),t=require("@qxs-bns/hooks");const o={key:0,class:"edit"};var s=e.defineComponent({name:"QxsSubjectLayout",__name:"subject-layout",props:{showEdit:{type:Boolean,required:!0}},setup(s){const r=t.useNamespace("subject-layout");return(t,s)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(e.unref(r).e("layout-exam"))},[e.createCommentVNode(' <div class="subject-layout"> '),e.renderSlot(t.$slots,"preview"),t.showEdit?(e.openBlock(),e.createElementBlock("div",o,[s[0]||(s[0]=e.createElementVNode("div",{class:"triangle-up"},null,-1)),e.renderSlot(t.$slots,"edit")])):e.createCommentVNode("v-if",!0),e.renderSlot(t.$slots,"default"),e.createCommentVNode(" </div> ")],2))}});exports.default=s;
2
2
  //# sourceMappingURL=subject-layout.vue.cjs.map
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../withInstall.cjs"),s=require("./src/subject-list.vue.cjs");const t=e.withInstall(s.default);exports.QxsSubjectList=t,exports.default=t;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../withInstall.cjs"),t=require("./src/subject-list.vue.cjs");const s=e.withInstall(t.default);exports.QxsSubjectList=s,exports.default=s;
2
2
  //# sourceMappingURL=index.cjs.map
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("element-plus/es"),t=require("vue"),n=require("@qxs-bns/hooks"),s=require("../../../subject-action/src/subject-action.vue.cjs"),o=t.defineComponent({name:"QxsSubjectScale",__name:"SubjectPageEnd",props:{currentPageIndex:{type:Number,required:!0},totalPage:{type:Number,required:!0},isSave:{type:Boolean,required:!0},showAction:{type:Boolean,required:!1},isEdit:{type:Boolean,required:!0},isSet:{type:Boolean,required:!0},examAnswerRelationType:{type:Number,required:!1}},emits:["move","save","delete","edit","add"],setup(o,{emit:r}){const i=o,u=r;t.onMounted((function(){}));const a=n.useNamespace("subject-end");return(n,o)=>{const r=e.ElRow;return t.openBlock(),t.createElementBlock("div",{class:t.normalizeClass(t.unref(a).e("end-exam"))},[t.createVNode(r,{type:"flex",align:"middle"},{default:t.withCtx((()=>[o[5]||(o[5]=t.createElementVNode("span",{class:"auto-line"},null,-1)),t.createElementVNode("span",null,"第"+t.toDisplayString(i.currentPageIndex)+" / "+t.toDisplayString(n.totalPage)+"页",1),o[6]||(o[6]=t.createElementVNode("span",{class:"auto-line"},null,-1))])),_:1}),t.createVNode(s.default,{"is-edit":!1,"is-set":n.isSet,pageEnd:!0,examAnswerRelationType:i.examAnswerRelationType,showOtherOption:!1,showRichText:!1,onMoveUp:o[0]||(o[0]=e=>u("move","up")),onMoveDown:o[1]||(o[1]=e=>u("move","down")),onDelete:o[2]||(o[2]=e=>u("delete")),onEdit:o[3]||(o[3]=e=>u("edit")),onAdd:o[4]||(o[4]=e=>u("add",e))},null,8,["is-set","examAnswerRelationType"])],2)}}});exports.default=o;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("element-plus/es"),t=require("vue"),n=require("@qxs-bns/hooks"),o=require("../../../subject-action/src/subject-action.vue.cjs"),a=t.defineComponent({name:"QxsSubjectScale",__name:"SubjectPageEnd",props:{currentPageIndex:{type:Number,required:!0},totalPage:{type:Number,required:!0},isSave:{type:Boolean,required:!0},showAction:{type:Boolean,required:!1},isEdit:{type:Boolean,required:!0},isSet:{type:Boolean,required:!0},examAnswerRelationType:{type:Number,required:!1}},emits:["move","save","delete","edit","add"],setup(a,{emit:r}){const s=a,i=r;t.onMounted((function(){}));const l=n.useNamespace("subject-end");return(n,a)=>{const r=e.ElRow;return t.openBlock(),t.createElementBlock("div",{class:t.normalizeClass(t.unref(l).e("end-exam"))},[t.createVNode(r,{type:"flex",align:"middle"},{default:t.withCtx((()=>[a[5]||(a[5]=t.createElementVNode("span",{class:"auto-line"},null,-1)),t.createElementVNode("span",null,"第"+t.toDisplayString(s.currentPageIndex)+" / "+t.toDisplayString(n.totalPage)+"页",1),a[6]||(a[6]=t.createElementVNode("span",{class:"auto-line"},null,-1))])),_:1}),t.createVNode(o.default,{"is-edit":!1,"is-set":n.isSet,pageEnd:!0,examAnswerRelationType:s.examAnswerRelationType,showOtherOption:!1,showRichText:!1,onMoveUp:a[0]||(a[0]=e=>i("move","up")),onMoveDown:a[1]||(a[1]=e=>i("move","down")),onDelete:a[2]||(a[2]=e=>i("delete")),onEdit:a[3]||(a[3]=e=>i("edit")),onAdd:a[4]||(a[4]=e=>i("add",e))},null,8,["is-set","examAnswerRelationType"])],2)}}});exports.default=a;
2
2
  //# sourceMappingURL=SubjectPageEnd.vue.cjs.map
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("vue"),t=require("@qxs-bns/hooks"),i=require("element-plus"),r=require("../../../subject-action/src/subject-action.vue.cjs"),o=require("../../../subject-layout/src/subject-layout.vue.cjs"),s=require("../../../tiny-mce-editor/src/tiny-mce-editor.vue.cjs");const n={class:"preview"},u=["innerHTML"];var d=e.defineComponent({name:"QxsSubjectScale",__name:"SubjectRichText",props:{orderIndex:{type:Number,required:!0},richTextContent:{type:String,required:!0},title:{type:String,required:!1},isSave:{type:Boolean,required:!0},showAction:{type:Boolean,required:!1},isEdit:{type:Boolean,required:!0},isSet:{type:Boolean,required:!0},examAnswerRelationType:{type:Number,required:!1}},emits:["move","save","delete","edit","add"],setup(d,{emit:l}){const a=d,c=l,v=e.useAttrs(),p=e.ref("");function m(){p.value?c("save",{richTextContent:p.value||""}):i.ElMessage.error("富文本内容不能为空!")}e.onMounted((function(){a.richTextContent&&(p.value=a.richTextContent)}));const y=t.useNamespace("subject-scale");return(t,i)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(e.unref(y).e("scale-exam"))},[e.createVNode(o.default,{"show-edit":t.isEdit},{preview:e.withCtx((()=>[e.createElementVNode("div",n,[e.createTextVNode(e.toDisplayString(t.orderIndex+1)+".",1),e.createElementVNode("div",{innerHTML:e.unref(p)},null,8,u)])])),edit:e.withCtx((()=>[e.createVNode(s.default,e.mergeProps({"model-value":e.unref(p),"onUpdate:modelValue":i[0]||(i[0]=t=>e.isRef(p)?p.value=t:null)},e.unref(v),{style:{width:"100%"}}),null,16,["model-value"])])),default:e.withCtx((()=>[t.showAction?(e.openBlock(),e.createBlock(r.default,{key:0,"is-edit":t.isEdit,"is-set":t.isSet,examAnswerRelationType:a.examAnswerRelationType,showOtherOption:!1,showRichText:!1,onMoveUp:i[1]||(i[1]=e=>c("move","up")),onMoveDown:i[2]||(i[2]=e=>c("move","down")),onDelete:i[3]||(i[3]=e=>c("delete")),onSave:m,onEdit:i[4]||(i[4]=e=>c("edit")),onAdd:i[5]||(i[5]=e=>c("add",e))},null,8,["is-edit","is-set","examAnswerRelationType"])):e.createCommentVNode("v-if",!0)])),_:1},8,["show-edit"])],2))}});exports.default=d;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("vue"),t=require("@qxs-bns/hooks"),r=require("element-plus"),o=require("../../../subject-action/src/subject-action.vue.cjs"),i=require("../../../subject-layout/src/subject-layout.vue.cjs"),n=require("../../../tiny-mce-editor/src/tiny-mce-editor.vue.cjs");const s={class:"preview"},u=["innerHTML"];var a=e.defineComponent({name:"QxsSubjectScale",__name:"SubjectRichText",props:{orderIndex:{type:Number,required:!0},richTextContent:{type:String,required:!0},title:{type:String,required:!1},isSave:{type:Boolean,required:!0},showAction:{type:Boolean,required:!1},isEdit:{type:Boolean,required:!0},isSet:{type:Boolean,required:!0},examAnswerRelationType:{type:Number,required:!1}},emits:["move","save","delete","edit","add"],setup(a,{emit:l}){const d=a,c=l,p=e.useAttrs(),m=e.ref("");function v(){m.value?c("save",{richTextContent:m.value||""}):r.ElMessage.error("富文本内容不能为空!")}e.onMounted((function(){d.richTextContent&&(m.value=d.richTextContent)}));const x=t.useNamespace("subject-scale");return(t,r)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(e.unref(x).e("scale-exam"))},[e.createVNode(i.default,{"show-edit":t.isEdit},{preview:e.withCtx((()=>[e.createElementVNode("div",s,[e.createTextVNode(e.toDisplayString(t.orderIndex+1)+".",1),e.createElementVNode("div",{innerHTML:e.unref(m)},null,8,u)])])),edit:e.withCtx((()=>[e.createVNode(n.default,e.mergeProps({"model-value":e.unref(m),"onUpdate:modelValue":r[0]||(r[0]=t=>e.isRef(m)?m.value=t:null)},e.unref(p),{style:{width:"100%"}}),null,16,["model-value"])])),default:e.withCtx((()=>[t.showAction?(e.openBlock(),e.createBlock(o.default,{key:0,"is-edit":t.isEdit,"is-set":t.isSet,examAnswerRelationType:d.examAnswerRelationType,showOtherOption:!1,showRichText:!1,onMoveUp:r[1]||(r[1]=e=>c("move","up")),onMoveDown:r[2]||(r[2]=e=>c("move","down")),onDelete:r[3]||(r[3]=e=>c("delete")),onSave:v,onEdit:r[4]||(r[4]=e=>c("edit")),onAdd:r[5]||(r[5]=e=>c("add",e))},null,8,["is-edit","is-set","examAnswerRelationType"])):e.createCommentVNode("v-if",!0)])),_:1},8,["show-edit"])],2))}});exports.default=a;
2
2
  //# sourceMappingURL=SubjectRichText.vue.cjs.map
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("element-plus/es"),l=require("vue"),t=require("@element-plus/icons-vue"),s=require("@qxs-bns/hooks"),i=require("element-plus"),n=require("../../../subject-action/src/subject-action.vue.cjs"),a=require("../../../subject-layout/src/subject-layout.vue.cjs"),r=require("../../../tiny-mce-editor/src/tiny-mce-editor.vue.cjs");const o={class:"preview"},u={class:"content"},d={class:"title"},c={key:0},f=["innerHTML"],p={key:1,class:"flex flex-wrap",style:{"margin-top":"10px",color:"#a8abb2"}},m={class:"flex"},v={style:{flex:"1"}},y={class:"flex flex-justify-end"},x={class:"margin-bottom flex flex-items-center"},_={class:"margin-bottom answer-list"},b={class:"label flex flex-justify-end"},w={class:"answer-tags"},g={key:0,class:"margin-bottom flex"},k={style:{flex:"1"}},h={key:1,class:"margin-bottom flex"},q={style:{flex:"1"}},j={class:"flex flex-justify-end"};var C=l.defineComponent({__name:"subject-blank-fill",props:{orderIndex:{type:Number,required:!0},title:{type:String,required:!1},isSave:{type:Boolean,required:!0},showAction:{type:Boolean,required:!1},answerList:{type:null,required:!1},analysis:{type:String,required:!1},isEdit:{type:Boolean,required:!0},isSet:{type:Boolean,required:!0},examAnswerSettingVO:{type:Object,required:!1},examRichTextContent:{type:String,required:!1},showAnalysis:{type:Boolean,required:!1},examAnswerRelationType:{type:Number,required:!1}},emits:["move","save","delete","edit","add"],setup(C,{emit:V}){const I=C,O=V,S=l.useAttrs(),T=l.ref([]),A=l.ref(""),B=l.ref(""),R=l.ref(!1),U=l.ref(""),M=[{label:"答案不分顺序",value:"isInOrder"},{label:"忽略大小写",value:"isIgnoreCase"}],L=l.ref(["isIgnoreCase"]);function D(){A.value+=" ______",T.value.push({title:"",tag:"",showInput:!1})}function E(){R.value=!1,U.value=""}function H(){A.value?T.value.length<1?i.ElMessage.error("至少添加一个填空符!"):O("save",{title:A.value.replaceAll(/ ______/g,"<filter></filter>"),answers:T.value.map((e=>({title:e.title,isCorrect:!0}))),analysis:B.value,isSetCorrectAnswer:!0,examAnswerSettingBO:{isIgnoreCase:L.value?.includes("isIgnoreCase"),isInOrder:L.value?.includes("isInOrder")},examRichTextContent:R.value?U.value:""}):i.ElMessage.error("题目标题不能为空!")}l.watch((()=>A.value),(()=>{const[...e]=A.value.matchAll(/ ______/g);if(e.length!==T.value.length){const l=T.value.length-e.length;T.value.splice(T.value.length-l,l)}})),l.onMounted((function(){I.title&&(A.value=I.title.replaceAll(/<filter><\/filter>/g," ______")),I.answerList&&I.answerList.length&&(T.value=I.answerList),I.examAnswerSettingVO&&(L.value=L.value.filter((e=>"isIgnoreCase"===e&&I.examAnswerSettingVO?.isIgnoreCase||"isInOrder"===e&&I.examAnswerSettingVO?.isInOrder))),I.analysis&&(B.value=I.analysis),I.examRichTextContent&&(U.value=I.examRichTextContent,R.value=!0)}));const N=s.useNamespace("subject-blank-fill");return(s,i)=>{const C=e.ElInput,V=e.ElLink,z=e.ElCheckbox,F=e.ElCheckboxGroup,G=e.ElTag,J=e.ElIcon,K=e.ElButton;return l.openBlock(),l.createElementBlock("div",{class:l.normalizeClass(l.unref(N).e("blank-fill-exam"))},[l.createVNode(a.default,{"show-edit":s.isEdit},{preview:l.withCtx((()=>[l.createElementVNode("div",o,[l.createElementVNode("div",u,[l.createElementVNode("span",d,l.toDisplayString(s.orderIndex+1)+"."+l.toDisplayString(l.unref(A))+"(填空题)",1),l.unref(R)?(l.openBlock(),l.createElementBlock("div",c,[l.createElementVNode("div",{innerHTML:l.unref(U)},null,8,f)])):l.createCommentVNode("v-if",!0),l.unref(T).some((e=>e.title))?(l.openBlock(),l.createElementBlock("div",p,[i[10]||(i[10]=l.createElementVNode("span",{class:"title"},"正确答案:",-1)),(l.openBlock(!0),l.createElementBlock(l.Fragment,null,l.renderList(l.unref(T),((e,t)=>(l.openBlock(),l.createElementBlock("div",{key:t,class:"flex flex-wrap flex-items-center",style:{"margin-right":"10px"}},[l.createElementVNode("span",null,"填空"+l.toDisplayString(t+1)+":",1),l.createElementVNode("span",null,l.toDisplayString(e.title),1)])))),128))])):l.createCommentVNode("v-if",!0)])])])),edit:l.withCtx((()=>[l.createElementVNode("div",m,[i[11]||(i[11]=l.createElementVNode("div",{class:"label flex flex-justify-end"},[l.createElementVNode("span",null,"题目:")],-1)),l.createElementVNode("div",v,[l.createVNode(C,{modelValue:l.unref(A),"onUpdate:modelValue":i[0]||(i[0]=e=>l.isRef(A)?A.value=e:null),type:"textarea",rows:7,"show-word-limit":"",maxlength:"400",placeholder:"【填空题】请输入问题",disabled:s.isSave},null,8,["modelValue","disabled"])])]),l.createElementVNode("div",y,[l.createCommentVNode(' <el-link\n v-if="!showRichText"\n type="primary"\n @click="showRichText = true"\n >\n 添加富文本\n </el-link> '),l.createVNode(V,{class:"margin-left-10",type:"primary",disabled:s.isSave,onClick:D},{default:l.withCtx((()=>i[12]||(i[12]=[l.createTextVNode(" 插入填空符 ")]))),_:1},8,["disabled"])]),l.createElementVNode("div",x,[i[13]||(i[13]=l.createElementVNode("div",{class:"label flex flex-justify-end"},[l.createElementVNode("span",null,"答题设置:")],-1)),(l.openBlock(),l.createElementBlock(l.Fragment,null,l.renderList(M,(e=>l.createVNode(F,{key:e.value,modelValue:l.unref(L),"onUpdate:modelValue":i[1]||(i[1]=e=>l.isRef(L)?L.value=e:null)},{default:l.withCtx((()=>[l.createVNode(z,{value:e.value,class:"margin-left-10"},{default:l.withCtx((()=>[l.createTextVNode(l.toDisplayString(e.label),1)])),_:2},1032,["value"])])),_:2},1032,["modelValue"]))),64))]),l.createElementVNode("div",_,[(l.openBlock(!0),l.createElementBlock(l.Fragment,null,l.renderList(l.unref(T),((e,i)=>(l.openBlock(),l.createElementBlock("div",{key:i,class:"answer-item flex flex-items-center"},[l.createElementVNode("div",b,[l.createElementVNode("span",null,"第"+l.toDisplayString(i+1)+"空答案:",1)]),l.createElementVNode("div",w,[(l.openBlock(!0),l.createElementBlock(l.Fragment,null,l.renderList(e.title.split(","),(t=>(l.openBlock(),l.createElementBlock(l.Fragment,{key:t},[t?(l.openBlock(),l.createBlock(G,{key:0,closable:"",onClose:l=>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(","))}}(t,e)},{default:l.withCtx((()=>[l.createTextVNode(l.toDisplayString(t),1)])),_:2},1032,["onClose"])):l.createCommentVNode("v-if",!0)],64)))),128)),s.isSave?l.createCommentVNode("v-if",!0):(l.openBlock(),l.createElementBlock(l.Fragment,{key:0},[e.showInput?(l.openBlock(),l.createBlock(C,{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"])):(l.openBlock(),l.createBlock(K,{key:1,size:"small",onClick:l=>e.showInput=!0},{default:l.withCtx((()=>[l.createVNode(J,null,{default:l.withCtx((()=>[l.createVNode(l.unref(t.Plus))])),_:1}),l.createElementVNode("span",null,l.toDisplayString(e.title?"添加同义词":"添加答案"),1)])),_:2},1032,["onClick"]))],64))])])))),128))]),s.showAnalysis?(l.openBlock(),l.createElementBlock("div",g,[i[14]||(i[14]=l.createElementVNode("div",{class:"label flex flex-justify-end"},[l.createElementVNode("span",null,"解析:")],-1)),l.createElementVNode("div",k,[l.createVNode(C,{modelValue:l.unref(B),"onUpdate:modelValue":i[2]||(i[2]=e=>l.isRef(B)?B.value=e:null),type:"textarea",rows:2,placeholder:"请输入题目解析"},null,8,["modelValue"])])])):l.createCommentVNode("v-if",!0),l.unref(R)?(l.openBlock(),l.createElementBlock("div",h,[i[16]||(i[16]=l.createElementVNode("div",{class:"label flex flex-justify-center"},[l.createElementVNode("span",null,"富文本:")],-1)),l.createElementVNode("div",q,[l.createVNode(r.default,l.mergeProps({"model-value":l.unref(U),"onUpdate:modelValue":i[3]||(i[3]=e=>l.isRef(U)?U.value=e:null)},l.unref(S),{style:{width:"100%"}}),null,16,["model-value"]),l.createElementVNode("div",j,[l.createVNode(V,{type:"danger",onClick:E},{default:l.withCtx((()=>i[15]||(i[15]=[l.createTextVNode(" 删除富文本 ")]))),_:1})])])])):l.createCommentVNode("v-if",!0)])),default:l.withCtx((()=>[s.showAction?(l.openBlock(),l.createBlock(n.default,{key:0,"is-edit":s.isEdit,"is-set":s.isSet,showOtherOption:!1,examAnswerRelationType:I.examAnswerRelationType,onMoveUp:i[4]||(i[4]=e=>O("move","up")),onMoveDown:i[5]||(i[5]=e=>O("move","down")),onDelete:i[6]||(i[6]=e=>O("delete")),onSave:H,onEdit:i[7]||(i[7]=e=>O("edit")),onAdd:i[8]||(i[8]=e=>O("add",e)),onOnShowRichText:i[9]||(i[9]=e=>R.value=!0)},null,8,["is-edit","is-set","examAnswerRelationType"])):l.createCommentVNode("v-if",!0)])),_:1},8,["show-edit"])],2)}}});exports.default=C;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("element-plus/es"),t=require("vue"),l=require("@element-plus/icons-vue"),n=require("@qxs-bns/hooks"),a=require("element-plus"),o=require("../../../subject-action/src/subject-action.vue.cjs"),r=require("../../../subject-layout/src/subject-layout.vue.cjs"),i=require("../../../tiny-mce-editor/src/tiny-mce-editor.vue.cjs");const s={class:"preview"},c={class:"content"},d={class:"title"},u={key:0},m=["innerHTML"],p={key:1,class:"flex flex-wrap",style:{"margin-top":"10px",color:"#a8abb2"}},f={class:"flex"},v={style:{flex:"1"}},x={class:"flex flex-justify-end"},y={class:"margin-bottom flex flex-items-center"},V={class:"margin-bottom answer-list"},g={class:"label flex flex-justify-end"},k={class:"answer-tags"},w={key:0,class:"margin-bottom flex"},h={style:{flex:"1"}},E={key:1,class:"margin-bottom flex"},N={style:{flex:"1"}},B={class:"flex flex-justify-end"};var C=t.defineComponent({__name:"subject-blank-fill",props:{orderIndex:{type:Number,required:!0},title:{type:String,required:!1},isSave:{type:Boolean,required:!0},showAction:{type:Boolean,required:!1},answerList:{type:null,required:!1},analysis:{type:String,required:!1},isEdit:{type:Boolean,required:!0},isSet:{type:Boolean,required:!0},examAnswerSettingVO:{type:Object,required:!1},examRichTextContent:{type:String,required:!1},showAnalysis:{type:Boolean,required:!1},examAnswerRelationType:{type:Number,required:!1}},emits:["move","save","delete","edit","add"],setup(C,{emit:_}){const b=C,S=_,q=t.useAttrs(),j=t.ref([]),I=t.ref(""),A=t.ref(""),T=t.ref(!1),O=t.ref(""),R=[{label:"答案不分顺序",value:"isInOrder"},{label:"忽略大小写",value:"isIgnoreCase"}],L=t.ref(["isIgnoreCase"]);function D(){I.value+=" ______",j.value.push({title:"",tag:"",showInput:!1})}function M(){T.value=!1,O.value=""}function U(){I.value?j.value.length<1?a.ElMessage.error("至少添加一个填空符!"):S("save",{title:I.value.replaceAll(/ ______/g,"<filter></filter>"),answers:j.value.map((e=>({title:e.title,isCorrect:!0}))),analysis:A.value,isSetCorrectAnswer:!0,examAnswerSettingBO:{isIgnoreCase:L.value?.includes("isIgnoreCase"),isInOrder:L.value?.includes("isInOrder")},examRichTextContent:T.value?O.value:""}):a.ElMessage.error("题目标题不能为空!")}t.watch((()=>I.value),(()=>{const[...e]=I.value.matchAll(/ ______/g);if(e.length!==j.value.length){const t=j.value.length-e.length;j.value.splice(j.value.length-t,t)}})),t.onMounted((function(){b.title&&(I.value=b.title.replaceAll(/<filter><\/filter>/g," ______")),b.answerList&&b.answerList.length&&(j.value=b.answerList),b.examAnswerSettingVO&&(L.value=L.value.filter((e=>"isIgnoreCase"===e&&b.examAnswerSettingVO?.isIgnoreCase||"isInOrder"===e&&b.examAnswerSettingVO?.isInOrder))),b.analysis&&(A.value=b.analysis),b.examRichTextContent&&(O.value=b.examRichTextContent,T.value=!0)}));const F=n.useNamespace("subject-blank-fill");return(n,a)=>{const C=e.ElInput,_=e.ElLink,P=e.ElCheckbox,z=e.ElCheckboxGroup,H=e.ElTag,G=e.ElIcon,J=e.ElButton;return t.openBlock(),t.createElementBlock("div",{class:t.normalizeClass(t.unref(F).e("blank-fill-exam"))},[t.createVNode(r.default,{"show-edit":n.isEdit},{preview:t.withCtx((()=>[t.createElementVNode("div",s,[t.createElementVNode("div",c,[t.createElementVNode("span",d,t.toDisplayString(n.orderIndex+1)+"."+t.toDisplayString(t.unref(I))+"(填空题)",1),t.unref(T)?(t.openBlock(),t.createElementBlock("div",u,[t.createElementVNode("div",{innerHTML:t.unref(O),class:"rich-text"},null,8,m)])):t.createCommentVNode("v-if",!0),t.unref(j).some((e=>e.title))?(t.openBlock(),t.createElementBlock("div",p,[a[10]||(a[10]=t.createElementVNode("span",{class:"title"},"正确答案:",-1)),(t.openBlock(!0),t.createElementBlock(t.Fragment,null,t.renderList(t.unref(j),((e,l)=>(t.openBlock(),t.createElementBlock("div",{key:l,class:"flex flex-wrap flex-items-center",style:{"margin-right":"10px"}},[t.createElementVNode("span",null,"填空"+t.toDisplayString(l+1)+":",1),t.createElementVNode("span",null,t.toDisplayString(e.title),1)])))),128))])):t.createCommentVNode("v-if",!0)])])])),edit:t.withCtx((()=>[t.createElementVNode("div",f,[a[11]||(a[11]=t.createElementVNode("div",{class:"label flex flex-justify-end"},[t.createElementVNode("span",null,"题目:")],-1)),t.createElementVNode("div",v,[t.createVNode(C,{modelValue:t.unref(I),"onUpdate:modelValue":a[0]||(a[0]=e=>t.isRef(I)?I.value=e:null),type:"textarea",rows:7,"show-word-limit":"",maxlength:"400",placeholder:"【填空题】请输入问题",disabled:n.isSave},null,8,["modelValue","disabled"])])]),t.createElementVNode("div",x,[t.createCommentVNode(' <el-link\n v-if="!showRichText"\n type="primary"\n @click="showRichText = true"\n >\n 添加富文本\n </el-link> '),t.createVNode(_,{class:"margin-left-10",type:"primary",disabled:n.isSave,onClick:D},{default:t.withCtx((()=>a[12]||(a[12]=[t.createTextVNode(" 插入填空符 ")]))),_:1},8,["disabled"])]),t.createElementVNode("div",y,[a[13]||(a[13]=t.createElementVNode("div",{class:"label flex flex-justify-end"},[t.createElementVNode("span",null,"答题设置:")],-1)),(t.openBlock(),t.createElementBlock(t.Fragment,null,t.renderList(R,(e=>t.createVNode(z,{key:e.value,modelValue:t.unref(L),"onUpdate:modelValue":a[1]||(a[1]=e=>t.isRef(L)?L.value=e:null)},{default:t.withCtx((()=>[t.createVNode(P,{value:e.value,class:"margin-left-10"},{default:t.withCtx((()=>[t.createTextVNode(t.toDisplayString(e.label),1)])),_:2},1032,["value"])])),_:2},1032,["modelValue"]))),64))]),t.createElementVNode("div",V,[(t.openBlock(!0),t.createElementBlock(t.Fragment,null,t.renderList(t.unref(j),((e,a)=>(t.openBlock(),t.createElementBlock("div",{key:a,class:"answer-item flex flex-items-center"},[t.createElementVNode("div",g,[t.createElementVNode("span",null,"第"+t.toDisplayString(a+1)+"空答案:",1)]),t.createElementVNode("div",k,[(t.openBlock(!0),t.createElementBlock(t.Fragment,null,t.renderList(e.title.split(","),(l=>(t.openBlock(),t.createElementBlock(t.Fragment,{key:l},[l?(t.openBlock(),t.createBlock(H,{key:0,closable:"",onClose:t=>function(e,t){if(e){const l=t.title.split(","),n=l.findIndex((t=>t===e));n>-1&&(l.splice(n,1),t.title=l.join(","))}}(l,e)},{default:t.withCtx((()=>[t.createTextVNode(t.toDisplayString(l),1)])),_:2},1032,["onClose"])):t.createCommentVNode("v-if",!0)],64)))),128)),n.isSave?t.createCommentVNode("v-if",!0):(t.openBlock(),t.createElementBlock(t.Fragment,{key:0},[e.showInput?(t.openBlock(),t.createBlock(C,{key:0,modelValue:e.tag,"onUpdate:modelValue":t=>e.tag=t,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"])):(t.openBlock(),t.createBlock(J,{key:1,size:"small",onClick:t=>e.showInput=!0},{default:t.withCtx((()=>[t.createVNode(G,null,{default:t.withCtx((()=>[t.createVNode(t.unref(l.Plus))])),_:1}),t.createElementVNode("span",null,t.toDisplayString(e.title?"添加同义词":"添加答案"),1)])),_:2},1032,["onClick"]))],64))])])))),128))]),n.showAnalysis?(t.openBlock(),t.createElementBlock("div",w,[a[14]||(a[14]=t.createElementVNode("div",{class:"label flex flex-justify-end"},[t.createElementVNode("span",null,"解析:")],-1)),t.createElementVNode("div",h,[t.createVNode(C,{modelValue:t.unref(A),"onUpdate:modelValue":a[2]||(a[2]=e=>t.isRef(A)?A.value=e:null),type:"textarea",rows:2,placeholder:"请输入题目解析"},null,8,["modelValue"])])])):t.createCommentVNode("v-if",!0),t.unref(T)?(t.openBlock(),t.createElementBlock("div",E,[a[16]||(a[16]=t.createElementVNode("div",{class:"label flex flex-justify-center"},[t.createElementVNode("span",null,"富文本:")],-1)),t.createElementVNode("div",N,[t.createVNode(i.default,t.mergeProps({"model-value":t.unref(O),"onUpdate:modelValue":a[3]||(a[3]=e=>t.isRef(O)?O.value=e:null)},t.unref(q),{style:{width:"100%"}}),null,16,["model-value"]),t.createElementVNode("div",B,[t.createVNode(_,{type:"danger",onClick:M},{default:t.withCtx((()=>a[15]||(a[15]=[t.createTextVNode(" 删除富文本 ")]))),_:1})])])])):t.createCommentVNode("v-if",!0)])),default:t.withCtx((()=>[n.showAction?(t.openBlock(),t.createBlock(o.default,{key:0,"is-edit":n.isEdit,"is-set":n.isSet,showOtherOption:!1,examAnswerRelationType:b.examAnswerRelationType,onMoveUp:a[4]||(a[4]=e=>S("move","up")),onMoveDown:a[5]||(a[5]=e=>S("move","down")),onDelete:a[6]||(a[6]=e=>S("delete")),onSave:U,onEdit:a[7]||(a[7]=e=>S("edit")),onAdd:a[8]||(a[8]=e=>S("add",e)),onOnShowRichText:a[9]||(a[9]=e=>T.value=!0)},null,8,["is-edit","is-set","examAnswerRelationType"])):t.createCommentVNode("v-if",!0)])),_:1},8,["show-edit"])],2)}}});exports.default=C;
2
2
  //# sourceMappingURL=subject-blank-fill.vue.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"subject-blank-fill.vue.cjs","sources":["../../../../../../../packages/components/src/subject-list/src/components/subject-blank-fill.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { Plus } from '@element-plus/icons-vue'\nimport { useNamespace } from '@qxs-bns/hooks'\nimport { ElMessage } from 'element-plus'\nimport SubjectAction from '../../../subject-action/src/subject-action.vue'\nimport SubjectLayout from '../../../subject-layout/src/subject-layout.vue'\nimport TinyMceEditor from '../../../tiny-mce-editor/src/tiny-mce-editor.vue'\n\nconst props = defineProps<{\n orderIndex: number\n title?: string\n isSave: boolean\n showAction?: boolean\n answerList?: any\n analysis?: string\n isEdit: boolean\n isSet: boolean\n examAnswerSettingVO?: {\n isInOrder: boolean\n isIgnoreCase: boolean\n }\n examRichTextContent?: string\n showAnalysis?: boolean\n examAnswerRelationType?: number\n}>()\nconst emits = defineEmits(['move', 'save', 'delete', 'edit', 'add'])\n\nconst attrs = useAttrs()\n\nconst answers = ref<{\n title: string\n tag: string\n showInput: boolean\n}[]>([])\n\nconst title = ref('')\nconst analysis = ref('')\nconst showRichText = ref(false)\nconst richText = ref('')\n\nconst checkList = [\n {\n label: '答案不分顺序',\n value: 'isInOrder',\n },\n {\n label: '忽略大小写',\n value: 'isIgnoreCase',\n },\n]\n\nconst isCheckList = ref(['isIgnoreCase'])\n\nfunction handleAddTag(item: any) {\n item.showInput = false\n if (item.tag) {\n item.title = item.title ? [item.title, item.tag].join(',') : item.tag\n item.tag = ''\n }\n}\n\nfunction closeTag(tag: string, item: any) {\n if (tag) {\n const tags = item.title.split(',')\n const index = tags.findIndex((i: string) => i === tag)\n if (index > -1) {\n tags.splice(index, 1)\n item.title = tags.join(',')\n }\n }\n}\n\nfunction addBlank() {\n title.value += ' ______'\n answers.value.push({\n title: '',\n tag: '',\n showInput: false,\n })\n}\n\nfunction deleteRichText() {\n showRichText.value = false\n richText.value = ''\n}\n\nfunction save() {\n if (!title.value) {\n ElMessage.error('题目标题不能为空!')\n return\n }\n\n if (answers.value.length < 1) {\n ElMessage.error('至少添加一个填空符!')\n return\n }\n\n emits('save', {\n title: title.value.replaceAll(/ ______/g, '<filter></filter>'),\n answers: answers.value.map((item: any) => {\n return { title: item.title, isCorrect: true }\n }),\n analysis: analysis.value,\n isSetCorrectAnswer: true,\n examAnswerSettingBO: {\n isIgnoreCase: isCheckList.value?.includes('isIgnoreCase'),\n isInOrder: isCheckList.value?.includes('isInOrder'),\n },\n examRichTextContent: showRichText.value ? richText.value : '',\n })\n}\n\nfunction init() {\n if (props.title) {\n title.value = props.title.replaceAll(/<filter><\\/filter>/g, ' ______')\n }\n\n if (props.answerList && props.answerList.length) {\n answers.value = props.answerList\n }\n\n if (props.examAnswerSettingVO) {\n // 仅保留与设置匹配的选项\n isCheckList.value = isCheckList.value.filter((item: any) =>\n (item === 'isIgnoreCase' && props.examAnswerSettingVO?.isIgnoreCase)\n || (item === 'isInOrder' && props.examAnswerSettingVO?.isInOrder),\n )\n }\n\n if (props.analysis) {\n analysis.value = props.analysis\n }\n\n if (props.examRichTextContent) {\n richText.value = props.examRichTextContent\n showRichText.value = true\n }\n}\n\nwatch(() => title.value, () => {\n const [...matchs] = title.value.matchAll(/ ______/g)\n if (matchs.length !== answers.value.length) {\n const differ = answers.value.length - matchs.length\n answers.value.splice(answers.value.length - differ, differ)\n }\n})\n\nonMounted(init)\nconst ns = useNamespace('subject-blank-fill')\n</script>\n\n<template>\n <div :class=\"ns.e('blank-fill-exam')\">\n <SubjectLayout :show-edit=\"isEdit\">\n <template #preview>\n <div class=\"preview\">\n <div class=\"content\">\n <span class=\"title\">{{ orderIndex + 1 }}.{{ title }}(填空题)</span>\n <div v-if=\"showRichText\">\n <div v-html=\"richText\" />\n </div>\n <div\n v-if=\"answers.some((item) => item.title)\"\n class=\"flex flex-wrap\"\n style=\"margin-top: 10px;color: #a8abb2;\"\n >\n <span class=\"title\">正确答案:</span>\n <div\n v-for=\"(item, index) in answers\"\n :key=\"index\"\n class=\"flex flex-wrap flex-items-center\"\n style=\"margin-right: 10px;\"\n >\n <span>填空{{ index + 1 }}:</span>\n <span>{{ item.title }}</span>\n </div>\n </div>\n </div>\n </div>\n </template>\n <template #edit>\n <div class=\"flex\">\n <div class=\"label flex flex-justify-end\">\n <span>题目:</span>\n </div>\n <div style=\"flex: 1;\">\n <el-input\n v-model=\"title\"\n type=\"textarea\"\n :rows=\"7\"\n show-word-limit\n maxlength=\"400\"\n placeholder=\"【填空题】请输入问题\"\n :disabled=\"isSave\"\n />\n </div>\n </div>\n <div class=\"flex flex-justify-end\">\n <!-- <el-link\n v-if=\"!showRichText\"\n type=\"primary\"\n @click=\"showRichText = true\"\n >\n 添加富文本\n </el-link> -->\n <el-link\n class=\"margin-left-10\"\n type=\"primary\"\n :disabled=\"isSave\"\n @click=\"addBlank\"\n >\n 插入填空符\n </el-link>\n </div>\n <div class=\"margin-bottom flex flex-items-center\">\n <div class=\"label flex flex-justify-end\">\n <span>答题设置:</span>\n </div>\n\n <el-checkbox-group\n v-for=\"item in checkList\"\n :key=\"item.value\"\n v-model=\"isCheckList\"\n >\n <el-checkbox :value=\"item.value\" class=\"margin-left-10\">\n {{ item.label }}\n </el-checkbox>\n </el-checkbox-group>\n </div>\n <div class=\"margin-bottom answer-list\">\n <div\n v-for=\"(item, index) in answers\"\n :key=\"index\"\n class=\"answer-item flex flex-items-center\"\n >\n <div class=\"label flex flex-justify-end\">\n <span>第{{ index + 1 }}空答案:</span>\n </div>\n\n <div class=\"answer-tags\">\n <template\n v-for=\"i in item.title.split(',')\"\n :key=\"i\"\n >\n <el-tag\n v-if=\"i\"\n closable\n @close=\"closeTag(i, item)\"\n >\n {{ i }}\n </el-tag>\n </template>\n <template v-if=\"!isSave\">\n <el-input\n v-if=\"item.showInput\"\n v-model=\"item.tag\"\n style=\"width: 80px;\"\n @blur=\"() => handleAddTag(item)\"\n />\n <el-button\n v-else\n size=\"small\"\n @click=\"item.showInput = true\"\n >\n <el-icon><Plus /></el-icon>\n <span>{{ item.title ? '添加同义词' : '添加答案' }}</span>\n </el-button>\n </template>\n </div>\n </div>\n </div>\n <div v-if=\"showAnalysis\" class=\"margin-bottom flex\">\n <div class=\"label flex flex-justify-end\">\n <span>解析:</span>\n </div>\n <div style=\"flex: 1;\">\n <el-input\n v-model=\"analysis\"\n type=\"textarea\"\n :rows=\"2\"\n placeholder=\"请输入题目解析\"\n />\n </div>\n </div>\n <div v-if=\"showRichText\" class=\"margin-bottom flex\">\n <div class=\"label flex flex-justify-center\">\n <span>富文本:</span>\n </div>\n <div style=\"flex: 1;\">\n <TinyMceEditor v-model:model-value=\"richText\" v-bind=\"attrs\" style=\"width: 100%;\" />\n <div class=\"flex flex-justify-end\">\n <el-link\n type=\"danger\"\n @click=\"deleteRichText\"\n >\n 删除富文本\n </el-link>\n </div>\n </div>\n </div>\n </template>\n <SubjectAction\n v-if=\"showAction\"\n :is-edit=\"isEdit\"\n :is-set=\"isSet\"\n :showOtherOption=\"false\"\n :examAnswerRelationType=\"props.examAnswerRelationType\"\n @move-up=\"emits('move', 'up')\"\n @move-down=\"emits('move', 'down')\"\n @delete=\"emits('delete')\"\n @save=\"save\"\n @edit=\"emits('edit')\"\n @add=\"type => emits('add', type)\"\n @onShowRichText=\"showRichText = true\"\n />\n </SubjectLayout>\n </div>\n</template>\n"],"names":["props","__props","emits","__emit","attrs","useAttrs","answers","ref","title","analysis","showRichText","richText","checkList","label","value","isCheckList","addBlank","push","tag","showInput","deleteRichText","save","length","ElMessage","error","replaceAll","map","item","isCorrect","isSetCorrectAnswer","examAnswerSettingBO","isIgnoreCase","includes","isInOrder","examRichTextContent","watch","matchs","matchAll","differ","splice","onMounted","answerList","examAnswerSettingVO","filter","ns","useNamespace","tags","split","index","findIndex","i","join"],"mappings":"q/CAQA,MAAMA,EAAQC,EAiBRC,EAAQC,EAERC,EAAQC,EAAAA,WAERC,EAAUC,EAIXA,IAAA,IAECC,EAAQD,MAAI,IACZE,EAAWF,MAAI,IACfG,EAAeH,OAAI,GACnBI,EAAWJ,MAAI,IAEfK,EAAY,CAChB,CACEC,MAAO,SACPC,MAAO,aAET,CACED,MAAO,QACPC,MAAO,iBAILC,EAAcR,EAAAA,IAAI,CAAC,iBAqBzB,SAASS,IACPR,EAAMM,OAAS,UACfR,EAAQQ,MAAMG,KAAK,CACjBT,MAAO,GACPU,IAAK,GACLC,WAAW,GACZ,CAGH,SAASC,IACPV,EAAaI,OAAQ,EACrBH,EAASG,MAAQ,EAAA,CAGnB,SAASO,IACFb,EAAMM,MAKPR,EAAQQ,MAAMQ,OAAS,EACzBC,EAAAA,UAAUC,MAAM,cAIlBtB,EAAM,OAAQ,CACZM,MAAOA,EAAMM,MAAMW,WAAW,WAAY,qBAC1CnB,QAASA,EAAQQ,MAAMY,KAAKC,IACnB,CAAEnB,MAAOmB,EAAKnB,MAAOoB,WAAW,MAEzCnB,SAAUA,EAASK,MACnBe,oBAAoB,EACpBC,oBAAqB,CACnBC,aAAchB,EAAYD,OAAOkB,SAAS,gBAC1CC,UAAWlB,EAAYD,OAAOkB,SAAS,cAEzCE,oBAAqBxB,EAAaI,MAAQH,EAASG,MAAQ,KApB3DS,EAAAA,UAAUC,MAAM,YAqBjB,CA8BGW,SAAA,IAAM3B,EAAMM,QAAO,KACvB,SAAUsB,GAAU5B,EAAMM,MAAMuB,SAAS,YACzC,GAAID,EAAOd,SAAWhB,EAAQQ,MAAMQ,OAAQ,CAC1C,MAAMgB,EAAShC,EAAQQ,MAAMQ,OAASc,EAAOd,OAC7ChB,EAAQQ,MAAMyB,OAAOjC,EAAQQ,MAAMQ,OAASgB,EAAQA,EAAM,KAI9DE,EAAAA,WAnCA,WACMxC,EAAMQ,QACRA,EAAMM,MAAQd,EAAMQ,MAAMiB,WAAW,sBAAuB,YAG1DzB,EAAMyC,YAAczC,EAAMyC,WAAWnB,SACvChB,EAAQQ,MAAQd,EAAMyC,YAGpBzC,EAAM0C,sBAEI3B,EAAAD,MAAQC,EAAYD,MAAM6B,QAAQhB,GAClC,iBAATA,GAA2B3B,EAAM0C,qBAAqBX,cAC1C,cAATJ,GAAwB3B,EAAM0C,qBAAqBT,aAIvDjC,EAAMS,WACRA,EAASK,MAAQd,EAAMS,UAGrBT,EAAMkC,sBACRvB,EAASG,MAAQd,EAAMkC,oBACvBxB,EAAaI,OAAQ,EACvB,IAYI,MAAA8B,EAAKC,eAAa,gkGAvFf,SAAS3B,EAAaS,GAC7B,GAAIT,EAAK,CACP,MAAM4B,EAAOnB,EAAKnB,MAAMuC,MAAM,KACxBC,EAAQF,EAAKG,WAAWC,GAAcA,IAAMhC,IAC9C8B,GAAQ,IACLF,EAAAP,OAAOS,EAAO,GACdrB,EAAAnB,MAAQsC,EAAKK,KAAK,KACzB,CACF,yXAhBF,SAAsBxB,GACpBA,EAAKR,WAAY,EACbQ,EAAKT,MACPS,EAAKnB,MAAQmB,EAAKnB,MAAQ,CAACmB,EAAKnB,MAAOmB,EAAKT,KAAKiC,KAAK,KAAOxB,EAAKT,IAClES,EAAKT,IAAM,GACb"}
1
+ {"version":3,"file":"subject-blank-fill.vue.cjs","sources":["../../../../../../../packages/components/src/subject-list/src/components/subject-blank-fill.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { Plus } from '@element-plus/icons-vue'\nimport { useNamespace } from '@qxs-bns/hooks'\nimport { ElMessage } from 'element-plus'\nimport SubjectAction from '../../../subject-action/src/subject-action.vue'\nimport SubjectLayout from '../../../subject-layout/src/subject-layout.vue'\nimport TinyMceEditor from '../../../tiny-mce-editor/src/tiny-mce-editor.vue'\n\nconst props = defineProps<{\n orderIndex: number\n title?: string\n isSave: boolean\n showAction?: boolean\n answerList?: any\n analysis?: string\n isEdit: boolean\n isSet: boolean\n examAnswerSettingVO?: {\n isInOrder: boolean\n isIgnoreCase: boolean\n }\n examRichTextContent?: string\n showAnalysis?: boolean\n examAnswerRelationType?: number\n}>()\nconst emits = defineEmits(['move', 'save', 'delete', 'edit', 'add'])\n\nconst attrs = useAttrs()\n\nconst answers = ref<{\n title: string\n tag: string\n showInput: boolean\n}[]>([])\n\nconst title = ref('')\nconst analysis = ref('')\nconst showRichText = ref(false)\nconst richText = ref('')\n\nconst checkList = [\n {\n label: '答案不分顺序',\n value: 'isInOrder',\n },\n {\n label: '忽略大小写',\n value: 'isIgnoreCase',\n },\n]\n\nconst isCheckList = ref(['isIgnoreCase'])\n\nfunction handleAddTag(item: any) {\n item.showInput = false\n if (item.tag) {\n item.title = item.title ? [item.title, item.tag].join(',') : item.tag\n item.tag = ''\n }\n}\n\nfunction closeTag(tag: string, item: any) {\n if (tag) {\n const tags = item.title.split(',')\n const index = tags.findIndex((i: string) => i === tag)\n if (index > -1) {\n tags.splice(index, 1)\n item.title = tags.join(',')\n }\n }\n}\n\nfunction addBlank() {\n title.value += ' ______'\n answers.value.push({\n title: '',\n tag: '',\n showInput: false,\n })\n}\n\nfunction deleteRichText() {\n showRichText.value = false\n richText.value = ''\n}\n\nfunction save() {\n if (!title.value) {\n ElMessage.error('题目标题不能为空!')\n return\n }\n\n if (answers.value.length < 1) {\n ElMessage.error('至少添加一个填空符!')\n return\n }\n\n emits('save', {\n title: title.value.replaceAll(/ ______/g, '<filter></filter>'),\n answers: answers.value.map((item: any) => {\n return { title: item.title, isCorrect: true }\n }),\n analysis: analysis.value,\n isSetCorrectAnswer: true,\n examAnswerSettingBO: {\n isIgnoreCase: isCheckList.value?.includes('isIgnoreCase'),\n isInOrder: isCheckList.value?.includes('isInOrder'),\n },\n examRichTextContent: showRichText.value ? richText.value : '',\n })\n}\n\nfunction init() {\n if (props.title) {\n title.value = props.title.replaceAll(/<filter><\\/filter>/g, ' ______')\n }\n\n if (props.answerList && props.answerList.length) {\n answers.value = props.answerList\n }\n\n if (props.examAnswerSettingVO) {\n // 仅保留与设置匹配的选项\n isCheckList.value = isCheckList.value.filter((item: any) =>\n (item === 'isIgnoreCase' && props.examAnswerSettingVO?.isIgnoreCase)\n || (item === 'isInOrder' && props.examAnswerSettingVO?.isInOrder),\n )\n }\n\n if (props.analysis) {\n analysis.value = props.analysis\n }\n\n if (props.examRichTextContent) {\n richText.value = props.examRichTextContent\n showRichText.value = true\n }\n}\n\nwatch(() => title.value, () => {\n const [...matchs] = title.value.matchAll(/ ______/g)\n if (matchs.length !== answers.value.length) {\n const differ = answers.value.length - matchs.length\n answers.value.splice(answers.value.length - differ, differ)\n }\n})\n\nonMounted(init)\nconst ns = useNamespace('subject-blank-fill')\n</script>\n\n<template>\n <div :class=\"ns.e('blank-fill-exam')\">\n <SubjectLayout :show-edit=\"isEdit\">\n <template #preview>\n <div class=\"preview\">\n <div class=\"content\">\n <span class=\"title\">{{ orderIndex + 1 }}.{{ title }}(填空题)</span>\n <div v-if=\"showRichText\">\n <div v-html=\"richText\" class=\"rich-text\"/>\n </div>\n <div\n v-if=\"answers.some((item) => item.title)\"\n class=\"flex flex-wrap\"\n style=\"margin-top: 10px;color: #a8abb2;\"\n >\n <span class=\"title\">正确答案:</span>\n <div\n v-for=\"(item, index) in answers\"\n :key=\"index\"\n class=\"flex flex-wrap flex-items-center\"\n style=\"margin-right: 10px;\"\n >\n <span>填空{{ index + 1 }}:</span>\n <span>{{ item.title }}</span>\n </div>\n </div>\n </div>\n </div>\n </template>\n <template #edit>\n <div class=\"flex\">\n <div class=\"label flex flex-justify-end\">\n <span>题目:</span>\n </div>\n <div style=\"flex: 1;\">\n <el-input\n v-model=\"title\"\n type=\"textarea\"\n :rows=\"7\"\n show-word-limit\n maxlength=\"400\"\n placeholder=\"【填空题】请输入问题\"\n :disabled=\"isSave\"\n />\n </div>\n </div>\n <div class=\"flex flex-justify-end\">\n <!-- <el-link\n v-if=\"!showRichText\"\n type=\"primary\"\n @click=\"showRichText = true\"\n >\n 添加富文本\n </el-link> -->\n <el-link\n class=\"margin-left-10\"\n type=\"primary\"\n :disabled=\"isSave\"\n @click=\"addBlank\"\n >\n 插入填空符\n </el-link>\n </div>\n <div class=\"margin-bottom flex flex-items-center\">\n <div class=\"label flex flex-justify-end\">\n <span>答题设置:</span>\n </div>\n\n <el-checkbox-group\n v-for=\"item in checkList\"\n :key=\"item.value\"\n v-model=\"isCheckList\"\n >\n <el-checkbox :value=\"item.value\" class=\"margin-left-10\">\n {{ item.label }}\n </el-checkbox>\n </el-checkbox-group>\n </div>\n <div class=\"margin-bottom answer-list\">\n <div\n v-for=\"(item, index) in answers\"\n :key=\"index\"\n class=\"answer-item flex flex-items-center\"\n >\n <div class=\"label flex flex-justify-end\">\n <span>第{{ index + 1 }}空答案:</span>\n </div>\n\n <div class=\"answer-tags\">\n <template\n v-for=\"i in item.title.split(',')\"\n :key=\"i\"\n >\n <el-tag\n v-if=\"i\"\n closable\n @close=\"closeTag(i, item)\"\n >\n {{ i }}\n </el-tag>\n </template>\n <template v-if=\"!isSave\">\n <el-input\n v-if=\"item.showInput\"\n v-model=\"item.tag\"\n style=\"width: 80px;\"\n @blur=\"() => handleAddTag(item)\"\n />\n <el-button\n v-else\n size=\"small\"\n @click=\"item.showInput = true\"\n >\n <el-icon><Plus /></el-icon>\n <span>{{ item.title ? '添加同义词' : '添加答案' }}</span>\n </el-button>\n </template>\n </div>\n </div>\n </div>\n <div v-if=\"showAnalysis\" class=\"margin-bottom flex\">\n <div class=\"label flex flex-justify-end\">\n <span>解析:</span>\n </div>\n <div style=\"flex: 1;\">\n <el-input\n v-model=\"analysis\"\n type=\"textarea\"\n :rows=\"2\"\n placeholder=\"请输入题目解析\"\n />\n </div>\n </div>\n <div v-if=\"showRichText\" class=\"margin-bottom flex\">\n <div class=\"label flex flex-justify-center\">\n <span>富文本:</span>\n </div>\n <div style=\"flex: 1;\">\n <TinyMceEditor v-model:model-value=\"richText\" v-bind=\"attrs\" style=\"width: 100%;\" />\n <div class=\"flex flex-justify-end\">\n <el-link\n type=\"danger\"\n @click=\"deleteRichText\"\n >\n 删除富文本\n </el-link>\n </div>\n </div>\n </div>\n </template>\n <SubjectAction\n v-if=\"showAction\"\n :is-edit=\"isEdit\"\n :is-set=\"isSet\"\n :showOtherOption=\"false\"\n :examAnswerRelationType=\"props.examAnswerRelationType\"\n @move-up=\"emits('move', 'up')\"\n @move-down=\"emits('move', 'down')\"\n @delete=\"emits('delete')\"\n @save=\"save\"\n @edit=\"emits('edit')\"\n @add=\"type => emits('add', type)\"\n @onShowRichText=\"showRichText = true\"\n />\n </SubjectLayout>\n </div>\n</template>\n"],"names":["props","__props","emits","__emit","attrs","useAttrs","answers","ref","title","analysis","showRichText","richText","checkList","label","value","isCheckList","addBlank","push","tag","showInput","deleteRichText","save","length","ElMessage","error","replaceAll","map","item","isCorrect","isSetCorrectAnswer","examAnswerSettingBO","isIgnoreCase","includes","isInOrder","examRichTextContent","watch","matchs","matchAll","differ","splice","onMounted","answerList","examAnswerSettingVO","filter","ns","useNamespace","tags","split","index","findIndex","i","join"],"mappings":"q/CAQA,MAAMA,EAAQC,EAiBRC,EAAQC,EAERC,EAAQC,EAAAA,WAERC,EAAUC,EAIXA,IAAA,IAECC,EAAQD,MAAI,IACZE,EAAWF,MAAI,IACfG,EAAeH,OAAI,GACnBI,EAAWJ,MAAI,IAEfK,EAAY,CAChB,CACEC,MAAO,SACPC,MAAO,aAET,CACED,MAAO,QACPC,MAAO,iBAILC,EAAcR,EAAAA,IAAI,CAAC,iBAqBzB,SAASS,IACPR,EAAMM,OAAS,UACfR,EAAQQ,MAAMG,KAAK,CACjBT,MAAO,GACPU,IAAK,GACLC,WAAW,GACZ,CAGH,SAASC,IACPV,EAAaI,OAAQ,EACrBH,EAASG,MAAQ,EAAA,CAGnB,SAASO,IACFb,EAAMM,MAKPR,EAAQQ,MAAMQ,OAAS,EACzBC,EAAAA,UAAUC,MAAM,cAIlBtB,EAAM,OAAQ,CACZM,MAAOA,EAAMM,MAAMW,WAAW,WAAY,qBAC1CnB,QAASA,EAAQQ,MAAMY,KAAKC,IACnB,CAAEnB,MAAOmB,EAAKnB,MAAOoB,WAAW,MAEzCnB,SAAUA,EAASK,MACnBe,oBAAoB,EACpBC,oBAAqB,CACnBC,aAAchB,EAAYD,OAAOkB,SAAS,gBAC1CC,UAAWlB,EAAYD,OAAOkB,SAAS,cAEzCE,oBAAqBxB,EAAaI,MAAQH,EAASG,MAAQ,KApB3DS,EAAAA,UAAUC,MAAM,YAqBjB,CA8BGW,SAAA,IAAM3B,EAAMM,QAAO,KACvB,SAAUsB,GAAU5B,EAAMM,MAAMuB,SAAS,YACzC,GAAID,EAAOd,SAAWhB,EAAQQ,MAAMQ,OAAQ,CAC1C,MAAMgB,EAAShC,EAAQQ,MAAMQ,OAASc,EAAOd,OAC7ChB,EAAQQ,MAAMyB,OAAOjC,EAAQQ,MAAMQ,OAASgB,EAAQA,EAAM,KAI9DE,EAAAA,WAnCA,WACMxC,EAAMQ,QACRA,EAAMM,MAAQd,EAAMQ,MAAMiB,WAAW,sBAAuB,YAG1DzB,EAAMyC,YAAczC,EAAMyC,WAAWnB,SACvChB,EAAQQ,MAAQd,EAAMyC,YAGpBzC,EAAM0C,sBAEI3B,EAAAD,MAAQC,EAAYD,MAAM6B,QAAQhB,GAClC,iBAATA,GAA2B3B,EAAM0C,qBAAqBX,cAC1C,cAATJ,GAAwB3B,EAAM0C,qBAAqBT,aAIvDjC,EAAMS,WACRA,EAASK,MAAQd,EAAMS,UAGrBT,EAAMkC,sBACRvB,EAASG,MAAQd,EAAMkC,oBACvBxB,EAAaI,OAAQ,EACvB,IAYI,MAAA8B,EAAKC,eAAa,klGAvFf,SAAS3B,EAAaS,GAC7B,GAAIT,EAAK,CACP,MAAM4B,EAAOnB,EAAKnB,MAAMuC,MAAM,KACxBC,EAAQF,EAAKG,WAAWC,GAAcA,IAAMhC,IAC9C8B,GAAQ,IACLF,EAAAP,OAAOS,EAAO,GACdrB,EAAAnB,MAAQsC,EAAKK,KAAK,KACzB,CACF,yXAhBF,SAAsBxB,GACpBA,EAAKR,WAAY,EACbQ,EAAKT,MACPS,EAAKnB,MAAQmB,EAAKnB,MAAQ,CAACmB,EAAKnB,MAAOmB,EAAKT,KAAKiC,KAAK,KAAOxB,EAAKT,IAClES,EAAKT,IAAM,GACb"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("element-plus/es"),l=require("vue"),s=require("@element-plus/icons-vue"),t=require("@qxs-bns/hooks"),n=require("element-plus"),a=require("../../../subject-action/src/subject-action.vue.cjs"),i=require("../../../subject-layout/src/subject-layout.vue.cjs"),d=require("../../../tiny-mce-editor/src/tiny-mce-editor.vue.cjs");const r={class:"preview"},u={class:"title"},o={key:0},c=["innerHTML"],p={class:"answer-radio flex-col"},f={style:{flex:"1"}},x={class:"answer flex"},m={class:"flex"},v={class:"answer-list flex-col"},y={class:"order"},w={class:"flex",style:{"margin-bottom":"20px"}},b={style:{flex:"1"}},h={key:0,class:"margin-bottom flex"},q={style:{flex:"1"}},g={class:"flex flex-justify-end"};var j=l.defineComponent({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(j,{emit:k}){const V=j,S=k,_=l.useAttrs(),T=l.ref([{title:""},{title:""},{title:""},{title:""},{title:""}]),C=l.ref(""),A=l.ref(""),M=l.ref(""),U=l.ref(!1),O=l.ref(""),R=l.ref([]),L=l.computed((()=>Math.ceil(24/(T.value.length+1))));function B(){5!==T.value.length&&T.value.push({title:""})}function Q(){U.value=!1,O.value=""}function D(){if(!C.value)return void n.ElMessage.error("题目标题不能为空!");let e="";T.value.forEach(((l,s)=>{l.title||(e+=`选项${String.fromCharCode(65+s)}未填写。`)})),e?n.ElMessage.error(e):M.value?(R.value=M.value.split("\n").filter((e=>e)),S("save",{title:C.value,answers:T.value,analysis:A.value,scaleQuestionList:R.value,examRichTextContent:U.value?O.value:""})):n.ElMessage.error("行标题不能为空!")}l.onMounted((function(){V.title&&(C.value=V.title),V.answerList&&V.answerList.length&&(T.value=V.answerList),V.analysis&&(A.value=V.analysis),V.scaleQuestionList&&(R.value=V.scaleQuestionList,M.value=R.value.join("\n")),V.examRichTextContent&&(O.value=V.examRichTextContent,U.value=!0)}));const E=t.useNamespace("subject-scale");return(t,n)=>{const j=e.ElCol,k=e.ElRow,H=e.ElRadio,N=e.ElInput,$=e.ElIcon,I=e.ElLink;return l.openBlock(),l.createElementBlock("div",{class:l.normalizeClass(l.unref(E).e("scale-exam"))},[l.createVNode(i.default,{"show-edit":t.isEdit},{preview:l.withCtx((()=>[l.createElementVNode("div",r,[l.createElementVNode("div",null,[l.createElementVNode("span",u,l.toDisplayString(t.orderIndex+1)+"."+l.toDisplayString(l.unref(C))+"(量表题)",1),l.unref(U)?(l.openBlock(),l.createElementBlock("div",o,[l.createElementVNode("div",{innerHTML:l.unref(O)},null,8,c)])):l.createCommentVNode("v-if",!0)]),l.createElementVNode("div",p,[l.createVNode(k,{style:{padding:"10px 0"}},{default:l.withCtx((()=>[l.createVNode(j,{span:l.unref(L)},null,8,["span"]),(l.openBlock(!0),l.createElementBlock(l.Fragment,null,l.renderList(l.unref(T),(e=>(l.openBlock(),l.createBlock(j,{key:e.title,class:"flex flex-center",span:l.unref(L)},{default:l.withCtx((()=>[l.createElementVNode("span",null,l.toDisplayString(e.title),1)])),_:2},1032,["span"])))),128))])),_:1}),(l.openBlock(!0),l.createElementBlock(l.Fragment,null,l.renderList(l.unref(R),(e=>(l.openBlock(),l.createBlock(k,{key:e,style:{padding:"10px 0"}},{default:l.withCtx((()=>[l.createVNode(j,{span:l.unref(L),class:"flex flex-center"},{default:l.withCtx((()=>[l.createElementVNode("span",null,l.toDisplayString(e),1)])),_:2},1032,["span"]),(l.openBlock(!0),l.createElementBlock(l.Fragment,null,l.renderList(l.unref(T).length,(e=>(l.openBlock(),l.createBlock(j,{key:e,class:"radio-item flex flex-center",span:l.unref(L)},{default:l.withCtx((()=>[l.createVNode(H,{disabled:!0})])),_:2},1032,["span"])))),128))])),_:2},1024)))),128))])])])),edit:l.withCtx((()=>[l.createElementVNode("div",{class:l.normalizeClass(["flex",[{"margin-bottom":l.unref(U)}]])},[n[10]||(n[10]=l.createElementVNode("div",{class:"label flex flex-justify-center"},[l.createElementVNode("span",null,"题目:")],-1)),l.createElementVNode("div",f,[l.createVNode(N,{modelValue:l.unref(C),"onUpdate:modelValue":n[0]||(n[0]=e=>l.isRef(C)?C.value=e:null),type:"textarea",rows:2,placeholder:"【量表题】请输入问题",disabled:t.isSave},null,8,["modelValue","disabled"])])],2),l.createElementVNode("div",x,[n[11]||(n[11]=l.createElementVNode("div",{class:"label flex flex-justify-center"},[l.createElementVNode("span",null,"行标题:")],-1)),l.createElementVNode("div",m,[l.createVNode(N,{modelValue:l.unref(M),"onUpdate:modelValue":n[1]||(n[1]=e=>l.isRef(M)?M.value=e:null),type:"textarea",placeholder:"请输入行标题",style:{width:"160px"},rows:10},null,8,["modelValue"]),l.createElementVNode("div",v,[(l.openBlock(!0),l.createElementBlock(l.Fragment,null,l.renderList(l.unref(T),((e,n)=>(l.openBlock(),l.createElementBlock("div",{key:n,class:"answer-item flex flex-items-center"},[l.createElementVNode("span",y,l.toDisplayString(String.fromCharCode(65+n))+".",1),l.createVNode(N,{modelValue:e.title,"onUpdate:modelValue":l=>e.title=l,class:"input","show-word-limit":"",maxlength:10,placeholder:`选项${String.fromCharCode(65+n)}`,disabled:t.isSave},null,8,["modelValue","onUpdate:modelValue","placeholder","disabled"]),l.createCommentVNode(' <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 /> '),l.createVNode($,{class:"icon"},{default:l.withCtx((()=>[l.createVNode(l.unref(s.CirclePlus),{class:l.normalizeClass([{disabled:5===l.unref(T).length}]),onClick:B},null,8,["class"])])),_:1}),l.createVNode($,{class:"icon"},{default:l.withCtx((()=>[l.createVNode(l.unref(s.Remove),{class:l.normalizeClass([{disabled:l.unref(T).length<3}]),onClick:e=>function(e){T.value.length<3||T.value.splice(e,1)}(n)},null,8,["class","onClick"])])),_:2},1024)])))),128))])])]),l.createElementVNode("div",w,[n[12]||(n[12]=l.createElementVNode("div",{class:"label flex flex-justify-center"},[l.createElementVNode("span",null,"解析:")],-1)),l.createElementVNode("div",b,[l.createVNode(N,{modelValue:l.unref(A),"onUpdate:modelValue":n[2]||(n[2]=e=>l.isRef(A)?A.value=e:null),type:"textarea",rows:2,placeholder:"请输入题目解析"},null,8,["modelValue"])])]),l.unref(U)?(l.openBlock(),l.createElementBlock("div",h,[n[14]||(n[14]=l.createElementVNode("div",{class:"label flex flex-justify-center"},[l.createElementVNode("span",null,"富文本:")],-1)),l.createElementVNode("div",q,[l.createVNode(d.default,l.mergeProps({"model-value":l.unref(O),"onUpdate:modelValue":n[3]||(n[3]=e=>l.isRef(O)?O.value=e:null)},l.unref(_),{style:{width:"100%"}}),null,16,["model-value"]),l.createElementVNode("div",g,[l.createVNode(I,{type:"danger",onClick:Q},{default:l.withCtx((()=>n[13]||(n[13]=[l.createTextVNode(" 删除富文本 ")]))),_:1})])])])):l.createCommentVNode("v-if",!0)])),default:l.withCtx((()=>[t.showAction?(l.openBlock(),l.createBlock(a.default,{key:0,"is-edit":t.isEdit,"is-set":t.isSet,showOtherOption:!1,examAnswerRelationType:V.examAnswerRelationType,onMoveUp:n[4]||(n[4]=e=>S("move","up")),onMoveDown:n[5]||(n[5]=e=>S("move","down")),onDelete:n[6]||(n[6]=e=>S("delete")),onSave:D,onEdit:n[7]||(n[7]=e=>S("edit")),onAdd:n[8]||(n[8]=e=>S("add",e)),onOnShowRichText:n[9]||(n[9]=e=>U.value=!0)},null,8,["is-edit","is-set","examAnswerRelationType"])):l.createCommentVNode("v-if",!0)])),_:1},8,["show-edit"])],2)}}});exports.default=j;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("element-plus/es"),l=require("vue"),t=require("@element-plus/icons-vue"),a=require("@qxs-bns/hooks"),n=require("element-plus"),r=require("../../../subject-action/src/subject-action.vue.cjs"),s=require("../../../subject-layout/src/subject-layout.vue.cjs"),o=require("../../../tiny-mce-editor/src/tiny-mce-editor.vue.cjs");const i={class:"preview"},c={class:"title"},d={key:0},u=["innerHTML"],m={class:"answer-radio flex-col"},f={style:{flex:"1"}},p={class:"answer flex"},v={class:"flex"},x={class:"answer-list flex-col"},V={class:"order"},y={class:"flex",style:{"margin-bottom":"20px"}},h={style:{flex:"1"}},N={key:0,class:"margin-bottom flex"},w={style:{flex:"1"}},E={class:"flex flex-justify-end"};var k=l.defineComponent({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(k,{emit:C}){const g=k,B=C,b=l.useAttrs(),q=l.ref([{title:""},{title:""},{title:""},{title:""},{title:""}]),S=l.ref(""),j=l.ref(""),R=l.ref(""),L=l.ref(!1),T=l.ref(""),_=l.ref([]),M=l.computed((()=>Math.ceil(24/(q.value.length+1))));function A(){5!==q.value.length&&q.value.push({title:""})}function D(){L.value=!1,T.value=""}function U(){if(!S.value)return void n.ElMessage.error("题目标题不能为空!");let e="";q.value.forEach(((l,t)=>{l.title||(e+=`选项${String.fromCharCode(65+t)}未填写。`)})),e?n.ElMessage.error(e):R.value?(_.value=R.value.split("\n").filter((e=>e)),B("save",{title:S.value,answers:q.value,analysis:j.value,scaleQuestionList:_.value,examRichTextContent:L.value?T.value:""})):n.ElMessage.error("行标题不能为空!")}l.onMounted((function(){g.title&&(S.value=g.title),g.answerList&&g.answerList.length&&(q.value=g.answerList),g.analysis&&(j.value=g.analysis),g.scaleQuestionList&&(_.value=g.scaleQuestionList,R.value=_.value.join("\n")),g.examRichTextContent&&(T.value=g.examRichTextContent,L.value=!0)}));const O=a.useNamespace("subject-scale");return(a,n)=>{const k=e.ElCol,C=e.ElRow,Q=e.ElRadio,z=e.ElInput,F=e.ElIcon,I=e.ElLink;return l.openBlock(),l.createElementBlock("div",{class:l.normalizeClass(l.unref(O).e("scale-exam"))},[l.createVNode(s.default,{"show-edit":a.isEdit},{preview:l.withCtx((()=>[l.createElementVNode("div",i,[l.createElementVNode("div",null,[l.createElementVNode("span",c,l.toDisplayString(a.orderIndex+1)+"."+l.toDisplayString(l.unref(S))+"(量表题)",1),l.unref(L)?(l.openBlock(),l.createElementBlock("div",d,[l.createElementVNode("div",{innerHTML:l.unref(T),class:"rich-text"},null,8,u)])):l.createCommentVNode("v-if",!0)]),l.createElementVNode("div",m,[l.createVNode(C,{style:{padding:"10px 0"}},{default:l.withCtx((()=>[l.createVNode(k,{span:l.unref(M)},null,8,["span"]),(l.openBlock(!0),l.createElementBlock(l.Fragment,null,l.renderList(l.unref(q),(e=>(l.openBlock(),l.createBlock(k,{key:e.title,class:"flex flex-center",span:l.unref(M)},{default:l.withCtx((()=>[l.createElementVNode("span",null,l.toDisplayString(e.title),1)])),_:2},1032,["span"])))),128))])),_:1}),(l.openBlock(!0),l.createElementBlock(l.Fragment,null,l.renderList(l.unref(_),(e=>(l.openBlock(),l.createBlock(C,{key:e,style:{padding:"10px 0"}},{default:l.withCtx((()=>[l.createVNode(k,{span:l.unref(M),class:"flex flex-center"},{default:l.withCtx((()=>[l.createElementVNode("span",null,l.toDisplayString(e),1)])),_:2},1032,["span"]),(l.openBlock(!0),l.createElementBlock(l.Fragment,null,l.renderList(l.unref(q).length,(e=>(l.openBlock(),l.createBlock(k,{key:e,class:"radio-item flex flex-center",span:l.unref(M)},{default:l.withCtx((()=>[l.createVNode(Q,{disabled:!0})])),_:2},1032,["span"])))),128))])),_:2},1024)))),128))])])])),edit:l.withCtx((()=>[l.createElementVNode("div",{class:l.normalizeClass(["flex",[{"margin-bottom":l.unref(L)}]])},[n[10]||(n[10]=l.createElementVNode("div",{class:"label flex flex-justify-center"},[l.createElementVNode("span",null,"题目:")],-1)),l.createElementVNode("div",f,[l.createVNode(z,{modelValue:l.unref(S),"onUpdate:modelValue":n[0]||(n[0]=e=>l.isRef(S)?S.value=e:null),type:"textarea",rows:2,placeholder:"【量表题】请输入问题",disabled:a.isSave},null,8,["modelValue","disabled"])])],2),l.createElementVNode("div",p,[n[11]||(n[11]=l.createElementVNode("div",{class:"label flex flex-justify-center"},[l.createElementVNode("span",null,"行标题:")],-1)),l.createElementVNode("div",v,[l.createVNode(z,{modelValue:l.unref(R),"onUpdate:modelValue":n[1]||(n[1]=e=>l.isRef(R)?R.value=e:null),type:"textarea",placeholder:"请输入行标题",style:{width:"160px"},rows:10},null,8,["modelValue"]),l.createElementVNode("div",x,[(l.openBlock(!0),l.createElementBlock(l.Fragment,null,l.renderList(l.unref(q),((e,n)=>(l.openBlock(),l.createElementBlock("div",{key:n,class:"answer-item flex flex-items-center"},[l.createElementVNode("span",V,l.toDisplayString(String.fromCharCode(65+n))+".",1),l.createVNode(z,{modelValue:e.title,"onUpdate:modelValue":l=>e.title=l,class:"input","show-word-limit":"",maxlength:10,placeholder:`选项${String.fromCharCode(65+n)}`,disabled:a.isSave},null,8,["modelValue","onUpdate:modelValue","placeholder","disabled"]),l.createCommentVNode(' <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 /> '),l.createVNode(F,{class:"icon"},{default:l.withCtx((()=>[l.createVNode(l.unref(t.CirclePlus),{class:l.normalizeClass([{disabled:5===l.unref(q).length}]),onClick:A},null,8,["class"])])),_:1}),l.createVNode(F,{class:"icon"},{default:l.withCtx((()=>[l.createVNode(l.unref(t.Remove),{class:l.normalizeClass([{disabled:l.unref(q).length<3}]),onClick:e=>function(e){q.value.length<3||q.value.splice(e,1)}(n)},null,8,["class","onClick"])])),_:2},1024)])))),128))])])]),l.createElementVNode("div",y,[n[12]||(n[12]=l.createElementVNode("div",{class:"label flex flex-justify-center"},[l.createElementVNode("span",null,"解析:")],-1)),l.createElementVNode("div",h,[l.createVNode(z,{modelValue:l.unref(j),"onUpdate:modelValue":n[2]||(n[2]=e=>l.isRef(j)?j.value=e:null),type:"textarea",rows:2,placeholder:"请输入题目解析"},null,8,["modelValue"])])]),l.unref(L)?(l.openBlock(),l.createElementBlock("div",N,[n[14]||(n[14]=l.createElementVNode("div",{class:"label flex flex-justify-center"},[l.createElementVNode("span",null,"富文本:")],-1)),l.createElementVNode("div",w,[l.createVNode(o.default,l.mergeProps({"model-value":l.unref(T),"onUpdate:modelValue":n[3]||(n[3]=e=>l.isRef(T)?T.value=e:null)},l.unref(b),{style:{width:"100%"}}),null,16,["model-value"]),l.createElementVNode("div",E,[l.createVNode(I,{type:"danger",onClick:D},{default:l.withCtx((()=>n[13]||(n[13]=[l.createTextVNode(" 删除富文本 ")]))),_:1})])])])):l.createCommentVNode("v-if",!0)])),default:l.withCtx((()=>[a.showAction?(l.openBlock(),l.createBlock(r.default,{key:0,"is-edit":a.isEdit,"is-set":a.isSet,showOtherOption:!1,examAnswerRelationType:g.examAnswerRelationType,onMoveUp:n[4]||(n[4]=e=>B("move","up")),onMoveDown:n[5]||(n[5]=e=>B("move","down")),onDelete:n[6]||(n[6]=e=>B("delete")),onSave:U,onEdit:n[7]||(n[7]=e=>B("edit")),onAdd:n[8]||(n[8]=e=>B("add",e)),onOnShowRichText:n[9]||(n[9]=e=>L.value=!0)},null,8,["is-edit","is-set","examAnswerRelationType"])):l.createCommentVNode("v-if",!0)])),_:1},8,["show-edit"])],2)}}});exports.default=k;
2
2
  //# sourceMappingURL=subject-scale.vue.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"subject-scale.vue.cjs","sources":["../../../../../../../packages/components/src/subject-list/src/components/subject-scale.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { CirclePlus, Remove } from '@element-plus/icons-vue'\nimport { useNamespace } from '@qxs-bns/hooks'\nimport { ElMessage } from 'element-plus'\nimport SubjectAction from '../../../subject-action/src/subject-action.vue'\nimport SubjectLayout from '../../../subject-layout/src/subject-layout.vue'\nimport TinyMceEditor from '../../../tiny-mce-editor/src/tiny-mce-editor.vue'\n\ndefineOptions({\n name: 'QxsSubjectScale',\n})\nconst props = defineProps<{\n orderIndex: number\n title?: string\n isSave: boolean\n showAction?: boolean\n answerList?: any\n analysis?: string\n rowTitle?: string\n isEdit: boolean\n isSet: boolean\n scaleQuestionList?: any\n examRichTextContent?: string\n examAnswerRelationType?: number\n}>()\nconst emits = defineEmits(['move', 'save', 'delete', 'edit', 'add'])\n\nconst attrs = useAttrs()\n\nconst answers = ref<{\n title: string\n}[]>([{\n title: '',\n}, {\n title: '',\n}, {\n title: '',\n}, {\n title: '',\n}, {\n title: '',\n}])\n\nconst title = ref('')\nconst analysis = ref('')\nconst rowTitle = ref('')\nconst showRichText = ref(false)\nconst richText = ref('')\nconst scaleQuestionList = ref<string[]>([])\nconst span = computed(() => Math.ceil(24 / (answers.value.length + 1)))\nfunction addAnswer() {\n if (answers.value.length === 5) {\n return\n }\n answers.value.push({\n title: '',\n })\n}\n\nfunction deleteAnswer(index: number) {\n if (answers.value.length < 3) {\n return\n }\n answers.value.splice(index, 1)\n}\n\nfunction deleteRichText() {\n showRichText.value = false\n richText.value = ''\n}\n\nfunction save() {\n if (!title.value) {\n ElMessage.error('题目标题不能为空!')\n return\n }\n let msg = ''\n answers.value.forEach((v, i) => {\n if (!v.title) {\n msg += `选项${String.fromCharCode(65 + i)}未填写。`\n }\n })\n\n if (msg) {\n ElMessage.error(msg)\n return\n }\n\n if (!rowTitle.value) {\n ElMessage.error('行标题不能为空!')\n return\n }\n\n scaleQuestionList.value = rowTitle.value.split('\\n').filter(i => i)\n\n emits('save', {\n title: title.value,\n answers: answers.value,\n analysis: analysis.value,\n scaleQuestionList: scaleQuestionList.value,\n examRichTextContent: showRichText.value ? richText.value : '',\n })\n}\n\nfunction init() {\n if (props.title) {\n title.value = props.title\n }\n\n if (props.answerList && props.answerList.length) {\n answers.value = props.answerList\n }\n\n if (props.analysis) {\n analysis.value = props.analysis\n }\n\n if (props.scaleQuestionList) {\n scaleQuestionList.value = props.scaleQuestionList\n rowTitle.value = scaleQuestionList.value.join('\\n')\n }\n if (props.examRichTextContent) {\n richText.value = props.examRichTextContent\n showRichText.value = true\n }\n}\n\nonMounted(init)\nconst ns = useNamespace('subject-scale')\n</script>\n\n<template>\n <div :class=\"ns.e('scale-exam')\">\n <SubjectLayout :show-edit=\"isEdit\">\n <template #preview>\n <div class=\"preview\">\n <div>\n <span class=\"title\">{{ orderIndex + 1 }}.{{ title }}(量表题)</span>\n <div v-if=\"showRichText\">\n <div v-html=\"richText\" />\n </div>\n </div>\n <div class=\"answer-radio flex-col\">\n <el-row style=\"padding: 10px 0;\">\n <el-col :span=\"span\" />\n <el-col\n v-for=\"item in answers\"\n :key=\"item.title\"\n class=\"flex flex-center\"\n :span=\"span\"\n >\n <span>{{ item.title }}</span>\n </el-col>\n </el-row>\n <el-row\n v-for=\"item in scaleQuestionList\"\n :key=\"item\"\n style=\"padding: 10px 0;\"\n >\n <el-col :span=\"span\" class=\"flex flex-center\">\n <span>{{ item }}</span>\n </el-col>\n <el-col\n v-for=\"i in answers.length\"\n :key=\"i\"\n class=\"radio-item flex flex-center\"\n :span=\"span\"\n >\n <el-radio :disabled=\"true\" />\n </el-col>\n </el-row>\n </div>\n </div>\n </template>\n <template #edit>\n <div class=\"flex\" :class=\"[{ 'margin-bottom': showRichText }]\">\n <div class=\"label flex flex-justify-center\">\n <span>题目:</span>\n </div>\n <div style=\"flex: 1;\">\n <el-input\n v-model=\"title\"\n type=\"textarea\"\n :rows=\"2\"\n placeholder=\"【量表题】请输入问题\"\n :disabled=\"isSave\"\n />\n </div>\n </div>\n <div class=\"answer flex\">\n <div class=\"label flex flex-justify-center\">\n <span>行标题:</span>\n </div>\n <div class=\"flex\">\n <el-input\n v-model=\"rowTitle\"\n type=\"textarea\"\n placeholder=\"请输入行标题\"\n style=\"width: 160px;\"\n :rows=\"10\"\n />\n <div class=\"answer-list flex-col\">\n <div\n v-for=\"(item, index) in answers\"\n :key=\"index\"\n class=\"answer-item flex flex-items-center\"\n >\n <span class=\"order\">{{ String.fromCharCode(65 + index) }}.</span>\n <el-input\n v-model=\"item.title\"\n class=\"input\"\n show-word-limit\n :maxlength=\"10\"\n :placeholder=\"`选项${String.fromCharCode(65 + index)}`\"\n :disabled=\"isSave\"\n />\n <!-- <PlusCircleOutlined\n class=\"icon\"\n :class=\"[{ disabled: answers.length === 5 }]\"\n @click=\"addAnswer\"\n />\n <MinusCircleOutlined\n class=\"icon\"\n :class=\"[{ disabled: answers.length < 3 }]\"\n @click=\"deleteAnswer(index)\"\n /> -->\n <el-icon class=\"icon\">\n <CirclePlus\n :class=\"[{ disabled: answers.length === 5 }]\"\n @click=\"addAnswer\"\n />\n </el-icon>\n <el-icon class=\"icon\">\n <Remove\n :class=\"[{ disabled: answers.length < 3 }]\"\n @click=\"deleteAnswer(index)\"\n />\n </el-icon>\n </div>\n </div>\n </div>\n </div>\n <div class=\"flex\" style=\"margin-bottom: 20px;\">\n <div class=\"label flex flex-justify-center\">\n <span>解析:</span>\n </div>\n <div style=\"flex: 1;\">\n <el-input\n v-model=\"analysis\"\n type=\"textarea\"\n :rows=\"2\"\n placeholder=\"请输入题目解析\"\n />\n </div>\n </div>\n <div v-if=\"showRichText\" class=\"margin-bottom flex\">\n <div class=\"label flex flex-justify-center\">\n <span>富文本:</span>\n </div>\n <div style=\"flex: 1;\">\n <TinyMceEditor v-model:model-value=\"richText\" v-bind=\"attrs\" style=\"width: 100%;\" />\n <div class=\"flex flex-justify-end\">\n <el-link\n type=\"danger\"\n @click=\"deleteRichText\"\n >\n 删除富文本\n </el-link>\n </div>\n </div>\n </div>\n </template>\n <SubjectAction\n v-if=\"showAction\"\n :is-edit=\"isEdit\"\n :is-set=\"isSet\"\n :showOtherOption=\"false\"\n :examAnswerRelationType=\"props.examAnswerRelationType\"\n @move-up=\"emits('move', 'up')\"\n @move-down=\"emits('move', 'down')\"\n @delete=\"emits('delete')\"\n @save=\"save\"\n @edit=\"emits('edit')\"\n @add=\"(type: any) => emits('add', type)\"\n @onShowRichText=\"showRichText = true\"\n />\n </SubjectLayout>\n </div>\n</template>\n"],"names":["props","__props","emits","__emit","attrs","useAttrs","answers","ref","title","analysis","rowTitle","showRichText","richText","scaleQuestionList","span","computed","Math","ceil","value","length","addAnswer","push","deleteRichText","save","ElMessage","error","msg","forEach","v","i","String","fromCharCode","split","filter","examRichTextContent","onMounted","answerList","join","ns","useNamespace","index","splice"],"mappings":"41CAWA,MAAMA,EAAQC,EAcRC,EAAQC,EAERC,EAAQC,EAAAA,WAERC,EAAUC,EAAAA,IAEX,CAAC,CACJC,MAAO,IACN,CACDA,MAAO,IACN,CACDA,MAAO,IACN,CACDA,MAAO,IACN,CACDA,MAAO,MAGHA,EAAQD,MAAI,IACZE,EAAWF,MAAI,IACfG,EAAWH,MAAI,IACfI,EAAeJ,OAAI,GACnBK,EAAWL,MAAI,IACfM,EAAoBN,EAAcA,IAAA,IAClCO,EAAOC,EAAAA,UAAS,IAAMC,KAAKC,KAAK,IAAMX,EAAQY,MAAMC,OAAS,MACnE,SAASC,IACsB,IAAzBd,EAAQY,MAAMC,QAGlBb,EAAQY,MAAMG,KAAK,CACjBb,MAAO,IACR,CAUH,SAASc,IACPX,EAAaO,OAAQ,EACrBN,EAASM,MAAQ,EAAA,CAGnB,SAASK,IACH,IAACf,EAAMU,MAET,YADAM,EAAAA,UAAUC,MAAM,aAGlB,IAAIC,EAAM,GACVpB,EAAQY,MAAMS,SAAQ,CAACC,EAAGC,KACnBD,EAAEpB,QACLkB,GAAO,KAAKI,OAAOC,aAAa,GAAKF,SAAE,IAIvCH,EACFF,EAAAA,UAAUC,MAAMC,GAIbhB,EAASQ,OAKIL,EAAAK,MAAQR,EAASQ,MAAMc,MAAM,MAAMC,WAAYJ,IAEjE3B,EAAM,OAAQ,CACZM,MAAOA,EAAMU,MACbZ,QAASA,EAAQY,MACjBT,SAAUA,EAASS,MACnBL,kBAAmBA,EAAkBK,MACrCgB,oBAAqBvB,EAAaO,MAAQN,EAASM,MAAQ,MAX3DM,EAAAA,UAAUC,MAAM,WAYjB,CA0BHU,EAAAA,WAvBA,WACMnC,EAAMQ,QACRA,EAAMU,MAAQlB,EAAMQ,OAGlBR,EAAMoC,YAAcpC,EAAMoC,WAAWjB,SACvCb,EAAQY,MAAQlB,EAAMoC,YAGpBpC,EAAMS,WACRA,EAASS,MAAQlB,EAAMS,UAGrBT,EAAMa,oBACRA,EAAkBK,MAAQlB,EAAMa,kBAChCH,EAASQ,MAAQL,EAAkBK,MAAMmB,KAAK,OAE5CrC,EAAMkC,sBACRtB,EAASM,MAAQlB,EAAMkC,oBACvBvB,EAAaO,OAAQ,EACvB,IAII,MAAAoB,EAAKC,eAAa,ivHArExB,SAAsBC,GAChBlC,EAAQY,MAAMC,OAAS,GAGnBb,EAAAY,MAAMuB,OAAOD,EAAO,EAAC"}
1
+ {"version":3,"file":"subject-scale.vue.cjs","sources":["../../../../../../../packages/components/src/subject-list/src/components/subject-scale.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { CirclePlus, Remove } from '@element-plus/icons-vue'\nimport { useNamespace } from '@qxs-bns/hooks'\nimport { ElMessage } from 'element-plus'\nimport SubjectAction from '../../../subject-action/src/subject-action.vue'\nimport SubjectLayout from '../../../subject-layout/src/subject-layout.vue'\nimport TinyMceEditor from '../../../tiny-mce-editor/src/tiny-mce-editor.vue'\n\ndefineOptions({\n name: 'QxsSubjectScale',\n})\nconst props = defineProps<{\n orderIndex: number\n title?: string\n isSave: boolean\n showAction?: boolean\n answerList?: any\n analysis?: string\n rowTitle?: string\n isEdit: boolean\n isSet: boolean\n scaleQuestionList?: any\n examRichTextContent?: string\n examAnswerRelationType?: number\n}>()\nconst emits = defineEmits(['move', 'save', 'delete', 'edit', 'add'])\n\nconst attrs = useAttrs()\n\nconst answers = ref<{\n title: string\n}[]>([{\n title: '',\n}, {\n title: '',\n}, {\n title: '',\n}, {\n title: '',\n}, {\n title: '',\n}])\n\nconst title = ref('')\nconst analysis = ref('')\nconst rowTitle = ref('')\nconst showRichText = ref(false)\nconst richText = ref('')\nconst scaleQuestionList = ref<string[]>([])\nconst span = computed(() => Math.ceil(24 / (answers.value.length + 1)))\nfunction addAnswer() {\n if (answers.value.length === 5) {\n return\n }\n answers.value.push({\n title: '',\n })\n}\n\nfunction deleteAnswer(index: number) {\n if (answers.value.length < 3) {\n return\n }\n answers.value.splice(index, 1)\n}\n\nfunction deleteRichText() {\n showRichText.value = false\n richText.value = ''\n}\n\nfunction save() {\n if (!title.value) {\n ElMessage.error('题目标题不能为空!')\n return\n }\n let msg = ''\n answers.value.forEach((v, i) => {\n if (!v.title) {\n msg += `选项${String.fromCharCode(65 + i)}未填写。`\n }\n })\n\n if (msg) {\n ElMessage.error(msg)\n return\n }\n\n if (!rowTitle.value) {\n ElMessage.error('行标题不能为空!')\n return\n }\n\n scaleQuestionList.value = rowTitle.value.split('\\n').filter(i => i)\n\n emits('save', {\n title: title.value,\n answers: answers.value,\n analysis: analysis.value,\n scaleQuestionList: scaleQuestionList.value,\n examRichTextContent: showRichText.value ? richText.value : '',\n })\n}\n\nfunction init() {\n if (props.title) {\n title.value = props.title\n }\n\n if (props.answerList && props.answerList.length) {\n answers.value = props.answerList\n }\n\n if (props.analysis) {\n analysis.value = props.analysis\n }\n\n if (props.scaleQuestionList) {\n scaleQuestionList.value = props.scaleQuestionList\n rowTitle.value = scaleQuestionList.value.join('\\n')\n }\n if (props.examRichTextContent) {\n richText.value = props.examRichTextContent\n showRichText.value = true\n }\n}\n\nonMounted(init)\nconst ns = useNamespace('subject-scale')\n</script>\n\n<template>\n <div :class=\"ns.e('scale-exam')\">\n <SubjectLayout :show-edit=\"isEdit\">\n <template #preview>\n <div class=\"preview\">\n <div>\n <span class=\"title\">{{ orderIndex + 1 }}.{{ title }}(量表题)</span>\n <div v-if=\"showRichText\">\n <div v-html=\"richText\" class=\"rich-text\"/>\n </div>\n </div>\n <div class=\"answer-radio flex-col\">\n <el-row style=\"padding: 10px 0;\">\n <el-col :span=\"span\" />\n <el-col\n v-for=\"item in answers\"\n :key=\"item.title\"\n class=\"flex flex-center\"\n :span=\"span\"\n >\n <span>{{ item.title }}</span>\n </el-col>\n </el-row>\n <el-row\n v-for=\"item in scaleQuestionList\"\n :key=\"item\"\n style=\"padding: 10px 0;\"\n >\n <el-col :span=\"span\" class=\"flex flex-center\">\n <span>{{ item }}</span>\n </el-col>\n <el-col\n v-for=\"i in answers.length\"\n :key=\"i\"\n class=\"radio-item flex flex-center\"\n :span=\"span\"\n >\n <el-radio :disabled=\"true\" />\n </el-col>\n </el-row>\n </div>\n </div>\n </template>\n <template #edit>\n <div class=\"flex\" :class=\"[{ 'margin-bottom': showRichText }]\">\n <div class=\"label flex flex-justify-center\">\n <span>题目:</span>\n </div>\n <div style=\"flex: 1;\">\n <el-input\n v-model=\"title\"\n type=\"textarea\"\n :rows=\"2\"\n placeholder=\"【量表题】请输入问题\"\n :disabled=\"isSave\"\n />\n </div>\n </div>\n <div class=\"answer flex\">\n <div class=\"label flex flex-justify-center\">\n <span>行标题:</span>\n </div>\n <div class=\"flex\">\n <el-input\n v-model=\"rowTitle\"\n type=\"textarea\"\n placeholder=\"请输入行标题\"\n style=\"width: 160px;\"\n :rows=\"10\"\n />\n <div class=\"answer-list flex-col\">\n <div\n v-for=\"(item, index) in answers\"\n :key=\"index\"\n class=\"answer-item flex flex-items-center\"\n >\n <span class=\"order\">{{ String.fromCharCode(65 + index) }}.</span>\n <el-input\n v-model=\"item.title\"\n class=\"input\"\n show-word-limit\n :maxlength=\"10\"\n :placeholder=\"`选项${String.fromCharCode(65 + index)}`\"\n :disabled=\"isSave\"\n />\n <!-- <PlusCircleOutlined\n class=\"icon\"\n :class=\"[{ disabled: answers.length === 5 }]\"\n @click=\"addAnswer\"\n />\n <MinusCircleOutlined\n class=\"icon\"\n :class=\"[{ disabled: answers.length < 3 }]\"\n @click=\"deleteAnswer(index)\"\n /> -->\n <el-icon class=\"icon\">\n <CirclePlus\n :class=\"[{ disabled: answers.length === 5 }]\"\n @click=\"addAnswer\"\n />\n </el-icon>\n <el-icon class=\"icon\">\n <Remove\n :class=\"[{ disabled: answers.length < 3 }]\"\n @click=\"deleteAnswer(index)\"\n />\n </el-icon>\n </div>\n </div>\n </div>\n </div>\n <div class=\"flex\" style=\"margin-bottom: 20px;\">\n <div class=\"label flex flex-justify-center\">\n <span>解析:</span>\n </div>\n <div style=\"flex: 1;\">\n <el-input\n v-model=\"analysis\"\n type=\"textarea\"\n :rows=\"2\"\n placeholder=\"请输入题目解析\"\n />\n </div>\n </div>\n <div v-if=\"showRichText\" class=\"margin-bottom flex\">\n <div class=\"label flex flex-justify-center\">\n <span>富文本:</span>\n </div>\n <div style=\"flex: 1;\">\n <TinyMceEditor v-model:model-value=\"richText\" v-bind=\"attrs\" style=\"width: 100%;\" />\n <div class=\"flex flex-justify-end\">\n <el-link\n type=\"danger\"\n @click=\"deleteRichText\"\n >\n 删除富文本\n </el-link>\n </div>\n </div>\n </div>\n </template>\n <SubjectAction\n v-if=\"showAction\"\n :is-edit=\"isEdit\"\n :is-set=\"isSet\"\n :showOtherOption=\"false\"\n :examAnswerRelationType=\"props.examAnswerRelationType\"\n @move-up=\"emits('move', 'up')\"\n @move-down=\"emits('move', 'down')\"\n @delete=\"emits('delete')\"\n @save=\"save\"\n @edit=\"emits('edit')\"\n @add=\"(type: any) => emits('add', type)\"\n @onShowRichText=\"showRichText = true\"\n />\n </SubjectLayout>\n </div>\n</template>\n"],"names":["props","__props","emits","__emit","attrs","useAttrs","answers","ref","title","analysis","rowTitle","showRichText","richText","scaleQuestionList","span","computed","Math","ceil","value","length","addAnswer","push","deleteRichText","save","ElMessage","error","msg","forEach","v","i","String","fromCharCode","split","filter","examRichTextContent","onMounted","answerList","join","ns","useNamespace","index","splice"],"mappings":"41CAWA,MAAMA,EAAQC,EAcRC,EAAQC,EAERC,EAAQC,EAAAA,WAERC,EAAUC,EAAAA,IAEX,CAAC,CACJC,MAAO,IACN,CACDA,MAAO,IACN,CACDA,MAAO,IACN,CACDA,MAAO,IACN,CACDA,MAAO,MAGHA,EAAQD,MAAI,IACZE,EAAWF,MAAI,IACfG,EAAWH,MAAI,IACfI,EAAeJ,OAAI,GACnBK,EAAWL,MAAI,IACfM,EAAoBN,EAAcA,IAAA,IAClCO,EAAOC,EAAAA,UAAS,IAAMC,KAAKC,KAAK,IAAMX,EAAQY,MAAMC,OAAS,MACnE,SAASC,IACsB,IAAzBd,EAAQY,MAAMC,QAGlBb,EAAQY,MAAMG,KAAK,CACjBb,MAAO,IACR,CAUH,SAASc,IACPX,EAAaO,OAAQ,EACrBN,EAASM,MAAQ,EAAA,CAGnB,SAASK,IACH,IAACf,EAAMU,MAET,YADAM,EAAAA,UAAUC,MAAM,aAGlB,IAAIC,EAAM,GACVpB,EAAQY,MAAMS,SAAQ,CAACC,EAAGC,KACnBD,EAAEpB,QACLkB,GAAO,KAAKI,OAAOC,aAAa,GAAKF,SAAE,IAIvCH,EACFF,EAAAA,UAAUC,MAAMC,GAIbhB,EAASQ,OAKIL,EAAAK,MAAQR,EAASQ,MAAMc,MAAM,MAAMC,WAAYJ,IAEjE3B,EAAM,OAAQ,CACZM,MAAOA,EAAMU,MACbZ,QAASA,EAAQY,MACjBT,SAAUA,EAASS,MACnBL,kBAAmBA,EAAkBK,MACrCgB,oBAAqBvB,EAAaO,MAAQN,EAASM,MAAQ,MAX3DM,EAAAA,UAAUC,MAAM,WAYjB,CA0BHU,EAAAA,WAvBA,WACMnC,EAAMQ,QACRA,EAAMU,MAAQlB,EAAMQ,OAGlBR,EAAMoC,YAAcpC,EAAMoC,WAAWjB,SACvCb,EAAQY,MAAQlB,EAAMoC,YAGpBpC,EAAMS,WACRA,EAASS,MAAQlB,EAAMS,UAGrBT,EAAMa,oBACRA,EAAkBK,MAAQlB,EAAMa,kBAChCH,EAASQ,MAAQL,EAAkBK,MAAMmB,KAAK,OAE5CrC,EAAMkC,sBACRtB,EAASM,MAAQlB,EAAMkC,oBACvBvB,EAAaO,OAAQ,EACvB,IAII,MAAAoB,EAAKC,eAAa,mwHArExB,SAAsBC,GAChBlC,EAAQY,MAAMC,OAAS,GAGnBb,EAAAY,MAAMuB,OAAOD,EAAO,EAAC"}