@qxs-bns/components 0.0.45 → 0.0.46

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (110) hide show
  1. package/es/_virtual/_plugin-vue_export-helper.mjs +1 -1
  2. package/es/node_modules/.pnpm/style-inject@0.3.0/node_modules/style-inject/dist/style-inject.es.mjs +1 -1
  3. package/es/package.json.mjs +1 -1
  4. package/es/src/data-chart/src/components/area.vue2.mjs +1 -1
  5. package/es/src/data-chart/src/components/bar.vue.mjs +1 -1
  6. package/es/src/data-chart/src/components/card.vue2.mjs +1 -1
  7. package/es/src/data-chart/src/components/empty.vue.mjs +1 -1
  8. package/es/src/data-chart/src/components/funnel.vue.mjs +1 -1
  9. package/es/src/data-chart/src/components/line.vue2.mjs +1 -1
  10. package/es/src/data-chart/src/components/pie.vue.mjs +1 -1
  11. package/es/src/data-chart/src/components/radar.vue.mjs +1 -1
  12. package/es/src/data-chart/src/components/scatter-simple.vue.mjs +1 -1
  13. package/es/src/data-chart/src/components/scatter.vue.mjs +1 -1
  14. package/es/src/data-chart/src/components/table.vue.mjs +1 -1
  15. package/es/src/data-chart/src/data-chart.vue.mjs +1 -1
  16. package/es/src/data-chart/src/utils/config.mjs +1 -1
  17. package/es/src/data-chart/src/utils/useCharts.mjs +1 -1
  18. package/es/src/file-upload/src/file-upload.vue.mjs +1 -1
  19. package/es/src/file-upload/src/file-upload.vue.mjs.map +1 -1
  20. package/es/src/fixed-action-bar/src/fixed-action-bar.vue.mjs +1 -1
  21. package/es/src/image-upload/src/image-upload.vue.mjs +1 -1
  22. package/es/src/image-upload/src/image-upload.vue.mjs.map +1 -1
  23. package/es/src/photo-crop-tool/src/composables.mjs +1 -1
  24. package/es/src/photo-crop-tool/src/photo-crop-tool.vue.mjs +1 -1
  25. package/es/src/subject-action/src/subject-action.vue.mjs +1 -1
  26. package/es/src/subject-action/src/subject-action.vue.mjs.map +1 -1
  27. package/es/src/subject-layout/src/subject-layout.vue.mjs +1 -1
  28. package/es/src/subject-list/src/components/SubjectPageEnd.vue.mjs +1 -1
  29. package/es/src/subject-list/src/components/SubjectRichText.vue.mjs +1 -1
  30. package/es/src/subject-list/src/components/subject-blank-fill.vue.mjs +1 -1
  31. package/es/src/subject-list/src/components/subject-blank-fill.vue.mjs.map +1 -1
  32. package/es/src/subject-list/src/components/subject-scale.vue.mjs +1 -1
  33. package/es/src/subject-list/src/components/subject-scale.vue.mjs.map +1 -1
  34. package/es/src/subject-list/src/components/subject-single.vue.mjs +1 -1
  35. package/es/src/subject-list/src/components/subject-single.vue.mjs.map +1 -1
  36. package/es/src/subject-list/src/components/subject-text-fill.vue.mjs +1 -1
  37. package/es/src/subject-list/src/components/subject-text-fill.vue.mjs.map +1 -1
  38. package/es/src/subject-list/src/subject-list.vue.mjs +1 -1
  39. package/es/src/subject-type/src/subject-type.vue.mjs +1 -1
  40. package/es/src/tiny-mce-editor/src/tiny-mce-editor.vue.mjs +1 -1
  41. package/es/src/withInstall.mjs +1 -1
  42. package/lib/_virtual/_plugin-vue_export-helper.cjs +1 -1
  43. package/lib/index.cjs +1 -1
  44. package/lib/node_modules/.pnpm/style-inject@0.3.0/node_modules/style-inject/dist/style-inject.es.cjs +1 -1
  45. package/lib/package.json.cjs +1 -1
  46. package/lib/src/components.cjs +1 -1
  47. package/lib/src/data-chart/index.cjs +1 -1
  48. package/lib/src/data-chart/src/components/area.vue2.cjs +1 -1
  49. package/lib/src/data-chart/src/components/area.vue3.cjs +1 -1
  50. package/lib/src/data-chart/src/components/bar.vue.cjs +1 -1
  51. package/lib/src/data-chart/src/components/card.vue2.cjs +1 -1
  52. package/lib/src/data-chart/src/components/empty.vue.cjs +1 -1
  53. package/lib/src/data-chart/src/components/funnel.vue.cjs +1 -1
  54. package/lib/src/data-chart/src/components/line.vue2.cjs +1 -1
  55. package/lib/src/data-chart/src/components/pie.vue.cjs +1 -1
  56. package/lib/src/data-chart/src/components/radar.vue.cjs +1 -1
  57. package/lib/src/data-chart/src/components/scatter-simple.vue.cjs +1 -1
  58. package/lib/src/data-chart/src/components/scatter.vue.cjs +1 -1
  59. package/lib/src/data-chart/src/components/table.vue.cjs +1 -1
  60. package/lib/src/data-chart/src/data-chart.vue.cjs +1 -1
  61. package/lib/src/data-chart/src/utils/useCharts.cjs +1 -1
  62. package/lib/src/file-upload/index.cjs +1 -1
  63. package/lib/src/file-upload/src/file-upload.vue.cjs +1 -1
  64. package/lib/src/file-upload/src/file-upload.vue.cjs.map +1 -1
  65. package/lib/src/fixed-action-bar/index.cjs +1 -1
  66. package/lib/src/fixed-action-bar/src/fixed-action-bar.vue.cjs +1 -1
  67. package/lib/src/image-upload/index.cjs +1 -1
  68. package/lib/src/image-upload/src/image-upload.vue.cjs +1 -1
  69. package/lib/src/image-upload/src/image-upload.vue.cjs.map +1 -1
  70. package/lib/src/make-installer.cjs +1 -1
  71. package/lib/src/photo-crop-tool/index.cjs +1 -1
  72. package/lib/src/photo-crop-tool/src/composables.cjs +1 -1
  73. package/lib/src/photo-crop-tool/src/photo-crop-tool.vue.cjs +1 -1
  74. package/lib/src/subject-action/index.cjs +1 -1
  75. package/lib/src/subject-action/src/subject-action.vue.cjs +1 -1
  76. package/lib/src/subject-action/src/subject-action.vue.cjs.map +1 -1
  77. package/lib/src/subject-layout/index.cjs +1 -1
  78. package/lib/src/subject-layout/src/subject-layout.vue.cjs +1 -1
  79. package/lib/src/subject-list/index.cjs +1 -1
  80. package/lib/src/subject-list/src/components/SubjectPageEnd.vue.cjs +1 -1
  81. package/lib/src/subject-list/src/components/SubjectRichText.vue.cjs +1 -1
  82. package/lib/src/subject-list/src/components/subject-blank-fill.vue.cjs +1 -1
  83. package/lib/src/subject-list/src/components/subject-blank-fill.vue.cjs.map +1 -1
  84. package/lib/src/subject-list/src/components/subject-scale.vue.cjs +1 -1
  85. package/lib/src/subject-list/src/components/subject-scale.vue.cjs.map +1 -1
  86. package/lib/src/subject-list/src/components/subject-single.vue.cjs +1 -1
  87. package/lib/src/subject-list/src/components/subject-single.vue.cjs.map +1 -1
  88. package/lib/src/subject-list/src/components/subject-text-fill.vue.cjs +1 -1
  89. package/lib/src/subject-list/src/components/subject-text-fill.vue.cjs.map +1 -1
  90. package/lib/src/subject-list/src/subject-list.vue.cjs +1 -1
  91. package/lib/src/subject-type/index.cjs +1 -1
  92. package/lib/src/subject-type/src/subject-type.vue.cjs +1 -1
  93. package/lib/src/tiny-mce-editor/index.cjs +1 -1
  94. package/lib/src/tiny-mce-editor/src/tiny-mce-editor.vue.cjs +1 -1
  95. package/lib/src/withInstall.cjs +1 -1
  96. package/package.json +2 -1
  97. package/theme-chalk/file-upload.css +1 -1
  98. package/theme-chalk/image-upload.css +1 -1
  99. package/theme-chalk/index.css +1 -1
  100. package/theme-chalk/subject-action.css +1 -1
  101. package/theme-chalk/subject-list.css +1 -1
  102. package/theme-chalk/subject-type.css +1 -1
  103. package/types/src/file-upload/src/file-upload.vue.d.ts.map +1 -1
  104. package/types/src/image-upload/src/image-upload.vue.d.ts.map +1 -1
  105. package/types/src/subject-action/src/subject-action.vue.d.ts.map +1 -1
  106. package/types/src/subject-list/src/components/subject-blank-fill.vue.d.ts.map +1 -1
  107. package/types/src/subject-list/src/components/subject-scale.vue.d.ts.map +1 -1
  108. package/types/src/subject-list/src/components/subject-single.vue.d.ts.map +1 -1
  109. package/types/src/subject-list/src/components/subject-text-fill.vue.d.ts.map +1 -1
  110. package/types/tsconfig.tsbuildinfo +1 -1
@@ -1,2 +1,2 @@
1
- var o=(o,r)=>{const t=o.__vccOpts||o;for(const[o,a]of r)t[o]=a;return t};export{o as default};
1
+ var t=(t,o)=>{const r=t.__vccOpts||t;for(const[t,c]of o)r[t]=c;return r};export{t as default};
2
2
  //# sourceMappingURL=_plugin-vue_export-helper.mjs.map
@@ -1,2 +1,2 @@
1
- function e(e,t){void 0===t&&(t={});var d=t.insertAt;if(e&&"undefined"!=typeof document){var o=document.head||document.getElementsByTagName("head")[0],n=document.createElement("style");n.type="text/css","top"===d&&o.firstChild?o.insertBefore(n,o.firstChild):o.appendChild(n),n.styleSheet?n.styleSheet.cssText=e:n.appendChild(document.createTextNode(e))}}export{e as default};
1
+ function e(e,t){void 0===t&&(t={});var d=t.insertAt;if(e&&"undefined"!=typeof document){var n=document.head||document.getElementsByTagName("head")[0],s=document.createElement("style");s.type="text/css","top"===d&&n.firstChild?n.insertBefore(s,n.firstChild):n.appendChild(s),s.styleSheet?s.styleSheet.cssText=e:s.appendChild(document.createTextNode(e))}}export{e as default};
2
2
  //# sourceMappingURL=style-inject.es.mjs.map
@@ -1,2 +1,2 @@
1
- var r="0.0.45";export{r as version};
1
+ var r="0.0.46";export{r as version};
2
2
  //# sourceMappingURL=package.json.mjs.map
@@ -1,2 +1,2 @@
1
- import{defineComponent as e,inject as t,ref as a,computed as r,createElementBlock as n,openBlock as c,createCommentVNode as s,createElementVNode as o}from"vue";import*as l from"echarts";import{getGeoJsonData as i}from"../utils/config.mjs";import{InjectionChartMerge as u}from"../utils/injectionKeys.mjs";import{useCharts as m}from"../utils/useCharts.mjs";const p={class:"data-chart-area-wrap"};var d=e({name:"DataChartArea",__name:"area",props:{chartOptions:{type:null,required:!0},chartData:{type:Object,required:!1,default:()=>({colDesc:[],xGroupByDesc:{colDesc:"",groupByDesc:"",groupByValues:[],xAxis:!1},groupByDesc:[],data:[],modelName:""})}},setup(e){const d=t(u,(e=>e),!0);let f="中国";const h=a({features:[],type:"FeatureCollection"}),y=a(null);let v=null;const D=r((()=>{const{xGroupByDesc:t,groupByDesc:a,colDesc:r,modelName:n,data:c}=e.chartData,s=[];r.forEach((e=>{c.forEach((t=>{s.push(Number(t[e]))}))}));const o={title:{text:n},tooltip:{formatter(e){let t=`${e.name}<br/>`;return o.series?.forEach((a=>{a.data?.forEach((r=>{r.name===e.name&&(t+=`${a.name}:${r.value}</br>`)})),t.includes(a.name)||(t+=`${a.name}:-</br>`)})),t}},visualMap:{min:Math.min(...s,0),max:Math.max(...s,0)},series:r?.map((e=>{const r=[],n=a.find((e=>e.colDesc===("中国"===f?"医院所在省":"医院所在市"))),s={};c.map((a=>{const r=a[("中国"===f?t?.colDesc||"":n?.colDesc)||""],c=h.value.features?.find((({properties:{name:e}})=>e?.includes(r)));return{name:c?.properties?.name||"",value:Number(a[e])}})).forEach((e=>{s[e.name]?s[e.name]=s[e.name]+e.value:s[e.name]=e.value}));for(const e in s)r.push({name:e,value:s[e]});return{name:e,type:"map",map:f,data:r}}))};return d(o,e.chartOptions)}));async function b(e="中国"){if(v&&!v.isDisposed()){v.showLoading();try{const t=await i({adcode:e});if(!t)return void v.hideLoading();h.value=t,f=e;const a=l.registerMap(e,t);return v.hideLoading(),a}catch(e){console.log(e),v.hideLoading()}}}return m({chartDOM:y,chartOptions:D,chartData:r((()=>e.chartData)),initAfter:async function(){await b(),v&&!v.isDisposed()&&(v.getZr()?.on("click",(e=>{e.target||"中国"===f||b("中国")})),v.on("click",(t=>{const a=e.chartData.groupByDesc?.some((e=>"医院所在市"===e.colDesc));"中国"===f&&a&&b(t.name).then((()=>{v&&!v.isDisposed()&&v.setOption(D.value)}))})))},callback:e=>{v=e}}),(e,t)=>(c(),n("div",p,[s(' <el-select\n v-if="isShowSelect"\n v-model="adcode"\n class="city-select"\n size="small"\n @change="selectChina"\n >\n <el-option\n v-for="item in selectList"\n :key="item.value"\n :label="item.label"\n :value="item.value"\n />\n </el-select> '),o("div",{ref_key:"dataChartArea",ref:y,class:"data-chart-area"},null,512)]))}});export{d as default};
1
+ import{defineComponent as e,inject as a,ref as t,computed as r,createElementBlock as n,openBlock as s,createCommentVNode as o,createElementVNode as c}from"vue";import*as i from"echarts";import{getGeoJsonData as l}from"../utils/config.mjs";import{InjectionChartMerge as m}from"../utils/injectionKeys.mjs";import{useCharts as u}from"../utils/useCharts.mjs";const p={class:"data-chart-area-wrap"};var d=e({name:"DataChartArea",__name:"area",props:{chartOptions:{type:null,required:!0},chartData:{type:Object,required:!1,default:()=>({colDesc:[],xGroupByDesc:{colDesc:"",groupByDesc:"",groupByValues:[],xAxis:!1},groupByDesc:[],data:[],modelName:""})}},setup(e){const d=a(m,(e=>e),!0);let h="中国";const f=t({features:[],type:"FeatureCollection"}),D=t(null);let v=null;const y=r((()=>{const{xGroupByDesc:a,groupByDesc:t,colDesc:r,modelName:n,data:s}=e.chartData,o=[];r.forEach((e=>{s.forEach((a=>{o.push(Number(a[e]))}))}));const c={title:{text:n},tooltip:{formatter(e){let a=`${e.name}<br/>`;return c.series?.forEach((t=>{t.data?.forEach((r=>{r.name===e.name&&(a+=`${t.name}:${r.value}</br>`)})),a.includes(t.name)||(a+=`${t.name}:-</br>`)})),a}},visualMap:{min:Math.min(...o,0),max:Math.max(...o,0)},series:r?.map((e=>{const r=[],n=t.find((e=>e.colDesc===("中国"===h?"医院所在省":"医院所在市"))),o={};s.map((t=>{const r=t[("中国"===h?a?.colDesc||"":n?.colDesc)||""],s=f.value.features?.find((({properties:{name:e}})=>e?.includes(r)));return{name:s?.properties?.name||"",value:Number(t[e])}})).forEach((e=>{o[e.name]?o[e.name]=o[e.name]+e.value:o[e.name]=e.value}));for(const e in o)r.push({name:e,value:o[e]});return{name:e,type:"map",map:h,data:r}}))};return d(c,e.chartOptions)}));async function g(e="中国"){if(v&&!v.isDisposed()){v.showLoading();try{const a=await l({adcode:e});if(!a)return void v.hideLoading();f.value=a,h=e;const t=i.registerMap(e,a);return v.hideLoading(),t}catch(e){console.log(e),v.hideLoading()}}}return u({chartDOM:D,chartOptions:y,chartData:r((()=>e.chartData)),initAfter:async function(){await g(),v&&!v.isDisposed()&&(v.getZr()?.on("click",(e=>{e.target||"中国"===h||g("中国")})),v.on("click",(a=>{const t=e.chartData.groupByDesc?.some((e=>"医院所在市"===e.colDesc));"中国"===h&&t&&g(a.name).then((()=>{v&&!v.isDisposed()&&v.setOption(y.value)}))})))},callback:e=>{v=e}}),(e,a)=>(s(),n("div",p,[o(' <el-select\n v-if="isShowSelect"\n v-model="adcode"\n class="city-select"\n size="small"\n @change="selectChina"\n >\n <el-option\n v-for="item in selectList"\n :key="item.value"\n :label="item.label"\n :value="item.value"\n />\n </el-select> '),c("div",{ref_key:"dataChartArea",ref:D,class:"data-chart-area"},null,512)]))}});export{d as default};
2
2
  //# sourceMappingURL=area.vue2.mjs.map
