@qxs-bns/components 0.0.70 → 0.0.72

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 (62) hide show
  1. package/es/package.json.mjs +1 -1
  2. package/es/src/data-chart/src/components/card.vue2.mjs +1 -1
  3. package/es/src/data-chart/src/components/card.vue2.mjs.map +1 -1
  4. package/es/src/data-chart/src/components/table.vue.mjs +1 -1
  5. package/es/src/data-chart/src/components/table.vue.mjs.map +1 -1
  6. package/es/src/icon/src/icon.vue.mjs +1 -1
  7. package/es/src/icon/src/icon.vue.mjs.map +1 -1
  8. package/es/src/image-upload/src/image-upload.vue.mjs +1 -1
  9. package/es/src/image-upload/src/image-upload.vue.mjs.map +1 -1
  10. package/lib/package.json.cjs +1 -1
  11. package/lib/src/data-chart/src/components/card.vue2.cjs +1 -1
  12. package/lib/src/data-chart/src/components/card.vue2.cjs.map +1 -1
  13. package/lib/src/data-chart/src/components/table.vue.cjs +1 -1
  14. package/lib/src/data-chart/src/components/table.vue.cjs.map +1 -1
  15. package/lib/src/icon/src/icon.vue.cjs +1 -1
  16. package/lib/src/icon/src/icon.vue.cjs.map +1 -1
  17. package/lib/src/image-upload/src/image-upload.vue.cjs +1 -1
  18. package/lib/src/image-upload/src/image-upload.vue.cjs.map +1 -1
  19. package/package.json +3 -3
  20. package/theme-chalk/index-with-element-plus.css +1 -0
  21. package/theme-chalk/index-with-element-plus.scss +68 -0
  22. package/theme-chalk/index.css +1 -1
  23. package/theme-chalk/index.scss +2 -0
  24. package/theme-chalk/src/common/element-plus-deps.css +1 -0
  25. package/theme-chalk/src/common/element-plus-deps.scss +40 -0
  26. package/theme-chalk/src/data-chart/index.scss +2 -0
  27. package/theme-chalk/src/image-upload.css +1 -1
  28. package/theme-chalk/src/image-upload.scss +40 -0
  29. package/types/src/data-chart/src/components/card.vue.d.ts.map +1 -1
  30. package/types/src/data-chart/src/components/table.vue.d.ts.map +1 -1
  31. package/types/src/icon/src/icon.vue.d.ts +2 -1
  32. package/types/src/icon/src/icon.vue.d.ts.map +1 -1
  33. package/types/src/image-upload/index.d.ts +5 -5
  34. package/types/src/image-upload/src/image-upload.vue.d.ts +18 -5
  35. package/types/src/image-upload/src/image-upload.vue.d.ts.map +1 -1
  36. package/types/tsconfig.tsbuildinfo +1 -1
  37. package/types/src/base/style/css.d.ts +0 -2
  38. package/types/src/base/style/css.d.ts.map +0 -1
  39. package/types/src/base/style/index.d.ts +0 -2
  40. package/types/src/base/style/index.d.ts.map +0 -1
  41. package/types/src/data-chart/style/index.d.ts +0 -3
  42. package/types/src/data-chart/style/index.d.ts.map +0 -1
  43. package/types/src/file-upload/style/index.d.ts +0 -3
  44. package/types/src/file-upload/style/index.d.ts.map +0 -1
  45. package/types/src/fixed-action-bar/style/index.d.ts +0 -3
  46. package/types/src/fixed-action-bar/style/index.d.ts.map +0 -1
  47. package/types/src/icon/style/index.d.ts +0 -3
  48. package/types/src/icon/style/index.d.ts.map +0 -1
  49. package/types/src/image-upload/style/index.d.ts +0 -3
  50. package/types/src/image-upload/style/index.d.ts.map +0 -1
  51. package/types/src/photo-crop-tool/style/index.d.ts +0 -3
  52. package/types/src/photo-crop-tool/style/index.d.ts.map +0 -1
  53. package/types/src/subject-action/style/index.d.ts +0 -3
  54. package/types/src/subject-action/style/index.d.ts.map +0 -1
  55. package/types/src/subject-layout/style/index.d.ts +0 -3
  56. package/types/src/subject-layout/style/index.d.ts.map +0 -1
  57. package/types/src/subject-list/style/index.d.ts +0 -3
  58. package/types/src/subject-list/style/index.d.ts.map +0 -1
  59. package/types/src/subject-type/style/index.d.ts +0 -3
  60. package/types/src/subject-type/style/index.d.ts.map +0 -1
  61. package/types/src/tiny-mce-editor/style/index.d.ts +0 -3
  62. package/types/src/tiny-mce-editor/style/index.d.ts.map +0 -1
@@ -1,2 +1,2 @@
1
- var r="0.0.70";export{r as version};
1
+ var r="0.0.72";export{r as version};
2
2
  //# sourceMappingURL=package.json.mjs.map
@@ -1,2 +1,2 @@
1
- import{defineComponent as a,resolveComponent as t,createElementBlock as c,openBlock as e,createElementVNode as r,createBlock as l,toDisplayString as s,Fragment as d,withCtx as o,normalizeClass as i,renderList as n,normalizeStyle as h,createTextVNode as m,createCommentVNode as u}from"vue";import D from"./data-chart-card-bg-left.svg.mjs";import g from"./data-chart-card-bg-right.svg.mjs";import p from"./empty.vue.mjs";const y={class:"data-chart-card"},v={class:"title"},f=["title"],k={class:"context"},$={class:"suffix-icon"},b={key:1,class:"data-chart-card-wrap"},x=["title"],j={class:"context"};var B=a({name:"DataChartCard",__name:"card",props:{chartData:{type:Object,default:()=>({colDesc:[],xGroupByDesc:[],data:[],modelName:""})}},setup(a){const B=a,N=`url(${D})`,_=`url(${g})`;function C(a){const t=B.chartData.xGroupByDesc?.colDesc||"";return t?t+a[t]:""}return(D,g)=>{const B=t("el-scrollbar");return e(),c("div",y,[r("p",v,s(a.chartData.modelName),1),a.chartData.data.length?(e(),c(d,{key:0},[a.chartData.groupByDesc.length?(e(),l(B,{key:0},{default:o(()=>[r("div",{class:i({"data-chart-card-grid-layout":a.chartData.groupByDesc.length})},[(e(!0),c(d,null,n(a.chartData.data,(t,l)=>(e(),c("div",{key:l,class:"card-item",style:h({"background-image":`${N}, ${_}`})},[r("div",{class:"card-title",title:C(t)},s(C(t)),9,f),r("div",k,[(e(!0),c(d,null,n(a.chartData.colDesc,(l,d)=>(e(),c("span",{key:l},[m(s(`${l}: `||"-"),1),r("strong",null,s(t[l]||"-"),1),m(" "+s(d===a.chartData.colDesc.length-1?"":","),1)]))),128))]),r("div",$,s(l+1),1)],4))),128))],2)]),_:1})):(e(),c("div",b,[(e(!0),c(d,null,n(a.chartData.data,(t,l)=>(e(),c("div",{key:l,class:"card-item",style:h({"background-image":`${N}, ${_}`})},[r("div",{class:"card-title",title:a.chartData.modelName},s(a.chartData.modelName),9,x),r("div",j,[(e(!0),c(d,null,n(a.chartData.colDesc,(l,o)=>(e(),c("span",{key:l},[t?(e(),c(d,{key:0},[m(s(`${l}: `||"-"),1),r("strong",null,s(t[l]||"-"),1),m(" "+s(o===a.chartData.colDesc.length-1?"":","),1)],64)):u("v-if",!0)]))),128))])],4))),128))]))],64)):(e(),l(p,{key:1}))])}}});export{B as default};
1
+ import{defineComponent as a,createElementBlock as t,openBlock as c,createElementVNode as e,createBlock as r,toDisplayString as l,Fragment as s,unref as d,withCtx as o,normalizeClass as i,renderList as n,normalizeStyle as m,createTextVNode as h,createCommentVNode as u}from"vue";import{ElScrollbar as D}from"element-plus";import p from"./data-chart-card-bg-left.svg.mjs";import g from"./data-chart-card-bg-right.svg.mjs";import y from"./empty.vue.mjs";const v={class:"data-chart-card"},f={class:"title"},k=["title"],$={class:"context"},x={class:"suffix-icon"},b={key:1,class:"data-chart-card-wrap"},j=["title"],B={class:"context"};var N=a({name:"DataChartCard",__name:"card",props:{chartData:{type:Object,default:()=>({colDesc:[],xGroupByDesc:[],data:[],modelName:""})}},setup(a){const N=a,_=`url(${p})`,C=`url(${g})`;function G(a){const t=N.chartData.xGroupByDesc?.colDesc||"";return t?t+a[t]:""}return(p,g)=>(c(),t("div",v,[e("p",f,l(a.chartData.modelName),1),a.chartData.data.length?(c(),t(s,{key:0},[a.chartData.groupByDesc.length?(c(),r(d(D),{key:0},{default:o(()=>[e("div",{class:i({"data-chart-card-grid-layout":a.chartData.groupByDesc.length})},[(c(!0),t(s,null,n(a.chartData.data,(r,d)=>(c(),t("div",{key:d,class:"card-item",style:m({"background-image":`${_}, ${C}`})},[e("div",{class:"card-title",title:G(r)},l(G(r)),9,k),e("div",$,[(c(!0),t(s,null,n(a.chartData.colDesc,(s,d)=>(c(),t("span",{key:s},[h(l(`${s}: `||"-"),1),e("strong",null,l(r[s]||"-"),1),h(" "+l(d===a.chartData.colDesc.length-1?"":","),1)]))),128))]),e("div",x,l(d+1),1)],4))),128))],2)]),_:1})):(c(),t("div",b,[(c(!0),t(s,null,n(a.chartData.data,(r,d)=>(c(),t("div",{key:d,class:"card-item",style:m({"background-image":`${_}, ${C}`})},[e("div",{class:"card-title",title:a.chartData.modelName},l(a.chartData.modelName),9,j),e("div",B,[(c(!0),t(s,null,n(a.chartData.colDesc,(d,o)=>(c(),t("span",{key:d},[r?(c(),t(s,{key:0},[h(l(`${d}: `||"-"),1),e("strong",null,l(r[d]||"-"),1),h(" "+l(o===a.chartData.colDesc.length-1?"":","),1)],64)):u("v-if",!0)]))),128))])],4))),128))]))],64)):(c(),r(y,{key:1}))]))}});export{N as default};
2
2
  //# sourceMappingURL=card.vue2.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"card.vue2.mjs","sources":["../../../../../../../packages/components/src/data-chart/src/components/card.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { PropType } from 'vue'\nimport type { EChartData, IFormatPublicData } from '../utils/types'\nimport bgLeft from './data-chart-card-bg-left.svg'\nimport bgRight from './data-chart-card-bg-right.svg'\nimport Empty from './empty.vue'\n\ndefineOptions({\n name: 'DataChartCard',\n})\n\nconst props = defineProps({\n chartData: {\n type: Object as PropType<IFormatPublicData>,\n default: () => ({\n colDesc: [],\n xGroupByDesc: [],\n data: [],\n modelName: '',\n }),\n },\n})\n\n// 将 SVG 文件转换为 URL\nconst bgLeftUrl = `url(${bgLeft})`\nconst bgRightUrl = `url(${bgRight})`\n\nfunction cardTitle(dataItem: EChartData['data'][0]) {\n const colDesc = props.chartData.xGroupByDesc?.colDesc || ''\n\n return colDesc ? (colDesc + dataItem[colDesc]) : ''\n}\n</script>\n\n<template>\n <div class=\"data-chart-card\">\n <p class=\"title\">\n {{ chartData.modelName }}\n </p>\n <template v-if=\"chartData.data.length\">\n <el-scrollbar v-if=\"chartData.groupByDesc.length\">\n <div :class=\"{ 'data-chart-card-grid-layout': chartData.groupByDesc.length }\">\n <div\n v-for=\"(dataItem, dataIndex) in chartData.data\"\n :key=\"dataIndex\"\n class=\"card-item\"\n :style=\"{\n 'background-image': `${bgLeftUrl}, ${bgRightUrl}`,\n }\"\n >\n <div\n class=\"card-title\"\n :title=\"cardTitle(dataItem)\"\n >\n {{ cardTitle(dataItem) }}\n </div>\n <div class=\"context\">\n <span\n v-for=\"(item, index) in chartData.colDesc\"\n :key=\"item\"\n >\n {{ `${item}: ` || '-' }}<strong>{{ dataItem[item] || '-' }}</strong> {{ index === chartData.colDesc.length\n - 1 ? '' : ',' }}\n </span>\n </div>\n <div class=\"suffix-icon\">\n {{ dataIndex + 1 }}\n </div>\n </div>\n </div>\n </el-scrollbar>\n <div\n v-else\n class=\"data-chart-card-wrap\"\n >\n <div\n v-for=\"(dataItem, dataIndex) in chartData.data\"\n :key=\"dataIndex\"\n class=\"card-item\"\n :style=\"{\n 'background-image': `${bgLeftUrl}, ${bgRightUrl}`,\n }\"\n >\n <div\n class=\"card-title\"\n :title=\"chartData.modelName\"\n >\n {{ chartData.modelName }}\n </div>\n <div class=\"context\">\n <span\n v-for=\"(item, index) in chartData.colDesc\"\n :key=\"item\"\n >\n <template v-if=\"dataItem\">\n {{ `${item}: ` || '-' }}<strong>{{ dataItem[item] || '-' }}</strong> {{ index === chartData.colDesc.length\n - 1 ? '' : ',' }}\n </template>\n </span>\n </div>\n </div>\n </div>\n </template>\n <Empty v-else />\n </div>\n</template>\n\n<style scoped lang=\"scss\">\n.data-chart-card {\n display: flex;\n flex-direction: column;\n\n .title {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 0 5.5px;\n margin: 0;\n font-family: sans-serif;\n font-size: 14px;\n font-weight: 600;\n line-height: 26px;\n color: #464646;\n }\n\n .data-chart-card-grid-layout {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));\n gap: 10px;\n width: calc(100% - 3px);\n }\n\n .data-chart-card-wrap {\n height: 100% !important;\n\n .card-item {\n width: 100% !important;\n }\n }\n\n .card-item {\n position: relative;\n background-repeat: no-repeat;\n background-position: left top, right top;\n background-size: contain, contain;\n border: 2px solid #2196f3;\n border-radius: 6px;\n\n .suffix-icon {\n position: absolute;\n right: 1px;\n bottom: calc(25% - 14px);\n width: 20px;\n font-size: 20px;\n font-weight: bold;\n color: #fff;\n text-align: center;\n }\n\n .card-title {\n padding-left: 15px;\n margin-top: 10px;\n margin-bottom: 5px;\n overflow: hidden;\n font-size: 16px;\n font-weight: bold;\n color: #2196f3;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .context {\n padding: 0 30px 10px 20px;\n font-size: 14px;\n color: #464646;\n }\n }\n}\n</style>\n"],"names":["props","__props","bgLeftUrl","bgLeft","bgRightUrl","bgRight","cardTitle","dataItem","colDesc","chartData","xGroupByDesc","_openBlock","_createElementBlock","_hoisted_1","_createElementVNode","_hoisted_2","_toDisplayString","modelName","data","length","_Fragment","key","groupByDesc","_createBlock","_component_el_scrollbar","class","_normalizeClass","dataIndex","style","_normalizeStyle","title","_hoisted_3","_hoisted_4","item","index","_createTextVNode","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","Empty"],"mappings":"2uBAWA,MAAMA,EAAQC,EAaRC,EAAY,OAAOC,KACnBC,EAAa,OAAOC,KAE1B,SAASC,EAAUC,GACjB,MAAMC,EAAUR,EAAMS,UAAUC,cAAcF,SAAW,GAEzD,OAAOA,EAAWA,EAAUD,EAASC,GAAY,EACnD,yCAIE,OAAAG,IAAAC,EAqEM,MArENC,EAqEM,CApEJC,EAEI,IAFJC,EAEIC,EADCf,EAAAQ,UAAUQ,WAAS,GAERhB,EAAAQ,UAAUS,KAAKC,YAA/BP,EA+DWQ,EAAA,CAAAC,IAAA,GAAA,CA9DWpB,EAAAQ,UAAUa,YAAYH,YAA1CI,EA8BeC,EAAA,CAAAH,IAAA,GAAA,WA7Bb,IA4BM,CA5BNP,EA4BM,MAAA,CA5BAW,MAAKC,EAAA,CAAA,8BAAmCzB,EAAAQ,UAAUa,YAAYH,YAClER,GAAA,GAAAC,EA0BMQ,SAzB4BnB,EAAAQ,UAAUS,KAAI,CAAtCX,EAAUoB,SADpBf,EA0BM,MAAA,CAxBHS,IAAKM,EACNF,MAAM,YACLG,MAAKC,EAAA,CAAyC,mBAAA,GAAA3B,MAAcE,QAI7DU,EAKM,MAAA,CAJJW,MAAM,aACLK,MAAOxB,EAAUC,IAEfS,EAAAV,EAAUC,IAAQ,EAAAwB,GAEvBjB,EAQM,MARNkB,EAQM,EAPJrB,GAAA,GAAAC,EAMOQ,SALmBnB,EAAAQ,UAAUD,QAAO,CAAjCyB,EAAMC,SADhBtB,EAMO,OAAA,CAJJS,IAAKY,GAAI,QAEJA,OAAI,KAAA,GAAcnB,EAA4C,SAAA,KAAAE,EAAjCT,EAAS0B,IAAI,KAAA,GAAoBE,EAAA,MAAID,IAAUjC,YAAUO,QAAQW,gCAIxGL,EAEM,MAFNsB,EAEMpB,EADDW,EAAS,GAAA,6BAKpBhB,IAAAC,EA8BM,MA9BNyB,EA8BM,EA1BJ1B,GAAA,GAAAC,EAyBMQ,SAxB4BnB,EAAAQ,UAAUS,KAAI,CAAtCX,EAAUoB,SADpBf,EAyBM,MAAA,CAvBHS,IAAKM,EACNF,MAAM,YACLG,MAAKC,EAAA,CAAuC,mBAAA,GAAA3B,MAAcE,QAI3DU,EAKM,MAAA,CAJJW,MAAM,aACLK,MAAO7B,EAAAQ,UAAUQ,WAEfD,EAAAf,EAAAQ,UAAUQ,WAAS,EAAAqB,GAExBxB,EAUM,MAVNyB,EAUM,EATJ5B,GAAA,GAAAC,EAQOQ,SAPmBnB,EAAAQ,UAAUD,QAAO,CAAjCyB,EAAMC,SADhBtB,EAQO,OAAA,CANJS,IAAKY,GAAI,CAEM1B,OAAhBK,EAGWQ,EAAA,CAAAC,IAAA,GAAA,QAFHY,OAAI,KAAA,GAAcnB,EAA4C,SAAA,KAAAE,EAAjCT,EAAS0B,IAAI,KAAA,GAAoBE,EAAA,MAAID,IAAUjC,YAAUO,QAAQW,6EAQhHI,EAAgBiB,EAAA,CAAAnB,IAAA"}
