@qxs-bns/components 0.0.46 → 0.0.47

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 (160) hide show
  1. package/es/index.css +83 -0
  2. package/es/package.json.mjs +1 -1
  3. package/es/src/data-chart/src/components/area.vue.mjs +1 -1
  4. package/es/src/data-chart/src/components/card.vue.mjs +1 -1
  5. package/es/src/data-chart/src/components/card.vue2.mjs +1 -1
  6. package/es/src/data-chart/src/components/card.vue2.mjs.map +1 -1
  7. package/es/src/data-chart/src/components/line.vue.mjs +1 -1
  8. package/es/src/data-chart/src/components/table.vue.mjs +1 -1
  9. package/es/src/data-chart/src/components/table.vue.mjs.map +1 -1
  10. package/es/src/file-upload/src/file-upload.vue.mjs +1 -1
  11. package/es/src/file-upload/src/file-upload.vue.mjs.map +1 -1
  12. package/es/src/image-upload/src/image-upload.vue.mjs +1 -1
  13. package/es/src/image-upload/src/image-upload.vue.mjs.map +1 -1
  14. package/es/src/subject-action/src/subject-action.vue.mjs +1 -1
  15. package/es/src/subject-action/src/subject-action.vue.mjs.map +1 -1
  16. package/es/src/subject-list/src/components/SubjectPageEnd.vue.mjs +1 -1
  17. package/es/src/subject-list/src/components/SubjectPageEnd.vue.mjs.map +1 -1
  18. package/es/src/subject-list/src/components/subject-blank-fill.vue.mjs +1 -1
  19. package/es/src/subject-list/src/components/subject-blank-fill.vue.mjs.map +1 -1
  20. package/es/src/subject-list/src/components/subject-scale.vue.mjs +1 -1
  21. package/es/src/subject-list/src/components/subject-scale.vue.mjs.map +1 -1
  22. package/es/src/subject-list/src/components/subject-single.vue.mjs +1 -1
  23. package/es/src/subject-list/src/components/subject-single.vue.mjs.map +1 -1
  24. package/es/src/subject-list/src/components/subject-text-fill.vue.mjs +1 -1
  25. package/es/src/subject-list/src/components/subject-text-fill.vue.mjs.map +1 -1
  26. package/es/src/subject-list/src/subject-list.vue.mjs +1 -1
  27. package/es/src/subject-list/src/subject-list.vue.mjs.map +1 -1
  28. package/es/src/tiny-mce-editor/index.mjs.map +1 -1
  29. package/es/src/tiny-mce-editor/src/tiny-mce-editor.vue.mjs +1 -1
  30. package/es/src/tiny-mce-editor/src/tiny-mce-editor.vue.mjs.map +1 -1
  31. package/lib/index.css +83 -0
  32. package/lib/package.json.cjs +1 -1
  33. package/lib/src/data-chart/src/components/area.vue.cjs +1 -1
  34. package/lib/src/data-chart/src/components/card.vue.cjs +1 -1
  35. package/lib/src/data-chart/src/components/card.vue2.cjs +1 -1
  36. package/lib/src/data-chart/src/components/card.vue2.cjs.map +1 -1
  37. package/lib/src/data-chart/src/components/line.vue.cjs +1 -1
  38. package/lib/src/data-chart/src/components/table.vue.cjs +1 -1
  39. package/lib/src/data-chart/src/components/table.vue.cjs.map +1 -1
  40. package/lib/src/file-upload/src/file-upload.vue.cjs +1 -1
  41. package/lib/src/file-upload/src/file-upload.vue.cjs.map +1 -1
  42. package/lib/src/image-upload/src/image-upload.vue.cjs +1 -1
  43. package/lib/src/image-upload/src/image-upload.vue.cjs.map +1 -1
  44. package/lib/src/subject-action/src/subject-action.vue.cjs +1 -1
  45. package/lib/src/subject-action/src/subject-action.vue.cjs.map +1 -1
  46. package/lib/src/subject-list/src/components/SubjectPageEnd.vue.cjs +1 -1
  47. package/lib/src/subject-list/src/components/SubjectPageEnd.vue.cjs.map +1 -1
  48. package/lib/src/subject-list/src/components/subject-blank-fill.vue.cjs +1 -1
  49. package/lib/src/subject-list/src/components/subject-blank-fill.vue.cjs.map +1 -1
  50. package/lib/src/subject-list/src/components/subject-scale.vue.cjs +1 -1
  51. package/lib/src/subject-list/src/components/subject-scale.vue.cjs.map +1 -1
  52. package/lib/src/subject-list/src/components/subject-single.vue.cjs +1 -1
  53. package/lib/src/subject-list/src/components/subject-single.vue.cjs.map +1 -1
  54. package/lib/src/subject-list/src/components/subject-text-fill.vue.cjs +1 -1
  55. package/lib/src/subject-list/src/components/subject-text-fill.vue.cjs.map +1 -1
  56. package/lib/src/subject-list/src/subject-list.vue.cjs +1 -1
  57. package/lib/src/subject-list/src/subject-list.vue.cjs.map +1 -1
  58. package/lib/src/tiny-mce-editor/index.cjs.map +1 -1
  59. package/lib/src/tiny-mce-editor/src/tiny-mce-editor.vue.cjs +1 -1
  60. package/lib/src/tiny-mce-editor/src/tiny-mce-editor.vue.cjs.map +1 -1
  61. package/package.json +3 -6
  62. package/theme-chalk/index.css +1 -1
  63. package/theme-chalk/index.scss +13 -0
  64. package/theme-chalk/src/base.css +1 -0
  65. package/theme-chalk/src/base.scss +16 -0
  66. package/theme-chalk/src/common/element-plus.css +1 -0
  67. package/theme-chalk/src/common/element-plus.scss +606 -0
  68. package/theme-chalk/src/data-chart/empty.css +1 -0
  69. package/theme-chalk/src/data-chart/empty.scss +24 -0
  70. package/theme-chalk/src/data-chart/index.css +1 -0
  71. package/theme-chalk/src/data-chart/index.scss +9 -0
  72. package/theme-chalk/src/data-chart/table.css +1 -0
  73. package/theme-chalk/src/data-chart/table.scss +39 -0
  74. package/theme-chalk/src/file-upload.css +1 -0
  75. package/theme-chalk/src/file-upload.scss +34 -0
  76. package/theme-chalk/src/fixed-action-bar.css +1 -0
  77. package/theme-chalk/src/fixed-action-bar.scss +18 -0
  78. package/theme-chalk/src/image-upload.css +1 -0
  79. package/theme-chalk/src/image-upload.scss +135 -0
  80. package/theme-chalk/src/mixins/_var.css +0 -0
  81. package/theme-chalk/src/mixins/_var.scss +24 -0
  82. package/theme-chalk/src/mixins/config.css +0 -0
  83. package/theme-chalk/src/mixins/config.scss +14 -0
  84. package/theme-chalk/src/mixins/function.css +0 -0
  85. package/theme-chalk/src/mixins/function.scss +95 -0
  86. package/theme-chalk/src/mixins/mixins.css +0 -0
  87. package/theme-chalk/src/mixins/mixins.scss +103 -0
  88. package/theme-chalk/src/photo-crop-tool.css +1 -0
  89. package/theme-chalk/src/photo-crop-tool.scss +84 -0
  90. package/theme-chalk/{subject-action.css → src/subject-action.css} +1 -1
  91. package/theme-chalk/src/subject-action.scss +36 -0
  92. package/theme-chalk/src/subject-layout.css +1 -0
  93. package/theme-chalk/src/subject-layout.scss +28 -0
  94. package/theme-chalk/src/subject-list.css +1 -0
  95. package/theme-chalk/src/subject-list.scss +289 -0
  96. package/theme-chalk/src/subject-template.scss +5 -0
  97. package/theme-chalk/src/subject-type.css +1 -0
  98. package/theme-chalk/src/subject-type.scss +32 -0
  99. package/theme-chalk/src/tiny-mce-editor.css +1 -0
  100. package/theme-chalk/src/tiny-mce-editor.scss +27 -0
  101. package/types/src/image-upload/index.d.ts +3 -40
  102. package/types/src/image-upload/index.d.ts.map +1 -1
  103. package/types/src/image-upload/src/image-upload.vue.d.ts +11 -20
  104. package/types/src/image-upload/src/image-upload.vue.d.ts.map +1 -1
  105. package/types/src/subject-layout/src/subject-layout.vue.d.ts.map +1 -1
  106. package/types/src/tiny-mce-editor/index.d.ts +1 -1
  107. package/types/src/tiny-mce-editor/index.d.ts.map +1 -1
  108. package/types/src/tiny-mce-editor/src/tiny-mce-editor.vue.d.ts +19 -19
  109. package/types/src/tiny-mce-editor/src/tiny-mce-editor.vue.d.ts.map +1 -1
  110. package/types/tsconfig.tsbuildinfo +1 -1
  111. package/es/node_modules/.pnpm/style-inject@0.3.0/node_modules/style-inject/dist/style-inject.es.mjs +0 -2
  112. package/es/node_modules/.pnpm/style-inject@0.3.0/node_modules/style-inject/dist/style-inject.es.mjs.map +0 -1
  113. package/es/src/data-chart/src/components/area.vue3.mjs +0 -2
  114. package/es/src/data-chart/src/components/area.vue3.mjs.map +0 -1
  115. package/es/src/data-chart/src/components/card.vue3.mjs +0 -2
  116. package/es/src/data-chart/src/components/card.vue3.mjs.map +0 -1
  117. package/es/src/data-chart/src/components/line.vue3.mjs +0 -2
  118. package/es/src/data-chart/src/components/line.vue3.mjs.map +0 -1
  119. package/lib/node_modules/.pnpm/style-inject@0.3.0/node_modules/style-inject/dist/style-inject.es.cjs +0 -2
  120. package/lib/node_modules/.pnpm/style-inject@0.3.0/node_modules/style-inject/dist/style-inject.es.cjs.map +0 -1
  121. package/lib/src/data-chart/src/components/area.vue3.cjs +0 -2
  122. package/lib/src/data-chart/src/components/area.vue3.cjs.map +0 -1
  123. package/lib/src/data-chart/src/components/card.vue3.cjs +0 -2
  124. package/lib/src/data-chart/src/components/card.vue3.cjs.map +0 -1
  125. package/lib/src/data-chart/src/components/line.vue3.cjs +0 -2
  126. package/lib/src/data-chart/src/components/line.vue3.cjs.map +0 -1
  127. package/theme-chalk/base.css +0 -1
  128. package/theme-chalk/file-upload.css +0 -1
  129. package/theme-chalk/fixed-action-bar.css +0 -1
  130. package/theme-chalk/image-upload.css +0 -1
  131. package/theme-chalk/photo-crop-tool.css +0 -1
  132. package/theme-chalk/src/base.scss.js +0 -4
  133. package/theme-chalk/src/base.scss.js.map +0 -1
  134. package/theme-chalk/src/file-upload.scss.js +0 -4
  135. package/theme-chalk/src/file-upload.scss.js.map +0 -1
  136. package/theme-chalk/src/fixed-action-bar.scss.js +0 -4
  137. package/theme-chalk/src/fixed-action-bar.scss.js.map +0 -1
  138. package/theme-chalk/src/image-upload.scss.js +0 -4
  139. package/theme-chalk/src/image-upload.scss.js.map +0 -1
  140. package/theme-chalk/src/index.scss.js +0 -4
  141. package/theme-chalk/src/index.scss.js.map +0 -1
  142. package/theme-chalk/src/photo-crop-tool.scss.js +0 -4
  143. package/theme-chalk/src/photo-crop-tool.scss.js.map +0 -1
  144. package/theme-chalk/src/subject-action.scss.js +0 -4
  145. package/theme-chalk/src/subject-action.scss.js.map +0 -1
  146. package/theme-chalk/src/subject-layout.scss.js +0 -4
  147. package/theme-chalk/src/subject-layout.scss.js.map +0 -1
  148. package/theme-chalk/src/subject-list.scss.js +0 -4
  149. package/theme-chalk/src/subject-list.scss.js.map +0 -1
  150. package/theme-chalk/src/subject-template.scss.js +0 -4
  151. package/theme-chalk/src/subject-template.scss.js.map +0 -1
  152. package/theme-chalk/src/subject-type.scss.js +0 -4
  153. package/theme-chalk/src/subject-type.scss.js.map +0 -1
  154. package/theme-chalk/src/tiny-mce-editor.scss.js +0 -4
  155. package/theme-chalk/src/tiny-mce-editor.scss.js.map +0 -1
  156. package/theme-chalk/subject-layout.css +0 -1
  157. package/theme-chalk/subject-list.css +0 -1
  158. package/theme-chalk/subject-type.css +0 -1
  159. package/theme-chalk/tiny-mce-editor.css +0 -1
  160. /package/theme-chalk/{subject-template.css → src/subject-template.css} +0 -0
package/es/index.css ADDED
@@ -0,0 +1,83 @@
1
+ /* unplugin-vue-components disabled */
2
+ .line-vue-vue-type-style-index-0-scoped-397864aa-lang_data-chart-line__IKZEs[data-v-397864aa] {
3
+ width: 100%;
4
+ height: 100%;
5
+ }
6
+ /* unplugin-vue-components disabled */
7
+ .area-vue-vue-type-style-index-0-scoped-51660d7b-lang_data-chart-area-wrap__nAnr8[data-v-51660d7b] {
8
+ position: relative;
9
+ }
10
+ .area-vue-vue-type-style-index-0-scoped-51660d7b-lang_data-chart-area-wrap__nAnr8 .area-vue-vue-type-style-index-0-scoped-51660d7b-lang_city-select__IkwG-[data-v-51660d7b] {
11
+ position: absolute;
12
+ top: 10px;
13
+ right: 100px;
14
+ z-index: 1;
15
+ width: 120px;
16
+ }
17
+ .area-vue-vue-type-style-index-0-scoped-51660d7b-lang_data-chart-area-wrap__nAnr8 .area-vue-vue-type-style-index-0-scoped-51660d7b-lang_data-chart-area__tbCEP[data-v-51660d7b] {
18
+ height: 100%;
19
+ }
20
+ /* unplugin-vue-components disabled */
21
+ .card-vue-vue-type-style-index-0-scoped-1c14c088-lang_data-chart-card__IY-jh[data-v-1c14c088] {
22
+ display: flex;
23
+ flex-direction: column;
24
+ }
25
+ .card-vue-vue-type-style-index-0-scoped-1c14c088-lang_data-chart-card__IY-jh .card-vue-vue-type-style-index-0-scoped-1c14c088-lang_title__dVPGY[data-v-1c14c088] {
26
+ display: flex;
27
+ align-items: center;
28
+ justify-content: space-between;
29
+ padding: 0 5px;
30
+ margin-top: 2px;
31
+ margin-bottom: 7px;
32
+ font-family: sans-serif;
33
+ font-size: 14px;
34
+ font-weight: bolder;
35
+ color: #464646;
36
+ }
37
+ .card-vue-vue-type-style-index-0-scoped-1c14c088-lang_data-chart-card__IY-jh .card-vue-vue-type-style-index-0-scoped-1c14c088-lang_data-chart-card-grid-layout__RzZja[data-v-1c14c088] {
38
+ display: grid;
39
+ grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
40
+ gap: 10px;
41
+ width: calc(100% - 3px);
42
+ }
43
+ .card-vue-vue-type-style-index-0-scoped-1c14c088-lang_data-chart-card__IY-jh .card-vue-vue-type-style-index-0-scoped-1c14c088-lang_data-chart-card-wrap__kvIfO[data-v-1c14c088] {
44
+ height: 100% !important;
45
+ }
46
+ .card-vue-vue-type-style-index-0-scoped-1c14c088-lang_data-chart-card__IY-jh .card-vue-vue-type-style-index-0-scoped-1c14c088-lang_data-chart-card-wrap__kvIfO .card-vue-vue-type-style-index-0-scoped-1c14c088-lang_card-item__oV7pK[data-v-1c14c088] {
47
+ width: 100% !important;
48
+ }
49
+ .card-vue-vue-type-style-index-0-scoped-1c14c088-lang_data-chart-card__IY-jh .card-vue-vue-type-style-index-0-scoped-1c14c088-lang_card-item__oV7pK[data-v-1c14c088] {
50
+ position: relative;
51
+ background-image: url("./data-chart-card-bg-left.svg"), url("./data-chart-card-bg-right.svg");
52
+ background-repeat: no-repeat;
53
+ background-position: left top, right top;
54
+ background-size: contain, contain;
55
+ border: 2px solid #2196f3;
56
+ border-radius: 6px;
57
+ }
58
+ .card-vue-vue-type-style-index-0-scoped-1c14c088-lang_data-chart-card__IY-jh .card-vue-vue-type-style-index-0-scoped-1c14c088-lang_card-item__oV7pK .card-vue-vue-type-style-index-0-scoped-1c14c088-lang_suffix-icon__f7x6q[data-v-1c14c088] {
59
+ position: absolute;
60
+ right: 1px;
61
+ bottom: calc(25% - 14px);
62
+ width: 20px;
63
+ font-size: 20px;
64
+ font-weight: bold;
65
+ color: #fff;
66
+ text-align: center;
67
+ }
68
+ .card-vue-vue-type-style-index-0-scoped-1c14c088-lang_data-chart-card__IY-jh .card-vue-vue-type-style-index-0-scoped-1c14c088-lang_card-item__oV7pK .card-vue-vue-type-style-index-0-scoped-1c14c088-lang_card-title__eF2-d[data-v-1c14c088] {
69
+ padding-left: 15px;
70
+ margin-top: 10px;
71
+ margin-bottom: 5px;
72
+ overflow: hidden;
73
+ font-size: 16px;
74
+ font-weight: bold;
75
+ color: #2196f3;
76
+ text-overflow: ellipsis;
77
+ white-space: nowrap;
78
+ }
79
+ .card-vue-vue-type-style-index-0-scoped-1c14c088-lang_data-chart-card__IY-jh .card-vue-vue-type-style-index-0-scoped-1c14c088-lang_card-item__oV7pK .card-vue-vue-type-style-index-0-scoped-1c14c088-lang_context__ro9I-[data-v-1c14c088] {
80
+ padding: 0 30px 10px 20px;
81
+ font-size: 14px;
82
+ color: #464646;
83
+ }
@@ -1,2 +1,2 @@
1
- var r="0.0.46";export{r as version};
1
+ var r="0.0.47";export{r as version};
2
2
  //# sourceMappingURL=package.json.mjs.map
@@ -1,2 +1,2 @@
1
- import r from"./area.vue2.mjs";import"./area.vue3.mjs";import e from"../../../../_virtual/_plugin-vue_export-helper.mjs";var a=e(r,[["__scopeId","data-v-51660d7b"]]);export{a as default};
1
+ import r from"./area.vue2.mjs";import e from"../../../../_virtual/_plugin-vue_export-helper.mjs";var a=e(r,[["__scopeId","data-v-51660d7b"]]);export{a as default};
2
2
  //# sourceMappingURL=area.vue.mjs.map
@@ -1,2 +1,2 @@
1
- import r from"./card.vue2.mjs";import"./card.vue3.mjs";import e from"../../../../_virtual/_plugin-vue_export-helper.mjs";var a=e(r,[["__scopeId","data-v-1c14c088"]]);export{a as default};
1
+ import r from"./card.vue2.mjs";import e from"../../../../_virtual/_plugin-vue_export-helper.mjs";var a=e(r,[["__scopeId","data-v-1c14c088"]]);export{a as default};
2
2
  //# sourceMappingURL=card.vue.mjs.map