@@ -1,2 +1,2 @@
1
- import{defineComponent as e,inject as a,ref as t,computed as r,createElementBlock as s,openBlock as o}from"vue";import{uniq as l}from"lodash-es";import{InjectionChartMerge as i}from"../utils/injectionKeys.mjs";import{useCharts as c}from"../utils/useCharts.mjs";var u=e({name:"DataChartBar",__name:"bar",props:{chartData:{type:Object,required:!0,default:()=>({colDesc:[],xGroupByDesc:{colDesc:"",groupByDesc:"",groupByValues:[],xAxis:!1},groupByDesc:[],data:[],modelName:""})},subShowType:{type:String,required:!0,default:"bar-simple"},chartOptions:{type:null,required:!0}},setup(e){const u=a(i,(e=>e),!0),n=t(null),p=r((()=>{const{colDesc:a,xGroupByDesc:t,groupByDesc:r,data:s=[],modelName:o}=e.chartData,i=Array.from(new Set(s.map((e=>e[t.colDesc||""])))).filter((e=>null!=e))||[],c=r.find((e=>!e.xAxis))||{groupByValues:[],colDesc:""};c.groupByValues=l(s.map((e=>c.colDesc?String(e[c.colDesc]):""))),t&&t.groupByValues&&(t.groupByValues=l(s.map((e=>t.colDesc?String(e[t.colDesc]):""))));const n={title:{text:o},xAxis:{name:"",type:"category",axisLabel:{interval:0,formatter:e=>e.length>5?`${e.substring(0,5)}...`:e},data:i},yAxis:{type:"value"},legend:{data:[]},dataZoom:[{type:"inside",disabled:i.length<15}]};if(1===r.length)n.series=a.map((e=>({name:e,data:s.map((a=>a[e])),type:"bar",emphasis:{focus:"series"},label:{show:!0,position:"inside"}}))),n.legend.data=a;else if(2===r.length){const e=a.map((e=>c.groupByValues?.map((a=>{const r={name:`${a||"/"}-${e}`,type:"bar",stack:e,emphasis:{focus:"series"},data:[],label:{show:!0,position:"inside"}};return r.data=(t.groupByValues||[]).map((e=>{let o=null;return s.forEach((s=>{c.colDesc&&s[c.colDesc]===a&&t.colDesc&&s[t.colDesc]===e&&r.stack&&(o=s[r.stack]??null)})),o||""})).filter((e=>""!==e)),r}))||[])).flat();n.series=e,delete n.legend}function p(e,a,t,r){Array.isArray(e)?e.forEach((e=>{e&&(e.type=a,"category"===a&&(e.data=t||[],e.name=r||""))})):e&&(e.type=a,"category"===a&&(e.data=t||[],e.name=r||""))}switch(e.subShowType){case"bar-simple":case"default":p(n.xAxis,"category",i,t.colDesc||""),p(n.yAxis,"value");break;case"bar-y-category":p(n.xAxis,"value"),p(n.yAxis,"category",i,t.colDesc||"")}return u(n,e.chartOptions)}));return c({chartDOM:n,chartOptions:p,chartData:r((()=>e.chartData))}),(e,a)=>(o(),s("div",{ref_key:"dataChartBar",ref:n,class:"data-chart-bar"},null,512))}});export{u as default};
1
+ import{defineComponent as e,inject as a,ref as t,computed as s,createElementBlock as r,openBlock as o}from"vue";import{uniq as c}from"lodash-es";import{InjectionChartMerge as l}from"../utils/injectionKeys.mjs";import{useCharts as i}from"../utils/useCharts.mjs";var u=e({name:"DataChartBar",__name:"bar",props:{chartData:{type:Object,required:!0,default:()=>({colDesc:[],xGroupByDesc:{colDesc:"",groupByDesc:"",groupByValues:[],xAxis:!1},groupByDesc:[],data:[],modelName:""})},subShowType:{type:String,required:!0,default:"bar-simple"},chartOptions:{type:null,required:!0}},setup(e){const u=a(l,(e=>e),!0),p=t(null),n=s((()=>{const{colDesc:a,xGroupByDesc:t,groupByDesc:s,data:r=[],modelName:o}=e.chartData,l=Array.from(new Set(r.map((e=>e[t.colDesc||""])))).filter((e=>null!=e))||[],i=s.find((e=>!e.xAxis))||{groupByValues:[],colDesc:""};i.groupByValues=c(r.map((e=>i.colDesc?String(e[i.colDesc]):""))),t&&t.groupByValues&&(t.groupByValues=c(r.map((e=>t.colDesc?String(e[t.colDesc]):""))));const p={title:{text:o},xAxis:{name:"",type:"category",axisLabel:{interval:0,formatter:e=>e.length>5?`${e.substring(0,5)}...`:e},data:l},yAxis:{type:"value"},legend:{data:[]},dataZoom:[{type:"inside",disabled:l.length<15}]};if(1===s.length)p.series=a.map((e=>({name:e,data:r.map((a=>a[e])),type:"bar",emphasis:{focus:"series"},label:{show:!0,position:"inside"}}))),p.legend.data=a;else if(2===s.length){const e=a.map((e=>i.groupByValues?.map((a=>{const s={name:`${a||"/"}-${e}`,type:"bar",stack:e,emphasis:{focus:"series"},data:[],label:{show:!0,position:"inside"}};return s.data=(t.groupByValues||[]).map((e=>{let o=null;return r.forEach((r=>{i.colDesc&&r[i.colDesc]===a&&t.colDesc&&r[t.colDesc]===e&&s.stack&&(o=r[s.stack]??null)})),o||""})).filter((e=>""!==e)),s}))||[])).flat();p.series=e,delete p.legend}function n(e,a,t,s){Array.isArray(e)?e.forEach((e=>{e&&(e.type=a,"category"===a&&(e.data=t||[],e.name=s||""))})):e&&(e.type=a,"category"===a&&(e.data=t||[],e.name=s||""))}switch(e.subShowType){case"bar-simple":case"default":n(p.xAxis,"category",l,t.colDesc||""),n(p.yAxis,"value");break;case"bar-y-category":n(p.xAxis,"value"),n(p.yAxis,"category",l,t.colDesc||"")}return u(p,e.chartOptions)}));return i({chartDOM:p,chartOptions:n,chartData:s((()=>e.chartData))}),(e,a)=>(o(),r("div",{ref_key:"dataChartBar",ref:p,class:"data-chart-bar"},null,512))}});export{u as default};
2
2
  //# sourceMappingURL=bar.vue.mjs.map
@@ -1,2 +1,2 @@
1
- import{ElScrollbar as t}from"element-plus/es";import{defineComponent as a,createElementBlock as e,openBlock as l,createCommentVNode as s,withDirectives as c,toDisplayString as r,createBlock as d,withCtx as i,createElementVNode as n,normalizeClass as o,Fragment as u,renderList as m,createTextVNode as p,vShow as v,createVNode as y}from"vue";import f from"./empty.vue.mjs";const k={class:"data-chart-card"},h={key:0,class:"title"},x=["title"],D={class:"context"},g={class:"suffix-icon"},_={key:2,class:"data-chart-card-wrap"},j=["title"],C={class:"context"};var $=a({name:"DataChartCard",__name:"card",props:{chartData:{type:Object,default:()=>({colDesc:[],xGroupByDesc:[],data:[],modelName:""})}},setup(a){const $=a;function b(t){const a=$.chartData.xGroupByDesc?.colDesc||"";return a?a+t[a]:""}return($,w)=>{const B=t;return l(),e("div",k,[a.chartData.groupByDesc.length?(l(),e("p",h,r(a.chartData.modelName),1)):s("v-if",!0),a.chartData.groupByDesc.length?c((l(),d(B,{key:1},{default:i((()=>[n("div",{class:o({"data-chart-card-grid-layout":a.chartData.groupByDesc.length})},[(l(!0),e(u,null,m(a.chartData.data,((t,s)=>(l(),e("div",{key:s,class:"card-item"},[n("div",{class:"card-title",title:b(t)},r(b(t)),9,x),n("div",D,[(l(!0),e(u,null,m(a.chartData.colDesc,((s,c)=>(l(),e("span",{key:s},[p(r(`${s}: `||"-"),1),n("strong",null,r(t[s]||"-"),1),p(" "+r(c===a.chartData.colDesc.length-1?"":","),1)])))),128))]),n("div",g,r(s+1),1)])))),128))],2)])),_:1},512)),[[v,a.chartData.data.length]]):(l(),e("div",_,[(l(!0),e(u,null,m(a.chartData.data,((t,c)=>(l(),e("div",{key:c,class:"card-item"},[n("div",{class:"card-title",title:a.chartData.modelName},r(a.chartData.modelName),9,j),n("div",C,[(l(!0),e(u,null,m(a.chartData.colDesc,((c,d)=>(l(),e("span",{key:c},[t?(l(),e(u,{key:0},[p(r(`${c}: `||"-"),1),n("strong",null,r(t[c]||"-"),1),p(" "+r(d===a.chartData.colDesc.length-1?"":","),1)],64)):s("v-if",!0)])))),128))])])))),128))])),c(y(f,null,null,512),[[v,!a.chartData.data.length]])])}}});export{$ as default};
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};
2
2
  //# sourceMappingURL=card.vue2.mjs.map
@@ -1,2 +1,2 @@
1
- import{defineComponent as t,createElementBlock as e,openBlock as r,normalizeClass as s,unref as p,createElementVNode as i,normalizeStyle as a,toDisplayString as m}from"vue";import o from"./empty.svg.mjs";import{useNamespace as n}from"@qxs-bns/hooks";const d={class:"empty-content"},c=["src","alt"],l={class:"empty-description"};var u=t({name:"Empty",__name:"empty",props:{image:{type:String,required:!1,default:()=>o},description:{type:String,required:!1,default:"暂无数据"},imageSize:{type:Object,required:!1,default:()=>({width:"200px",height:"80px"})}},setup(t){const o=n("data-chart");return(t,n)=>(r(),e("div",{class:s([p(o).e("empty")])},[i("div",d,[i("img",{style:a(t.imageSize),src:t.image,alt:t.description},null,12,c),i("span",l,m(t.description),1)])],2))}});export{u as default};
1
+ import{defineComponent as e,createElementBlock as t,openBlock as i,normalizeClass as r,unref as s,createElementVNode as p,normalizeStyle as a,toDisplayString as m}from"vue";import o from"./empty.svg.mjs";import{useNamespace as n}from"@qxs-bns/hooks";const d={class:"empty-content"},c=["src","alt"],l={class:"empty-description"};var u=e({name:"Empty",__name:"empty",props:{image:{type:String,required:!1,default:()=>o},description:{type:String,required:!1,default:"暂无数据"},imageSize:{type:Object,required:!1,default:()=>({width:"200px",height:"80px"})}},setup(e){const o=n("data-chart");return(e,n)=>(i(),t("div",{class:r([s(o).e("empty")])},[p("div",d,[p("img",{style:a(e.imageSize),src:e.image,alt:e.description},null,12,c),p("span",l,m(e.description),1)])],2))}});export{u as default};
2
2
  //# sourceMappingURL=empty.vue.mjs.map
@@ -1,2 +1,2 @@
1
- import{defineComponent as e,ref as t,inject as a,computed as r,createElementBlock as s,openBlock as l}from"vue";import{InjectionChartMerge as o}from"../utils/injectionKeys.mjs";import{useCharts as n}from"../utils/useCharts.mjs";var u=e({name:"DataChartFunnel",__name:"funnel",props:{chartData:{type:Object,required:!0,default:()=>({colDesc:[],xGroupByDesc:{colDesc:"",groupByDesc:"",groupByValues:[],xAxis:!1},groupByDesc:[],data:[],modelName:""})},chartOptions:{type:null,required:!0}},setup(e){const u=t(),c=a(o,(e=>e),!0),i=r((()=>{const{colDesc:t,xGroupByDesc:a,modelName:r,data:s}=e.chartData,l={title:{text:r},legend:{},series:t.map((e=>({name:e,type:"funnel",left:"10%",width:"80%",label:{formatter:"{c}"},labelLine:{show:!1},itemStyle:{opacity:.7},emphasis:{label:{position:"inside",formatter:`{b}${e}: {c}`}},data:s.map((t=>({name:t[a?.colDesc||""],value:t[e]})))})))};return 1!==t.length&&(l.legend.data=t),c(l,e.chartOptions)}));return n({chartDOM:u,chartOptions:i,chartData:r((()=>e.chartData))}),(e,t)=>(l(),s("div",{ref_key:"dataChartFunnel",ref:u,class:"data-chart-funnel"},null,512))}});export{u as default};
1
+ import{defineComponent as e,ref as t,inject as a,computed as r,createElementBlock as l,openBlock as s}from"vue";import{InjectionChartMerge as n}from"../utils/injectionKeys.mjs";import{useCharts as o}from"../utils/useCharts.mjs";var c=e({name:"DataChartFunnel",__name:"funnel",props:{chartData:{type:Object,required:!0,default:()=>({colDesc:[],xGroupByDesc:{colDesc:"",groupByDesc:"",groupByValues:[],xAxis:!1},groupByDesc:[],data:[],modelName:""})},chartOptions:{type:null,required:!0}},setup(e){const c=t(),i=a(n,(e=>e),!0),u=r((()=>{const{colDesc:t,xGroupByDesc:a,modelName:r,data:l}=e.chartData,s={title:{text:r},legend:{},series:t.map((e=>({name:e,type:"funnel",left:"10%",width:"80%",label:{formatter:"{c}"},labelLine:{show:!1},itemStyle:{opacity:.7},emphasis:{label:{position:"inside",formatter:`{b}${e}: {c}`}},data:l.map((t=>({name:t[a?.colDesc||""],value:t[e]})))})))};return 1!==t.length&&(s.legend.data=t),i(s,e.chartOptions)}));return o({chartDOM:c,chartOptions:u,chartData:r((()=>e.chartData))}),(e,t)=>(s(),l("div",{ref_key:"dataChartFunnel",ref:c,class:"data-chart-funnel"},null,512))}});export{c as default};
2
2
  //# sourceMappingURL=funnel.vue.mjs.map
