@ibiz-template/vue3-components 0.2.6 → 0.2.8

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 (71) hide show
  1. package/dist/index.min.css +1 -1
  2. package/dist/index.system.min.js +4 -4
  3. package/dist/index.system.min.js.map +1 -1
  4. package/dist/map-chart-yT41jdRg.js +2 -0
  5. package/dist/map-chart-yT41jdRg.js.map +1 -0
  6. package/es/common/index.mjs +7 -0
  7. package/es/common/map-chart/map-chart.css +1 -0
  8. package/es/common/map-chart/map-chart.d.ts +127 -0
  9. package/es/common/map-chart/map-chart.mjs +216 -0
  10. package/es/common/map-chart/map-chart.util.d.ts +20 -0
  11. package/es/common/map-chart/map-chart.util.mjs +21 -0
  12. package/es/common/map-chart/map-json.d.ts +1 -0
  13. package/es/common/map-chart/map-json.mjs +9 -0
  14. package/es/common/map-chart/map-manager.d.ts +20 -0
  15. package/es/common/map-chart/map-manager.mjs +121 -0
  16. package/es/common/rawitem/rawitem.mjs +2 -2
  17. package/es/control/form/form-detail/form-mdctrl/form-mdctrl-container/form-mdctrl-container.css +1 -1
  18. package/es/control/form/form-detail/form-mdctrl/form-mdctrl-container/form-mdctrl-container.d.ts +1 -1
  19. package/es/control/form/form-detail/form-mdctrl/form-mdctrl-container/form-mdctrl-container.mjs +2 -2
  20. package/es/control/index.d.ts +1 -0
  21. package/es/control/index.mjs +1 -0
  22. package/es/control/map/index.d.ts +5 -0
  23. package/es/control/map/index.mjs +13 -0
  24. package/es/control/map/map.css +1 -0
  25. package/es/control/map/map.d.ts +62 -0
  26. package/es/control/map/map.mjs +71 -0
  27. package/es/control/map/map.provider.d.ts +13 -0
  28. package/es/control/map/map.provider.mjs +14 -0
  29. package/es/control/pickup-view-panel/pickup-view-panel.mjs +2 -11
  30. package/es/editor/check-box-list/ibiz-checkbox-list/ibiz-checkbox-list.css +1 -1
  31. package/es/editor/data-picker/ibiz-mpicker/ibiz-mpicker.css +1 -1
  32. package/es/editor/data-picker/ibiz-mpicker/ibiz-mpicker.mjs +5 -1
  33. package/es/editor/data-picker/ibiz-picker-dropdown/ibiz-picker-dropdown.css +1 -1
  34. package/es/editor/data-picker/ibiz-picker-dropdown/ibiz-picker-dropdown.mjs +1 -1
  35. package/es/editor/date-picker/ibiz-date-picker/ibiz-date-picker.css +1 -1
  36. package/es/editor/dropdown-list/ibiz-dropdown/ibiz-dropdown.css +1 -1
  37. package/es/editor/radio-button-list/ibiz-radio/ibiz-radio.css +1 -1
  38. package/es/editor/text-box/input/input.css +1 -1
  39. package/es/index.mjs +3 -1
  40. package/es/view-engine/index-view.engine.mjs +12 -12
  41. package/es/view-engine/mpickup-view-engine.mjs +9 -0
  42. package/es/view-engine/wf-dyna-edit-view.engine.mjs +2 -1
  43. package/lib/common/index.cjs +7 -0
  44. package/lib/common/map-chart/map-chart.cjs +221 -0
  45. package/lib/common/map-chart/map-chart.css +1 -0
  46. package/lib/common/map-chart/map-chart.util.cjs +24 -0
  47. package/lib/common/map-chart/map-json.cjs +11 -0
  48. package/lib/common/map-chart/map-manager.cjs +123 -0
  49. package/lib/common/rawitem/rawitem.cjs +2 -2
  50. package/lib/control/form/form-detail/form-mdctrl/form-mdctrl-container/form-mdctrl-container.cjs +2 -2
  51. package/lib/control/form/form-detail/form-mdctrl/form-mdctrl-container/form-mdctrl-container.css +1 -1
  52. package/lib/control/index.cjs +2 -0
  53. package/lib/control/map/index.cjs +18 -0
  54. package/lib/control/map/map.cjs +75 -0
  55. package/lib/control/map/map.css +1 -0
  56. package/lib/control/map/map.provider.cjs +16 -0
  57. package/lib/control/pickup-view-panel/pickup-view-panel.cjs +1 -10
  58. package/lib/editor/check-box-list/ibiz-checkbox-list/ibiz-checkbox-list.css +1 -1
  59. package/lib/editor/data-picker/ibiz-mpicker/ibiz-mpicker.cjs +5 -1
  60. package/lib/editor/data-picker/ibiz-mpicker/ibiz-mpicker.css +1 -1
  61. package/lib/editor/data-picker/ibiz-picker-dropdown/ibiz-picker-dropdown.cjs +1 -1
  62. package/lib/editor/data-picker/ibiz-picker-dropdown/ibiz-picker-dropdown.css +1 -1
  63. package/lib/editor/date-picker/ibiz-date-picker/ibiz-date-picker.css +1 -1
  64. package/lib/editor/dropdown-list/ibiz-dropdown/ibiz-dropdown.css +1 -1
  65. package/lib/editor/radio-button-list/ibiz-radio/ibiz-radio.css +1 -1
  66. package/lib/editor/text-box/input/input.css +1 -1
  67. package/lib/index.cjs +52 -49
  68. package/lib/view-engine/index-view.engine.cjs +12 -12
  69. package/lib/view-engine/mpickup-view-engine.cjs +9 -0
  70. package/lib/view-engine/wf-dyna-edit-view.engine.cjs +2 -1
  71. package/package.json +12 -12