1
+ {"version":3,"file":"card.vue2.mjs","sources":["../../../../../../../packages/components/src/data-chart/src/components/card.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { PropType } from 'vue'\nimport type { EChartData, IFormatPublicData } from '../utils/types'\nimport { ElScrollbar } from 'element-plus'\nimport bgLeft from './data-chart-card-bg-left.svg'\nimport bgRight from './data-chart-card-bg-right.svg'\nimport Empty from './empty.vue'\n\ndefineOptions({\n name: 'DataChartCard',\n})\n\nconst props = defineProps({\n chartData: {\n type: Object as PropType<IFormatPublicData>,\n default: () => ({\n colDesc: [],\n xGroupByDesc: [],\n data: [],\n modelName: '',\n }),\n },\n})\n\n// 将 SVG 文件转换为 URL\nconst bgLeftUrl = `url(${bgLeft})`\nconst bgRightUrl = `url(${bgRight})`\n\nfunction cardTitle(dataItem: EChartData['data'][0]) {\n const colDesc = props.chartData.xGroupByDesc?.colDesc || ''\n\n return colDesc ? (colDesc + dataItem[colDesc]) : ''\n}\n</script>\n\n<template>\n <div class=\"data-chart-card\">\n <p class=\"title\">\n {{ chartData.modelName }}\n </p>\n <template v-if=\"chartData.data.length\">\n <ElScrollbar v-if=\"chartData.groupByDesc.length\">\n <div :class=\"{ 'data-chart-card-grid-layout': chartData.groupByDesc.length }\">\n <div\n v-for=\"(dataItem, dataIndex) in chartData.data\"\n :key=\"dataIndex\"\n class=\"card-item\"\n :style=\"{\n 'background-image': `${bgLeftUrl}, ${bgRightUrl}`,\n }\"\n >\n <div\n class=\"card-title\"\n :title=\"cardTitle(dataItem)\"\n >\n {{ cardTitle(dataItem) }}\n </div>\n <div class=\"context\">\n <span\n v-for=\"(item, index) in chartData.colDesc\"\n :key=\"item\"\n >\n {{ `${item}: ` || '-' }}<strong>{{ dataItem[item] || '-' }}</strong> {{ index === chartData.colDesc.length\n - 1 ? '' : ',' }}\n </span>\n </div>\n <div class=\"suffix-icon\">\n {{ dataIndex + 1 }}\n </div>\n </div>\n </div>\n </ElScrollbar>\n <div\n v-else\n class=\"data-chart-card-wrap\"\n >\n <div\n v-for=\"(dataItem, dataIndex) in chartData.data\"\n :key=\"dataIndex\"\n class=\"card-item\"\n :style=\"{\n 'background-image': `${bgLeftUrl}, ${bgRightUrl}`,\n }\"\n >\n <div\n class=\"card-title\"\n :title=\"chartData.modelName\"\n >\n {{ chartData.modelName }}\n </div>\n <div class=\"context\">\n <span\n v-for=\"(item, index) in chartData.colDesc\"\n :key=\"item\"\n >\n <template v-if=\"dataItem\">\n {{ `${item}: ` || '-' }}<strong>{{ dataItem[item] || '-' }}</strong> {{ index === chartData.colDesc.length\n - 1 ? '' : ',' }}\n </template>\n </span>\n </div>\n </div>\n </div>\n </template>\n <Empty v-else />\n </div>\n</template>\n\n<style scoped lang=\"scss\">\n.data-chart-card {\n display: flex;\n flex-direction: column;\n\n .title {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 0 5.5px;\n margin: 0;\n font-family: sans-serif;\n font-size: 14px;\n font-weight: 600;\n line-height: 26px;\n color: #464646;\n }\n\n .data-chart-card-grid-layout {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));\n gap: 10px;\n width: calc(100% - 3px);\n }\n\n .data-chart-card-wrap {\n height: 100% !important;\n\n .card-item {\n width: 100% !important;\n }\n }\n\n .card-item {\n position: relative;\n background-repeat: no-repeat;\n background-position: left top, right top;\n background-size: contain, contain;\n border: 2px solid #2196f3;\n border-radius: 6px;\n\n .suffix-icon {\n position: absolute;\n right: 1px;\n bottom: calc(25% - 14px);\n width: 20px;\n font-size: 20px;\n font-weight: bold;\n color: #fff;\n text-align: center;\n }\n\n .card-title {\n padding-left: 15px;\n margin-top: 10px;\n margin-bottom: 5px;\n overflow: hidden;\n font-size: 16px;\n font-weight: bold;\n color: #2196f3;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .context {\n padding: 0 30px 10px 20px;\n font-size: 14px;\n color: #464646;\n }\n }\n}\n</style>\n"],"names":["props","__props","bgLeftUrl","bgLeft","bgRightUrl","bgRight","cardTitle","dataItem","colDesc","chartData","xGroupByDesc","_openBlock","_createElementBlock","_hoisted_1","_createElementVNode","_hoisted_2","_toDisplayString","modelName","data","length","_Fragment","key","groupByDesc","_createBlock","_unref","ElScrollbar","class","_normalizeClass","dataIndex","style","_normalizeStyle","title","_hoisted_3","_hoisted_4","item","index","_createTextVNode","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","Empty"],"mappings":"2wBAYA,MAAMA,EAAQC,EAaRC,EAAY,OAAOC,KACnBC,EAAa,OAAOC,KAE1B,SAASC,EAAUC,GACjB,MAAMC,EAAUR,EAAMS,UAAUC,cAAcF,SAAW,GAEzD,OAAOA,EAAWA,EAAUD,EAASC,GAAY,EACnD,eAIEG,IAAAC,EAqEM,MArENC,EAqEM,CApEJC,EAEI,IAFJC,EAEIC,EADCf,EAAAQ,UAAUQ,WAAS,GAERhB,EAAAQ,UAAUS,KAAKC,YAA/BP,EA+DWQ,EAAA,CAAAC,IAAA,GAAA,CA9DUpB,EAAAQ,UAAUa,YAAYH,YAAzCI,EA8BcC,EAAAC,GAAA,CAAAJ,IAAA,GAAA,WA7BZ,IA4BM,CA5BNP,EA4BM,MAAA,CA5BAY,MAAKC,EAAA,CAAA,8BAAmC1B,EAAAQ,UAAUa,YAAYH,YAClER,GAAA,GAAAC,EA0BMQ,SAzB4BnB,EAAAQ,UAAUS,KAAI,CAAtCX,EAAUqB,SADpBhB,EA0BM,MAAA,CAxBHS,IAAKO,EACNF,MAAM,YACLG,MAAKC,EAAA,CAAyC,mBAAA,GAAA5B,MAAcE,QAI7DU,EAKM,MAAA,CAJJY,MAAM,aACLK,MAAOzB,EAAUC,IAEfS,EAAAV,EAAUC,IAAQ,EAAAyB,GAEvBlB,EAQM,MARNmB,EAQM,EAPJtB,GAAA,GAAAC,EAMOQ,SALmBnB,EAAAQ,UAAUD,QAAO,CAAjC0B,EAAMC,SADhBvB,EAMO,OAAA,CAJJS,IAAKa,GAAI,QAEJA,OAAI,KAAA,GAAcpB,EAA4C,SAAA,KAAAE,EAAjCT,EAAS2B,IAAI,KAAA,GAAoBE,EAAA,MAAID,IAAUlC,YAAUO,QAAQW,gCAIxGL,EAEM,MAFNuB,EAEMrB,EADDY,EAAS,GAAA,6BAKpBjB,IAAAC,EA8BM,MA9BN0B,EA8BM,EA1BJ3B,GAAA,GAAAC,EAyBMQ,SAxB4BnB,EAAAQ,UAAUS,KAAI,CAAtCX,EAAUqB,SADpBhB,EAyBM,MAAA,CAvBHS,IAAKO,EACNF,MAAM,YACLG,MAAKC,EAAA,CAAuC,mBAAA,GAAA5B,MAAcE,QAI3DU,EAKM,MAAA,CAJJY,MAAM,aACLK,MAAO9B,EAAAQ,UAAUQ,WAEfD,EAAAf,EAAAQ,UAAUQ,WAAS,EAAAsB,GAExBzB,EAUM,MAVN0B,EAUM,EATJ7B,GAAA,GAAAC,EAQOQ,SAPmBnB,EAAAQ,UAAUD,QAAO,CAAjC0B,EAAMC,SADhBvB,EAQO,OAAA,CANJS,IAAKa,GAAI,CAEM3B,OAAhBK,EAGWQ,EAAA,CAAAC,IAAA,GAAA,QAFHa,OAAI,KAAA,GAAcpB,EAA4C,SAAA,KAAAE,EAAjCT,EAAS2B,IAAI,KAAA,GAAoBE,EAAA,MAAID,IAAUlC,YAAUO,QAAQW,6EAQhHI,EAAgBkB,EAAA,CAAApB,IAAA"}
@@ -1,2 +1,2 @@
1
- import{defineComponent as e,computed as t,resolveComponent as a,createElementBlock as l,openBlock as o,normalizeClass as r,unref as c,createCommentVNode as s,createVNode as p,createElementVNode as n,toDisplayString as i,withCtx as m,Fragment as u,renderList as h,createBlock as D,createTextVNode as d}from"vue";import{useNamespace as f}from"@qxs-bns/hooks";import b from"./empty.vue.mjs";const y={key:0,class:"title"};var v=e({name:"DataChartTable",__name:"table",props:{chartData:{type:Object,default:()=>({colDesc:[],xGroupByDesc:[],data:[],modelName:""})}},setup(e){const v=e,w=f("data-chart"),g=t(()=>v.chartData.groupByDesc.find(e=>!e.xAxis));function x(e){if(!e)return 100;const t=14*e.length+20+30;return t<100?100:t}return(t,f)=>{const v=a("el-table-column"),$=a("el-table");return o(),l("div",{class:r([c(w).e("table")])},[e.chartData.modelName?(o(),l("p",y,[n("span",null,i(e.chartData.modelName),1)])):s("v-if",!0),p($,{class:"customize-table",data:e.chartData.data,stripe:"",height:"100%"},{empty:m(()=>[p(b)]),default:m(()=>[(o(!0),l(u,null,h(e.chartData.groupByDesc,(e,t)=>(o(),D(v,{key:`${e.colDesc}${e.groupByDesc}${t}`,align:"center","show-overflow-tooltip":"",sortable:"","min-width":`${x(e.colDesc)}px`,prop:e.colDesc||""},{header:m(()=>[d(i(e.colDesc),1)]),default:m(t=>[d(i((g.value&&(g.value.colDesc,e.colDesc),t.row[e.colDesc||""]||"--")),1)]),_:2},1032,["min-width","prop"]))),128)),(o(!0),l(u,null,h(e.chartData.colDesc,(e,t)=>(o(),D(v,{key:e+t,align:"center","min-width":`${x(e)}px`,label:e,"show-overflow-tooltip":"",sortable:"",prop:e},{header:m(()=>[d(i(e),1)]),_:2},1032,["min-width","label","prop"]))),128))]),_:1},8,["data"])],2)}}});export{v as default};
1
+ import{defineComponent as e,computed as a,createElementBlock as t,openBlock as o,normalizeClass as l,unref as r,createCommentVNode as c,createVNode as s,createElementVNode as p,toDisplayString as i,withCtx as n,Fragment as m,renderList as u,createBlock as d,createTextVNode as h}from"vue";import{useNamespace as D}from"@qxs-bns/hooks";import{ElTable as f,ElTableColumn as b}from"element-plus";import y from"./empty.vue.mjs";const v={key:0,class:"title"};var w=e({name:"DataChartTable",__name:"table",props:{chartData:{type:Object,default:()=>({colDesc:[],xGroupByDesc:[],data:[],modelName:""})}},setup(e){const w=e,g=D("data-chart"),x=a(()=>w.chartData.groupByDesc.find(e=>!e.xAxis));function $(e){if(!e)return 100;const a=14*e.length+20+30;return a<100?100:a}return(a,D)=>(o(),t("div",{class:l([r(g).e("table")])},[e.chartData.modelName?(o(),t("p",v,[p("span",null,i(e.chartData.modelName),1)])):c("v-if",!0),s(r(f),{class:"customize-table",data:e.chartData.data,stripe:"",resizable:"",border:"",height:"100%"},{empty:n(()=>[s(y)]),default:n(()=>[(o(!0),t(m,null,u(e.chartData.groupByDesc,(e,a)=>(o(),d(r(b),{key:`${e.colDesc}${e.groupByDesc}${a}`,align:"center","show-overflow-tooltip":"",sortable:"","min-width":`${$(e.colDesc)}px`,prop:e.colDesc||""},{header:n(()=>[h(i(e.colDesc),1)]),default:n(a=>[h(i((x.value&&(x.value.colDesc,e.colDesc),a.row[e.colDesc||""]||"--")),1)]),_:2},1032,["min-width","prop"]))),128)),(o(!0),t(m,null,u(e.chartData.colDesc,(e,a)=>(o(),d(r(b),{key:e+a,align:"center","min-width":`${$(e)}px`,label:e,"show-overflow-tooltip":"",sortable:"",prop:e},{header:n(()=>[h(i(e),1)]),_:2},1032,["min-width","label","prop"]))),128))]),_:1},8,["data"])],2))}});export{w as default};
2
2
  //# sourceMappingURL=table.vue.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"table.vue.mjs","sources":["../../../../../../../packages/components/src/data-chart/src/components/table.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { PropType } from 'vue'\nimport type { IFormatPublicData } from '../utils/types'\nimport { useNamespace } from '@qxs-bns/hooks'\nimport { computed } from 'vue'\nimport Empty from './empty.vue'\n\ndefineOptions({\n name: 'DataChartTable',\n})\n\nconst props = defineProps({\n chartData: {\n type: Object as PropType<IFormatPublicData>,\n default: () => ({\n colDesc: [],\n xGroupByDesc: [],\n data: [],\n modelName: '',\n }),\n },\n})\n\nconst ns = useNamespace('data-chart')\n\nconst yGroupByDesc = computed(() => {\n const row = props.chartData.groupByDesc.find(item => !item.xAxis)\n return row\n})\n\nfunction baseWidth(str: string | null) {\n if (!str) {\n return 100\n }\n const strWidth = str.length * 14 + 20 + 30\n return strWidth < 100 ? 100 : strWidth\n}\n</script>\n\n<template>\n <div :class=\"[ns.e('table')]\">\n <p\n v-if=\"chartData.modelName\"\n class=\"title\"\n >\n <span>{{ chartData.modelName }}</span>\n </p>\n <el-table\n class=\"customize-table\"\n :data=\"chartData.data\"\n stripe\n height=\"100%\"\n >\n <el-table-column\n v-for=\"(item, index) in chartData.groupByDesc\"\n :key=\"`${item.colDesc}${item.groupByDesc}${index}`\"\n align=\"center\"\n show-overflow-tooltip\n sortable\n :min-width=\"`${baseWidth(item.colDesc)}px`\"\n :prop=\"item.colDesc || ''\"\n >\n <template #header>\n {{ item.colDesc }}\n </template>\n <template #default=\"scoped\">\n {{ (yGroupByDesc && yGroupByDesc.colDesc === item.colDesc ? scoped.row[item.colDesc || ''] : scoped.row[item.colDesc || '']) || '--' }}\n </template>\n </el-table-column>\n <el-table-column\n v-for=\"(item, index) in chartData.colDesc\"\n :key=\"item + index\"\n align=\"center\"\n :min-width=\"`${baseWidth(item)}px`\"\n :label=\"item\"\n show-overflow-tooltip\n sortable\n :prop=\"item\"\n >\n <template #header>\n {{ item }}\n </template>\n </el-table-column>\n <template #empty>\n <Empty />\n </template>\n </el-table>\n </div>\n</template>\n"],"names":["props","__props","ns","useNamespace","yGroupByDesc","computed","chartData","groupByDesc","find","item","xAxis","baseWidth","str","strWidth","length","_createElementBlock","class","_normalizeClass","_unref","e","modelName","_openBlock","_hoisted_1","_createElementVNode","_toDisplayString","_createVNode","_component_el_table","data","stripe","height","empty","Empty","_Fragment","index","_createBlock","_component_el_table_column","key","colDesc","align","sortable","prop","header","_createTextVNode","default","_withCtx","scoped","value","row","label"],"mappings":"yjBAWA,MAAMA,EAAQC,EAYRC,EAAKC,EAAa,cAElBC,EAAeC,EAAS,IAChBL,EAAMM,UAAUC,YAAYC,KAAKC,IAASA,EAAKC,QAI7D,SAASC,EAAUC,GACjB,IAAKA,EACH,OAAO,IAET,MAAMC,EAAwB,GAAbD,EAAIE,OAAc,GAAK,GACxC,OAAOD,EAAW,IAAM,IAAMA,CAChC,uEAIEE,EA+CM,MAAA,CA/CAC,MAAKC,EAAA,CAAGC,EAAAhB,GAAGiB,EAAC,aAERlB,EAAAK,UAAUc,WADlBC,IAAAN,EAKI,IALJO,EAKI,CADFC,EAAsC,OAAA,KAAAC,EAA7BvB,EAAAK,UAAUc,WAAS,mBAE9BK,EAuCWC,EAAA,CAtCTV,MAAM,kBACLW,KAAM1B,EAAAK,UAAUqB,KACjBC,OAAA,GACAC,OAAO,SAgCIC,QACT,IAAS,CAATL,EAASM,eA9BT,IAA8C,EADhDV,GAAA,GAAAN,EAekBiB,SAdQ/B,EAAAK,UAAUC,YAAW,CAArCE,EAAMwB,SADhBC,EAekBC,EAAA,CAbfC,IAAG,GAAK3B,EAAK4B,UAAU5B,EAAKF,cAAc0B,IAC3CK,MAAM,SACN,wBAAA,GACAC,SAAA,GACC,YAAS,GAAK5B,EAAUF,EAAK4B,aAC7BG,KAAM/B,EAAK4B,SAAO,KAERI,SACT,IAAkB,CAAfC,EAAAlB,EAAAf,EAAK4B,SAAO,KAENM,QAAOC,EACuHC,GAD/G,MACpBzC,EAAA0C,QAAgB1C,QAAaiC,QAAY5B,EAAK4B,SAAUQ,EAAOE,IAAItC,EAAK4B,SAAO,KAAiC,OAAA,8CAGxHhB,GAAA,GAAAN,EAakBiB,SAZQ/B,EAAAK,UAAU+B,QAAO,CAAjC5B,EAAMwB,SADhBC,EAakBC,EAAA,CAXfC,IAAK3B,EAAOwB,EACbK,MAAM,SACL,YAAS,GAAK3B,EAAUF,OACxBuC,MAAOvC,EACR,wBAAA,GACA8B,SAAA,GACCC,KAAM/B,IAEIgC,SACT,IAAU,KAAPhC,GAAI"}