@@ -1,2 +1,2 @@
1
- import{defineComponent as e,ref as t,inject as a,computed as r,createElementBlock as s,openBlock as n}from"vue";import{InjectionChartMerge as i}from"../utils/injectionKeys.mjs";import{useCharts as l}from"../utils/useCharts.mjs";var o=e({name:"DataChartLine",__name:"line",props:{chartData:{type:Object,required:!0,default:()=>({colDesc:[],xGroupByDesc:{colDesc:"",groupByDesc:"",groupByValues:[],xAxis:!1},groupByDesc:[],data:[],modelName:""})},subShowType:{type:String,required:!0,default:"line-simple"},chartOptions:{type:null,required:!0}},setup(e){const o=t(),c=a(i,(e=>e),!0),u=15,d="Total";const p=r((()=>{const{colDesc:t,xGroupByDesc:a,groupByDesc:r,data:s,modelName:n}=e.chartData,i=Array.from(new Set(s?.map((e=>e[a?.colDesc||""])))).filter((e=>null!=e))||[],l=r?.find((e=>!e.xAxis)),o={title:{text:n},legend:{data:[]},xAxis:{name:a?.colDesc||"",data:i},dataZoom:[{type:"inside",disabled:i.length<u}]};if(1===r?.length)o.series=t.map((e=>({name:e,type:"line",data:s.map((t=>t[e])).filter((e=>null!=e))}))),o.legend.data=t;else if(2===r?.length){const e=[...new Set(s.map((e=>String(e[l?.colDesc||""]))))];o.legend.data=e,o.series=e.map((e=>function(e,t,a,r,s,n){const i=[];return t.forEach((t=>{const l=a.find((a=>a[r?.colDesc]===t&&a[s?.colDesc]===e));l?i.push(l[n[0]]):i.push(0)})),{name:e,type:"line",stack:d,areaStyle:{},data:i}}(e,i,s,a,l,t)))}return o.series=o.series?.map((t=>{const a={...t};switch(e.subShowType){case"line-simple":default:delete a.areaStyle;break;case"area-basic":a.areaStyle={}}return a})),c(o,e.chartOptions)}));return l({chartDOM:o,chartOptions:p,chartData:r((()=>e.chartData))}),(e,t)=>(n(),s("div",{ref_key:"dataChartLine",ref:o,class:"data-chart-line"},null,512))}});export{o as default};
1
+ import{defineComponent as e,ref as a,inject as t,computed as s,createElementBlock as r,openBlock as l}from"vue";import{InjectionChartMerge as n}from"../utils/injectionKeys.mjs";import{useCharts as c}from"../utils/useCharts.mjs";var i=e({name:"DataChartLine",__name:"line",props:{chartData:{type:Object,required:!0,default:()=>({colDesc:[],xGroupByDesc:{colDesc:"",groupByDesc:"",groupByValues:[],xAxis:!1},groupByDesc:[],data:[],modelName:""})},subShowType:{type:String,required:!0,default:"line-simple"},chartOptions:{type:null,required:!0}},setup(e){const i=a(),o=t(n,(e=>e),!0),p=15,u="Total";const d=s((()=>{const{colDesc:a,xGroupByDesc:t,groupByDesc:s,data:r,modelName:l}=e.chartData,n=Array.from(new Set(r?.map((e=>e[t?.colDesc||""])))).filter((e=>null!=e))||[],c=s?.find((e=>!e.xAxis)),i={title:{text:l},legend:{data:[]},xAxis:{name:t?.colDesc||"",data:n},dataZoom:[{type:"inside",disabled:n.length<p}]};if(1===s?.length)i.series=a.map((e=>({name:e,type:"line",data:r.map((a=>a[e])).filter((e=>null!=e))}))),i.legend.data=a;else if(2===s?.length){const e=[...new Set(r.map((e=>String(e[c?.colDesc||""]))))];i.legend.data=e,i.series=e.map((e=>function(e,a,t,s,r,l){const n=[];return a.forEach((a=>{const c=t.find((t=>t[s?.colDesc]===a&&t[r?.colDesc]===e));c?n.push(c[l[0]]):n.push(0)})),{name:e,type:"line",stack:u,areaStyle:{},data:n}}(e,n,r,t,c,a)))}return i.series=i.series?.map((a=>{const t={...a};switch(e.subShowType){case"line-simple":default:delete t.areaStyle;break;case"area-basic":t.areaStyle={}}return t})),o(i,e.chartOptions)}));return c({chartDOM:i,chartOptions:d,chartData:s((()=>e.chartData))}),(e,a)=>(l(),r("div",{ref_key:"dataChartLine",ref:i,class:"data-chart-line"},null,512))}});export{i as default};
2
2
  //# sourceMappingURL=line.vue2.mjs.map
@@ -1,2 +1,2 @@
1
- import{defineComponent as e,inject as t,ref as r,computed as a,createElementBlock as s,openBlock as o}from"vue";import{orderBy as i,cloneDeep as l}from"lodash-es";import{InjectionChartMerge as u}from"../utils/injectionKeys.mjs";import{useCharts as c}from"../utils/useCharts.mjs";var m=e({name:"DataChartPie",__name:"pie",props:{chartData:{type:Object,required:!0,default:()=>({colDesc:[],xGroupByDesc:{colDesc:"",groupByDesc:"",groupByValues:[],xAxis:!1},groupByDesc:[],data:[],modelName:""})},subShowType:{type:String,required:!0,default:"pie-simple"},chartOptions:{type:null,required:!0}},setup(e){const m=t(u,(e=>e),!0),n=r(null),p=a((()=>{const{colDesc:t,xGroupByDesc:r,data:a,modelName:s}=e.chartData,o=t.length,u={title:{text:s},series:t.map(((t,s)=>{const u={name:t,type:"pie",center:["50%","50%"],data:[],emphasis:{itemStyle:{shadowBlur:10,shadowOffsetX:0,shadowColor:"rgba(0, 0, 0, 0.5)"}},label:{formatter:"{b}:{c}({d}%)",rich:{b:{color:"#4C5058",fontSize:14,fontWeight:"bold",lineHeight:33}}}};let c=5;const m=i(l(a),[t],["desc"]),n=m.reduce(((e,r)=>e+Number(r[t])),0);if(a.length>c)for(;c<9;){const e=m.slice(0,c);if(e.reduce(((e,r)=>e+Number(r[t])),0)/n>.9||8===c){const s=m.slice(c,m.length-1);u.data=a.map((a=>{let s={};return e.forEach((e=>{JSON.stringify(e)===JSON.stringify(a)&&(s={name:r?.colDesc?a[r.colDesc]:"",value:a[t]})})),s})).filter((e=>e)),u.data.push({name:"其它",value:s.reduce(((e,r)=>e+Number(r[t])),0)});break}c++}else u.data=a.map((e=>({name:r?.colDesc&&e[r.colDesc]||"",value:Number(e[t]||0)})));if(1===o?u.center=["50%","60%"]:2===o?0===s?(u.right="40%",u.left="",u.center=["40%","60%"]):(u.right="",u.left="40%",u.center=["60%","60%"]):3===o?0===s?(u.right="40%",u.bottom="50%",u.top="",u.left="",u.center=["40%","78%"]):1===s?(u.right="",u.bottom="50%",u.top="",u.left="40%",u.center=["60%","78%"]):(u.right="40%",u.bottom="",u.top="50%",u.left="",u.center=["40%","60%"]):4===o&&(0===s?(u.right="40%",u.bottom="50%",u.top="",u.left="",u.center=["40%","78%"]):1===s?(u.right="",u.bottom="50%",u.top="",u.left="40%",u.center=["60%","78%"]):2===s?(u.right="40%",u.bottom="",u.top="50%",u.left="",u.center=["40%","60%"]):(u.right="",u.bottom="",u.top="50%",u.left="40%",u.center=["60%","60%"])),"pie-borderRadius"===e.subShowType)u.radius=["50%","70%"];else u.radius="50%";return u}))};return m(u,e.chartOptions)}));return c({chartDOM:n,chartOptions:p,chartData:a((()=>e.chartData))}),(e,t)=>(o(),s("div",{ref_key:"dataChartPie",ref:n,class:"data-chart-pie"},null,512))}});export{m as default};
1
+ import{defineComponent as e,inject as t,ref as r,computed as a,createElementBlock as o,openBlock as s}from"vue";import{orderBy as c,cloneDeep as i}from"lodash-es";import{InjectionChartMerge as l}from"../utils/injectionKeys.mjs";import{useCharts as n}from"../utils/useCharts.mjs";var u=e({name:"DataChartPie",__name:"pie",props:{chartData:{type:Object,required:!0,default:()=>({colDesc:[],xGroupByDesc:{colDesc:"",groupByDesc:"",groupByValues:[],xAxis:!1},groupByDesc:[],data:[],modelName:""})},subShowType:{type:String,required:!0,default:"pie-simple"},chartOptions:{type:null,required:!0}},setup(e){const u=t(l,(e=>e),!0),p=r(null),m=a((()=>{const{colDesc:t,xGroupByDesc:r,data:a,modelName:o}=e.chartData,s=t.length,l={title:{text:o},series:t.map(((t,o)=>{const l={name:t,type:"pie",center:["50%","50%"],data:[],emphasis:{itemStyle:{shadowBlur:10,shadowOffsetX:0,shadowColor:"rgba(0, 0, 0, 0.5)"}},label:{formatter:"{b}:{c}({d}%)",rich:{b:{color:"#4C5058",fontSize:14,fontWeight:"bold",lineHeight:33}}}};let n=5;const u=c(i(a),[t],["desc"]),p=u.reduce(((e,r)=>e+Number(r[t])),0);if(a.length>n)for(;n<9;){const e=u.slice(0,n);if(e.reduce(((e,r)=>e+Number(r[t])),0)/p>.9||8===n){const o=u.slice(n,u.length-1);l.data=a.map((a=>{let o={};return e.forEach((e=>{JSON.stringify(e)===JSON.stringify(a)&&(o={name:r?.colDesc?a[r.colDesc]:"",value:a[t]})})),o})).filter((e=>e)),l.data.push({name:"其它",value:o.reduce(((e,r)=>e+Number(r[t])),0)});break}n++}else l.data=a.map((e=>({name:r?.colDesc&&e[r.colDesc]||"",value:Number(e[t]||0)})));if(1===s?l.center=["50%","60%"]:2===s?0===o?(l.right="40%",l.left="",l.center=["40%","60%"]):(l.right="",l.left="40%",l.center=["60%","60%"]):3===s?0===o?(l.right="40%",l.bottom="50%",l.top="",l.left="",l.center=["40%","78%"]):1===o?(l.right="",l.bottom="50%",l.top="",l.left="40%",l.center=["60%","78%"]):(l.right="40%",l.bottom="",l.top="50%",l.left="",l.center=["40%","60%"]):4===s&&(0===o?(l.right="40%",l.bottom="50%",l.top="",l.left="",l.center=["40%","78%"]):1===o?(l.right="",l.bottom="50%",l.top="",l.left="40%",l.center=["60%","78%"]):2===o?(l.right="40%",l.bottom="",l.top="50%",l.left="",l.center=["40%","60%"]):(l.right="",l.bottom="",l.top="50%",l.left="40%",l.center=["60%","60%"])),"pie-borderRadius"===e.subShowType)l.radius=["50%","70%"];else l.radius="50%";return l}))};return u(l,e.chartOptions)}));return n({chartDOM:p,chartOptions:m,chartData:a((()=>e.chartData))}),(e,t)=>(s(),o("div",{ref_key:"dataChartPie",ref:p,class:"data-chart-pie"},null,512))}});export{u as default};
2
2
  //# sourceMappingURL=pie.vue.mjs.map
@@ -1,2 +1,2 @@
1
- import{defineComponent as a,ref as r,inject as e,computed as t,createElementBlock as o,openBlock as s}from"vue";import{uniq as m}from"lodash-es";import{InjectionChartMerge as u}from"../utils/injectionKeys.mjs";import{useCharts as c}from"../utils/useCharts.mjs";var i=a({name:"DataChartRadar",__name:"radar",props:{chartData:{type:Object,required:!0,default:()=>({colDesc:[],xGroupByDesc:{colDesc:"",groupByDesc:"",groupByValues:[],xAxis:!1},groupByDesc:[],data:[],modelName:""})},chartOptions:{type:null,required:!0}},setup(a){const i=r(),l=e(u,(a=>a),!0),d=t((()=>{const{colDesc:r,xGroupByDesc:e,modelName:t,data:o}=a.chartData;e?.groupByValues&&(e.groupByValues=[]),e.groupByValues=m(o.map((a=>a[e.colDesc||""])).filter((a=>a)));const s={title:{text:t},radar:{indicator:e?.groupByValues?.map((a=>({name:a,max:Math.max(...o.map((a=>Number(a[r[0]]))))})))||[]},series:[{name:e?.colDesc,type:"radar",tooltip:{trigger:"item"},data:r.map((a=>({name:a,value:e?.groupByValues?.map((r=>o.map((t=>r===t[e.colDesc||""]?t[a]:null)).filter((a=>a)).reduce(((a,r)=>Number(a||0)+Number(r||0)),0)))})))}]};return l(s,a.chartOptions)}));return c({chartDOM:i,chartOptions:d,chartData:t((()=>a.chartData))}),(a,r)=>(s(),o("div",{ref_key:"dataChartRadar",ref:i,class:"data-chart-radar"},null,512))}});export{i as default};
1
+ import{defineComponent as a,ref as r,inject as e,computed as t,createElementBlock as o,openBlock as s}from"vue";import{uniq as u}from"lodash-es";import{InjectionChartMerge as c}from"../utils/injectionKeys.mjs";import{useCharts as l}from"../utils/useCharts.mjs";var m=a({name:"DataChartRadar",__name:"radar",props:{chartData:{type:Object,required:!0,default:()=>({colDesc:[],xGroupByDesc:{colDesc:"",groupByDesc:"",groupByValues:[],xAxis:!1},groupByDesc:[],data:[],modelName:""})},chartOptions:{type:null,required:!0}},setup(a){const m=r(),p=e(c,(a=>a),!0),i=t((()=>{const{colDesc:r,xGroupByDesc:e,modelName:t,data:o}=a.chartData;e?.groupByValues&&(e.groupByValues=[]),e.groupByValues=u(o.map((a=>a[e.colDesc||""])).filter((a=>a)));const s={title:{text:t},radar:{indicator:e?.groupByValues?.map((a=>({name:a,max:Math.max(...o.map((a=>Number(a[r[0]]))))})))||[]},series:[{name:e?.colDesc,type:"radar",tooltip:{trigger:"item"},data:r.map((a=>({name:a,value:e?.groupByValues?.map((r=>o.map((t=>r===t[e.colDesc||""]?t[a]:null)).filter((a=>a)).reduce(((a,r)=>Number(a||0)+Number(r||0)),0)))})))}]};return p(s,a.chartOptions)}));return l({chartDOM:m,chartOptions:i,chartData:t((()=>a.chartData))}),(a,r)=>(s(),o("div",{ref_key:"dataChartRadar",ref:m,class:"data-chart-radar"},null,512))}});export{m as default};
2
2
  //# sourceMappingURL=radar.vue.mjs.map