@@ -0,0 +1,2 @@
1
+ System.register(["vue","ramda","@ibiz-template/vue3-util","echarts"],function(O){"use strict";var y,x,k,S,N,z,v,w,I,T,B,R;return{setters:[function(o){y=o.ref,x=o.onMounted,k=o.defineComponent,S=o.computed,N=o.toRefs,z=o.watch,v=o.createVNode,w=o.createTextVNode},function(o){I=o.mergeDeepRight},function(o){T=o.useNamespace},function(o){B=o.init,R=o.registerMap}],execute:function(){const j={strMapCode:!1,visualMap:{text:["\u9AD8","\u4F4E"],min:0,max:100,rangeColor:["#90d1e7","#fff600","#ff5200"]},pointSymbol:"pin",jsonBaseUrl:"/assets/json/map/jiangsu"};async function $(n,u){return(await ibiz.net.axios({url:`${n}/${u}.json`})).data}function A(n,u,h){const d=new Map,r=y(""),f=y([]);let i;const b=y(),D=e=>{const t={cityNames:{},noChild:e.features.length===1};return e.features.forEach(s=>{const{adcode:p,name:C}=s.properties;t.cityNames[p]=C}),t},M=async e=>{if(d.has(e))return;const t=await $(n.value.jsonBaseUrl,e);d.set(e,D(t)),R(e,t)},_=e=>{const t=d.get(r.value);if(t)return t.cityNames[e]},m=()=>{if(r.value){const e=u(r.value);i.setOption(e),i.resize()}},g=async(e,t=!1)=>{t||h("mapChange",{areaCode:n.value.strMapCode?`${e}`:Number(e)}),d.has(e)||await M(e),r.value=e,f.value.push(e),m()},c=()=>{if(f.value.length>1){f.value.pop();const e=f.value.pop();g(e)}};return x(()=>{i=B(b.value),window.addEventListener("resize",()=>{i?.resize()}),i.on("click",e=>{if(e.componentType==="series"){if(e.seriesType==="scatter"){h("pointClick",e.data);return}if(e.seriesType==="map"&&(e.data&&h("areaClick",e.data),e.name!==r.value)){debugger;g(e.name)}}}),i.on("mouseover",function(e){if(e.componentType==="series"&&e.seriesType==="scatter"){const t=e.dataIndex,s=i.getOption(),p=s.series[e.seriesIndex].data,C=s.series[e.seriesIndex].symbolSize;p[t].symbolSize=C+10,i.setOption(s)}}),i.on("mouseout",function(e){if(e.componentType==="series"&&e.seriesType==="scatter"){const t=e.dataIndex,s=i.getOption(),p=s.series[e.seriesIndex].data;delete p[t].symbolSize,i.setOption(s)}})}),{chartRef:b,historyNames:f,currentName:r,changeMap:g,getCityName:_,goBack:c,refresh:m}}const F=k({name:"IBizMapChart",props:{areaData:{type:Array},pointData:{type:Array},options:{type:Object,default:()=>({})},defaultAreaCode:{type:String,required:!0,default:"320000"}},setup(n,{emit:u}){const h=T("map-chart"),d=S(()=>I(j,n.options)),r=(c,e)=>{if(e==="area"&&n.areaData)return n.areaData.find(t=>t._id===c);if(e==="point"&&n.pointData)return n.pointData.find(t=>t._id===c)},{chartRef:f,historyNames:i,changeMap:b,getCityName:D,goBack:M,refresh:_}=A(d,c=>{const{visualMap:e,pointSymbol:t}=d.value,s=n.areaData||[],p=n.pointData||[];return{geo:{map:c},tooltip:{trigger:"item",textStyle:{color:"#fff",fontSize:12},backgroundColor:"rgba(0, 0, 0, 0.47)",borderWidth:0,extraCssText:"backdrop-filter: blur(3px);"},visualMap:{min:e.min,max:e.max,text:e.text,realtime:!1,hoverLink:!1,inRange:{color:e.rangeColor}},series:[{type:"map",map:c,nameProperty:"adcodeStr",itemStyle:{borderColor:"#FFF",borderWidth:2},tooltip:{formatter:a=>{if(!a.data)return;const l=r(a.data._id,"area");if(l)return l._tooltip}},label:{show:!0,color:"#000000",fontSize:14,formatter:a=>D(a.name)},select:{disabled:!0},data:s.map(a=>({name:`${a._areaCode}`,value:a._value,_id:a._id}))},{type:"scatter",coordinateSystem:"geo",symbol:t,symbolSize:20,visualMap:!1,itemStyle:{color:"#FF1D00"},label:{show:!0,color:"#000000",fontSize:14,textShadowBlur:0,formatter:a=>{const l=r(a.data._id,"point");return l?._text},position:"left",offset:[10,-15]},tooltip:{formatter:a=>{const l=r(a.data._id,"point");return l?._tooltip}},data:p.map(a=>({_id:a._id,symbol:a._symbol?`image://${a._symbol}`:void 0,value:[Number(a._longitude),Number(a._latitude)],visualMap:!1}))}]}},(c,e)=>{switch(c){case"mapChange":u("mapChange",e);break;case"pointClick":u("pointClick",{data:r(e._id,"point")});break;case"areaClick":u("areaClick",{data:r(e._id,"area")});break}});x(()=>{b(n.defaultAreaCode,!0)});const{areaData:m,pointData:g}=N(n);return z([m,g],()=>{_()}),{ns:h,chartRef:f,historyNames:i,goBack:M}},render(){return v("div",{class:this.ns.b()},[v("div",{class:this.ns.e("chart"),ref:"chartRef"},null),this.historyNames.length>1&&v("div",{class:this.ns.e("goback"),onClick:()=>{this.goBack()}},[w("\u8FD4\u56DE")])])}});O({IBizMapChart:F,default:F})}}});
2
+ //# sourceMappingURL=map-chart-yT41jdRg.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"map-chart-yT41jdRg.js","sources":["../src/common/map-chart/map-chart.util.ts","../src/common/map-chart/map-json.ts","../src/common/map-chart/map-manager.ts","../src/common/map-chart/map-chart.tsx"],"sourcesContent":["/** 渐变颜色集合 */\nexport const GradientColors = ['#90d1e7', '#fff600', '#ff5200'];\n\nexport const defaultOpts = {\n /** true地图code标识使用字符串,false使用数字 */\n strMapCode: false,\n /** 热力图配置 */\n visualMap: {\n /** 两端的文本,如 ['高', '低'] */\n text: ['高', '低'],\n /** 底部代表的值 */\n min: 0,\n /** 顶部代表的值 */\n max: 100,\n /** 热力图渐变颜色数组 */\n rangeColor: GradientColors,\n },\n pointSymbol: 'pin',\n jsonBaseUrl: '/assets/json/map/jiangsu',\n};\n\nexport type MapOptions = typeof defaultOpts;\n","export async function getJsonUrl(\n baseUrl: string,\n code: string | number,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n): Promise<any> {\n const res = await ibiz.net.axios({\n url: `${baseUrl}/${code}.json`,\n });\n return res.data;\n}\n","/* eslint-disable no-unused-vars */\nimport { registerMap as register, EChartsType, init } from 'echarts';\nimport { ComputedRef, onMounted, ref } from 'vue';\nimport { MapOptions } from './map-chart.util';\nimport { getJsonUrl } from './map-json';\n\n/**\n * 使用echarts地图\n * @author lxm\n * @date 2023-04-06 12:00:07\n * @export\n * @param {(name: string) => IData} calcEchartsOpts 计算echarts的Options\n * @param {(name: string, e: IData) => void} emit 事件回调\n * @return {*}\n */\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport function useMapManager(\n opts: ComputedRef<MapOptions>,\n calcEchartsOpts: (name: string) => IData,\n emit: (name: string, e: IData) => void,\n) {\n const mapInfos = new Map<string, IData>();\n\n const currentName = ref('');\n\n const historyNames = ref<string[]>([]);\n\n let chart: EChartsType;\n const chartRef = ref();\n\n const parseJson = (json: IData) => {\n const info: IData = {\n cityNames: {},\n noChild: json.features.length === 1,\n };\n json.features.forEach((item: IData) => {\n const { adcode, name } = item.properties;\n info.cityNames[adcode] = name;\n });\n return info;\n };\n\n const registerMap = async (name: string) => {\n if (mapInfos.has(name)) {\n return;\n }\n const json = await getJsonUrl(opts.value.jsonBaseUrl, name);\n mapInfos.set(name, parseJson(json));\n register(name, json);\n };\n\n const getCityName = (mapName: string | number) => {\n const info = mapInfos.get(currentName.value);\n if (info) {\n return info.cityNames[mapName];\n }\n };\n\n const refresh = () => {\n if (currentName.value) {\n const options = calcEchartsOpts(currentName.value);\n chart.setOption(options);\n chart.resize();\n }\n };\n\n const changeMap = async (name: string, isInit: boolean = false) => {\n if (!isInit) {\n emit('mapChange', {\n areaCode: opts.value.strMapCode ? `${name}` : Number(name),\n });\n }\n\n if (!mapInfos.has(name)) {\n await registerMap(name);\n }\n currentName.value = name;\n historyNames.value.push(name);\n refresh();\n };\n\n const goBack = () => {\n // 一个时只有当前的name,不能后退。\n if (historyNames.value.length > 1) {\n historyNames.value.pop(); // 先删除当前地图的name\n const name = historyNames.value.pop(); // 获取上一个地图的name\n changeMap(name!);\n }\n };\n\n onMounted(() => {\n chart = init(chartRef.value);\n\n window.addEventListener('resize', () => {\n chart?.resize();\n });\n\n chart.on('click', params => {\n // 散点点击事件\n if (params.componentType === 'series') {\n if (params.seriesType === 'scatter') {\n emit('pointClick', params.data as IData);\n return;\n }\n if (params.seriesType === 'map') {\n if (params.data) {\n emit('areaClick', params.data as IData);\n }\n // 禁止切换同一个地图,到最下级的时候会出现这种情况\n if (params.name !== currentName.value) {\n debugger;\n changeMap(params.name);\n }\n }\n }\n });\n\n // 散点悬浮size变大\n chart.on('mouseover', function (params) {\n if (params.componentType === 'series') {\n if (params.seriesType === 'scatter') {\n const dataIndex = params.dataIndex;\n const option: IData = chart.getOption();\n const seriesData = option.series[params.seriesIndex!].data;\n const originSize = option.series[params.seriesIndex!].symbolSize;\n // 修改悬浮的数据点大小\n seriesData[dataIndex].symbolSize = originSize + 10;\n\n // 刷新图表\n chart.setOption(option);\n }\n }\n });\n chart.on('mouseout', function (params) {\n if (params.componentType === 'series') {\n if (params.seriesType === 'scatter') {\n const dataIndex = params.dataIndex;\n const option: IData = chart.getOption();\n const seriesData = option.series[params.seriesIndex!].data;\n\n // 恢复原始的数据点大小\n delete seriesData[dataIndex].symbolSize;\n\n // 刷新图表\n chart.setOption(option);\n }\n }\n });\n });\n\n return {\n chartRef,\n historyNames,\n currentName,\n changeMap,\n getCityName,\n goBack,\n refresh,\n };\n}\n","/* eslint-disable eqeqeq */\nimport {\n defineComponent,\n onMounted,\n PropType,\n computed,\n toRefs,\n watch,\n} from 'vue';\nimport { mergeDeepRight } from 'ramda';\nimport { useNamespace } from '@ibiz-template/vue3-util';\nimport { IMapData } from '@ibiz-template/runtime';\nimport { defaultOpts, MapOptions } from './map-chart.util';\nimport { useMapManager } from './map-manager';\nimport './map-chart.scss';\n\nexport const IBizMapChart = defineComponent({\n name: 'IBizMapChart',\n props: {\n areaData: {\n type: Array<IMapData>,\n },\n pointData: {\n type: Array<IMapData>,\n },\n options: {\n type: Object as PropType<Partial<MapOptions>>,\n default: () => ({}),\n },\n defaultAreaCode: { type: String, required: true, default: '320000' },\n },\n setup(props, { emit }) {\n const ns = useNamespace('map-chart');\n const options = computed(() => mergeDeepRight(defaultOpts, props.options));\n\n const findData = (id: string, type: 'area' | 'point') => {\n if (type === 'area' && props.areaData) {\n return props.areaData.find(item => item._id === id);\n }\n if (type === 'point' && props.pointData) {\n return props.pointData.find(item => item._id === id);\n }\n };\n\n const { chartRef, historyNames, changeMap, getCityName, goBack, refresh } =\n useMapManager(\n options,\n mapName => {\n const { visualMap, pointSymbol } = options.value;\n const areaData = props.areaData || [];\n const pointData = props.pointData || [];\n\n const result: IData = {\n geo: {\n map: mapName,\n },\n tooltip: {\n trigger: 'item',\n // 全局的tooltip样式\n textStyle: {\n color: '#fff',\n fontSize: 12,\n },\n backgroundColor: 'rgba(0, 0, 0, 0.47)',\n borderWidth: 0,\n extraCssText: 'backdrop-filter: blur(3px);',\n },\n visualMap: {\n min: visualMap.min,\n max: visualMap.max,\n text: visualMap.text,\n realtime: false,\n hoverLink: false,\n inRange: {\n color: visualMap.rangeColor,\n },\n },\n series: [\n // 地图区块序列\n {\n type: 'map',\n map: mapName,\n // 地图JSON里和name匹配的属性名称\n nameProperty: 'adcodeStr',\n itemStyle: {\n borderColor: '#FFF',\n borderWidth: 2,\n },\n tooltip: {\n formatter: (params: IData) => {\n if (!params.data) {\n // 没有数据的时候不显示tooltip\n return;\n }\n const find = findData(params.data._id, 'area')!;\n if (!find) {\n return;\n }\n return find._tooltip;\n },\n },\n label: {\n // 区块文字固定显示\n show: true,\n // 字体样式\n color: '#000000',\n fontSize: 14,\n formatter: (params: IData) => {\n return getCityName(params.name);\n },\n },\n select: {\n disabled: true,\n },\n data: areaData.map(item => ({\n name: `${item._areaCode}`,\n value: item._value,\n _id: item._id,\n })),\n },\n // 地图散点序列\n {\n type: 'scatter',\n coordinateSystem: 'geo',\n symbol: pointSymbol,\n symbolSize: 20,\n visualMap: false,\n itemStyle: {\n color: '#FF1D00',\n },\n label: {\n show: true,\n // 字体样式\n color: '#000000',\n fontSize: 14,\n textShadowBlur: 0,\n formatter: (params: IData) => {\n const find = findData(params.data._id, 'point')!;\n return find?._text;\n },\n // 偏移\n position: 'left',\n offset: [10, -15],\n },\n tooltip: {\n formatter: (params: IData) => {\n const find = findData(params.data._id, 'point')!;\n return find?._tooltip;\n },\n },\n data: pointData.map(item => {\n return {\n _id: item._id,\n symbol: item._symbol\n ? `image://${item._symbol}`\n : undefined,\n value: [Number(item._longitude), Number(item._latitude)],\n // 每个点逃离visualMap\n visualMap: false,\n };\n }),\n },\n ],\n };\n return result;\n },\n (name, e) => {\n switch (name) {\n case 'mapChange':\n emit('mapChange', e);\n break;\n case 'pointClick':\n emit('pointClick', { data: findData(e._id, 'point') });\n break;\n case 'areaClick':\n emit('areaClick', { data: findData(e._id, 'area') });\n break;\n default:\n break;\n }\n },\n );\n\n onMounted(() => {\n changeMap(props.defaultAreaCode, true);\n });\n\n const { areaData, pointData } = toRefs(props);\n watch([areaData, pointData], () => {\n refresh();\n });\n\n return { ns, chartRef, historyNames, goBack };\n },\n render() {\n return (\n <div class={this.ns.b()}>\n <div class={this.ns.e('chart')} ref='chartRef'></div>\n {this.historyNames.length > 1 && (\n <div\n class={this.ns.e('goback')}\n onClick={() => {\n this.goBack();\n }}\n >\n 返回\n </div>\n )}\n </div>\n );\n },\n});\n\nexport default IBizMapChart;\n"],"names":["defaultOpts","getJsonUrl","baseUrl","code","useMapManager","opts","calcEchartsOpts","emit","mapInfos","currentName","ref","historyNames","chart","chartRef","parseJson","json","info","item","adcode","name","registerMap","register","getCityName","mapName","refresh","options","changeMap","isInit","goBack","onMounted","init","params","dataIndex","option","seriesData","originSize","IBizMapChart","defineComponent","props","areaData","type","Array","pointData","Object","default","defaultAreaCode","String","required","setup","ns","useNamespace","computed","mergeDeepRight","findData","id","find","visualMap","pointSymbol","value","geo","map","tooltip","trigger","textStyle","color","fontSize","backgroundColor","borderWidth","extraCssText","min","max","text","realtime","hoverLink","inRange","rangeColor","series","nameProperty","itemStyle","borderColor","data","select","disabled","areaData2","_areaCode","_value","coordinateSystem","symbol","symbolSize","label","textShadowBlur","position","offset","pointData2","_id","_symbol","e","toRefs","watch","render","_createVNode","b","length","onClick","_createTextVNode","exports"],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import { defineAsyncComponent } from 'vue';
1
2
  import { IBizActionToolbar } from './action-toolbar/action-toolbar.mjs';