1
+ {"version":3,"file":"table.vue.mjs","sources":["../../../../../../../packages/components/src/data-chart/src/components/table.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { PropType } from 'vue'\nimport type { IFormatPublicData } from '../utils/types'\nimport { useNamespace } from '@qxs-bns/hooks'\nimport { ElTable, ElTableColumn } from 'element-plus'\nimport { computed } from 'vue'\nimport Empty from './empty.vue'\n\ndefineOptions({\n name: 'DataChartTable',\n})\n\nconst props = defineProps({\n chartData: {\n type: Object as PropType<IFormatPublicData>,\n default: () => ({\n colDesc: [],\n xGroupByDesc: [],\n data: [],\n modelName: '',\n }),\n },\n})\n\nconst ns = useNamespace('data-chart')\n\nconst yGroupByDesc = computed(() => {\n const row = props.chartData.groupByDesc.find(item => !item.xAxis)\n return row\n})\n\nfunction baseWidth(str: string | null) {\n if (!str) {\n return 100\n }\n const strWidth = str.length * 14 + 20 + 30\n return strWidth < 100 ? 100 : strWidth\n}\n</script>\n\n<template>\n <div :class=\"[ns.e('table')]\">\n <p\n v-if=\"chartData.modelName\"\n class=\"title\"\n >\n <span>{{ chartData.modelName }}</span>\n </p>\n <ElTable\n class=\"customize-table\"\n :data=\"chartData.data\"\n stripe\n resizable\n border\n height=\"100%\"\n >\n <ElTableColumn\n v-for=\"(item, index) in chartData.groupByDesc\"\n :key=\"`${item.colDesc}${item.groupByDesc}${index}`\"\n align=\"center\"\n show-overflow-tooltip\n sortable\n :min-width=\"`${baseWidth(item.colDesc)}px`\"\n :prop=\"item.colDesc || ''\"\n >\n <template #header>\n {{ item.colDesc }}\n </template>\n <template #default=\"scoped\">\n {{ (yGroupByDesc && yGroupByDesc.colDesc === item.colDesc ? scoped.row[item.colDesc || ''] : scoped.row[item.colDesc || '']) || '--' }}\n </template>\n </ElTableColumn>\n <ElTableColumn\n v-for=\"(item, index) in chartData.colDesc\"\n :key=\"item + index\"\n align=\"center\"\n :min-width=\"`${baseWidth(item)}px`\"\n :label=\"item\"\n show-overflow-tooltip\n sortable\n :prop=\"item\"\n >\n <template #header>\n {{ item }}\n </template>\n </ElTableColumn>\n <template #empty>\n <Empty />\n </template>\n </ElTable>\n </div>\n</template>\n"],"names":["props","__props","ns","useNamespace","yGroupByDesc","computed","chartData","groupByDesc","find","item","xAxis","baseWidth","str","strWidth","length","_createElementBlock","class","_normalizeClass","_unref","e","modelName","_openBlock","_hoisted_1","_createElementVNode","_toDisplayString","_createVNode","ElTable","data","stripe","resizable","border","height","empty","Empty","_Fragment","index","_createBlock","ElTableColumn","key","colDesc","align","sortable","prop","header","_createTextVNode","default","_withCtx","scoped","value","row","label"],"mappings":"6lBAYA,MAAMA,EAAQC,EAYRC,EAAKC,EAAa,cAElBC,EAAeC,EAAS,IAChBL,EAAMM,UAAUC,YAAYC,KAAKC,IAASA,EAAKC,QAI7D,SAASC,EAAUC,GACjB,IAAKA,EACH,OAAO,IAET,MAAMC,EAAwB,GAAbD,EAAIE,OAAc,GAAK,GACxC,OAAOD,EAAW,IAAM,IAAMA,CAChC,mBAIEE,EAiDM,MAAA,CAjDAC,MAAKC,EAAA,CAAGC,EAAAhB,GAAGiB,EAAC,aAERlB,EAAAK,UAAUc,WADlBC,IAAAN,EAKI,IALJO,EAKI,CADFC,EAAsC,OAAA,KAAAC,EAA7BvB,EAAAK,UAAUc,WAAS,mBAE9BK,EAyCUP,EAAAQ,GAAA,CAxCRV,MAAM,kBACLW,KAAM1B,EAAAK,UAAUqB,KACjBC,OAAA,GACAC,UAAA,GACAC,OAAA,GACAC,OAAO,SAgCIC,QACT,IAAS,CAATP,EAASQ,eA9BT,IAA8C,EADhDZ,GAAA,GAAAN,EAegBmB,SAdUjC,EAAAK,UAAUC,YAAW,CAArCE,EAAM0B,SADhBC,EAegBlB,EAAAmB,GAAA,CAbbC,IAAG,GAAK7B,EAAK8B,UAAU9B,EAAKF,cAAc4B,IAC3CK,MAAM,SACN,wBAAA,GACAC,SAAA,GACC,YAAS,GAAK9B,EAAUF,EAAK8B,aAC7BG,KAAMjC,EAAK8B,SAAO,KAERI,SACT,IAAkB,CAAfC,EAAApB,EAAAf,EAAK8B,SAAO,KAENM,QAAOC,EACuHC,GAD/G,MACpB3C,EAAA4C,QAAgB5C,QAAamC,QAAY9B,EAAK8B,SAAUQ,EAAOE,IAAIxC,EAAK8B,SAAO,KAAiC,OAAA,8CAGxHlB,GAAA,GAAAN,EAagBmB,SAZUjC,EAAAK,UAAUiC,QAAO,CAAjC9B,EAAM0B,SADhBC,EAagBlB,EAAAmB,GAAA,CAXbC,IAAK7B,EAAO0B,EACbK,MAAM,SACL,YAAS,GAAK7B,EAAUF,OACxByC,MAAOzC,EACR,wBAAA,GACAgC,SAAA,GACCC,KAAMjC,IAEIkC,SACT,IAAU,KAAPlC,GAAI"}
@@ -1,2 +1,2 @@
1
- import{defineComponent as e,useAttrs as t,computed as o,createBlock as r,createElementBlock as i,createCommentVNode as n,openBlock as s,resolveDynamicComponent as l,normalizeStyle as u,normalizeClass as a,unref as c,createElementVNode as p}from"vue";import{Icon as v}from"../../../node_modules/.pnpm/@iconify_vue@5.0.0_vue@3.5.18_typescript@5.9.2_/node_modules/@iconify/vue/dist/iconify.mjs";import{useNamespace as y}from"@qxs-bns/hooks";const d=["xlink:href"];var f=e({name:"QxsIcon",__name:"icon",props:{icon:{type:null,required:!0},runtime:{type:Boolean,required:!1},flip:{type:String,required:!1},rotate:{type:Number,required:!1},color:{type:String,required:!1},size:{type:[String,Number],required:!1}},setup(e){const f=e,m=t(),g=y("icon"),h=o(()=>"object"==typeof f.icon||"function"==typeof f.icon),b=o(()=>h.value?"component":0===f.icon.indexOf("i-")?f.runtime?"svg":"css":f.icon.includes(":")?"svg":"custom"),$=o(()=>{if(h.value)return"";if(0===f.icon.indexOf("i-")){let e=f.icon;return f.runtime&&(e=e.replace("i-","")),e}return f.icon}),k=o(()=>{const e=[];if(""!==f.flip)switch(f.flip){case"horizontal":e.push("rotateY(180deg)");break;case"vertical":e.push("rotateX(180deg)");break;case"both":e.push("rotateX(180deg)"),e.push("rotateY(180deg)")}f.rotate&&e.push(`rotate(${f.rotate%360}deg)`);const{color:t,size:o}=f;return`${t?`color: ${t};`:""}${o?`font-size: ${r=o,r?"number"==typeof r||/^\d+(?:\.\d+)?$/.test(r)?`${r}px`:r:""};`:""}${e.length?`transform: ${e.join(" ")};`:""}`;var r});return(e,t)=>"component"===b.value?(s(),r(l(e.icon),{key:0,class:a([c(g).b()]),style:u(k.value+(c(m).style||""))},null,8,["class","style"])):"css"===b.value&&$.value?(s(),i("i",{key:1,class:a([c(g).b(),$.value]),style:u(k.value+(c(m).style||""))},null,6)):"svg"===b.value&&$.value?(s(),r(c(v),{key:2,icon:$.value,class:a([c(g).b()]),style:u(k.value+(c(m).style||""))},null,8,["icon","class","style"])):$.value?(s(),i("svg",{key:3,"aria-hidden":"true",class:a([c(g).b()]),style:u(k.value+(c(m).style||""))},[p("use",{"xlink:href":`#icon-${$.value}`},null,8,d)],6)):n("v-if",!0)}});export{f as default};
1
+ import{defineComponent as e,useAttrs as t,computed as o,createBlock as r,createElementBlock as i,createCommentVNode as l,openBlock as n,resolveDynamicComponent as s,normalizeStyle as u,normalizeClass as a,unref as c,createVNode as p,createElementVNode as d}from"vue";import{Icon as f}from"../../../node_modules/.pnpm/@iconify_vue@5.0.0_vue@3.5.18_typescript@5.9.2_/node_modules/@iconify/vue/dist/iconify.mjs";import{useNamespace as v}from"@qxs-bns/hooks";const y=["xlink:href"];var m=e({name:"QxsIcon",__name:"icon",props:{icon:{type:null,required:!0},runtime:{type:Boolean,required:!1},flip:{type:null,required:!1,default:""},rotate:{type:Number,required:!1,default:0},color:{type:String,required:!1},size:{type:[String,Number],required:!1},localIconPrefix:{type:String,required:!1,default:"icon-"}},setup(e){const m=t(),g=v("icon"),h=o(()=>"object"==typeof e.icon||"function"==typeof e.icon),b=o(()=>h.value?"component":0===e.icon.indexOf("i-")?e.runtime?"svg":"css":e.icon.includes(":")?"svg":"custom"),$=o(()=>{if(h.value)return"";if(0===e.icon.indexOf("i-")){let t=e.icon;return e.runtime&&(t=t.replace("i-","")),t}return e.icon});const x=o(()=>{const t=[];switch(e.flip){case"horizontal":t.push("rotateY(180deg)");break;case"vertical":t.push("rotateX(180deg)");break;case"both":t.push("rotateX(180deg)"),t.push("rotateY(180deg)")}return e.rotate&&t.push(`rotate(${e.rotate%360}deg)`),`${e.color?`color: ${e.color};`:""}${e.size?`font-size: ${o=e.size,o?"number"==typeof o||/^\d+(?:\.\d+)?$/.test(o)?`${o}px`:o:""};`:""}${t.length?`transform: ${t.join(" ")};`:""}`;var o});return(e,t)=>"component"===b.value?(n(),r(s(e.icon),{key:0,class:a([c(g).b()]),style:u(x.value+(c(m).style||""))},null,8,["class","style"])):"css"===b.value&&$.value?(n(),i("i",{key:1,class:a([c(g).b(),$.value]),style:u(x.value+(c(m).style||""))},null,6)):"svg"===b.value&&$.value?(n(),i("i",{key:2,style:u(x.value+(c(m).style||"")),class:a([c(g).b()])},[p(c(f),{icon:$.value},null,8,["icon"])],6)):$.value?(n(),i("svg",{key:3,"aria-hidden":"true",class:a([c(g).b()]),style:u(x.value+(c(m).style||""))},[d("use",{"xlink:href":`#${e.localIconPrefix}${$.value}`},null,8,y)],6)):l("v-if",!0)}});export{m as default};
2
2
  //# sourceMappingURL=icon.vue.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"icon.vue.mjs","sources":["../../../../../../packages/components/src/icon/src/icon.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { Component } from 'vue'\nimport { Icon } from '@iconify/vue'\nimport { useNamespace } from '@qxs-bns/hooks'\nimport { computed, useAttrs } from 'vue'\n\ndefineOptions({\n name: 'QxsIcon',\n})\n\nconst props = defineProps<PropsType>()\n\nconst attrs = useAttrs()\n\nconst ns = useNamespace('icon')\n\nexport interface PropsType {\n icon: string | Component\n runtime?: boolean\n flip?: 'horizontal' | 'vertical' | 'both' | ''\n rotate?: number\n color?: string\n size?: string | number\n}\n\nconst isComponentName = computed(() => typeof props.icon === 'object' || typeof props.icon === 'function')\n\nconst outputType = computed(() => {\n if (isComponentName.value) {\n return 'component'\n }\n if ((props.icon as string).indexOf('i-') === 0) {\n return props.runtime ? 'svg' : 'css'\n }\n else if ((props.icon as string).includes(':')) {\n return 'svg'\n }\n else {\n return 'custom'\n }\n})\n\nconst outputName = computed(() => {\n if (isComponentName.value) {\n return ''\n }\n if ((props.icon as string).indexOf('i-') === 0) {\n let conversionName = props.icon as string\n if (props.runtime) {\n conversionName = conversionName.replace('i-', '')\n }\n return conversionName\n }\n else {\n return props.icon as string\n }\n})\n\nconst style = computed(() => {\n const transform = [] as string[]\n if (props.flip !== '') {\n switch (props.flip) {\n case 'horizontal':\n transform.push('rotateY(180deg)')\n break\n case 'vertical':\n transform.push('rotateX(180deg)')\n break\n case 'both':\n transform.push('rotateX(180deg)')\n transform.push('rotateY(180deg)')\n break\n }\n }\n if (props.rotate) {\n transform.push(`rotate(${props.rotate % 360}deg)`)\n }\n const { color, size } = props\n\n // 用正则匹配 size 是不是 number 值,再判断是否有 px 结尾的单位,没有则拼接\n const formatSize = (size: string | number | undefined): string => {\n if (!size) {\n return ''\n }\n\n // 如果是数字,直接添加 px\n if (typeof size === 'number') {\n return `${size}px`\n }\n\n // 如果是纯数字字符串,添加 px\n if (/^\\d+(?:\\.\\d+)?$/.test(size)) {\n return `${size}px`\n }\n\n // 如果已经有单位(px、em、rem等)或者不是纯数字,直接返回\n return size\n }\n\n return `${color ? `color: ${color};` : ''}${size ? `font-size: ${formatSize(size)};` : ''}${transform.length ? `transform: ${transform.join(' ')};` : ''}`\n})\n</script>\n\n<template>\n <component\n :is=\"icon as any\"\n v-if=\"outputType === 'component'\"\n :class=\"[ns.b()]\"\n :style=\"style + (attrs.style || '')\"\n />\n <i\n v-else-if=\"outputType === 'css' && outputName\"\n :class=\"[ns.b(), outputName]\"\n :style=\"style + (attrs.style || '')\"\n />\n <Icon\n v-else-if=\"outputType === 'svg' && outputName\"\n :icon=\"outputName\"\n :class=\"[ns.b()]\"\n :style=\"style + (attrs.style || '')\"\n />\n <svg\n v-else-if=\"outputName\"\n aria-hidden=\"true\"\n :class=\"[ns.b()]\"\n :style=\"style + (attrs.style || '')\"\n >\n <use :xlink:href=\"`#icon-${outputName}`\" />\n </svg>\n</template>\n"],"names":["props","__props","attrs","useAttrs","ns","useNamespace","isComponentName","computed","icon","outputType","value","indexOf","runtime","includes","outputName","conversionName","replace","style","transform","flip","push","rotate","color","size","test","length","join","_openBlock","_createBlock","_resolveDynamicComponent","class","_normalizeClass","_unref","b","_normalizeStyle","_createElementBlock","Icon","_createElementVNode"],"mappings":"4sBAUA,MAAMA,EAAQC,EAERC,EAAQC,IAERC,EAAKC,EAAa,QAWlBC,EAAkBC,EAAS,IAA4B,iBAAfP,EAAMQ,MAA2C,mBAAfR,EAAMQ,MAEhFC,EAAaF,EAAS,IACtBD,EAAgBI,MACX,YAEoC,IAAxCV,EAAMQ,KAAgBG,QAAQ,MAC1BX,EAAMY,QAAU,MAAQ,MAEvBZ,EAAMQ,KAAgBK,SAAS,KAChC,MAGA,UAILC,EAAaP,EAAS,KAC1B,GAAID,EAAgBI,MAClB,MAAO,GAET,GAA6C,IAAxCV,EAAMQ,KAAgBG,QAAQ,MAAa,CAC9C,IAAII,EAAiBf,EAAMQ,KAI3B,OAHIR,EAAMY,UACRG,EAAiBA,EAAeC,QAAQ,KAAM,KAEzCD,CACT,CAEE,OAAOf,EAAMQ,OAIXS,EAAQV,EAAS,KACrB,MAAMW,EAAY,GAClB,GAAmB,KAAflB,EAAMmB,KACR,OAAQnB,EAAMmB,MACZ,IAAK,aACHD,EAAUE,KAAK,mBACf,MACF,IAAK,WACHF,EAAUE,KAAK,mBACf,MACF,IAAK,OACHF,EAAUE,KAAK,mBACfF,EAAUE,KAAK,mBAIjBpB,EAAMqB,QACRH,EAAUE,KAAK,UAAUpB,EAAMqB,OAAS,WAE1C,MAAMC,MAAEA,EAAAC,KAAOA,GAASvB,EAsBxB,MAAO,GAAGsB,EAAQ,UAAUA,KAAW,KAAKC,EAAO,cAnB/BA,EAmBwDA,EAlBrEA,EAKe,iBAATA,GAKP,kBAAkBC,KAAKD,GAJlB,GAAGA,MASLA,EAdE,MAiB4E,KAAKL,EAAUO,OAAS,cAAcP,EAAUQ,KAAK,QAAU,KAnBnI,IAACH,iBA0BF,cAAVd,EAAAC,OAFRiB,IAAAC,EAKEC,EAJKrB,EAAAA,MAAI,OAERsB,MAAKC,EAAA,CAAGC,EAAA5B,GAAG6B,MACXhB,MAAKiB,EAAEjB,EAAAP,OAASsB,EAAA9B,GAAMe,OAAK,yCAGjBR,EAAAC,OAAwBI,EAAAJ,WADrCyB,EAIE,IAAA,OAFCL,MAAKC,EAAA,CAAGC,EAAA5B,GAAG6B,IAAKnB,EAAAJ,QAChBO,MAAKiB,EAAEjB,EAAAP,OAASsB,EAAA9B,GAAMe,OAAK,uBAGjBR,EAAAC,OAAwBI,EAAAJ,WADrCkB,EAKEI,EAAAI,GAAA,OAHC5B,KAAMM,EAAAJ,MACNoB,MAAKC,EAAA,CAAGC,EAAA5B,GAAG6B,MACXhB,MAAKiB,EAAEjB,EAAAP,OAASsB,EAAA9B,GAAMe,OAAK,wCAGjBH,EAAAJ,WADbyB,EAOM,MAAA,OALJ,cAAY,OACXL,MAAKC,EAAA,CAAGC,EAAA5B,GAAG6B,MACXhB,MAAKiB,EAAEjB,EAAAP,OAASsB,EAAA9B,GAAMe,OAAK,OAE5BoB,EAA2C,MAAA,CAArC,sBAAqBvB,EAAAJ"}
