@robot-admin/naive-ui-components 0.24.1 → 0.24.3
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/CHANGELOG.md +21 -0
- package/README.md +6 -2
- package/README_EN.md +6 -2
- package/SECURITY.md +12 -2
- package/dist/C_AntV2.cjs +1 -1
- package/dist/C_AntV2.js +3 -3
- package/dist/C_Form.base.css +41 -143
- package/dist/C_Form.css +41 -143
- package/dist/C_FormModal.css +25 -12
- package/dist/C_FormModal2.cjs +1 -1
- package/dist/C_FormModal2.js +1 -1
- package/dist/C_Map2.cjs +1 -1
- package/dist/C_Map2.js +1 -1
- package/dist/C_Table.base.css +151 -253
- package/dist/C_Table.css +110 -110
- package/dist/C_Table2.cjs +2 -2
- package/dist/C_Table2.js +2 -2
- package/dist/C_Upload2.cjs +1 -1
- package/dist/C_Upload2.js +1 -1
- package/dist/C_VideoPlayer.css +30 -20
- package/dist/C_VideoPlayer2.cjs +2 -2
- package/dist/C_VideoPlayer2.js +3 -3
- package/dist/Steps.cjs +1 -1
- package/dist/Steps.js +1 -1
- package/dist/Tabs.cjs +1 -1
- package/dist/Tabs.js +1 -1
- package/dist/constants2.d.cts +4 -4
- package/dist/constants2.d.ts +4 -4
- package/dist/constants3.d.cts +3 -3
- package/dist/constants3.d.ts +3 -3
- package/dist/data2.cjs +1 -1
- package/dist/data2.d.cts +5 -5
- package/dist/data2.d.ts +5 -5
- package/dist/data2.js +1 -1
- package/dist/density.cjs +1 -1
- package/dist/density.js +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.js +1 -1
- package/dist/index.vue.d.cts +1 -1
- package/dist/index.vue.d.ts +1 -1
- package/dist/index10.vue.d.cts +2 -2
- package/dist/index10.vue.d.ts +5 -5
- package/dist/index11.vue.d.cts +5 -5
- package/dist/index13.vue.d.ts +2 -2
- package/dist/index14.vue.d.cts +2 -2
- package/dist/index15.vue.d.ts +8 -8
- package/dist/index16.vue.d.cts +8 -8
- package/dist/index17.vue.d.ts +2 -2
- package/dist/index18.vue.d.cts +2 -2
- package/dist/index18.vue.d.ts +2 -2
- package/dist/index19.vue.d.cts +2 -2
- package/dist/index19.vue.d.ts +3 -3
- package/dist/index20.vue.d.cts +3 -3
- package/dist/index22.vue.d.ts +1 -1
- package/dist/index23.vue.d.cts +1 -1
- package/dist/index23.vue.d.ts +2 -2
- package/dist/index26.vue.d.cts +4 -4
- package/dist/index26.vue.d.ts +4 -4
- package/dist/index28.vue.d.cts +3 -3
- package/dist/index28.vue.d.ts +3 -3
- package/dist/index3.vue.d.cts +4 -4
- package/dist/index3.vue.d.ts +4 -4
- package/dist/index5.vue.d.cts +2 -2
- package/dist/index9.vue.d.ts +2 -2
- package/dist/mapUtils.d.cts +2 -2
- package/dist/mapUtils.d.ts +2 -2
- package/dist/presets.d.cts +1 -1
- package/dist/presets.d.ts +1 -1
- package/dist/serializeSearch.cjs +1 -1
- package/dist/serializeSearch.js +1 -1
- package/dist/style.css +206 -285
- package/dist/useCalendarEvents.d.cts +1 -1
- package/dist/useCalendarEvents.d.ts +1 -1
- package/dist/useCollapsePanel.d.cts +3 -3
- package/dist/useCollapsePanel.d.ts +3 -3
- package/dist/useCropperCore.d.cts +3 -3
- package/dist/useCropperCore.d.ts +3 -3
- package/dist/useDictionary.cjs +1 -1
- package/dist/useDictionary.js +1 -1
- package/dist/useDynamicFormState.d.cts +4 -4
- package/dist/useDynamicFormState.d.ts +4 -4
- package/dist/useEdgeInteraction.d.cts +2 -2
- package/dist/useEdgeInteraction.d.ts +2 -2
- package/dist/useFullscreen.d.cts +2 -2
- package/dist/useFullscreen.d.ts +2 -2
- package/dist/useGlobalSearch.d.cts +1 -1
- package/dist/useGlobalSearch.d.ts +1 -1
- package/dist/useInfiniteScroll.d.cts +2 -2
- package/dist/useInfiniteScroll.d.ts +2 -2
- package/dist/useQRCode.d.cts +5 -5
- package/dist/useQRCode.d.ts +5 -5
- package/dist/useSignatureHistory.d.cts +4 -4
- package/dist/useSignatureHistory.d.ts +4 -4
- package/dist/useSplitResize.d.cts +3 -3
- package/dist/useSplitResize.d.ts +3 -3
- package/dist/useWorkflowValidation.d.cts +3 -3
- package/dist/useWorkflowValidation.d.ts +3 -3
- package/dist/verification.d.cts +2 -2
- package/dist/verification.d.ts +2 -2
- package/docs/engineering.en.md +1 -1
- package/docs/engineering.md +1 -1
- package/docs/guides/form-density.md +11 -5
- package/docs/stability-review-20261031.md +46 -0
- package/package.json +4 -2
package/dist/C_FormModal.css
CHANGED
|
@@ -6,41 +6,54 @@
|
|
|
6
6
|
* @Description: 紧凑型数据驱动表单弹窗样式
|
|
7
7
|
* Copyright (c) 2026 by CHENY, All Rights Reserved 😎.
|
|
8
8
|
*/
|
|
9
|
-
.c-form-modal[data-v-
|
|
9
|
+
.c-form-modal[data-v-66511257] {
|
|
10
10
|
overflow: hidden;
|
|
11
11
|
border-radius: 10px;
|
|
12
12
|
}
|
|
13
|
-
.c-form-modal[data-v-
|
|
13
|
+
.c-form-modal[data-v-66511257] .n-card-header {
|
|
14
14
|
min-height: 46px;
|
|
15
15
|
padding: 12px 16px;
|
|
16
16
|
border-bottom: 1px solid var(--n-border-color);
|
|
17
17
|
}
|
|
18
|
-
.c-form-modal[data-v-
|
|
18
|
+
.c-form-modal[data-v-66511257] .n-card-header__main {
|
|
19
19
|
font-size: 15px;
|
|
20
20
|
font-weight: 650;
|
|
21
21
|
}
|
|
22
|
-
.c-form-modal[data-v-
|
|
22
|
+
.c-form-modal[data-v-66511257] :is(.n-card-content, .n-card__content) {
|
|
23
23
|
padding: 14px 16px 8px;
|
|
24
24
|
}
|
|
25
|
-
.c-form-modal[data-v-
|
|
25
|
+
.c-form-modal[data-v-66511257] .n-form-item {
|
|
26
|
+
margin-bottom: 2px;
|
|
27
|
+
}
|
|
28
|
+
.c-form-modal[data-v-66511257] .n-card__action {
|
|
26
29
|
display: flex;
|
|
27
30
|
justify-content: flex-end;
|
|
28
31
|
padding: 10px 16px;
|
|
29
32
|
background: color-mix(in srgb, var(--n-color-modal) 94%, var(--n-border-color));
|
|
30
33
|
border-top: 1px solid var(--n-border-color);
|
|
31
34
|
}
|
|
32
|
-
.c-form-modal[data-v-67de2c49] .n-form-item {
|
|
33
|
-
margin-bottom: 2px;
|
|
34
|
-
}
|
|
35
35
|
@media (max-width: 640px) {
|
|
36
|
-
.c-form-modal[data-v-
|
|
36
|
+
.c-form-modal[data-v-66511257] :is(.n-card-content, .n-card__content) {
|
|
37
37
|
padding-inline: 12px;
|
|
38
38
|
}
|
|
39
|
-
.c-form-modal[data-v-
|
|
39
|
+
.c-form-modal[data-v-66511257] .n-card__action {
|
|
40
40
|
padding-inline: 12px;
|
|
41
41
|
}
|
|
42
42
|
}
|
|
43
|
+
.c-form-modal--compact[data-v-66511257] .n-form-item {
|
|
44
|
+
margin-bottom: 0;
|
|
45
|
+
}
|
|
46
|
+
.c-form-modal--compact[data-v-66511257] .n-card-header {
|
|
47
|
+
min-height: 40px;
|
|
48
|
+
padding: 8px 12px;
|
|
49
|
+
}
|
|
50
|
+
.c-form-modal--compact[data-v-66511257] :is(.n-card-content, .n-card__content) {
|
|
51
|
+
padding: 10px 12px 8px;
|
|
52
|
+
}
|
|
53
|
+
.c-form-modal--compact[data-v-66511257] .n-card__action {
|
|
54
|
+
padding: 8px 12px;
|
|
55
|
+
}
|
|
43
56
|
|
|
44
57
|
/* layer: default */
|
|
45
|
-
.visible[data-v-
|
|
46
|
-
.px[data-v-
|
|
58
|
+
.visible[data-v-66511257]{visibility:visible;}
|
|
59
|
+
.px[data-v-66511257]{padding-left:1rem;padding-right:1rem;}
|
package/dist/C_FormModal2.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
require(`./chunk.cjs`);const e=require(`./density.cjs`),t=require(`./export-helper.cjs`),n=require(`./C_ActionBar2.cjs`),r=require(`./useFormConfig.cjs`),i=require(`./helpers.cjs`);let a=require(`vue`),o=require(`naive-ui`);const s=(0,a.defineComponent)({name:`C_FormModal`,__name:`index`,props:{editor:{},options:{},config:{default:()=>({})},width:{default:`min(620px, calc(100vw - 24px))`},createText:{default:`创建`},saveText:{default:`保存`},cancelText:{default:`取消`},closable:{type:Boolean,default:!0},maskClosable:{type:Boolean,default:!0},closeOnEsc:{type:Boolean,default:!0}},emits:[`submit`,`close`],setup(t,{emit:s}){let c=t,l=s,u=(0,a.ref)(null),d=r.o(),f=(0,a.computed)(()=>c.config?.density??d.density??`compact`),p=(0,a.computed)({get:()=>c.editor.visible.value,set:e=>{e||y()}}),m=(0,a.computed)(()=>c.editor.title.value),h=(0,a.computed)(()=>c.editor.loading.value),g=(0,a.computed)(()=>typeof c.width==`number`?`${c.width}px`:c.width),_=(0,a.computed)({get:()=>c.editor.model.value??{},set:e=>{c.editor.setModel(e)}}),v=(0,a.computed)(()=>({...c.config,density:f.value,mode:c.editor.mode.value,
|
|
1
|
+
require(`./chunk.cjs`);const e=require(`./density.cjs`),t=require(`./export-helper.cjs`),n=require(`./C_ActionBar2.cjs`),r=require(`./useFormConfig.cjs`),i=require(`./helpers.cjs`);let a=require(`vue`),o=require(`naive-ui`);const s=(0,a.defineComponent)({name:`C_FormModal`,__name:`index`,props:{editor:{},options:{},config:{default:()=>({})},width:{default:`min(620px, calc(100vw - 24px))`},createText:{default:`创建`},saveText:{default:`保存`},cancelText:{default:`取消`},closable:{type:Boolean,default:!0},maskClosable:{type:Boolean,default:!0},closeOnEsc:{type:Boolean,default:!0}},emits:[`submit`,`close`],setup(t,{emit:s}){let c=t,l=s,u=(0,a.ref)(null),d=r.o(),f=(0,a.computed)(()=>c.config?.density??d.density??`compact`),p=(0,a.computed)({get:()=>c.editor.visible.value,set:e=>{e||y()}}),m=(0,a.computed)(()=>c.editor.title.value),h=(0,a.computed)(()=>c.editor.loading.value),g=(0,a.computed)(()=>typeof c.width==`number`?`${c.width}px`:c.width),_=(0,a.computed)({get:()=>c.editor.model.value??{},set:e=>{c.editor.setModel(e)}}),v=(0,a.computed)(()=>({...c.config,density:f.value,mode:c.editor.mode.value,showActions:!1,onSubmit:async(e,t)=>{if(await c.config?.onSubmit?.(e,t),t?.signal.aborted)return;let n=await c.editor.submit(e.model);t?.signal.aborted||l(`submit`,e,n)}})),y=()=>{c.editor.close(),l(`close`)},b=(0,a.computed)(()=>{let t=r.r(v.value,d),n=e.t(f.value);return{align:`right`,size:t.size??(f.value===`compact`?`tiny`:n.size),gap:n.gap,compact:f.value===`compact`}}),x=(0,a.computed)(()=>n.a([{key:`cancel`,label:c.cancelText,disabled:h,onClick:y},{key:c.editor.mode.value===`create`?`create`:`save`,label:c.editor.mode.value===`create`?c.createText:c.saveText,loading:h,onClick:async()=>{await u.value?.submit()}}]));return(e,r)=>((0,a.openBlock)(),(0,a.createBlock)((0,a.unref)(o.NModal),{show:p.value,"onUpdate:show":r[1]||=e=>p.value=e,preset:`card`,title:m.value,style:(0,a.normalizeStyle)({width:g.value,maxHeight:`calc(100dvh - 32px)`}),"content-style":`min-height: 0; overflow: auto`,"mask-closable":t.maskClosable,"close-on-esc":t.closeOnEsc,closable:t.closable,class:(0,a.normalizeClass)([`c-form-modal`,`c-form-modal--${f.value}`])},{action:(0,a.withCtx)(()=>[(0,a.createVNode)(n.t,{actions:x.value,config:b.value},null,8,[`actions`,`config`])]),default:(0,a.withCtx)(()=>[p.value&&t.editor.model.value?((0,a.openBlock)(),(0,a.createBlock)((0,a.unref)(i.i),{key:0,ref_key:`formRef`,ref:u,modelValue:_.value,"onUpdate:modelValue":r[0]||=e=>_.value=e,options:t.options,config:v.value},(0,a.createSlots)({_:2},[(0,a.renderList)(e.$slots,(t,n)=>({name:n,fn:(0,a.withCtx)(t=>[(0,a.renderSlot)(e.$slots,n,(0,a.normalizeProps)((0,a.guardReactiveProps)(t)),void 0,!0)])}))]),1032,[`modelValue`,`options`,`config`])):(0,a.createCommentVNode)(`v-if`,!0)]),_:3},8,[`show`,`title`,`style`,`mask-closable`,`close-on-esc`,`closable`,`class`]))}});var c=t.t(s,[[`__scopeId`,`data-v-66511257`]]);Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return c}});
|
package/dist/C_FormModal2.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{t as e}from"./density.js";import{t}from"./export-helper.js";import{a as n,t as r}from"./C_ActionBar2.js";import{o as i,r as a}from"./useFormConfig.js";import{i as o}from"./helpers.js";import{computed as s,createBlock as c,createCommentVNode as l,createSlots as u,createVNode as d,defineComponent as f,guardReactiveProps as p,
|
|
1
|
+
import{t as e}from"./density.js";import{t}from"./export-helper.js";import{a as n,t as r}from"./C_ActionBar2.js";import{o as i,r as a}from"./useFormConfig.js";import{i as o}from"./helpers.js";import{computed as s,createBlock as c,createCommentVNode as l,createSlots as u,createVNode as d,defineComponent as f,guardReactiveProps as p,normalizeClass as m,normalizeProps as h,normalizeStyle as g,openBlock as _,ref as v,renderList as y,renderSlot as b,unref as x,withCtx as S}from"vue";import{NModal as C}from"naive-ui";var w=t(f({name:`C_FormModal`,__name:`index`,props:{editor:{},options:{},config:{default:()=>({})},width:{default:`min(620px, calc(100vw - 24px))`},createText:{default:`创建`},saveText:{default:`保存`},cancelText:{default:`取消`},closable:{type:Boolean,default:!0},maskClosable:{type:Boolean,default:!0},closeOnEsc:{type:Boolean,default:!0}},emits:[`submit`,`close`],setup(t,{emit:f}){let w=t,T=f,E=v(null),D=i(),O=s(()=>w.config?.density??D.density??`compact`),k=s({get:()=>w.editor.visible.value,set:e=>{e||F()}}),A=s(()=>w.editor.title.value),j=s(()=>w.editor.loading.value),M=s(()=>typeof w.width==`number`?`${w.width}px`:w.width),N=s({get:()=>w.editor.model.value??{},set:e=>{w.editor.setModel(e)}}),P=s(()=>({...w.config,density:O.value,mode:w.editor.mode.value,showActions:!1,onSubmit:async(e,t)=>{if(await w.config?.onSubmit?.(e,t),t?.signal.aborted)return;let n=await w.editor.submit(e.model);t?.signal.aborted||T(`submit`,e,n)}})),F=()=>{w.editor.close(),T(`close`)},I=s(()=>{let t=a(P.value,D),n=e(O.value);return{align:`right`,size:t.size??(O.value===`compact`?`tiny`:n.size),gap:n.gap,compact:O.value===`compact`}}),L=s(()=>n([{key:`cancel`,label:w.cancelText,disabled:j,onClick:F},{key:w.editor.mode.value===`create`?`create`:`save`,label:w.editor.mode.value===`create`?w.createText:w.saveText,loading:j,onClick:async()=>{await E.value?.submit()}}]));return(e,n)=>(_(),c(x(C),{show:k.value,"onUpdate:show":n[1]||=e=>k.value=e,preset:`card`,title:A.value,style:g({width:M.value,maxHeight:`calc(100dvh - 32px)`}),"content-style":`min-height: 0; overflow: auto`,"mask-closable":t.maskClosable,"close-on-esc":t.closeOnEsc,closable:t.closable,class:m([`c-form-modal`,`c-form-modal--${O.value}`])},{action:S(()=>[d(r,{actions:L.value,config:I.value},null,8,[`actions`,`config`])]),default:S(()=>[k.value&&t.editor.model.value?(_(),c(x(o),{key:0,ref_key:`formRef`,ref:E,modelValue:N.value,"onUpdate:modelValue":n[0]||=e=>N.value=e,options:t.options,config:P.value},u({_:2},[y(e.$slots,(t,n)=>({name:n,fn:S(t=>[b(e.$slots,n,h(p(t)),void 0,!0)])}))]),1032,[`modelValue`,`options`,`config`])):l(`v-if`,!0)]),_:3},8,[`show`,`title`,`style`,`mask-closable`,`close-on-esc`,`closable`,`class`]))}}),[[`__scopeId`,`data-v-66511257`]]);export{w as t};
|
package/dist/C_Map2.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
require(`./chunk.cjs`);const e=require(`./export-helper.cjs`);let t=require(`vue`),n=require(`naive-ui`);const r=[{label:`OpenStreetMap`,value:`osm`},{label:`高德地图`,value:`amap`}],i={height:`400px`,center:[39.9042,116.4074],zoom:10,mapType:`osm`},a={url:`https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png`,attribution:`© OpenStreetMap contributors`,maxZoom:19,minZoom:1,tileSize:256,detectRetina:!0},o={apiUrl:`https://webapi.amap.com/maps?v=2.0&key=`,note:`高德地图需要API Key,如需使用请申请:https://lbs.amap.com/api/javascript-api/guide/create/`},s=15e3;let c=null,l=null;function u(e){if(!e)return;let t=e.serviceHost?.trim(),n=e.securityJsCode?.trim();if(t&&n)throw Error(`高德地图安全配置只能选择 serviceHost 或 securityJsCode`);if(t){if(!t.endsWith(`/_AMapService`))throw Error(`高德地图 serviceHost 必须以 /_AMapService 结尾`);return{serviceHost:t}}if(n)return{securityJsCode:n};throw Error(`高德地图安全配置不能为空`)}const d=e=>{if(e)return e;if(typeof window>`u`||typeof document>`u`)throw Error(`高德地图 API 只能在浏览器环境加载`);return{clearTimeout:window.clearTimeout.bind(window),document,host:window,setTimeout:window.setTimeout.bind(window)}},f=(e,t,n)=>{let r=e.trim();if(!r)throw Error(`高德地图 API Key 不能为空`);let i=u(t);return{identity:JSON.stringify([r,i]),normalizedKey:r,normalizedSecurityConfig:i,platform:d(n)}};function p(e,t=s,n,r){let i;try{i=f(e,n,r)}catch(e){return Promise.reject(e)}let{identity:a,normalizedKey:u,normalizedSecurityConfig:d}=i,{clearTimeout:p,document:m,host:h,setTimeout:g}=i.platform;
|
|
1
|
+
require(`./chunk.cjs`);const e=require(`./export-helper.cjs`);let t=require(`vue`),n=require(`naive-ui`);const r=[{label:`OpenStreetMap`,value:`osm`},{label:`高德地图`,value:`amap`}],i={height:`400px`,center:[39.9042,116.4074],zoom:10,mapType:`osm`},a={url:`https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png`,attribution:`© OpenStreetMap contributors`,maxZoom:19,minZoom:1,tileSize:256,detectRetina:!0},o={apiUrl:`https://webapi.amap.com/maps?v=2.0&key=`,note:`高德地图需要API Key,如需使用请申请:https://lbs.amap.com/api/javascript-api/guide/create/`},s=15e3;let c=null,l=null;function u(e){if(!e)return;let t=e.serviceHost?.trim(),n=e.securityJsCode?.trim();if(t&&n)throw Error(`高德地图安全配置只能选择 serviceHost 或 securityJsCode`);if(t){if(!t.endsWith(`/_AMapService`))throw Error(`高德地图 serviceHost 必须以 /_AMapService 结尾`);return{serviceHost:t}}if(n)return{securityJsCode:n};throw Error(`高德地图安全配置不能为空`)}const d=e=>{if(e)return e;if(typeof window>`u`||typeof document>`u`)throw Error(`高德地图 API 只能在浏览器环境加载`);return{clearTimeout:window.clearTimeout.bind(window),document,host:window,setTimeout:window.setTimeout.bind(window)}},f=(e,t,n)=>{let r=e.trim();if(!r)throw Error(`高德地图 API Key 不能为空`);let i=u(t);return{identity:JSON.stringify([r,i]),normalizedKey:r,normalizedSecurityConfig:i,platform:d(n)}};function p(e,t=s,n,r){let i;try{i=f(e,n,r)}catch(e){return Promise.reject(e)}let{identity:a,normalizedKey:u,normalizedSecurityConfig:d}=i,{clearTimeout:p,document:m,host:h,setTimeout:g}=i.platform;if(l&&l!==a)return Promise.reject(Error(`同一页面不能使用不同的高德地图 Key 或安全配置`));if(h.AMap)return Promise.resolve(h.AMap);if(c)return c;l=a;let _=h._AMapSecurityConfig,v=d?{...d}:void 0;return v&&(h._AMapSecurityConfig=v),c=new Promise((e,n)=>{let r=m.querySelector(`script[data-c-map-amap="true"]`),i=r||m.createElement(`script`),a=!1,d=Number.isFinite(t)&&t>0?t:s,f=()=>{p(S),i.removeEventListener(`load`,b),i.removeEventListener(`error`,x)},y=e=>{a||(a=!0,f(),i.remove(),c=null,l=null,v&&h._AMapSecurityConfig===v&&(_===void 0?delete h._AMapSecurityConfig:h._AMapSecurityConfig=_),n(e))},b=()=>{if(!a){if(!h.AMap){y(Error(`高德地图 API 加载完成但未找到全局对象`));return}a=!0,f(),e(h.AMap)}},x=()=>y(Error(`高德地图 API 加载失败`)),S=g(()=>y(Error(`高德地图 API 加载超时(${d}ms)`)),d);i.addEventListener(`load`,b,{once:!0}),i.addEventListener(`error`,x,{once:!0}),!r&&(i.async=!0,i.dataset.cMapAmap=`true`,i.src=`${o.apiUrl}${encodeURIComponent(u)}`,m.head.appendChild(i))}),c}const m=e=>{if(!e||typeof e!=`object`)return!1;let t=e;return typeof t.map==`function`&&typeof t.marker==`function`&&typeof t.tileLayer==`function`},h=e=>{if(m(e))return e;let t=e&&typeof e==`object`?e.default:void 0;if(m(t))return t;throw Error(`Leaflet 模块加载失败:未找到 map、marker 和 tileLayer API`)},g=async()=>h(await import(`leaflet`));function _(e){if(!e||e.length!==2)return!1;let[t,n]=e;return Number.isFinite(t)&&Number.isFinite(n)&&t>=-90&&t<=90&&n>=-180&&n<=180}function v(e){return[e[1],e[0]]}function y(e){return e.filter(e=>_([e.lat,e.lng]))}function b(e,t=a.minZoom,n=a.maxZoom){return Number.isFinite(e)?Math.min(Math.max(e,t),n):i.zoom}function x(e={}){let{url:t,...n}={...a,...e};return{url:t,options:n}}const S=[`aria-label`,`aria-busy`],C={key:0,class:`map-loading`,role:`status`,"aria-live":`polite`,"aria-label":`地图加载中`},w=(0,t.defineComponent)({name:`C_Map`,__name:`index`,props:{ariaLabel:{default:`地图`},height:{default:i.height},center:{default:()=>[...i.center]},zoom:{default:i.zoom},markers:{default:()=>[]},mapType:{default:i.mapType},amapKey:{default:``},amapSecurityConfig:{},amapLoadTimeout:{default:15e3},amapOptions:{default:()=>({})},tileConfig:{default:()=>({})},zoomControl:{type:Boolean,default:!0},preferCanvas:{type:Boolean,default:!0},fitMarkersOnInit:{type:Boolean,default:!1}},emits:[`ready`,`markerClick`,`error`],setup(e,{expose:r,emit:i}){let a=e,o=i,s=(0,t.ref)(),c=(0,t.ref)(!0),l=null,u=null,d=[],f=null,m=null,h=[],w=[],T=0,E=!1,D=e=>e instanceof Error?e:Error(String(e)),O=()=>{d.forEach(e=>e.remove()),d=[]},k=()=>{w.forEach(e=>e.close?.()),w=[],h.forEach(e=>e.setMap?.(null)),h=[]},A=()=>{O(),k();let e=u;if(u=null,e){let t=e;t._animatingZoom=!1}e?.stop(),e?.remove(),m?.destroy(),m=null,s.value?.replaceChildren()},j=()=>{let e=++T;return A(),c.value=!0,e},M=e=>!E&&e===T,N=()=>{if(_(a.center))return a.center;throw Error(`地图中心坐标无效,应使用 [纬度, 经度] 且处于合法范围`)},P=(e,t)=>{M(e)&&(A(),c.value=!1,o(`error`,D(t)))},F=()=>{let e=l,t=u;if(!t||!e||a.mapType!==`osm`)return;O();let n=e.icon({iconUrl:`data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2228%22%20height%3D%2240%22%20viewBox%3D%220%200%2028%2040%22%3E%3Cpath%20d%3D%22M14%2039S1%2024%201%2014a13%2013%200%200%201%2026%200c0%2010-13%2025-13%2025Z%22%20fill%3D%22%23287be8%22%20stroke%3D%22white%22%20stroke-width%3D%222%22%2F%3E%3Ccircle%20cx%3D%2214%22%20cy%3D%2214%22%20r%3D%225%22%20fill%3D%22white%22%2F%3E%3C%2Fsvg%3E`,iconSize:[28,40],iconAnchor:[14,40],popupAnchor:[0,-35]});y(a.markers).forEach(r=>{let i=e.marker([r.lat,r.lng],{icon:n,title:r.title||r.popup||``});if(r.popup){let e=document.createElement(`span`);e.textContent=r.popup,i.bindPopup(e)}i.on(`click`,e=>{o(`markerClick`,r,e)}),i.addTo(t),d.push(i)})},I=()=>{let e=f,t=m;!t||!e||a.mapType!==`amap`||(k(),y(a.markers).forEach(n=>{let r=new e.Marker({position:v([n.lat,n.lng]),title:n.title||n.popup||``});if(n.popup){let i=document.createElement(`span`);i.textContent=n.popup;let a=new e.InfoWindow({content:i,offset:new e.Pixel(0,-30)});w.push(a),r.on(`click`,e=>{a.open(t,r.getPosition()),o(`markerClick`,n,e)})}else r.on(`click`,e=>o(`markerClick`,n,e));r.setMap(t),h.push(r)}))},L=()=>u||m,R=()=>{u?.invalidateSize({pan:!1}),m?.resize?.()},z=(e={})=>{let t=y(a.markers);if(t.length===0)return!1;if(u){let n=t.map(e=>[e.lat,e.lng]);return u.fitBounds(n,{maxZoom:e.maxZoom,padding:e.padding}),!0}if(m&&h.length>0){let[t=0,n=0]=e.padding||[];return m.setFitView?.(h,!1,[n,t,n,t],e.maxZoom),!0}return!1},B=async()=>{if(!s.value)return;let e=j();try{let n=await g();if(!M(e)||!s.value)return;l=n;let{url:r,options:i}=x(a.tileConfig),d=b(a.zoom,i.minZoom,i.maxZoom);if(u=n.map(s.value,{center:N(),zoom:d,zoomControl:a.zoomControl,preferCanvas:a.preferCanvas}),n.tileLayer(r,i).addTo(u),F(),a.fitMarkersOnInit&&z(),await(0,t.nextTick)(),requestAnimationFrame(()=>{M(e)&&R()}),!M(e)||!u)return;c.value=!1,o(`ready`,u)}catch(t){P(e,t)}},V=async()=>{if(!s.value)return;let e=j();try{let t=await p(a.amapKey,a.amapLoadTimeout,a.amapSecurityConfig);if(!M(e)||!s.value)return;f=t,m=new t.Map(s.value,{...a.amapOptions,zoom:b(a.zoom,1,20),center:v(N())}),I(),a.fitMarkersOnInit&&z(),c.value=!1,o(`ready`,m)}catch(t){P(e,t)}},H=async()=>{a.mapType===`amap`?await V():await B()};return(0,t.watch)(()=>a.markers,()=>{a.mapType===`osm`?F():I()},{deep:!0}),(0,t.watch)([()=>a.mapType,()=>a.amapKey,()=>a.amapSecurityConfig,()=>a.amapLoadTimeout,()=>a.amapOptions,()=>a.tileConfig,()=>a.zoomControl,()=>a.preferCanvas],()=>void H(),{deep:!0}),(0,t.watch)([()=>a.center,()=>a.zoom],()=>{if(!_(a.center)){o(`error`,Error(`地图中心坐标无效,应使用 [纬度, 经度]`));return}u?.setView(a.center,b(a.zoom)),m?.setCenter(v(a.center)),m?.setZoom(b(a.zoom,1,20))},{deep:!0}),(0,t.onMounted)(async()=>{await(0,t.nextTick)(),await H()}),(0,t.onUnmounted)(()=>{E=!0,T+=1,A()}),r({fitToMarkers:z,getMap:L,refresh:R}),(r,i)=>((0,t.openBlock)(),(0,t.createElementBlock)(`div`,{class:`c-map`,role:`region`,"aria-label":e.ariaLabel,"aria-busy":c.value},[(0,t.createElementVNode)(`div`,{ref_key:`mapContainer`,ref:s,class:`map-container`,style:(0,t.normalizeStyle)({height:e.height})},null,4),c.value?((0,t.openBlock)(),(0,t.createElementBlock)(`div`,C,[(0,t.createVNode)((0,t.unref)(n.NSpin),{size:`large`})])):(0,t.createCommentVNode)(`v-if`,!0)],8,S))}});var T=e.t(w,[[`__scopeId`,`data-v-7db70bf0`]]);Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return x}}),Object.defineProperty(exports,`c`,{enumerable:!0,get:function(){return r}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return b}}),Object.defineProperty(exports,`l`,{enumerable:!0,get:function(){return a}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return y}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return v}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return _}}),Object.defineProperty(exports,`s`,{enumerable:!0,get:function(){return i}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return T}});
|
package/dist/C_Map2.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{t as e}from"./export-helper.js";import{createCommentVNode as t,createElementBlock as n,createElementVNode as r,createVNode as i,defineComponent as a,nextTick as o,normalizeStyle as s,onMounted as c,onUnmounted as l,openBlock as u,ref as d,unref as f,watch as p}from"vue";import{NSpin as m}from"naive-ui";const h=[{label:`OpenStreetMap`,value:`osm`},{label:`高德地图`,value:`amap`}],g={height:`400px`,center:[39.9042,116.4074],zoom:10,mapType:`osm`},_={url:`https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png`,attribution:`© OpenStreetMap contributors`,maxZoom:19,minZoom:1,tileSize:256,detectRetina:!0},v={apiUrl:`https://webapi.amap.com/maps?v=2.0&key=`,note:`高德地图需要API Key,如需使用请申请:https://lbs.amap.com/api/javascript-api/guide/create/`},y=15e3;let b=null,x=null;function S(e){if(!e)return;let t=e.serviceHost?.trim(),n=e.securityJsCode?.trim();if(t&&n)throw Error(`高德地图安全配置只能选择 serviceHost 或 securityJsCode`);if(t){if(!t.endsWith(`/_AMapService`))throw Error(`高德地图 serviceHost 必须以 /_AMapService 结尾`);return{serviceHost:t}}if(n)return{securityJsCode:n};throw Error(`高德地图安全配置不能为空`)}const C=e=>{if(e)return e;if(typeof window>`u`||typeof document>`u`)throw Error(`高德地图 API 只能在浏览器环境加载`);return{clearTimeout:window.clearTimeout.bind(window),document,host:window,setTimeout:window.setTimeout.bind(window)}},w=(e,t,n)=>{let r=e.trim();if(!r)throw Error(`高德地图 API Key 不能为空`);let i=S(t);return{identity:JSON.stringify([r,i]),normalizedKey:r,normalizedSecurityConfig:i,platform:C(n)}};function T(e,t=y,n,r){let i;try{i=w(e,n,r)}catch(e){return Promise.reject(e)}let{identity:a,normalizedKey:o,normalizedSecurityConfig:s}=i,{clearTimeout:c,document:l,host:u,setTimeout:d}=i.platform;
|
|
1
|
+
import{t as e}from"./export-helper.js";import{createCommentVNode as t,createElementBlock as n,createElementVNode as r,createVNode as i,defineComponent as a,nextTick as o,normalizeStyle as s,onMounted as c,onUnmounted as l,openBlock as u,ref as d,unref as f,watch as p}from"vue";import{NSpin as m}from"naive-ui";const h=[{label:`OpenStreetMap`,value:`osm`},{label:`高德地图`,value:`amap`}],g={height:`400px`,center:[39.9042,116.4074],zoom:10,mapType:`osm`},_={url:`https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png`,attribution:`© OpenStreetMap contributors`,maxZoom:19,minZoom:1,tileSize:256,detectRetina:!0},v={apiUrl:`https://webapi.amap.com/maps?v=2.0&key=`,note:`高德地图需要API Key,如需使用请申请:https://lbs.amap.com/api/javascript-api/guide/create/`},y=15e3;let b=null,x=null;function S(e){if(!e)return;let t=e.serviceHost?.trim(),n=e.securityJsCode?.trim();if(t&&n)throw Error(`高德地图安全配置只能选择 serviceHost 或 securityJsCode`);if(t){if(!t.endsWith(`/_AMapService`))throw Error(`高德地图 serviceHost 必须以 /_AMapService 结尾`);return{serviceHost:t}}if(n)return{securityJsCode:n};throw Error(`高德地图安全配置不能为空`)}const C=e=>{if(e)return e;if(typeof window>`u`||typeof document>`u`)throw Error(`高德地图 API 只能在浏览器环境加载`);return{clearTimeout:window.clearTimeout.bind(window),document,host:window,setTimeout:window.setTimeout.bind(window)}},w=(e,t,n)=>{let r=e.trim();if(!r)throw Error(`高德地图 API Key 不能为空`);let i=S(t);return{identity:JSON.stringify([r,i]),normalizedKey:r,normalizedSecurityConfig:i,platform:C(n)}};function T(e,t=y,n,r){let i;try{i=w(e,n,r)}catch(e){return Promise.reject(e)}let{identity:a,normalizedKey:o,normalizedSecurityConfig:s}=i,{clearTimeout:c,document:l,host:u,setTimeout:d}=i.platform;if(x&&x!==a)return Promise.reject(Error(`同一页面不能使用不同的高德地图 Key 或安全配置`));if(u.AMap)return Promise.resolve(u.AMap);if(b)return b;x=a;let f=u._AMapSecurityConfig,p=s?{...s}:void 0;return p&&(u._AMapSecurityConfig=p),b=new Promise((e,n)=>{let r=l.querySelector(`script[data-c-map-amap="true"]`),i=r||l.createElement(`script`),a=!1,s=Number.isFinite(t)&&t>0?t:y,m=()=>{c(S),i.removeEventListener(`load`,g),i.removeEventListener(`error`,_)},h=e=>{a||(a=!0,m(),i.remove(),b=null,x=null,p&&u._AMapSecurityConfig===p&&(f===void 0?delete u._AMapSecurityConfig:u._AMapSecurityConfig=f),n(e))},g=()=>{if(!a){if(!u.AMap){h(Error(`高德地图 API 加载完成但未找到全局对象`));return}a=!0,m(),e(u.AMap)}},_=()=>h(Error(`高德地图 API 加载失败`)),S=d(()=>h(Error(`高德地图 API 加载超时(${s}ms)`)),s);i.addEventListener(`load`,g,{once:!0}),i.addEventListener(`error`,_,{once:!0}),!r&&(i.async=!0,i.dataset.cMapAmap=`true`,i.src=`${v.apiUrl}${encodeURIComponent(o)}`,l.head.appendChild(i))}),b}const E=e=>{if(!e||typeof e!=`object`)return!1;let t=e;return typeof t.map==`function`&&typeof t.marker==`function`&&typeof t.tileLayer==`function`},D=e=>{if(E(e))return e;let t=e&&typeof e==`object`?e.default:void 0;if(E(t))return t;throw Error(`Leaflet 模块加载失败:未找到 map、marker 和 tileLayer API`)},O=async()=>D(await import(`leaflet`));function k(e){if(!e||e.length!==2)return!1;let[t,n]=e;return Number.isFinite(t)&&Number.isFinite(n)&&t>=-90&&t<=90&&n>=-180&&n<=180}function A(e){return[e[1],e[0]]}function j(e){return e.filter(e=>k([e.lat,e.lng]))}function M(e,t=_.minZoom,n=_.maxZoom){return Number.isFinite(e)?Math.min(Math.max(e,t),n):g.zoom}function N(e={}){let{url:t,...n}={..._,...e};return{url:t,options:n}}const P=[`aria-label`,`aria-busy`],F={key:0,class:`map-loading`,role:`status`,"aria-live":`polite`,"aria-label":`地图加载中`};var I=e(a({name:`C_Map`,__name:`index`,props:{ariaLabel:{default:`地图`},height:{default:g.height},center:{default:()=>[...g.center]},zoom:{default:g.zoom},markers:{default:()=>[]},mapType:{default:g.mapType},amapKey:{default:``},amapSecurityConfig:{},amapLoadTimeout:{default:15e3},amapOptions:{default:()=>({})},tileConfig:{default:()=>({})},zoomControl:{type:Boolean,default:!0},preferCanvas:{type:Boolean,default:!0},fitMarkersOnInit:{type:Boolean,default:!1}},emits:[`ready`,`markerClick`,`error`],setup(e,{expose:a,emit:h}){let g=e,_=h,v=d(),y=d(!0),b=null,x=null,S=[],C=null,w=null,E=[],D=[],I=0,L=!1,R=e=>e instanceof Error?e:Error(String(e)),z=()=>{S.forEach(e=>e.remove()),S=[]},B=()=>{D.forEach(e=>e.close?.()),D=[],E.forEach(e=>e.setMap?.(null)),E=[]},V=()=>{z(),B();let e=x;if(x=null,e){let t=e;t._animatingZoom=!1}e?.stop(),e?.remove(),w?.destroy(),w=null,v.value?.replaceChildren()},H=()=>{let e=++I;return V(),y.value=!0,e},U=e=>!L&&e===I,W=()=>{if(k(g.center))return g.center;throw Error(`地图中心坐标无效,应使用 [纬度, 经度] 且处于合法范围`)},G=(e,t)=>{U(e)&&(V(),y.value=!1,_(`error`,R(t)))},K=()=>{let e=b,t=x;if(!t||!e||g.mapType!==`osm`)return;z();let n=e.icon({iconUrl:`data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2228%22%20height%3D%2240%22%20viewBox%3D%220%200%2028%2040%22%3E%3Cpath%20d%3D%22M14%2039S1%2024%201%2014a13%2013%200%200%201%2026%200c0%2010-13%2025-13%2025Z%22%20fill%3D%22%23287be8%22%20stroke%3D%22white%22%20stroke-width%3D%222%22%2F%3E%3Ccircle%20cx%3D%2214%22%20cy%3D%2214%22%20r%3D%225%22%20fill%3D%22white%22%2F%3E%3C%2Fsvg%3E`,iconSize:[28,40],iconAnchor:[14,40],popupAnchor:[0,-35]});j(g.markers).forEach(r=>{let i=e.marker([r.lat,r.lng],{icon:n,title:r.title||r.popup||``});if(r.popup){let e=document.createElement(`span`);e.textContent=r.popup,i.bindPopup(e)}i.on(`click`,e=>{_(`markerClick`,r,e)}),i.addTo(t),S.push(i)})},q=()=>{let e=C,t=w;!t||!e||g.mapType!==`amap`||(B(),j(g.markers).forEach(n=>{let r=new e.Marker({position:A([n.lat,n.lng]),title:n.title||n.popup||``});if(n.popup){let i=document.createElement(`span`);i.textContent=n.popup;let a=new e.InfoWindow({content:i,offset:new e.Pixel(0,-30)});D.push(a),r.on(`click`,e=>{a.open(t,r.getPosition()),_(`markerClick`,n,e)})}else r.on(`click`,e=>_(`markerClick`,n,e));r.setMap(t),E.push(r)}))},J=()=>x||w,Y=()=>{x?.invalidateSize({pan:!1}),w?.resize?.()},X=(e={})=>{let t=j(g.markers);if(t.length===0)return!1;if(x){let n=t.map(e=>[e.lat,e.lng]);return x.fitBounds(n,{maxZoom:e.maxZoom,padding:e.padding}),!0}if(w&&E.length>0){let[t=0,n=0]=e.padding||[];return w.setFitView?.(E,!1,[n,t,n,t],e.maxZoom),!0}return!1},Z=async()=>{if(!v.value)return;let e=H();try{let t=await O();if(!U(e)||!v.value)return;b=t;let{url:n,options:r}=N(g.tileConfig),i=M(g.zoom,r.minZoom,r.maxZoom);if(x=t.map(v.value,{center:W(),zoom:i,zoomControl:g.zoomControl,preferCanvas:g.preferCanvas}),t.tileLayer(n,r).addTo(x),K(),g.fitMarkersOnInit&&X(),await o(),requestAnimationFrame(()=>{U(e)&&Y()}),!U(e)||!x)return;y.value=!1,_(`ready`,x)}catch(t){G(e,t)}},Q=async()=>{if(!v.value)return;let e=H();try{let t=await T(g.amapKey,g.amapLoadTimeout,g.amapSecurityConfig);if(!U(e)||!v.value)return;C=t,w=new t.Map(v.value,{...g.amapOptions,zoom:M(g.zoom,1,20),center:A(W())}),q(),g.fitMarkersOnInit&&X(),y.value=!1,_(`ready`,w)}catch(t){G(e,t)}},$=async()=>{g.mapType===`amap`?await Q():await Z()};return p(()=>g.markers,()=>{g.mapType===`osm`?K():q()},{deep:!0}),p([()=>g.mapType,()=>g.amapKey,()=>g.amapSecurityConfig,()=>g.amapLoadTimeout,()=>g.amapOptions,()=>g.tileConfig,()=>g.zoomControl,()=>g.preferCanvas],()=>void $(),{deep:!0}),p([()=>g.center,()=>g.zoom],()=>{if(!k(g.center)){_(`error`,Error(`地图中心坐标无效,应使用 [纬度, 经度]`));return}x?.setView(g.center,M(g.zoom)),w?.setCenter(A(g.center)),w?.setZoom(M(g.zoom,1,20))},{deep:!0}),c(async()=>{await o(),await $()}),l(()=>{L=!0,I+=1,V()}),a({fitToMarkers:X,getMap:J,refresh:Y}),(a,o)=>(u(),n(`div`,{class:`c-map`,role:`region`,"aria-label":e.ariaLabel,"aria-busy":y.value},[r(`div`,{ref_key:`mapContainer`,ref:v,class:`map-container`,style:s({height:e.height})},null,4),y.value?(u(),n(`div`,F,[i(f(m),{size:`large`})])):t(`v-if`,!0)],8,P))}}),[[`__scopeId`,`data-v-7db70bf0`]]);export{N as a,h as c,M as i,_ as l,j as n,A as o,k as r,g as s,I as t};
|