2
3
  import { IBizCol } from './col/col.mjs';
3
4
  import { IBizIcon } from './icon/icon.mjs';
@@ -37,6 +38,12 @@ const IBizCommonComponents = {
37
38
  v.component(ViewMessage.name, ViewMessage);
38
39
  v.component(IBizPagination.name, IBizPagination);
39
40
  v.component(IBizSortBar.name, IBizSortBar);
41
+ v.component(
42
+ "IBizMapChart",
43
+ defineAsyncComponent({
44
+ loader: () => import('./map-chart/map-chart.mjs')
45
+ })
46
+ );
40
47
  }
41
48
  };
42
49
 
@@ -0,0 +1 @@
1
+ .ibiz-map-chart{position:relative;min-width:300px;min-height:300px}.ibiz-map-chart__chart{width:100%;height:100%}.ibiz-map-chart__goback{position:absolute;top:60px;right:0;width:100px;height:100px;font-size:20px;color:#002a5f;text-decoration:underline;letter-spacing:6px;cursor:pointer}
@@ -0,0 +1,127 @@
1
+ import { PropType } from 'vue';
2
+ import { IMapData } from '@ibiz-template/runtime';
3
+ import './map-chart.scss';
4
+ export declare const IBizMapChart: import("vue").DefineComponent<{
5
+ areaData: {
6
+ type: {
7
+ (arrayLength: number): IMapData[];
8
+ (...items: IMapData[]): IMapData[];
9
+ new (arrayLength: number): IMapData[];
10
+ new (...items: IMapData[]): IMapData[];
11
+ isArray(arg: any): arg is any[];
12
+ readonly prototype: any[];
13
+ from<T>(arrayLike: ArrayLike<T>): T[];
14
+ from<T_1, U>(arrayLike: ArrayLike<T_1>, mapfn: (v: T_1, k: number) => U, thisArg?: any): U[];
15
+ from<T_2>(iterable: Iterable<T_2> | ArrayLike<T_2>): T_2[];
16
+ from<T_3, U_1>(iterable: Iterable<T_3> | ArrayLike<T_3>, mapfn: (v: T_3, k: number) => U_1, thisArg?: any): U_1[];
17
+ of<T_4>(...items: T_4[]): T_4[];
18
+ readonly [Symbol.species]: ArrayConstructor;
19
+ };
20
+ };
21
+ pointData: {
22
+ type: {
23
+ (arrayLength: number): IMapData[];
24
+ (...items: IMapData[]): IMapData[];
25
+ new (arrayLength: number): IMapData[];
26
+ new (...items: IMapData[]): IMapData[];
27
+ isArray(arg: any): arg is any[];
28
+ readonly prototype: any[];
29
+ from<T>(arrayLike: ArrayLike<T>): T[];
30
+ from<T_1, U>(arrayLike: ArrayLike<T_1>, mapfn: (v: T_1, k: number) => U, thisArg?: any): U[];
31
+ from<T_2>(iterable: Iterable<T_2> | ArrayLike<T_2>): T_2[];
32
+ from<T_3, U_1>(iterable: Iterable<T_3> | ArrayLike<T_3>, mapfn: (v: T_3, k: number) => U_1, thisArg?: any): U_1[];
33
+ of<T_4>(...items: T_4[]): T_4[];
34
+ readonly [Symbol.species]: ArrayConstructor;
35
+ };
36
+ };
37
+ options: {
38
+ type: PropType<Partial<{
39
+ strMapCode: boolean;
40
+ visualMap: {
41
+ text: string[];
42
+ min: number;
43
+ max: number;
44
+ rangeColor: string[];
45
+ };
46
+ pointSymbol: string;
47
+ jsonBaseUrl: string;
48
+ }>>;
49
+ default: () => {};
50
+ };
51
+ defaultAreaCode: {
52
+ type: StringConstructor;
53
+ required: true;
54
+ default: string;
55
+ };
56
+ }, {
57
+ ns: import("@ibiz-template/core").Namespace;
58
+ chartRef: import("vue").Ref<any>;
59
+ historyNames: import("vue").Ref<string[]>;
60
+ goBack: () => void;
61
+ }, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{
62
+ areaData: {
63
+ type: {
64
+ (arrayLength: number): IMapData[];
65
+ (...items: IMapData[]): IMapData[];
66
+ new (arrayLength: number): IMapData[];
67
+ new (...items: IMapData[]): IMapData[];
68
+ isArray(arg: any): arg is any[];
69
+ readonly prototype: any[];
70
+ from<T>(arrayLike: ArrayLike<T>): T[];
71
+ from<T_1, U>(arrayLike: ArrayLike<T_1>, mapfn: (v: T_1, k: number) => U, thisArg?: any): U[];
72
+ from<T_2>(iterable: Iterable<T_2> | ArrayLike<T_2>): T_2[];
73
+ from<T_3, U_1>(iterable: Iterable<T_3> | ArrayLike<T_3>, mapfn: (v: T_3, k: number) => U_1, thisArg?: any): U_1[];
74
+ of<T_4>(...items: T_4[]): T_4[];
75
+ readonly [Symbol.species]: ArrayConstructor;
76
+ };
77
+ };
78
+ pointData: {
79
+ type: {
80
+ (arrayLength: number): IMapData[];
81
+ (...items: IMapData[]): IMapData[];
82
+ new (arrayLength: number): IMapData[];
83
+ new (...items: IMapData[]): IMapData[];
84
+ isArray(arg: any): arg is any[];
85
+ readonly prototype: any[];
86
+ from<T>(arrayLike: ArrayLike<T>): T[];
87
+ from<T_1, U>(arrayLike: ArrayLike<T_1>, mapfn: (v: T_1, k: number) => U, thisArg?: any): U[];
88
+ from<T_2>(iterable: Iterable<T_2> | ArrayLike<T_2>): T_2[];
89
+ from<T_3, U_1>(iterable: Iterable<T_3> | ArrayLike<T_3>, mapfn: (v: T_3, k: number) => U_1, thisArg?: any): U_1[];
90
+ of<T_4>(...items: T_4[]): T_4[];
91
+ readonly [Symbol.species]: ArrayConstructor;
92
+ };
93
+ };
94
+ options: {
95
+ type: PropType<Partial<{
96
+ strMapCode: boolean;
97
+ visualMap: {
98
+ text: string[];
99
+ min: number;
100
+ max: number;
101
+ rangeColor: string[];
102
+ };
103
+ pointSymbol: string;
104
+ jsonBaseUrl: string;
105
+ }>>;
106
+ default: () => {};
107
+ };
108
+ defaultAreaCode: {
109
+ type: StringConstructor;
110
+ required: true;
111
+ default: string;
112
+ };
113
+ }>>, {
114
+ options: Partial<{
115
+ strMapCode: boolean;
116
+ visualMap: {
117
+ text: string[];
118
+ min: number;
119
+ max: number;
120
+ rangeColor: string[];
121
+ };
122
+ pointSymbol: string;
123
+ jsonBaseUrl: string;
124
+ }>;
125
+ defaultAreaCode: string;
126
+ }, {}>;
127
+ export default IBizMapChart;
@@ -0,0 +1,216 @@
1
+ import { computed, onMounted, toRefs, watch, createVNode, createTextVNode, defineComponent } from 'vue';
2
+ import { mergeDeepRight } from 'ramda';
3
+ import { useNamespace } from '@ibiz-template/vue3-util';
4
+ import { defaultOpts } from './map-chart.util.mjs';
5
+ import { useMapManager } from './map-manager.mjs';
6
+ import './map-chart.css';
7
+
8
+ "use strict";
9
+ const IBizMapChart = /* @__PURE__ */ defineComponent({
10
+ name: "IBizMapChart",
11
+ props: {
12
+ areaData: {
13
+ type: Array
14
+ },
15
+ pointData: {
16
+ type: Array
17
+ },
18
+ options: {
19
+ type: Object,
20
+ default: () => ({})
21
+ },
22
+ defaultAreaCode: {
23
+ type: String,
24
+ required: true,
25
+ default: "320000"
26
+ }
27
+ },
28
+ setup(props, {
29
+ emit
30
+ }) {
31
+ const ns = useNamespace("map-chart");
32
+ const options = computed(() => mergeDeepRight(defaultOpts, props.options));
33
+ const findData = (id, type) => {
34
+ if (type === "area" && props.areaData) {
35
+ return props.areaData.find((item) => item._id === id);
36
+ }
37
+ if (type === "point" && props.pointData) {
38
+ return props.pointData.find((item) => item._id === id);
39
+ }
40
+ };
41
+ const {
42
+ chartRef,
43
+ historyNames,
44
+ changeMap,
45
+ getCityName,
46
+ goBack,
47
+ refresh
48
+ } = useMapManager(options, (mapName) => {
49
+ const {
50
+ visualMap,
51
+ pointSymbol
52
+ } = options.value;
53
+ const areaData2 = props.areaData || [];
54
+ const pointData2 = props.pointData || [];
55
+ const result = {
56
+ geo: {
57
+ map: mapName
58
+ },
59
+ tooltip: {
60
+ trigger: "item",
61
+ // 全局的tooltip样式
62
+ textStyle: {
63
+ color: "#fff",
64
+ fontSize: 12
65
+ },
66
+ backgroundColor: "rgba(0, 0, 0, 0.47)",
67
+ borderWidth: 0,
68
+ extraCssText: "backdrop-filter: blur(3px);"
69
+ },
70
+ visualMap: {
71
+ min: visualMap.min,
72
+ max: visualMap.max,
73
+ text: visualMap.text,
74
+ realtime: false,
75
+ hoverLink: false,
76
+ inRange: {
77
+ color: visualMap.rangeColor
78
+ }
79
+ },
80
+ series: [
81
+ // 地图区块序列
82
+ {
83
+ type: "map",
84
+ map: mapName,
85
+ // 地图JSON里和name匹配的属性名称
86
+ nameProperty: "adcodeStr",
87
+ itemStyle: {
88
+ borderColor: "#FFF",
89
+ borderWidth: 2
90
+ },
91
+ tooltip: {
92
+ formatter: (params) => {
93
+ if (!params.data) {
94
+ return;
95
+ }
96
+ const find = findData(params.data._id, "area");
97
+ if (!find) {
98
+ return;
99
+ }
100
+ return find._tooltip;
101
+ }
102
+ },
103
+ label: {
104
+ // 区块文字固定显示
105
+ show: true,
106
+ // 字体样式
107
+ color: "#000000",
108
+ fontSize: 14,
109
+ formatter: (params) => {
110
+ return getCityName(params.name);
111
+ }
112
+ },
113
+ select: {
114
+ disabled: true
115
+ },
116
+ data: areaData2.map((item) => ({
117
+ name: `${item._areaCode}`,
118
+ value: item._value,
119
+ _id: item._id
120
+ }))
121
+ },
122
+ // 地图散点序列
123
+ {
124
+ type: "scatter",
125
+ coordinateSystem: "geo",
126
+ symbol: pointSymbol,
127
+ symbolSize: 20,
128
+ visualMap: false,
129
+ itemStyle: {
130
+ color: "#FF1D00"
131
+ },
132
+ label: {
133
+ show: true,
134
+ // 字体样式
135
+ color: "#000000",
136
+ fontSize: 14,
137
+ textShadowBlur: 0,
138
+ formatter: (params) => {
139
+ const find = findData(params.data._id, "point");
140
+ return find == null ? void 0 : find._text;
141
+ },
142
+ // 偏移
143
+ position: "left",
144
+ offset: [10, -15]
145
+ },
146
+ tooltip: {
147
+ formatter: (params) => {
148
+ const find = findData(params.data._id, "point");
149
+ return find == null ? void 0 : find._tooltip;
150
+ }
151
+ },
152
+ data: pointData2.map((item) => {
153
+ return {
154
+ _id: item._id,
155
+ symbol: item._symbol ? `image://${item._symbol}` : void 0,
156
+ value: [Number(item._longitude), Number(item._latitude)],
157
+ // 每个点逃离visualMap
158
+ visualMap: false
159
+ };
160
+ })
161
+ }
162
+ ]
163
+ };
164
+ return result;
165
+ }, (name, e) => {
166
+ switch (name) {
167
+ case "mapChange":
168
+ emit("mapChange", e);
169
+ break;
170
+ case "pointClick":
171
+ emit("pointClick", {
172
+ data: findData(e._id, "point")
173
+ });
174
+ break;
175
+ case "areaClick":
176
+ emit("areaClick", {
177
+ data: findData(e._id, "area")
178
+ });
179
+ break;
180
+ default:
181
+ break;
182
+ }
183
+ });
184
+ onMounted(() => {
185
+ changeMap(props.defaultAreaCode, true);
186
+ });
187
+ const {
188
+ areaData,
189
+ pointData
190
+ } = toRefs(props);
191
+ watch([areaData, pointData], () => {
192
+ refresh();
193
+ });
194
+ return {
195
+ ns,
196
+ chartRef,
197
+ historyNames,
198
+ goBack
199
+ };
200
+ },
201
+ render() {
202
+ return createVNode("div", {
203
+ "class": this.ns.b()
204
+ }, [createVNode("div", {
205
+ "class": this.ns.e("chart"),
206
+ "ref": "chartRef"
207
+ }, null), this.historyNames.length > 1 && createVNode("div", {
208
+ "class": this.ns.e("goback"),
209
+ "onClick": () => {
210
+ this.goBack();
211
+ }
212
+ }, [createTextVNode("\u8FD4\u56DE")])]);
213
+ }
214
+ });
215
+
216
+ export { IBizMapChart, IBizMapChart as default };
@@ -0,0 +1,20 @@
1
+ /** 渐变颜色集合 */
2
+ export declare const GradientColors: string[];
3
+ export declare const defaultOpts: {
4
+ /** true地图code标识使用字符串,false使用数字 */
5
+ strMapCode: boolean;
6
+ /** 热力图配置 */
7
+ visualMap: {
8
+ /** 两端的文本,如 ['高', '低'] */
9
+ text: string[];
10
+ /** 底部代表的值 */
11
+ min: number;
12
+ /** 顶部代表的值 */
13
+ max: number;
14
+ /** 热力图渐变颜色数组 */
15
+ rangeColor: string[];
16
+ };
17
+ pointSymbol: string;
18
+ jsonBaseUrl: string;
19
+ };
20
+ export type MapOptions = typeof defaultOpts;
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ const GradientColors = ["#90d1e7", "#fff600", "#ff5200"];
3
+ const defaultOpts = {
4
+ /** true地图code标识使用字符串,false使用数字 */
5
+ strMapCode: false,
6
+ /** 热力图配置 */
7
+ visualMap: {
8
+ /** 两端的文本,如 ['高', '低'] */
9
+ text: ["\u9AD8", "\u4F4E"],
10
+ /** 底部代表的值 */
11
+ min: 0,
12
+ /** 顶部代表的值 */
13
+ max: 100,
14
+ /** 热力图渐变颜色数组 */
15
+ rangeColor: GradientColors
16
+ },
17
+ pointSymbol: "pin",
18
+ jsonBaseUrl: "/assets/json/map/jiangsu"
19
+ };
20
+
21
+ export { GradientColors, defaultOpts };
@@ -0,0 +1 @@
1
+ export declare function getJsonUrl(baseUrl: string, code: string | number): Promise<any>;
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ async function getJsonUrl(baseUrl, code) {
3
+ const res = await ibiz.net.axios({
4
+ url: `${baseUrl}/${code}.json`
5
+ });
6
+ return res.data;
7
+ }
8
+
9
+ export { getJsonUrl };
@@ -0,0 +1,20 @@
1
+ import { ComputedRef } from 'vue';
2
+ import { MapOptions } from './map-chart.util';
3
+ /**
4
+ * 使用echarts地图
5
+ * @author lxm
6
+ * @date 2023-04-06 12:00:07
7
+ * @export
8
+ * @param {(name: string) => IData} calcEchartsOpts 计算echarts的Options
9
+ * @param {(name: string, e: IData) => void} emit 事件回调
10
+ * @return {*}
11
+ */
12
+ export declare function useMapManager(opts: ComputedRef<MapOptions>, calcEchartsOpts: (name: string) => IData, emit: (name: string, e: IData) => void): {
13
+ chartRef: import("vue").Ref<any>;
14
+ historyNames: import("vue").Ref<string[]>;
15
+ currentName: import("vue").Ref<string>;
16
+ changeMap: (name: string, isInit?: boolean) => Promise<void>;
17
+ getCityName: (mapName: string | number) => any;
18
+ goBack: () => void;
19
+ refresh: () => void;
20
+ };
@@ -0,0 +1,121 @@
1
+ import { registerMap, init } from 'echarts';
2
+ import { ref, onMounted } from 'vue';
3
+ import { getJsonUrl } from './map-json.mjs';
4
+
5
+ "use strict";
6
+ function useMapManager(opts, calcEchartsOpts, emit) {
7
+ const mapInfos = /* @__PURE__ */ new Map();
8
+ const currentName = ref("");
9
+ const historyNames = ref([]);
10
+ let chart;
11
+ const chartRef = ref();
12
+ const parseJson = (json) => {
13
+ const info = {
14
+ cityNames: {},
15
+ noChild: json.features.length === 1
16
+ };
17
+ json.features.forEach((item) => {
18
+ const { adcode, name } = item.properties;
19
+ info.cityNames[adcode] = name;
20
+ });
21
+ return info;
22
+ };
23
+ const registerMap$1 = async (name) => {
24
+ if (mapInfos.has(name)) {
25
+ return;
26
+ }
27
+ const json = await getJsonUrl(opts.value.jsonBaseUrl, name);
28
+ mapInfos.set(name, parseJson(json));
29
+ registerMap(name, json);
30
+ };
31
+ const getCityName = (mapName) => {
32
+ const info = mapInfos.get(currentName.value);
33
+ if (info) {
34
+ return info.cityNames[mapName];
35
+ }
36
+ };
37
+ const refresh = () => {
38
+ if (currentName.value) {
39
+ const options = calcEchartsOpts(currentName.value);
40
+ chart.setOption(options);
41
+ chart.resize();
42
+ }
43
+ };
44
+ const changeMap = async (name, isInit = false) => {
45
+ if (!isInit) {
46
+ emit("mapChange", {
47
+ areaCode: opts.value.strMapCode ? `${name}` : Number(name)
48
+ });
49
+ }
50
+ if (!mapInfos.has(name)) {
51
+ await registerMap$1(name);
52
+ }
53
+ currentName.value = name;
54
+ historyNames.value.push(name);
55
+ refresh();
56
+ };
57
+ const goBack = () => {
58
+ if (historyNames.value.length > 1) {
59
+ historyNames.value.pop();
60
+ const name = historyNames.value.pop();
61
+ changeMap(name);
62
+ }
63
+ };
64
+ onMounted(() => {
65
+ chart = init(chartRef.value);
66
+ window.addEventListener("resize", () => {
67
+ chart == null ? void 0 : chart.resize();
68
+ });
69
+ chart.on("click", (params) => {
70
+ if (params.componentType === "series") {
71
+ if (params.seriesType === "scatter") {
72
+ emit("pointClick", params.data);
73
+ return;
74
+ }
75
+ if (params.seriesType === "map") {
76
+ if (params.data) {
77
+ emit("areaClick", params.data);
78
+ }
79
+ if (params.name !== currentName.value) {
80
+ debugger;
81
+ changeMap(params.name);
82
+ }
83
+ }
84
+ }
85
+ });
86
+ chart.on("mouseover", function(params) {
87
+ if (params.componentType === "series") {
88
+ if (params.seriesType === "scatter") {
89
+ const dataIndex = params.dataIndex;
90
+ const option = chart.getOption();
91
+ const seriesData = option.series[params.seriesIndex].data;
92
+ const originSize = option.series[params.seriesIndex].symbolSize;
93
+ seriesData[dataIndex].symbolSize = originSize + 10;
94
+ chart.setOption(option);
95
+ }
96
+ }
97
+ });
98
+ chart.on("mouseout", function(params) {
99
+ if (params.componentType === "series") {
100
+ if (params.seriesType === "scatter") {
101
+ const dataIndex = params.dataIndex;
102
+ const option = chart.getOption();
103
+ const seriesData = option.series[params.seriesIndex].data;
104
+ delete seriesData[dataIndex].symbolSize;
105
+ chart.setOption(option);
106
+ }
107
+ }
108
+ });
109
+ });
110
+ return {
111
+ chartRef,
112
+ historyNames,
113
+ currentName,
114
+ changeMap,
115
+ getCityName,
116
+ goBack,
117
+ refresh
118
+ };
119
+ }
120
+
121
+ export { useMapManager };
@@ -81,7 +81,7 @@ const IBizRawItem = /* @__PURE__ */ defineComponent({
81
81
  }
82
82
  }
83
83
  }