1
+ {"version":3,"file":"icon.vue.mjs","sources":["../../../../../../packages/components/src/icon/src/icon.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { Component } from 'vue'\nimport { Icon } from '@iconify/vue'\nimport { useNamespace } from '@qxs-bns/hooks'\nimport { computed, useAttrs } from 'vue'\n\ndefineOptions({\n name: 'QxsIcon',\n})\n\nconst {\n icon,\n flip = '',\n rotate = 0,\n runtime,\n color,\n size,\n localIconPrefix = 'icon-',\n} = defineProps<PropsType>()\n\nconst attrs = useAttrs()\n\nconst ns = useNamespace('icon')\n\nexport interface PropsType {\n icon: string | Component\n runtime?: boolean\n flip?: 'horizontal' | 'vertical' | 'both' | '' | undefined\n rotate?: number\n color?: string\n size?: string | number\n localIconPrefix?: string\n}\n\nconst isComponentName = computed(() => typeof icon === 'object' || typeof icon === 'function')\n\nconst outputType = computed(() => {\n if (isComponentName.value) {\n return 'component'\n }\n if ((icon as string).indexOf('i-') === 0) {\n return runtime ? 'svg' : 'css'\n }\n else if ((icon as string).includes(':')) {\n return 'svg'\n }\n else {\n return 'custom'\n }\n})\n\nconst outputName = computed(() => {\n if (isComponentName.value) {\n return ''\n }\n if ((icon as string).indexOf('i-') === 0) {\n let conversionName = icon as string\n if (runtime) {\n conversionName = conversionName.replace('i-', '')\n }\n return conversionName\n }\n else {\n return icon as string\n }\n})\n\n// 用正则匹配 size 是不是 number 值,再判断是否有 px 结尾的单位,没有则拼接\nfunction formatSize(size: string | number | undefined): string {\n if (!size) {\n return ''\n }\n\n // 如果是数字,直接添加 px\n if (typeof size === 'number') {\n return `${size}px`\n }\n\n // 如果是纯数字字符串,添加 px\n if (/^\\d+(?:\\.\\d+)?$/.test(size)) {\n return `${size}px`\n }\n\n // 如果已经有单位(px、em、rem等)或者不是纯数字,直接返回\n return size\n}\n\n// 统一的样式计算属性,适用于所有图标类型\n// 包含颜色、尺寸和变换(旋转、翻转)\n// Iconify 图标通过外层 i 标签应用这些样式\nconst style = computed(() => {\n const transform = [] as string[]\n switch (flip) {\n case 'horizontal':\n transform.push('rotateY(180deg)')\n break\n case 'vertical':\n transform.push('rotateX(180deg)')\n break\n case 'both':\n transform.push('rotateX(180deg)')\n transform.push('rotateY(180deg)')\n break\n // 对于 '' 和 undefined,不做任何处理\n }\n if (rotate) {\n transform.push(`rotate(${rotate % 360}deg)`)\n }\n return `${color ? `color: ${color};` : ''}${size ? `font-size: ${formatSize(size)};` : ''}${transform.length ? `transform: ${transform.join(' ')};` : ''}`\n})\n</script>\n\n<template>\n <component\n :is=\"icon as any\"\n v-if=\"outputType === 'component'\"\n :class=\"[ns.b()]\"\n :style=\"style + (attrs.style || '')\"\n />\n <i\n v-else-if=\"outputType === 'css' && outputName\"\n :class=\"[ns.b(), outputName]\"\n :style=\"style + (attrs.style || '')\"\n />\n <i\n v-else-if=\"outputType === 'svg' && outputName\"\n :style=\"style + (attrs.style || '')\"\n :class=\"[ns.b()]\"\n >\n <Icon\n :icon=\"outputName\"\n />\n </i>\n <svg\n v-else-if=\"outputName\"\n aria-hidden=\"true\"\n :class=\"[ns.b()]\"\n :style=\"style + (attrs.style || '')\"\n >\n <use :xlink:href=\"`#${localIconPrefix}${outputName}`\" />\n </svg>\n</template>\n"],"names":["attrs","useAttrs","ns","useNamespace","isComponentName","computed","__props","icon","outputType","value","indexOf","runtime","includes","outputName","conversionName","replace","style","transform","flip","push","rotate","color","size","test","length","join","_openBlock","_createBlock","_resolveDynamicComponent","class","_normalizeClass","_unref","b","_normalizeStyle","_createElementBlock","_createVNode","Icon","_createElementVNode","localIconPrefix"],"mappings":"0yBAoBA,MAAMA,EAAQC,IAERC,EAAKC,EAAa,QAYlBC,EAAkBC,EAAS,IAAsB,iBAATC,EAAAC,MAAqC,mBAATD,EAAAC,MAEpEC,EAAaH,EAAS,IACtBD,EAAgBK,MACX,YAE8B,IAAlCH,EAAAC,KAAgBG,QAAQ,MACpBJ,EAAAK,QAAU,MAAQ,MAEjBL,EAAAC,KAAgBK,SAAS,KAC1B,MAGA,UAILC,EAAaR,EAAS,KAC1B,GAAID,EAAgBK,MAClB,MAAO,GAET,GAAuC,IAAlCH,EAAAC,KAAgBG,QAAQ,MAAa,CACxC,IAAII,EAAiBR,EAAAC,KAIrB,OAHID,EAAAK,UACFG,EAAiBA,EAAeC,QAAQ,KAAM,KAEzCD,CACT,CAEE,OAAOR,EAAAC,OA2BX,MAAMS,EAAQX,EAAS,KACrB,MAAMY,EAAY,GAClB,OAAQX,EAAAY,MACN,IAAK,aACHD,EAAUE,KAAK,mBACf,MACF,IAAK,WACHF,EAAUE,KAAK,mBACf,MACF,IAAK,OACHF,EAAUE,KAAK,mBACfF,EAAUE,KAAK,mBAOnB,OAHIb,EAAAc,QACFH,EAAUE,KAAK,UAAUb,SAAS,WAE7B,GAAGA,EAAAe,MAAQ,UAAUf,EAAAe,SAAW,KAAKf,EAAAgB,KAAO,cAxCjCA,EAwC0DhB,OAvCvEgB,EAKe,iBAATA,GAKP,kBAAkBC,KAAKD,GAJlB,GAAGA,MASLA,EAdE,MAsC8E,KAAKL,EAAUO,OAAS,cAAcP,EAAUQ,KAAK,QAAU,KAxCxJ,IAAoBH,iBA+CA,cAAVd,EAAAC,OAFRiB,IAAAC,EAKEC,EAJKrB,EAAAA,MAAI,OAERsB,MAAKC,EAAA,CAAGC,EAAA7B,GAAG8B,MACXhB,MAAKiB,EAAEjB,EAAAP,OAASsB,EAAA/B,GAAMgB,OAAK,yCAGjBR,EAAAC,OAAwBI,EAAAJ,WADrCyB,EAIE,IAAA,OAFCL,MAAKC,EAAA,CAAGC,EAAA7B,GAAG8B,IAAKnB,EAAAJ,QAChBO,MAAKiB,EAAEjB,EAAAP,OAASsB,EAAA/B,GAAMgB,OAAK,uBAGjBR,EAAAC,OAAwBI,EAAAJ,WADrCyB,EAQI,IAAA,OANDlB,MAAKiB,EAAEjB,EAAAP,OAASsB,EAAA/B,GAAMgB,OAAK,KAC3Ba,MAAKC,EAAA,CAAGC,EAAA7B,GAAG8B,QAEZG,EAEEJ,EAAAK,GAAA,CADC7B,KAAMM,EAAAJ,OAAU,KAAA,EAAA,CAAA,cAIRI,EAAAJ,WADbyB,EAOM,MAAA,OALJ,cAAY,OACXL,MAAKC,EAAA,CAAGC,EAAA7B,GAAG8B,MACXhB,MAAKiB,EAAEjB,EAAAP,OAASsB,EAAA/B,GAAMgB,OAAK,OAE5BqB,EAAwD,MAAA,CAAlD,aAAU,IAAMC,EAAAA,kBAAkBzB,EAAAJ"}
@@ -1,2 +1,2 @@
1
- import{defineComponent as e,mergeModels as i,useAttrs as t,useModel as l,ref as a,computed as r,resolveComponent as s,createElementBlock as p,openBlock as u,normalizeStyle as n,normalizeClass as o,unref as d,createVNode as c,createBlock as m,createCommentVNode as f,mergeProps as v,withCtx as g,renderSlot as h,createElementVNode as y,toDisplayString as b}from"vue";import{UploadImage as x,ZoomIn as q,Delete as $}from"@qxs-bns/icons";import{useNamespace as w,ElUpload as _,ElImageViewer as k,ElMessage as V}from"element-plus";const z={class:"image-slot"},S=["src"],L=["onClick"],U=["onClick"],j={class:"tip-content"};var B=e({name:"QxsImageUpload",__name:"image-upload",props:i({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},size:{type:Number,required:!1,default:20},width:{type:Number,required:!1,default:160},accept:{type:String,required:!1,default:"image/jpeg,image/jpg,image/png,image/gif"},height:{type:Number,required:!1,default:90},placeholder:{type:String,required:!1,default:"上传图片"},notip:{type:Boolean,required:!1,default:!1},tipText:{type:String,required:!1,default:""},beforeUpload:{type:null,required:!1},disabled:{type:Boolean,required:!1,default:!1},limit:{type:Number,required:!1,default:1}},{fileList:{type:Array,default:()=>[]},fileListModifiers:{}}),emits:i(["onSuccess","remove"],["update:fileList"]),setup(e,{emit:i}){const B=i,C=t(),M=l(e,"fileList"),N=w("image-upload"),O=a(0),I=a({imageViewerVisible:!1,progress:{preview:"",percent:0}}),Q=r(()=>N.cssVarBlock({ns:N.namespace.value,width:`${e.width||160}px`,height:`${e.height||90}px`})),R=r(()=>e.accept.split(",").map(e=>e.split("/").pop())),T=r(()=>e.tipText||`上传图片支持 ${R.value.join(" / ")} 格式,且图片大小不超过 ${e.size}MB${e.width&&e.height?`,建议图片尺寸为 ${e.width}*${e.height}`:""}`);function A(e){O.value=M.value.indexOf(e),I.value.imageViewerVisible=!0}function D(e){M.value.splice(M.value.indexOf(e),1)}function E(){I.value.imageViewerVisible=!1}const F=i=>{const t=i.name.split(".").pop()??"",l=R.value.includes(t),a=i.size/1024/1024<e.size;return l?a?(I.value.progress.preview=URL.createObjectURL(i),!e.beforeUpload||e.beforeUpload(i)):(V.error(`上传图片大小不能超过 ${e.size}MB!`),!1):(V.error(`上传图片只支持${R.value.join(" / ")}格式!`),!1)},G=e=>{I.value.progress.percent=Math.floor(e.percent)},H=(...e)=>{I.value.progress={preview:"",percent:0},B("onSuccess",...e)};return(e,i)=>{const t=s("QxsIcon");return u(),p("div",{class:o(d(N).e("container")),style:n(Q.value)},[c(d(_),v(d(C),{"file-list":M.value,"onUpdate:fileList":i[0]||(i[0]=e=>M.value=e),drag:"",limit:e.limit,"list-type":"picture-card",headers:e.headers,action:e.action,data:e.data,name:e.name,accept:e.accept,"before-upload":F,"on-progress":G,"on-preview":A,"on-success":H,class:[d(N).e("control"),e.limit<=M.value.length?d(N).e("more-than-limit"):""],"on-remove":D}),{file:g(({file:t})=>[y("img",{class:o(`${d(N).namespace.value}-upload-list__item-thumbnail`),src:t.url},null,10,S),y("span",{class:o(`${d(N).namespace.value}-upload-list__item-actions`)},[y("span",{class:o(`${d(N).namespace.value}-upload-list__item-preview`),onClick:e=>A(t)},[c(d(q),{size:"14px"})],10,L),i[1]||(i[1]=y("span",{style:{width:"1px",height:"14px","background-color":"rgb(255 255 255 / 50%)"}},null,-1)),e.disabled?f("v-if",!0):(u(),p("span",{key:0,class:o(`${d(N).namespace.value}-upload-list__item-delete`),onClick:e=>D(t)},[c(d($),{size:"14px"})],10,U))],2)]),tip:g(()=>[h(e.$slots,"tip",{},()=>[e.notip?f("v-if",!0):(u(),p("div",{key:0,class:o(`${d(N).namespace.value}-upload__tip-text`)},[y("div",j,b(T.value),1)],2))])]),default:g(()=>[h(e.$slots,"default",{},()=>[y("div",z,[c(t,{size:"32px",icon:d(x)},null,8,["icon"]),y("p",null,b(e.placeholder),1)])])]),_:3},16,["file-list","limit","headers","action","data","name","accept","class"]),I.value.imageViewerVisible?(u(),m(d(k),{key:0,"url-list":M.value.map(e=>e.url).filter(e=>void 0!==e),"initial-index":O.value,teleported:"",onClose:E},null,8,["url-list","initial-index"])):f("v-if",!0)],6)}}});export{B as default};
1
+ import{defineComponent as e,mergeModels as i,useAttrs as a,useModel as t,ref as l,computed as r,onUnmounted as s,resolveComponent as p,createElementBlock as n,openBlock as u,normalizeStyle as o,normalizeClass as c,unref as d,createVNode as m,createBlock as v,createCommentVNode as f,mergeProps as g,withCtx as h,renderSlot as b,createElementVNode as _,toDisplayString as w}from"vue";import{UploadImage as y,ZoomIn as $,Delete as x}from"@qxs-bns/icons";import{useNamespace as q,ElUpload as L,ElImageViewer as U,ElMessage as k}from"element-plus";const V={class:"image-slot"},z=["src"],j=["onClick"],C=["onClick"],R={class:"tip-content"};var B=e({name:"QxsImageUpload",__name:"image-upload",props:i({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},width:{type:Number,required:!1,default:160},height:{type:Number,required:!1,default:90},accept:{type:String,required:!1,default:"image/jpeg,image/jpg,image/png,image/gif"},placeholder:{type:String,required:!1,default:"上传图片"},notip:{type:Boolean,required:!1,default:!1},tipText:{type:String,required:!1,default:""},beforeUpload:{type:null,required:!1},disabled:{type:Boolean,required:!1,default:!1},limit:{type:Number,required:!1,default:1}},{fileList:{type:Array,default:()=>[]},fileListModifiers:{}}),emits:i(["success","remove"],["update:fileList"]),setup(e,{emit:i}){const B=i,O=a(),S=t(e,"fileList"),M=q("image-upload"),N=l(0),T=l({imageViewerVisible:!1,progress:{preview:"",percent:0}}),I=r(()=>M.cssVarBlock({ns:M.namespace.value,width:`${e.width}px`,height:`${e.height}px`})),Q=r(()=>e.accept.split(",").map(e=>e.split("/").pop())),A=r(()=>{if(e.tipText)return e.tipText;return`上传图片支持 ${Q.value.join(" / ")} 格式,且图片大小不超过 ${e.size}MB`+(e.width&&e.height?`,建议图片尺寸为 ${e.width}×${e.height}`:"")});function D(e){N.value=S.value.indexOf(e),T.value.imageViewerVisible=!0}function E(e){S.value.splice(S.value.indexOf(e),1)}function F(){T.value.imageViewerVisible=!1}const G=i=>{if(!i||!i.name)return k.error("文件信息无效!"),!1;const a=i.name.split(".").pop()?.toLowerCase()??"";if(!Q.value.some(e=>e?.toLowerCase()===a))return k.error(`上传图片只支持 ${Q.value.join(" / ")} 格式!`),!1;if(i.size/1024/1024>e.size)return k.error(`上传图片大小不能超过 ${e.size}MB!`),!1;try{T.value.progress.preview=URL.createObjectURL(i)}catch(e){console.warn("创建预览失败:",e)}return!e.beforeUpload||e.beforeUpload(i)},H=e=>{T.value.progress.percent=Math.floor(e.percent)},J=(...e)=>{T.value.progress.preview&&URL.revokeObjectURL(T.value.progress.preview),T.value.progress={preview:"",percent:0},B("success",...e)};return s(()=>{T.value.progress.preview&&URL.revokeObjectURL(T.value.progress.preview)}),(e,i)=>{const a=p("QxsIcon");return u(),n("div",{class:c(d(M).e("container")),style:o(I.value)},[m(d(L),g(d(O),{"file-list":S.value,"onUpdate:fileList":i[0]||(i[0]=e=>S.value=e),drag:"",limit:e.limit,"list-type":"picture-card",headers:e.headers,action:e.action,data:e.data,name:e.name,accept:e.accept,"before-upload":G,"on-progress":H,"on-preview":D,"on-success":J,class:[d(M).e("control"),e.limit<=S.value.length?d(M).e("more-than-limit"):""],"on-remove":E}),{file:h(({file:i})=>[_("img",{class:c(`${d(M).namespace.value}-upload-list__item-thumbnail`),src:i.url},null,10,z),_("span",{class:c(`${d(M).namespace.value}-upload-list__item-actions`)},[_("span",{class:c([`${d(M).namespace.value}-upload-list__item-preview`,`${d(M).namespace.value}-image-upload__action-btn`,`${d(M).namespace.value}-image-upload__action-btn--preview`]),onClick:e=>D(i)},[m(d($),{size:"14px"})],10,j),_("span",{class:c(`${d(M).namespace.value}-upload-list__item-divider`)},null,2),e.disabled?f("v-if",!0):(u(),n("span",{key:0,class:c([`${d(M).namespace.value}-upload-list__item-delete`,`${d(M).namespace.value}-image-upload__action-btn`,`${d(M).namespace.value}-image-upload__action-btn--delete`]),onClick:e=>E(i)},[m(d(x),{size:"14px"})],10,C))],2)]),tip:h(()=>[b(e.$slots,"tip",{},()=>[e.notip?f("v-if",!0):(u(),n("div",{key:0,class:c(`${d(M).namespace.value}-upload__tip-text`)},[_("div",R,w(A.value),1)],2))])]),default:h(()=>[b(e.$slots,"default",{},()=>[_("div",V,[m(a,{size:"32px",icon:d(y)},null,8,["icon"]),_("p",null,w(e.placeholder),1)])])]),_:3},16,["file-list","limit","headers","action","data","name","accept","class"]),T.value.imageViewerVisible?(u(),v(d(U),{key:0,"url-list":S.value.map(e=>e.url).filter(e=>void 0!==e),"initial-index":N.value,teleported:"",onClose:F},null,8,["url-list","initial-index"])):f("v-if",!0)],6)}}});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, UploadImage, ZoomIn } from '@qxs-bns/icons'\nimport { ElImageViewer, ElMessage, ElUpload, useNamespace } from 'element-plus'\nimport { computed, ref, useAttrs } from 'vue'\n\n// 组件名称\ndefineOptions({\n name: 'QxsImageUpload',\n})\n\n// Props 定义\nconst {\n name = 'file',\n size = 20,\n width = 160,\n height = 90,\n limit = 1,\n placeholder = '上传图片',\n notip = false,\n accept = 'image/jpeg,image/jpg,image/png,image/gif',\n beforeUpload,\n tipText = '',\n disabled = false,\n} = defineProps<ImageUploadProps>()\n\n// Emits 定义\nconst emits = defineEmits<{\n onSuccess: [res: any, uploadFile: UploadFile, uploadFiles: UploadFiles]\n remove: [file: UploadFile]\n}>()\n\n// 类型定义\nexport interface ImageUploadProps {\n action: UploadProps['action']\n headers?: UploadProps['headers']\n data?: UploadProps['data']\n name?: UploadProps['name']\n url?: string\n size?: number\n width?: number\n accept?: string\n height?: number\n placeholder?: string\n notip?: boolean\n tipText?: string\n beforeUpload?: UploadProps['beforeUpload']\n disabled?: boolean\n limit?: number\n}\n\ninterface UploadProgress {\n preview: string\n percent: number\n}\n\nconst attrs = useAttrs()\n\nconst fileList = defineModel('fileList', {\n type: Array as () => UploadFile[],\n default: () => [],\n})\n\n// 命名空间\nconst nsEl = useNamespace('image-upload')\n\nconst initialIndex = ref(0)\n// 响应式数据\nconst uploadData = ref<{\n imageViewerVisible: boolean\n progress: UploadProgress\n}>({\n imageViewerVisible: false,\n progress: {\n preview: '',\n percent: 0,\n },\n})\n\nconst cssVar = computed(() => {\n return nsEl.cssVarBlock({\n ns: nsEl.namespace.value,\n width: `${width || 160}px`,\n height: `${height || 90}px`,\n })\n})\n\n// 计算属性\nconst exts = computed(() =>\n accept.split(',').map(ext => ext.split('/').pop()),\n)\n\nconst tipMessage = computed(\n () =>\n tipText\n || `上传图片支持 ${exts.value.join(\n ' / ',\n )} 格式,且图片大小不超过 ${size}MB${width && height ? `,建议图片尺寸为 ${width}*${height}` : ''}`,\n)\n\n// 方法\nfunction onPreview(file: UploadFile) {\n initialIndex.value = fileList.value.indexOf(file)\n uploadData.value.imageViewerVisible = true\n}\nfunction onRemove(file: UploadFile) {\n fileList.value.splice(fileList.value.indexOf(file), 1)\n}\n\nfunction previewClose() {\n uploadData.value.imageViewerVisible = false\n}\n\nconst handleBeforeUpload: UploadProps['beforeUpload'] = (file) => {\n const fileExt = file.name.split('.').pop() ?? ''\n const isTypeOk = exts.value.includes(fileExt)\n const isSizeOk = file.size / 1024 / 1024 < size\n\n if (!isTypeOk) {\n ElMessage.error(`上传图片只支持${exts.value.join(' / ')}格式!`)\n return false\n }\n\n if (!isSizeOk) {\n ElMessage.error(`上传图片大小不能超过 ${size}MB!`)\n return false\n }\n\n uploadData.value.progress.preview = URL.createObjectURL(file)\n\n return beforeUpload ? beforeUpload(file) : true\n}\n\nconst onProgress: UploadProps['onProgress'] = (evt) => {\n uploadData.value.progress.percent = Math.floor(evt.percent)\n}\n\nconst onSuccess: UploadProps['onSuccess'] = (...args) => {\n uploadData.value.progress = {\n preview: '',\n percent: 0,\n }\n emits('onSuccess', ...args)\n}\n</script>\n\n<template>\n <div\n :class=\"nsEl.e('container')\"\n :style=\"cssVar\"\n >\n <ElUpload\n v-bind=\"attrs\"\n v-model:file-list=\"fileList\"\n drag\n :limit=\"limit\"\n list-type=\"picture-card\"\n :headers=\"headers\"\n :action=\"action\"\n :data=\"data\"\n :name=\"name\"\n :accept=\"accept\"\n :before-upload=\"handleBeforeUpload\"\n :on-progress=\"onProgress\"\n :on-preview=\"onPreview\"\n :on-success=\"onSuccess\"\n :class=\"[nsEl.e('control'), limit <= fileList.length ? nsEl.e('more-than-limit') : '']\"\n :on-remove=\"onRemove\"\n >\n <slot>\n <div class=\"image-slot\">\n <QxsIcon\n size=\"32px\"\n :icon=\"UploadImage\"\n />\n <p>{{ placeholder }}</p>\n </div>\n </slot>\n <template #file=\"{ file }\">\n <img\n :class=\"`${nsEl.namespace.value}-upload-list__item-thumbnail`\"\n :src=\"file.url\"\n >\n <span :class=\"`${nsEl.namespace.value}-upload-list__item-actions`\">\n <span\n :class=\"`${nsEl.namespace.value}-upload-list__item-preview`\"\n @click=\"onPreview(file)\"\n >\n <ZoomIn size=\"14px\" />\n </span>\n <span style=\"width: 1px; height: 14px; background-color: rgb(255 255 255 / 50%);\" />\n <span\n v-if=\"!disabled\"\n :class=\"`${nsEl.namespace.value}-upload-list__item-delete`\"\n @click=\"onRemove(file)\"\n >\n <Delete size=\"14px\" />\n </span>\n </span>\n </template>\n <template #tip>\n <slot name=\"tip\">\n <div\n v-if=\"!notip\"\n :class=\"`${nsEl.namespace.value}-upload__tip-text`\"\n >\n <div class=\"tip-content\">\n {{ tipMessage }}\n </div>\n </div>\n </slot>\n </template>\n </ElUpload>\n\n <ElImageViewer\n v-if=\"uploadData.imageViewerVisible\"\n :url-list=\"fileList.map((item: UploadFile) => item.url).filter((v: string | undefined) => v !== undefined)\"\n :initial-index=\"initialIndex\"\n teleported\n @close=\"previewClose\"\n />\n </div>\n</template>\n"],"names":["emits","__emit","attrs","useAttrs","fileList","_useModel","__props","nsEl","useNamespace","initialIndex","ref","uploadData","imageViewerVisible","progress","preview","percent","cssVar","computed","cssVarBlock","ns","namespace","value","width","height","exts","split","map","ext","pop","tipMessage","tipText","join","size","onPreview","file","indexOf","onRemove","splice","previewClose","handleBeforeUpload","fileExt","name","isTypeOk","includes","isSizeOk","URL","createObjectURL","beforeUpload","ElMessage","error","onProgress","evt","Math","floor","onSuccess","args","_createElementBlock","class","_normalizeClass","_unref","e","style","_createVNode","ElUpload","_mergeProps","$event","drag","limit","headers","action","data","accept","length","_withCtx","_createElementVNode","src","url","onClick","ZoomIn","disabled","Delete","tip","_renderSlot","_ctx","notip","_hoisted_5","_toDisplayString","_hoisted_1","_component_QxsIcon","icon","UploadImage","placeholder","_createBlock","ElImageViewer","item","filter","v","teleported","onClose"],"mappings":"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"}
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, UploadImage, ZoomIn } from '@qxs-bns/icons'\nimport { ElImageViewer, ElMessage, ElUpload, useNamespace } from 'element-plus'\nimport { computed, onUnmounted, ref, useAttrs } from 'vue'\n\n// 类型定义\nexport interface ImageUploadProps {\n /** 上传地址(必需) */\n action: UploadProps['action']\n /** 请求头 */\n headers?: UploadProps['headers']\n /** 上传时附带的额外参数 */\n data?: UploadProps['data']\n /** 上传的文件字段名 */\n name?: UploadProps['name']\n /** 文件大小限制(MB) */\n size?: number\n /** 图片显示宽度(px) */\n width?: number\n /** 图片显示高度(px) */\n height?: number\n /** 接受的文件类型 */\n accept?: string\n /** 上传区域提示文字 */\n placeholder?: string\n /** 是否隐藏提示文字 */\n notip?: boolean\n /** 自定义提示文字 */\n tipText?: string\n /** 上传前的钩子函数 */\n beforeUpload?: UploadProps['beforeUpload']\n /** 是否禁用 */\n disabled?: boolean\n /** 最大上传数量 */\n limit?: number\n}\n\ninterface UploadProgress {\n preview: string\n percent: number\n}\n\n// 组件名称\ndefineOptions({\n name: 'QxsImageUpload',\n})\n\n// Props 定义\nconst {\n action,\n headers,\n data,\n name = 'file',\n size = 20,\n width = 160,\n height = 90,\n limit = 1,\n placeholder = '上传图片',\n notip = false,\n accept = 'image/jpeg,image/jpg,image/png,image/gif',\n beforeUpload,\n tipText = '',\n disabled = false,\n} = defineProps<ImageUploadProps>()\n\n// Emits 定义 - 统一事件命名\nconst emits = defineEmits<{\n success: [res: any, uploadFile: UploadFile, uploadFiles: UploadFiles]\n remove: [file: UploadFile]\n}>()\n\nconst attrs = useAttrs()\n\nconst fileList = defineModel('fileList', {\n type: Array as () => UploadFile[],\n default: () => [],\n})\n\n// 命名空间\nconst nsEl = useNamespace('image-upload')\n\nconst initialIndex = ref(0)\n// 响应式数据\nconst uploadData = ref<{\n imageViewerVisible: boolean\n progress: UploadProgress\n}>({\n imageViewerVisible: false,\n progress: {\n preview: '',\n percent: 0,\n },\n})\n\nconst cssVar = computed(() => {\n return nsEl.cssVarBlock({\n ns: nsEl.namespace.value,\n width: `${width}px`,\n height: `${height}px`,\n })\n})\n\n// 计算属性\nconst exts = computed(() =>\n accept.split(',').map(ext => ext.split('/').pop()),\n)\n\nconst tipMessage = computed(() => {\n if (tipText) {\n return tipText\n }\n\n const formatText = `上传图片支持 ${exts.value.join(' / ')} 格式,且图片大小不超过 ${size}MB`\n const sizeText = width && height ? `,建议图片尺寸为 ${width}×${height}` : ''\n\n return formatText + sizeText\n})\n\n// 方法\nfunction onPreview(file: UploadFile) {\n initialIndex.value = fileList.value.indexOf(file)\n uploadData.value.imageViewerVisible = true\n}\nfunction onRemove(file: UploadFile) {\n fileList.value.splice(fileList.value.indexOf(file), 1)\n}\n\nfunction previewClose() {\n uploadData.value.imageViewerVisible = false\n}\n\nconst handleBeforeUpload: UploadProps['beforeUpload'] = (file) => {\n // 参数校验\n if (!file || !file.name) {\n ElMessage.error('文件信息无效!')\n return false\n }\n\n // 文件类型校验\n const fileExt = file.name.split('.').pop()?.toLowerCase() ?? ''\n const isTypeOk = exts.value.some(ext => ext?.toLowerCase() === fileExt)\n\n if (!isTypeOk) {\n ElMessage.error(`上传图片只支持 ${exts.value.join(' / ')} 格式!`)\n return false\n }\n\n // 文件大小校验\n const fileSizeMB = file.size / 1024 / 1024\n if (fileSizeMB > size) {\n ElMessage.error(`上传图片大小不能超过 ${size}MB!`)\n return false\n }\n\n // 设置预览\n try {\n uploadData.value.progress.preview = URL.createObjectURL(file)\n }\n catch (error) {\n console.warn('创建预览失败:', error)\n }\n\n // 执行自定义校验\n return beforeUpload ? beforeUpload(file) : true\n}\n\nconst onProgress: UploadProps['onProgress'] = (evt) => {\n uploadData.value.progress.percent = Math.floor(evt.percent)\n}\n\nconst onSuccess: UploadProps['onSuccess'] = (...args) => {\n // 清理预览 URL,防止内存泄漏\n if (uploadData.value.progress.preview) {\n URL.revokeObjectURL(uploadData.value.progress.preview)\n }\n\n uploadData.value.progress = {\n preview: '',\n percent: 0,\n }\n emits('success', ...args)\n}\n\n// 组件卸载时清理资源\nonUnmounted(() => {\n if (uploadData.value.progress.preview) {\n URL.revokeObjectURL(uploadData.value.progress.preview)\n }\n})\n</script>\n\n<template>\n <div\n :class=\"nsEl.e('container')\"\n :style=\"cssVar\"\n >\n <ElUpload\n v-bind=\"attrs\"\n v-model:file-list=\"fileList\"\n drag\n :limit=\"limit\"\n list-type=\"picture-card\"\n :headers=\"headers\"\n :action=\"action\"\n :data=\"data\"\n :name=\"name\"\n :accept=\"accept\"\n :before-upload=\"handleBeforeUpload\"\n :on-progress=\"onProgress\"\n :on-preview=\"onPreview\"\n :on-success=\"onSuccess\"\n :class=\"[nsEl.e('control'), limit <= fileList.length ? nsEl.e('more-than-limit') : '']\"\n :on-remove=\"onRemove\"\n >\n <slot>\n <div class=\"image-slot\">\n <QxsIcon\n size=\"32px\"\n :icon=\"UploadImage\"\n />\n <p>{{ placeholder }}</p>\n </div>\n </slot>\n <template #file=\"{ file }\">\n <img\n :class=\"`${nsEl.namespace.value}-upload-list__item-thumbnail`\"\n :src=\"file.url\"\n >\n <span :class=\"`${nsEl.namespace.value}-upload-list__item-actions`\">\n <span\n :class=\"[\n `${nsEl.namespace.value}-upload-list__item-preview`,\n `${nsEl.namespace.value}-image-upload__action-btn`,\n `${nsEl.namespace.value}-image-upload__action-btn--preview`,\n ]\"\n @click=\"onPreview(file)\"\n >\n <ZoomIn size=\"14px\" />\n </span>\n <span :class=\"`${nsEl.namespace.value}-upload-list__item-divider`\" />\n <span\n v-if=\"!disabled\"\n :class=\"[\n `${nsEl.namespace.value}-upload-list__item-delete`,\n `${nsEl.namespace.value}-image-upload__action-btn`,\n `${nsEl.namespace.value}-image-upload__action-btn--delete`,\n ]\"\n @click=\"onRemove(file)\"\n >\n <Delete size=\"14px\" />\n </span>\n </span>\n </template>\n <template #tip>\n <slot name=\"tip\">\n <div\n v-if=\"!notip\"\n :class=\"`${nsEl.namespace.value}-upload__tip-text`\"\n >\n <div class=\"tip-content\">\n {{ tipMessage }}\n </div>\n </div>\n </slot>\n </template>\n </ElUpload>\n\n <ElImageViewer\n v-if=\"uploadData.imageViewerVisible\"\n :url-list=\"fileList.map((item: UploadFile) => item.url).filter((v: string | undefined) => v !== undefined)\"\n :initial-index=\"initialIndex\"\n teleported\n @close=\"previewClose\"\n />\n </div>\n</template>\n"],"names":["emits","__emit","attrs","useAttrs","fileList","_useModel","__props","nsEl","useNamespace","initialIndex","ref","uploadData","imageViewerVisible","progress","preview","percent","cssVar","computed","cssVarBlock","ns","namespace","value","width","height","exts","split","map","ext","pop","tipMessage","tipText","join","size","onPreview","file","indexOf","onRemove","splice","previewClose","handleBeforeUpload","name","ElMessage","error","fileExt","toLowerCase","some","URL","createObjectURL","console","warn","beforeUpload","onProgress","evt","Math","floor","onSuccess","args","revokeObjectURL","onUnmounted","_createElementBlock","class","_normalizeClass","_unref","e","style","_createVNode","ElUpload","_mergeProps","$event","drag","limit","headers","action","data","accept","length","_withCtx","_createElementVNode","src","url","onClick","ZoomIn","disabled","Delete","tip","_renderSlot","_ctx","notip","_hoisted_5","_toDisplayString","_hoisted_1","_component_QxsIcon","icon","UploadImage","placeholder","_createBlock","ElImageViewer","item","filter","v","teleported","onClose"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";exports.version="0.0.70";
1
+ "use strict";exports.version="0.0.72";
2
2
  //# sourceMappingURL=package.json.cjs.map
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("vue"),t=require("./data-chart-card-bg-left.svg.cjs"),a=require("./data-chart-card-bg-right.svg.cjs"),c=require("./empty.vue.cjs");const l={class:"data-chart-card"},r={class:"title"},o=["title"],n={class:"context"},s={class:"suffix-icon"},d={key:1,class:"data-chart-card-wrap"},i=["title"],m={class:"context"};var p=e.defineComponent({name:"DataChartCard",__name:"card",props:{chartData:{type:Object,default:()=>({colDesc:[],xGroupByDesc:[],data:[],modelName:""})}},setup(p){const k=p,u=`url(${t.default})`,g=`url(${a.default})`;function D(e){const t=k.chartData.xGroupByDesc?.colDesc||"";return t?t+e[t]:""}return(t,a)=>{const k=e.resolveComponent("el-scrollbar");return e.openBlock(),e.createElementBlock("div",l,[e.createElementVNode("p",r,e.toDisplayString(p.chartData.modelName),1),p.chartData.data.length?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[p.chartData.groupByDesc.length?(e.openBlock(),e.createBlock(k,{key:0},{default:e.withCtx(()=>[e.createElementVNode("div",{class:e.normalizeClass({"data-chart-card-grid-layout":p.chartData.groupByDesc.length})},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(p.chartData.data,(t,a)=>(e.openBlock(),e.createElementBlock("div",{key:a,class:"card-item",style:e.normalizeStyle({"background-image":`${u}, ${g}`})},[e.createElementVNode("div",{class:"card-title",title:D(t)},e.toDisplayString(D(t)),9,o),e.createElementVNode("div",n,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(p.chartData.colDesc,(a,c)=>(e.openBlock(),e.createElementBlock("span",{key:a},[e.createTextVNode(e.toDisplayString(`${a}: `||"-"),1),e.createElementVNode("strong",null,e.toDisplayString(t[a]||"-"),1),e.createTextVNode(" "+e.toDisplayString(c===p.chartData.colDesc.length-1?"":","),1)]))),128))]),e.createElementVNode("div",s,e.toDisplayString(a+1),1)],4))),128))],2)]),_:1})):(e.openBlock(),e.createElementBlock("div",d,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(p.chartData.data,(t,a)=>(e.openBlock(),e.createElementBlock("div",{key:a,class:"card-item",style:e.normalizeStyle({"background-image":`${u}, ${g}`})},[e.createElementVNode("div",{class:"card-title",title:p.chartData.modelName},e.toDisplayString(p.chartData.modelName),9,i),e.createElementVNode("div",m,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(p.chartData.colDesc,(a,c)=>(e.openBlock(),e.createElementBlock("span",{key:a},[t?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createTextVNode(e.toDisplayString(`${a}: `||"-"),1),e.createElementVNode("strong",null,e.toDisplayString(t[a]||"-"),1),e.createTextVNode(" "+e.toDisplayString(c===p.chartData.colDesc.length-1?"":","),1)],64)):e.createCommentVNode("v-if",!0)]))),128))])],4))),128))]))],64)):(e.openBlock(),e.createBlock(c.default,{key:1}))])}}});exports.default=p;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("vue"),t=require("element-plus"),a=require("./data-chart-card-bg-left.svg.cjs"),l=require("./data-chart-card-bg-right.svg.cjs"),c=require("./empty.vue.cjs");const r={class:"data-chart-card"},o={class:"title"},n=["title"],s={class:"context"},d={class:"suffix-icon"},i={key:1,class:"data-chart-card-wrap"},m=["title"],p={class:"context"};var k=e.defineComponent({name:"DataChartCard",__name:"card",props:{chartData:{type:Object,default:()=>({colDesc:[],xGroupByDesc:[],data:[],modelName:""})}},setup(k){const u=k,g=`url(${a.default})`,D=`url(${l.default})`;function B(e){const t=u.chartData.xGroupByDesc?.colDesc||"";return t?t+e[t]:""}return(a,l)=>(e.openBlock(),e.createElementBlock("div",r,[e.createElementVNode("p",o,e.toDisplayString(k.chartData.modelName),1),k.chartData.data.length?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[k.chartData.groupByDesc.length?(e.openBlock(),e.createBlock(e.unref(t.ElScrollbar),{key:0},{default:e.withCtx(()=>[e.createElementVNode("div",{class:e.normalizeClass({"data-chart-card-grid-layout":k.chartData.groupByDesc.length})},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(k.chartData.data,(t,a)=>(e.openBlock(),e.createElementBlock("div",{key:a,class:"card-item",style:e.normalizeStyle({"background-image":`${g}, ${D}`})},[e.createElementVNode("div",{class:"card-title",title:B(t)},e.toDisplayString(B(t)),9,n),e.createElementVNode("div",s,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(k.chartData.colDesc,(a,l)=>(e.openBlock(),e.createElementBlock("span",{key:a},[e.createTextVNode(e.toDisplayString(`${a}: `||"-"),1),e.createElementVNode("strong",null,e.toDisplayString(t[a]||"-"),1),e.createTextVNode(" "+e.toDisplayString(l===k.chartData.colDesc.length-1?"":","),1)]))),128))]),e.createElementVNode("div",d,e.toDisplayString(a+1),1)],4))),128))],2)]),_:1})):(e.openBlock(),e.createElementBlock("div",i,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(k.chartData.data,(t,a)=>(e.openBlock(),e.createElementBlock("div",{key:a,class:"card-item",style:e.normalizeStyle({"background-image":`${g}, ${D}`})},[e.createElementVNode("div",{class:"card-title",title:k.chartData.modelName},e.toDisplayString(k.chartData.modelName),9,m),e.createElementVNode("div",p,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(k.chartData.colDesc,(a,l)=>(e.openBlock(),e.createElementBlock("span",{key:a},[t?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createTextVNode(e.toDisplayString(`${a}: `||"-"),1),e.createElementVNode("strong",null,e.toDisplayString(t[a]||"-"),1),e.createTextVNode(" "+e.toDisplayString(l===k.chartData.colDesc.length-1?"":","),1)],64)):e.createCommentVNode("v-if",!0)]))),128))])],4))),128))]))],64)):(e.openBlock(),e.createBlock(c.default,{key:1}))]))}});exports.default=k;
2
2
  //# sourceMappingURL=card.vue2.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"card.vue2.cjs","sources":["../../../../../../../packages/components/src/data-chart/src/components/card.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { PropType } from 'vue'\nimport type { EChartData, IFormatPublicData } from '../utils/types'\nimport bgLeft from './data-chart-card-bg-left.svg'\nimport bgRight from './data-chart-card-bg-right.svg'\nimport Empty from './empty.vue'\n\ndefineOptions({\n name: 'DataChartCard',\n})\n\nconst props = defineProps({\n chartData: {\n type: Object as PropType<IFormatPublicData>,\n default: () => ({\n colDesc: [],\n xGroupByDesc: [],\n data: [],\n modelName: '',\n }),\n },\n})\n\n// 将 SVG 文件转换为 URL\nconst bgLeftUrl = `url(${bgLeft})`\nconst bgRightUrl = `url(${bgRight})`\n\nfunction cardTitle(dataItem: EChartData['data'][0]) {\n const colDesc = props.chartData.xGroupByDesc?.colDesc || ''\n\n return colDesc ? (colDesc + dataItem[colDesc]) : ''\n}\n</script>\n\n<template>\n <div class=\"data-chart-card\">\n <p class=\"title\">\n {{ chartData.modelName }}\n </p>\n <template v-if=\"chartData.data.length\">\n <el-scrollbar v-if=\"chartData.groupByDesc.length\">\n <div :class=\"{ 'data-chart-card-grid-layout': chartData.groupByDesc.length }\">\n <div\n v-for=\"(dataItem, dataIndex) in chartData.data\"\n :key=\"dataIndex\"\n class=\"card-item\"\n :style=\"{\n 'background-image': `${bgLeftUrl}, ${bgRightUrl}`,\n }\"\n >\n <div\n class=\"card-title\"\n :title=\"cardTitle(dataItem)\"\n >\n {{ cardTitle(dataItem) }}\n </div>\n <div class=\"context\">\n <span\n v-for=\"(item, index) in chartData.colDesc\"\n :key=\"item\"\n >\n {{ `${item}: ` || '-' }}<strong>{{ dataItem[item] || '-' }}</strong> {{ index === chartData.colDesc.length\n - 1 ? '' : ',' }}\n </span>\n </div>\n <div class=\"suffix-icon\">\n {{ dataIndex + 1 }}\n </div>\n </div>\n </div>\n </el-scrollbar>\n <div\n v-else\n class=\"data-chart-card-wrap\"\n >\n <div\n v-for=\"(dataItem, dataIndex) in chartData.data\"\n :key=\"dataIndex\"\n class=\"card-item\"\n :style=\"{\n 'background-image': `${bgLeftUrl}, ${bgRightUrl}`,\n }\"\n >\n <div\n class=\"card-title\"\n :title=\"chartData.modelName\"\n >\n {{ chartData.modelName }}\n </div>\n <div class=\"context\">\n <span\n v-for=\"(item, index) in chartData.colDesc\"\n :key=\"item\"\n >\n <template v-if=\"dataItem\">\n {{ `${item}: ` || '-' }}<strong>{{ dataItem[item] || '-' }}</strong> {{ index === chartData.colDesc.length\n - 1 ? '' : ',' }}\n </template>\n </span>\n </div>\n </div>\n </div>\n </template>\n <Empty v-else />\n </div>\n</template>\n\n<style scoped lang=\"scss\">\n.data-chart-card {\n display: flex;\n flex-direction: column;\n\n .title {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 0 5.5px;\n margin: 0;\n font-family: sans-serif;\n font-size: 14px;\n font-weight: 600;\n line-height: 26px;\n color: #464646;\n }\n\n .data-chart-card-grid-layout {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));\n gap: 10px;\n width: calc(100% - 3px);\n }\n\n .data-chart-card-wrap {\n height: 100% !important;\n\n .card-item {\n width: 100% !important;\n }\n }\n\n .card-item {\n position: relative;\n background-repeat: no-repeat;\n background-position: left top, right top;\n background-size: contain, contain;\n border: 2px solid #2196f3;\n border-radius: 6px;\n\n .suffix-icon {\n position: absolute;\n right: 1px;\n bottom: calc(25% - 14px);\n width: 20px;\n font-size: 20px;\n font-weight: bold;\n color: #fff;\n text-align: center;\n }\n\n .card-title {\n padding-left: 15px;\n margin-top: 10px;\n margin-bottom: 5px;\n overflow: hidden;\n font-size: 16px;\n font-weight: bold;\n color: #2196f3;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .context {\n padding: 0 30px 10px 20px;\n font-size: 14px;\n color: #464646;\n }\n }\n}\n</style>\n"],"names":["props","__props","bgLeftUrl","bgLeft","bgRightUrl","bgRight","cardTitle","dataItem","colDesc","chartData","xGroupByDesc","_openBlock","_createElementBlock","_hoisted_1","_createElementVNode","_hoisted_2","_toDisplayString","modelName","data","length","_Fragment","key","groupByDesc","_createBlock","_component_el_scrollbar","class","_normalizeClass","dataIndex","style","_normalizeStyle","title","_hoisted_3","_hoisted_4","item","index","_createTextVNode","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","Empty"],"mappings":"6iBAWA,MAAMA,EAAQC,EAaRC,EAAY,OAAOC,EAAAA,WACnBC,EAAa,OAAOC,EAAAA,WAE1B,SAASC,EAAUC,GACjB,MAAMC,EAAUR,EAAMS,UAAUC,cAAcF,SAAW,GAEzD,OAAOA,EAAWA,EAAUD,EAASC,GAAY,EACnD,0DAIE,OAAAG,cAAAC,qBAqEM,MArENC,EAqEM,CApEJC,EAAAA,mBAEI,IAFJC,EAEIC,kBADCf,EAAAQ,UAAUQ,WAAS,GAERhB,EAAAQ,UAAUS,KAAKC,sBAA/BP,EAAAA,mBA+DWQ,EAAAA,SAAA,CAAAC,IAAA,GAAA,CA9DWpB,EAAAQ,UAAUa,YAAYH,sBAA1CI,EAAAA,YA8BeC,EAAA,CAAAH,IAAA,GAAA,mBA7Bb,IA4BM,CA5BNP,EAAAA,mBA4BM,MAAA,CA5BAW,MAAKC,EAAAA,eAAA,CAAA,8BAAmCzB,EAAAQ,UAAUa,YAAYH,YAClER,EAAAA,WAAA,GAAAC,EAAAA,mBA0BMQ,EAAAA,2BAzB4BnB,EAAAQ,UAAUS,KAAI,CAAtCX,EAAUoB,mBADpBf,EAAAA,mBA0BM,MAAA,CAxBHS,IAAKM,EACNF,MAAM,YACLG,MAAKC,EAAAA,eAAA,CAAyC,mBAAA,GAAA3B,MAAcE,QAI7DU,EAAAA,mBAKM,MAAA,CAJJW,MAAM,aACLK,MAAOxB,EAAUC,IAEfS,EAAAA,gBAAAV,EAAUC,IAAQ,EAAAwB,GAEvBjB,EAAAA,mBAQM,MARNkB,EAQM,EAPJrB,EAAAA,WAAA,GAAAC,EAAAA,mBAMOQ,EAAAA,2BALmBnB,EAAAQ,UAAUD,QAAO,CAAjCyB,EAAMC,mBADhBtB,EAAAA,mBAMO,OAAA,CAJJS,IAAKY,GAAI,wCAEJA,OAAI,KAAA,GAAcnB,EAAAA,mBAA4C,SAAA,KAAAE,EAAAA,gBAAjCT,EAAS0B,IAAI,KAAA,GAAoBE,EAAAA,gBAAA,sBAAID,IAAUjC,YAAUO,QAAQW,gCAIxGL,EAAAA,mBAEM,MAFNsB,EAEMpB,EAAAA,gBADDW,EAAS,GAAA,6BAKpBhB,EAAAA,YAAAC,qBA8BM,MA9BNyB,EA8BM,EA1BJ1B,EAAAA,WAAA,GAAAC,EAAAA,mBAyBMQ,EAAAA,2BAxB4BnB,EAAAQ,UAAUS,KAAI,CAAtCX,EAAUoB,mBADpBf,EAAAA,mBAyBM,MAAA,CAvBHS,IAAKM,EACNF,MAAM,YACLG,MAAKC,EAAAA,eAAA,CAAuC,mBAAA,GAAA3B,MAAcE,QAI3DU,EAAAA,mBAKM,MAAA,CAJJW,MAAM,aACLK,MAAO7B,EAAAQ,UAAUQ,WAEfD,EAAAA,gBAAAf,EAAAQ,UAAUQ,WAAS,EAAAqB,GAExBxB,EAAAA,mBAUM,MAVNyB,EAUM,EATJ5B,EAAAA,WAAA,GAAAC,EAAAA,mBAQOQ,EAAAA,2BAPmBnB,EAAAQ,UAAUD,QAAO,CAAjCyB,EAAMC,mBADhBtB,EAAAA,mBAQO,OAAA,CANJS,IAAKY,GAAI,CAEM1B,iBAAhBK,EAAAA,mBAGWQ,EAAAA,SAAA,CAAAC,IAAA,GAAA,wCAFHY,OAAI,KAAA,GAAcnB,EAAAA,mBAA4C,SAAA,KAAAE,EAAAA,gBAAjCT,EAAS0B,IAAI,KAAA,GAAoBE,EAAAA,gBAAA,sBAAID,IAAUjC,YAAUO,QAAQW,0GAQhHI,EAAAA,YAAgBiB,EAAAA,QAAA,CAAAnB,IAAA"}