@@ -1,2 +1,2 @@
1
- import{ElScrollbar as a}from"element-plus/es";import{defineComponent as t,createElementBlock as c,openBlock as e,createCommentVNode as l,withDirectives as r,toDisplayString as s,createBlock as d,withCtx as n,createElementVNode as o,normalizeClass as i,Fragment as D,renderList as h,createTextVNode as u,vShow as m,createVNode as p}from"vue";import y from"./empty.vue.mjs";const v={class:"data-chart-card"},g={key:0,class:"title"},f=["title"],k={class:"context"},x={class:"suffix-icon"},B={key:2,class:"data-chart-card-wrap"},N=["title"],_={class:"context"};var j=t({name:"DataChartCard",__name:"card",props:{chartData:{type:Object,default:()=>({colDesc:[],xGroupByDesc:[],data:[],modelName:""})}},setup(t){const j=t;function C(a){const t=j.chartData.xGroupByDesc?.colDesc||"";return t?t+a[t]:""}return(j,G)=>{const $=a;return e(),c("div",v,[t.chartData.groupByDesc.length?(e(),c("p",g,s(t.chartData.modelName),1)):l("v-if",!0),t.chartData.groupByDesc.length?r((e(),d($,{key:1},{default:n((()=>[o("div",{class:i({"data-chart-card-grid-layout":t.chartData.groupByDesc.length})},[(e(!0),c(D,null,h(t.chartData.data,((a,l)=>(e(),c("div",{key:l,class:"card-item"},[o("div",{class:"card-title",title:C(a)},s(C(a)),9,f),o("div",k,[(e(!0),c(D,null,h(t.chartData.colDesc,((l,r)=>(e(),c("span",{key:l},[u(s(`${l}: `||"-"),1),o("strong",null,s(a[l]||"-"),1),u(" "+s(r===t.chartData.colDesc.length-1?"":","),1)])))),128))]),o("div",x,s(l+1),1)])))),128))],2)])),_:1},512)),[[m,t.chartData.data.length]]):(e(),c("div",B,[(e(!0),c(D,null,h(t.chartData.data,((a,r)=>(e(),c("div",{key:r,class:"card-item"},[o("div",{class:"card-title",title:t.chartData.modelName},s(t.chartData.modelName),9,N),o("div",_,[(e(!0),c(D,null,h(t.chartData.colDesc,((r,d)=>(e(),c("span",{key:r},[a?(e(),c(D,{key:0},[u(s(`${r}: `||"-"),1),o("strong",null,s(a[r]||"-"),1),u(" "+s(d===t.chartData.colDesc.length-1?"":","),1)],64)):l("v-if",!0)])))),128))])])))),128))])),r(p(y,null,null,512),[[m,!t.chartData.data.length]])])}}});export{j as default};
1
+ import{ElScrollbar as a}from"element-plus/es";import"element-plus/es/components/base/style/index";import"element-plus/es/components/scrollbar/style/index";import{defineComponent as t,createElementBlock as e,openBlock as c,createCommentVNode as l,withDirectives as s,toDisplayString as r,createBlock as n,withCtx as o,createElementVNode as d,normalizeClass as i,Fragment as u,renderList as D,createTextVNode as h,vShow as m,createVNode as p}from"vue";import y from"./empty.vue.mjs";const v={class:"data-chart-card"},g={key:0,class:"title"},f=["title"],k={class:"context"},x={class:"suffix-icon"},B={key:2,class:"data-chart-card-wrap"},N=["title"],b={class:"context"};var _=t({name:"DataChartCard",__name:"card",props:{chartData:{type:Object,default:()=>({colDesc:[],xGroupByDesc:[],data:[],modelName:""})}},setup(t){const _=t;function j(a){const t=_.chartData.xGroupByDesc?.colDesc||"";return t?t+a[t]:""}return(_,C)=>{const G=a;return c(),e("div",v,[t.chartData.groupByDesc.length?(c(),e("p",g,r(t.chartData.modelName),1)):l("v-if",!0),t.chartData.groupByDesc.length?s((c(),n(G,{key:1},{default:o((()=>[d("div",{class:i({"data-chart-card-grid-layout":t.chartData.groupByDesc.length})},[(c(!0),e(u,null,D(t.chartData.data,((a,l)=>(c(),e("div",{key:l,class:"card-item"},[d("div",{class:"card-title",title:j(a)},r(j(a)),9,f),d("div",k,[(c(!0),e(u,null,D(t.chartData.colDesc,((l,s)=>(c(),e("span",{key:l},[h(r(`${l}: `||"-"),1),d("strong",null,r(a[l]||"-"),1),h(" "+r(s===t.chartData.colDesc.length-1?"":","),1)])))),128))]),d("div",x,r(l+1),1)])))),128))],2)])),_:1},512)),[[m,t.chartData.data.length]]):(c(),e("div",B,[(c(!0),e(u,null,D(t.chartData.data,((a,s)=>(c(),e("div",{key:s,class:"card-item"},[d("div",{class:"card-title",title:t.chartData.modelName},r(t.chartData.modelName),9,N),d("div",b,[(c(!0),e(u,null,D(t.chartData.colDesc,((s,n)=>(c(),e("span",{key:s},[a?(c(),e(u,{key:0},[h(r(`${s}: `||"-"),1),d("strong",null,r(a[s]||"-"),1),h(" "+r(n===t.chartData.colDesc.length-1?"":","),1)],64)):l("v-if",!0)])))),128))])])))),128))])),s(p(y,null,null,512),[[m,!t.chartData.data.length]])])}}});export{_ as default};
2
2
  //# sourceMappingURL=card.vue2.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"card.vue2.mjs","sources":["../../../../../../../packages/components/src/data-chart/src/components/card.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { PropType } from 'vue'\nimport type { EChartData, IFormatPublicData } from '../types'\nimport Empty from './empty.vue'\n\ndefineOptions({\n name: 'DataChartCard',\n})\n\nconst props = defineProps({\n chartData: {\n type: Object as PropType<IFormatPublicData>,\n default: () => ({\n colDesc: [],\n xGroupByDesc: [],\n data: [],\n modelName: '',\n }),\n },\n})\n\nfunction cardTitle(dataItem: EChartData['data'][0]) {\n const colDesc = props.chartData.xGroupByDesc?.colDesc || ''\n\n return colDesc ? (colDesc + dataItem[colDesc]) : ''\n}\n</script>\n\n<template>\n <div class=\"data-chart-card\">\n <p v-if=\"chartData.groupByDesc.length\" class=\"title\">\n {{ chartData.modelName }}\n </p>\n <el-scrollbar v-show=\"chartData.data.length\" v-if=\"chartData.groupByDesc.length\">\n <div :class=\"{ 'data-chart-card-grid-layout': chartData.groupByDesc.length }\">\n <div\n v-for=\"(dataItem, dataIndex) in chartData.data\"\n :key=\"dataIndex\"\n class=\"card-item\"\n >\n <div class=\"card-title\" :title=\"cardTitle(dataItem)\">\n {{ cardTitle(dataItem) }}\n </div>\n <div class=\"context\">\n <span v-for=\"(item, index) in chartData.colDesc\" :key=\"item\">\n {{ `${item}: ` || '-' }}<strong>{{ dataItem[item] || '-' }}</strong> {{ index === chartData.colDesc.length - 1 ? '' : ',' }}\n </span>\n </div>\n <div class=\"suffix-icon\">\n {{ dataIndex + 1 }}\n </div>\n </div>\n </div>\n </el-scrollbar>\n <div v-else class=\"data-chart-card-wrap\">\n <div\n v-for=\"(dataItem, dataIndex) in chartData.data\"\n :key=\"dataIndex\"\n class=\"card-item\"\n >\n <div class=\"card-title\" :title=\"chartData.modelName\">\n {{ chartData.modelName }}\n </div>\n <div class=\"context\">\n <span v-for=\"(item, index) in chartData.colDesc\" :key=\"item\">\n <template v-if=\"dataItem\">\n {{ `${item}: ` || '-' }}<strong>{{ dataItem[item] || '-' }}</strong> {{ index === chartData.colDesc.length - 1 ? '' : ',' }}\n </template>\n </span>\n </div>\n </div>\n </div>\n <Empty v-show=\"!chartData.data.length\" />\n </div>\n</template>\n\n<style scoped lang=\"scss\">\n.data-chart-card {\n display: flex;\n flex-direction: column;\n\n .title {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 0 5px;\n margin-top: 2px;\n margin-bottom: 7px;\n font-family: sans-serif;\n font-size: 14px;\n font-weight: bolder;\n color: #464646;\n }\n\n .data-chart-card-grid-layout {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));\n gap: 10px;\n width: calc(100% - 3px);\n }\n\n .data-chart-card-wrap {\n height: 100% !important;\n\n .card-item {\n width: 100% !important;\n }\n }\n\n .card-item {\n position: relative;\n background-image: url(\"./data-chart-card-bg-left.svg\"), url(\"./data-chart-card-bg-right.svg\");\n background-repeat: no-repeat;\n background-position: left top, right top;\n background-size: contain, contain;\n border: 2px solid #2196f3;\n border-radius: 6px;\n\n .suffix-icon {\n position: absolute;\n right: 1px;\n bottom: calc(25% - 14px);\n width: 20px;\n font-size: 20px;\n font-weight: bold;\n color: #fff;\n text-align: center;\n }\n\n .card-title {\n padding-left: 15px;\n margin-top: 10px;\n margin-bottom: 5px;\n overflow: hidden;\n font-size: 16px;\n font-weight: bold;\n color: #2196f3;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .context {\n padding: 0 30px 10px 20px;\n font-size: 14px;\n color: #464646;\n }\n }\n}\n</style>\n"],"names":["props","__props","cardTitle","dataItem","colDesc","chartData","xGroupByDesc"],"mappings":"ksBASA,MAAMA,EAAQC,EAYd,SAASC,EAAUC,GACjB,MAAMC,EAAUJ,EAAMK,UAAUC,cAAcF,SAAW,GAEzD,OAAOA,EAAWA,EAAUD,EAASC,GAAY,EAAA"}
1
+ {"version":3,"file":"card.vue2.mjs","sources":["../../../../../../../packages/components/src/data-chart/src/components/card.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { PropType } from 'vue'\nimport type { EChartData, IFormatPublicData } from '../types'\nimport Empty from './empty.vue'\n\ndefineOptions({\n name: 'DataChartCard',\n})\n\nconst props = defineProps({\n chartData: {\n type: Object as PropType<IFormatPublicData>,\n default: () => ({\n colDesc: [],\n xGroupByDesc: [],\n data: [],\n modelName: '',\n }),\n },\n})\n\nfunction cardTitle(dataItem: EChartData['data'][0]) {\n const colDesc = props.chartData.xGroupByDesc?.colDesc || ''\n\n return colDesc ? (colDesc + dataItem[colDesc]) : ''\n}\n</script>\n\n<template>\n <div class=\"data-chart-card\">\n <p v-if=\"chartData.groupByDesc.length\" class=\"title\">\n {{ chartData.modelName }}\n </p>\n <el-scrollbar v-show=\"chartData.data.length\" v-if=\"chartData.groupByDesc.length\">\n <div :class=\"{ 'data-chart-card-grid-layout': chartData.groupByDesc.length }\">\n <div\n v-for=\"(dataItem, dataIndex) in chartData.data\"\n :key=\"dataIndex\"\n class=\"card-item\"\n >\n <div class=\"card-title\" :title=\"cardTitle(dataItem)\">\n {{ cardTitle(dataItem) }}\n </div>\n <div class=\"context\">\n <span v-for=\"(item, index) in chartData.colDesc\" :key=\"item\">\n {{ `${item}: ` || '-' }}<strong>{{ dataItem[item] || '-' }}</strong> {{ index === chartData.colDesc.length - 1 ? '' : ',' }}\n </span>\n </div>\n <div class=\"suffix-icon\">\n {{ dataIndex + 1 }}\n </div>\n </div>\n </div>\n </el-scrollbar>\n <div v-else class=\"data-chart-card-wrap\">\n <div\n v-for=\"(dataItem, dataIndex) in chartData.data\"\n :key=\"dataIndex\"\n class=\"card-item\"\n >\n <div class=\"card-title\" :title=\"chartData.modelName\">\n {{ chartData.modelName }}\n </div>\n <div class=\"context\">\n <span v-for=\"(item, index) in chartData.colDesc\" :key=\"item\">\n <template v-if=\"dataItem\">\n {{ `${item}: ` || '-' }}<strong>{{ dataItem[item] || '-' }}</strong> {{ index === chartData.colDesc.length - 1 ? '' : ',' }}\n </template>\n </span>\n </div>\n </div>\n </div>\n <Empty v-show=\"!chartData.data.length\" />\n </div>\n</template>\n\n<style scoped lang=\"scss\">\n.data-chart-card {\n display: flex;\n flex-direction: column;\n\n .title {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 0 5px;\n margin-top: 2px;\n margin-bottom: 7px;\n font-family: sans-serif;\n font-size: 14px;\n font-weight: bolder;\n color: #464646;\n }\n\n .data-chart-card-grid-layout {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));\n gap: 10px;\n width: calc(100% - 3px);\n }\n\n .data-chart-card-wrap {\n height: 100% !important;\n\n .card-item {\n width: 100% !important;\n }\n }\n\n .card-item {\n position: relative;\n background-image: url(\"./data-chart-card-bg-left.svg\"), url(\"./data-chart-card-bg-right.svg\");\n background-repeat: no-repeat;\n background-position: left top, right top;\n background-size: contain, contain;\n border: 2px solid #2196f3;\n border-radius: 6px;\n\n .suffix-icon {\n position: absolute;\n right: 1px;\n bottom: calc(25% - 14px);\n width: 20px;\n font-size: 20px;\n font-weight: bold;\n color: #fff;\n text-align: center;\n }\n\n .card-title {\n padding-left: 15px;\n margin-top: 10px;\n margin-bottom: 5px;\n overflow: hidden;\n font-size: 16px;\n font-weight: bold;\n color: #2196f3;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .context {\n padding: 0 30px 10px 20px;\n font-size: 14px;\n color: #464646;\n }\n }\n}\n</style>\n"],"names":["props","__props","cardTitle","dataItem","colDesc","chartData","xGroupByDesc"],"mappings":"+yBASA,MAAMA,EAAQC,EAYd,SAASC,EAAUC,GACjB,MAAMC,EAAUJ,EAAMK,UAAUC,cAAcF,SAAW,GAEzD,OAAOA,EAAWA,EAAUD,EAASC,GAAY,EAAA"}
@@ -1,2 +1,2 @@
1
- import e from"./line.vue2.mjs";import"./line.vue3.mjs";import r from"../../../../_virtual/_plugin-vue_export-helper.mjs";var a=r(e,[["__scopeId","data-v-397864aa"]]);export{a as default};
1
+ import e from"./line.vue2.mjs";import r from"../../../../_virtual/_plugin-vue_export-helper.mjs";var a=r(e,[["__scopeId","data-v-397864aa"]]);export{a as default};
2
2
  //# sourceMappingURL=line.vue.mjs.map
@@ -1,2 +1,2 @@
1
- import{ElTable as t,ElTableColumn as e}from"element-plus/es";import{defineComponent as a,computed as o,createElementBlock as r,openBlock as l,normalizeClass as c,unref as s,createCommentVNode as p,createVNode as n,createElementVNode as i,toDisplayString as m,withCtx as h,Fragment as d,renderList as u,createBlock as D,createTextVNode as f}from"vue";import b from"./empty.vue.mjs";import{useNamespace as y}from"@qxs-bns/hooks";const w={key:0,class:"title"};var g=a({name:"DataChartTable",__name:"table",props:{chartData:{type:Object,default:()=>({colDesc:[],xGroupByDesc:[],data:[],modelName:""})}},setup(a){const g=a,v=y("data-chart"),x=o((()=>g.chartData.groupByDesc.find((t=>!t.xAxis))));function $(t){if(!t)return 100;const e=14*t.length+20+30;return e<100?100:e}return(o,y)=>{const g=e,_=t;return l(),r("div",{class:c([s(v).e("data-chart-table")])},[a.chartData.modelName?(l(),r("p",w,[i("span",null,m(a.chartData.modelName),1)])):p("v-if",!0),n(_,{class:"customize-table data-chart-table-content",data:a.chartData.data,stripe:"",height:"100%"},{empty:h((()=>[n(b)])),default:h((()=>[(l(!0),r(d,null,u(a.chartData.groupByDesc,((t,e)=>(l(),D(g,{key:`${t.colDesc}${t.groupByDesc}${e}`,align:"center","show-overflow-tooltip":"",sortable:"","min-width":`${$(t.colDesc)}px`,prop:t.colDesc||""},{header:h((()=>[f(m(t.colDesc),1)])),default:h((e=>[f(m((s(x)&&(s(x).colDesc,t.colDesc),e.row[t.colDesc||""]||"--")),1)])),_:2},1032,["min-width","prop"])))),128)),(l(!0),r(d,null,u(a.chartData.colDesc,((t,e)=>(l(),D(g,{key:t+e,align:"center","min-width":`${$(t)}px`,label:t,"show-overflow-tooltip":"",sortable:"",prop:t},{header:h((()=>[f(m(t),1)])),_:2},1032,["min-width","label","prop"])))),128))])),_:1},8,["data"])],2)}}});export{g as default};
1
+ import{ElTable as e,ElTableColumn as t}from"element-plus/es";import"element-plus/es/components/base/style/index";import"element-plus/es/components/table/style/index";import"element-plus/es/components/table-column/style/index";import{defineComponent as a,computed as o,createElementBlock as l,openBlock as s,normalizeClass as r,unref as c,createCommentVNode as n,createVNode as p,createElementVNode as m,toDisplayString as i,withCtx as d,Fragment as u,renderList as h,createBlock as D,createTextVNode as b}from"vue";import f from"./empty.vue.mjs";import{useNamespace as y}from"@qxs-bns/hooks";const x={key:0,class:"title"};var w=a({name:"DataChartTable",__name:"table",props:{chartData:{type:Object,default:()=>({colDesc:[],xGroupByDesc:[],data:[],modelName:""})}},setup(a){const w=a,g=y("data-chart"),v=o((()=>w.chartData.groupByDesc.find((e=>!e.xAxis))));function $(e){if(!e)return 100;const t=14*e.length+20+30;return t<100?100:t}return(o,y)=>{const w=t,_=e;return s(),l("div",{class:r([c(g).e("data-chart-table")])},[a.chartData.modelName?(s(),l("p",x,[m("span",null,i(a.chartData.modelName),1)])):n("v-if",!0),p(_,{class:"customize-table data-chart-table-content",data:a.chartData.data,stripe:"",height:"100%"},{empty:d((()=>[p(f)])),default:d((()=>[(s(!0),l(u,null,h(a.chartData.groupByDesc,((e,t)=>(s(),D(w,{key:`${e.colDesc}${e.groupByDesc}${t}`,align:"center","show-overflow-tooltip":"",sortable:"","min-width":`${$(e.colDesc)}px`,prop:e.colDesc||""},{header:d((()=>[b(i(e.colDesc),1)])),default:d((t=>[b(i((c(v)&&(c(v).colDesc,e.colDesc),t.row[e.colDesc||""]||"--")),1)])),_:2},1032,["min-width","prop"])))),128)),(s(!0),l(u,null,h(a.chartData.colDesc,((e,t)=>(s(),D(w,{key:e+t,align:"center","min-width":`${$(e)}px`,label:e,"show-overflow-tooltip":"",sortable:"",prop:e},{header:d((()=>[b(i(e),1)])),_:2},1032,["min-width","label","prop"])))),128))])),_:1},8,["data"])],2)}}});export{w as default};
2
2
  //# sourceMappingURL=table.vue.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"table.vue.mjs","sources":["../../../../../../../packages/components/src/data-chart/src/components/table.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { PropType } from 'vue'\nimport type { IFormatPublicData } from '../types'\nimport Empty from './empty.vue'\nimport { useNamespace } from '@qxs-bns/hooks'\n\ndefineOptions({\n name: 'DataChartTable',\n})\n\nconst props = defineProps({\n chartData: {\n type: Object as PropType<IFormatPublicData>,\n default: () => ({\n colDesc: [],\n xGroupByDesc: [],\n data: [],\n modelName: '',\n }),\n },\n})\n\nconst ns = useNamespace('data-chart')\n\nconst yGroupByDesc = computed(() => {\n const row = props.chartData.groupByDesc.find(item => !item.xAxis)\n return row\n})\n\nfunction baseWidth(str: string | null) {\n if (!str) {\n return 100\n }\n const strWidth = str.length * 14 + 20 + 30\n return strWidth < 100 ? 100 : strWidth\n}\n</script>\n\n<template>\n <div :class=\"[ns.e('data-chart-table')]\">\n <p v-if=\"chartData.modelName\" class=\"title\">\n <span>{{ chartData.modelName }}</span>\n </p>\n <el-table\n class=\"customize-table data-chart-table-content\"\n :data=\"chartData.data\"\n stripe\n height=\"100%\"\n >\n <el-table-column\n v-for=\"(item, index) in chartData.groupByDesc\"\n :key=\"`${item.colDesc}${item.groupByDesc}${index}`\"\n align=\"center\"\n show-overflow-tooltip\n sortable\n :min-width=\"`${baseWidth(item.colDesc)}px`\"\n :prop=\"item.colDesc || ''\"\n >\n <template #header>\n {{ item.colDesc }}\n </template>\n <template #default=\"scoped\">\n {{ (yGroupByDesc && yGroupByDesc.colDesc === item.colDesc ? scoped.row[item.colDesc || ''] : scoped.row[item.colDesc || '']) || '--' }}\n </template>\n </el-table-column>\n <el-table-column\n v-for=\"(item, index) in chartData.colDesc\"\n :key=\"item + index\"\n align=\"center\"\n :min-width=\"`${baseWidth(item)}px`\"\n :label=\"item\"\n show-overflow-tooltip\n sortable\n :prop=\"item\"\n >\n <template #header>\n {{ item }}\n </template>\n </el-table-column>\n <template #empty>\n <Empty />\n </template>\n </el-table>\n </div>\n</template>"],"names":["props","__props","ns","useNamespace","yGroupByDesc","computed","chartData","groupByDesc","find","item","xAxis","baseWidth","str","strWidth","length"],"mappings":"gmBAUA,MAAMA,EAAQC,EAYRC,EAAKC,EAAa,cAElBC,EAAeC,GAAS,IAChBL,EAAMM,UAAUC,YAAYC,MAAaC,IAACA,EAAKC,UAI7D,SAASC,EAAUC,GACjB,IAAKA,EACI,OAAA,IAET,MAAMC,EAAwB,GAAbD,EAAIE,OAAc,GAAK,GACjC,OAAAD,EAAW,IAAM,IAAMA,CAAA"}