@@ -1,2 +1,2 @@
1
- import{defineComponent as t,ref as e,inject as r,computed as a,createElementBlock as s,openBlock as o}from"vue";import{InjectionChartMerge as c}from"../utils/injectionKeys.mjs";import{useCharts as l}from"../utils/useCharts.mjs";var p=t({name:"DataChartScatterSimple",__name:"scatter-simple",props:{chartData:{type:Object,required:!0,default:()=>({colDesc:[],xGroupByDesc:{colDesc:"",groupByDesc:"",groupByValues:[],xAxis:!1},groupByDesc:[],data:[],modelName:""})},chartOptions:{type:null,required:!0}},setup(t){const p=e(),i=r(c,(t=>t),!0),m=a((()=>{const{colDesc:e,xGroupByDesc:r,modelName:a,data:s}=t.chartData,o={title:{text:a},tooltip:{formatter:t=>t.value.length>1?`${t.seriesName} :<br/>${t.value[0]} ${t.value[1]} `:`${t.seriesName} :<br/>${t.name} : ${t.value} `},series:e.map((t=>({symbolSize:20,name:t,data:s.map((e=>[e[t],e[r?.colDesc||""]])),type:"scatter"})))};return i(o,t.chartOptions)}));return l({chartDOM:p,chartOptions:m,chartData:a((()=>t.chartData))}),(t,e)=>(o(),s("div",{ref_key:"dataChartScatterSimple",ref:p,class:"data-chart-scatter-simple"},null,512))}});export{p as default};
1
+ import{defineComponent as e,ref as t,inject as a,computed as r,createElementBlock as s,openBlock as c}from"vue";import{InjectionChartMerge as o}from"../utils/injectionKeys.mjs";import{useCharts as l}from"../utils/useCharts.mjs";var m=e({name:"DataChartScatterSimple",__name:"scatter-simple",props:{chartData:{type:Object,required:!0,default:()=>({colDesc:[],xGroupByDesc:{colDesc:"",groupByDesc:"",groupByValues:[],xAxis:!1},groupByDesc:[],data:[],modelName:""})},chartOptions:{type:null,required:!0}},setup(e){const m=t(),p=a(o,(e=>e),!0),i=r((()=>{const{colDesc:t,xGroupByDesc:a,modelName:r,data:s}=e.chartData,c={title:{text:r},tooltip:{formatter:e=>e.value.length>1?`${e.seriesName} :<br/>${e.value[0]} ${e.value[1]} `:`${e.seriesName} :<br/>${e.name} : ${e.value} `},series:t.map((e=>({symbolSize:20,name:e,data:s.map((t=>[t[e],t[a?.colDesc||""]])),type:"scatter"})))};return p(c,e.chartOptions)}));return l({chartDOM:m,chartOptions:i,chartData:r((()=>e.chartData))}),(e,t)=>(c(),s("div",{ref_key:"dataChartScatterSimple",ref:m,class:"data-chart-scatter-simple"},null,512))}});export{m as default};
2
2
  //# sourceMappingURL=scatter-simple.vue.mjs.map
@@ -1,2 +1,2 @@
1
- import{defineComponent as t,ref as e,inject as a,computed as r,createElementBlock as s,openBlock as c}from"vue";import{InjectionChartMerge as o}from"../utils/injectionKeys.mjs";import{useCharts as i}from"../utils/useCharts.mjs";var u=t({name:"DataChartScatter",__name:"scatter",props:{chartData:{type:Object,required:!0,default:()=>({colDesc:[],xGroupByDesc:{colDesc:"",groupByDesc:"",groupByValues:[],xAxis:!1},groupByDesc:[],data:[],modelName:""})},chartOptions:{type:null,required:!0}},setup(t){const u=e(),p=a(o,(t=>t),!0),l=r((()=>p({xAxis:{},yAxis:{},series:[{symbolSize:20,data:[[10,8.04],[8.07,6.95],[13,7.58],[9.05,8.81],[11,8.33],[14,7.66],[13.4,6.81],[10,6.33],[14,8.96],[12.5,6.82],[9.15,7.2],[11.5,7.2],[3.03,4.23],[12.2,7.83],[2.02,4.47],[1.05,3.33],[4.05,4.96],[6.03,7.24],[12,6.26],[12,8.84],[7.08,5.82],[5.02,5.68]],type:"scatter"}]},t.chartOptions)));return i({chartDOM:u,chartOptions:l,chartData:r((()=>t.chartData))}),(t,e)=>(c(),s("div",{ref_key:"dataChartScatter",ref:u,class:"data-chart-scatter"},null,512))}});export{u as default};
1
+ import{defineComponent as t,ref as a,inject as e,computed as r,createElementBlock as s,openBlock as c}from"vue";import{InjectionChartMerge as o}from"../utils/injectionKeys.mjs";import{useCharts as i}from"../utils/useCharts.mjs";var p=t({name:"DataChartScatter",__name:"scatter",props:{chartData:{type:Object,required:!0,default:()=>({colDesc:[],xGroupByDesc:{colDesc:"",groupByDesc:"",groupByValues:[],xAxis:!1},groupByDesc:[],data:[],modelName:""})},chartOptions:{type:null,required:!0}},setup(t){const p=a(),u=e(o,(t=>t),!0),l=r((()=>u({xAxis:{},yAxis:{},series:[{symbolSize:20,data:[[10,8.04],[8.07,6.95],[13,7.58],[9.05,8.81],[11,8.33],[14,7.66],[13.4,6.81],[10,6.33],[14,8.96],[12.5,6.82],[9.15,7.2],[11.5,7.2],[3.03,4.23],[12.2,7.83],[2.02,4.47],[1.05,3.33],[4.05,4.96],[6.03,7.24],[12,6.26],[12,8.84],[7.08,5.82],[5.02,5.68]],type:"scatter"}]},t.chartOptions)));return i({chartDOM:p,chartOptions:l,chartData:r((()=>t.chartData))}),(t,a)=>(c(),s("div",{ref_key:"dataChartScatter",ref:p,class:"data-chart-scatter"},null,512))}});export{p as default};
2
2
  //# sourceMappingURL=scatter.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 n,unref as p,createCommentVNode as s,createVNode as i,createElementVNode as m,toDisplayString as c,withCtx as d,Fragment as u,renderList as h,createBlock as f,createTextVNode as b}from"vue";import w from"./empty.vue.mjs";import{useNamespace as v}from"@qxs-bns/hooks";const y={key:0,class:"title"};var x=a({name:"DataChartTable",__name:"table",props:{chartData:{type:Object,default:()=>({colDesc:[],xGroupByDesc:[],data:[],modelName:""})}},setup(a){const x=a,$=v("data-chart"),_=o((()=>x.chartData.groupByDesc.find((t=>!t.xAxis))));function k(t){if(!t)return 100;const e=14*t.length+20+30;return e<100?100:e}return(o,v)=>{const x=e,D=t;return l(),r("div",{class:n([p($).e("data-chart-table")])},[a.chartData.modelName?(l(),r("p",y,[m("span",null,c(a.chartData.modelName),1)])):s("v-if",!0),i(D,{class:"customize-table data-chart-table-content",data:a.chartData.data,stripe:"",height:"100%"},{empty:d((()=>[i(w)])),default:d((()=>[(l(!0),r(u,null,h(a.chartData.groupByDesc,((t,e)=>(l(),f(x,{key:`${t.colDesc}${t.groupByDesc}${e}`,align:"center","show-overflow-tooltip":"",sortable:"","min-width":`${k(t.colDesc)}px`,prop:t.colDesc||""},{header:d((()=>[b(c(t.colDesc),1)])),default:d((e=>[b(c((p(_)&&(p(_).colDesc,t.colDesc),e.row[t.colDesc||""]||"--")),1)])),_:2},1032,["min-width","prop"])))),128)),(l(!0),r(u,null,h(a.chartData.colDesc,((t,e)=>(l(),f(x,{key:t+e,align:"center","min-width":`${k(t)}px`,label:t,"show-overflow-tooltip":"",sortable:"",prop:t},{header:d((()=>[b(c(t),1)])),_:2},1032,["min-width","label","prop"])))),128))])),_:1},8,["data"])],2)}}});export{x as default};
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};
2
2
  //# sourceMappingURL=table.vue.mjs.map
@@ -1,2 +1,2 @@
1
- import{defineComponent as e,computed as t,provide as o,createBlock as r,openBlock as s,resolveDynamicComponent as n,unref as a,normalizeClass as m}from"vue";import{JsonToExcel as p}from"@qxs-bns/utils";import{cloneDeep as c,merge as u}from"lodash-es";import{defaultChartOption as i}from"./utils/config.mjs";import{InjectionChartMerge as l}from"./utils/injectionKeys.mjs";import{useDataToExcelJson as d}from"./utils/useCharts.mjs";import{useNamespace as f}from"@qxs-bns/hooks";import h from"./components/table.vue.mjs";import y from"./components/bar.vue.mjs";import j from"./components/line.vue.mjs";import v from"./components/pie.vue.mjs";import b from"./components/radar.vue.mjs";import g from"./components/scatter.vue.mjs";import D from"./components/funnel.vue.mjs";import x from"./components/area.vue.mjs";import w from"./components/card.vue.mjs";import q from"./components/scatter-simple.vue.mjs";var S=e({name:"QxsDataChart",__name:"data-chart",props:{modelName:{type:String,required:!1,default:""},showTypeName:{type:String,required:!1,default:"table"},subShowType:{type:String,required:!1},data:{type:Object,required:!1,default:()=>({data:[],desc:{colDesc:[],showDesc:{showType:0,chartOptions:"{}",jsCodeSnippet:""},groupByDesc:[]}})},chartOptions:{type:null,required:!1,default:()=>({})},jsCodeSnippet:{type:String,required:!1,default:""}},setup(e,{expose:S}){const B=f("data-chart"),C={table:h,bar:y,line:j,pie:v,radar:b,scatter:g,funnel:D,area:x,card:w,"scatter-simple":q},T=t((()=>c(i[e.showTypeName]))),N=t((()=>{const{desc:{colDesc:t=[],groupByDesc:o=[]}={},data:r=[]}=e.data;let s=[],n=null;s=o?.map((e=>(e.xAxis&&(n=e),e)));const a=n?r.filter((e=>e&&e[n.colDesc])):r;return{colDesc:t,modelName:e.modelName,subShowType:e.subShowType,xGroupByDesc:n||{groupByDesc:null,groupByValues:null,colDesc:null,xAxis:!1},groupByDesc:s,data:a}}));return S({exportExal:function(){if(0===e.data.data.length)return void console.log("暂无数据");const t=d(e.data);p(e.modelName,t)}}),o(l,(function(t,o){let r=u({},T.value,t,o)||{};if(e.jsCodeSnippet)try{r=new Function("config",`"use strict"; ${e.jsCodeSnippet}; return config;`)(r)}catch(e){console.error("代码执行失败:",e)}return r})),(e,t)=>(s(),r(n(C[e.showTypeName]),{class:m([a(B).e("wrapper")]),"sub-show-type":e.subShowType,"chart-data":a(N),"chart-options":e.chartOptions},null,8,["class","sub-show-type","chart-data","chart-options"]))}});export{S as default};
1
+ import{defineComponent as e,computed as t,provide as o,createBlock as r,openBlock as s,resolveDynamicComponent as a,unref as p,normalizeClass as m}from"vue";import{JsonToExcel as n}from"@qxs-bns/utils";import{cloneDeep as c,merge as i}from"lodash-es";import{defaultChartOption as u}from"./utils/config.mjs";import{InjectionChartMerge as l}from"./utils/injectionKeys.mjs";import{useDataToExcelJson as d}from"./utils/useCharts.mjs";import{useNamespace as f}from"@qxs-bns/hooks";import h from"./components/table.vue.mjs";import y from"./components/bar.vue.mjs";import j from"./components/line.vue.mjs";import b from"./components/pie.vue.mjs";import g from"./components/radar.vue.mjs";import v from"./components/scatter.vue.mjs";import w from"./components/funnel.vue.mjs";import x from"./components/area.vue.mjs";import D from"./components/card.vue.mjs";import S from"./components/scatter-simple.vue.mjs";var q=e({name:"QxsDataChart",__name:"data-chart",props:{modelName:{type:String,required:!1,default:""},showTypeName:{type:String,required:!1,default:"table"},subShowType:{type:String,required:!1},data:{type:Object,required:!1,default:()=>({data:[],desc:{colDesc:[],showDesc:{showType:0,chartOptions:"{}",jsCodeSnippet:""},groupByDesc:[]}})},chartOptions:{type:null,required:!1,default:()=>({})},jsCodeSnippet:{type:String,required:!1,default:""}},setup(e,{expose:q}){const T=f("data-chart"),N={table:h,bar:y,line:j,pie:b,radar:g,scatter:v,funnel:w,area:x,card:D,"scatter-simple":S},B=t((()=>c(u[e.showTypeName]))),C=t((()=>{const{desc:{colDesc:t=[],groupByDesc:o=[]}={},data:r=[]}=e.data;let s=[],a=null;s=o?.map((e=>(e.xAxis&&(a=e),e)));const p=a?r.filter((e=>e&&e[a.colDesc])):r;return{colDesc:t,modelName:e.modelName,subShowType:e.subShowType,xGroupByDesc:a||{groupByDesc:null,groupByValues:null,colDesc:null,xAxis:!1},groupByDesc:s,data:p}}));return q({exportExal:function(){if(0===e.data.data.length)return void console.log("暂无数据");const t=d(e.data);n(e.modelName,t)}}),o(l,(function(t,o){let r=i({},B.value,t,o)||{};if(e.jsCodeSnippet)try{r=new Function("config",`"use strict"; ${e.jsCodeSnippet}; return config;`)(r)}catch(e){console.error("代码执行失败:",e)}return r})),(e,t)=>(s(),r(a(N[e.showTypeName]),{class:m([p(T).e("wrapper")]),"sub-show-type":e.subShowType,"chart-data":p(C),"chart-options":e.chartOptions},null,8,["class","sub-show-type","chart-data","chart-options"]))}});export{q as default};
2
2
  //# sourceMappingURL=data-chart.vue.mjs.map