1
+ {"version":3,"file":"card.vue2.cjs","sources":["../../../../../../../packages/components/src/data-chart/src/components/card.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { PropType } from 'vue'\nimport type { EChartData, IFormatPublicData } from '../utils/types'\nimport { ElScrollbar } from 'element-plus'\nimport bgLeft from './data-chart-card-bg-left.svg'\nimport bgRight from './data-chart-card-bg-right.svg'\nimport Empty from './empty.vue'\n\ndefineOptions({\n name: 'DataChartCard',\n})\n\nconst props = defineProps({\n chartData: {\n type: Object as PropType<IFormatPublicData>,\n default: () => ({\n colDesc: [],\n xGroupByDesc: [],\n data: [],\n modelName: '',\n }),\n },\n})\n\n// 将 SVG 文件转换为 URL\nconst bgLeftUrl = `url(${bgLeft})`\nconst bgRightUrl = `url(${bgRight})`\n\nfunction cardTitle(dataItem: EChartData['data'][0]) {\n const colDesc = props.chartData.xGroupByDesc?.colDesc || ''\n\n return colDesc ? (colDesc + dataItem[colDesc]) : ''\n}\n</script>\n\n<template>\n <div class=\"data-chart-card\">\n <p class=\"title\">\n {{ chartData.modelName }}\n </p>\n <template v-if=\"chartData.data.length\">\n <ElScrollbar v-if=\"chartData.groupByDesc.length\">\n <div :class=\"{ 'data-chart-card-grid-layout': chartData.groupByDesc.length }\">\n <div\n v-for=\"(dataItem, dataIndex) in chartData.data\"\n :key=\"dataIndex\"\n class=\"card-item\"\n :style=\"{\n 'background-image': `${bgLeftUrl}, ${bgRightUrl}`,\n }\"\n >\n <div\n class=\"card-title\"\n :title=\"cardTitle(dataItem)\"\n >\n {{ cardTitle(dataItem) }}\n </div>\n <div class=\"context\">\n <span\n v-for=\"(item, index) in chartData.colDesc\"\n :key=\"item\"\n >\n {{ `${item}: ` || '-' }}<strong>{{ dataItem[item] || '-' }}</strong> {{ index === chartData.colDesc.length\n - 1 ? '' : ',' }}\n </span>\n </div>\n <div class=\"suffix-icon\">\n {{ dataIndex + 1 }}\n </div>\n </div>\n </div>\n </ElScrollbar>\n <div\n v-else\n class=\"data-chart-card-wrap\"\n >\n <div\n v-for=\"(dataItem, dataIndex) in chartData.data\"\n :key=\"dataIndex\"\n class=\"card-item\"\n :style=\"{\n 'background-image': `${bgLeftUrl}, ${bgRightUrl}`,\n }\"\n >\n <div\n class=\"card-title\"\n :title=\"chartData.modelName\"\n >\n {{ chartData.modelName }}\n </div>\n <div class=\"context\">\n <span\n v-for=\"(item, index) in chartData.colDesc\"\n :key=\"item\"\n >\n <template v-if=\"dataItem\">\n {{ `${item}: ` || '-' }}<strong>{{ dataItem[item] || '-' }}</strong> {{ index === chartData.colDesc.length\n - 1 ? '' : ',' }}\n </template>\n </span>\n </div>\n </div>\n </div>\n </template>\n <Empty v-else />\n </div>\n</template>\n\n<style scoped lang=\"scss\">\n.data-chart-card {\n display: flex;\n flex-direction: column;\n\n .title {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 0 5.5px;\n margin: 0;\n font-family: sans-serif;\n font-size: 14px;\n font-weight: 600;\n line-height: 26px;\n color: #464646;\n }\n\n .data-chart-card-grid-layout {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));\n gap: 10px;\n width: calc(100% - 3px);\n }\n\n .data-chart-card-wrap {\n height: 100% !important;\n\n .card-item {\n width: 100% !important;\n }\n }\n\n .card-item {\n position: relative;\n background-repeat: no-repeat;\n background-position: left top, right top;\n background-size: contain, contain;\n border: 2px solid #2196f3;\n border-radius: 6px;\n\n .suffix-icon {\n position: absolute;\n right: 1px;\n bottom: calc(25% - 14px);\n width: 20px;\n font-size: 20px;\n font-weight: bold;\n color: #fff;\n text-align: center;\n }\n\n .card-title {\n padding-left: 15px;\n margin-top: 10px;\n margin-bottom: 5px;\n overflow: hidden;\n font-size: 16px;\n font-weight: bold;\n color: #2196f3;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .context {\n padding: 0 30px 10px 20px;\n font-size: 14px;\n color: #464646;\n }\n }\n}\n</style>\n"],"names":["props","__props","bgLeftUrl","bgLeft","bgRightUrl","bgRight","cardTitle","dataItem","colDesc","chartData","xGroupByDesc","_openBlock","_createElementBlock","_hoisted_1","_createElementVNode","_hoisted_2","_toDisplayString","modelName","data","length","_Fragment","key","groupByDesc","_createBlock","_unref","ElScrollbar","class","_normalizeClass","dataIndex","style","_normalizeStyle","title","_hoisted_3","_hoisted_4","item","index","_createTextVNode","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","Empty"],"mappings":"ukBAYA,MAAMA,EAAQC,EAaRC,EAAY,OAAOC,EAAAA,WACnBC,EAAa,OAAOC,EAAAA,WAE1B,SAASC,EAAUC,GACjB,MAAMC,EAAUR,EAAMS,UAAUC,cAAcF,SAAW,GAEzD,OAAOA,EAAWA,EAAUD,EAASC,GAAY,EACnD,eAIEG,cAAAC,qBAqEM,MArENC,EAqEM,CApEJC,EAAAA,mBAEI,IAFJC,EAEIC,kBADCf,EAAAQ,UAAUQ,WAAS,GAERhB,EAAAQ,UAAUS,KAAKC,sBAA/BP,EAAAA,mBA+DWQ,EAAAA,SAAA,CAAAC,IAAA,GAAA,CA9DUpB,EAAAQ,UAAUa,YAAYH,sBAAzCI,cA8BcC,EAAAA,MAAAC,EAAAA,aAAA,CAAAJ,IAAA,GAAA,mBA7BZ,IA4BM,CA5BNP,EAAAA,mBA4BM,MAAA,CA5BAY,MAAKC,EAAAA,eAAA,CAAA,8BAAmC1B,EAAAQ,UAAUa,YAAYH,YAClER,EAAAA,WAAA,GAAAC,EAAAA,mBA0BMQ,EAAAA,2BAzB4BnB,EAAAQ,UAAUS,KAAI,CAAtCX,EAAUqB,mBADpBhB,EAAAA,mBA0BM,MAAA,CAxBHS,IAAKO,EACNF,MAAM,YACLG,MAAKC,EAAAA,eAAA,CAAyC,mBAAA,GAAA5B,MAAcE,QAI7DU,EAAAA,mBAKM,MAAA,CAJJY,MAAM,aACLK,MAAOzB,EAAUC,IAEfS,EAAAA,gBAAAV,EAAUC,IAAQ,EAAAyB,GAEvBlB,EAAAA,mBAQM,MARNmB,EAQM,EAPJtB,EAAAA,WAAA,GAAAC,EAAAA,mBAMOQ,EAAAA,2BALmBnB,EAAAQ,UAAUD,QAAO,CAAjC0B,EAAMC,mBADhBvB,EAAAA,mBAMO,OAAA,CAJJS,IAAKa,GAAI,wCAEJA,OAAI,KAAA,GAAcpB,EAAAA,mBAA4C,SAAA,KAAAE,EAAAA,gBAAjCT,EAAS2B,IAAI,KAAA,GAAoBE,EAAAA,gBAAA,sBAAID,IAAUlC,YAAUO,QAAQW,gCAIxGL,EAAAA,mBAEM,MAFNuB,EAEMrB,EAAAA,gBADDY,EAAS,GAAA,6BAKpBjB,EAAAA,YAAAC,qBA8BM,MA9BN0B,EA8BM,EA1BJ3B,EAAAA,WAAA,GAAAC,EAAAA,mBAyBMQ,EAAAA,2BAxB4BnB,EAAAQ,UAAUS,KAAI,CAAtCX,EAAUqB,mBADpBhB,EAAAA,mBAyBM,MAAA,CAvBHS,IAAKO,EACNF,MAAM,YACLG,MAAKC,EAAAA,eAAA,CAAuC,mBAAA,GAAA5B,MAAcE,QAI3DU,EAAAA,mBAKM,MAAA,CAJJY,MAAM,aACLK,MAAO9B,EAAAQ,UAAUQ,WAEfD,EAAAA,gBAAAf,EAAAQ,UAAUQ,WAAS,EAAAsB,GAExBzB,EAAAA,mBAUM,MAVN0B,EAUM,EATJ7B,EAAAA,WAAA,GAAAC,EAAAA,mBAQOQ,EAAAA,2BAPmBnB,EAAAQ,UAAUD,QAAO,CAAjC0B,EAAMC,mBADhBvB,EAAAA,mBAQO,OAAA,CANJS,IAAKa,GAAI,CAEM3B,iBAAhBK,EAAAA,mBAGWQ,EAAAA,SAAA,CAAAC,IAAA,GAAA,wCAFHa,OAAI,KAAA,GAAcpB,EAAAA,mBAA4C,SAAA,KAAAE,EAAAA,gBAAjCT,EAAS2B,IAAI,KAAA,GAAoBE,EAAAA,gBAAA,sBAAID,IAAUlC,YAAUO,QAAQW,0GAQhHI,EAAAA,YAAgBkB,EAAAA,QAAA,CAAApB,IAAA"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("vue"),t=require("@qxs-bns/hooks"),a=require("./empty.vue.cjs");const o={key:0,class:"title"};var l=e.defineComponent({name:"DataChartTable",__name:"table",props:{chartData:{type:Object,default:()=>({colDesc:[],xGroupByDesc:[],data:[],modelName:""})}},setup(l){const r=l,c=t.useNamespace("data-chart"),n=e.computed(()=>r.chartData.groupByDesc.find(e=>!e.xAxis));function s(e){if(!e)return 100;const t=14*e.length+20+30;return t<100?100:t}return(t,r)=>{const i=e.resolveComponent("el-table-column"),p=e.resolveComponent("el-table");return e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass([e.unref(c).e("table")])},[l.chartData.modelName?(e.openBlock(),e.createElementBlock("p",o,[e.createElementVNode("span",null,e.toDisplayString(l.chartData.modelName),1)])):e.createCommentVNode("v-if",!0),e.createVNode(p,{class:"customize-table",data:l.chartData.data,stripe:"",height:"100%"},{empty:e.withCtx(()=>[e.createVNode(a.default)]),default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(l.chartData.groupByDesc,(t,a)=>(e.openBlock(),e.createBlock(i,{key:`${t.colDesc}${t.groupByDesc}${a}`,align:"center","show-overflow-tooltip":"",sortable:"","min-width":`${s(t.colDesc)}px`,prop:t.colDesc||""},{header:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(t.colDesc),1)]),default:e.withCtx(a=>[e.createTextVNode(e.toDisplayString((n.value&&(n.value.colDesc,t.colDesc),a.row[t.colDesc||""]||"--")),1)]),_:2},1032,["min-width","prop"]))),128)),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(l.chartData.colDesc,(t,a)=>(e.openBlock(),e.createBlock(i,{key:t+a,align:"center","min-width":`${s(t)}px`,label:t,"show-overflow-tooltip":"",sortable:"",prop:t},{header:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(t),1)]),_:2},1032,["min-width","label","prop"]))),128))]),_:1},8,["data"])],2)}}});exports.default=l;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("vue"),t=require("@qxs-bns/hooks"),a=require("element-plus"),l=require("./empty.vue.cjs");const o={key:0,class:"title"};var r=e.defineComponent({name:"DataChartTable",__name:"table",props:{chartData:{type:Object,default:()=>({colDesc:[],xGroupByDesc:[],data:[],modelName:""})}},setup(r){const c=r,n=t.useNamespace("data-chart"),s=e.computed(()=>c.chartData.groupByDesc.find(e=>!e.xAxis));function i(e){if(!e)return 100;const t=14*e.length+20+30;return t<100?100:t}return(t,c)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass([e.unref(n).e("table")])},[r.chartData.modelName?(e.openBlock(),e.createElementBlock("p",o,[e.createElementVNode("span",null,e.toDisplayString(r.chartData.modelName),1)])):e.createCommentVNode("v-if",!0),e.createVNode(e.unref(a.ElTable),{class:"customize-table",data:r.chartData.data,stripe:"",resizable:"",border:"",height:"100%"},{empty:e.withCtx(()=>[e.createVNode(l.default)]),default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(r.chartData.groupByDesc,(t,l)=>(e.openBlock(),e.createBlock(e.unref(a.ElTableColumn),{key:`${t.colDesc}${t.groupByDesc}${l}`,align:"center","show-overflow-tooltip":"",sortable:"","min-width":`${i(t.colDesc)}px`,prop:t.colDesc||""},{header:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(t.colDesc),1)]),default:e.withCtx(a=>[e.createTextVNode(e.toDisplayString((s.value&&(s.value.colDesc,t.colDesc),a.row[t.colDesc||""]||"--")),1)]),_:2},1032,["min-width","prop"]))),128)),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(r.chartData.colDesc,(t,l)=>(e.openBlock(),e.createBlock(e.unref(a.ElTableColumn),{key:t+l,align:"center","min-width":`${i(t)}px`,label:t,"show-overflow-tooltip":"",sortable:"",prop:t},{header:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(t),1)]),_:2},1032,["min-width","label","prop"]))),128))]),_:1},8,["data"])],2))}});exports.default=r;
2
2
  //# sourceMappingURL=table.vue.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"table.vue.cjs","sources":["../../../../../../../packages/components/src/data-chart/src/components/table.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { PropType } from 'vue'\nimport type { IFormatPublicData } from '../utils/types'\nimport { useNamespace } from '@qxs-bns/hooks'\nimport { computed } from 'vue'\nimport Empty from './empty.vue'\n\ndefineOptions({\n name: 'DataChartTable',\n})\n\nconst props = defineProps({\n chartData: {\n type: Object as PropType<IFormatPublicData>,\n default: () => ({\n colDesc: [],\n xGroupByDesc: [],\n data: [],\n modelName: '',\n }),\n },\n})\n\nconst ns = useNamespace('data-chart')\n\nconst yGroupByDesc = computed(() => {\n const row = props.chartData.groupByDesc.find(item => !item.xAxis)\n return row\n})\n\nfunction baseWidth(str: string | null) {\n if (!str) {\n return 100\n }\n const strWidth = str.length * 14 + 20 + 30\n return strWidth < 100 ? 100 : strWidth\n}\n</script>\n\n<template>\n <div :class=\"[ns.e('table')]\">\n <p\n v-if=\"chartData.modelName\"\n class=\"title\"\n >\n <span>{{ chartData.modelName }}</span>\n </p>\n <el-table\n class=\"customize-table\"\n :data=\"chartData.data\"\n stripe\n height=\"100%\"\n >\n <el-table-column\n v-for=\"(item, index) in chartData.groupByDesc\"\n :key=\"`${item.colDesc}${item.groupByDesc}${index}`\"\n align=\"center\"\n show-overflow-tooltip\n sortable\n :min-width=\"`${baseWidth(item.colDesc)}px`\"\n :prop=\"item.colDesc || ''\"\n >\n <template #header>\n {{ item.colDesc }}\n </template>\n <template #default=\"scoped\">\n {{ (yGroupByDesc && yGroupByDesc.colDesc === item.colDesc ? scoped.row[item.colDesc || ''] : scoped.row[item.colDesc || '']) || '--' }}\n </template>\n </el-table-column>\n <el-table-column\n v-for=\"(item, index) in chartData.colDesc\"\n :key=\"item + index\"\n align=\"center\"\n :min-width=\"`${baseWidth(item)}px`\"\n :label=\"item\"\n show-overflow-tooltip\n sortable\n :prop=\"item\"\n >\n <template #header>\n {{ item }}\n </template>\n </el-table-column>\n <template #empty>\n <Empty />\n </template>\n </el-table>\n </div>\n</template>\n"],"names":["props","__props","ns","useNamespace","yGroupByDesc","computed","chartData","groupByDesc","find","item","xAxis","baseWidth","str","strWidth","length","_createElementBlock","class","_normalizeClass","_unref","e","modelName","_openBlock","_hoisted_1","_createElementVNode","_toDisplayString","_createVNode","_component_el_table","data","stripe","height","empty","Empty","_Fragment","index","_createBlock","_component_el_table_column","key","colDesc","align","sortable","prop","header","_createTextVNode","default","_withCtx","scoped","value","row","label"],"mappings":"uVAWA,MAAMA,EAAQC,EAYRC,EAAKC,EAAAA,aAAa,cAElBC,EAAeC,EAAAA,SAAS,IAChBL,EAAMM,UAAUC,YAAYC,KAAKC,IAASA,EAAKC,QAI7D,SAASC,EAAUC,GACjB,IAAKA,EACH,OAAO,IAET,MAAMC,EAAwB,GAAbD,EAAIE,OAAc,GAAK,GACxC,OAAOD,EAAW,IAAM,IAAMA,CAChC,mHAIEE,EAAAA,mBA+CM,MAAA,CA/CAC,MAAKC,EAAAA,eAAA,CAAGC,EAAAA,MAAAhB,GAAGiB,EAAC,aAERlB,EAAAK,UAAUc,WADlBC,EAAAA,YAAAN,EAAAA,mBAKI,IALJO,EAKI,CADFC,EAAAA,mBAAsC,OAAA,KAAAC,kBAA7BvB,EAAAK,UAAUc,WAAS,sCAE9BK,EAAAA,YAuCWC,EAAA,CAtCTV,MAAM,kBACLW,KAAM1B,EAAAK,UAAUqB,KACjBC,OAAA,GACAC,OAAO,SAgCIC,gBACT,IAAS,CAATL,EAAAA,YAASM,EAAAA,6BA9BT,IAA8C,EADhDV,EAAAA,WAAA,GAAAN,EAAAA,mBAekBiB,EAAAA,2BAdQ/B,EAAAK,UAAUC,YAAW,CAArCE,EAAMwB,mBADhBC,EAAAA,YAekBC,EAAA,CAbfC,IAAG,GAAK3B,EAAK4B,UAAU5B,EAAKF,cAAc0B,IAC3CK,MAAM,SACN,wBAAA,GACAC,SAAA,GACC,YAAS,GAAK5B,EAAUF,EAAK4B,aAC7BG,KAAM/B,EAAK4B,SAAO,KAERI,iBACT,IAAkB,CAAfC,EAAAA,gBAAAlB,EAAAA,gBAAAf,EAAK4B,SAAO,KAENM,QAAOC,EAAAA,QACuHC,GAD/G,sCACpBzC,EAAA0C,QAAgB1C,QAAaiC,QAAY5B,EAAK4B,SAAUQ,EAAOE,IAAItC,EAAK4B,SAAO,KAAiC,OAAA,8CAGxHhB,EAAAA,WAAA,GAAAN,EAAAA,mBAakBiB,EAAAA,2BAZQ/B,EAAAK,UAAU+B,QAAO,CAAjC5B,EAAMwB,mBADhBC,EAAAA,YAakBC,EAAA,CAXfC,IAAK3B,EAAOwB,EACbK,MAAM,SACL,YAAS,GAAK3B,EAAUF,OACxBuC,MAAOvC,EACR,wBAAA,GACA8B,SAAA,GACCC,KAAM/B,IAEIgC,iBACT,IAAU,qCAAPhC,GAAI"}