1
+ {"version":3,"file":"table.vue.mjs","sources":["../../../../../../../packages/components/src/data-chart/src/components/table.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { PropType } from 'vue'\nimport type { IFormatPublicData } from '../types'\nimport Empty from './empty.vue'\nimport { useNamespace } from '@qxs-bns/hooks'\n\ndefineOptions({\n name: 'DataChartTable',\n})\n\nconst props = defineProps({\n chartData: {\n type: Object as PropType<IFormatPublicData>,\n default: () => ({\n colDesc: [],\n xGroupByDesc: [],\n data: [],\n modelName: '',\n }),\n },\n})\n\nconst ns = useNamespace('data-chart')\n\nconst yGroupByDesc = computed(() => {\n const row = props.chartData.groupByDesc.find(item => !item.xAxis)\n return row\n})\n\nfunction baseWidth(str: string | null) {\n if (!str) {\n return 100\n }\n const strWidth = str.length * 14 + 20 + 30\n return strWidth < 100 ? 100 : strWidth\n}\n</script>\n\n<template>\n <div :class=\"[ns.e('data-chart-table')]\">\n <p v-if=\"chartData.modelName\" class=\"title\">\n <span>{{ chartData.modelName }}</span>\n </p>\n <el-table\n class=\"customize-table data-chart-table-content\"\n :data=\"chartData.data\"\n stripe\n height=\"100%\"\n >\n <el-table-column\n v-for=\"(item, index) in chartData.groupByDesc\"\n :key=\"`${item.colDesc}${item.groupByDesc}${index}`\"\n align=\"center\"\n show-overflow-tooltip\n sortable\n :min-width=\"`${baseWidth(item.colDesc)}px`\"\n :prop=\"item.colDesc || ''\"\n >\n <template #header>\n {{ item.colDesc }}\n </template>\n <template #default=\"scoped\">\n {{ (yGroupByDesc && yGroupByDesc.colDesc === item.colDesc ? scoped.row[item.colDesc || ''] : scoped.row[item.colDesc || '']) || '--' }}\n </template>\n </el-table-column>\n <el-table-column\n v-for=\"(item, index) in chartData.colDesc\"\n :key=\"item + index\"\n align=\"center\"\n :min-width=\"`${baseWidth(item)}px`\"\n :label=\"item\"\n show-overflow-tooltip\n sortable\n :prop=\"item\"\n >\n <template #header>\n {{ item }}\n </template>\n </el-table-column>\n <template #empty>\n <Empty />\n </template>\n </el-table>\n </div>\n</template>"],"names":["props","__props","ns","useNamespace","yGroupByDesc","computed","chartData","groupByDesc","find","item","xAxis","baseWidth","str","strWidth","length"],"mappings":"qwBAUA,MAAMA,EAAQC,EAYRC,EAAKC,EAAa,cAElBC,EAAeC,GAAS,IAChBL,EAAMM,UAAUC,YAAYC,MAAaC,IAACA,EAAKC,UAI7D,SAASC,EAAUC,GACjB,IAAKA,EACI,OAAA,IAET,MAAMC,EAAwB,GAAbD,EAAIE,OAAc,GAAK,GACjC,OAAAD,EAAW,IAAM,IAAMA,CAAA"}
@@ -1,2 +1,2 @@
1
- import{ElUpload as e,ElIcon as a,ElAlert as t,ElMessage as l}from"element-plus/es";import{defineComponent as i,computed as s,createBlock as r,openBlock as o,normalizeClass as n,unref as u,withCtx as p,createElementVNode as d,createVNode as c,createTextVNode as m,createElementBlock as f,createCommentVNode as y}from"vue";import{UploadFilled as v}from"@element-plus/icons-vue";import{useNamespace as q}from"@qxs-bns/hooks";import{useNamespace as x}from"element-plus";const _={class:"slot"},b={style:{display:"inline-block"}};var h=i({name:"QxsFileUpload",__name:"file-upload",props:{action:{type:String,required:!0},headers:{type:null,required:!1},data:{type:null,required:!1},name:{type:String,required:!1,default:"file"},size:{type:Number,required:!1,default:20},max:{type:Number,required:!1,default:3},accept:{type:String,required:!1,default:"zip,rar"},files:{type:Array,required:!1,default:()=>[]},notip:{type:Boolean,required:!1,default:!1},ext:{type:Array,required:!1}},emits:["onSuccess"],setup(i,{emit:h}){const z=h,g=q("file-upload"),S=x("file-upload"),$=s((()=>i.accept.split(","))),k=e=>{const a=e.name.split(".").at(-1)??"",t=$.value.includes(a),s=e.size/1024/1024<i.size;return t||l.error(`上传文件只支持 ${$.value.join(" / ")} 格式!`),s||l.error(`上传文件大小不能超过 ${i.size}MB!`),t&&s},B=()=>{l.warning("文件上传超过限制")},N=(e,a,t)=>{z("onSuccess",e,a,t)};return(l,i)=>{const s=a,q=t,x=e;return o(),r(x,{headers:l.headers,action:l.action,data:l.data,name:l.name,"before-upload":k,"on-exceed":B,"on-success":N,"file-list":l.files,limit:l.max,drag:"",class:n(u(g).e("control"))},{tip:p((()=>[l.notip?y("v-if",!0):(o(),f("div",{key:0,class:n(u(S).namespace.value+"-upload__tip")},[d("div",b,[c(q,{title:`上传文件支持 ${u($).join(" / ")} 格式,单个文件大小不超过 ${l.size}MB,且文件数量不超过 ${l.max} 个`,type:"info","show-icon":"",closable:!1},null,8,["title"])])],2))])),default:p((()=>[d("div",_,[c(s,{class:n(u(S).namespace.value+"-icon--upload")},{default:p((()=>[c(u(v))])),_:1},8,["class"]),d("div",{class:n(u(S).namespace.value+"-upload__text")},i[0]||(i[0]=[m(" 将文件拖到此处,或"),d("em",null,"点击上传",-1)]),2)])])),_:1},8,["headers","action","data","name","file-list","limit","class"])}}});export{h as default};
1
+ import{ElUpload as e,ElIcon as t,ElAlert as s,ElMessage as l}from"element-plus/es";import"element-plus/es/components/base/style/index";import"element-plus/es/components/upload/style/index";import"element-plus/es/components/alert/style/index";import"element-plus/es/components/icon/style/index";import{defineComponent as a,computed as i,createBlock as n,openBlock as o,normalizeClass as r,unref as p,withCtx as u,createElementVNode as m,createVNode as d,createTextVNode as c,createElementBlock as f,createCommentVNode as y}from"vue";import{UploadFilled as x}from"@element-plus/icons-vue";import{useNamespace as v}from"@qxs-bns/hooks";import{useNamespace as q}from"element-plus";import"element-plus/es/components/message/style/index";const _={class:"slot"},b={style:{display:"inline-block"}};var g=a({name:"QxsFileUpload",__name:"file-upload",props:{action:{type:String,required:!0},headers:{type:null,required:!1},data:{type:null,required:!1},name:{type:String,required:!1,default:"file"},size:{type:Number,required:!1,default:20},max:{type:Number,required:!1,default:3},accept:{type:String,required:!1,default:"zip,rar"},files:{type:Array,required:!1,default:()=>[]},notip:{type:Boolean,required:!1,default:!1},ext:{type:Array,required:!1}},emits:["onSuccess"],setup(a,{emit:g}){const h=g,z=v("file-upload"),S=q("file-upload"),$=i((()=>a.accept.split(","))),k=e=>{const t=e.name.split(".").at(-1)??"",s=$.value.includes(t),i=e.size/1024/1024<a.size;return s||l.error(`上传文件只支持 ${$.value.join(" / ")} 格式!`),i||l.error(`上传文件大小不能超过 ${a.size}MB!`),s&&i},B=()=>{l.warning("文件上传超过限制")},N=(e,t,s)=>{h("onSuccess",e,t,s)};return(l,a)=>{const i=t,v=s,q=e;return o(),n(q,{headers:l.headers,action:l.action,data:l.data,name:l.name,"before-upload":k,"on-exceed":B,"on-success":N,"file-list":l.files,limit:l.max,drag:"",class:r(p(z).e("control"))},{tip:u((()=>[l.notip?y("v-if",!0):(o(),f("div",{key:0,class:r(p(S).namespace.value+"-upload__tip")},[m("div",b,[d(v,{title:`上传文件支持 ${p($).join(" / ")} 格式,单个文件大小不超过 ${l.size}MB,且文件数量不超过 ${l.max} 个`,type:"info","show-icon":"",closable:!1},null,8,["title"])])],2))])),default:u((()=>[m("div",_,[d(i,{class:r(p(S).namespace.value+"-icon--upload")},{default:u((()=>[d(p(x))])),_:1},8,["class"]),m("div",{class:r(p(S).namespace.value+"-upload__text")},a[0]||(a[0]=[c(" 将文件拖到此处,或"),m("em",null,"点击上传",-1)]),2)])])),_:1},8,["headers","action","data","name","file-list","limit","class"])}}});export{g as default};
2
2
  //# sourceMappingURL=file-upload.vue.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"file-upload.vue.mjs","sources":["../../../../../../packages/components/src/file-upload/src/file-upload.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { UploadProps, UploadUserFile } from \"element-plus\";\nimport { UploadFilled } from \"@element-plus/icons-vue\";\nimport { useNamespace } from \"@qxs-bns/hooks\";\nimport { useNamespace as useElNamespace } from \"element-plus\";\n\ndefineOptions({\n name: \"QxsFileUpload\",\n});\n\nconst {\n name = \"file\",\n size = 20,\n max = 3,\n files = [],\n notip = false,\n accept = \"zip,rar\",\n} = defineProps<{\n action: UploadProps[\"action\"];\n headers?: UploadProps[\"headers\"];\n data?: UploadProps[\"data\"];\n name?: UploadProps[\"name\"];\n size?: number;\n max?: number;\n accept?: string;\n files?: UploadUserFile[];\n notip?: boolean;\n ext?: string[];\n}>();\n\nconst emit = defineEmits([\"onSuccess\"]);\n\nconst ns = useNamespace(\"file-upload\");\nconst nsEl = useElNamespace(\"file-upload\");\n\nconst exts = computed(() => {\n return accept.split(\",\");\n});\nconst beforeUpload: 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 < size;\n if (!isTypeOk) {\n ElMessage.error(`上传文件只支持 ${exts.value.join(\" / \")} 格式!`);\n }\n if (!isSizeOk) {\n ElMessage.error(`上传文件大小不能超过 ${size}MB!`);\n }\n return isTypeOk && isSizeOk;\n};\n\nconst onExceed: UploadProps[\"onExceed\"] = () => {\n ElMessage.warning(\"文件上传超过限制\");\n};\n\nconst onSuccess: UploadProps[\"onSuccess\"] = (res, file, fileList) => {\n emit(\"onSuccess\", res, file, fileList);\n};\n</script>\n\n<template>\n <el-upload\n :headers=\"headers\"\n :action=\"action\"\n :data=\"data\"\n :name=\"name\"\n :before-upload=\"beforeUpload\"\n :on-exceed=\"onExceed\"\n :on-success=\"onSuccess\"\n :file-list=\"files\"\n :limit=\"max\"\n drag\n :class=\"ns.e('control')\"\n >\n <div class=\"slot\">\n <el-icon :class=\"nsEl.namespace.value + '-icon--upload'\">\n <UploadFilled />\n </el-icon>\n <div :class=\"nsEl.namespace.value + '-upload__text'\">\n 将文件拖到此处,或<em>点击上传</em>\n </div>\n </div>\n <template #tip>\n <div v-if=\"!notip\" :class=\"nsEl.namespace.value + '-upload__tip'\">\n <div style=\"display: inline-block\">\n <el-alert\n :title=\"`上传文件支持 ${exts.join(\n ' / '\n )} 格式,单个文件大小不超过 ${size}MB,且文件数量不超过 ${max} 个`\"\n type=\"info\"\n show-icon\n :closable=\"false\"\n />\n </div>\n </div>\n </template>\n </el-upload>\n</template>\n"],"names":["emit","__emit","ns","useNamespace","nsEl","useElNamespace","exts","computed","__props","accept","split","beforeUpload","file","fileExt","name","at","isTypeOk","value","includes","isSizeOk","size","ElMessage","error","join","onExceed","warning","onSuccess","res","fileList"],"mappings":"q/BA8BA,MAAMA,EAAOC,EAEPC,EAAKC,EAAa,eAClBC,EAAOC,EAAe,eAEtBC,EAAOC,GAAS,IACbC,EAAAC,OAAOC,MAAM,OAEhBC,EAA6CC,IACjD,MACMC,EADWD,EAAKE,KAAKJ,MAAM,KACRK,IAAG,IAAO,GAC7BC,EAAWV,EAAKW,MAAMC,SAASL,GAC/BM,EAAWP,EAAKQ,KAAO,KAAO,KAAOZ,EAAIY,KAO/C,OANKJ,GACHK,EAAUC,MAAM,WAAWhB,EAAKW,MAAMM,KAAK,cAExCJ,GACHE,EAAUC,MAAM,cAAcd,EAAIY,WAE7BJ,GAAYG,CAAA,EAGfK,EAAoC,KACxCH,EAAUI,QAAQ,WAAU,EAGxBC,EAAsC,CAACC,EAAKf,EAAMgB,KACjD5B,EAAA,YAAa2B,EAAKf,EAAMgB,EAAQ"}