84
- if (["TEXT", "HEADING1", "HEADING2", "HEADING3", "HEADING4", "HEADING5", "HEADING6", "PARAGRAPH", "HTML"].includes(rawItemType.value)) {
84
+ if (["TEXT", "HEADING1", "HEADING2", "HEADING3", "HEADING4", "HEADING5", "HEADING6", "PARAGRAPH", "HTML", "RAW"].includes(rawItemType.value)) {
85
85
  rawItemText.value = rawItemContent.value;
86
86
  if (typeof rawItemText.value === "string") {
87
87
  rawItemText.value = rawItemText.value.replaceAll("&lt;", "<");
@@ -147,7 +147,7 @@ const IBizRawItem = /* @__PURE__ */ defineComponent({
147
147
  "icon": this.rawItemContent
148
148
  }, null);
149
149
  }
150
- if (this.rawItemType === "TEXT") {
150
+ if (this.rawItemType === "TEXT" || this.rawItemType === "RAW") {
151
151
  return createVNode("span", {
152
152
  "class": this.ns.e("text")
153
153
  }, [this.rawItemText]);
@@ -1 +1 @@
1
- .ibiz-form-mdctrl{--ibiz-form-mdctrl-gap:var(--ibiz-spacing-tight);--ibiz-form-mdctrl-btn-width:60px}.ibiz-form-mdctrl .ibiz-form-mdctrl-main .ibiz-form-mdctrl-form-content{display:flex;margin-top:var(--ibiz-spacing-tight)}.ibiz-form-mdctrl .ibiz-form-mdctrl-main .ibiz-form-mdctrl-form-content-container{width:100%}.ibiz-form-mdctrl .ibiz-form-mdctrl-main .ibiz-form-mdctrl-form-content-control{width:calc(100% - var(--ibiz-form-mdctrl-btn-width) - var(--ibiz-form-mdctrl-gap))}.ibiz-form-mdctrl .ibiz-form-mdctrl-main .ibiz-form-mdctrl-btn{width:var(--ibiz-form-mdctrl-btn-width);margin-left:var(--ibiz-form-mdctrl-gap);cursor:pointer;display:flex;flex-flow:column nowrap;align-items:center;justify-content:flex-start}.ibiz-form-mdctrl .ibiz-form-mdctrl-main .ibiz-form-mdctrl-title{display:flex;align-items:center;justify-content:space-between}.ibiz-form-mdctrl.is-no-caption .ibiz-form-mdctrl-main{position:relative}.ibiz-form-mdctrl.is-no-caption .ibiz-form-mdctrl-main>.ibiz-form-mdctrl-form-content:nth-child(2) .ibiz-form-mdctrl-btn{position:relative;top:40px;height:-moz-fit-content;height:fit-content}.ibiz-form-mdctrl.is-no-caption .ibiz-form-mdctrl-main .ibiz-form-mdctrl-title{position:absolute;top:0;right:0;z-index:2}
1
+ .ibiz-form-mdctrl{min-height:var(--ibiz-form-mdctrl-min-height);--ibiz-form-mdctrl-gap:var(--ibiz-spacing-tight);--ibiz-form-mdctrl-btn-width:60px;--ibiz-form-mdctrl-min-height:32px;--ibiz-form-mdctrl-content-min-height:72px}.ibiz-form-mdctrl .ibiz-form-mdctrl-main .ibiz-form-mdctrl-form-content{display:flex;min-height:var(--ibiz-form-mdctrl-content-min-height);margin-top:var(--ibiz-spacing-tight)}.ibiz-form-mdctrl .ibiz-form-mdctrl-main .ibiz-form-mdctrl-form-content-container{width:100%}.ibiz-form-mdctrl .ibiz-form-mdctrl-main .ibiz-form-mdctrl-form-content-control{width:calc(100% - var(--ibiz-form-mdctrl-btn-width) - var(--ibiz-form-mdctrl-gap))}.ibiz-form-mdctrl .ibiz-form-mdctrl-main .ibiz-form-mdctrl-btn{width:var(--ibiz-form-mdctrl-btn-width);margin-left:var(--ibiz-form-mdctrl-gap);cursor:pointer;display:flex;flex-flow:column nowrap;align-items:center;justify-content:flex-start}.ibiz-form-mdctrl .ibiz-form-mdctrl-main .ibiz-form-mdctrl-title{display:flex;align-items:center;justify-content:space-between}.ibiz-form-mdctrl.is-no-caption .ibiz-form-mdctrl-main{position:relative}.ibiz-form-mdctrl.is-no-caption .ibiz-form-mdctrl-main>.ibiz-form-mdctrl-form-content:nth-child(2) .ibiz-form-mdctrl-btn{position:relative;top:40px;height:-moz-fit-content;height:fit-content}.ibiz-form-mdctrl.is-no-caption .ibiz-form-mdctrl-main .ibiz-form-mdctrl-title{position:absolute;top:0;right:0;z-index:2}
@@ -16,7 +16,7 @@ export declare const FormMDCtrlContainer: import("vue").DefineComponent<{
16
16
  c: FormMDCtrlController;
17
17
  handleRemove: () => void;
18
18
  insertButtonClick: () => void;
19
- hasCaption: boolean;
19
+ hasCaption: boolean | undefined;
20
20
  }, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, "insertButtonClick"[], "insertButtonClick", import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{
21
21
  controller: {
22
22
  type: PropType<FormMDCtrlController>;