1
+ {"version":3,"file":"table.vue.cjs","sources":["../../../../../../../packages/components/src/data-chart/src/components/table.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { PropType } from 'vue'\nimport type { IFormatPublicData } from '../utils/types'\nimport { useNamespace } from '@qxs-bns/hooks'\nimport { ElTable, ElTableColumn } from 'element-plus'\nimport { computed } from 'vue'\nimport Empty from './empty.vue'\n\ndefineOptions({\n name: 'DataChartTable',\n})\n\nconst props = defineProps({\n chartData: {\n type: Object as PropType<IFormatPublicData>,\n default: () => ({\n colDesc: [],\n xGroupByDesc: [],\n data: [],\n modelName: '',\n }),\n },\n})\n\nconst ns = useNamespace('data-chart')\n\nconst yGroupByDesc = computed(() => {\n const row = props.chartData.groupByDesc.find(item => !item.xAxis)\n return row\n})\n\nfunction baseWidth(str: string | null) {\n if (!str) {\n return 100\n }\n const strWidth = str.length * 14 + 20 + 30\n return strWidth < 100 ? 100 : strWidth\n}\n</script>\n\n<template>\n <div :class=\"[ns.e('table')]\">\n <p\n v-if=\"chartData.modelName\"\n class=\"title\"\n >\n <span>{{ chartData.modelName }}</span>\n </p>\n <ElTable\n class=\"customize-table\"\n :data=\"chartData.data\"\n stripe\n resizable\n border\n height=\"100%\"\n >\n <ElTableColumn\n v-for=\"(item, index) in chartData.groupByDesc\"\n :key=\"`${item.colDesc}${item.groupByDesc}${index}`\"\n align=\"center\"\n show-overflow-tooltip\n sortable\n :min-width=\"`${baseWidth(item.colDesc)}px`\"\n :prop=\"item.colDesc || ''\"\n >\n <template #header>\n {{ item.colDesc }}\n </template>\n <template #default=\"scoped\">\n {{ (yGroupByDesc && yGroupByDesc.colDesc === item.colDesc ? scoped.row[item.colDesc || ''] : scoped.row[item.colDesc || '']) || '--' }}\n </template>\n </ElTableColumn>\n <ElTableColumn\n v-for=\"(item, index) in chartData.colDesc\"\n :key=\"item + index\"\n align=\"center\"\n :min-width=\"`${baseWidth(item)}px`\"\n :label=\"item\"\n show-overflow-tooltip\n sortable\n :prop=\"item\"\n >\n <template #header>\n {{ item }}\n </template>\n </ElTableColumn>\n <template #empty>\n <Empty />\n </template>\n </ElTable>\n </div>\n</template>\n"],"names":["props","__props","ns","useNamespace","yGroupByDesc","computed","chartData","groupByDesc","find","item","xAxis","baseWidth","str","strWidth","length","_createElementBlock","class","_normalizeClass","_unref","e","modelName","_openBlock","_hoisted_1","_createElementVNode","_toDisplayString","_createVNode","ElTable","data","stripe","resizable","border","height","empty","Empty","_Fragment","index","_createBlock","ElTableColumn","key","colDesc","align","sortable","prop","header","_createTextVNode","default","_withCtx","scoped","value","row","label"],"mappings":"iXAYA,MAAMA,EAAQC,EAYRC,EAAKC,EAAAA,aAAa,cAElBC,EAAeC,EAAAA,SAAS,IAChBL,EAAMM,UAAUC,YAAYC,KAAKC,IAASA,EAAKC,QAI7D,SAASC,EAAUC,GACjB,IAAKA,EACH,OAAO,IAET,MAAMC,EAAwB,GAAbD,EAAIE,OAAc,GAAK,GACxC,OAAOD,EAAW,IAAM,IAAMA,CAChC,6BAIEE,EAAAA,mBAiDM,MAAA,CAjDAC,MAAKC,EAAAA,eAAA,CAAGC,EAAAA,MAAAhB,GAAGiB,EAAC,aAERlB,EAAAK,UAAUc,WADlBC,EAAAA,YAAAN,EAAAA,mBAKI,IALJO,EAKI,CADFC,EAAAA,mBAAsC,OAAA,KAAAC,kBAA7BvB,EAAAK,UAAUc,WAAS,sCAE9BK,cAyCUP,EAAAA,MAAAQ,EAAAA,SAAA,CAxCRV,MAAM,kBACLW,KAAM1B,EAAAK,UAAUqB,KACjBC,OAAA,GACAC,UAAA,GACAC,OAAA,GACAC,OAAO,SAgCIC,gBACT,IAAS,CAATP,EAAAA,YAASQ,EAAAA,6BA9BT,IAA8C,EADhDZ,EAAAA,WAAA,GAAAN,EAAAA,mBAegBmB,EAAAA,2BAdUjC,EAAAK,UAAUC,YAAW,CAArCE,EAAM0B,mBADhBC,EAAAA,YAegBlB,EAAAA,MAAAmB,EAAAA,eAAA,CAbbC,IAAG,GAAK7B,EAAK8B,UAAU9B,EAAKF,cAAc4B,IAC3CK,MAAM,SACN,wBAAA,GACAC,SAAA,GACC,YAAS,GAAK9B,EAAUF,EAAK8B,aAC7BG,KAAMjC,EAAK8B,SAAO,KAERI,iBACT,IAAkB,CAAfC,EAAAA,gBAAApB,EAAAA,gBAAAf,EAAK8B,SAAO,KAENM,QAAOC,EAAAA,QACuHC,GAD/G,sCACpB3C,EAAA4C,QAAgB5C,QAAamC,QAAY9B,EAAK8B,SAAUQ,EAAOE,IAAIxC,EAAK8B,SAAO,KAAiC,OAAA,8CAGxHlB,EAAAA,WAAA,GAAAN,EAAAA,mBAagBmB,EAAAA,2BAZUjC,EAAAK,UAAUiC,QAAO,CAAjC9B,EAAM0B,mBADhBC,EAAAA,YAagBlB,EAAAA,MAAAmB,EAAAA,eAAA,CAXbC,IAAK7B,EAAO0B,EACbK,MAAM,SACL,YAAS,GAAK7B,EAAUF,OACxByC,MAAOzC,EACR,wBAAA,GACAgC,SAAA,GACCC,KAAMjC,IAEIkC,iBACT,IAAU,qCAAPlC,GAAI"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("vue"),t=require("../../../node_modules/.pnpm/@iconify_vue@5.0.0_vue@3.5.18_typescript@5.9.2_/node_modules/@iconify/vue/dist/iconify.cjs"),o=require("@qxs-bns/hooks");const n=["xlink:href"];var r=e.defineComponent({name:"QxsIcon",__name:"icon",props:{icon:{type:null,required:!0},runtime:{type:Boolean,required:!1},flip:{type:String,required:!1},rotate:{type:Number,required:!1},color:{type:String,required:!1},size:{type:[String,Number],required:!1}},setup(r){const l=r,s=e.useAttrs(),u=o.useNamespace("icon"),i=e.computed(()=>"object"==typeof l.icon||"function"==typeof l.icon),c=e.computed(()=>i.value?"component":0===l.icon.indexOf("i-")?l.runtime?"svg":"css":l.icon.includes(":")?"svg":"custom"),a=e.computed(()=>{if(i.value)return"";if(0===l.icon.indexOf("i-")){let e=l.icon;return l.runtime&&(e=e.replace("i-","")),e}return l.icon}),p=e.computed(()=>{const e=[];if(""!==l.flip)switch(l.flip){case"horizontal":e.push("rotateY(180deg)");break;case"vertical":e.push("rotateX(180deg)");break;case"both":e.push("rotateX(180deg)"),e.push("rotateY(180deg)")}l.rotate&&e.push(`rotate(${l.rotate%360}deg)`);const{color:t,size:o}=l;return`${t?`color: ${t};`:""}${o?`font-size: ${n=o,n?"number"==typeof n||/^\d+(?:\.\d+)?$/.test(n)?`${n}px`:n:""};`:""}${e.length?`transform: ${e.join(" ")};`:""}`;var n});return(o,r)=>"component"===c.value?(e.openBlock(),e.createBlock(e.resolveDynamicComponent(o.icon),{key:0,class:e.normalizeClass([e.unref(u).b()]),style:e.normalizeStyle(p.value+(e.unref(s).style||""))},null,8,["class","style"])):"css"===c.value&&a.value?(e.openBlock(),e.createElementBlock("i",{key:1,class:e.normalizeClass([e.unref(u).b(),a.value]),style:e.normalizeStyle(p.value+(e.unref(s).style||""))},null,6)):"svg"===c.value&&a.value?(e.openBlock(),e.createBlock(e.unref(t.Icon),{key:2,icon:a.value,class:e.normalizeClass([e.unref(u).b()]),style:e.normalizeStyle(p.value+(e.unref(s).style||""))},null,8,["icon","class","style"])):a.value?(e.openBlock(),e.createElementBlock("svg",{key:3,"aria-hidden":"true",class:e.normalizeClass([e.unref(u).b()]),style:e.normalizeStyle(p.value+(e.unref(s).style||""))},[e.createElementVNode("use",{"xlink:href":`#icon-${a.value}`},null,8,n)],6)):e.createCommentVNode("v-if",!0)}});exports.default=r;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("vue"),o=require("../../../node_modules/.pnpm/@iconify_vue@5.0.0_vue@3.5.18_typescript@5.9.2_/node_modules/@iconify/vue/dist/iconify.cjs"),t=require("@qxs-bns/hooks");const n=["xlink:href"];var r=e.defineComponent({name:"QxsIcon",__name:"icon",props:{icon:{type:null,required:!0},runtime:{type:Boolean,required:!1},flip:{type:null,required:!1,default:""},rotate:{type:Number,required:!1,default:0},color:{type:String,required:!1},size:{type:[String,Number],required:!1},localIconPrefix:{type:String,required:!1,default:"icon-"}},setup(r){const l=e.useAttrs(),u=t.useNamespace("icon"),i=e.computed(()=>"object"==typeof r.icon||"function"==typeof r.icon),s=e.computed(()=>i.value?"component":0===r.icon.indexOf("i-")?r.runtime?"svg":"css":r.icon.includes(":")?"svg":"custom"),c=e.computed(()=>{if(i.value)return"";if(0===r.icon.indexOf("i-")){let e=r.icon;return r.runtime&&(e=e.replace("i-","")),e}return r.icon});const a=e.computed(()=>{const e=[];switch(r.flip){case"horizontal":e.push("rotateY(180deg)");break;case"vertical":e.push("rotateX(180deg)");break;case"both":e.push("rotateX(180deg)"),e.push("rotateY(180deg)")}return r.rotate&&e.push(`rotate(${r.rotate%360}deg)`),`${r.color?`color: ${r.color};`:""}${r.size?`font-size: ${o=r.size,o?"number"==typeof o||/^\d+(?:\.\d+)?$/.test(o)?`${o}px`:o:""};`:""}${e.length?`transform: ${e.join(" ")};`:""}`;var o});return(t,r)=>"component"===s.value?(e.openBlock(),e.createBlock(e.resolveDynamicComponent(t.icon),{key:0,class:e.normalizeClass([e.unref(u).b()]),style:e.normalizeStyle(a.value+(e.unref(l).style||""))},null,8,["class","style"])):"css"===s.value&&c.value?(e.openBlock(),e.createElementBlock("i",{key:1,class:e.normalizeClass([e.unref(u).b(),c.value]),style:e.normalizeStyle(a.value+(e.unref(l).style||""))},null,6)):"svg"===s.value&&c.value?(e.openBlock(),e.createElementBlock("i",{key:2,style:e.normalizeStyle(a.value+(e.unref(l).style||"")),class:e.normalizeClass([e.unref(u).b()])},[e.createVNode(e.unref(o.Icon),{icon:c.value},null,8,["icon"])],6)):c.value?(e.openBlock(),e.createElementBlock("svg",{key:3,"aria-hidden":"true",class:e.normalizeClass([e.unref(u).b()]),style:e.normalizeStyle(a.value+(e.unref(l).style||""))},[e.createElementVNode("use",{"xlink:href":`#${t.localIconPrefix}${c.value}`},null,8,n)],6)):e.createCommentVNode("v-if",!0)}});exports.default=r;
2
2
  //# sourceMappingURL=icon.vue.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"icon.vue.cjs","sources":["../../../../../../packages/components/src/icon/src/icon.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { Component } from 'vue'\nimport { Icon } from '@iconify/vue'\nimport { useNamespace } from '@qxs-bns/hooks'\nimport { computed, useAttrs } from 'vue'\n\ndefineOptions({\n name: 'QxsIcon',\n})\n\nconst props = defineProps<PropsType>()\n\nconst attrs = useAttrs()\n\nconst ns = useNamespace('icon')\n\nexport interface PropsType {\n icon: string | Component\n runtime?: boolean\n flip?: 'horizontal' | 'vertical' | 'both' | ''\n rotate?: number\n color?: string\n size?: string | number\n}\n\nconst isComponentName = computed(() => typeof props.icon === 'object' || typeof props.icon === 'function')\n\nconst outputType = computed(() => {\n if (isComponentName.value) {\n return 'component'\n }\n if ((props.icon as string).indexOf('i-') === 0) {\n return props.runtime ? 'svg' : 'css'\n }\n else if ((props.icon as string).includes(':')) {\n return 'svg'\n }\n else {\n return 'custom'\n }\n})\n\nconst outputName = computed(() => {\n if (isComponentName.value) {\n return ''\n }\n if ((props.icon as string).indexOf('i-') === 0) {\n let conversionName = props.icon as string\n if (props.runtime) {\n conversionName = conversionName.replace('i-', '')\n }\n return conversionName\n }\n else {\n return props.icon as string\n }\n})\n\nconst style = computed(() => {\n const transform = [] as string[]\n if (props.flip !== '') {\n switch (props.flip) {\n case 'horizontal':\n transform.push('rotateY(180deg)')\n break\n case 'vertical':\n transform.push('rotateX(180deg)')\n break\n case 'both':\n transform.push('rotateX(180deg)')\n transform.push('rotateY(180deg)')\n break\n }\n }\n if (props.rotate) {\n transform.push(`rotate(${props.rotate % 360}deg)`)\n }\n const { color, size } = props\n\n // 用正则匹配 size 是不是 number 值,再判断是否有 px 结尾的单位,没有则拼接\n const formatSize = (size: string | number | undefined): string => {\n if (!size) {\n return ''\n }\n\n // 如果是数字,直接添加 px\n if (typeof size === 'number') {\n return `${size}px`\n }\n\n // 如果是纯数字字符串,添加 px\n if (/^\\d+(?:\\.\\d+)?$/.test(size)) {\n return `${size}px`\n }\n\n // 如果已经有单位(px、em、rem等)或者不是纯数字,直接返回\n return size\n }\n\n return `${color ? `color: ${color};` : ''}${size ? `font-size: ${formatSize(size)};` : ''}${transform.length ? `transform: ${transform.join(' ')};` : ''}`\n})\n</script>\n\n<template>\n <component\n :is=\"icon as any\"\n v-if=\"outputType === 'component'\"\n :class=\"[ns.b()]\"\n :style=\"style + (attrs.style || '')\"\n />\n <i\n v-else-if=\"outputType === 'css' && outputName\"\n :class=\"[ns.b(), outputName]\"\n :style=\"style + (attrs.style || '')\"\n />\n <Icon\n v-else-if=\"outputType === 'svg' && outputName\"\n :icon=\"outputName\"\n :class=\"[ns.b()]\"\n :style=\"style + (attrs.style || '')\"\n />\n <svg\n v-else-if=\"outputName\"\n aria-hidden=\"true\"\n :class=\"[ns.b()]\"\n :style=\"style + (attrs.style || '')\"\n >\n <use :xlink:href=\"`#icon-${outputName}`\" />\n </svg>\n</template>\n"],"names":["props","__props","attrs","useAttrs","ns","useNamespace","isComponentName","computed","icon","outputType","value","indexOf","runtime","includes","outputName","conversionName","replace","style","transform","flip","push","rotate","color","size","test","length","join","_openBlock","_createBlock","_resolveDynamicComponent","class","_normalizeClass","_unref","b","_normalizeStyle","_createElementBlock","Icon","_createElementVNode"],"mappings":"+hBAUA,MAAMA,EAAQC,EAERC,EAAQC,EAAAA,WAERC,EAAKC,EAAAA,aAAa,QAWlBC,EAAkBC,WAAS,IAA4B,iBAAfP,EAAMQ,MAA2C,mBAAfR,EAAMQ,MAEhFC,EAAaF,EAAAA,SAAS,IACtBD,EAAgBI,MACX,YAEoC,IAAxCV,EAAMQ,KAAgBG,QAAQ,MAC1BX,EAAMY,QAAU,MAAQ,MAEvBZ,EAAMQ,KAAgBK,SAAS,KAChC,MAGA,UAILC,EAAaP,EAAAA,SAAS,KAC1B,GAAID,EAAgBI,MAClB,MAAO,GAET,GAA6C,IAAxCV,EAAMQ,KAAgBG,QAAQ,MAAa,CAC9C,IAAII,EAAiBf,EAAMQ,KAI3B,OAHIR,EAAMY,UACRG,EAAiBA,EAAeC,QAAQ,KAAM,KAEzCD,CACT,CAEE,OAAOf,EAAMQ,OAIXS,EAAQV,EAAAA,SAAS,KACrB,MAAMW,EAAY,GAClB,GAAmB,KAAflB,EAAMmB,KACR,OAAQnB,EAAMmB,MACZ,IAAK,aACHD,EAAUE,KAAK,mBACf,MACF,IAAK,WACHF,EAAUE,KAAK,mBACf,MACF,IAAK,OACHF,EAAUE,KAAK,mBACfF,EAAUE,KAAK,mBAIjBpB,EAAMqB,QACRH,EAAUE,KAAK,UAAUpB,EAAMqB,OAAS,WAE1C,MAAMC,MAAEA,EAAAC,KAAOA,GAASvB,EAsBxB,MAAO,GAAGsB,EAAQ,UAAUA,KAAW,KAAKC,EAAO,cAnB/BA,EAmBwDA,EAlBrEA,EAKe,iBAATA,GAKP,kBAAkBC,KAAKD,GAJlB,GAAGA,MASLA,EAdE,MAiB4E,KAAKL,EAAUO,OAAS,cAAcP,EAAUQ,KAAK,QAAU,KAnBnI,IAACH,iBA0BF,cAAVd,EAAAC,OAFRiB,EAAAA,YAAAC,EAAAA,YAKEC,EAAAA,wBAJKrB,EAAAA,MAAI,OAERsB,MAAKC,EAAAA,eAAA,CAAGC,EAAAA,MAAA5B,GAAG6B,MACXhB,MAAKiB,EAAAA,eAAEjB,EAAAP,OAASsB,EAAAA,MAAA9B,GAAMe,OAAK,yCAGjBR,EAAAC,OAAwBI,EAAAJ,qBADrCyB,EAAAA,mBAIE,IAAA,OAFCL,MAAKC,EAAAA,eAAA,CAAGC,QAAA5B,GAAG6B,IAAKnB,EAAAJ,QAChBO,MAAKiB,EAAAA,eAAEjB,EAAAP,OAASsB,EAAAA,MAAA9B,GAAMe,OAAK,uBAGjBR,EAAAC,OAAwBI,EAAAJ,qBADrCkB,EAAAA,YAKEI,QAAAI,EAAAA,MAAA,OAHC5B,KAAMM,EAAAJ,MACNoB,MAAKC,EAAAA,eAAA,CAAGC,EAAAA,MAAA5B,GAAG6B,MACXhB,MAAKiB,EAAAA,eAAEjB,EAAAP,OAASsB,EAAAA,MAAA9B,GAAMe,OAAK,wCAGjBH,EAAAJ,qBADbyB,EAAAA,mBAOM,MAAA,OALJ,cAAY,OACXL,MAAKC,EAAAA,eAAA,CAAGC,EAAAA,MAAA5B,GAAG6B,MACXhB,MAAKiB,EAAAA,eAAEjB,EAAAP,OAASsB,EAAAA,MAAA9B,GAAMe,OAAK,OAE5BoB,EAAAA,mBAA2C,MAAA,CAArC,sBAAqBvB,EAAAJ"}
1
+ {"version":3,"file":"icon.vue.cjs","sources":["../../../../../../packages/components/src/icon/src/icon.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { Component } from 'vue'\nimport { Icon } from '@iconify/vue'\nimport { useNamespace } from '@qxs-bns/hooks'\nimport { computed, useAttrs } from 'vue'\n\ndefineOptions({\n name: 'QxsIcon',\n})\n\nconst {\n icon,\n flip = '',\n rotate = 0,\n runtime,\n color,\n size,\n localIconPrefix = 'icon-',\n} = defineProps<PropsType>()\n\nconst attrs = useAttrs()\n\nconst ns = useNamespace('icon')\n\nexport interface PropsType {\n icon: string | Component\n runtime?: boolean\n flip?: 'horizontal' | 'vertical' | 'both' | '' | undefined\n rotate?: number\n color?: string\n size?: string | number\n localIconPrefix?: string\n}\n\nconst isComponentName = computed(() => typeof icon === 'object' || typeof icon === 'function')\n\nconst outputType = computed(() => {\n if (isComponentName.value) {\n return 'component'\n }\n if ((icon as string).indexOf('i-') === 0) {\n return runtime ? 'svg' : 'css'\n }\n else if ((icon as string).includes(':')) {\n return 'svg'\n }\n else {\n return 'custom'\n }\n})\n\nconst outputName = computed(() => {\n if (isComponentName.value) {\n return ''\n }\n if ((icon as string).indexOf('i-') === 0) {\n let conversionName = icon as string\n if (runtime) {\n conversionName = conversionName.replace('i-', '')\n }\n return conversionName\n }\n else {\n return icon as string\n }\n})\n\n// 用正则匹配 size 是不是 number 值,再判断是否有 px 结尾的单位,没有则拼接\nfunction formatSize(size: string | number | undefined): string {\n if (!size) {\n return ''\n }\n\n // 如果是数字,直接添加 px\n if (typeof size === 'number') {\n return `${size}px`\n }\n\n // 如果是纯数字字符串,添加 px\n if (/^\\d+(?:\\.\\d+)?$/.test(size)) {\n return `${size}px`\n }\n\n // 如果已经有单位(px、em、rem等)或者不是纯数字,直接返回\n return size\n}\n\n// 统一的样式计算属性,适用于所有图标类型\n// 包含颜色、尺寸和变换(旋转、翻转)\n// Iconify 图标通过外层 i 标签应用这些样式\nconst style = computed(() => {\n const transform = [] as string[]\n switch (flip) {\n case 'horizontal':\n transform.push('rotateY(180deg)')\n break\n case 'vertical':\n transform.push('rotateX(180deg)')\n break\n case 'both':\n transform.push('rotateX(180deg)')\n transform.push('rotateY(180deg)')\n break\n // 对于 '' 和 undefined,不做任何处理\n }\n if (rotate) {\n transform.push(`rotate(${rotate % 360}deg)`)\n }\n return `${color ? `color: ${color};` : ''}${size ? `font-size: ${formatSize(size)};` : ''}${transform.length ? `transform: ${transform.join(' ')};` : ''}`\n})\n</script>\n\n<template>\n <component\n :is=\"icon as any\"\n v-if=\"outputType === 'component'\"\n :class=\"[ns.b()]\"\n :style=\"style + (attrs.style || '')\"\n />\n <i\n v-else-if=\"outputType === 'css' && outputName\"\n :class=\"[ns.b(), outputName]\"\n :style=\"style + (attrs.style || '')\"\n />\n <i\n v-else-if=\"outputType === 'svg' && outputName\"\n :style=\"style + (attrs.style || '')\"\n :class=\"[ns.b()]\"\n >\n <Icon\n :icon=\"outputName\"\n />\n </i>\n <svg\n v-else-if=\"outputName\"\n aria-hidden=\"true\"\n :class=\"[ns.b()]\"\n :style=\"style + (attrs.style || '')\"\n >\n <use :xlink:href=\"`#${localIconPrefix}${outputName}`\" />\n </svg>\n</template>\n"],"names":["attrs","useAttrs","ns","useNamespace","isComponentName","computed","__props","icon","outputType","value","indexOf","runtime","includes","outputName","conversionName","replace","style","transform","flip","push","rotate","color","size","test","length","join","_openBlock","_createBlock","_resolveDynamicComponent","class","_normalizeClass","_unref","b","_normalizeStyle","_createElementBlock","_createVNode","Icon","_createElementVNode","localIconPrefix"],"mappings":"4mBAoBA,MAAMA,EAAQC,EAAAA,WAERC,EAAKC,EAAAA,aAAa,QAYlBC,EAAkBC,WAAS,IAAsB,iBAATC,EAAAC,MAAqC,mBAATD,EAAAC,MAEpEC,EAAaH,EAAAA,SAAS,IACtBD,EAAgBK,MACX,YAE8B,IAAlCH,EAAAC,KAAgBG,QAAQ,MACpBJ,EAAAK,QAAU,MAAQ,MAEjBL,EAAAC,KAAgBK,SAAS,KAC1B,MAGA,UAILC,EAAaR,EAAAA,SAAS,KAC1B,GAAID,EAAgBK,MAClB,MAAO,GAET,GAAuC,IAAlCH,EAAAC,KAAgBG,QAAQ,MAAa,CACxC,IAAII,EAAiBR,EAAAC,KAIrB,OAHID,EAAAK,UACFG,EAAiBA,EAAeC,QAAQ,KAAM,KAEzCD,CACT,CAEE,OAAOR,EAAAC,OA2BX,MAAMS,EAAQX,EAAAA,SAAS,KACrB,MAAMY,EAAY,GAClB,OAAQX,EAAAY,MACN,IAAK,aACHD,EAAUE,KAAK,mBACf,MACF,IAAK,WACHF,EAAUE,KAAK,mBACf,MACF,IAAK,OACHF,EAAUE,KAAK,mBACfF,EAAUE,KAAK,mBAOnB,OAHIb,EAAAc,QACFH,EAAUE,KAAK,UAAUb,SAAS,WAE7B,GAAGA,EAAAe,MAAQ,UAAUf,EAAAe,SAAW,KAAKf,EAAAgB,KAAO,cAxCjCA,EAwC0DhB,OAvCvEgB,EAKe,iBAATA,GAKP,kBAAkBC,KAAKD,GAJlB,GAAGA,MASLA,EAdE,MAsC8E,KAAKL,EAAUO,OAAS,cAAcP,EAAUQ,KAAK,QAAU,KAxCxJ,IAAoBH,iBA+CA,cAAVd,EAAAC,OAFRiB,EAAAA,YAAAC,EAAAA,YAKEC,EAAAA,wBAJKrB,EAAAA,MAAI,OAERsB,MAAKC,EAAAA,eAAA,CAAGC,EAAAA,MAAA7B,GAAG8B,MACXhB,MAAKiB,EAAAA,eAAEjB,EAAAP,OAASsB,EAAAA,MAAA/B,GAAMgB,OAAK,yCAGjBR,EAAAC,OAAwBI,EAAAJ,qBADrCyB,EAAAA,mBAIE,IAAA,OAFCL,MAAKC,EAAAA,eAAA,CAAGC,QAAA7B,GAAG8B,IAAKnB,EAAAJ,QAChBO,MAAKiB,EAAAA,eAAEjB,EAAAP,OAASsB,EAAAA,MAAA/B,GAAMgB,OAAK,uBAGjBR,EAAAC,OAAwBI,EAAAJ,qBADrCyB,EAAAA,mBAQI,IAAA,OANDlB,MAAKiB,EAAAA,eAAEjB,EAAAP,OAASsB,EAAAA,MAAA/B,GAAMgB,OAAK,KAC3Ba,MAAKC,EAAAA,eAAA,CAAGC,EAAAA,MAAA7B,GAAG8B,QAEZG,EAAAA,YAEEJ,EAAAA,MAAAK,QAAA,CADC7B,KAAMM,EAAAJ,OAAU,KAAA,EAAA,CAAA,cAIRI,EAAAJ,qBADbyB,EAAAA,mBAOM,MAAA,OALJ,cAAY,OACXL,MAAKC,EAAAA,eAAA,CAAGC,EAAAA,MAAA7B,GAAG8B,MACXhB,MAAKiB,EAAAA,eAAEjB,EAAAP,OAASsB,EAAAA,MAAA/B,GAAMgB,OAAK,OAE5BqB,EAAAA,mBAAwD,MAAA,CAAlD,aAAU,IAAMC,EAAAA,kBAAkBzB,EAAAJ"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("vue"),t=require("@qxs-bns/icons"),l=require("element-plus");const i={class:"image-slot"},a=["src"],r=["onClick"],n=["onClick"],o={class:"tip-content"};var s=e.defineComponent({name:"QxsImageUpload",__name:"image-upload",props:e.mergeModels({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},size:{type:Number,required:!1,default:20},width:{type:Number,required:!1,default:160},accept:{type:String,required:!1,default:"image/jpeg,image/jpg,image/png,image/gif"},height:{type:Number,required:!1,default:90},placeholder:{type:String,required:!1,default:"上传图片"},notip:{type:Boolean,required:!1,default:!1},tipText:{type:String,required:!1,default:""},beforeUpload:{type:null,required:!1},disabled:{type:Boolean,required:!1,default:!1},limit:{type:Number,required:!1,default:1}},{fileList:{type:Array,default:()=>[]},fileListModifiers:{}}),emits:e.mergeModels(["onSuccess","remove"],["update:fileList"]),setup(s,{emit:u}){const p=u,c=e.useAttrs(),d=e.useModel(s,"fileList"),m=l.useNamespace("image-upload"),f=e.ref(0),g=e.ref({imageViewerVisible:!1,progress:{preview:"",percent:0}}),v=e.computed(()=>m.cssVarBlock({ns:m.namespace.value,width:`${s.width||160}px`,height:`${s.height||90}px`})),h=e.computed(()=>s.accept.split(",").map(e=>e.split("/").pop())),y=e.computed(()=>s.tipText||`上传图片支持 ${h.value.join(" / ")} 格式,且图片大小不超过 ${s.size}MB${s.width&&s.height?`,建议图片尺寸为 ${s.width}*${s.height}`:""}`);function V(e){f.value=d.value.indexOf(e),g.value.imageViewerVisible=!0}function x(e){d.value.splice(d.value.indexOf(e),1)}function b(){g.value.imageViewerVisible=!1}const q=e=>{const t=e.name.split(".").pop()??"",i=h.value.includes(t),a=e.size/1024/1024<s.size;return i?a?(g.value.progress.preview=URL.createObjectURL(e),!s.beforeUpload||s.beforeUpload(e)):(l.ElMessage.error(`上传图片大小不能超过 ${s.size}MB!`),!1):(l.ElMessage.error(`上传图片只支持${h.value.join(" / ")}格式!`),!1)},w=e=>{g.value.progress.percent=Math.floor(e.percent)},C=(...e)=>{g.value.progress={preview:"",percent:0},p("onSuccess",...e)};return(s,u)=>{const p=e.resolveComponent("QxsIcon");return e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(e.unref(m).e("container")),style:e.normalizeStyle(v.value)},[e.createVNode(e.unref(l.ElUpload),e.mergeProps(e.unref(c),{"file-list":d.value,"onUpdate:fileList":u[0]||(u[0]=e=>d.value=e),drag:"",limit:s.limit,"list-type":"picture-card",headers:s.headers,action:s.action,data:s.data,name:s.name,accept:s.accept,"before-upload":q,"on-progress":w,"on-preview":V,"on-success":C,class:[e.unref(m).e("control"),s.limit<=d.value.length?e.unref(m).e("more-than-limit"):""],"on-remove":x}),{file:e.withCtx(({file:l})=>[e.createElementVNode("img",{class:e.normalizeClass(`${e.unref(m).namespace.value}-upload-list__item-thumbnail`),src:l.url},null,10,a),e.createElementVNode("span",{class:e.normalizeClass(`${e.unref(m).namespace.value}-upload-list__item-actions`)},[e.createElementVNode("span",{class:e.normalizeClass(`${e.unref(m).namespace.value}-upload-list__item-preview`),onClick:e=>V(l)},[e.createVNode(e.unref(t.ZoomIn),{size:"14px"})],10,r),u[1]||(u[1]=e.createElementVNode("span",{style:{width:"1px",height:"14px","background-color":"rgb(255 255 255 / 50%)"}},null,-1)),s.disabled?e.createCommentVNode("v-if",!0):(e.openBlock(),e.createElementBlock("span",{key:0,class:e.normalizeClass(`${e.unref(m).namespace.value}-upload-list__item-delete`),onClick:e=>x(l)},[e.createVNode(e.unref(t.Delete),{size:"14px"})],10,n))],2)]),tip:e.withCtx(()=>[e.renderSlot(s.$slots,"tip",{},()=>[s.notip?e.createCommentVNode("v-if",!0):(e.openBlock(),e.createElementBlock("div",{key:0,class:e.normalizeClass(`${e.unref(m).namespace.value}-upload__tip-text`)},[e.createElementVNode("div",o,e.toDisplayString(y.value),1)],2))])]),default:e.withCtx(()=>[e.renderSlot(s.$slots,"default",{},()=>[e.createElementVNode("div",i,[e.createVNode(p,{size:"32px",icon:e.unref(t.UploadImage)},null,8,["icon"]),e.createElementVNode("p",null,e.toDisplayString(s.placeholder),1)])])]),_:3},16,["file-list","limit","headers","action","data","name","accept","class"]),g.value.imageViewerVisible?(e.openBlock(),e.createBlock(e.unref(l.ElImageViewer),{key:0,"url-list":d.value.map(e=>e.url).filter(e=>void 0!==e),"initial-index":f.value,teleported:"",onClose:b},null,8,["url-list","initial-index"])):e.createCommentVNode("v-if",!0)],6)}}});exports.default=s;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("vue"),a=require("@qxs-bns/icons"),t=require("element-plus");const l={class:"image-slot"},r=["src"],i=["onClick"],n=["onClick"],s={class:"tip-content"};var o=e.defineComponent({name:"QxsImageUpload",__name:"image-upload",props:e.mergeModels({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},width:{type:Number,required:!1,default:160},height:{type:Number,required:!1,default:90},accept:{type:String,required:!1,default:"image/jpeg,image/jpg,image/png,image/gif"},placeholder:{type:String,required:!1,default:"上传图片"},notip:{type:Boolean,required:!1,default:!1},tipText:{type:String,required:!1,default:""},beforeUpload:{type:null,required:!1},disabled:{type:Boolean,required:!1,default:!1},limit:{type:Number,required:!1,default:1}},{fileList:{type:Array,default:()=>[]},fileListModifiers:{}}),emits:e.mergeModels(["success","remove"],["update:fileList"]),setup(o,{emit:u}){const p=u,c=e.useAttrs(),d=e.useModel(o,"fileList"),m=t.useNamespace("image-upload"),f=e.ref(0),v=e.ref({imageViewerVisible:!1,progress:{preview:"",percent:0}}),g=e.computed(()=>m.cssVarBlock({ns:m.namespace.value,width:`${o.width}px`,height:`${o.height}px`})),h=e.computed(()=>o.accept.split(",").map(e=>e.split("/").pop())),w=e.computed(()=>{if(o.tipText)return o.tipText;return`上传图片支持 ${h.value.join(" / ")} 格式,且图片大小不超过 ${o.size}MB`+(o.width&&o.height?`,建议图片尺寸为 ${o.width}×${o.height}`:"")});function y(e){f.value=d.value.indexOf(e),v.value.imageViewerVisible=!0}function _(e){d.value.splice(d.value.indexOf(e),1)}function b(){v.value.imageViewerVisible=!1}const V=e=>{if(!e||!e.name)return t.ElMessage.error("文件信息无效!"),!1;const a=e.name.split(".").pop()?.toLowerCase()??"";if(!h.value.some(e=>e?.toLowerCase()===a))return t.ElMessage.error(`上传图片只支持 ${h.value.join(" / ")} 格式!`),!1;if(e.size/1024/1024>o.size)return t.ElMessage.error(`上传图片大小不能超过 ${o.size}MB!`),!1;try{v.value.progress.preview=URL.createObjectURL(e)}catch(e){console.warn("创建预览失败:",e)}return!o.beforeUpload||o.beforeUpload(e)},C=e=>{v.value.progress.percent=Math.floor(e.percent)},x=(...e)=>{v.value.progress.preview&&URL.revokeObjectURL(v.value.progress.preview),v.value.progress={preview:"",percent:0},p("success",...e)};return e.onUnmounted(()=>{v.value.progress.preview&&URL.revokeObjectURL(v.value.progress.preview)}),(o,u)=>{const p=e.resolveComponent("QxsIcon");return e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(e.unref(m).e("container")),style:e.normalizeStyle(g.value)},[e.createVNode(e.unref(t.ElUpload),e.mergeProps(e.unref(c),{"file-list":d.value,"onUpdate:fileList":u[0]||(u[0]=e=>d.value=e),drag:"",limit:o.limit,"list-type":"picture-card",headers:o.headers,action:o.action,data:o.data,name:o.name,accept:o.accept,"before-upload":V,"on-progress":C,"on-preview":y,"on-success":x,class:[e.unref(m).e("control"),o.limit<=d.value.length?e.unref(m).e("more-than-limit"):""],"on-remove":_}),{file:e.withCtx(({file:t})=>[e.createElementVNode("img",{class:e.normalizeClass(`${e.unref(m).namespace.value}-upload-list__item-thumbnail`),src:t.url},null,10,r),e.createElementVNode("span",{class:e.normalizeClass(`${e.unref(m).namespace.value}-upload-list__item-actions`)},[e.createElementVNode("span",{class:e.normalizeClass([`${e.unref(m).namespace.value}-upload-list__item-preview`,`${e.unref(m).namespace.value}-image-upload__action-btn`,`${e.unref(m).namespace.value}-image-upload__action-btn--preview`]),onClick:e=>y(t)},[e.createVNode(e.unref(a.ZoomIn),{size:"14px"})],10,i),e.createElementVNode("span",{class:e.normalizeClass(`${e.unref(m).namespace.value}-upload-list__item-divider`)},null,2),o.disabled?e.createCommentVNode("v-if",!0):(e.openBlock(),e.createElementBlock("span",{key:0,class:e.normalizeClass([`${e.unref(m).namespace.value}-upload-list__item-delete`,`${e.unref(m).namespace.value}-image-upload__action-btn`,`${e.unref(m).namespace.value}-image-upload__action-btn--delete`]),onClick:e=>_(t)},[e.createVNode(e.unref(a.Delete),{size:"14px"})],10,n))],2)]),tip:e.withCtx(()=>[e.renderSlot(o.$slots,"tip",{},()=>[o.notip?e.createCommentVNode("v-if",!0):(e.openBlock(),e.createElementBlock("div",{key:0,class:e.normalizeClass(`${e.unref(m).namespace.value}-upload__tip-text`)},[e.createElementVNode("div",s,e.toDisplayString(w.value),1)],2))])]),default:e.withCtx(()=>[e.renderSlot(o.$slots,"default",{},()=>[e.createElementVNode("div",l,[e.createVNode(p,{size:"32px",icon:e.unref(a.UploadImage)},null,8,["icon"]),e.createElementVNode("p",null,e.toDisplayString(o.placeholder),1)])])]),_:3},16,["file-list","limit","headers","action","data","name","accept","class"]),v.value.imageViewerVisible?(e.openBlock(),e.createBlock(e.unref(t.ElImageViewer),{key:0,"url-list":d.value.map(e=>e.url).filter(e=>void 0!==e),"initial-index":f.value,teleported:"",onClose:b},null,8,["url-list","initial-index"])):e.createCommentVNode("v-if",!0)],6)}}});exports.default=o;
2
2
  //# sourceMappingURL=image-upload.vue.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"image-upload.vue.cjs","sources":["../../../../../../packages/components/src/image-upload/src/image-upload.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { UploadFile, UploadFiles, UploadProps } from 'element-plus'\nimport { Delete, UploadImage, ZoomIn } from '@qxs-bns/icons'\nimport { ElImageViewer, ElMessage, ElUpload, useNamespace } from 'element-plus'\nimport { computed, ref, useAttrs } from 'vue'\n\n// 组件名称\ndefineOptions({\n name: 'QxsImageUpload',\n})\n\n// Props 定义\nconst {\n name = 'file',\n size = 20,\n width = 160,\n height = 90,\n limit = 1,\n placeholder = '上传图片',\n notip = false,\n accept = 'image/jpeg,image/jpg,image/png,image/gif',\n beforeUpload,\n tipText = '',\n disabled = false,\n} = defineProps<ImageUploadProps>()\n\n// Emits 定义\nconst emits = defineEmits<{\n onSuccess: [res: any, uploadFile: UploadFile, uploadFiles: UploadFiles]\n remove: [file: UploadFile]\n}>()\n\n// 类型定义\nexport interface ImageUploadProps {\n action: UploadProps['action']\n headers?: UploadProps['headers']\n data?: UploadProps['data']\n name?: UploadProps['name']\n url?: string\n size?: number\n width?: number\n accept?: string\n height?: number\n placeholder?: string\n notip?: boolean\n tipText?: string\n beforeUpload?: UploadProps['beforeUpload']\n disabled?: boolean\n limit?: number\n}\n\ninterface UploadProgress {\n preview: string\n percent: number\n}\n\nconst attrs = useAttrs()\n\nconst fileList = defineModel('fileList', {\n type: Array as () => UploadFile[],\n default: () => [],\n})\n\n// 命名空间\nconst nsEl = useNamespace('image-upload')\n\nconst initialIndex = ref(0)\n// 响应式数据\nconst uploadData = ref<{\n imageViewerVisible: boolean\n progress: UploadProgress\n}>({\n imageViewerVisible: false,\n progress: {\n preview: '',\n percent: 0,\n },\n})\n\nconst cssVar = computed(() => {\n return nsEl.cssVarBlock({\n ns: nsEl.namespace.value,\n width: `${width || 160}px`,\n height: `${height || 90}px`,\n })\n})\n\n// 计算属性\nconst exts = computed(() =>\n accept.split(',').map(ext => ext.split('/').pop()),\n)\n\nconst tipMessage = computed(\n () =>\n tipText\n || `上传图片支持 ${exts.value.join(\n ' / ',\n )} 格式,且图片大小不超过 ${size}MB${width && height ? `,建议图片尺寸为 ${width}*${height}` : ''}`,\n)\n\n// 方法\nfunction onPreview(file: UploadFile) {\n initialIndex.value = fileList.value.indexOf(file)\n uploadData.value.imageViewerVisible = true\n}\nfunction onRemove(file: UploadFile) {\n fileList.value.splice(fileList.value.indexOf(file), 1)\n}\n\nfunction previewClose() {\n uploadData.value.imageViewerVisible = false\n}\n\nconst handleBeforeUpload: UploadProps['beforeUpload'] = (file) => {\n const fileExt = file.name.split('.').pop() ?? ''\n const isTypeOk = exts.value.includes(fileExt)\n const isSizeOk = file.size / 1024 / 1024 < size\n\n if (!isTypeOk) {\n ElMessage.error(`上传图片只支持${exts.value.join(' / ')}格式!`)\n return false\n }\n\n if (!isSizeOk) {\n ElMessage.error(`上传图片大小不能超过 ${size}MB!`)\n return false\n }\n\n uploadData.value.progress.preview = URL.createObjectURL(file)\n\n return beforeUpload ? beforeUpload(file) : true\n}\n\nconst onProgress: UploadProps['onProgress'] = (evt) => {\n uploadData.value.progress.percent = Math.floor(evt.percent)\n}\n\nconst onSuccess: UploadProps['onSuccess'] = (...args) => {\n uploadData.value.progress = {\n preview: '',\n percent: 0,\n }\n emits('onSuccess', ...args)\n}\n</script>\n\n<template>\n <div\n :class=\"nsEl.e('container')\"\n :style=\"cssVar\"\n >\n <ElUpload\n v-bind=\"attrs\"\n v-model:file-list=\"fileList\"\n drag\n :limit=\"limit\"\n list-type=\"picture-card\"\n :headers=\"headers\"\n :action=\"action\"\n :data=\"data\"\n :name=\"name\"\n :accept=\"accept\"\n :before-upload=\"handleBeforeUpload\"\n :on-progress=\"onProgress\"\n :on-preview=\"onPreview\"\n :on-success=\"onSuccess\"\n :class=\"[nsEl.e('control'), limit <= fileList.length ? nsEl.e('more-than-limit') : '']\"\n :on-remove=\"onRemove\"\n >\n <slot>\n <div class=\"image-slot\">\n <QxsIcon\n size=\"32px\"\n :icon=\"UploadImage\"\n />\n <p>{{ placeholder }}</p>\n </div>\n </slot>\n <template #file=\"{ file }\">\n <img\n :class=\"`${nsEl.namespace.value}-upload-list__item-thumbnail`\"\n :src=\"file.url\"\n >\n <span :class=\"`${nsEl.namespace.value}-upload-list__item-actions`\">\n <span\n :class=\"`${nsEl.namespace.value}-upload-list__item-preview`\"\n @click=\"onPreview(file)\"\n >\n <ZoomIn size=\"14px\" />\n </span>\n <span style=\"width: 1px; height: 14px; background-color: rgb(255 255 255 / 50%);\" />\n <span\n v-if=\"!disabled\"\n :class=\"`${nsEl.namespace.value}-upload-list__item-delete`\"\n @click=\"onRemove(file)\"\n >\n <Delete size=\"14px\" />\n </span>\n </span>\n </template>\n <template #tip>\n <slot name=\"tip\">\n <div\n v-if=\"!notip\"\n :class=\"`${nsEl.namespace.value}-upload__tip-text`\"\n >\n <div class=\"tip-content\">\n {{ tipMessage }}\n </div>\n </div>\n </slot>\n </template>\n </ElUpload>\n\n <ElImageViewer\n v-if=\"uploadData.imageViewerVisible\"\n :url-list=\"fileList.map((item: UploadFile) => item.url).filter((v: string | undefined) => v !== undefined)\"\n :initial-index=\"initialIndex\"\n teleported\n @close=\"previewClose\"\n />\n </div>\n</template>\n"],"names":["emits","__emit","attrs","useAttrs","fileList","_useModel","__props","nsEl","useNamespace","initialIndex","ref","uploadData","imageViewerVisible","progress","preview","percent","cssVar","computed","cssVarBlock","ns","namespace","value","width","height","exts","split","map","ext","pop","tipMessage","tipText","join","size","onPreview","file","indexOf","onRemove","splice","previewClose","handleBeforeUpload","fileExt","name","isTypeOk","includes","isSizeOk","URL","createObjectURL","beforeUpload","ElMessage","error","onProgress","evt","Math","floor","onSuccess","args","_createElementBlock","class","_normalizeClass","_unref","e","style","_createVNode","ElUpload","_mergeProps","$event","drag","limit","headers","action","data","accept","length","_withCtx","_createElementVNode","src","url","onClick","ZoomIn","disabled","Delete","tip","_renderSlot","_ctx","notip","_hoisted_5","_toDisplayString","_hoisted_1","_component_QxsIcon","icon","UploadImage","placeholder","_createBlock","ElImageViewer","item","filter","v","teleported","onClose"],"mappings":"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"}