1
+ {"version":3,"file":"file-upload.vue.mjs","sources":["../../../../../../packages/components/src/file-upload/src/file-upload.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { UploadProps, UploadUserFile } from \"element-plus\";\nimport { UploadFilled } from \"@element-plus/icons-vue\";\nimport { useNamespace } from \"@qxs-bns/hooks\";\nimport { useNamespace as useElNamespace } from \"element-plus\";\n\ndefineOptions({\n name: \"QxsFileUpload\",\n});\n\nconst {\n name = \"file\",\n size = 20,\n max = 3,\n files = [],\n notip = false,\n accept = \"zip,rar\",\n} = defineProps<{\n action: UploadProps[\"action\"];\n headers?: UploadProps[\"headers\"];\n data?: UploadProps[\"data\"];\n name?: UploadProps[\"name\"];\n size?: number;\n max?: number;\n accept?: string;\n files?: UploadUserFile[];\n notip?: boolean;\n ext?: string[];\n}>();\n\nconst emit = defineEmits([\"onSuccess\"]);\n\nconst ns = useNamespace(\"file-upload\");\nconst nsEl = useElNamespace(\"file-upload\");\n\nconst exts = computed(() => {\n return accept.split(\",\");\n});\nconst beforeUpload: 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 < size;\n if (!isTypeOk) {\n ElMessage.error(`上传文件只支持 ${exts.value.join(\" / \")} 格式!`);\n }\n if (!isSizeOk) {\n ElMessage.error(`上传文件大小不能超过 ${size}MB!`);\n }\n return isTypeOk && isSizeOk;\n};\n\nconst onExceed: UploadProps[\"onExceed\"] = () => {\n ElMessage.warning(\"文件上传超过限制\");\n};\n\nconst onSuccess: UploadProps[\"onSuccess\"] = (res, file, fileList) => {\n emit(\"onSuccess\", res, file, fileList);\n};\n</script>\n\n<template>\n <el-upload\n :headers=\"headers\"\n :action=\"action\"\n :data=\"data\"\n :name=\"name\"\n :before-upload=\"beforeUpload\"\n :on-exceed=\"onExceed\"\n :on-success=\"onSuccess\"\n :file-list=\"files\"\n :limit=\"max\"\n drag\n :class=\"ns.e('control')\"\n >\n <div class=\"slot\">\n <el-icon :class=\"nsEl.namespace.value + '-icon--upload'\">\n <UploadFilled />\n </el-icon>\n <div :class=\"nsEl.namespace.value + '-upload__text'\">\n 将文件拖到此处,或<em>点击上传</em>\n </div>\n </div>\n <template #tip>\n <div v-if=\"!notip\" :class=\"nsEl.namespace.value + '-upload__tip'\">\n <div style=\"display: inline-block\">\n <el-alert\n :title=\"`上传文件支持 ${exts.join(\n ' / '\n )} 格式,单个文件大小不超过 ${size}MB,且文件数量不超过 ${max} 个`\"\n type=\"info\"\n show-icon\n :closable=\"false\"\n />\n </div>\n </div>\n </template>\n </el-upload>\n</template>\n"],"names":["emit","__emit","ns","useNamespace","nsEl","useElNamespace","exts","computed","__props","accept","split","beforeUpload","file","fileExt","name","at","isTypeOk","value","includes","isSizeOk","size","ElMessage","error","join","onExceed","warning","onSuccess","res","fileList"],"mappings":"+vCA8BA,MAAMA,EAAOC,EAEPC,EAAKC,EAAa,eAClBC,EAAOC,EAAe,eAEtBC,EAAOC,GAAS,IACbC,EAAAC,OAAOC,MAAM,OAEhBC,EAA6CC,IACjD,MACMC,EADWD,EAAKE,KAAKJ,MAAM,KACRK,IAAG,IAAO,GAC7BC,EAAWV,EAAKW,MAAMC,SAASL,GAC/BM,EAAWP,EAAKQ,KAAO,KAAO,KAAOZ,EAAIY,KAO/C,OANKJ,GACHK,EAAUC,MAAM,WAAWhB,EAAKW,MAAMM,KAAK,cAExCJ,GACHE,EAAUC,MAAM,cAAcd,EAAIY,WAE7BJ,GAAYG,CAAA,EAGfK,EAAoC,KACxCH,EAAUI,QAAQ,WAAU,EAGxBC,EAAsC,CAACC,EAAKf,EAAMgB,KACjD5B,EAAA,YAAa2B,EAAKf,EAAMgB,EAAQ"}
@@ -1,2 +1,2 @@
1
- import{ElUpload as e,ElImage as t,ElIcon as i,ElProgress as r,ElImageViewer as l,ElMessage as s}from"element-plus/es";import{defineComponent as a,ref as p,computed as u,createElementBlock as o,openBlock as n,normalizeClass as d,unref as c,createVNode as h,createCommentVNode as g,createBlock as m,withCtx as f,withDirectives as y,normalizeStyle as v,createElementVNode as w,toDisplayString as x,withModifiers as $,vShow as b}from"vue";import{Plus as q,ZoomIn as k,Delete as _}from"@element-plus/icons-vue";import{useNamespace as S}from"@qxs-bns/hooks";import{useNamespace as V}from"element-plus";const U={key:1,class:"image"},j={class:"mask"},z={class:"actions"},N={style:{display:"inline-block"}};var B=a({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(a,{emit:B}){const C=a,M=B,L=S("image-upload"),R=V("image-upload"),T=p({imageViewerVisible:!1,progress:{preview:"",percent:0}}),I=u((()=>C.accept.split(",").map((e=>e.split("/").pop()))));function O(){T.value.imageViewerVisible=!0}function Q(){T.value.imageViewerVisible=!1}function A(){M("update:url","")}const D=e=>{const t=e.name.split(".").at(-1)??"",i=I.value.includes(t),r=e.size/1024/1024<C.size;return i?r?T.value.progress.preview=URL.createObjectURL(e):s.error(`上传图片大小不能超过 ${C.size}MB!`):s.error(`上传图片只支持${I.value.join(" / ")}格式!`),i&&r&&(!C.beforeUpload||C.beforeUpload(e))},E=e=>{T.value.progress.percent=~~e.percent},F=(...e)=>{T.value.progress.preview="",T.value.progress.percent=0,M("onSuccess",...e)};return(s,a)=>{const p=i,u=t,S=r,V=e,B=l;return n(),o("div",{class:d(c(L).e("container"))},[h(V,{"show-file-list":!1,headers:s.headers,action:s.action,data:s.data,name:s.name,"before-upload":D,"on-progress":E,"on-success":F,drag:"",accept:s.accept,class:d(c(L).e("control"))},{default:f((()=>[""===s.url?(n(),m(u,{key:0,style:v(`width:${s.width}px;height:${s.height}px;`),src:""===s.url?s.placeholder:s.url,fit:"fill"},{error:f((()=>[w("div",{class:"image-slot",style:v(`width:${s.width}px;height:${s.height}px;`)},[h(p,null,{default:f((()=>[h(c(q))])),_:1}),w("p",null,x(s.placeholder),1)],4)])),_:1},8,["style","src"])):(n(),o("div",U,[h(u,{src:s.url,style:v(`width:${s.width}px;height:${s.height}px;`),fit:"fill"},null,8,["src","style"]),w("div",j,[w("div",z,[w("span",{title:"预览",onClick:$(O,["stop"])},[h(p,null,{default:f((()=>[h(c(k))])),_:1})]),w("span",{title:"移除",onClick:$(A,["stop"])},[h(p,null,{default:f((()=>[h(c(_))])),_:1})])])])])),y(w("div",{class:"progress",style:v(`width:${s.width}px;height:${s.height}px;`)},[h(u,{src:c(T).progress.preview,style:v(`width:${s.width}px;height:${s.height}px;`),fit:"fill"},null,8,["src","style"]),h(S,{type:"circle",width:.8*Math.min(s.width,s.height),percentage:c(T).progress.percent},null,8,["width","percentage"])],4),[[b,""===s.url&&c(T).progress.percent]])])),_:1},8,["headers","action","data","name","accept","class"]),s.notip?g("v-if",!0):(n(),o("div",{key:0,class:d(c(R).namespace.value+"-upload__tip-text")},[w("div",N,x(s.tipText||`上传图片支持 ${c(I).join(" / ")} 格式,且图片大小不超过 ${s.size}MB,建议图片尺寸为 ${s.width}*${s.height}`),1)],2)),c(T).imageViewerVisible?(n(),m(B,{key:1,"url-list":[s.url],teleported:"",onClose:Q},null,8,["url-list"])):g("v-if",!0)],2)}}});export{B as default};
1
+ import{ElUpload as e,ElImage as t,ElIcon as l,ElProgress as r,ElImageViewer as s,ElMessage as i}from"element-plus/es";import"element-plus/es/components/base/style/index";import"element-plus/es/components/image-viewer/style/index";import"element-plus/es/components/upload/style/index";import"element-plus/es/components/progress/style/index";import"element-plus/es/components/image/style/index";import"element-plus/es/components/icon/style/index";import{defineComponent as p,ref as a,computed as n,createElementBlock as o,openBlock as u,normalizeClass as c,unref as d,createVNode as m,createCommentVNode as g,createBlock as f,withCtx as y,withDirectives as v,normalizeStyle as h,createElementVNode as w,toDisplayString as x,vShow as b}from"vue";import{Plus as q,ZoomIn as k,Delete as $}from"@element-plus/icons-vue";import{useNamespace as _}from"@qxs-bns/hooks";import{useNamespace as S}from"element-plus";import"element-plus/es/components/message/style/index";const V={key:1,class:"image"},U={class:"mask"},j={class:"actions"},z={class:"tip-content"};var M=p({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,default:""},beforeUpload:{type:null,required:!1}},emits:["update:url","onSuccess"],setup(p,{emit:M}){const N=M,B=_("image-upload"),C=S("upload"),D=a({imageViewerVisible:!1,progress:{preview:"",percent:0}}),L=n((()=>p.accept.split(",").map((e=>e.split("/").pop())))),R=n((()=>({width:`${p.width}px`,height:`${p.height}px`}))),T=n((()=>.8*Math.min(p.width,p.height))),I=n((()=>p.tipText||`上传图片支持 ${L.value.join(" / ")} 格式,且图片大小不超过 ${p.size}MB,建议图片尺寸为 ${p.width}*${p.height}`));function O(e){e.preventDefault(),D.value.imageViewerVisible=!0}function Q(){D.value.imageViewerVisible=!1}function A(e){e.preventDefault(),N("update:url","")}const E=e=>{const t=e.name.split(".").pop()??"",l=L.value.includes(t),r=e.size/1024/1024<p.size;return l?r?(D.value.progress.preview=URL.createObjectURL(e),!p.beforeUpload||p.beforeUpload(e)):(i.error(`上传图片大小不能超过 ${p.size}MB!`),!1):(i.error(`上传图片只支持${L.value.join(" / ")}格式!`),!1)},F=e=>{D.value.progress.percent=Math.floor(e.percent)},G=(...e)=>{D.value.progress={preview:"",percent:0},N("onSuccess",...e)};return(i,p)=>{const a=l,n=t,_=r,S=e,M=s;return u(),o("div",{class:c(d(B).e("container"))},[m(S,{drag:"","show-file-list":!1,headers:i.headers,action:i.action,data:i.data,name:i.name,accept:i.accept,class:c(d(B).e("control")),"before-upload":E,"on-progress":F,"on-success":G},{default:y((()=>[""===i.url?(u(),f(n,{key:0,style:h(d(R)),src:i.placeholder,fit:"fill"},{error:y((()=>[w("div",{class:"image-slot",style:h(d(R))},[m(a,null,{default:y((()=>[m(d(q))])),_:1}),w("p",null,x(i.placeholder),1)],4)])),_:1},8,["style","src"])):(u(),o("div",V,[m(n,{src:i.url,style:h(d(R)),fit:"fill"},null,8,["src","style"]),w("div",U,[w("div",j,[w("span",{title:"预览",onClick:O},[m(a,null,{default:y((()=>[m(d(k))])),_:1})]),w("span",{title:"移除",onClick:A},[m(a,null,{default:y((()=>[m(d($))])),_:1})])])])])),v(w("div",{class:"progress",style:h(d(R))},[m(n,{src:d(D).progress.preview,style:h(d(R)),fit:"fill"},null,8,["src","style"]),100!==d(D).progress.percent?(u(),f(_,{key:0,type:"circle",width:d(T),percentage:d(D).progress.percent},null,8,["width","percentage"])):g("v-if",!0)],4),[[b,""===i.url&&d(D).progress.percent]])])),_:1},8,["headers","action","data","name","accept","class"]),i.notip?g("v-if",!0):(u(),o("div",{key:0,class:c(`${d(C).namespace.value}-upload__tip-text`)},[w("div",z,x(d(I)),1)],2)),d(D).imageViewerVisible?(u(),f(M,{key:1,"url-list":[i.url],teleported:"",onClose:Q},null,8,["url-list"])):g("v-if",!0)],2)}}});export{M as default};
2
2
  //# sourceMappingURL=image-upload.vue.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"image-upload.vue.mjs","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":"+1CASA,MAAMA,EAAQC,EA2BRC,EAAQC,EAWRC,EAAKC,EAAa,gBAClBC,EAAOC,EAAe,gBAEtBC,EAAaC,EAAI,CACrBC,oBAAoB,EACpBC,SAAU,CACRC,QAAS,GACTC,QAAS,KAIPC,EAAOC,GAAS,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,EAAUC,MAAM,cAAcpC,EAAMgC,WAJpCG,EAAUC,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