@@ -1,2 +1,2 @@
1
- import{merge as e}from"lodash-es";const o={data:[{showTypeName:"table",label:"表格",coverImg:"table.png",disabled:()=>!1,subTypeList:[],showType:0,baseConfig:{}},{showTypeName:"line",label:"折线图",coverImg:"line-stack.png",showType:1,subTypeList:[{value:"line-simple",icon:"line-smooth",tooltipContent:"折线图"},{value:"area-basic",icon:"chart-line-area",tooltipContent:"折线面积图"}],baseConfig:{tooltip:{confine:!1,trigger:"axis",axisPointer:{type:"line"}},toolbox:{show:!1,showTitle:!1,feature:{saveAsImage:{}}},legend:{type:"scroll",top:"25px"},grid:{left:"0",bottom:"10px",containLabel:!0},xAxis:{type:"category",boundaryGap:!1},yAxis:{type:"value"},dataZoom:[{type:"inside"}]},disabled:(e,o)=>{const t=o?.length;return!(t>=1&&t<2)}},{showTypeName:"bar",label:"柱状图",coverImg:"bar-tick-align.png",showType:2,baseConfig:{legend:{type:"scroll",top:"25px"},tooltip:{confine:!1,trigger:"axis",axisPointer:{type:"shadow"}},toolbox:{show:!1,showTitle:!1,feature:{saveAsImage:{}}},grid:{left:"0",bottom:"20px",containLabel:!0},xAxis:{axisLabel:{showMaxLabel:!0},axisTick:{alignWithLabel:!0}},yAxis:{},dataZoom:[{type:"inside"}]},subTypeList:[{value:"bar-simple",icon:"bar-simple",tooltipContent:"垂直条形图"},{value:"bar-y-category",icon:"bar-y-category",tooltipContent:"水平条形图"}],disabled:(e,o)=>{const t=o?.length;return!(t>=1)}},{showTypeName:"pie",label:"饼图",coverImg:"pie-simple.png",showType:4,subTypeList:[{value:"pie-simple",icon:"pie-simple",tooltipContent:"饼图"},{value:"pie-borderRadius",icon:"pie-borderRadius",tooltipContent:"环形图"}],baseConfig:{tooltip:{confine:!0,formatter:"{a}<br>{b}: {c}({d}%)",trigger:"item"},toolbox:{show:!1,showTitle:!1,feature:{saveAsImage:{}}},legend:{type:"scroll",top:"25px"}},disabled:(e,o)=>{const t=o?.length,a=e?.length;return!(a<=4&&t>0&&t<=1)}},{showTypeName:"area",label:"地图",coverImg:"area.png",showType:5,subTypeList:[],baseConfig:{tooltip:{confine:!0,trigger:"item"},toolbox:{show:!1,showTitle:!1,feature:{saveAsImage:{}}},visualMap:{text:["高","低"],realtime:!1,calculable:!0,inRange:{color:["lightskyblue","yellow","orangered"]}}},disabled:(e,o)=>{const t=o?.length,a=o?.some((e=>{let{colDesc:o}=e;return o.includes("省")||o.includes("市")}));return!(a&&t>0)}},{showTypeName:"funnel",label:"漏斗图",coverImg:"funnel.png",showType:6,subTypeList:[],baseConfig:{tooltip:{confine:!0,trigger:"item",formatter:"{a} <br/>{b} : {c}"},toolbox:{show:!1,showTitle:!1,feature:{saveAsImage:{}}},legend:{type:"scroll",top:20}},disabled:(e,o)=>{const t=o?.length,a=e?.length;return!(a<=5&&t>0&&t<=1)}},{showTypeName:"card",label:"卡片",coverImg:"card.png",showType:9,subTypeList:[],baseConfig:{},disabled:(e,o)=>{const t=o?.length,a=e?.length;return!(a>0&&t<=1)}},{showTypeName:"radar",label:"雷达图",coverImg:"radar.png",showType:10,subTypeList:[],baseConfig:{legend:{type:"scroll",orient:"vertical",left:"left",top:"25px"},tooltip:{confine:!0,trigger:"item"},toolbox:{show:!1,showTitle:!1,feature:{saveAsImage:{}}},radar:{center:["50%","55%"]}},disabled:(e,o)=>{const t=o?.length;return 1!==t||1!==e.length}},{showTypeName:"scatter-simple",label:"散点图",coverImg:"",showType:11,subTypeList:[],disabled:()=>!1,baseConfig:{grid:{left:"0",bottom:"10px",containLabel:!0},tooltip:{showDelay:0,axisPointer:{show:!0,type:"cross",lineStyle:{type:"dashed",width:1}}},toolbox:{show:!1,showTitle:!1,feature:{saveAsImage:{}}},legend:{type:"scroll",top:"25px"},xAxis:{splitLine:{lineStyle:{type:"dashed"}}},yAxis:{splitLine:{lineStyle:{type:"dashed"}}}}}]};function t(o,t){const a={};return o.forEach((o=>{a[o.showTypeName]=e(o.baseConfig,t)})),a}const a=t(o.data,{backgroundColor:"transparent",title:{textStyle:{fontSize:14,lineHeight:16}}});function i(e){return new Promise((o=>{const t={showbiz:!1,extensions:"all",...e};import("@amap/amap-jsapi-loader").then((e=>{let{default:o}=e;return o.load({key:"2e820fac2a528b016a4cb95bb463e69e",version:"1.4.15",plugins:["AMap.DistrictSearch"],AMapUI:{version:"1.1",plugins:["geo/DistrictExplorer"]}})})).then((a=>{new a.DistrictSearch(t).search(e.adcode,((e,t)=>{AMapUI.loadUI(["geo/DistrictExplorer"],(e=>{(new e).loadAreaNode(t.districtList[0].adcode,((e,t)=>{if(e)return void console.error(e);const a={features:[],type:"FeatureCollection"};a.features=t.getSubFeatures(),o(a)}))}))}))})).catch((e=>{console.error("Failed to load map:",e),o({features:[],type:"FeatureCollection"})}))}))}export{a as defaultChartOption,i as getGeoJsonData,o as iconList,t as setDefaultChartOption};
1
+ import{merge as e}from"lodash-es";const t={data:[{showTypeName:"table",label:"表格",coverImg:"table.png",disabled:()=>!1,subTypeList:[],showType:0,baseConfig:{}},{showTypeName:"line",label:"折线图",coverImg:"line-stack.png",showType:1,subTypeList:[{value:"line-simple",icon:"line-smooth",tooltipContent:"折线图"},{value:"area-basic",icon:"chart-line-area",tooltipContent:"折线面积图"}],baseConfig:{tooltip:{confine:!1,trigger:"axis",axisPointer:{type:"line"}},toolbox:{show:!1,showTitle:!1,feature:{saveAsImage:{}}},legend:{type:"scroll",top:"25px"},grid:{left:"0",bottom:"10px",containLabel:!0},xAxis:{type:"category",boundaryGap:!1},yAxis:{type:"value"},dataZoom:[{type:"inside"}]},disabled:(e,t)=>{const o=t?.length;return!(o>=1&&o<2)}},{showTypeName:"bar",label:"柱状图",coverImg:"bar-tick-align.png",showType:2,baseConfig:{legend:{type:"scroll",top:"25px"},tooltip:{confine:!1,trigger:"axis",axisPointer:{type:"shadow"}},toolbox:{show:!1,showTitle:!1,feature:{saveAsImage:{}}},grid:{left:"0",bottom:"20px",containLabel:!0},xAxis:{axisLabel:{showMaxLabel:!0},axisTick:{alignWithLabel:!0}},yAxis:{},dataZoom:[{type:"inside"}]},subTypeList:[{value:"bar-simple",icon:"bar-simple",tooltipContent:"垂直条形图"},{value:"bar-y-category",icon:"bar-y-category",tooltipContent:"水平条形图"}],disabled:(e,t)=>{const o=t?.length;return!(o>=1)}},{showTypeName:"pie",label:"饼图",coverImg:"pie-simple.png",showType:4,subTypeList:[{value:"pie-simple",icon:"pie-simple",tooltipContent:"饼图"},{value:"pie-borderRadius",icon:"pie-borderRadius",tooltipContent:"环形图"}],baseConfig:{tooltip:{confine:!0,formatter:"{a}<br>{b}: {c}({d}%)",trigger:"item"},toolbox:{show:!1,showTitle:!1,feature:{saveAsImage:{}}},legend:{type:"scroll",top:"25px"}},disabled:(e,t)=>{const o=t?.length,a=e?.length;return!(a<=4&&o>0&&o<=1)}},{showTypeName:"area",label:"地图",coverImg:"area.png",showType:5,subTypeList:[],baseConfig:{tooltip:{confine:!0,trigger:"item"},toolbox:{show:!1,showTitle:!1,feature:{saveAsImage:{}}},visualMap:{text:["高","低"],realtime:!1,calculable:!0,inRange:{color:["lightskyblue","yellow","orangered"]}}},disabled:(e,t)=>{const o=t?.length,a=t?.some((e=>{let{colDesc:t}=e;return t.includes("省")||t.includes("市")}));return!(a&&o>0)}},{showTypeName:"funnel",label:"漏斗图",coverImg:"funnel.png",showType:6,subTypeList:[],baseConfig:{tooltip:{confine:!0,trigger:"item",formatter:"{a} <br/>{b} : {c}"},toolbox:{show:!1,showTitle:!1,feature:{saveAsImage:{}}},legend:{type:"scroll",top:20}},disabled:(e,t)=>{const o=t?.length,a=e?.length;return!(a<=5&&o>0&&o<=1)}},{showTypeName:"card",label:"卡片",coverImg:"card.png",showType:9,subTypeList:[],baseConfig:{},disabled:(e,t)=>{const o=t?.length,a=e?.length;return!(a>0&&o<=1)}},{showTypeName:"radar",label:"雷达图",coverImg:"radar.png",showType:10,subTypeList:[],baseConfig:{legend:{type:"scroll",orient:"vertical",left:"left",top:"25px"},tooltip:{confine:!0,trigger:"item"},toolbox:{show:!1,showTitle:!1,feature:{saveAsImage:{}}},radar:{center:["50%","55%"]}},disabled:(e,t)=>{const o=t?.length;return 1!==o||1!==e.length}},{showTypeName:"scatter-simple",label:"散点图",coverImg:"",showType:11,subTypeList:[],disabled:()=>!1,baseConfig:{grid:{left:"0",bottom:"10px",containLabel:!0},tooltip:{showDelay:0,axisPointer:{show:!0,type:"cross",lineStyle:{type:"dashed",width:1}}},toolbox:{show:!1,showTitle:!1,feature:{saveAsImage:{}}},legend:{type:"scroll",top:"25px"},xAxis:{splitLine:{lineStyle:{type:"dashed"}}},yAxis:{splitLine:{lineStyle:{type:"dashed"}}}}}]};function o(t,o){const a={};return t.forEach((t=>{a[t.showTypeName]=e(t.baseConfig,o)})),a}const a=o(t.data,{backgroundColor:"transparent",title:{textStyle:{fontSize:14,lineHeight:16}}});function s(e){return new Promise((t=>{const o={showbiz:!1,extensions:"all",...e};import("@amap/amap-jsapi-loader").then((e=>{let{default:t}=e;return t.load({key:"2e820fac2a528b016a4cb95bb463e69e",version:"1.4.15",plugins:["AMap.DistrictSearch"],AMapUI:{version:"1.1",plugins:["geo/DistrictExplorer"]}})})).then((a=>{new a.DistrictSearch(o).search(e.adcode,((e,o)=>{AMapUI.loadUI(["geo/DistrictExplorer"],(e=>{(new e).loadAreaNode(o.districtList[0].adcode,((e,o)=>{if(e)return void console.error(e);const a={features:[],type:"FeatureCollection"};a.features=o.getSubFeatures(),t(a)}))}))}))})).catch((e=>{console.error("Failed to load map:",e),t({features:[],type:"FeatureCollection"})}))}))}export{a as defaultChartOption,s as getGeoJsonData,t as iconList,o as setDefaultChartOption};
2
2
  //# sourceMappingURL=config.mjs.map
@@ -1,2 +1,2 @@
1
- import*as e from"echarts";import t from"../components/empty.svg.mjs";import{ref as o,onMounted as r,onUnmounted as n}from"vue";import{useMouseInElement as i,watchDebounced as c,useElementSize as a}from"@vueuse/core";function l(a){let{chartDOM:l,chartData:u,chartOptions:f,mountedBefore:m,initAfter:d,callback:h}=a,p=null;const x=o(!1),g=window.devicePixelRatio||1;function v(){p&&!p.isDisposed()&&(p.dispose(),p=null)}function y(){if(p&&x.value&&l.value){p.showLoading();try{p.isDisposed()&&(p=e.init(l.value,null,{devicePixelRatio:g,renderer:"svg"})),p.setOption(...arguments)}catch(t){console.log("error: ",t),v(),l.value&&(p=e.init(l.value,null,{devicePixelRatio:g,renderer:"svg"}),w("配置项错误"))}finally{p?.hideLoading()}}}const{isOutside:b}=i(l);function w(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"暂无数据";y({title:[{text:u.value?.modelName,...f.value.title},{subtext:e,top:"center",left:"center",text:" {a|}",itemGap:-20,textStyle:{align:"center",rich:{a:{color:"#000",fontSize:"16",height:80,width:160,backgroundColor:{image:t}}}},subtextStyle:{fontSize:16}}]},{notMerge:!0,replaceMerge:["xAxis","yAxis","series"],lazyUpdate:!1})}return c(b,(e=>{var t;"boolean"==typeof e&&(t=!e,p?.isDisposed()||p?.setOption({toolbox:{show:t}}))}),{debounce:200}),r((async()=>{m&&await m(),l.value&&(v(),p=e.init(l.value,null,{devicePixelRatio:g,renderer:"svg"}),h&&h(p),d&&await d(),s(p,l),x.value=!0,u.value?.data?.length?y(f.value,{}):w())})),n((()=>{p&&(p.getZr()?.off("mousemove"),p.getZr()?.off("mouseout"),v())})),{myChart:p}}function s(e,t){const{width:o,height:r}=a(t);c([o,r],(()=>{e&&e.resize()}))}function u(e){const{desc:{colDesc:t=[],groupByDesc:o=[]}={},data:r=[]}=e,n=[...o.map((e=>e.colDesc)),...t].filter((e=>e)),i=r.map((e=>n.map((t=>e[t]||""))));return[n,...i]}export{l as useCharts,u as useDataToExcelJson,s as useResize};
1
+ import*as e from"echarts";import t from"../components/empty.svg.mjs";import{ref as o,onMounted as i,onUnmounted as a}from"vue";import{useMouseInElement as n,watchDebounced as l,useElementSize as r}from"@vueuse/core";function s(r){let{chartDOM:s,chartData:u,chartOptions:d,mountedBefore:v,initAfter:f,callback:m}=r,p=null;const g=o(!1),h=window.devicePixelRatio||1;function x(){p&&!p.isDisposed()&&(p.dispose(),p=null)}function y(){if(p&&g.value&&s.value){p.showLoading();try{p.isDisposed()&&(p=e.init(s.value,null,{devicePixelRatio:h,renderer:"svg"})),p.setOption(...arguments)}catch(t){console.log("error: ",t),x(),s.value&&(p=e.init(s.value,null,{devicePixelRatio:h,renderer:"svg"}),D("配置项错误"))}finally{p?.hideLoading()}}}const{isOutside:w}=n(s);function D(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"暂无数据";y({title:[{text:u.value?.modelName,...d.value.title},{subtext:e,top:"center",left:"center",text:" {a|}",itemGap:-20,textStyle:{align:"center",rich:{a:{color:"#000",fontSize:"16",height:80,width:160,backgroundColor:{image:t}}}},subtextStyle:{fontSize:16}}]},{notMerge:!0,replaceMerge:["xAxis","yAxis","series"],lazyUpdate:!1})}return l(w,(e=>{var t;"boolean"==typeof e&&(t=!e,p?.isDisposed()||p?.setOption({toolbox:{show:t}}))}),{debounce:200}),i((async()=>{v&&await v(),s.value&&(x(),p=e.init(s.value,null,{devicePixelRatio:h,renderer:"svg"}),m&&m(p),f&&await f(),c(p,s),g.value=!0,u.value?.data?.length?y(d.value,{}):D())})),a((()=>{p&&(p.getZr()?.off("mousemove"),p.getZr()?.off("mouseout"),x())})),{myChart:p}}function c(e,t){const{width:o,height:i}=r(t);l([o,i],(()=>{e&&e.resize()}))}function u(e){const{desc:{colDesc:t=[],groupByDesc:o=[]}={},data:i=[]}=e,a=[...o.map((e=>e.colDesc)),...t].filter((e=>e)),n=i.map((e=>a.map((t=>e[t]||""))));return[a,...n]}export{s as useCharts,u as useDataToExcelJson,c as useResize};
2
2
  //# sourceMappingURL=useCharts.mjs.map