1
+ {"version":3,"file":"image-upload.vue.cjs","sources":["../../../../../../packages/components/src/image-upload/src/image-upload.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { UploadFile, UploadFiles, UploadProps } from 'element-plus'\nimport { Delete, UploadImage, ZoomIn } from '@qxs-bns/icons'\nimport { ElImageViewer, ElMessage, ElUpload, useNamespace } from 'element-plus'\nimport { computed, onUnmounted, ref, useAttrs } from 'vue'\n\n// 类型定义\nexport interface ImageUploadProps {\n /** 上传地址(必需) */\n action: UploadProps['action']\n /** 请求头 */\n headers?: UploadProps['headers']\n /** 上传时附带的额外参数 */\n data?: UploadProps['data']\n /** 上传的文件字段名 */\n name?: UploadProps['name']\n /** 文件大小限制(MB) */\n size?: number\n /** 图片显示宽度(px) */\n width?: number\n /** 图片显示高度(px) */\n height?: number\n /** 接受的文件类型 */\n accept?: string\n /** 上传区域提示文字 */\n placeholder?: string\n /** 是否隐藏提示文字 */\n notip?: boolean\n /** 自定义提示文字 */\n tipText?: string\n /** 上传前的钩子函数 */\n beforeUpload?: UploadProps['beforeUpload']\n /** 是否禁用 */\n disabled?: boolean\n /** 最大上传数量 */\n limit?: number\n}\n\ninterface UploadProgress {\n preview: string\n percent: number\n}\n\n// 组件名称\ndefineOptions({\n name: 'QxsImageUpload',\n})\n\n// Props 定义\nconst {\n action,\n headers,\n data,\n name = 'file',\n size = 20,\n width = 160,\n height = 90,\n limit = 1,\n placeholder = '上传图片',\n notip = false,\n accept = 'image/jpeg,image/jpg,image/png,image/gif',\n beforeUpload,\n tipText = '',\n disabled = false,\n} = defineProps<ImageUploadProps>()\n\n// Emits 定义 - 统一事件命名\nconst emits = defineEmits<{\n success: [res: any, uploadFile: UploadFile, uploadFiles: UploadFiles]\n remove: [file: UploadFile]\n}>()\n\nconst attrs = useAttrs()\n\nconst fileList = defineModel('fileList', {\n type: Array as () => UploadFile[],\n default: () => [],\n})\n\n// 命名空间\nconst nsEl = useNamespace('image-upload')\n\nconst initialIndex = ref(0)\n// 响应式数据\nconst uploadData = ref<{\n imageViewerVisible: boolean\n progress: UploadProgress\n}>({\n imageViewerVisible: false,\n progress: {\n preview: '',\n percent: 0,\n },\n})\n\nconst cssVar = computed(() => {\n return nsEl.cssVarBlock({\n ns: nsEl.namespace.value,\n width: `${width}px`,\n height: `${height}px`,\n })\n})\n\n// 计算属性\nconst exts = computed(() =>\n accept.split(',').map(ext => ext.split('/').pop()),\n)\n\nconst tipMessage = computed(() => {\n if (tipText) {\n return tipText\n }\n\n const formatText = `上传图片支持 ${exts.value.join(' / ')} 格式,且图片大小不超过 ${size}MB`\n const sizeText = width && height ? `,建议图片尺寸为 ${width}×${height}` : ''\n\n return formatText + sizeText\n})\n\n// 方法\nfunction onPreview(file: UploadFile) {\n initialIndex.value = fileList.value.indexOf(file)\n uploadData.value.imageViewerVisible = true\n}\nfunction onRemove(file: UploadFile) {\n fileList.value.splice(fileList.value.indexOf(file), 1)\n}\n\nfunction previewClose() {\n uploadData.value.imageViewerVisible = false\n}\n\nconst handleBeforeUpload: UploadProps['beforeUpload'] = (file) => {\n // 参数校验\n if (!file || !file.name) {\n ElMessage.error('文件信息无效!')\n return false\n }\n\n // 文件类型校验\n const fileExt = file.name.split('.').pop()?.toLowerCase() ?? ''\n const isTypeOk = exts.value.some(ext => ext?.toLowerCase() === fileExt)\n\n if (!isTypeOk) {\n ElMessage.error(`上传图片只支持 ${exts.value.join(' / ')} 格式!`)\n return false\n }\n\n // 文件大小校验\n const fileSizeMB = file.size / 1024 / 1024\n if (fileSizeMB > size) {\n ElMessage.error(`上传图片大小不能超过 ${size}MB!`)\n return false\n }\n\n // 设置预览\n try {\n uploadData.value.progress.preview = URL.createObjectURL(file)\n }\n catch (error) {\n console.warn('创建预览失败:', error)\n }\n\n // 执行自定义校验\n return beforeUpload ? beforeUpload(file) : true\n}\n\nconst onProgress: UploadProps['onProgress'] = (evt) => {\n uploadData.value.progress.percent = Math.floor(evt.percent)\n}\n\nconst onSuccess: UploadProps['onSuccess'] = (...args) => {\n // 清理预览 URL,防止内存泄漏\n if (uploadData.value.progress.preview) {\n URL.revokeObjectURL(uploadData.value.progress.preview)\n }\n\n uploadData.value.progress = {\n preview: '',\n percent: 0,\n }\n emits('success', ...args)\n}\n\n// 组件卸载时清理资源\nonUnmounted(() => {\n if (uploadData.value.progress.preview) {\n URL.revokeObjectURL(uploadData.value.progress.preview)\n }\n})\n</script>\n\n<template>\n <div\n :class=\"nsEl.e('container')\"\n :style=\"cssVar\"\n >\n <ElUpload\n v-bind=\"attrs\"\n v-model:file-list=\"fileList\"\n drag\n :limit=\"limit\"\n list-type=\"picture-card\"\n :headers=\"headers\"\n :action=\"action\"\n :data=\"data\"\n :name=\"name\"\n :accept=\"accept\"\n :before-upload=\"handleBeforeUpload\"\n :on-progress=\"onProgress\"\n :on-preview=\"onPreview\"\n :on-success=\"onSuccess\"\n :class=\"[nsEl.e('control'), limit <= fileList.length ? nsEl.e('more-than-limit') : '']\"\n :on-remove=\"onRemove\"\n >\n <slot>\n <div class=\"image-slot\">\n <QxsIcon\n size=\"32px\"\n :icon=\"UploadImage\"\n />\n <p>{{ placeholder }}</p>\n </div>\n </slot>\n <template #file=\"{ file }\">\n <img\n :class=\"`${nsEl.namespace.value}-upload-list__item-thumbnail`\"\n :src=\"file.url\"\n >\n <span :class=\"`${nsEl.namespace.value}-upload-list__item-actions`\">\n <span\n :class=\"[\n `${nsEl.namespace.value}-upload-list__item-preview`,\n `${nsEl.namespace.value}-image-upload__action-btn`,\n `${nsEl.namespace.value}-image-upload__action-btn--preview`,\n ]\"\n @click=\"onPreview(file)\"\n >\n <ZoomIn size=\"14px\" />\n </span>\n <span :class=\"`${nsEl.namespace.value}-upload-list__item-divider`\" />\n <span\n v-if=\"!disabled\"\n :class=\"[\n `${nsEl.namespace.value}-upload-list__item-delete`,\n `${nsEl.namespace.value}-image-upload__action-btn`,\n `${nsEl.namespace.value}-image-upload__action-btn--delete`,\n ]\"\n @click=\"onRemove(file)\"\n >\n <Delete size=\"14px\" />\n </span>\n </span>\n </template>\n <template #tip>\n <slot name=\"tip\">\n <div\n v-if=\"!notip\"\n :class=\"`${nsEl.namespace.value}-upload__tip-text`\"\n >\n <div class=\"tip-content\">\n {{ tipMessage }}\n </div>\n </div>\n </slot>\n </template>\n </ElUpload>\n\n <ElImageViewer\n v-if=\"uploadData.imageViewerVisible\"\n :url-list=\"fileList.map((item: UploadFile) => item.url).filter((v: string | undefined) => v !== undefined)\"\n :initial-index=\"initialIndex\"\n teleported\n @close=\"previewClose\"\n />\n </div>\n</template>\n"],"names":["emits","__emit","attrs","useAttrs","fileList","_useModel","__props","nsEl","useNamespace","initialIndex","ref","uploadData","imageViewerVisible","progress","preview","percent","cssVar","computed","cssVarBlock","ns","namespace","value","width","height","exts","split","map","ext","pop","tipMessage","tipText","join","size","onPreview","file","indexOf","onRemove","splice","previewClose","handleBeforeUpload","name","ElMessage","error","fileExt","toLowerCase","some","URL","createObjectURL","console","warn","beforeUpload","onProgress","evt","Math","floor","onSuccess","args","revokeObjectURL","onUnmounted","_createElementBlock","class","_normalizeClass","_unref","e","style","_createVNode","ElUpload","_mergeProps","$event","drag","limit","headers","action","data","accept","length","_withCtx","_createElementVNode","src","url","onClick","ZoomIn","disabled","Delete","tip","_renderSlot","_ctx","notip","_hoisted_5","_toDisplayString","_hoisted_1","_component_QxsIcon","icon","UploadImage","placeholder","_createBlock","ElImageViewer","item","filter","v","teleported","onClose"],"mappings":"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"}