+ {"version":3,"file":"image-upload.vue.mjs","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\n// 类型定义\nexport interface ImageUploadProps {\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\ninterface UploadProgress {\n preview: string;\n percent: number;\n}\n\n// 组件名称\ndefineOptions({\n name: \"QxsImageUpload\",\n});\n\n// Props 定义\nconst {\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 beforeUpload,\n tipText = ''\n} = defineProps<ImageUploadProps>();\n\n// Emits 定义\nconst emits = defineEmits<{\n \"update:url\": [url: string];\n onSuccess: [res: any, uploadFile: UploadFile, uploadFiles: UploadFiles];\n}>();\n\n// 命名空间\nconst ns = useNamespace(\"image-upload\");\nconst nsEl = useElNamespace(\"upload\");\n\n// 响应式数据\nconst uploadData = ref<{\n imageViewerVisible: boolean;\n progress: UploadProgress;\n}>({\n imageViewerVisible: false,\n progress: {\n preview: \"\",\n percent: 0,\n },\n});\n\n// 计算属性\nconst exts = computed(() =>\n accept.split(\",\").map((ext) => ext.split(\"/\").pop())\n);\n\nconst imageStyle = computed(() => ({\n width: `${width}px`,\n height: `${height}px`,\n}));\n\nconst progressSize = computed(() => Math.min(width, height) * 0.8);\n\nconst tipMessage = computed(\n () =>\n tipText ||\n `上传图片支持 ${exts.value.join(\n \" / \"\n )} 格式,且图片大小不超过 ${size}MB,建议图片尺寸为 ${width}*${height}`\n);\n\n// 方法\nfunction preview(e: Event) {\n e.preventDefault();\n uploadData.value.imageViewerVisible = true;\n}\n\nfunction previewClose() {\n uploadData.value.imageViewerVisible = false;\n}\n\nfunction remove(e: Event) {\n e.preventDefault();\n emits(\"update:url\", \"\");\n}\n\nconst handleBeforeUpload: UploadProps[\"beforeUpload\"] = (file) => {\n const fileExt = file.name.split(\".\").pop() ?? \"\";\n const isTypeOk = exts.value.includes(fileExt);\n const isSizeOk = file.size / 1024 / 1024 < size;\n\n if (!isTypeOk) {\n ElMessage.error(`上传图片只支持${exts.value.join(\" / \")}格式!`);\n return false;\n }\n\n if (!isSizeOk) {\n ElMessage.error(`上传图片大小不能超过 ${size}MB!`);\n return false;\n }\n\n uploadData.value.progress.preview = URL.createObjectURL(file);\n\n return beforeUpload ? beforeUpload(file) : true;\n};\n\nconst onProgress: UploadProps[\"onProgress\"] = (evt) => {\n uploadData.value.progress.percent = Math.floor(evt.percent);\n};\n\nconst onSuccess: UploadProps[\"onSuccess\"] = (...args) => {\n uploadData.value.progress = {\n preview: \"\",\n percent: 0,\n };\n emits(\"onSuccess\", ...args);\n};\n</script>\n\n<template>\n <div :class=\"ns.e('container')\">\n <el-upload\n drag\n :show-file-list=\"false\"\n :headers=\"headers\"\n :action=\"action\"\n :data=\"data\"\n :name=\"name\"\n :accept=\"accept\"\n :class=\"ns.e('control')\"\n :before-upload=\"handleBeforeUpload\"\n :on-progress=\"onProgress\"\n :on-success=\"onSuccess\"\n >\n <template v-if=\"url === ''\">\n <el-image :style=\"imageStyle\" :src=\"placeholder\" fit=\"fill\">\n <template #error>\n <div class=\"image-slot\" :style=\"imageStyle\">\n <el-icon><Plus /></el-icon>\n <p>{{ placeholder }}</p>\n </div>\n </template>\n </el-image>\n </template>\n\n <template v-else>\n <div class=\"image\">\n <el-image :src=\"url\" :style=\"imageStyle\" fit=\"fill\" />\n <div class=\"mask\">\n <div class=\"actions\">\n <span title=\"预览\" @click=\"preview\">\n <el-icon><ZoomIn /></el-icon>\n </span>\n <span title=\"移除\" @click=\"remove\">\n <el-icon><Delete /></el-icon>\n </span>\n </div>\n </div>\n </div>\n </template>\n\n <div\n v-show=\"url === '' && uploadData.progress.percent\"\n class=\"progress\"\n :style=\"imageStyle\"\n >\n <el-image\n :src=\"uploadData.progress.preview\"\n :style=\"imageStyle\"\n fit=\"fill\"\n />\n <el-progress\n v-if=\"uploadData.progress.percent !== 100\"\n type=\"circle\"\n :width=\"progressSize\"\n :percentage=\"uploadData.progress.percent\"\n />\n </div>\n </el-upload>\n\n <div v-if=\"!notip\" :class=\"`${nsEl.namespace.value}-upload__tip-text`\">\n <div class=\"tip-content\">\n {{ tipMessage }}\n </div>\n </div>\n\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":["emits","__emit","ns","useNamespace","nsEl","useElNamespace","uploadData","ref","imageViewerVisible","progress","preview","percent","exts","computed","__props","split","map","ext","pop","imageStyle","width","height","progressSize","Math","min","tipMessage","tipText","value","join","size","e","preventDefault","previewClose","remove","handleBeforeUpload","file","fileExt","name","isTypeOk","includes","isSizeOk","URL","createObjectURL","beforeUpload","ElMessage","error","onProgress","evt","floor","onSuccess","args"],"mappings":"0sDAgDA,MAAMA,EAAQC,EAMRC,EAAKC,EAAa,gBAClBC,EAAOC,EAAe,UAGtBC,EAAaC,EAGhB,CACDC,oBAAoB,EACpBC,SAAU,CACRC,QAAS,GACTC,QAAS,KAKPC,EAAOC,GAAS,IACpBC,SAAOC,MAAM,KAAKC,KAAKC,GAAQA,EAAIF,MAAM,KAAKG,UAG1CC,EAAaN,GAAS,KAAO,CACjCO,MAAO,GAAGN,EAAAM,UACVC,OAAQ,GAAGP,EAAAO,eAGPC,EAAeT,GAAS,IAAgC,GAA1BU,KAAKC,IAAIV,EAAAM,MAAON,EAAMO,UAEpDI,EAAaZ,GACjB,IACEC,EAAAY,SACA,UAAUd,EAAKe,MAAMC,KACnB,sBACed,EAAIe,kBAAcf,EAAKM,SAAIN,aAIhD,SAASJ,EAAQoB,GACfA,EAAEC,iBACFzB,EAAWqB,MAAMnB,oBAAqB,CAAA,CAGxC,SAASwB,IACP1B,EAAWqB,MAAMnB,oBAAqB,CAAA,CAGxC,SAASyB,EAAOH,GACdA,EAAEC,iBACF/B,EAAM,aAAc,GAAE,CAGlB,MAAAkC,EAAmDC,IACvD,MAAMC,EAAUD,EAAKE,KAAKtB,MAAM,KAAKG,OAAS,GACxCoB,EAAW1B,EAAKe,MAAMY,SAASH,GAC/BI,EAAWL,EAAKN,KAAO,KAAO,KAAOf,EAAIe,KAE/C,OAAKS,EAKAE,GAKLlC,EAAWqB,MAAMlB,SAASC,QAAU+B,IAAIC,gBAAgBP,IAEjDrB,EAAY6B,cAAG7B,eAAaqB,KANjCS,EAAUC,MAAM,cAAc/B,EAAIe,YAC3B,IANPe,EAAUC,MAAM,UAAUjC,EAAKe,MAAMC,KAAK,cACnC,EAUkC,EAGvCkB,EAAyCC,IAC7CzC,EAAWqB,MAAMlB,SAASE,QAAUY,KAAKyB,MAAMD,EAAIpC,QAAO,EAGtDsC,EAAsC,IAAIC,KAC9C5C,EAAWqB,MAAMlB,SAAW,CAC1BC,QAAS,GACTC,QAAS,GAELX,EAAA,eAAgBkD,EAAI"}
@@ -1,2 +1,2 @@
1
- import{ElPopover as e,ElLink as l,ElCheckbox as t,ElButton as a,ElIcon as o,ElDialog as n,ElRadioGroup as u,ElRadio as i}from"element-plus/es";import{defineComponent as s,ref as d,computed as c,createElementBlock as r,openBlock as m,normalizeClass as f,unref as p,createElementVNode as y,createCommentVNode as v,createVNode as b,createBlock as k,withCtx as h,createTextVNode as _,isRef as w,Fragment as x,renderList as V,toDisplayString as g}from"vue";import{Edit as C,Delete as j,Top as O,Bottom as B}from"@element-plus/icons-vue";import{useNamespace as E}from"@qxs-bns/hooks";import T from"../../subject-type/src/subject-type.vue.mjs";const U={key:0,class:"flex-justify-between"},R={class:"flex-justify-between"},S={key:0,class:"has-set"},z={key:1,class:"flex flex-justify-end action-buttons"};var A=s({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(s,{emit:A}){const K=s,N=d(K.isKey),q=d(!1),Q=A,D=d(K.answerCheckType),F=E("subject-action"),G=d(!0),H=[{value:2,label:"必须全部都是支持选项,方可下一步"},{value:1,label:"无需判断是否是支持选项"},{value:3,label:"包含全部支持选项,即可下一步"}],I=c((()=>H.find((e=>e.value===D.value))?.label));function J(){q.value=!1,Q("set-answer-setting",D.value)}function L(){Q("set-key",N.value)}function M(e,l){Q("add",e,l?K.examAnswerRelationType:null)}return(d,c)=>{const E=l,A=e,K=t,P=o,W=a,X=i,Y=u,Z=n;return m(),r("div",{class:f(p(F).e("action-exam"))},[y("div",{class:f(["action flex flex-justify-between",{active:s.isEdit}])},[v(" 编辑模式 "),s.isEdit?(m(),r("div",U,[b(A,{trigger:"click"},{reference:h((()=>[b(E,{type:"primary",class:"btn-margin"},{default:h((()=>c[15]||(c[15]=[_(" +在此题后加入新题")]))),_:1})])),default:h((()=>[b(T,{onSelect:M})])),_:1}),s.showRichText?(m(),k(E,{key:0,type:"primary",class:"btn-margin",onClick:c[0]||(c[0]=e=>Q("on-show-rich-text"))},{default:h((()=>c[16]||(c[16]=[_(" +添加题目描述(图文) ")]))),_:1})):v("v-if",!0),s.showOtherOption?(m(),k(E,{key:1,type:"primary",class:"btn-margin",onClick:c[1]||(c[1]=e=>q.value=!0)},{default:h((()=>c[17]||(c[17]=[_(" 答题设置 ")]))),_:1})):v("v-if",!0),s.showOtherOption?(m(),k(K,{key:2,modelValue:p(N),"onUpdate:modelValue":c[2]||(c[2]=e=>w(N)?N.value=e:null),label:"核心题",onChange:L},null,8,["modelValue"])):v("v-if",!0)])):(m(),r(x,{key:1},[v(" 非编辑模式 "),y("div",R,[s.showOtherOption?(m(),k(K,{key:0,modelValue:p(N),"onUpdate:modelValue":c[3]||(c[3]=e=>w(N)?N.value=e:null),label:"核心题",disabled:""},null,8,["modelValue"])):v("v-if",!0),s.showOtherOption?(m(),k(K,{key:1,modelValue:p(G),"onUpdate:modelValue":c[4]||(c[4]=e=>w(G)?G.value=e:null),label:p(I),disabled:"",class:"btn-margin"},null,8,["modelValue","label"])):v("v-if",!0)])],2112)),v(" 操作按钮 "),y("div",null,[s.isSet?(m(),r("div",S,"*此题设置了跳题逻辑")):(m(),r("div",z,[s.isEdit?(m(),r(x,{key:1},[b(W,{class:"btn-margin",onClick:c[9]||(c[9]=e=>Q("delete"))},{default:h((()=>c[22]||(c[22]=[_("删除")]))),_:1}),b(W,{type:"primary",onClick:c[10]||(c[10]=e=>Q("save"))},{default:h((()=>c[23]||(c[23]=[_("完成编辑")]))),_:1})],64)):(m(),r(x,{key:0},[s.pageEnd?v("v-if",!0):(m(),k(W,{key:0,onClick:c[5]||(c[5]=e=>Q("edit"))},{icon:h((()=>[b(P,null,{default:h((()=>[b(p(C))])),_:1})])),default:h((()=>[c[18]||(c[18]=_(" 编辑 "))])),_:1})),b(W,{onClick:c[6]||(c[6]=e=>Q("delete"))},{icon:h((()=>[b(P,null,{default:h((()=>[b(p(j))])),_:1})])),default:h((()=>[c[19]||(c[19]=_(" 删除 "))])),_:1}),b(W,{onClick:c[7]||(c[7]=e=>Q("move-up"))},{icon:h((()=>[b(P,null,{default:h((()=>[b(p(O))])),_:1})])),default:h((()=>[c[20]||(c[20]=_(" 上移 "))])),_:1}),b(W,{onClick:c[8]||(c[8]=e=>Q("move-down"))},{icon:h((()=>[b(P,null,{default:h((()=>[b(p(B))])),_:1})])),default:h((()=>[c[21]||(c[21]=_(" 下移 "))])),_:1})],64))]))]),v(" 答题设置弹窗 "),b(Z,{modelValue:p(q),"onUpdate:modelValue":c[13]||(c[13]=e=>w(q)?q.value=e:null),title:"答题设置",class:"customize-dialog",onClose:c[14]||(c[14]=e=>q.value=!1)},{footer:h((()=>[b(W,{class:"customize-button",type:"primary",plain:"",onClick:c[12]||(c[12]=e=>q.value=!1)},{default:h((()=>c[24]||(c[24]=[_(" 取消 ")]))),_:1}),b(W,{class:"customize-button",type:"primary",plain:"",onClick:J},{default:h((()=>c[25]||(c[25]=[_(" 保存 ")]))),_:1})])),default:h((()=>[b(Y,{modelValue:p(D),"onUpdate:modelValue":c[11]||(c[11]=e=>w(D)?D.value=e:null),class:"vertical-radio-group"},{default:h((()=>[(m(),r(x,null,V(H,(e=>b(X,{key:e.value,value:e.value},{default:h((()=>[_(g(e.label),1)])),_:2},1032,["value"]))),64))])),_:1},8,["modelValue"])])),_:1},8,["modelValue"])],2)],2)}}});export{A as default};
1
+ import{ElPopover as e,ElLink as l,ElCheckbox as t,ElButton as n,ElIcon as o,ElDialog as a,ElRadioGroup as s,ElRadio as i}from"element-plus/es";import"element-plus/es/components/base/style/index";import"element-plus/es/components/dialog/style/index";import"element-plus/es/components/radio-group/style/index";import"element-plus/es/components/radio/style/index";import"element-plus/es/components/button/style/index";import"element-plus/es/components/icon/style/index";import"element-plus/es/components/checkbox/style/index";import"element-plus/es/components/popover/style/index";import"element-plus/es/components/link/style/index";import{defineComponent as u,ref as d,computed as p,createElementBlock as m,openBlock as c,normalizeClass as r,unref as y,createElementVNode as f,createCommentVNode as v,createVNode as b,createBlock as k,withCtx as x,createTextVNode as h,isRef as _,Fragment as w,renderList as g,toDisplayString as V}from"vue";import{Edit as C,Delete as j,Top as O,Bottom as B}from"@element-plus/icons-vue";import{useNamespace as E}from"@qxs-bns/hooks";import T from"../../subject-type/src/subject-type.vue.mjs";const U={key:0,class:"flex-justify-between"},R={class:"flex-justify-between"},S={key:0,class:"has-set"},z={key:1,class:"flex flex-justify-end action-buttons"};var A=u({name:"QxsSubjectAction",__name:"subject-action",props:{isEdit:Boolean,isSet:{type:Boolean,default:!1},isKey:{type:Boolean,default:!1},answerCheckType:{type:Number,default:1},showOtherOption:{type:Boolean,default:!0},examAnswerRelationType:{type:Number,default:null},showRichText:{type:Boolean,default:!0},pageEnd:{type:Boolean,default:!1}},emits:["move-up","move-down","delete","save","edit","add","on-show-rich-text","set-key","set-answer-setting"],setup(u,{emit:A}){const K=u,N=d(K.isKey),q=d(!1),Q=A,D=d(K.answerCheckType),F=E("subject-action"),G=d(!0),H=[{value:2,label:"必须全部都是支持选项,方可下一步"},{value:1,label:"无需判断是否是支持选项"},{value:3,label:"包含全部支持选项,即可下一步"}],I=p((()=>H.find((e=>e.value===D.value))?.label));function J(){q.value=!1,Q("set-answer-setting",D.value)}function L(){Q("set-key",N.value)}function M(e,l){Q("add",e,l?K.examAnswerRelationType:null)}return(d,p)=>{const E=l,A=e,K=t,P=o,W=n,X=i,Y=s,Z=a;return c(),m("div",{class:r(y(F).e("action-exam"))},[f("div",{class:r(["action flex flex-justify-between",{active:u.isEdit}])},[v(" 编辑模式 "),u.isEdit?(c(),m("div",U,[b(A,{trigger:"click"},{reference:x((()=>[b(E,{type:"primary",class:"btn-margin"},{default:x((()=>p[15]||(p[15]=[h(" +在此题后加入新题")]))),_:1})])),default:x((()=>[b(T,{onSelect:M})])),_:1}),u.showRichText?(c(),k(E,{key:0,type:"primary",class:"btn-margin",onClick:p[0]||(p[0]=e=>Q("on-show-rich-text"))},{default:x((()=>p[16]||(p[16]=[h(" +添加题目描述(图文) ")]))),_:1})):v("v-if",!0),u.showOtherOption?(c(),k(E,{key:1,type:"primary",class:"btn-margin",onClick:p[1]||(p[1]=e=>q.value=!0)},{default:x((()=>p[17]||(p[17]=[h(" 答题设置 ")]))),_:1})):v("v-if",!0),u.showOtherOption?(c(),k(K,{key:2,modelValue:y(N),"onUpdate:modelValue":p[2]||(p[2]=e=>_(N)?N.value=e:null),label:"核心题",onChange:L},null,8,["modelValue"])):v("v-if",!0)])):(c(),m(w,{key:1},[v(" 非编辑模式 "),f("div",R,[u.showOtherOption?(c(),k(K,{key:0,modelValue:y(N),"onUpdate:modelValue":p[3]||(p[3]=e=>_(N)?N.value=e:null),label:"核心题",disabled:""},null,8,["modelValue"])):v("v-if",!0),u.showOtherOption?(c(),k(K,{key:1,modelValue:y(G),"onUpdate:modelValue":p[4]||(p[4]=e=>_(G)?G.value=e:null),label:y(I),disabled:"",class:"btn-margin"},null,8,["modelValue","label"])):v("v-if",!0)])],2112)),v(" 操作按钮 "),f("div",null,[u.isSet?(c(),m("div",S,"*此题设置了跳题逻辑")):(c(),m("div",z,[u.isEdit?(c(),m(w,{key:1},[b(W,{class:"btn-margin",onClick:p[9]||(p[9]=e=>Q("delete"))},{default:x((()=>p[22]||(p[22]=[h("删除")]))),_:1}),b(W,{type:"primary",onClick:p[10]||(p[10]=e=>Q("save"))},{default:x((()=>p[23]||(p[23]=[h("完成编辑")]))),_:1})],64)):(c(),m(w,{key:0},[u.pageEnd?v("v-if",!0):(c(),k(W,{key:0,onClick:p[5]||(p[5]=e=>Q("edit"))},{icon:x((()=>[b(P,null,{default:x((()=>[b(y(C))])),_:1})])),default:x((()=>[p[18]||(p[18]=h(" 编辑 "))])),_:1})),b(W,{onClick:p[6]||(p[6]=e=>Q("delete"))},{icon:x((()=>[b(P,null,{default:x((()=>[b(y(j))])),_:1})])),default:x((()=>[p[19]||(p[19]=h(" 删除 "))])),_:1}),b(W,{onClick:p[7]||(p[7]=e=>Q("move-up"))},{icon:x((()=>[b(P,null,{default:x((()=>[b(y(O))])),_:1})])),default:x((()=>[p[20]||(p[20]=h(" 上移 "))])),_:1}),b(W,{onClick:p[8]||(p[8]=e=>Q("move-down"))},{icon:x((()=>[b(P,null,{default:x((()=>[b(y(B))])),_:1})])),default:x((()=>[p[21]||(p[21]=h(" 下移 "))])),_:1})],64))]))]),v(" 答题设置弹窗 "),b(Z,{modelValue:y(q),"onUpdate:modelValue":p[13]||(p[13]=e=>_(q)?q.value=e:null),title:"答题设置",class:"customize-dialog",onClose:p[14]||(p[14]=e=>q.value=!1)},{footer:x((()=>[b(W,{class:"customize-button",type:"primary",plain:"",onClick:p[12]||(p[12]=e=>q.value=!1)},{default:x((()=>p[24]||(p[24]=[h(" 取消 ")]))),_:1}),b(W,{class:"customize-button",type:"primary",plain:"",onClick:J},{default:x((()=>p[25]||(p[25]=[h(" 保存 ")]))),_:1})])),default:x((()=>[b(Y,{modelValue:y(D),"onUpdate:modelValue":p[11]||(p[11]=e=>_(D)?D.value=e:null),class:"vertical-radio-group"},{default:x((()=>[(c(),m(w,null,g(H,(e=>b(X,{key:e.value,value:e.value},{default:x((()=>[h(V(e.label),1)])),_:2},1032,["value"]))),64))])),_:1},8,["modelValue"])])),_:1},8,["modelValue"])],2)],2)}}});export{A as default};
2
2
  //# sourceMappingURL=subject-action.vue.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"subject-action.vue.mjs","sources":["../../../../../../packages/components/src/subject-action/src/subject-action.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { Bottom, Delete, Edit, Top } from '@element-plus/icons-vue'\nimport { useNamespace } from '@qxs-bns/hooks'\nimport SubjectType from '../../subject-type/src/subject-type.vue'\n\ndefineOptions({\n name: 'QxsSubjectAction',\n})\n\nconst props = defineProps({\n isEdit: Boolean,\n isSet: {\n type: Boolean,\n default: false,\n },\n isKey: {\n type: Boolean,\n default: false,\n },\n answerCheckType: {\n type: Number,\n default: 1,\n },\n showOtherOption: {\n type: Boolean,\n default: true,\n },\n examAnswerRelationType: {\n type: Number,\n default: null,\n },\n showRichText: {\n type: Boolean,\n default: true,\n },\n pageEnd: {\n type: Boolean,\n default: false,\n },\n})\n\nconst isKey = ref(props.isKey)\nconst showAnswerSetting = ref(false)\nconst emits = defineEmits([\n 'move-up',\n 'move-down',\n 'delete',\n 'save',\n 'edit',\n 'add',\n 'on-show-rich-text',\n 'set-key',\n 'set-answer-setting',\n])\nconst answerType = ref(props.answerCheckType)\nconst ns = useNamespace('subject-action')\nconst checked = ref(true)\nconst answerTextList = [\n {\n value: 2,\n label: '必须全部都是支持选项,方可下一步',\n },\n {\n value: 1,\n label: '无需判断是否是支持选项',\n },\n {\n value: 3,\n label: '包含全部支持选项,即可下一步',\n },\n]\n\nconst answerText = computed(() => {\n return answerTextList.find((item) => item.value === answerType.value)?.label\n})\n\nfunction onSaveSetting() {\n showAnswerSetting.value = false\n emits('set-answer-setting', answerType.value)\n}\n\nfunction setKey() {\n emits('set-key', isKey.value)\n}\n\nfunction selectExam(type: string, canSet: boolean) {\n emits('add', type, canSet ? props.examAnswerRelationType : null)\n}\n</script>\n\n<template>\n <div :class=\"ns.e('action-exam')\">\n <div class=\"action flex flex-justify-between\" :class=\"{ active: isEdit }\">\n <!-- 编辑模式 -->\n <div v-if=\"isEdit\" class=\"flex-justify-between\">\n <el-popover trigger=\"click\">\n <template #reference>\n <el-link type=\"primary\" class=\"btn-margin\"> +在此题后加入新题</el-link>\n </template>\n <SubjectType @select=\"selectExam\" />\n </el-popover>\n <el-link\n v-if=\"showRichText\"\n type=\"primary\"\n class=\"btn-margin\"\n @click=\"emits('on-show-rich-text')\"\n >\n +添加题目描述(图文)\n </el-link>\n <el-link\n v-if=\"showOtherOption\"\n type=\"primary\"\n class=\"btn-margin\"\n @click=\"showAnswerSetting = true\"\n >\n 答题设置\n </el-link>\n <el-checkbox\n v-if=\"showOtherOption\"\n v-model=\"isKey\"\n label=\"核心题\"\n @change=\"setKey\"\n />\n </div>\n\n <!-- 非编辑模式 -->\n <div v-else class=\"flex-justify-between\">\n <el-checkbox\n v-if=\"showOtherOption\"\n v-model=\"isKey\"\n label=\"核心题\"\n disabled\n />\n <el-checkbox\n v-if=\"showOtherOption\"\n v-model=\"checked\"\n :label=\"answerText\"\n disabled\n class=\"btn-margin\"\n />\n </div>\n\n <!-- 操作按钮 -->\n <div>\n <div v-if=\"isSet\" class=\"has-set\">*此题设置了跳题逻辑</div>\n <div v-else class=\"flex flex-justify-end action-buttons\">\n <template v-if=\"!isEdit\">\n <el-button\n v-if=\"!pageEnd\"\n @click=\"emits('edit')\"\n >\n <template #icon>\n <el-icon><Edit /></el-icon>\n </template>\n 编辑\n </el-button>\n <el-button @click=\"emits('delete')\">\n <template #icon>\n <el-icon><Delete /></el-icon>\n </template>\n 删除\n </el-button>\n <el-button @click=\"emits('move-up')\">\n <template #icon>\n <el-icon><Top /></el-icon>\n </template>\n 上移\n </el-button>\n <el-button @click=\"emits('move-down')\">\n <template #icon>\n <el-icon><Bottom /></el-icon>\n </template>\n 下移\n </el-button>\n </template>\n <template v-else>\n <el-button class=\"btn-margin\" @click=\"emits('delete')\">删除</el-button>\n <el-button type=\"primary\" @click=\"emits('save')\">完成编辑</el-button>\n </template>\n </div>\n </div>\n\n <!-- 答题设置弹窗 -->\n <el-dialog\n v-model=\"showAnswerSetting\"\n title=\"答题设置\"\n class=\"customize-dialog\"\n @close=\"showAnswerSetting = false\"\n >\n <el-radio-group v-model=\"answerType\" class=\"vertical-radio-group\">\n <el-radio\n v-for=\"item in answerTextList\"\n :key=\"item.value\"\n :value=\"item.value\"\n >\n {{ item.label }}\n </el-radio>\n </el-radio-group>\n <template #footer>\n <el-button\n class=\"customize-button\"\n type=\"primary\"\n plain\n @click=\"showAnswerSetting = false\"\n >\n 取消\n </el-button>\n <el-button\n class=\"customize-button\"\n type=\"primary\"\n plain\n @click=\"onSaveSetting\"\n >\n 保存\n </el-button>\n </template>\n </el-dialog>\n </div>\n </div>\n</template>"],"names":["props","__props","isKey","ref","showAnswerSetting","emits","__emit","answerType","answerCheckType","ns","useNamespace","checked","answerTextList","value","label","answerText","computed","find","item","onSaveSetting","setKey","selectExam","type","canSet","examAnswerRelationType"],"mappings":"yvCASA,MAAMA,EAAQC,EAgCRC,EAAQC,EAAIH,EAAME,OAClBE,EAAoBD,GAAI,GACxBE,EAAQC,EAWRC,EAAaJ,EAAIH,EAAMQ,iBACvBC,EAAKC,EAAa,kBAClBC,EAAUR,GAAI,GACdS,EAAiB,CACrB,CACEC,MAAO,EACPC,MAAO,oBAET,CACED,MAAO,EACPC,MAAO,eAET,CACED,MAAO,EACPC,MAAO,mBAILC,EAAaC,GAAS,IACnBJ,EAAeK,MAAMC,GAASA,EAAKL,QAAUN,EAAWM,SAAQC,QAGzE,SAASK,IACPf,EAAkBS,OAAQ,EACpBR,EAAA,qBAAsBE,EAAWM,MAAK,CAG9C,SAASO,IACDf,EAAA,UAAWH,EAAMW,MAAK,CAGrB,SAAAQ,EAAWC,EAAcC,GAChClB,EAAM,MAAOiB,EAAMC,EAASvB,EAAMwB,uBAAyB,KAAI"}
