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