@@ -1,2 +1,2 @@
1
- import{ElUpload as e,ElIcon as t,ElAlert as l,ElMessage as i}from"element-plus/es";import{defineComponent as r,computed as a,createBlock as s,openBlock as o,normalizeClass as u,unref as d,withCtx as n,createElementVNode as p,createVNode as c,createTextVNode as m,createElementBlock as f,createCommentVNode as y}from"vue";import{UploadFilled as q}from"@element-plus/icons-vue";import{useNamespace as v}from"@qxs-bns/hooks";const _={class:"slot"},x={key:0,class:"el-upload__tip"},b={style:{display:"inline-block"}};var h=r({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(r,{emit:h}){const S=h,$=v("file-upload"),g=a((()=>r.accept.split(","))),k=e=>{const t=e.name.split(".").at(-1)??"",l=g.value.includes(t),a=e.size/1024/1024<r.size;return l||i.error(`上传文件只支持 ${g.value.join(" / ")} 格式!`),a||i.error(`上传文件大小不能超过 ${r.size}MB!`),l&&a},B=()=>{i.warning("文件上传超过限制")},z=(e,t,l)=>{S("onSuccess",e,t,l)};return(i,r)=>{const a=t,v=l,h=e;return o(),s(h,{headers:i.headers,action:i.action,data:i.data,name:i.name,"before-upload":k,"on-exceed":B,"on-success":z,"file-list":i.files,limit:i.max,drag:"",class:u(d($).e("control"))},{tip:n((()=>[i.notip?y("v-if",!0):(o(),f("div",x,[p("div",b,[c(v,{title:`上传文件支持 ${d(g).join(" / ")} 格式,单个文件大小不超过 ${i.size}MB,且文件数量不超过 ${i.max} 个`,type:"info","show-icon":"",closable:!1},null,8,["title"])])]))])),default:n((()=>[p("div",_,[c(a,{class:"el-icon--upload"},{default:n((()=>[c(d(q))])),_:1}),r[0]||(r[0]=p("div",{class:"el-upload__text"},[m("将文件拖到此处,或"),p("em",null,"点击上传")],-1))])])),_:1},8,["headers","action","data","name","file-list","limit","class"])}}});export{h as default};
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};
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\";\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\");\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=\"el-icon--upload\">\n <UploadFilled />\n </el-icon>\n <div class=\"el-upload__text\">将文件拖到此处,或<em>点击上传</em></div>\n </div>\n <template #tip>\n <div v-if=\"!notip\" class=\"el-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","exts","computed","__props","accept","split","beforeUpload","file","fileExt","name","at","isTypeOk","value","includes","isSizeOk","size","ElMessage","error","join","onExceed","warning","onSuccess","res","fileList"],"mappings":"0+BA6BA,MAAMA,EAAOC,EAEPC,EAAKC,EAAa,eAElBC,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,KACjD1B,EAAA,YAAayB,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":"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,2 +1,2 @@
1
- import{defineComponent as t,ref as e,computed as r,onMounted as o,onUnmounted as a,createElementBlock as i,openBlock as s,normalizeStyle as n,unref as l,createElementVNode as d,normalizeClass as p,renderSlot as c}from"vue";import{useNamespace as h}from"@qxs-bns/hooks";import{getDeviceType as u}from"@qxs-bns/utils";import{debounce as f}from"lodash-es";var m=t({name:"QxsFixedActionBar",props:{padding:{type:Number,default:8},className:{type:String,default:""}},setup(t){const m=t,x=h("fixed-action-bar"),b=e(!1),w=e(null),g=e(null),y=e({width:0,height:0}),v=e(0),F=e(0),$={resize:null,parent:null},k=(t,e,r)=>{const o=new ResizeObserver((t=>{t.forEach((t=>requestAnimationFrame((()=>e(t)))))}));return o.observe(t,r),o},q=()=>{if(!w.value||!g.value)return;$.resize=k(w.value,(t=>{const e=(t=>{const e=getComputedStyle(t);return{x:parseFloat(e.paddingLeft)+parseFloat(e.paddingRight),y:parseFloat(e.paddingTop)+parseFloat(e.paddingBottom)}})(t.target);y.value={width:t.contentRect.width+e.x,height:t.contentRect.height+e.y}}),{box:"border-box"});const t=g.value.parentElement;t&&($.parent=k(t,(()=>{const e=t.getBoundingClientRect();v.value=e.width,F.value=e.left})))},A=f((()=>{const{scrollY:t}=window,{clientHeight:e,scrollHeight:r}=document.documentElement;b.value=Math.ceil(t+e)>=r}),100),z=r((()=>b.value?"":x.is("shadow"))),H=r((()=>"Android"===u()?Math.max(m.padding,20):m.padding)),M=r((()=>({width:`${v.value}px`,left:`${F.value}px`,...x.cssVarBlock({"actionbar-padding":`${m.padding}px`,"actionbar-padding-bottom":`${H.value}px`})})));return o((()=>{q(),window.addEventListener("scroll",A,{passive:!0})})),a((()=>{$.resize?.disconnect(),$.parent?.disconnect(),window.removeEventListener("scroll",A)})),(e,r)=>(s(),i("div",{ref_key:"placeholderRef",ref:g,style:n({width:"100%",height:`${l(y).height}px`})},[d("div",{ref_key:"actionbar",ref:w,style:n(l(M)),class:p([l(x).e("actionbar"),l(z),t.className]),"data-fixed-calc-width":""},[c(e.$slots,"default")],6)],4))}});export{m as default};
1
+ import{defineComponent as e,ref as t,computed as a,onMounted as n,onUnmounted as i,createElementBlock as o,openBlock as r,normalizeStyle as l,unref as d,createElementVNode as s,normalizeClass as c,renderSlot as p}from"vue";import{useNamespace as u}from"@qxs-bns/hooks";import{getDeviceType as h}from"@qxs-bns/utils";import{debounce as g}from"lodash-es";var m=e({name:"QxsFixedActionBar",props:{padding:{type:Number,default:8},className:{type:String,default:""}},setup(e){const m=e,v=u("fixed-action-bar"),f=t(!1),x=t(null),w=t(null),b=t({width:0,height:0}),y=t(0),F=t(0),R={resize:null,parent:null},$=(e,t,a)=>{const n=new ResizeObserver((e=>{e.forEach((e=>requestAnimationFrame((()=>t(e)))))}));return n.observe(e,a),n},E=()=>{if(!x.value||!w.value)return;R.resize=$(x.value,(e=>{const t=(e=>{const t=getComputedStyle(e);return{x:parseFloat(t.paddingLeft)+parseFloat(t.paddingRight),y:parseFloat(t.paddingTop)+parseFloat(t.paddingBottom)}})(e.target);b.value={width:e.contentRect.width+t.x,height:e.contentRect.height+t.y}}),{box:"border-box"});const e=w.value.parentElement;e&&(R.parent=$(e,(()=>{const t=e.getBoundingClientRect();y.value=t.width,F.value=t.left})))},k=g((()=>{const{scrollY:e}=window,{clientHeight:t,scrollHeight:a}=document.documentElement;f.value=Math.ceil(e+t)>=a}),100),z=a((()=>f.value?"":v.is("shadow"))),B=a((()=>"Android"===h()?Math.max(m.padding,20):m.padding)),q=a((()=>({width:`${y.value}px`,left:`${F.value}px`,...v.cssVarBlock({"actionbar-padding":`${m.padding}px`,"actionbar-padding-bottom":`${B.value}px`})})));return n((()=>{E(),window.addEventListener("scroll",k,{passive:!0})})),i((()=>{R.resize?.disconnect(),R.parent?.disconnect(),window.removeEventListener("scroll",k)})),(t,a)=>(r(),o("div",{ref_key:"placeholderRef",ref:w,style:l({width:"100%",height:`${d(b).height}px`})},[s("div",{ref_key:"actionbar",ref:x,style:l(d(q)),class:c([d(v).e("actionbar"),d(z),e.className]),"data-fixed-calc-width":""},[p(t.$slots,"default")],6)],4))}});export{m as default};
2
2
  //# sourceMappingURL=fixed-action-bar.vue.mjs.map