1
+ {"version":3,"file":"subject-action.vue.mjs","sources":["../../../../../../packages/components/src/subject-action/src/subject-action.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { Bottom, Delete, Edit, Top } from '@element-plus/icons-vue'\nimport { useNamespace } from '@qxs-bns/hooks'\nimport SubjectType from '../../subject-type/src/subject-type.vue'\n\ndefineOptions({\n name: 'QxsSubjectAction',\n})\n\nconst props = defineProps({\n isEdit: Boolean,\n isSet: {\n type: Boolean,\n default: false,\n },\n isKey: {\n type: Boolean,\n default: false,\n },\n answerCheckType: {\n type: Number,\n default: 1,\n },\n showOtherOption: {\n type: Boolean,\n default: true,\n },\n examAnswerRelationType: {\n type: Number,\n default: null,\n },\n showRichText: {\n type: Boolean,\n default: true,\n },\n pageEnd: {\n type: Boolean,\n default: false,\n },\n})\n\nconst isKey = ref(props.isKey)\nconst showAnswerSetting = ref(false)\nconst emits = defineEmits([\n 'move-up',\n 'move-down',\n 'delete',\n 'save',\n 'edit',\n 'add',\n 'on-show-rich-text',\n 'set-key',\n 'set-answer-setting',\n])\nconst answerType = ref(props.answerCheckType)\nconst ns = useNamespace('subject-action')\nconst checked = ref(true)\nconst answerTextList = [\n {\n value: 2,\n label: '必须全部都是支持选项,方可下一步',\n },\n {\n value: 1,\n label: '无需判断是否是支持选项',\n },\n {\n value: 3,\n label: '包含全部支持选项,即可下一步',\n },\n]\n\nconst answerText = computed(() => {\n return answerTextList.find((item) => item.value === answerType.value)?.label\n})\n\nfunction onSaveSetting() {\n showAnswerSetting.value = false\n emits('set-answer-setting', answerType.value)\n}\n\nfunction setKey() {\n emits('set-key', isKey.value)\n}\n\nfunction selectExam(type: string, canSet: boolean) {\n emits('add', type, canSet ? props.examAnswerRelationType : null)\n}\n</script>\n\n<template>\n <div :class=\"ns.e('action-exam')\">\n <div class=\"action flex flex-justify-between\" :class=\"{ active: isEdit }\">\n <!-- 编辑模式 -->\n <div v-if=\"isEdit\" class=\"flex-justify-between\">\n <el-popover trigger=\"click\">\n <template #reference>\n <el-link type=\"primary\" class=\"btn-margin\"> +在此题后加入新题</el-link>\n </template>\n <SubjectType @select=\"selectExam\" />\n </el-popover>\n <el-link\n v-if=\"showRichText\"\n type=\"primary\"\n class=\"btn-margin\"\n @click=\"emits('on-show-rich-text')\"\n >\n +添加题目描述(图文)\n </el-link>\n <el-link\n v-if=\"showOtherOption\"\n type=\"primary\"\n class=\"btn-margin\"\n @click=\"showAnswerSetting = true\"\n >\n 答题设置\n </el-link>\n <el-checkbox\n v-if=\"showOtherOption\"\n v-model=\"isKey\"\n label=\"核心题\"\n @change=\"setKey\"\n />\n </div>\n\n <!-- 非编辑模式 -->\n <div v-else class=\"flex-justify-between\">\n <el-checkbox\n v-if=\"showOtherOption\"\n v-model=\"isKey\"\n label=\"核心题\"\n disabled\n />\n <el-checkbox\n v-if=\"showOtherOption\"\n v-model=\"checked\"\n :label=\"answerText\"\n disabled\n class=\"btn-margin\"\n />\n </div>\n\n <!-- 操作按钮 -->\n <div>\n <div v-if=\"isSet\" class=\"has-set\">*此题设置了跳题逻辑</div>\n <div v-else class=\"flex flex-justify-end action-buttons\">\n <template v-if=\"!isEdit\">\n <el-button\n v-if=\"!pageEnd\"\n @click=\"emits('edit')\"\n >\n <template #icon>\n <el-icon><Edit /></el-icon>\n </template>\n 编辑\n </el-button>\n <el-button @click=\"emits('delete')\">\n <template #icon>\n <el-icon><Delete /></el-icon>\n </template>\n 删除\n </el-button>\n <el-button @click=\"emits('move-up')\">\n <template #icon>\n <el-icon><Top /></el-icon>\n </template>\n 上移\n </el-button>\n <el-button @click=\"emits('move-down')\">\n <template #icon>\n <el-icon><Bottom /></el-icon>\n </template>\n 下移\n </el-button>\n </template>\n <template v-else>\n <el-button class=\"btn-margin\" @click=\"emits('delete')\">删除</el-button>\n <el-button type=\"primary\" @click=\"emits('save')\">完成编辑</el-button>\n </template>\n </div>\n </div>\n\n <!-- 答题设置弹窗 -->\n <el-dialog\n v-model=\"showAnswerSetting\"\n title=\"答题设置\"\n class=\"customize-dialog\"\n @close=\"showAnswerSetting = false\"\n >\n <el-radio-group v-model=\"answerType\" class=\"vertical-radio-group\">\n <el-radio\n v-for=\"item in answerTextList\"\n :key=\"item.value\"\n :value=\"item.value\"\n >\n {{ item.label }}\n </el-radio>\n </el-radio-group>\n <template #footer>\n <el-button\n class=\"customize-button\"\n type=\"primary\"\n plain\n @click=\"showAnswerSetting = false\"\n >\n 取消\n </el-button>\n <el-button\n class=\"customize-button\"\n type=\"primary\"\n plain\n @click=\"onSaveSetting\"\n >\n 保存\n </el-button>\n </template>\n </el-dialog>\n </div>\n </div>\n</template>"],"names":["props","__props","isKey","ref","showAnswerSetting","emits","__emit","answerType","answerCheckType","ns","useNamespace","checked","answerTextList","value","label","answerText","computed","find","item","onSaveSetting","setKey","selectExam","type","canSet","examAnswerRelationType"],"mappings":"guDASA,MAAMA,EAAQC,EAgCRC,EAAQC,EAAIH,EAAME,OAClBE,EAAoBD,GAAI,GACxBE,EAAQC,EAWRC,EAAaJ,EAAIH,EAAMQ,iBACvBC,EAAKC,EAAa,kBAClBC,EAAUR,GAAI,GACdS,EAAiB,CACrB,CACEC,MAAO,EACPC,MAAO,oBAET,CACED,MAAO,EACPC,MAAO,eAET,CACED,MAAO,EACPC,MAAO,mBAILC,EAAaC,GAAS,IACnBJ,EAAeK,MAAMC,GAASA,EAAKL,QAAUN,EAAWM,SAAQC,QAGzE,SAASK,IACPf,EAAkBS,OAAQ,EACpBR,EAAA,qBAAsBE,EAAWM,MAAK,CAG9C,SAASO,IACDf,EAAA,UAAWH,EAAMW,MAAK,CAGrB,SAAAQ,EAAWC,EAAcC,GAChClB,EAAM,MAAOiB,EAAMC,EAASvB,EAAMwB,uBAAyB,KAAI"}
@@ -1,2 +1,2 @@
1
- import{ElRow as e}from"element-plus/es";import{defineComponent as t,onMounted as n,createElementBlock as o,openBlock as s,normalizeClass as a,unref as r,createVNode as i,withCtx as l,createElementVNode as u,toDisplayString as d}from"vue";import{useNamespace as p}from"@qxs-bns/hooks";import m from"../../../subject-action/src/subject-action.vue.mjs";var c=t({name:"QxsSubjectScale",__name:"SubjectPageEnd",props:{currentPageIndex:{type:Number,required:!0},totalPage:{type:Number,required:!0},isSave:{type:Boolean,required:!0},showAction:{type:Boolean,required:!1},isEdit:{type:Boolean,required:!0},isSet:{type:Boolean,required:!0},examAnswerRelationType:{type:Number,required:!1}},emits:["move","save","delete","edit","add"],setup(t,{emit:c}){const x=t,y=c;n((function(){}));const v=p("subject-end");return(t,n)=>{const p=e;return s(),o("div",{class:a(r(v).e("end-exam"))},[i(p,{type:"flex",align:"middle"},{default:l((()=>[n[5]||(n[5]=u("span",{class:"auto-line"},null,-1)),u("span",null,"第"+d(x.currentPageIndex)+" / "+d(t.totalPage)+"页",1),n[6]||(n[6]=u("span",{class:"auto-line"},null,-1))])),_:1}),i(m,{"is-edit":!1,"is-set":t.isSet,pageEnd:!0,examAnswerRelationType:x.examAnswerRelationType,showOtherOption:!1,showRichText:!1,onMoveUp:n[0]||(n[0]=e=>y("move","up")),onMoveDown:n[1]||(n[1]=e=>y("move","down")),onDelete:n[2]||(n[2]=e=>y("delete")),onEdit:n[3]||(n[3]=e=>y("edit")),onAdd:n[4]||(n[4]=e=>y("add",e))},null,8,["is-set","examAnswerRelationType"])],2)}}});export{c as default};
1
+ import{ElRow as e}from"element-plus/es";import"element-plus/es/components/base/style/index";import"element-plus/es/components/row/style/index";import{defineComponent as t,onMounted as n,createElementBlock as o,openBlock as s,normalizeClass as r,unref as a,createVNode as i,withCtx as l,createElementVNode as u,toDisplayString as d}from"vue";import{useNamespace as p}from"@qxs-bns/hooks";import m from"../../../subject-action/src/subject-action.vue.mjs";var c=t({name:"QxsSubjectScale",__name:"SubjectPageEnd",props:{currentPageIndex:{type:Number,required:!0},totalPage:{type:Number,required:!0},isSave:{type:Boolean,required:!0},showAction:{type:Boolean,required:!1},isEdit:{type:Boolean,required:!0},isSet:{type:Boolean,required:!0},examAnswerRelationType:{type:Number,required:!1}},emits:["move","save","delete","edit","add"],setup(t,{emit:c}){const x=t,y=c;n((function(){}));const v=p("subject-end");return(t,n)=>{const p=e;return s(),o("div",{class:r(a(v).e("end-exam"))},[i(p,{type:"flex",align:"middle"},{default:l((()=>[n[5]||(n[5]=u("span",{class:"auto-line"},null,-1)),u("span",null,"第"+d(x.currentPageIndex)+" / "+d(t.totalPage)+"页",1),n[6]||(n[6]=u("span",{class:"auto-line"},null,-1))])),_:1}),i(m,{"is-edit":!1,"is-set":t.isSet,pageEnd:!0,examAnswerRelationType:x.examAnswerRelationType,showOtherOption:!1,showRichText:!1,onMoveUp:n[0]||(n[0]=e=>y("move","up")),onMoveDown:n[1]||(n[1]=e=>y("move","down")),onDelete:n[2]||(n[2]=e=>y("delete")),onEdit:n[3]||(n[3]=e=>y("edit")),onAdd:n[4]||(n[4]=e=>y("add",e))},null,8,["is-set","examAnswerRelationType"])],2)}}});export{c as default};
2
2
  //# sourceMappingURL=SubjectPageEnd.vue.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"SubjectPageEnd.vue.mjs","sources":["../../../../../../../packages/components/src/subject-list/src/components/SubjectPageEnd.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { useNamespace } from '@qxs-bns/hooks'\nimport SubjectAction from '../../../subject-action/src/subject-action.vue'\n\ndefineOptions({\n name: 'QxsSubjectScale',\n})\nconst props = defineProps<{\n currentPageIndex: number\n totalPage: number\n isSave: boolean\n showAction?: boolean\n isEdit: boolean\n isSet: boolean\n examAnswerRelationType?: number\n}>()\nconst emits = defineEmits(['move', 'save', 'delete', 'edit', 'add'])\n\nfunction init() {\n\n}\n\nonMounted(init)\nconst ns = useNamespace('subject-end')\n</script>\n\n<template>\n <div :class=\"ns.e('end-exam')\">\n <el-row type=\"flex\" align=\"middle\">\n <span class=\"auto-line\" />\n <span>第{{ props.currentPageIndex }} / {{ totalPage }}页</span>\n <span class=\"auto-line\" />\n </el-row>\n <SubjectAction\n :is-edit=\"false\"\n :is-set=\"isSet\"\n :pageEnd=\"true\"\n :examAnswerRelationType=\"props.examAnswerRelationType\"\n :showOtherOption=\"false\"\n :showRichText=\"false\"\n @move-up=\"emits('move', 'up')\"\n @move-down=\"emits('move', 'down')\"\n @delete=\"emits('delete')\"\n @edit=\"emits('edit')\"\n @add=\"type => emits('add', type)\"\n />\n </div>\n</template>\n"],"names":["props","__props","emits","__emit","onMounted","ns","useNamespace"],"mappings":"uuBAOA,MAAMA,EAAQC,EASRC,EAAQC,EAMdC,GAJA,WAAgB,IAKV,MAAAC,EAAKC,EAAa"}
1
+ {"version":3,"file":"SubjectPageEnd.vue.mjs","sources":["../../../../../../../packages/components/src/subject-list/src/components/SubjectPageEnd.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { useNamespace } from '@qxs-bns/hooks'\nimport SubjectAction from '../../../subject-action/src/subject-action.vue'\n\ndefineOptions({\n name: 'QxsSubjectScale',\n})\nconst props = defineProps<{\n currentPageIndex: number\n totalPage: number\n isSave: boolean\n showAction?: boolean\n isEdit: boolean\n isSet: boolean\n examAnswerRelationType?: number\n}>()\nconst emits = defineEmits(['move', 'save', 'delete', 'edit', 'add'])\n\nfunction init() {\n\n}\n\nonMounted(init)\nconst ns = useNamespace('subject-end')\n</script>\n\n<template>\n <div :class=\"ns.e('end-exam')\">\n <el-row type=\"flex\" align=\"middle\">\n <span class=\"auto-line\" />\n <span>第{{ props.currentPageIndex }} / {{ totalPage }}页</span>\n <span class=\"auto-line\" />\n </el-row>\n <SubjectAction\n :is-edit=\"false\"\n :is-set=\"isSet\"\n :pageEnd=\"true\"\n :examAnswerRelationType=\"props.examAnswerRelationType\"\n :showOtherOption=\"false\"\n :showRichText=\"false\"\n @move-up=\"emits('move', 'up')\"\n @move-down=\"emits('move', 'down')\"\n @delete=\"emits('delete')\"\n @edit=\"emits('edit')\"\n @add=\"type => emits('add', type)\"\n />\n </div>\n</template>\n"],"names":["props","__props","emits","__emit","onMounted","ns","useNamespace"],"mappings":"80BAOA,MAAMA,EAAQC,EASRC,EAAQC,EAMdC,GAJA,WAAgB,IAKV,MAAAC,EAAKC,EAAa"}
@@ -1,2 +1,2 @@
1
- import{ElInput as e,ElLink as l,ElCheckboxGroup as t,ElCheckbox as i,ElTag as a,ElButton as s,ElIcon as n}from"element-plus/es";import{defineComponent as o,useAttrs as r,ref as u,watch as d,onMounted as v,createElementBlock as c,openBlock as m,normalizeClass as f,unref as p,createVNode as x,withCtx as y,createBlock as w,createCommentVNode as g,createElementVNode as h,isRef as _,createTextVNode as b,Fragment as k,renderList as j,toDisplayString as A,mergeProps as C}from"vue";import{Plus as I}from"@element-plus/icons-vue";import{useNamespace as V}from"@qxs-bns/hooks";import{ElMessage as S}from"element-plus";import O from"../../../subject-action/src/subject-action.vue.mjs";import q from"../../../subject-layout/src/subject-layout.vue.mjs";import T from"../../../tiny-mce-editor/src/tiny-mce-editor.vue.mjs";const R={class:"preview"},B={class:"content"},U={class:"title"},L={key:0},E=["innerHTML"],M={key:1,class:"flex flex-wrap",style:{"margin-top":"10px",color:"#a8abb2"}},D={class:"flex"},H={style:{flex:"1"}},N={class:"flex flex-justify-end"},z={class:"margin-bottom flex flex-items-center"},F={class:"margin-bottom answer-list"},G={class:"label flex flex-justify-end"},J={class:"answer-tags"},K={key:0,class:"margin-bottom flex"},P={style:{flex:"1"}},Q={key:1,class:"margin-bottom flex"},W={style:{flex:"1"}},X={class:"flex flex-justify-end"};var Y=o({__name:"subject-blank-fill",props:{orderIndex:{type:Number,required:!0},title:{type:String,required:!1},isSave:{type:Boolean,required:!0},showAction:{type:Boolean,required:!1},answerList:{type:null,required:!1},analysis:{type:String,required:!1},isEdit:{type:Boolean,required:!0},isSet:{type:Boolean,required:!0},examAnswerSettingVO:{type:Object,required:!1},examRichTextContent:{type:String,required:!1},showAnalysis:{type:Boolean,required:!1},examAnswerRelationType:{type:Number,required:!1}},emits:["move","save","delete","edit","add"],setup(o,{emit:Y}){const Z=o,$=Y,ee=r(),le=u([]),te=u(""),ie=u(""),ae=u(!1),se=u(""),ne=[{label:"答案不分顺序",value:"isInOrder"},{label:"忽略大小写",value:"isIgnoreCase"}],oe=u(["isIgnoreCase"]);function re(){te.value+=" ______",le.value.push({title:"",tag:"",showInput:!1})}function ue(){ae.value=!1,se.value=""}function de(){te.value?le.value.length<1?S.error("至少添加一个填空符!"):$("save",{title:te.value.replaceAll(/ ______/g,"<filter></filter>"),answers:le.value.map((e=>({title:e.title,isCorrect:!0}))),analysis:ie.value,isSetCorrectAnswer:!0,examAnswerSettingBO:{isIgnoreCase:oe.value?.includes("isIgnoreCase"),isInOrder:oe.value?.includes("isInOrder")},examRichTextContent:ae.value?se.value:""}):S.error("题目标题不能为空!")}d((()=>te.value),(()=>{const[...e]=te.value.matchAll(/ ______/g);if(e.length!==le.value.length){const l=le.value.length-e.length;le.value.splice(le.value.length-l,l)}})),v((function(){Z.title&&(te.value=Z.title.replaceAll(/<filter><\/filter>/g," ______")),Z.answerList&&Z.answerList.length&&(le.value=Z.answerList),Z.examAnswerSettingVO&&(oe.value=oe.value.filter((e=>"isIgnoreCase"===e&&Z.examAnswerSettingVO?.isIgnoreCase||"isInOrder"===e&&Z.examAnswerSettingVO?.isInOrder))),Z.analysis&&(ie.value=Z.analysis),Z.examRichTextContent&&(se.value=Z.examRichTextContent,ae.value=!0)}));const ve=V("subject-blank-fill");return(o,r)=>{const u=e,d=l,v=i,V=t,S=a,Y=n,ce=s;return m(),c("div",{class:f(p(ve).e("blank-fill-exam"))},[x(q,{"show-edit":o.isEdit},{preview:y((()=>[h("div",R,[h("div",B,[h("span",U,A(o.orderIndex+1)+"."+A(p(te))+"(填空题)",1),p(ae)?(m(),c("div",L,[h("div",{innerHTML:p(se),class:"rich-text"},null,8,E)])):g("v-if",!0),p(le).some((e=>e.title))?(m(),c("div",M,[r[10]||(r[10]=h("span",{class:"title"},"正确答案:",-1)),(m(!0),c(k,null,j(p(le),((e,l)=>(m(),c("div",{key:l,class:"flex flex-wrap flex-items-center",style:{"margin-right":"10px"}},[h("span",null,"填空"+A(l+1)+":",1),h("span",null,A(e.title),1)])))),128))])):g("v-if",!0)])])])),edit:y((()=>[h("div",D,[r[11]||(r[11]=h("div",{class:"label flex flex-justify-end"},[h("span",null,"题目:")],-1)),h("div",H,[x(u,{modelValue:p(te),"onUpdate:modelValue":r[0]||(r[0]=e=>_(te)?te.value=e:null),type:"textarea",rows:7,"show-word-limit":"",maxlength:"400",placeholder:"【填空题】请输入问题",disabled:o.isSave},null,8,["modelValue","disabled"])])]),h("div",N,[g(' <el-link\n v-if="!showRichText"\n type="primary"\n @click="showRichText = true"\n >\n 添加富文本\n </el-link> '),x(d,{class:"margin-left-10",type:"primary",disabled:o.isSave,onClick:re},{default:y((()=>r[12]||(r[12]=[b(" 插入填空符 ")]))),_:1},8,["disabled"])]),h("div",z,[r[13]||(r[13]=h("div",{class:"label flex flex-justify-end"},[h("span",null,"答题设置:")],-1)),(m(),c(k,null,j(ne,(e=>x(V,{key:e.value,modelValue:p(oe),"onUpdate:modelValue":r[1]||(r[1]=e=>_(oe)?oe.value=e:null)},{default:y((()=>[x(v,{value:e.value,class:"margin-left-10"},{default:y((()=>[b(A(e.label),1)])),_:2},1032,["value"])])),_:2},1032,["modelValue"]))),64))]),h("div",F,[(m(!0),c(k,null,j(p(le),((e,l)=>(m(),c("div",{key:l,class:"answer-item flex flex-items-center"},[h("div",G,[h("span",null,"第"+A(l+1)+"空答案:",1)]),h("div",J,[(m(!0),c(k,null,j(e.title.split(","),(l=>(m(),c(k,{key:l},[l?(m(),w(S,{key:0,closable:"",onClose:t=>function(e,l){if(e){const t=l.title.split(","),i=t.findIndex((l=>l===e));i>-1&&(t.splice(i,1),l.title=t.join(","))}}(l,e)},{default:y((()=>[b(A(l),1)])),_:2},1032,["onClose"])):g("v-if",!0)],64)))),128)),o.isSave?g("v-if",!0):(m(),c(k,{key:0},[e.showInput?(m(),w(u,{key:0,modelValue:e.tag,"onUpdate:modelValue":l=>e.tag=l,style:{width:"80px"},onBlur:()=>function(e){e.showInput=!1,e.tag&&(e.title=e.title?[e.title,e.tag].join(","):e.tag,e.tag="")}(e)},null,8,["modelValue","onUpdate:modelValue","onBlur"])):(m(),w(ce,{key:1,size:"small",onClick:l=>e.showInput=!0},{default:y((()=>[x(Y,null,{default:y((()=>[x(p(I))])),_:1}),h("span",null,A(e.title?"添加同义词":"添加答案"),1)])),_:2},1032,["onClick"]))],64))])])))),128))]),o.showAnalysis?(m(),c("div",K,[r[14]||(r[14]=h("div",{class:"label flex flex-justify-end"},[h("span",null,"解析:")],-1)),h("div",P,[x(u,{modelValue:p(ie),"onUpdate:modelValue":r[2]||(r[2]=e=>_(ie)?ie.value=e:null),type:"textarea",rows:2,placeholder:"请输入题目解析"},null,8,["modelValue"])])])):g("v-if",!0),p(ae)?(m(),c("div",Q,[r[16]||(r[16]=h("div",{class:"label flex flex-justify-center"},[h("span",null,"富文本:")],-1)),h("div",W,[x(T,C({"model-value":p(se),"onUpdate:modelValue":r[3]||(r[3]=e=>_(se)?se.value=e:null)},p(ee),{style:{width:"100%"}}),null,16,["model-value"]),h("div",X,[x(d,{type:"danger",onClick:ue},{default:y((()=>r[15]||(r[15]=[b(" 删除富文本 ")]))),_:1})])])])):g("v-if",!0)])),default:y((()=>[o.showAction?(m(),w(O,{key:0,"is-edit":o.isEdit,"is-set":o.isSet,showOtherOption:!1,examAnswerRelationType:Z.examAnswerRelationType,onMoveUp:r[4]||(r[4]=e=>$("move","up")),onMoveDown:r[5]||(r[5]=e=>$("move","down")),onDelete:r[6]||(r[6]=e=>$("delete")),onSave:de,onEdit:r[7]||(r[7]=e=>$("edit")),onAdd:r[8]||(r[8]=e=>$("add",e)),onOnShowRichText:r[9]||(r[9]=e=>ae.value=!0)},null,8,["is-edit","is-set","examAnswerRelationType"])):g("v-if",!0)])),_:1},8,["show-edit"])],2)}}});export{Y as default};
1
+ import{ElInput as e,ElLink as l,ElCheckboxGroup as t,ElCheckbox as s,ElTag as n,ElButton as i,ElIcon as a}from"element-plus/es";import"element-plus/es/components/base/style/index";import"element-plus/es/components/button/style/index";import"element-plus/es/components/icon/style/index";import"element-plus/es/components/tag/style/index";import"element-plus/es/components/checkbox-group/style/index";import"element-plus/es/components/checkbox/style/index";import"element-plus/es/components/link/style/index";import"element-plus/es/components/input/style/index";import{defineComponent as o,useAttrs as r,ref as u,watch as d,onMounted as m,createElementBlock as p,openBlock as c,normalizeClass as v,unref as f,createVNode as x,withCtx as y,createBlock as g,createCommentVNode as w,createElementVNode as h,isRef as b,createTextVNode as _,Fragment as k,renderList as j,toDisplayString as A,mergeProps as C}from"vue";import{Plus as I}from"@element-plus/icons-vue";import{useNamespace as V}from"@qxs-bns/hooks";import{ElMessage as S}from"element-plus";import O from"../../../subject-action/src/subject-action.vue.mjs";import q from"../../../subject-layout/src/subject-layout.vue.mjs";import T from"../../../tiny-mce-editor/src/tiny-mce-editor.vue.mjs";const R={class:"preview"},B={class:"content"},U={class:"title"},L={key:0},E=["innerHTML"],M={key:1,class:"flex flex-wrap",style:{"margin-top":"10px",color:"#a8abb2"}},D={class:"flex"},H={style:{flex:"1"}},N={class:"flex flex-justify-end"},z={class:"margin-bottom flex flex-items-center"},F={class:"margin-bottom answer-list"},G={class:"label flex flex-justify-end"},J={class:"answer-tags"},K={key:0,class:"margin-bottom flex"},P={style:{flex:"1"}},Q={key:1,class:"margin-bottom flex"},W={style:{flex:"1"}},X={class:"flex flex-justify-end"};var Y=o({__name:"subject-blank-fill",props:{orderIndex:{type:Number,required:!0},title:{type:String,required:!1},isSave:{type:Boolean,required:!0},showAction:{type:Boolean,required:!1},answerList:{type:null,required:!1},analysis:{type:String,required:!1},isEdit:{type:Boolean,required:!0},isSet:{type:Boolean,required:!0},examAnswerSettingVO:{type:Object,required:!1},examRichTextContent:{type:String,required:!1},showAnalysis:{type:Boolean,required:!1},examAnswerRelationType:{type:Number,required:!1}},emits:["move","save","delete","edit","add"],setup(o,{emit:Y}){const Z=o,$=Y,ee=r(),le=u([]),te=u(""),se=u(""),ne=u(!1),ie=u(""),ae=[{label:"答案不分顺序",value:"isInOrder"},{label:"忽略大小写",value:"isIgnoreCase"}],oe=u(["isIgnoreCase"]);function re(){te.value+=" ______",le.value.push({title:"",tag:"",showInput:!1})}function ue(){ne.value=!1,ie.value=""}function de(){te.value?le.value.length<1?S.error("至少添加一个填空符!"):$("save",{title:te.value.replaceAll(/ ______/g,"<filter></filter>"),answers:le.value.map((e=>({title:e.title,isCorrect:!0}))),analysis:se.value,isSetCorrectAnswer:!0,examAnswerSettingBO:{isIgnoreCase:oe.value?.includes("isIgnoreCase"),isInOrder:oe.value?.includes("isInOrder")},examRichTextContent:ne.value?ie.value:""}):S.error("题目标题不能为空!")}d((()=>te.value),(()=>{const[...e]=te.value.matchAll(/ ______/g);if(e.length!==le.value.length){const l=le.value.length-e.length;le.value.splice(le.value.length-l,l)}})),m((function(){Z.title&&(te.value=Z.title.replaceAll(/<filter><\/filter>/g," ______")),Z.answerList&&Z.answerList.length&&(le.value=Z.answerList),Z.examAnswerSettingVO&&(oe.value=oe.value.filter((e=>"isIgnoreCase"===e&&Z.examAnswerSettingVO?.isIgnoreCase||"isInOrder"===e&&Z.examAnswerSettingVO?.isInOrder))),Z.analysis&&(se.value=Z.analysis),Z.examRichTextContent&&(ie.value=Z.examRichTextContent,ne.value=!0)}));const me=V("subject-blank-fill");return(o,r)=>{const u=e,d=l,m=s,V=t,S=n,Y=a,pe=i;return c(),p("div",{class:v(f(me).e("blank-fill-exam"))},[x(q,{"show-edit":o.isEdit},{preview:y((()=>[h("div",R,[h("div",B,[h("span",U,A(o.orderIndex+1)+"."+A(f(te))+"(填空题)",1),f(ne)?(c(),p("div",L,[h("div",{innerHTML:f(ie),class:"rich-text"},null,8,E)])):w("v-if",!0),f(le).some((e=>e.title))?(c(),p("div",M,[r[10]||(r[10]=h("span",{class:"title"},"正确答案:",-1)),(c(!0),p(k,null,j(f(le),((e,l)=>(c(),p("div",{key:l,class:"flex flex-wrap flex-items-center",style:{"margin-right":"10px"}},[h("span",null,"填空"+A(l+1)+":",1),h("span",null,A(e.title),1)])))),128))])):w("v-if",!0)])])])),edit:y((()=>[h("div",D,[r[11]||(r[11]=h("div",{class:"label flex flex-justify-end"},[h("span",null,"题目:")],-1)),h("div",H,[x(u,{modelValue:f(te),"onUpdate:modelValue":r[0]||(r[0]=e=>b(te)?te.value=e:null),type:"textarea",rows:7,"show-word-limit":"",maxlength:"400",placeholder:"【填空题】请输入问题",disabled:o.isSave},null,8,["modelValue","disabled"])])]),h("div",N,[w(' <el-link\n v-if="!showRichText"\n type="primary"\n @click="showRichText = true"\n >\n 添加富文本\n </el-link> '),x(d,{class:"margin-left-10",type:"primary",disabled:o.isSave,onClick:re},{default:y((()=>r[12]||(r[12]=[_(" 插入填空符 ")]))),_:1},8,["disabled"])]),h("div",z,[r[13]||(r[13]=h("div",{class:"label flex flex-justify-end"},[h("span",null,"答题设置:")],-1)),(c(),p(k,null,j(ae,(e=>x(V,{key:e.value,modelValue:f(oe),"onUpdate:modelValue":r[1]||(r[1]=e=>b(oe)?oe.value=e:null)},{default:y((()=>[x(m,{value:e.value,class:"margin-left-10"},{default:y((()=>[_(A(e.label),1)])),_:2},1032,["value"])])),_:2},1032,["modelValue"]))),64))]),h("div",F,[(c(!0),p(k,null,j(f(le),((e,l)=>(c(),p("div",{key:l,class:"answer-item flex flex-items-center"},[h("div",G,[h("span",null,"第"+A(l+1)+"空答案:",1)]),h("div",J,[(c(!0),p(k,null,j(e.title.split(","),(l=>(c(),p(k,{key:l},[l?(c(),g(S,{key:0,closable:"",onClose:t=>function(e,l){if(e){const t=l.title.split(","),s=t.findIndex((l=>l===e));s>-1&&(t.splice(s,1),l.title=t.join(","))}}(l,e)},{default:y((()=>[_(A(l),1)])),_:2},1032,["onClose"])):w("v-if",!0)],64)))),128)),o.isSave?w("v-if",!0):(c(),p(k,{key:0},[e.showInput?(c(),g(u,{key:0,modelValue:e.tag,"onUpdate:modelValue":l=>e.tag=l,style:{width:"80px"},onBlur:()=>function(e){e.showInput=!1,e.tag&&(e.title=e.title?[e.title,e.tag].join(","):e.tag,e.tag="")}(e)},null,8,["modelValue","onUpdate:modelValue","onBlur"])):(c(),g(pe,{key:1,size:"small",onClick:l=>e.showInput=!0},{default:y((()=>[x(Y,null,{default:y((()=>[x(f(I))])),_:1}),h("span",null,A(e.title?"添加同义词":"添加答案"),1)])),_:2},1032,["onClick"]))],64))])])))),128))]),o.showAnalysis?(c(),p("div",K,[r[14]||(r[14]=h("div",{class:"label flex flex-justify-end"},[h("span",null,"解析:")],-1)),h("div",P,[x(u,{modelValue:f(se),"onUpdate:modelValue":r[2]||(r[2]=e=>b(se)?se.value=e:null),type:"textarea",rows:2,placeholder:"请输入题目解析"},null,8,["modelValue"])])])):w("v-if",!0),f(ne)?(c(),p("div",Q,[r[16]||(r[16]=h("div",{class:"label flex flex-justify-center"},[h("span",null,"富文本:")],-1)),h("div",W,[x(T,C({"model-value":f(ie),"onUpdate:modelValue":r[3]||(r[3]=e=>b(ie)?ie.value=e:null)},f(ee),{style:{width:"100%"}}),null,16,["model-value"]),h("div",X,[x(d,{type:"danger",onClick:ue},{default:y((()=>r[15]||(r[15]=[_(" 删除富文本 ")]))),_:1})])])])):w("v-if",!0)])),default:y((()=>[o.showAction?(c(),g(O,{key:0,"is-edit":o.isEdit,"is-set":o.isSet,showOtherOption:!1,examAnswerRelationType:Z.examAnswerRelationType,onMoveUp:r[4]||(r[4]=e=>$("move","up")),onMoveDown:r[5]||(r[5]=e=>$("move","down")),onDelete:r[6]||(r[6]=e=>$("delete")),onSave:de,onEdit:r[7]||(r[7]=e=>$("edit")),onAdd:r[8]||(r[8]=e=>$("add",e)),onOnShowRichText:r[9]||(r[9]=e=>ne.value=!0)},null,8,["is-edit","is-set","examAnswerRelationType"])):w("v-if",!0)])),_:1},8,["show-edit"])],2)}}});export{Y as default};
2
2
  //# sourceMappingURL=subject-blank-fill.vue.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"subject-blank-fill.vue.mjs","sources":["../../../../../../../packages/components/src/subject-list/src/components/subject-blank-fill.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { Plus } from '@element-plus/icons-vue'\nimport { useNamespace } from '@qxs-bns/hooks'\nimport { ElMessage } from 'element-plus'\nimport SubjectAction from '../../../subject-action/src/subject-action.vue'\nimport SubjectLayout from '../../../subject-layout/src/subject-layout.vue'\nimport TinyMceEditor from '../../../tiny-mce-editor/src/tiny-mce-editor.vue'\n\nconst props = defineProps<{\n orderIndex: number\n title?: string\n isSave: boolean\n showAction?: boolean\n answerList?: any\n analysis?: string\n isEdit: boolean\n isSet: boolean\n examAnswerSettingVO?: {\n isInOrder: boolean\n isIgnoreCase: boolean\n }\n examRichTextContent?: string\n showAnalysis?: boolean\n examAnswerRelationType?: number\n}>()\nconst emits = defineEmits(['move', 'save', 'delete', 'edit', 'add'])\n\nconst attrs = useAttrs()\n\nconst answers = ref<{\n title: string\n tag: string\n showInput: boolean\n}[]>([])\n\nconst title = ref('')\nconst analysis = ref('')\nconst showRichText = ref(false)\nconst richText = ref('')\n\nconst checkList = [\n {\n label: '答案不分顺序',\n value: 'isInOrder',\n },\n {\n label: '忽略大小写',\n value: 'isIgnoreCase',\n },\n]\n\nconst isCheckList = ref(['isIgnoreCase'])\n\nfunction handleAddTag(item: any) {\n item.showInput = false\n if (item.tag) {\n item.title = item.title ? [item.title, item.tag].join(',') : item.tag\n item.tag = ''\n }\n}\n\nfunction closeTag(tag: string, item: any) {\n if (tag) {\n const tags = item.title.split(',')\n const index = tags.findIndex((i: string) => i === tag)\n if (index > -1) {\n tags.splice(index, 1)\n item.title = tags.join(',')\n }\n }\n}\n\nfunction addBlank() {\n title.value += ' ______'\n answers.value.push({\n title: '',\n tag: '',\n showInput: false,\n })\n}\n\nfunction deleteRichText() {\n showRichText.value = false\n richText.value = ''\n}\n\nfunction save() {\n if (!title.value) {\n ElMessage.error('题目标题不能为空!')\n return\n }\n\n if (answers.value.length < 1) {\n ElMessage.error('至少添加一个填空符!')\n return\n }\n\n emits('save', {\n title: title.value.replaceAll(/ ______/g, '<filter></filter>'),\n answers: answers.value.map((item: any) => {\n return { title: item.title, isCorrect: true }\n }),\n analysis: analysis.value,\n isSetCorrectAnswer: true,\n examAnswerSettingBO: {\n isIgnoreCase: isCheckList.value?.includes('isIgnoreCase'),\n isInOrder: isCheckList.value?.includes('isInOrder'),\n },\n examRichTextContent: showRichText.value ? richText.value : '',\n })\n}\n\nfunction init() {\n if (props.title) {\n title.value = props.title.replaceAll(/<filter><\\/filter>/g, ' ______')\n }\n\n if (props.answerList && props.answerList.length) {\n answers.value = props.answerList\n }\n\n if (props.examAnswerSettingVO) {\n // 仅保留与设置匹配的选项\n isCheckList.value = isCheckList.value.filter((item: any) =>\n (item === 'isIgnoreCase' && props.examAnswerSettingVO?.isIgnoreCase)\n || (item === 'isInOrder' && props.examAnswerSettingVO?.isInOrder),\n )\n }\n\n if (props.analysis) {\n analysis.value = props.analysis\n }\n\n if (props.examRichTextContent) {\n richText.value = props.examRichTextContent\n showRichText.value = true\n }\n}\n\nwatch(() => title.value, () => {\n const [...matchs] = title.value.matchAll(/ ______/g)\n if (matchs.length !== answers.value.length) {\n const differ = answers.value.length - matchs.length\n answers.value.splice(answers.value.length - differ, differ)\n }\n})\n\nonMounted(init)\nconst ns = useNamespace('subject-blank-fill')\n</script>\n\n<template>\n <div :class=\"ns.e('blank-fill-exam')\">\n <SubjectLayout :show-edit=\"isEdit\">\n <template #preview>\n <div class=\"preview\">\n <div class=\"content\">\n <span class=\"title\">{{ orderIndex + 1 }}.{{ title }}(填空题)</span>\n <div v-if=\"showRichText\">\n <div v-html=\"richText\" class=\"rich-text\"/>\n </div>\n <div\n v-if=\"answers.some((item) => item.title)\"\n class=\"flex flex-wrap\"\n style=\"margin-top: 10px;color: #a8abb2;\"\n >\n <span class=\"title\">正确答案:</span>\n <div\n v-for=\"(item, index) in answers\"\n :key=\"index\"\n class=\"flex flex-wrap flex-items-center\"\n style=\"margin-right: 10px;\"\n >\n <span>填空{{ index + 1 }}:</span>\n <span>{{ item.title }}</span>\n </div>\n </div>\n </div>\n </div>\n </template>\n <template #edit>\n <div class=\"flex\">\n <div class=\"label flex flex-justify-end\">\n <span>题目:</span>\n </div>\n <div style=\"flex: 1;\">\n <el-input\n v-model=\"title\"\n type=\"textarea\"\n :rows=\"7\"\n show-word-limit\n maxlength=\"400\"\n placeholder=\"【填空题】请输入问题\"\n :disabled=\"isSave\"\n />\n </div>\n </div>\n <div class=\"flex flex-justify-end\">\n <!-- <el-link\n v-if=\"!showRichText\"\n type=\"primary\"\n @click=\"showRichText = true\"\n >\n 添加富文本\n </el-link> -->\n <el-link\n class=\"margin-left-10\"\n type=\"primary\"\n :disabled=\"isSave\"\n @click=\"addBlank\"\n >\n 插入填空符\n </el-link>\n </div>\n <div class=\"margin-bottom flex flex-items-center\">\n <div class=\"label flex flex-justify-end\">\n <span>答题设置:</span>\n </div>\n\n <el-checkbox-group\n v-for=\"item in checkList\"\n :key=\"item.value\"\n v-model=\"isCheckList\"\n >\n <el-checkbox :value=\"item.value\" class=\"margin-left-10\">\n {{ item.label }}\n </el-checkbox>\n </el-checkbox-group>\n </div>\n <div class=\"margin-bottom answer-list\">\n <div\n v-for=\"(item, index) in answers\"\n :key=\"index\"\n class=\"answer-item flex flex-items-center\"\n >\n <div class=\"label flex flex-justify-end\">\n <span>第{{ index + 1 }}空答案:</span>\n </div>\n\n <div class=\"answer-tags\">\n <template\n v-for=\"i in item.title.split(',')\"\n :key=\"i\"\n >\n <el-tag\n v-if=\"i\"\n closable\n @close=\"closeTag(i, item)\"\n >\n {{ i }}\n </el-tag>\n </template>\n <template v-if=\"!isSave\">\n <el-input\n v-if=\"item.showInput\"\n v-model=\"item.tag\"\n style=\"width: 80px;\"\n @blur=\"() => handleAddTag(item)\"\n />\n <el-button\n v-else\n size=\"small\"\n @click=\"item.showInput = true\"\n >\n <el-icon><Plus /></el-icon>\n <span>{{ item.title ? '添加同义词' : '添加答案' }}</span>\n </el-button>\n </template>\n </div>\n </div>\n </div>\n <div v-if=\"showAnalysis\" class=\"margin-bottom flex\">\n <div class=\"label flex flex-justify-end\">\n <span>解析:</span>\n </div>\n <div style=\"flex: 1;\">\n <el-input\n v-model=\"analysis\"\n type=\"textarea\"\n :rows=\"2\"\n placeholder=\"请输入题目解析\"\n />\n </div>\n </div>\n <div v-if=\"showRichText\" class=\"margin-bottom flex\">\n <div class=\"label flex flex-justify-center\">\n <span>富文本:</span>\n </div>\n <div style=\"flex: 1;\">\n <TinyMceEditor v-model:model-value=\"richText\" v-bind=\"attrs\" style=\"width: 100%;\" />\n <div class=\"flex flex-justify-end\">\n <el-link\n type=\"danger\"\n @click=\"deleteRichText\"\n >\n 删除富文本\n </el-link>\n </div>\n </div>\n </div>\n </template>\n <SubjectAction\n v-if=\"showAction\"\n :is-edit=\"isEdit\"\n :is-set=\"isSet\"\n :showOtherOption=\"false\"\n :examAnswerRelationType=\"props.examAnswerRelationType\"\n @move-up=\"emits('move', 'up')\"\n @move-down=\"emits('move', 'down')\"\n @delete=\"emits('delete')\"\n @save=\"save\"\n @edit=\"emits('edit')\"\n @add=\"type => emits('add', type)\"\n @onShowRichText=\"showRichText = true\"\n />\n </SubjectLayout>\n </div>\n</template>\n"],"names":["props","__props","emits","__emit","attrs","useAttrs","answers","ref","title","analysis","showRichText","richText","checkList","label","value","isCheckList","addBlank","push","tag","showInput","deleteRichText","save","length","ElMessage","error","replaceAll","map","item","isCorrect","isSetCorrectAnswer","examAnswerSettingBO","isIgnoreCase","includes","isInOrder","examRichTextContent","watch","matchs","matchAll","differ","splice","onMounted","answerList","examAnswerSettingVO","filter","ns","useNamespace","tags","split","index","findIndex","i","join"],"mappings":"+3DAQA,MAAMA,EAAQC,EAiBRC,EAAQC,EAERC,GAAQC,IAERC,GAAUC,EAIX,IAECC,GAAQD,EAAI,IACZE,GAAWF,EAAI,IACfG,GAAeH,GAAI,GACnBI,GAAWJ,EAAI,IAEfK,GAAY,CAChB,CACEC,MAAO,SACPC,MAAO,aAET,CACED,MAAO,QACPC,MAAO,iBAILC,GAAcR,EAAI,CAAC,iBAqBzB,SAASS,KACPR,GAAMM,OAAS,UACfR,GAAQQ,MAAMG,KAAK,CACjBT,MAAO,GACPU,IAAK,GACLC,WAAW,GACZ,CAGH,SAASC,KACPV,GAAaI,OAAQ,EACrBH,GAASG,MAAQ,EAAA,CAGnB,SAASO,KACFb,GAAMM,MAKPR,GAAQQ,MAAMQ,OAAS,EACzBC,EAAUC,MAAM,cAIlBtB,EAAM,OAAQ,CACZM,MAAOA,GAAMM,MAAMW,WAAW,WAAY,qBAC1CnB,QAASA,GAAQQ,MAAMY,KAAKC,IACnB,CAAEnB,MAAOmB,EAAKnB,MAAOoB,WAAW,MAEzCnB,SAAUA,GAASK,MACnBe,oBAAoB,EACpBC,oBAAqB,CACnBC,aAAchB,GAAYD,OAAOkB,SAAS,gBAC1CC,UAAWlB,GAAYD,OAAOkB,SAAS,cAEzCE,oBAAqBxB,GAAaI,MAAQH,GAASG,MAAQ,KApB3DS,EAAUC,MAAM,YAqBjB,CA8BGW,GAAA,IAAM3B,GAAMM,QAAO,KACvB,SAAUsB,GAAU5B,GAAMM,MAAMuB,SAAS,YACzC,GAAID,EAAOd,SAAWhB,GAAQQ,MAAMQ,OAAQ,CAC1C,MAAMgB,EAAShC,GAAQQ,MAAMQ,OAASc,EAAOd,OAC7ChB,GAAQQ,MAAMyB,OAAOjC,GAAQQ,MAAMQ,OAASgB,EAAQA,EAAM,KAI9DE,GAnCA,WACMxC,EAAMQ,QACRA,GAAMM,MAAQd,EAAMQ,MAAMiB,WAAW,sBAAuB,YAG1DzB,EAAMyC,YAAczC,EAAMyC,WAAWnB,SACvChB,GAAQQ,MAAQd,EAAMyC,YAGpBzC,EAAM0C,sBAEI3B,GAAAD,MAAQC,GAAYD,MAAM6B,QAAQhB,GAClC,iBAATA,GAA2B3B,EAAM0C,qBAAqBX,cAC1C,cAATJ,GAAwB3B,EAAM0C,qBAAqBT,aAIvDjC,EAAMS,WACRA,GAASK,MAAQd,EAAMS,UAGrBT,EAAMkC,sBACRvB,GAASG,MAAQd,EAAMkC,oBACvBxB,GAAaI,OAAQ,EACvB,IAYI,MAAA8B,GAAKC,EAAa,k7DAvFf,SAAS3B,EAAaS,GAC7B,GAAIT,EAAK,CACP,MAAM4B,EAAOnB,EAAKnB,MAAMuC,MAAM,KACxBC,EAAQF,EAAKG,WAAWC,GAAcA,IAAMhC,IAC9C8B,GAAQ,IACLF,EAAAP,OAAOS,EAAO,GACdrB,EAAAnB,MAAQsC,EAAKK,KAAK,KACzB,CACF,+OAhBF,SAAsBxB,GACpBA,EAAKR,WAAY,EACbQ,EAAKT,MACPS,EAAKnB,MAAQmB,EAAKnB,MAAQ,CAACmB,EAAKnB,MAAOmB,EAAKT,KAAKiC,KAAK,KAAOxB,EAAKT,IAClES,EAAKT,IAAM,GACb"}