@@ -1,2 +1,2 @@
1
- import{ElUpload as e,ElImage as t,ElIcon as l,ElProgress as i,ElImageViewer as r,ElMessage as s}from"element-plus/es";import{defineComponent as a,ref as p,computed as u,createElementBlock as n,openBlock as d,normalizeClass as o,unref as c,createVNode as f,createCommentVNode as g,createBlock as m,withCtx as y,withDirectives as h,normalizeStyle as $,createElementVNode as x,toDisplayString as q,withModifiers as v,vShow as w}from"vue";import{Plus as k,ZoomIn as _,Delete as b}from"@element-plus/icons-vue";import{useNamespace as S}from"@qxs-bns/hooks";const B={key:1,class:"image"},C={class:"mask"},M={class:"actions"},N={key:0,class:"el-upload__tip-text"},U={style:{display:"inline-block"}};var j=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:j}){const V=a,z=j,I=S("image-upload"),L=p({imageViewerVisible:!1,progress:{preview:"",percent:0}}),Q=u((()=>V.accept.split(",").map((e=>e.split("/").pop()))));function R(){L.value.imageViewerVisible=!0}function T(){L.value.imageViewerVisible=!1}function A(){z("update:url","")}const D=e=>{const t=e.name.split(".").at(-1)??"",l=Q.value.includes(t),i=e.size/1024/1024<V.size;return l?i?L.value.progress.preview=URL.createObjectURL(e):s.error(`上传图片大小不能超过 ${V.size}MB!`):s.error(`上传图片只支持${Q.value.join(" / ")}格式!`),l&&i&&(!V.beforeUpload||V.beforeUpload(e))},E=e=>{L.value.progress.percent=~~e.percent},F=(...e)=>{L.value.progress.preview="",L.value.progress.percent=0,z("onSuccess",...e)};return(s,a)=>{const p=l,u=t,S=i,j=e,V=r;return d(),n("div",{class:o(c(I).e("upload-container"))},[f(j,{"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:o(c(I).e("image-upload"))},{default:y((()=>[""===s.url?(d(),m(u,{key:0,src:""===s.url?s.placeholder:s.url,style:$(`width:${s.width}px;height:${s.height}px;`),fit:"fill"},{error:y((()=>[x("div",{class:"image-slot",style:$(`width:${s.width}px;height:${s.height}px;`)},[f(p,null,{default:y((()=>[f(c(k))])),_:1}),x("p",null,q(s.placeholder),1)],4)])),_:1},8,["src","style"])):(d(),n("div",B,[f(u,{src:s.url,style:$(`width:${s.width}px;height:${s.height}px;`),fit:"fill"},null,8,["src","style"]),x("div",C,[x("div",M,[x("span",{title:"预览",onClick:v(R,["stop"])},[f(p,null,{default:y((()=>[f(c(_))])),_:1})]),x("span",{title:"移除",onClick:v(A,["stop"])},[f(p,null,{default:y((()=>[f(c(b))])),_:1})])])])])),h(x("div",{class:"progress",style:$(`width:${s.width}px;height:${s.height}px;`)},[f(u,{src:c(L).progress.preview,style:$(`width:${s.width}px;height:${s.height}px;`),fit:"fill"},null,8,["src","style"]),f(S,{type:"circle",width:.8*Math.min(s.width,s.height),percentage:c(L).progress.percent},null,8,["width","percentage"])],4),[[w,""===s.url&&c(L).progress.percent]])])),_:1},8,["headers","action","data","name","accept","class"]),s.notip?g("v-if",!0):(d(),n("div",N,[x("div",U,q(s.tipText||`上传图片支持 ${c(Q).join(" / ")} 格式,且图片大小不超过 ${s.size}MB,建议图片尺寸为 ${s.width}*${s.height}`),1)])),c(L).imageViewerVisible?(d(),m(V,{key:1,"url-list":[s.url],teleported:"",onClose:T},null,8,["url-list"])):g("v-if",!0)],2)}}});export{j as default};
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};
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'\n\ndefineOptions({\n name: 'QxsImageUpload',\n})\nconst props = withDefaults(\n defineProps<{\n action: UploadProps['action']\n headers?: UploadProps['headers']\n data?: UploadProps['data']\n name?: UploadProps['name']\n url?: string\n size?: number\n width?: number\n accept?: string\n height?: number\n placeholder?: string\n notip?: boolean\n tipText?: string\n beforeUpload?: UploadProps['beforeUpload']\n }>(),\n {\n name: 'file',\n url: '',\n size: 20,\n width: 160,\n height: 90,\n placeholder: '点击上传图片',\n notip: false,\n accept: 'image/jpeg,image/jpg,image/png,image/gif',\n },\n)\nconst emits = defineEmits<{\n 'update:url': [\n url: string,\n ]\n 'onSuccess': [\n res: any,\n uploadFile: UploadFile,\n uploadFiles: UploadFiles,\n ]\n}>()\n\nconst ns = useNamespace('image-upload')\n\nconst uploadData = ref({\n imageViewerVisible: false,\n progress: {\n preview: '',\n percent: 0,\n },\n})\n\nconst exts = computed(() => {\n return props.accept.split(',').map(ext => ext.split('/').pop())\n})\n\n// 预览\nfunction preview() {\n uploadData.value.imageViewerVisible = true\n}\n// 关闭预览\nfunction previewClose() {\n uploadData.value.imageViewerVisible = false\n}\n// 移除\nfunction remove() {\n emits('update:url', '')\n}\nconst handleBeforeUpload: UploadProps['beforeUpload'] = (file) => {\n const fileName = file.name.split('.')\n const fileExt = fileName.at(-1) ?? ''\n const isTypeOk = exts.value.includes(fileExt)\n const isSizeOk = file.size / 1024 / 1024 < props.size\n\n if (!isTypeOk) {\n ElMessage.error(`上传图片只支持${exts.value.join(' / ')}格式!`)\n }\n\n else if (!isSizeOk) {\n ElMessage.error(`上传图片大小不能超过 ${props.size}MB!`)\n }\n else {\n uploadData.value.progress.preview = URL.createObjectURL(file)\n }\n\n return isTypeOk && isSizeOk && (!props.beforeUpload || props.beforeUpload(file))\n}\nconst onProgress: UploadProps['onProgress'] = (file) => {\n uploadData.value.progress.percent = ~~file.percent\n}\nconst onSuccess: UploadProps['onSuccess'] = (...res) => {\n uploadData.value.progress.preview = ''\n uploadData.value.progress.percent = 0\n emits('onSuccess', ...res)\n}\n</script>\n\n<template>\n <div :class=\"ns.e('upload-container')\">\n <el-upload\n :show-file-list=\"false\"\n :headers=\"headers\"\n :action=\"action\"\n :data=\"data\"\n :name=\"name\"\n :before-upload=\"handleBeforeUpload\"\n :on-progress=\"onProgress\"\n :on-success=\"onSuccess\"\n drag\n :accept=\"accept\"\n :class=\"ns.e('image-upload')\"\n >\n <el-image\n v-if=\"url === ''\"\n :src=\"url === '' ? placeholder : url\"\n :style=\"`width:${width}px;height:${height}px;`\"\n fit=\"fill\"\n >\n <template #error>\n <div class=\"image-slot\" :style=\"`width:${width}px;height:${height}px;`\">\n <el-icon>\n <Plus />\n </el-icon>\n <p>\n {{ placeholder }}\n </p>\n </div>\n </template>\n </el-image>\n <div v-else class=\"image\">\n <el-image\n :src=\"url\"\n :style=\"`width:${width}px;height:${height}px;`\"\n fit=\"fill\"\n />\n <div class=\"mask\">\n <div class=\"actions\">\n <span title=\"预览\" @click.stop=\"preview\">\n <el-icon><ZoomIn /></el-icon>\n </span>\n <span title=\"移除\" @click.stop=\"remove\">\n <el-icon>\n <Delete />\n </el-icon>\n </span>\n </div>\n </div>\n </div>\n <div\n v-show=\"url === '' && uploadData.progress.percent\"\n class=\"progress\"\n :style=\"`width:${width}px;height:${height}px;`\"\n >\n <el-image\n :src=\"uploadData.progress.preview\"\n :style=\"`width:${width}px;height:${height}px;`\"\n fit=\"fill\"\n />\n <el-progress\n type=\"circle\"\n :width=\"Math.min(width, height) * 0.8\"\n :percentage=\"uploadData.progress.percent\"\n />\n </div>\n </el-upload>\n <div v-if=\"!notip\" class=\"el-upload__tip-text\">\n <div style=\"display: inline-block;\">\n {{ tipText || `上传图片支持 ${exts.join(' / ')} 格式,且图片大小不超过 ${size}MB,建议图片尺寸为 ${width}*${height}` }}\n </div>\n </div>\n <el-image-viewer\n v-if=\"uploadData.imageViewerVisible\"\n :url-list=\"[url]\"\n teleported\n @close=\"previewClose\"\n />\n </div>\n</template>\n"],"names":["props","__props","emits","__emit","ns","useNamespace","uploadData","ref","imageViewerVisible","progress","preview","percent","exts","computed","accept","split","map","ext","pop","value","previewClose","remove","handleBeforeUpload","file","fileExt","name","at","isTypeOk","includes","isSizeOk","size","URL","createObjectURL","ElMessage","error","join","beforeUpload","onProgress","onSuccess","res"],"mappings":"y1CAQA,MAAMA,EAAQC,EA2BRC,EAAQC,EAWRC,EAAKC,EAAa,gBAElBC,EAAaC,EAAI,CACrBC,oBAAoB,EACpBC,SAAU,CACRC,QAAS,GACTC,QAAS,KAIPC,EAAOC,GAAS,IACbb,EAAMc,OAAOC,MAAM,KAAKC,KAAWC,GAAAA,EAAIF,MAAM,KAAKG,UAI3D,SAASR,IACPJ,EAAWa,MAAMX,oBAAqB,CAAA,CAGxC,SAASY,IACPd,EAAWa,MAAMX,oBAAqB,CAAA,CAGxC,SAASa,IACPnB,EAAM,aAAc,GAAE,CAElB,MAAAoB,EAAmDC,IACvD,MACMC,EADWD,EAAKE,KAAKV,MAAM,KACRW,IAAG,IAAO,GAC7BC,EAAWf,EAAKO,MAAMS,SAASJ,GAC/BK,EAAWN,EAAKO,KAAO,KAAO,KAAO9B,EAAM8B,KAajD,OAXKH,EAIKE,EAIRvB,EAAWa,MAAMV,SAASC,QAAUqB,IAAIC,gBAAgBT,GAHxDU,EAAUC,MAAM,cAAclC,EAAM8B,WAJpCG,EAAUC,MAAM,UAAUtB,EAAKO,MAAMgB,KAAK,aAUrCR,GAAYE,KAAc7B,EAAMoC,cAAgBpC,EAAMoC,aAAab,GAAI,EAE1Ec,EAAyCd,IAC7CjB,EAAWa,MAAMV,SAASE,UAAYY,EAAKZ,OAAA,EAEvC2B,EAAsC,IAAIC,KACnCjC,EAAAa,MAAMV,SAASC,QAAU,GACzBJ,EAAAa,MAAMV,SAASE,QAAU,EAC9BT,EAAA,eAAgBqC,EAAG"}
1
+ {"version":3,"file":"image-upload.vue.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,2 +1,2 @@
1
- import{ref as n}from"vue";function e(e){const o=n(null);e&&(o.value=e.getContext("2d"));return{clearCanvas:()=>{o.value&&o.value.clearRect(0,0,e.width,e.height)},drawColor:(n,e,a,l,r)=>{o.value&&(o.value.fillStyle=r,o.value.fillRect(n,e,a,l))},drawImage:(n,e,a,l,r)=>{o.value.drawImage(n,e,a,l,r)},cropCanvas:(n,a,l,r)=>new Promise((c=>{if(o.value){const o=document.createElement("canvas");o.width=l,o.height=r;const s=o.getContext("2d");s?(s.drawImage(e,n,a,l,r,0,0,l,r),o.toBlob((n=>{if(n){const e=new File([n],"cropped_image.png",{type:"image/png"});c(e)}else c(null)}),"image/png")):c(null)}else c(null)}))}}export{e as useCanvas};
1
+ import{ref as e}from"vue";function l(l){const a=e(null);l&&(a.value=l.getContext("2d"));return{clearCanvas:()=>{a.value&&a.value.clearRect(0,0,l.width,l.height)},drawColor:(e,l,t,n,o)=>{a.value&&(a.value.fillStyle=o,a.value.fillRect(e,l,t,n))},drawImage:(e,l,t,n,o)=>{a.value.drawImage(e,l,t,n,o)},cropCanvas:(e,t,n,o)=>new Promise((r=>{if(a.value){const a=document.createElement("canvas");a.width=n,a.height=o;const u=a.getContext("2d");u?(u.drawImage(l,e,t,n,o,0,0,n,o),a.toBlob((e=>{if(e){const l=new File([e],"cropped_image.png",{type:"image/png"});r(l)}else r(null)}),"image/png")):r(null)}else r(null)}))}}export{l as useCanvas};
2
2
  //# sourceMappingURL=composables.mjs.map
@@ -1,2 +1,2 @@
1
- import{defineComponent as t,ref as e,computed as o,watch as i,onMounted as n,nextTick as s,onUnmounted as r,createElementBlock as l,openBlock as f,normalizeClass as c,unref as u,toDisplayString as h,Fragment as m,createElementVNode as a,normalizeStyle as d}from"vue";import{useNamespace as p}from"@qxs-bns/hooks";import{useCanvas as g}from"./composables.mjs";import{useElementSize as b,useDraggable as w}from"@vueuse/core";const x=["src"];var y=t({name:"QxsPhotoCropTool",__name:"photo-crop-tool",props:{imgFile:{type:Object,default:()=>null},aspectRatio:{type:String,default:()=>"16 / 9"},defaultWidth:{type:Number,default:()=>320},defaultHeight:{type:Number,default:()=>180},zoomType:{type:String,default:()=>"fixed"}},setup(t,{expose:y}){const v=t;let N=0,M=0,R=0,k=0;const $=p("photo-crop-tool"),_=e(null),C=e(null),j=e(null),z=e(""),B=e(""),E=e({x:0,y:0}),L=e({width:v.defaultWidth,height:v.defaultHeight,x:0,y:0}),{width:S,height:T}=b(_),{width:U}=b(j),{x:q,y:F,style:H}=w(_,{containerElement:C,draggingElement:_,disabled:o((()=>!!B.value)),exact:!0,initialValue:E}),I=o((()=>v.imgFile?URL.createObjectURL(v.imgFile):""));i((()=>v.imgFile),(t=>{t&&!t.type.startsWith("image/")?z.value="文件类型错误":z.value=""}));const O=o((()=>(j.value?.naturalWidth||0)/U.value)),P=o((()=>{const t={left:0,top:0};return"bottom-right"===B.value?(t.left=L.value.x,t.top=L.value.y):"top-left"===B.value?(t.left=L.value.x-S.value,t.top=L.value.y-T.value):"top-right"===B.value?(t.top=L.value.y-T.value,t.left=L.value.x):"bottom-left"===B.value&&(t.left=L.value.x-S.value,t.top=L.value.y),t})),Q=o((()=>{const{aspectRatio:t}=v,e={width:`${L.value.width||v.defaultWidth}`,height:`${L.value.height||v.defaultHeight}`,"aspect-ratio":t,top:`${P.value.top}px`,left:`${P.value.left}px`};return"free"===v.zoomType?delete e["aspect-ratio"]:"fixed"===v.zoomType&&delete e.height,$.cssVarBlock(e)}));function V(t){return t*O.value}function W(t,e){const o=C.value?.clientWidth||1/0,i=C.value?.clientHeight||1/0;return{width:Math.min(Math.max(t,0),o),height:Math.min(Math.max(e,0),i)}}function A(t){const e=t.clientX-N,o=t.clientY-M;if("bottom-right"===B.value){if("free"===v.zoomType){const{width:t,height:i}=W(R+e,k+o);L.value.width=t,L.value.height=i}else if("fixed"===v.zoomType){const t=Number.parseFloat(v.aspectRatio.split(" / ")[0])/Number.parseFloat(v.aspectRatio.split(" / ")[1]);let o=R+e,i=o/t;const{width:n,height:s}=W(o,i);s>(C.value?.clientHeight||1/0)&&(i=C.value?.clientHeight||1/0,o=i*t),L.value.width=n,L.value.height=s}}else if("top-left"===B.value){if("free"===v.zoomType){const{width:t,height:i}=W(R-e,k-o);L.value.width=t,L.value.height=i}else if("fixed"===v.zoomType){const t=Number.parseFloat(v.aspectRatio.split(" / ")[0])/Number.parseFloat(v.aspectRatio.split(" / ")[1]);let o=R-e,i=o/t;const{width:n,height:s}=W(o,i);s>(C.value?.clientHeight||1/0)&&(i=C.value?.clientHeight||1/0,o=i*t),L.value.width=n,L.value.height=s}q.value=P.value.left,F.value=P.value.top}else if("top-right"===B.value){if("free"===v.zoomType){const{width:t,height:i}=W(R+e,k-o);L.value.width=t,L.value.height=i}else if("fixed"===v.zoomType){const t=Number.parseFloat(v.aspectRatio.split(" / ")[0])/Number.parseFloat(v.aspectRatio.split(" / ")[1]);let o=R+e,i=o/t;const{width:n,height:s}=W(o,i);s>(C.value?.clientHeight||1/0)&&(i=C.value?.clientHeight||1/0,o=i*t),L.value.width=n,L.value.height=s}q.value=P.value.left,F.value=P.value.top}else if("bottom-left"===B.value){if("free"===v.zoomType){const{width:t,height:i}=W(R-e,k+o);L.value.width=t,L.value.height=i}else if("fixed"===v.zoomType){const t=Number.parseFloat(v.aspectRatio.split(" / ")[0])/Number.parseFloat(v.aspectRatio.split(" / ")[1]);let o=R-e,i=o/t;const{width:n,height:s}=W(o,i);s>(C.value?.clientHeight||1/0)&&(i=C.value?.clientHeight||1/0,o=i*t),L.value.width=n,L.value.height=s}q.value=P.value.left,F.value=P.value.top}t.preventDefault(),t.stopPropagation()}function D(t,e){B.value=e,N=t.clientX,M=t.clientY,R=L.value.width,k=L.value.height,"bottom-right"===e?(L.value.x=q.value,L.value.y=F.value):"top-left"===e?(L.value.x=q.value+S.value,L.value.y=F.value+T.value):"top-right"===e?(L.value.x=q.value,L.value.y=F.value+T.value):"bottom-left"===e&&(L.value.x=q.value+S.value,L.value.y=F.value)}function G(){B.value=""}return document.addEventListener("mouseup",G),document.addEventListener("mousemove",A),n((()=>{s((()=>{E.value.x=(C.value?.offsetWidth||0)/2-L.value.width/2,E.value.y=(C.value?.offsetHeight||0)/2-L.value.height/2}))})),r((()=>{I.value&&URL.revokeObjectURL(I.value),document.removeEventListener("mouseup",G),document.removeEventListener("mousemove",A)})),y({crop:async function(t=j.value){let e="transparent";C.value&&(e=window.getComputedStyle(C.value).backgroundColor);const o=document.createElement("canvas");o.width=V(C.value?.clientWidth||0),o.height=V(C.value?.clientHeight||0);const{drawImage:i,cropCanvas:n,drawColor:s}=g(o);return s(0,0,o.width,o.height,e),i(t,V(t.offsetLeft),V(t.offsetTop),t.naturalWidth,t.naturalHeight),await n(V(q.value),V(F.value),V(S.value),V(T.value))},resize:function(){L.value.width=v.defaultWidth,L.value.height=v.defaultHeight,q.value=0,F.value=0}}),(t,e)=>(f(),l("div",{ref_key:"containerBoxRef",ref:C,class:c([u($).e("img-box")])},[u(z)?(f(),l("div",{key:0,class:c([u($).e("error-message")])},h(u(z)),3)):(f(),l(m,{key:1},[a("img",{ref_key:"imgRef",ref:j,class:c([u($).e("image")]),src:u(I)},null,10,x),a("div",{ref_key:"cropBoxRef",ref:_,class:c([u($).e("crop-tool-box")]),style:d([u(Q),u(B)?`left: ${u(P).left}px;top: ${u(P).top}px`:u(H)])},[a("div",{class:c([u($).e("top-left")]),onMousedown:e[0]||(e[0]=t=>D(t,"top-left"))},null,34),a("div",{class:c([u($).e("top-right")]),onMousedown:e[1]||(e[1]=t=>D(t,"top-right"))},null,34),a("div",{class:c([u($).e("bottom-right")]),onMousedown:e[2]||(e[2]=t=>D(t,"bottom-right"))},null,34),a("div",{class:c([u($).e("bottom-left")]),onMousedown:e[3]||(e[3]=t=>D(t,"bottom-left"))},null,34)],6)],64))],2))}});export{y as default};
1
+ import{defineComponent as e,ref as t,computed as l,watch as a,onMounted as o,nextTick as i,onUnmounted as u,createElementBlock as v,openBlock as h,normalizeClass as s,unref as n,toDisplayString as r,Fragment as p,createElementVNode as c,normalizeStyle as f}from"vue";import{useNamespace as d}from"@qxs-bns/hooks";import{useCanvas as m}from"./composables.mjs";import{useElementSize as g,useDraggable as y}from"@vueuse/core";const w=["src"];var x=e({name:"QxsPhotoCropTool",__name:"photo-crop-tool",props:{imgFile:{type:Object,default:()=>null},aspectRatio:{type:String,default:()=>"16 / 9"},defaultWidth:{type:Number,default:()=>320},defaultHeight:{type:Number,default:()=>180},zoomType:{type:String,default:()=>"fixed"}},setup(e,{expose:x}){const b=e;let R=0,H=0,T=0,z=0;const F=d("photo-crop-tool"),N=t(null),W=t(null),k=t(null),L=t(""),M=t(""),E=t({x:0,y:0}),$=t({width:b.defaultWidth,height:b.defaultHeight,x:0,y:0}),{width:C,height:_}=g(N),{width:j}=g(k),{x:U,y:B,style:O}=y(N,{containerElement:W,draggingElement:N,disabled:l((()=>!!M.value)),exact:!0,initialValue:E}),S=l((()=>b.imgFile?URL.createObjectURL(b.imgFile):""));a((()=>b.imgFile),(e=>{e&&!e.type.startsWith("image/")?L.value="文件类型错误":L.value=""}));const P=l((()=>(k.value?.naturalWidth||0)/j.value)),V=l((()=>{const e={left:0,top:0};return"bottom-right"===M.value?(e.left=$.value.x,e.top=$.value.y):"top-left"===M.value?(e.left=$.value.x-C.value,e.top=$.value.y-_.value):"top-right"===M.value?(e.top=$.value.y-_.value,e.left=$.value.x):"bottom-left"===M.value&&(e.left=$.value.x-C.value,e.top=$.value.y),e})),X=l((()=>{const{aspectRatio:e}=b,t={width:`${$.value.width||b.defaultWidth}`,height:`${$.value.height||b.defaultHeight}`,"aspect-ratio":e,top:`${V.value.top}px`,left:`${V.value.left}px`};return"free"===b.zoomType?delete t["aspect-ratio"]:"fixed"===b.zoomType&&delete t.height,F.cssVarBlock(t)}));function Y(e){return e*P.value}function q(e,t){const l=W.value?.clientWidth||1/0,a=W.value?.clientHeight||1/0;return{width:Math.min(Math.max(e,0),l),height:Math.min(Math.max(t,0),a)}}function D(e){const t=e.clientX-R,l=e.clientY-H;if("bottom-right"===M.value){if("free"===b.zoomType){const{width:e,height:a}=q(T+t,z+l);$.value.width=e,$.value.height=a}else if("fixed"===b.zoomType){const e=Number.parseFloat(b.aspectRatio.split(" / ")[0])/Number.parseFloat(b.aspectRatio.split(" / ")[1]);let l=T+t,a=l/e;const{width:o,height:i}=q(l,a);i>(W.value?.clientHeight||1/0)&&(a=W.value?.clientHeight||1/0,l=a*e),$.value.width=o,$.value.height=i}}else if("top-left"===M.value){if("free"===b.zoomType){const{width:e,height:a}=q(T-t,z-l);$.value.width=e,$.value.height=a}else if("fixed"===b.zoomType){const e=Number.parseFloat(b.aspectRatio.split(" / ")[0])/Number.parseFloat(b.aspectRatio.split(" / ")[1]);let l=T-t,a=l/e;const{width:o,height:i}=q(l,a);i>(W.value?.clientHeight||1/0)&&(a=W.value?.clientHeight||1/0,l=a*e),$.value.width=o,$.value.height=i}U.value=V.value.left,B.value=V.value.top}else if("top-right"===M.value){if("free"===b.zoomType){const{width:e,height:a}=q(T+t,z-l);$.value.width=e,$.value.height=a}else if("fixed"===b.zoomType){const e=Number.parseFloat(b.aspectRatio.split(" / ")[0])/Number.parseFloat(b.aspectRatio.split(" / ")[1]);let l=T+t,a=l/e;const{width:o,height:i}=q(l,a);i>(W.value?.clientHeight||1/0)&&(a=W.value?.clientHeight||1/0,l=a*e),$.value.width=o,$.value.height=i}U.value=V.value.left,B.value=V.value.top}else if("bottom-left"===M.value){if("free"===b.zoomType){const{width:e,height:a}=q(T-t,z+l);$.value.width=e,$.value.height=a}else if("fixed"===b.zoomType){const e=Number.parseFloat(b.aspectRatio.split(" / ")[0])/Number.parseFloat(b.aspectRatio.split(" / ")[1]);let l=T-t,a=l/e;const{width:o,height:i}=q(l,a);i>(W.value?.clientHeight||1/0)&&(a=W.value?.clientHeight||1/0,l=a*e),$.value.width=o,$.value.height=i}U.value=V.value.left,B.value=V.value.top}e.preventDefault(),e.stopPropagation()}function I(e,t){M.value=t,R=e.clientX,H=e.clientY,T=$.value.width,z=$.value.height,"bottom-right"===t?($.value.x=U.value,$.value.y=B.value):"top-left"===t?($.value.x=U.value+C.value,$.value.y=B.value+_.value):"top-right"===t?($.value.x=U.value,$.value.y=B.value+_.value):"bottom-left"===t&&($.value.x=U.value+C.value,$.value.y=B.value)}function Q(){M.value=""}return document.addEventListener("mouseup",Q),document.addEventListener("mousemove",D),o((()=>{i((()=>{E.value.x=(W.value?.offsetWidth||0)/2-$.value.width/2,E.value.y=(W.value?.offsetHeight||0)/2-$.value.height/2}))})),u((()=>{S.value&&URL.revokeObjectURL(S.value),document.removeEventListener("mouseup",Q),document.removeEventListener("mousemove",D)})),x({crop:async function(e=k.value){let t="transparent";W.value&&(t=window.getComputedStyle(W.value).backgroundColor);const l=document.createElement("canvas");l.width=Y(W.value?.clientWidth||0),l.height=Y(W.value?.clientHeight||0);const{drawImage:a,cropCanvas:o,drawColor:i}=m(l);return i(0,0,l.width,l.height,t),a(e,Y(e.offsetLeft),Y(e.offsetTop),e.naturalWidth,e.naturalHeight),await o(Y(U.value),Y(B.value),Y(C.value),Y(_.value))},resize:function(){$.value.width=b.defaultWidth,$.value.height=b.defaultHeight,U.value=0,B.value=0}}),(e,t)=>(h(),v("div",{ref_key:"containerBoxRef",ref:W,class:s([n(F).e("img-box")])},[n(L)?(h(),v("div",{key:0,class:s([n(F).e("error-message")])},r(n(L)),3)):(h(),v(p,{key:1},[c("img",{ref_key:"imgRef",ref:k,class:s([n(F).e("image")]),src:n(S)},null,10,w),c("div",{ref_key:"cropBoxRef",ref:N,class:s([n(F).e("crop-tool-box")]),style:f([n(X),n(M)?`left: ${n(V).left}px;top: ${n(V).top}px`:n(O)])},[c("div",{class:s([n(F).e("top-left")]),onMousedown:t[0]||(t[0]=e=>I(e,"top-left"))},null,34),c("div",{class:s([n(F).e("top-right")]),onMousedown:t[1]||(t[1]=e=>I(e,"top-right"))},null,34),c("div",{class:s([n(F).e("bottom-right")]),onMousedown:t[2]||(t[2]=e=>I(e,"bottom-right"))},null,34),c("div",{class:s([n(F).e("bottom-left")]),onMousedown:t[3]||(t[3]=e=>I(e,"bottom-left"))},null,34)],6)],64))],2))}});export{x as default};
2
2
  //# sourceMappingURL=photo-crop-tool.vue.mjs.map
@@ -1,2 +1,2 @@
1
- import{ElPopover as e,ElLink as l,ElCheckbox as t,ElButton as a,ElIcon as n,ElDialog as o,ElRadioGroup as u,ElRadio as s}from"element-plus/es";import{defineComponent as i,ref as d,computed as c,createElementBlock as m,openBlock as r,normalizeClass as f,unref as p,createElementVNode as y,createCommentVNode as b,createVNode as v,createBlock as k,withCtx as _,createTextVNode as g,isRef as V,Fragment as x,renderList as w,toDisplayString as C}from"vue";import{Edit as h,Delete as j,Top as B,Bottom as U}from"@element-plus/icons-vue";import{useNamespace as z}from"@qxs-bns/hooks";import S from"../../subject-type/src/subject-type.vue.mjs";const T={key:0,class:"flex-justify-between"},A={class:"flex-justify-between"},E={key:0,class:"has-set"},N={key:1,class:"flex flex-justify-end action-buttons"};var O=i({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(i,{emit:O}){const R=i,q=d(R.isKey),K=d(!1),Q=O,D=d(R.answerCheckType),F=z("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(){K.value=!1,Q("set-answer-setting",D.value)}function L(){Q("set-key",q.value)}function M(e,l){Q("add",e,l?R.examAnswerRelationType:null)}return(d,c)=>{const z=l,O=e,R=t,P=n,W=a,X=s,Y=u,Z=o;return r(),m("div",{class:f(p(F).e("action-exam"))},[y("div",{class:f(["action flex flex-justify-between",{active:i.isEdit}])},[b(" 编辑模式 "),i.isEdit?(r(),m("div",T,[v(O,{trigger:"click"},{reference:_((()=>[v(z,{type:"primary",class:"btn-margin"},{default:_((()=>c[15]||(c[15]=[g("+在此题后加入新题")]))),_:1})])),default:_((()=>[v(S,{onSelect:M})])),_:1}),i.showRichText?(r(),k(z,{key:0,type:"primary",class:"btn-margin",onClick:c[0]||(c[0]=e=>Q("on-show-rich-text"))},{default:_((()=>c[16]||(c[16]=[g(" +添加题目描述(图文) ")]))),_:1})):b("v-if",!0),i.showOtherOption?(r(),k(z,{key:1,type:"primary",class:"btn-margin",onClick:c[1]||(c[1]=e=>K.value=!0)},{default:_((()=>c[17]||(c[17]=[g(" 答题设置 ")]))),_:1})):b("v-if",!0),i.showOtherOption?(r(),k(R,{key:2,modelValue:p(q),"onUpdate:modelValue":c[2]||(c[2]=e=>V(q)?q.value=e:null),label:"核心题",onChange:L},null,8,["modelValue"])):b("v-if",!0)])):(r(),m(x,{key:1},[b(" 非编辑模式 "),y("div",A,[i.showOtherOption?(r(),k(R,{key:0,modelValue:p(q),"onUpdate:modelValue":c[3]||(c[3]=e=>V(q)?q.value=e:null),label:"核心题",disabled:""},null,8,["modelValue"])):b("v-if",!0),i.showOtherOption?(r(),k(R,{key:1,modelValue:p(G),"onUpdate:modelValue":c[4]||(c[4]=e=>V(G)?G.value=e:null),label:p(I),disabled:"",class:"btn-margin"},null,8,["modelValue","label"])):b("v-if",!0)])],2112)),b(" 操作按钮 "),y("div",null,[i.isSet?(r(),m("div",E,"*此题设置了跳题逻辑")):(r(),m("div",N,[i.isEdit?(r(),m(x,{key:1},[v(W,{class:"btn-margin",onClick:c[9]||(c[9]=e=>Q("delete"))},{default:_((()=>c[22]||(c[22]=[g("删除")]))),_:1}),v(W,{type:"primary",onClick:c[10]||(c[10]=e=>Q("save"))},{default:_((()=>c[23]||(c[23]=[g("完成编辑")]))),_:1})],64)):(r(),m(x,{key:0},[i.pageEnd?b("v-if",!0):(r(),k(W,{key:0,class:"btn-margin",onClick:c[5]||(c[5]=e=>Q("edit"))},{icon:_((()=>[v(P,null,{default:_((()=>[v(p(h))])),_:1})])),default:_((()=>[c[18]||(c[18]=g(" 编辑 "))])),_:1})),v(W,{class:"btn-margin",onClick:c[6]||(c[6]=e=>Q("delete"))},{icon:_((()=>[v(P,null,{default:_((()=>[v(p(j))])),_:1})])),default:_((()=>[c[19]||(c[19]=g(" 删除 "))])),_:1}),v(W,{class:"btn-margin",onClick:c[7]||(c[7]=e=>Q("move-up"))},{icon:_((()=>[v(P,null,{default:_((()=>[v(p(B))])),_:1})])),default:_((()=>[c[20]||(c[20]=g(" 上移 "))])),_:1}),v(W,{class:"btn-margin",onClick:c[8]||(c[8]=e=>Q("move-down"))},{icon:_((()=>[v(P,null,{default:_((()=>[v(p(U))])),_:1})])),default:_((()=>[c[21]||(c[21]=g(" 下移 "))])),_:1})],64))]))]),b(" 答题设置弹窗 "),v(Z,{modelValue:p(K),"onUpdate:modelValue":c[13]||(c[13]=e=>V(K)?K.value=e:null),title:"答题设置",class:"customize-dialog",onClose:c[14]||(c[14]=e=>K.value=!1)},{footer:_((()=>[v(W,{class:"customize-button",type:"primary",plain:"",onClick:c[12]||(c[12]=e=>K.value=!1)},{default:_((()=>c[24]||(c[24]=[g(" 取消 ")]))),_:1}),v(W,{class:"customize-button",type:"primary",plain:"",onClick:J},{default:_((()=>c[25]||(c[25]=[g(" 保存 ")]))),_:1})])),default:_((()=>[v(Y,{modelValue:p(D),"onUpdate:modelValue":c[11]||(c[11]=e=>V(D)?D.value=e:null),class:"vertical-radio-group"},{default:_((()=>[(r(),m(x,null,w(H,(e=>v(X,{key:e.value,value:e.value},{default:_((()=>[g(C(e.label),1)])),_:2},1032,["value"]))),64))])),_:1},8,["modelValue"])])),_:1},8,["modelValue"])],2)],2)}}});export{O as default};
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};
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 class=\"btn-margin\"\n @click=\"emits('edit')\"\n >\n <template #icon>\n <el-icon><Edit /></el-icon>\n </template>\n 编辑\n </el-button>\n <el-button class=\"btn-margin\" @click=\"emits('delete')\">\n <template #icon>\n <el-icon><Delete /></el-icon>\n </template>\n 删除\n </el-button>\n <el-button class=\"btn-margin\" @click=\"emits('move-up')\">\n <template #icon>\n <el-icon><Top /></el-icon>\n </template>\n 上移\n </el-button>\n <el-button class=\"btn-margin\" @click=\"emits('move-down')\">\n <template #icon>\n <el-icon><Bottom /></el-icon>\n </template>\n 下移\n </el-button>\n </template>\n <template v-else>\n <el-button class=\"btn-margin\" @click=\"emits('delete')\">删除</el-button>\n <el-button type=\"primary\" @click=\"emits('save')\">完成编辑</el-button>\n </template>\n </div>\n </div>\n\n <!-- 答题设置弹窗 -->\n <el-dialog\n v-model=\"showAnswerSetting\"\n title=\"答题设置\"\n class=\"customize-dialog\"\n @close=\"showAnswerSetting = false\"\n >\n <el-radio-group v-model=\"answerType\" class=\"vertical-radio-group\">\n <el-radio\n v-for=\"item in answerTextList\"\n :key=\"item.value\"\n :value=\"item.value\"\n >\n {{ item.label }}\n </el-radio>\n </el-radio-group>\n <template #footer>\n <el-button\n class=\"customize-button\"\n type=\"primary\"\n plain\n @click=\"showAnswerSetting = false\"\n >\n 取消\n </el-button>\n <el-button\n class=\"customize-button\"\n type=\"primary\"\n plain\n @click=\"onSaveSetting\"\n >\n 保存\n </el-button>\n </template>\n </el-dialog>\n </div>\n </div>\n</template>"],"names":["props","__props","isKey","ref","showAnswerSetting","emits","__emit","answerType","answerCheckType","ns","useNamespace","checked","answerTextList","value","label","answerText","computed","find","item","onSaveSetting","setKey","selectExam","type","canSet","examAnswerRelationType"],"mappings":"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":"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"}