1
+ {"version":3,"file":"subject-blank-fill.vue.mjs","sources":["../../../../../../../packages/components/src/subject-list/src/components/subject-blank-fill.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { Plus } from '@element-plus/icons-vue'\nimport { useNamespace } from '@qxs-bns/hooks'\nimport { ElMessage } from 'element-plus'\nimport SubjectAction from '../../../subject-action/src/subject-action.vue'\nimport SubjectLayout from '../../../subject-layout/src/subject-layout.vue'\nimport TinyMceEditor from '../../../tiny-mce-editor/src/tiny-mce-editor.vue'\n\nconst props = defineProps<{\n orderIndex: number\n title?: string\n isSave: boolean\n showAction?: boolean\n answerList?: any\n analysis?: string\n isEdit: boolean\n isSet: boolean\n examAnswerSettingVO?: {\n isInOrder: boolean\n isIgnoreCase: boolean\n }\n examRichTextContent?: string\n showAnalysis?: boolean\n examAnswerRelationType?: number\n}>()\nconst emits = defineEmits(['move', 'save', 'delete', 'edit', 'add'])\n\nconst attrs = useAttrs()\n\nconst answers = ref<{\n title: string\n tag: string\n showInput: boolean\n}[]>([])\n\nconst title = ref('')\nconst analysis = ref('')\nconst showRichText = ref(false)\nconst richText = ref('')\n\nconst checkList = [\n {\n label: '答案不分顺序',\n value: 'isInOrder',\n },\n {\n label: '忽略大小写',\n value: 'isIgnoreCase',\n },\n]\n\nconst isCheckList = ref(['isIgnoreCase'])\n\nfunction handleAddTag(item: any) {\n item.showInput = false\n if (item.tag) {\n item.title = item.title ? [item.title, item.tag].join(',') : item.tag\n item.tag = ''\n }\n}\n\nfunction closeTag(tag: string, item: any) {\n if (tag) {\n const tags = item.title.split(',')\n const index = tags.findIndex((i: string) => i === tag)\n if (index > -1) {\n tags.splice(index, 1)\n item.title = tags.join(',')\n }\n }\n}\n\nfunction addBlank() {\n title.value += ' ______'\n answers.value.push({\n title: '',\n tag: '',\n showInput: false,\n })\n}\n\nfunction deleteRichText() {\n showRichText.value = false\n richText.value = ''\n}\n\nfunction save() {\n if (!title.value) {\n ElMessage.error('题目标题不能为空!')\n return\n }\n\n if (answers.value.length < 1) {\n ElMessage.error('至少添加一个填空符!')\n return\n }\n\n emits('save', {\n title: title.value.replaceAll(/ ______/g, '<filter></filter>'),\n answers: answers.value.map((item: any) => {\n return { title: item.title, isCorrect: true }\n }),\n analysis: analysis.value,\n isSetCorrectAnswer: true,\n examAnswerSettingBO: {\n isIgnoreCase: isCheckList.value?.includes('isIgnoreCase'),\n isInOrder: isCheckList.value?.includes('isInOrder'),\n },\n examRichTextContent: showRichText.value ? richText.value : '',\n })\n}\n\nfunction init() {\n if (props.title) {\n title.value = props.title.replaceAll(/<filter><\\/filter>/g, ' ______')\n }\n\n if (props.answerList && props.answerList.length) {\n answers.value = props.answerList\n }\n\n if (props.examAnswerSettingVO) {\n // 仅保留与设置匹配的选项\n isCheckList.value = isCheckList.value.filter((item: any) =>\n (item === 'isIgnoreCase' && props.examAnswerSettingVO?.isIgnoreCase)\n || (item === 'isInOrder' && props.examAnswerSettingVO?.isInOrder),\n )\n }\n\n if (props.analysis) {\n analysis.value = props.analysis\n }\n\n if (props.examRichTextContent) {\n richText.value = props.examRichTextContent\n showRichText.value = true\n }\n}\n\nwatch(() => title.value, () => {\n const [...matchs] = title.value.matchAll(/ ______/g)\n if (matchs.length !== answers.value.length) {\n const differ = answers.value.length - matchs.length\n answers.value.splice(answers.value.length - differ, differ)\n }\n})\n\nonMounted(init)\nconst ns = useNamespace('subject-blank-fill')\n</script>\n\n<template>\n <div :class=\"ns.e('blank-fill-exam')\">\n <SubjectLayout :show-edit=\"isEdit\">\n <template #preview>\n <div class=\"preview\">\n <div class=\"content\">\n <span class=\"title\">{{ orderIndex + 1 }}.{{ title }}(填空题)</span>\n <div v-if=\"showRichText\">\n <div v-html=\"richText\" class=\"rich-text\"/>\n </div>\n <div\n v-if=\"answers.some((item) => item.title)\"\n class=\"flex flex-wrap\"\n style=\"margin-top: 10px;color: #a8abb2;\"\n >\n <span class=\"title\">正确答案:</span>\n <div\n v-for=\"(item, index) in answers\"\n :key=\"index\"\n class=\"flex flex-wrap flex-items-center\"\n style=\"margin-right: 10px;\"\n >\n <span>填空{{ index + 1 }}:</span>\n <span>{{ item.title }}</span>\n </div>\n </div>\n </div>\n </div>\n </template>\n <template #edit>\n <div class=\"flex\">\n <div class=\"label flex flex-justify-end\">\n <span>题目:</span>\n </div>\n <div style=\"flex: 1;\">\n <el-input\n v-model=\"title\"\n type=\"textarea\"\n :rows=\"7\"\n show-word-limit\n maxlength=\"400\"\n placeholder=\"【填空题】请输入问题\"\n :disabled=\"isSave\"\n />\n </div>\n </div>\n <div class=\"flex flex-justify-end\">\n <!-- <el-link\n v-if=\"!showRichText\"\n type=\"primary\"\n @click=\"showRichText = true\"\n >\n 添加富文本\n </el-link> -->\n <el-link\n class=\"margin-left-10\"\n type=\"primary\"\n :disabled=\"isSave\"\n @click=\"addBlank\"\n >\n 插入填空符\n </el-link>\n </div>\n <div class=\"margin-bottom flex flex-items-center\">\n <div class=\"label flex flex-justify-end\">\n <span>答题设置:</span>\n </div>\n\n <el-checkbox-group\n v-for=\"item in checkList\"\n :key=\"item.value\"\n v-model=\"isCheckList\"\n >\n <el-checkbox :value=\"item.value\" class=\"margin-left-10\">\n {{ item.label }}\n </el-checkbox>\n </el-checkbox-group>\n </div>\n <div class=\"margin-bottom answer-list\">\n <div\n v-for=\"(item, index) in answers\"\n :key=\"index\"\n class=\"answer-item flex flex-items-center\"\n >\n <div class=\"label flex flex-justify-end\">\n <span>第{{ index + 1 }}空答案:</span>\n </div>\n\n <div class=\"answer-tags\">\n <template\n v-for=\"i in item.title.split(',')\"\n :key=\"i\"\n >\n <el-tag\n v-if=\"i\"\n closable\n @close=\"closeTag(i, item)\"\n >\n {{ i }}\n </el-tag>\n </template>\n <template v-if=\"!isSave\">\n <el-input\n v-if=\"item.showInput\"\n v-model=\"item.tag\"\n style=\"width: 80px;\"\n @blur=\"() => handleAddTag(item)\"\n />\n <el-button\n v-else\n size=\"small\"\n @click=\"item.showInput = true\"\n >\n <el-icon><Plus /></el-icon>\n <span>{{ item.title ? '添加同义词' : '添加答案' }}</span>\n </el-button>\n </template>\n </div>\n </div>\n </div>\n <div v-if=\"showAnalysis\" class=\"margin-bottom flex\">\n <div class=\"label flex flex-justify-end\">\n <span>解析:</span>\n </div>\n <div style=\"flex: 1;\">\n <el-input\n v-model=\"analysis\"\n type=\"textarea\"\n :rows=\"2\"\n placeholder=\"请输入题目解析\"\n />\n </div>\n </div>\n <div v-if=\"showRichText\" class=\"margin-bottom flex\">\n <div class=\"label flex flex-justify-center\">\n <span>富文本:</span>\n </div>\n <div style=\"flex: 1;\">\n <TinyMceEditor v-model:model-value=\"richText\" v-bind=\"attrs\" style=\"width: 100%;\" />\n <div class=\"flex flex-justify-end\">\n <el-link\n type=\"danger\"\n @click=\"deleteRichText\"\n >\n 删除富文本\n </el-link>\n </div>\n </div>\n </div>\n </template>\n <SubjectAction\n v-if=\"showAction\"\n :is-edit=\"isEdit\"\n :is-set=\"isSet\"\n :showOtherOption=\"false\"\n :examAnswerRelationType=\"props.examAnswerRelationType\"\n @move-up=\"emits('move', 'up')\"\n @move-down=\"emits('move', 'down')\"\n @delete=\"emits('delete')\"\n @save=\"save\"\n @edit=\"emits('edit')\"\n @add=\"type => emits('add', type)\"\n @onShowRichText=\"showRichText = true\"\n />\n </SubjectLayout>\n </div>\n</template>\n"],"names":["props","__props","emits","__emit","attrs","useAttrs","answers","ref","title","analysis","showRichText","richText","checkList","label","value","isCheckList","addBlank","push","tag","showInput","deleteRichText","save","length","ElMessage","error","replaceAll","map","item","isCorrect","isSetCorrectAnswer","examAnswerSettingBO","isIgnoreCase","includes","isInOrder","examRichTextContent","watch","matchs","matchAll","differ","splice","onMounted","answerList","examAnswerSettingVO","filter","ns","useNamespace","tags","split","index","findIndex","i","join"],"mappings":"+yEAQA,MAAMA,EAAQC,EAiBRC,EAAQC,EAERC,GAAQC,IAERC,GAAUC,EAIX,IAECC,GAAQD,EAAI,IACZE,GAAWF,EAAI,IACfG,GAAeH,GAAI,GACnBI,GAAWJ,EAAI,IAEfK,GAAY,CAChB,CACEC,MAAO,SACPC,MAAO,aAET,CACED,MAAO,QACPC,MAAO,iBAILC,GAAcR,EAAI,CAAC,iBAqBzB,SAASS,KACPR,GAAMM,OAAS,UACfR,GAAQQ,MAAMG,KAAK,CACjBT,MAAO,GACPU,IAAK,GACLC,WAAW,GACZ,CAGH,SAASC,KACPV,GAAaI,OAAQ,EACrBH,GAASG,MAAQ,EAAA,CAGnB,SAASO,KACFb,GAAMM,MAKPR,GAAQQ,MAAMQ,OAAS,EACzBC,EAAUC,MAAM,cAIlBtB,EAAM,OAAQ,CACZM,MAAOA,GAAMM,MAAMW,WAAW,WAAY,qBAC1CnB,QAASA,GAAQQ,MAAMY,KAAKC,IACnB,CAAEnB,MAAOmB,EAAKnB,MAAOoB,WAAW,MAEzCnB,SAAUA,GAASK,MACnBe,oBAAoB,EACpBC,oBAAqB,CACnBC,aAAchB,GAAYD,OAAOkB,SAAS,gBAC1CC,UAAWlB,GAAYD,OAAOkB,SAAS,cAEzCE,oBAAqBxB,GAAaI,MAAQH,GAASG,MAAQ,KApB3DS,EAAUC,MAAM,YAqBjB,CA8BGW,GAAA,IAAM3B,GAAMM,QAAO,KACvB,SAAUsB,GAAU5B,GAAMM,MAAMuB,SAAS,YACzC,GAAID,EAAOd,SAAWhB,GAAQQ,MAAMQ,OAAQ,CAC1C,MAAMgB,EAAShC,GAAQQ,MAAMQ,OAASc,EAAOd,OAC7ChB,GAAQQ,MAAMyB,OAAOjC,GAAQQ,MAAMQ,OAASgB,EAAQA,EAAM,KAI9DE,GAnCA,WACMxC,EAAMQ,QACRA,GAAMM,MAAQd,EAAMQ,MAAMiB,WAAW,sBAAuB,YAG1DzB,EAAMyC,YAAczC,EAAMyC,WAAWnB,SACvChB,GAAQQ,MAAQd,EAAMyC,YAGpBzC,EAAM0C,sBAEI3B,GAAAD,MAAQC,GAAYD,MAAM6B,QAAQhB,GAClC,iBAATA,GAA2B3B,EAAM0C,qBAAqBX,cAC1C,cAATJ,GAAwB3B,EAAM0C,qBAAqBT,aAIvDjC,EAAMS,WACRA,GAASK,MAAQd,EAAMS,UAGrBT,EAAMkC,sBACRvB,GAASG,MAAQd,EAAMkC,oBACvBxB,GAAaI,OAAQ,EACvB,IAYI,MAAA8B,GAAKC,EAAa,k7DAvFf,SAAS3B,EAAaS,GAC7B,GAAIT,EAAK,CACP,MAAM4B,EAAOnB,EAAKnB,MAAMuC,MAAM,KACxBC,EAAQF,EAAKG,WAAWC,GAAcA,IAAMhC,IAC9C8B,GAAQ,IACLF,EAAAP,OAAOS,EAAO,GACdrB,EAAAnB,MAAQsC,EAAKK,KAAK,KACzB,CACF,+OAhBF,SAAsBxB,GACpBA,EAAKR,WAAY,EACbQ,EAAKT,MACPS,EAAKnB,MAAQmB,EAAKnB,MAAQ,CAACmB,EAAKnB,MAAOmB,EAAKT,KAAKiC,KAAK,KAAOxB,EAAKT,IAClES,EAAKT,IAAM,GACb"}