@weaveui/web 0.0.1

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 (46) hide show
  1. package/LICENSE +35 -0
  2. package/README.md +119 -0
  3. package/THIRD_PARTY_NOTICES +29 -0
  4. package/dist/apm-log.es.js +996 -0
  5. package/dist/apm-log.umd.cjs +1 -0
  6. package/dist/business/apm-log/behavior-directive.d.ts +9 -0
  7. package/dist/business/apm-log/behavior-log.d.ts +6 -0
  8. package/dist/business/apm-log/behavior-types.d.ts +121 -0
  9. package/dist/business/apm-log/browser.d.ts +3 -0
  10. package/dist/business/apm-log/directive.d.ts +13 -0
  11. package/dist/business/apm-log/index.d.ts +8 -0
  12. package/dist/business/apm-log/legacy-apm-log.d.ts +6 -0
  13. package/dist/business/apm-log/types.d.ts +147 -0
  14. package/dist/business/apm-log/vue.d.ts +5 -0
  15. package/dist/business/monitor/index.d.ts +81 -0
  16. package/dist/business/monitor/monitor-plugin.d.ts +9 -0
  17. package/dist/business/monitor/runtime-types.d.ts +166 -0
  18. package/dist/business/monitor/runtime.d.ts +6 -0
  19. package/dist/business/monitor/types.d.ts +221 -0
  20. package/dist/business/permission/Permission.d.ts +18 -0
  21. package/dist/business/permission/PermissionPluginClass.d.ts +40 -0
  22. package/dist/business/permission/directive.d.ts +7 -0
  23. package/dist/business/permission/index.d.ts +35 -0
  24. package/dist/business/permission/permission-plugin.d.ts +16 -0
  25. package/dist/business/permission/storage.d.ts +30 -0
  26. package/dist/business/permission/tree.d.ts +19 -0
  27. package/dist/business/permission/types.d.ts +115 -0
  28. package/dist/business/upload-cos/index.d.ts +117 -0
  29. package/dist/business/upload-cos/src/UploadCos.vue.d.ts +70 -0
  30. package/dist/business/upload-cos/src/types.d.ts +72 -0
  31. package/dist/business/upload-cos/src/utils.d.ts +9 -0
  32. package/dist/index.d.ts +1894 -0
  33. package/dist/index.es.js +4315 -0
  34. package/dist/index.umd.cjs +6 -0
  35. package/dist/monitor.es.js +1217 -0
  36. package/dist/monitor.umd.cjs +1 -0
  37. package/dist/permission.es.js +631 -0
  38. package/dist/permission.umd.cjs +1 -0
  39. package/dist/style.css +1 -0
  40. package/dist/upload-cos.es.js +426 -0
  41. package/dist/upload-cos.style.css +1 -0
  42. package/dist/upload-cos.umd.cjs +1 -0
  43. package/dist/utils/index.d.ts +3 -0
  44. package/dist/utils/is.d.ts +2 -0
  45. package/dist/utils/withInstall.d.ts +7 -0
  46. package/package.json +105 -0
@@ -0,0 +1 @@
1
+ (function(d,c){typeof exports=="object"&&typeof module<"u"?c(exports,require("vue")):typeof define=="function"&&define.amd?define(["exports","vue"],c):(d=typeof globalThis<"u"?globalThis:d||self,c(d.ElementCustomUIPermission={},d.Vue))})(this,function(d,c){"use strict";var it=Object.defineProperty;var st=(d,c,g)=>c in d?it(d,c,{enumerable:!0,configurable:!0,writable:!0,value:g}):d[c]=g;var l=(d,c,g)=>st(d,typeof c!="symbol"?c+"":c,g);const g="permissionPluginClass";function h(t){return t===void 0?"":String(t).trim()}function y(t){const n=(Array.isArray(t)?t:[t]).flatMap(r=>{if(typeof r=="string")return r.split(",").map(a=>a.trim());if(typeof r=="number")return[String(r)];if(r&&typeof r=="object"&&"pageId"in r){const a=r.pageId;return typeof a=="string"||typeof a=="number"?[String(a).trim()]:[]}return[]});return[...new Set(n.filter(Boolean))]}function P(t){return t===!0||t===1||t==="1"}function p(t){var e;return P((e=t.extraContent)==null?void 0:e.isPsMg)}function f(t){return Array.isArray(t.children)?t.children:[]}function A(t){return{...t??{}}}function w(t){return{...t,extraContent:A(t.extraContent),...t.parentIds?{parentIds:[...t.parentIds]}:{},children:f(t).map(e=>w(e))}}function x(t){if(typeof t=="number"&&Number.isFinite(t))return t;if(typeof t=="string"&&t.trim()){const e=Number(t);return Number.isFinite(e)?e:0}return 0}function E(t){if(!t)return 0;const e=Date.parse(t);return Number.isFinite(e)?e:0}function I(t){return t.sort((e,n)=>{const r=x(e.sort)-x(n.sort);return r!==0?r:E(e.createTime)-E(n.createTime)})}function O(t){const e=[],n=(r,a,i)=>{for(const o of r){const s=w(o),u=h(s.pageId);a.length>0&&(s.parentIds=[...a]),Number(s.type)===2&&i===!1&&(s.extraContent={...s.extraContent,isPsMg:0}),e.push(s),n(f(s),u?[...a,u]:a,p(s))}};return n(t,[],null),e}function L(t){const e=A(t.extraContent);return{...e,path:typeof t.routingAddress=="string"?t.routingAddress:"",name:typeof e.assemblyName=="string"?e.assemblyName:h(t.pageId),component:typeof e.assemblyAddress=="string"?e.assemblyAddress:"",meta:{title:typeof t.pageName=="string"?t.pageName:"",icon:typeof t.icon=="string"?t.icon:""},id:h(t.pageId),eventIdList:Array.isArray(t.eventIdList)?[...t.eventIdList]:[],...t.createTime?{createTime:t.createTime}:{},...t.isShow!==void 0?{isShow:t.isShow}:{},...t.sort!==void 0?{sort:t.sort}:{},...t.type!==void 0?{type:t.type}:{},...t.updateTime?{updateTime:t.updateTime}:{},children:[]}}function S(t){var n;const e=(n=t.extraContent)==null?void 0:n.menuStatus;return e===void 0||P(e)}function R(t,e){var o;if(!p(t))return!0;const n=f(t);if(P((o=t.extraContent)==null?void 0:o.isBigScreen))return e.has(h(t.pageId))&&S(t);if(n.length===0)return!1;const r=n.filter(s=>{var u;return P((u=s.extraContent)==null?void 0:u.isRelateParent)});if(r.length>0)return r.some(s=>!p(s)||e.has(h(s.pageId)))&&S(t);const a=n.every(s=>e.has(h(s.pageId))),i=n.every(s=>!p(s));return(a||i)&&S(t)}function k(t,e){const n=new Set(e),r=a=>{const i=[];for(const o of a){const s=Number(o.type);if(s===0){const u=r(f(o));if(u.length>0){const v=L(o);v.children=u,i.push(v)}continue}s!==1||!R(o,n)||i.push(L(o))}return I(i)};return r(t)}function z(t){const e=n=>{const r=[];for(const a of n){if(!p(a))continue;const i=w(a);i.children=e(f(a)),r.push(i)}return I(r)};return e(t)}function B(t){const e=n=>{const r=n.map(a=>{const i=w(a);return i.children=e(f(a)),i});return I(r)};return e(t)}function M(t){const e=n=>{const r=[];for(const a of n){const i=e(f(a));if(!p(a)||i.length>0){const o=w(a);o.children=i,r.push(o)}}return r};return e(t)}function _(t){const e=[],n=r=>{var a;for(const i of r)Number(i.type)===1&&P(i.isShow)&&P((a=i.extraContent)==null?void 0:a.isCache)&&e.push(w(i)),n(f(i))};return n(t),e}function J(t,e){const n=new Set,r=a=>{for(const i of a){const o=f(i);if(o.length>0){r(o);continue}(!p(i)||e.has(h(i.pageId)))&&y(i.eventIdList).forEach(s=>n.add(s))}};return r(t),[...n]}function N(t){if(typeof t=="boolean")return t;if(typeof t=="function")try{return!!t()}catch{return!1}return y(t).length===0}const U=c.defineComponent({name:"Permission",props:{sign:{type:[String,Number,Boolean,Array,Function],default:""}},setup(t,{slots:e}){const n=c.inject(g,null),r=c.ref(N(t.sign));let a=0;const i=async()=>{const o=++a,s=n?await n.checkPermission(t.sign):N(t.sign);o===a&&(r.value=s)};return c.watch([()=>t.sign,()=>(n==null?void 0:n.revision.value)??0],()=>{i()},{immediate:!0,deep:!0}),()=>{var o,s,u;return c.h("div",r.value?(o=e.default)==null?void 0:o.call(e):((s=e.emptySlot)==null?void 0:s.call(e))??((u=e.fallback)==null?void 0:u.call(e)))}}});function b(t){return typeof t=="object"&&t!==null}function D(t){return JSON.parse(JSON.stringify(t))}function V(){if(typeof window>"u")return null;try{return window.localStorage}catch{return null}}function q(){return typeof window>"u"?null:window.indexedDB??null}function G(t){if(!b(t))return{cfg:{},data:{}};const e=b(t.cfg)?t.cfg:{},n=b(t.data)?t.data:{};return{...t,cfg:Object.fromEntries(Object.entries(e).filter(([,r])=>b(r))),data:Object.fromEntries(Object.entries(n).filter(([,r])=>b(r)))}}function $(t){return new Promise((e,n)=>{t.onsuccess=()=>e(t.result),t.onerror=()=>n(t.error)})}function W(t){return new Promise((e,n)=>{t.oncomplete=()=>e(),t.onerror=()=>n(t.error),t.onabort=()=>n(t.error)})}class H{constructor(e,n={}){l(this,"memoryPayload",{cfg:{},data:{}});l(this,"storage");l(this,"indexedDb");l(this,"dbPromise");this.dbName=e,this.storage=n.storage===void 0?V():n.storage,this.indexedDb=n.indexedDB===void 0?q():n.indexedDB,this.dbPromise=this.openDatabase()}get supportsIndexedDb(){return this.indexedDb!==null}async ready(){await this.dbPromise}async read(e,n){const r=await this.dbPromise;if(r)try{const a=r.transaction(e,"readonly"),i=await $(a.objectStore(e).get(n));if(b(i))return D(i)}catch{}return this.readFallback(e,n)}async write(e,n){const r=await this.dbPromise;if(r)try{const a=r.transaction(e,"readwrite");a.objectStore(e).put(D(n)),await W(a);return}catch{}this.writeFallback(e,n)}async openDatabase(){if(!this.indexedDb)return null;try{return await new Promise(e=>{var r;const n=(r=this.indexedDb)==null?void 0:r.open(this.dbName,1);if(!n){e(null);return}n.onupgradeneeded=()=>{const a=n.result;for(const i of["cfg","data"])a.objectStoreNames.contains(i)||a.createObjectStore(i,{keyPath:"appChannelId"})},n.onsuccess=()=>e(n.result),n.onerror=()=>e(null),n.onblocked=()=>e(null)})}catch{return null}}readFallback(e,n){const a=this.getFallbackPayload()[e][n];return a?D(a):null}writeFallback(e,n){const r=this.getFallbackPayload();if(r[e][n.appChannelId]=D(n),this.memoryPayload.cfg=r.cfg,this.memoryPayload.data=r.data,!!this.storage)try{this.storage.setItem("permissionPluginData",JSON.stringify(r))}catch{}}getFallbackPayload(){if(!this.storage)return{cfg:{...this.memoryPayload.cfg},data:{...this.memoryPayload.data}};try{const e=this.storage.getItem("permissionPluginData");if(!e)return{cfg:{...this.memoryPayload.cfg},data:{...this.memoryPayload.data}};const n=G(JSON.parse(e));return this.memoryPayload.cfg=n.cfg,this.memoryPayload.data=n.data,n}catch{return{cfg:{...this.memoryPayload.cfg},data:{...this.memoryPayload.data}}}}}function m(t){return typeof t=="object"&&t!==null}function j(t){return t==="cfg"?"cfg":"data"}function Y(t){return(Array.isArray(t)?t:t?[t]:[]).filter(n=>!!n&&typeof n.appChannelId=="string"&&typeof n.dataChannelId=="string"&&typeof n.prefixUrl=="string").map(n=>({...n}))}function K(t){var n,r,a;const e=Y(t.apiCfg);return{apiCfg:e,dbName:((n=t.dbName)==null?void 0:n.trim())||"permissionPluginDb",projectAppChannelId:((r=t.projectAppChannelId)==null?void 0:r.trim())||((a=e[0])==null?void 0:a.appChannelId)||""}}function Q(){return typeof window>"u"||typeof window.fetch!="function"?null:window.fetch.bind(window)}function X(t){return`${t.replace(/\/+$/,"")}/getPageTree`}function Z(t){if(Array.isArray(t))return t.filter(m);if(!m(t)||!Array.isArray(t.data))return[];const e=t.code;return e===void 0||e==="00000"||e===0||e===200||e==="200"?t.data.filter(m):[]}function C(t){return m(t)&&"eventIdList"in t?y(t.eventIdList):y(t)}function tt(t,e){return t?e?t[e]??[]:t:[]}class F{constructor(e={}){l(this,"ifSupportIndexDb");l(this,"pluginCfg");l(this,"revision",c.ref(0));l(this,"fetcher");l(this,"storage");l(this,"initialization");this.pluginCfg=K(e),this.storage=new H(this.pluginCfg.dbName,{storage:e.storage,indexedDB:e.indexedDB}),this.ifSupportIndexDb=this.storage.supportsIndexedDb,this.fetcher=e.fetcher??Q(),this.initialization=this.initialize(e.autoSync!==!1).catch(()=>{})}async whenReady(){await this.initialization}async excuteDbLogic(){await this.whenReady()}async excuteLocalStorageLogic(){await this.whenReady()}async loopApiCfgListForGetData(){await Promise.allSettled(this.pluginCfg.apiCfg.map(async e=>{await this.setData(e.appChannelId,"cfg",e),await this.getDataFromApi(e)}))}async getDataFromApi(e){const n=this.fetcher;if(!n)return[];try{const r=await n(X(e.prefixUrl),{method:"POST",headers:{"Content-Type":"application/json","x-app_channel_id":e.appChannelId,"x-data_channel_id":e.dataChannelId},body:JSON.stringify(e)}),a=Z(await r.json());return await this.generateSaveToStorageDataAndSave(e.appChannelId,a),a}catch{return[]}}parseStorage(e){return JSON.parse(e)}async generateSaveToStorageDataAndSave(e,n){await this.setData(e,"data",{pageEventData:[...n],horizontalPageEventData:O(n)})}async getPageEventDataFromApiNew(){await this.loopApiCfgListForGetData()}async getPageEventDataFromApiSync(e){return await this.setData(e.appChannelId,"cfg",e),this.getDataFromApi(e)}async getData(e=this.pluginCfg.projectAppChannelId,n,r=""){await this.storage.ready();const a=await this.storage.read(j(n),e);return tt(a,r)}async setData(e=this.pluginCfg.projectAppChannelId,n,r,a){await this.storage.ready();const i=j(n),s={...await this.storage.read(i,e)??{appChannelId:e},appChannelId:e};a?s[a]=r:m(r)?Object.assign(s,r):s.value=r,await this.storage.write(i,s),i==="data"&&this.bumpRevision()}async getPageEventDataFromDbOrLocal(e=this.pluginCfg.projectAppChannelId){await this.whenReady();const n=await this.getData(e,"data","pageEventData");return Array.isArray(n)?n.filter(m):[]}async getHorizontalPageEventData(e=this.pluginCfg.projectAppChannelId){await this.whenReady();const n=await this.getData(e,"data","horizontalPageEventData");return Array.isArray(n)?n.filter(m):[]}async setEventIdSync(e,n){await this.setData(e,"data",C(n),"eventIdList")}async getNeedCacheRouter(e=this.pluginCfg.projectAppChannelId){return _(await this.getPageEventDataFromDbOrLocal(e))}async generateRouterNew(e=this.pluginCfg.projectAppChannelId){const[n,r]=await Promise.all([this.getPageEventDataFromDbOrLocal(e),this.getData(e,"data","eventIdList")]);return k(n,C(r))}async generatePermissionMgTree(e=this.pluginCfg.projectAppChannelId){return z(await this.getPageEventDataFromDbOrLocal(e))}async generatePermissionMgTreeForShop(e=this.pluginCfg.projectAppChannelId,n){return B(await this.getPageEventDataFromDbOrLocal(e))}async getApiEventList(e=this.pluginCfg.projectAppChannelId,n=[]){const[r,a]=await Promise.all([this.getPageEventDataFromDbOrLocal(e),this.getData(e,"data","eventIdList")]),i=n.length>0?y(n):C(a);return J(r,new Set(i))}async getNoPmPageTree(e=this.pluginCfg.projectAppChannelId){return M(await this.getPageEventDataFromDbOrLocal(e))}async checkPermission(e){if(typeof e=="boolean")return e;if(typeof e=="function")try{return!!e()}catch{return!1}const n=y(e);if(n.length===0)return!0;const r=this.pluginCfg.projectAppChannelId,[a,i]=await Promise.all([this.getData(r,"data","eventIdList"),this.getHorizontalPageEventData(r)]),o=new Set(C(a));return n.some(s=>o.has(s))?!0:i.some(s=>n.includes(h(s.pageId))&&!p(s))}async initialize(e){await this.storage.ready(),await Promise.all(this.pluginCfg.apiCfg.map(n=>this.setData(n.appChannelId,"cfg",n))),e&&await this.getPageEventDataFromApiNew()}bumpRevision(){this.revision.value+=1}}function et(t){if(typeof t=="boolean")return t;if(typeof t=="function")try{return!!t()}catch{return!1}return y(t).length===0}function nt(t){const e=new WeakMap;function n(a){var o,s;return((s=(o=a.instance)==null?void 0:o.$)==null?void 0:s.appContext.provides[g])??t}const r=async(a,i,o)=>{const s=(e.get(a)??0)+1;e.set(a,s);const u=n(o),v=u?await u.checkPermission(i):et(i);s===e.get(a)&&!v&&a.remove()};return{mounted(a,i){r(a,i.value,i)},updated(a,i){r(a,i.value,i)}}}const T=new WeakMap;function rt(t,e={}){const n=T.get(t);if(n)return n;const r=e.permissionPluginClass??new F(e);T.set(t,r),t.provide(g,r),t.component("Permission",U),t.directive("permission",nt(r));const a=t.config.globalProperties;return a.permissionPluginClass=r,r}const at={PermissionPluginClass:F,install(t,e={}){rt(t,e)}};d.default=at,Object.defineProperties(d,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
package/dist/style.css ADDED
@@ -0,0 +1 @@
1
+ .wui-checkbox[data-v-9fb203e3]{display:flex;flex-wrap:wrap;gap:8px 12px}.wui-checkbox__item[data-v-9fb203e3]{align-items:stretch;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:#cfd4da;border:1px solid #cfd4da;border-radius:4px;color:#fff;cursor:pointer;display:inline-flex;min-height:24px;overflow:hidden;padding:0}.wui-checkbox__item[data-v-9fb203e3]:hover:not(:disabled){border-color:var(--el-color-primary, #409eff)}.wui-checkbox__label[data-v-9fb203e3]{align-items:center;display:inline-flex;font-size:12px;line-height:1.2;padding:0 6px}.wui-checkbox__indicator[data-v-9fb203e3]{align-items:center;background:#fff;color:#fff;display:inline-flex;justify-content:center;min-width:28px}.wui-checkbox__item.is-checked[data-v-9fb203e3]{background:var(--el-color-primary, #409eff);border-color:var(--el-color-primary, #409eff)}.wui-checkbox__item.is-checked .wui-checkbox__indicator[data-v-9fb203e3]{color:var(--el-color-primary, #409eff)}.wui-checkbox__item.is-disabled[data-v-9fb203e3]{cursor:not-allowed;opacity:.7}.wui-button[data-v-b1dd8b3e]{display:inline-flex;align-items:center;justify-content:center;gap:8px;border:1px solid transparent;border-radius:4px;cursor:pointer;font:inherit;font-weight:600;line-height:1;transition:background-color .16s ease,border-color .16s ease,transform .16s ease}.wui-button[data-v-b1dd8b3e]:active:not(:disabled){transform:translateY(1px)}.wui-button[data-v-b1dd8b3e]:focus-visible{outline:3px solid rgb(64 158 255 / 24%);outline-offset:2px}.wui-button[data-v-b1dd8b3e]:disabled{cursor:not-allowed;opacity:.46}.wui-button--small[data-v-b1dd8b3e]{min-height:32px;padding:0 14px;font-size:13px}.wui-button--medium[data-v-b1dd8b3e]{min-height:40px;padding:0 18px;font-size:14px}.wui-button--large[data-v-b1dd8b3e]{min-height:48px;padding:0 22px;font-size:15px}.wui-button--primary[data-v-b1dd8b3e]{background:var(--el-color-primary, #006fdb);color:#fff}.wui-button--primary[data-v-b1dd8b3e]:hover:not(:disabled){background:var(--el-color-primary-light-3, #005cb8)}.wui-button--secondary[data-v-b1dd8b3e]{border-color:var(--el-border-color, #b7cee5);background:var(--el-fill-color-blank, #fff);color:var(--el-color-primary, #164a7a)}.wui-button--secondary[data-v-b1dd8b3e]:hover:not(:disabled){border-color:var(--el-color-primary, #006fdb);background:var(--el-color-primary-light-9, #f0f7ff)}.wui-button--text[data-v-b1dd8b3e]{background:transparent;color:var(--el-color-primary, #006fdb)}.wui-button--text[data-v-b1dd8b3e]:hover:not(:disabled){background:var(--el-color-primary-light-9, #eaf4ff)}.wui-button__spinner[data-v-b1dd8b3e]{width:14px;height:14px;border:2px solid rgb(255 255 255 / 35%);border-top-color:currentColor;border-radius:50%;animation:wui-button-spin-b1dd8b3e .8s linear infinite}.wui-button--secondary .wui-button__spinner[data-v-b1dd8b3e],.wui-button--text .wui-button__spinner[data-v-b1dd8b3e]{border-color:#409eff40;border-top-color:currentColor}@keyframes wui-button-spin-b1dd8b3e{to{transform:rotate(360deg)}}.wui-cat-image__toolbar[data-v-98a1fd7f]{display:flex;flex-wrap:wrap;justify-content:center;gap:4px;margin-bottom:12px}.wui-cat-image__tool-icon[data-v-98a1fd7f],.wui-cat-image__button-icon[data-v-98a1fd7f]{color:currentColor;display:inline-block;height:16px;width:16px}.wui-cat-image__viewport[data-v-98a1fd7f]{display:flex;align-items:center;justify-content:center;min-height:min(64vh,640px);overflow:hidden;background:#111827;touch-action:none;-webkit-user-select:none;user-select:none}.wui-cat-image__viewport.is-dragging[data-v-98a1fd7f]{cursor:grabbing}.wui-cat-image__image[data-v-98a1fd7f]{max-width:100%;max-height:min(64vh,640px);object-fit:contain;cursor:grab;transform-origin:center center;transition:transform .12s ease}.wui-cat-image__viewport.is-dragging .wui-cat-image__image[data-v-98a1fd7f]{transition:none}.wui-cat-image__navigation[data-v-98a1fd7f]{display:flex;align-items:center;justify-content:center;gap:12px;margin-top:14px;color:var(--el-text-color-secondary, #909399);font-size:13px}.wui-copy-text[data-v-2791f53b]{align-items:center;background:var(--el-color-primary, #006fdb);border:1px solid var(--el-color-primary, #006fdb);border-radius:4px;color:#fff;cursor:pointer;display:inline-flex;font:inherit;font-size:14px;gap:6px;height:34px;justify-content:center;line-height:1;padding:0 14px;transition:background-color .2s ease,border-color .2s ease,color .2s ease,opacity .2s ease}.wui-copy-text[data-v-2791f53b]:hover:not(:disabled){background:var(--el-color-primary-light-3, #005fc0);border-color:var(--el-color-primary-light-3, #005fc0)}.wui-copy-text--text[data-v-2791f53b]{background:transparent;border-color:transparent;color:var(--el-color-primary, #006fdb);height:auto;padding:0}.wui-copy-text--text[data-v-2791f53b]:hover:not(:disabled){background:transparent;border-color:transparent}.wui-copy-text--icon[data-v-2791f53b]{border-radius:50%;height:30px;padding:0;width:30px}.wui-copy-text__icon[data-v-2791f53b]{font-size:15px;line-height:1}.wui-copy-text.is-copied[data-v-2791f53b]{background:var(--el-color-success, #21a675);border-color:var(--el-color-success, #21a675);color:#fff}.wui-copy-text--text.is-copied[data-v-2791f53b]{background:transparent;border-color:transparent;color:var(--el-color-success, #21a675)}.wui-copy-text.is-disabled[data-v-2791f53b]{cursor:not-allowed;opacity:.55}.custom-table[data-v-324d7221]{min-width:0}.custom-table__toolbar[data-v-324d7221]{align-items:center;display:flex;justify-content:space-between;margin-bottom:12px;min-width:0}.custom-table__toolbar-start[data-v-324d7221],.custom-table__toolbar-end[data-v-324d7221]{align-items:center;display:flex;flex-wrap:wrap;gap:8px;min-width:0}.custom-table__toolbar-end[data-v-324d7221]{justify-content:flex-end}.custom-table__tool-icon[data-v-324d7221]{color:currentColor;display:inline-block;height:16px;width:16px}.custom-table__column-settings[data-v-324d7221]{display:grid;gap:8px}.custom-table__column-settings[data-v-324d7221] .el-checkbox{margin-right:0}.custom-table__error[data-v-324d7221]{align-items:center;background:var(--el-color-error-light-9, #fef0f0);border:1px solid var(--el-color-error-light-7, #fbc4c4);color:var(--el-color-error, #f56c6c);display:flex;font-size:14px;gap:8px;justify-content:space-between;margin-bottom:12px;padding:8px 12px}.custom-table__surface[data-v-324d7221]{max-width:100%;min-width:0;overflow-x:auto}.custom-table__pagination[data-v-324d7221]{justify-content:flex-end;margin-top:16px}@media (max-width: 640px){.custom-table__toolbar[data-v-324d7221]{align-items:flex-start;flex-direction:column}.custom-table__toolbar-end[data-v-324d7221]{justify-content:flex-start;width:100%}.custom-table__pagination[data-v-324d7221]{justify-content:flex-start}}.wui-custom-tree[data-v-ef3417d1]{display:grid;grid-template-columns:minmax(0,1fr) minmax(180px,.34fr);gap:16px;width:100%;min-width:0;color:var(--el-text-color-primary, #303133)}.wui-custom-tree.is-disabled[data-v-ef3417d1]{opacity:.7}.wui-custom-tree__columns[data-v-ef3417d1]{display:grid;grid-auto-columns:minmax(180px,1fr);grid-auto-flow:column;min-width:0;overflow-x:auto;border:1px solid var(--el-border-color-light, #ebeef5)}.wui-custom-tree__column[data-v-ef3417d1]{min-width:180px;max-height:var(--wui-custom-tree-max-height);overflow:auto;padding:10px;border-right:1px solid var(--el-border-color-light, #ebeef5)}.wui-custom-tree__column[data-v-ef3417d1]:last-child{border-right:0}.wui-custom-tree__search[data-v-ef3417d1]{margin-bottom:8px}.wui-custom-tree__nodes[data-v-ef3417d1]{display:grid;gap:2px}.wui-custom-tree__node[data-v-ef3417d1]{display:flex;align-items:center;min-width:0;padding:2px 4px;border-radius:4px}.wui-custom-tree__node[data-v-ef3417d1]:hover,.wui-custom-tree__node.is-active[data-v-ef3417d1]{background:var(--el-fill-color-light, #f5f7fa)}.wui-custom-tree__node.is-not-selectable[data-v-ef3417d1]{color:var(--el-text-color-secondary, #909399)}.wui-custom-tree__node-main[data-v-ef3417d1]{display:flex;align-items:center;flex:1;min-width:0;min-height:28px;padding:0;border:0;background:transparent;color:inherit;cursor:pointer;font:inherit;text-align:left}.wui-custom-tree.is-disabled .wui-custom-tree__node-main[data-v-ef3417d1]{cursor:not-allowed}.wui-custom-tree__node-icon[data-v-ef3417d1]{flex:0 0 16px;width:16px;margin-right:4px;color:var(--el-text-color-secondary, #909399)}.wui-custom-tree__node-label[data-v-ef3417d1]{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.wui-custom-tree__selected[data-v-ef3417d1]{min-width:0;max-height:var(--wui-custom-tree-max-height);overflow:auto;padding:12px;border:1px solid var(--el-border-color-light, #ebeef5)}.wui-custom-tree__selected-title[data-v-ef3417d1]{margin-bottom:8px;color:var(--el-text-color-regular, #606266);font-size:14px;font-weight:600}.wui-custom-tree__selected-list[data-v-ef3417d1]{display:grid;gap:4px}.wui-custom-tree__selected-item[data-v-ef3417d1]{display:flex;align-items:center;gap:6px;min-width:0;padding:4px 6px;border-radius:4px;background:var(--el-fill-color-light, #f5f7fa)}.wui-custom-tree__selected-item>span[data-v-ef3417d1]{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.wui-custom-tree__remove[data-v-ef3417d1]{display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;padding:0;border:0;background:transparent;color:var(--el-text-color-secondary, #909399);cursor:pointer}.wui-custom-tree__remove[data-v-ef3417d1]:hover{color:var(--el-color-danger, #f56c6c)}.wui-custom-tree__empty[data-v-ef3417d1]{margin:10px 0;color:var(--el-text-color-secondary, #909399);font-size:13px;text-align:center}@media (max-width: 720px){.wui-custom-tree[data-v-ef3417d1]{grid-template-columns:minmax(0,1fr)}}.wui-daterange[data-v-1211364c]{position:relative;width:100%}.wui-daterange__picker[data-v-1211364c]{width:100%}.wui-daterange__long-term[data-v-1211364c]{align-items:center;background:var(--el-fill-color-blank, #fff);border:0;color:var(--el-text-color-regular, #606266);cursor:pointer;display:flex;font:inherit;font-size:14px;top:1px;right:32px;bottom:1px;left:1px;justify-content:space-between;padding:0 10px 0 14px;position:absolute}.wui-daterange__clear[data-v-1211364c]{color:var(--el-text-color-secondary, #909399);visibility:hidden}.wui-daterange__long-term:hover .wui-daterange__clear[data-v-1211364c]{visibility:visible}.wui-daterange__long-term[data-v-1211364c]:disabled{cursor:not-allowed}.wui-dialog[data-v-1e7710fa] .el-dialog__body{padding-top:10px}.wui-dialog__layout[data-v-1e7710fa]{display:flex;min-height:180px;border-bottom:1px solid var(--el-border-color-light, #ebeef5);border-top:1px solid var(--el-border-color-light, #ebeef5)}.wui-dialog__layout--with-nav[data-v-1e7710fa]{gap:20px}.wui-dialog__navigation[data-v-1e7710fa]{flex:0 0 132px;padding:18px 16px 18px 0;border-right:1px solid var(--el-border-color-light, #ebeef5)}.wui-dialog__nav-item[data-v-1e7710fa]{display:block;width:100%;min-height:32px;margin:0 0 6px;padding:6px 12px;border:0;border-radius:4px;background:transparent;color:var(--el-text-color-regular, #606266);font-size:14px;line-height:20px;text-align:left;cursor:pointer}.wui-dialog__nav-item[data-v-1e7710fa]:hover:not(:disabled){color:var(--el-color-primary, #006fdb)}.wui-dialog__nav-item.is-active[data-v-1e7710fa]{background:var(--el-color-primary, #006fdb);color:#fff}.wui-dialog__nav-item.is-disabled[data-v-1e7710fa]{color:var(--el-text-color-disabled, #c0c4cc);cursor:not-allowed}.wui-dialog__content[data-v-1e7710fa]{flex:1;min-width:0;max-height:calc(100vh - 260px);padding:18px 0;overflow:auto}.wui-dialog__sections[data-v-1e7710fa]{display:grid;gap:12px}.wui-dialog__section[data-v-1e7710fa]{border:1px solid var(--el-border-color-light, #ebeef5);border-radius:6px;background:var(--el-bg-color, #fff)}.wui-dialog__section-header[data-v-1e7710fa]{display:flex;align-items:center;justify-content:space-between;width:100%;min-height:44px;padding:0 14px;border:0;background:var(--el-fill-color-light, #f7f9fc);color:var(--el-text-color-primary, #303133);font-size:14px;font-weight:600;text-align:left;cursor:pointer}.wui-dialog__section-header[data-v-1e7710fa]:disabled{color:var(--el-text-color-disabled, #c0c4cc);cursor:not-allowed}.wui-dialog__section-icon[data-v-1e7710fa]{color:var(--el-color-primary, #006fdb);font-size:12px;font-weight:400}.wui-dialog__section-body[data-v-1e7710fa]{padding:14px}.wui-dialog__footer[data-v-1e7710fa],.wui-dialog__step-actions[data-v-1e7710fa]{display:flex;align-items:center;gap:8px}.wui-dialog__footer[data-v-1e7710fa]{justify-content:flex-end;gap:12px}@media (max-width: 640px){.wui-dialog__layout--with-nav[data-v-1e7710fa]{flex-direction:column;gap:0}.wui-dialog__navigation[data-v-1e7710fa]{display:flex;flex:initial;gap:6px;overflow-x:auto;padding:12px 0;border-right:0;border-bottom:1px solid var(--el-border-color-light, #ebeef5)}.wui-dialog__nav-item[data-v-1e7710fa]{flex:0 0 auto;width:auto;margin:0}}.editable-box[data-v-6abca841]{--editable-box-accent: #0a8f78;--editable-box-accent-soft: #e5f7f2;--editable-box-border: #d0d5dd;--editable-box-text: #1d2939;--editable-box-muted: #667085;--editable-box-danger: #d92d20;color:var(--editable-box-text)}.editable-box__field[data-v-6abca841]{max-width:100%}.editable-box__editor[data-v-6abca841]{box-sizing:border-box;display:block;width:100%;min-height:116px;padding:10px;overflow-x:hidden;overflow-y:auto;line-height:1.6;font-size:14px;white-space:pre-wrap;word-break:break-word;overflow-wrap:anywhere;border:1px solid var(--editable-box-border);border-radius:4px;outline:none;transition:border-color .16s ease,box-shadow .16s ease}.editable-box__editor[data-v-6abca841]:empty:before{color:#98a2b3;content:attr(data-placeholder);pointer-events:none}.editable-box__editor[data-v-6abca841]:focus-visible{border-color:var(--editable-box-accent);box-shadow:0 0 0 3px #0a8f7824}.editable-box__editor.has-error[data-v-6abca841]{border-color:var(--editable-box-danger)}.editable-box.is-disabled .editable-box__editor[data-v-6abca841]{cursor:not-allowed;background:#f2f4f7}.editable-box__counter[data-v-6abca841]{display:flex;justify-content:flex-end;gap:14px;margin-top:5px;color:var(--editable-box-muted);font-size:12px}.editable-box__module-panel[data-v-6abca841]{display:grid;gap:14px;margin-top:14px}.editable-box__module-group h4[data-v-6abca841]{margin:0 0 8px;font-size:14px;font-weight:600}.editable-box__module-list[data-v-6abca841]{display:flex;flex-wrap:wrap;gap:8px}.editable-box__module-button[data-v-6abca841]{min-height:30px;padding:4px 10px;color:#344054;font:inherit;font-size:13px;background:#fff;border:1px solid #d0d5dd;border-radius:4px;cursor:pointer}.editable-box__module-button[data-v-6abca841]:hover:not(:disabled),.editable-box__module-button.is-selected[data-v-6abca841]{color:var(--editable-box-accent);background:var(--editable-box-accent-soft);border-color:var(--editable-box-accent)}.editable-box__module-button[data-v-6abca841]:focus-visible{outline:2px solid rgb(10 143 120 / 30%);outline-offset:2px}.editable-box__module-button[data-v-6abca841]:disabled{cursor:not-allowed;opacity:.55}[data-v-6abca841] .editable-box__tag{box-sizing:border-box;display:inline-flex;align-items:center;min-height:26px;max-width:calc(100% - 4px);margin:2px;padding:2px 8px;color:var(--editable-box-accent);font-size:13px;font-weight:600;line-height:22px;white-space:nowrap;vertical-align:middle;background:var(--editable-box-accent-soft);border:0;border-radius:4px;box-shadow:none;cursor:grab;overflow:hidden;text-overflow:ellipsis;overflow-wrap:anywhere;-webkit-user-select:none;user-select:none}[data-v-6abca841] .editable-box__tag.is-dragging{opacity:.45}[data-v-6abca841] .editable-box__tag.is-unavailable{color:#b54708;background:#fef0c7;border-color:#f79009;cursor:default}@media (max-width: 560px){.editable-box__counter[data-v-6abca841]{justify-content:space-between;gap:8px}}.wui-expand-select[data-v-1af516ee]{padding-top:10px}.wui-expand-select__row[data-v-1af516ee]{display:flex;align-items:flex-start;margin-bottom:10px;padding:0 20px;color:var(--el-text-color-regular, #5f6a7a);font-size:14px;line-height:33px}.wui-expand-select__title[data-v-1af516ee]{flex:0 0 80px;width:80px;color:var(--el-text-color-primary, #43516f)}.wui-expand-select__content[data-v-1af516ee]{flex:1;min-width:0}.wui-expand-select__options[data-v-1af516ee]{display:flex;flex-wrap:wrap;align-content:flex-start;overflow:hidden;transition:height .3s ease}.wui-expand-select__option[data-v-1af516ee]{height:33px;margin:0 14px 6px 0;padding:0 12px;border:0;border-radius:4px;background:transparent;color:var(--el-text-color-primary, #43516f);cursor:pointer;font:inherit;font-size:inherit;line-height:33px;white-space:nowrap}.wui-expand-select__option[data-v-1af516ee]:hover{background:var(--el-fill-color-light, #f2f4f7)}.wui-expand-select__option.is-active[data-v-1af516ee]{background:var(--el-color-primary-light-9, #e2f3fe);color:var(--el-color-primary, #409eff)}.wui-expand-select__toggle[data-v-1af516ee]{display:inline-flex;align-items:center;flex:0 0 auto;height:33px;margin-left:7px;padding:0;border:0;background:transparent;color:var(--el-text-color-secondary, #929aa6);cursor:pointer;font:inherit;font-size:14px}.wui-expand-select__toggle .el-icon[data-v-1af516ee]{margin-left:3px;transition:transform .3s ease}.wui-expand-select__toggle .el-icon.is-expanded[data-v-1af516ee]{transform:rotate(180deg)}@media (max-width: 640px){.wui-expand-select__row[data-v-1af516ee]{flex-wrap:wrap;padding:0 12px}.wui-expand-select__title[data-v-1af516ee]{flex-basis:100%;width:auto}.wui-expand-select__content[data-v-1af516ee]{flex-basis:calc(100% - 58px)}}.wui-file-preview[data-v-a6a082d7]{display:inline-flex}.wui-file-preview__frame-wrap[data-v-a6a082d7]{height:min(68vh,720px);overflow:hidden;border:1px solid var(--el-border-color-light, #ebeef5)}.wui-file-preview__frame[data-v-a6a082d7]{width:100%;height:100%;border:0}.wui-file-preview__open-link[data-v-a6a082d7]{color:var(--el-color-primary, #409eff);font-size:14px;text-decoration:none}.wui-member-selector__summary[data-v-d6b57fec]{display:flex;align-items:center;flex-wrap:wrap;gap:8px;min-width:0}.wui-member-selector__summary-list[data-v-d6b57fec]{display:flex;flex:1 1 auto;flex-wrap:wrap;gap:6px;min-width:0}.wui-member-selector__summary-item[data-v-d6b57fec]{max-width:180px;overflow:hidden;padding:4px 8px;border:1px solid var(--el-border-color-light, #ebeef5);border-radius:4px;color:var(--el-text-color-regular, #606266);font-size:13px;text-overflow:ellipsis;white-space:nowrap}.wui-member-selector__summary-empty[data-v-d6b57fec],.wui-member-selector__empty[data-v-d6b57fec]{margin:12px 0;color:var(--el-text-color-secondary, #909399);font-size:13px;text-align:center}.wui-member-selector__summary-action[data-v-d6b57fec]{padding:0;border:0;background:transparent;color:var(--el-color-primary, #409eff);cursor:pointer;font:inherit;font-size:13px}.wui-member-selector[data-v-d6b57fec]{display:grid;grid-template-columns:minmax(0,1fr) minmax(220px,.8fr);gap:20px;min-height:360px}.wui-member-selector__panel[data-v-d6b57fec]{display:flex;flex-direction:column;min-width:0}.wui-member-selector__selection-panel[data-v-d6b57fec]{padding-left:20px;border-left:1px solid var(--el-border-color-light, #ebeef5)}.wui-member-selector__search-row[data-v-d6b57fec]{display:flex;align-items:center;gap:8px;margin-bottom:10px}.wui-member-selector__search-row[data-v-d6b57fec] .el-input{min-width:0}.wui-member-selector__error[data-v-d6b57fec]{margin-bottom:10px}.wui-member-selector__tree-scroll[data-v-d6b57fec],.wui-member-selector__selected-scroll[data-v-d6b57fec]{min-height:0;max-height:min(52vh,440px);padding-right:4px}.wui-member-selector[data-v-d6b57fec] .el-tree-node__content{min-width:0;min-height:32px}.wui-member-selector[data-v-d6b57fec] .el-tree-node__label{min-width:0}.wui-member-selector__node-icon[data-v-d6b57fec]{flex:0 0 auto;margin-right:6px;color:var(--el-color-primary, #409eff)}.wui-member-selector__node-label[data-v-d6b57fec]{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.wui-member-selector__selected-icon[data-v-d6b57fec]{margin-left:auto;color:var(--el-color-primary, #409eff)}.wui-member-selector__selection-title[data-v-d6b57fec]{margin-bottom:10px;color:var(--el-text-color-primary, #303133);font-size:14px;font-weight:600}.wui-member-selector__selected-list[data-v-d6b57fec]{display:grid;gap:4px}.wui-member-selector__selected-item[data-v-d6b57fec]{display:flex;align-items:center;min-width:0;padding:6px 8px;border-radius:4px}.wui-member-selector__selected-item[data-v-d6b57fec]:hover{background:var(--el-fill-color-light, #f5f7fa)}.wui-member-selector__selected-item>span[data-v-d6b57fec]{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.wui-member-selector__remove[data-v-d6b57fec]{display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;padding:0;border:0;background:transparent;color:var(--el-text-color-secondary, #909399);cursor:pointer}.wui-member-selector__remove[data-v-d6b57fec]:hover{color:var(--el-color-danger, #f56c6c)}@media (max-width: 640px){.wui-member-selector[data-v-d6b57fec]{grid-template-columns:minmax(0,1fr)}.wui-member-selector__selection-panel[data-v-d6b57fec]{padding-top:16px;padding-left:0;border-top:1px solid var(--el-border-color-light, #ebeef5);border-left:0}}.wui-reject-dialog .el-dialog__header{display:none}.wui-reject-dialog .el-dialog__body{padding:24px 24px 16px}.wui-input-dialog__header[data-v-d7bd1299]{display:flex;align-items:flex-start;gap:12px}.wui-input-dialog__icon[data-v-d7bd1299]{flex:0 0 auto;width:32px;height:32px}.wui-input-dialog__title[data-v-d7bd1299]{flex:1;margin:0;color:var(--el-text-color-primary, #333);font-size:18px;font-weight:500;line-height:32px}.wui-input-dialog__close[data-v-d7bd1299]{display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;padding:0;border:0;background:transparent;color:var(--el-text-color-secondary, #909399);cursor:pointer}.wui-input-dialog__content[data-v-d7bd1299]{margin:9px 0 0 44px;color:var(--el-text-color-regular, #666);font-size:13px;line-height:24px;overflow-wrap:anywhere;white-space:pre-wrap}.wui-input-dialog__textarea[data-v-d7bd1299]{box-sizing:border-box;display:block;width:calc(100% - 44px);margin:12px 0 0 44px;padding:8px;border:1px solid var(--el-border-color, #efefef);border-radius:4px;color:var(--el-text-color-regular, #666);font:inherit;font-size:13px;line-height:18px;outline:none;resize:vertical}.wui-input-dialog__textarea[data-v-d7bd1299]:focus{border-color:var(--el-color-primary, #409eff)}.wui-input-dialog__actions[data-v-d7bd1299]{display:flex;justify-content:flex-end;gap:12px;margin-top:16px;padding-top:16px;border-top:1px solid var(--el-border-color-lighter, #f3f1f1)}.wui-input-dialog__button[data-v-d7bd1299]{min-width:72px;height:32px;padding:0 14px;border-radius:4px;cursor:pointer;font:inherit;font-size:13px}.wui-input-dialog__button--cancel[data-v-d7bd1299]{border:1px solid var(--el-border-color, #d9d9d9);background:transparent;color:var(--el-text-color-primary, #333)}.wui-input-dialog__button--confirm[data-v-d7bd1299]{border:1px solid var(--el-color-primary, #409eff);background:var(--el-color-primary, #409eff);color:#fff}.wui-tips__mask[data-v-cc730103]{position:fixed;z-index:10000;top:0;right:0;bottom:0;left:0;background:#000000b3}.wui-tips[data-v-cc730103]{position:fixed;z-index:10001;top:50%;left:50%;box-sizing:border-box;width:min(520px,calc(100vw - 32px));padding:24px 24px 16px;border-radius:8px;background:var(--el-bg-color, #fff);transform:translate(-50%,-50%)}.wui-tips__header[data-v-cc730103]{display:flex;align-items:flex-start;gap:12px}.wui-tips__icon[data-v-cc730103]{flex:0 0 auto;width:32px;height:32px}.wui-tips__title[data-v-cc730103]{flex:1;margin:0;color:var(--el-text-color-primary, #333);font-size:18px;font-weight:500;line-height:32px}.wui-tips__close[data-v-cc730103]{display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;padding:0;border:0;background:transparent;color:var(--el-text-color-secondary, #909399);cursor:pointer}.wui-tips__content[data-v-cc730103]{margin:9px 0 0 44px;color:var(--el-text-color-regular, #666);font-size:13px;line-height:24px;overflow-wrap:anywhere;white-space:pre-wrap}.wui-tips__actions[data-v-cc730103]{display:flex;justify-content:flex-end;gap:12px;margin-top:16px;padding-top:16px;border-top:1px solid var(--el-border-color-lighter, #f3f1f1)}.wui-tips__button[data-v-cc730103]{box-sizing:border-box;min-width:72px;height:32px;padding:0 14px;border-radius:4px;cursor:pointer;font:inherit;font-size:13px}.wui-tips__button--cancel[data-v-cc730103]{border:1px solid var(--el-border-color, #d9d9d9);background:transparent;color:var(--el-text-color-primary, #333)}.wui-tips__button--confirm[data-v-cc730103]{border:1px solid var(--el-color-primary, #409eff);background:var(--el-color-primary, #409eff);color:#fff}.wui-tips-input-dialog .el-dialog__header{display:none}.wui-tips-input-dialog .el-dialog__body{padding:24px 24px 16px}.wui-input-dialog__header[data-v-927f2408]{display:flex;align-items:flex-start;gap:12px}.wui-input-dialog__icon[data-v-927f2408]{flex:0 0 auto;width:32px;height:32px}.wui-input-dialog__title[data-v-927f2408]{flex:1;margin:0;color:var(--el-text-color-primary, #333);font-size:18px;font-weight:500;line-height:32px}.wui-input-dialog__close[data-v-927f2408]{display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;padding:0;border:0;background:transparent;color:var(--el-text-color-secondary, #909399);cursor:pointer}.wui-tips-input-dialog__content-row[data-v-927f2408]{display:flex;align-items:center;gap:14px;margin:9px 0 0 44px}.wui-input-dialog__content[data-v-927f2408]{flex:0 1 auto;margin:0;color:var(--el-text-color-regular, #666);font-size:13px;line-height:24px;overflow-wrap:anywhere;white-space:pre-wrap}.wui-tips-input-dialog__input[data-v-927f2408]{flex:1;min-width:0;height:34px;padding:0 8px;border:1px solid var(--el-border-color, #efefef);border-radius:4px;color:var(--el-text-color-regular, #666);font:inherit;font-size:13px;outline:none}.wui-tips-input-dialog__input[data-v-927f2408]:focus{border-color:var(--el-color-primary, #409eff)}.wui-input-dialog__actions[data-v-927f2408]{display:flex;justify-content:flex-end;gap:12px;margin-top:16px;padding-top:16px;border-top:1px solid var(--el-border-color-lighter, #f3f1f1)}.wui-input-dialog__button[data-v-927f2408]{min-width:72px;height:32px;padding:0 14px;border-radius:4px;cursor:pointer;font:inherit;font-size:13px}.wui-input-dialog__button--cancel[data-v-927f2408]{border:1px solid var(--el-border-color, #d9d9d9);background:transparent;color:var(--el-text-color-primary, #333)}.wui-input-dialog__button--confirm[data-v-927f2408]{border:1px solid var(--el-color-primary, #409eff);background:var(--el-color-primary, #409eff);color:#fff}@media (max-width: 520px){.wui-tips-input-dialog__content-row[data-v-927f2408]{align-items:stretch;flex-direction:column}}.wui-multiple[data-v-6027373d]{display:block;width:100%;min-width:0}.wui-multiple__trigger[data-v-6027373d]{display:flex;align-items:center;min-height:32px;padding:3px 8px;border:1px solid var(--el-border-color, #dcdfe6);border-radius:4px;background:var(--el-fill-color-blank, #fff);cursor:pointer;outline:none}.wui-multiple__trigger[data-v-6027373d]:focus,.wui-multiple__trigger[data-v-6027373d]:hover:not(.is-disabled){border-color:var(--el-color-primary, #409eff)}.wui-multiple__trigger.is-disabled[data-v-6027373d]{background:var(--el-disabled-bg-color, #f5f7fa);color:var(--el-text-color-disabled, #c0c4cc);cursor:not-allowed}.wui-multiple__tags[data-v-6027373d]{display:flex;flex:1;flex-wrap:wrap;align-items:center;min-width:0;gap:4px}.wui-multiple__placeholder[data-v-6027373d]{color:var(--el-text-color-placeholder, #a8abb2);font-size:14px;line-height:24px}.wui-multiple__collapsed-count[data-v-6027373d]{color:var(--el-text-color-secondary, #909399);font-size:12px}.wui-multiple__arrow[data-v-6027373d]{margin-left:6px;color:var(--el-text-color-placeholder, #a8abb2);transition:transform .2s ease}.wui-multiple__arrow.is-open[data-v-6027373d]{transform:rotate(180deg)}.wui-multiple-menu{min-width:180px;max-height:320px;overflow-y:auto}.wui-multiple-menu .el-dropdown-menu__item{display:flex;align-items:center;justify-content:space-between}.wui-multiple-menu .el-dropdown-menu__item.is-selected{color:var(--el-color-primary, #409eff)}.wui-multiple-menu__actions[data-v-6027373d]{display:flex;gap:12px;padding:7px 12px;border-bottom:1px solid var(--el-border-color-lighter, #ebeef5)}.wui-multiple-menu__actions button[data-v-6027373d]{padding:0;border:0;background:transparent;color:var(--el-color-primary, #409eff);cursor:pointer;font:inherit;font-size:13px}.wui-multiple-menu__check[data-v-6027373d]{margin-left:16px}.wui-multiple-menu__empty[data-v-6027373d]{padding:12px;color:var(--el-text-color-secondary, #909399);font-size:13px;text-align:center}.wui-multiple-create[data-v-6f244a71]{display:block;width:100%;min-width:0}.wui-multiple-create__trigger[data-v-6f244a71]{display:flex;align-items:stretch;min-height:32px;border:1px solid var(--el-border-color, #dcdfe6);border-radius:4px;background:var(--el-fill-color-blank, #fff);cursor:text}.wui-multiple-create__trigger[data-v-6f244a71]:hover:not(.is-disabled),.wui-multiple-create__trigger[data-v-6f244a71]:focus-within{border-color:var(--el-color-primary, #409eff)}.wui-multiple-create__trigger.is-disabled[data-v-6f244a71]{background:var(--el-disabled-bg-color, #f5f7fa);cursor:not-allowed}.wui-multiple-create__content[data-v-6f244a71]{display:flex;flex:1;flex-wrap:wrap;align-items:center;min-width:0;gap:4px;padding:3px 6px}.wui-multiple-create__input[data-v-6f244a71]{flex:1 1 120px;min-width:80px;border:0;background:transparent;color:var(--el-text-color-regular, #606266);font:inherit;font-size:14px;line-height:24px;outline:none}.wui-multiple-create__input[data-v-6f244a71]::placeholder{color:var(--el-text-color-placeholder, #a8abb2)}.wui-multiple-create__add[data-v-6f244a71]{display:inline-flex;align-items:center;justify-content:center;width:32px;border:0;border-radius:0 3px 3px 0;background:var(--el-color-primary, #409eff);color:#fff;cursor:pointer}.wui-multiple-create__add[data-v-6f244a71]:disabled{background:var(--el-color-primary-light-5, #a0cfff);cursor:not-allowed}.wui-multiple-create-menu{min-width:180px;max-height:320px;overflow-y:auto}.wui-multiple-create-menu .el-dropdown-menu__item{display:flex;align-items:center;justify-content:space-between}.wui-multiple-create-menu .el-dropdown-menu__item.is-selected{color:var(--el-color-primary, #409eff)}.wui-multiple-create-menu__check[data-v-6f244a71]{margin-left:16px}.wui-multiple-create-menu__empty[data-v-6f244a71]{padding:12px;color:var(--el-text-color-secondary, #909399);font-size:13px;text-align:center}.wui-timeline-pro[data-v-50994fb8]{width:100%;color:var(--el-text-color-primary, #1f2937)}.wui-timeline-pro__header[data-v-50994fb8]{margin-bottom:16px}.wui-timeline-pro__header h3[data-v-50994fb8]{margin:0;font-size:18px;line-height:1.4}.wui-timeline-pro__list[data-v-50994fb8]{display:grid;gap:0}.wui-timeline-pro__item[data-v-50994fb8]{display:grid;grid-template-columns:28px minmax(0,1fr);min-height:84px;position:relative}.wui-timeline-pro__axis[data-v-50994fb8]{display:flex;justify-content:center;position:relative}.wui-timeline-pro__dot[data-v-50994fb8]{align-items:center;background:var(--wui-timeline-color, var(--el-color-primary, #006fdb));border:3px solid var(--el-bg-color, #fff);border-radius:50%;box-shadow:0 0 0 2px color-mix(in srgb,var(--wui-timeline-color, #006fdb),transparent 72%);color:#fff;display:inline-flex;height:14px;justify-content:center;margin-top:4px;position:relative;width:14px;z-index:1}.wui-timeline-pro__line[data-v-50994fb8]{position:absolute;top:20px;bottom:0;width:2px;background:var(--el-border-color-light, #e5e7eb)}.wui-timeline-pro__content[data-v-50994fb8]{min-width:0;padding:0 0 18px 8px}.wui-timeline-pro__main[data-v-50994fb8]{padding:14px 16px;border:1px solid var(--el-border-color-light, #e5e7eb);border-radius:6px;background:var(--el-fill-color-light, #f6f8fa)}.wui-timeline-pro__title-row[data-v-50994fb8]{display:flex;align-items:center;justify-content:space-between;gap:10px}.wui-timeline-pro__title-row strong[data-v-50994fb8],.wui-timeline-pro__main>strong[data-v-50994fb8]{font-size:15px;line-height:1.5}.wui-timeline-pro__status[data-v-50994fb8]{color:var(--el-text-color-secondary, #6b7280);font-size:13px}.wui-timeline-pro__description[data-v-50994fb8]{margin:8px 0 0;color:var(--el-text-color-regular, #4b5563);font-size:14px;line-height:1.7}.wui-timeline-pro__footer[data-v-50994fb8]{display:flex;flex-wrap:wrap;gap:12px;margin-top:10px;color:var(--el-text-color-secondary, #6b7280);font-size:13px}.wui-timeline-pro__meta[data-v-50994fb8]{display:grid;grid-template-columns:max-content minmax(0,1fr);gap:6px 12px;margin:12px 0 0}.wui-timeline-pro__meta dt[data-v-50994fb8],.wui-timeline-pro__meta dd[data-v-50994fb8]{margin:0;color:var(--el-text-color-regular, #4b5563);font-size:13px;line-height:1.5}.wui-timeline-pro__meta dt[data-v-50994fb8]{color:var(--el-text-color-secondary, #6b7280)}.wui-timeline-pro__empty[data-v-50994fb8]{padding:28px;border:1px dashed var(--el-border-color-light, #e5e7eb);border-radius:6px;color:var(--el-text-color-secondary, #6b7280);background:var(--el-fill-color-light, #f6f8fa);text-align:center}.wui-timeline-pro--compact .wui-timeline-pro__item[data-v-50994fb8]{min-height:64px}.wui-timeline-pro--compact .wui-timeline-pro__main[data-v-50994fb8]{padding:10px 12px}.wui-timeline-pro__item--primary[data-v-50994fb8]{--wui-timeline-color: var(--el-color-primary, #006fdb)}.wui-timeline-pro__item--success[data-v-50994fb8]{--wui-timeline-color: var(--el-color-success, #21a675)}.wui-timeline-pro__item--warning[data-v-50994fb8]{--wui-timeline-color: var(--el-color-warning, #d97706)}.wui-timeline-pro__item--danger[data-v-50994fb8]{--wui-timeline-color: var(--el-color-danger, #dc2626)}.wui-timeline-pro__item--info[data-v-50994fb8]{--wui-timeline-color: var(--el-color-info, #64748b)}.wui-timeline-pro--horizontal .wui-timeline-pro__list[data-v-50994fb8]{display:flex;gap:16px;overflow-x:auto;padding-bottom:4px}.wui-timeline-pro--horizontal .wui-timeline-pro__item[data-v-50994fb8]{display:grid;flex:0 0 240px;grid-template-columns:1fr;grid-template-rows:28px minmax(0,1fr);min-height:0}.wui-timeline-pro--horizontal .wui-timeline-pro__axis[data-v-50994fb8]{align-items:center;justify-content:flex-start}.wui-timeline-pro--horizontal .wui-timeline-pro__line[data-v-50994fb8]{top:13px;right:-16px;left:20px;width:auto;height:2px}.wui-timeline-pro--horizontal .wui-timeline-pro__content[data-v-50994fb8]{padding:0}.wui-custom-upload[data-v-bcc4e7b9]{display:inline-flex}.wui-upload[data-v-94986e5c]{display:grid;gap:12px;width:100%}.wui-upload__tips[data-v-94986e5c]{margin:0;color:var(--el-text-color-secondary, #909399);font-size:12px;line-height:1.5}.wui-upload__dropzone[data-v-94986e5c] .el-upload,.wui-upload__dropzone[data-v-94986e5c] .el-upload-dragger{width:100%}.wui-upload__dropzone-icon[data-v-94986e5c]{margin-bottom:8px;color:var(--el-text-color-placeholder, #a8abb2)}.wui-upload__input-box[data-v-94986e5c]{display:flex;align-items:center;gap:8px;min-height:34px;padding:0 8px;border:1px solid var(--el-border-color, #dcdfe6);border-radius:4px}.wui-upload__summary[data-v-94986e5c]{flex:1;min-width:0;overflow:hidden;color:var(--el-text-color-regular, #606266);font-size:13px;text-overflow:ellipsis;white-space:nowrap}.wui-upload__file-list[data-v-94986e5c]{display:grid;gap:4px;margin:0;padding:0;list-style:none}.wui-upload__file-item[data-v-94986e5c]{display:flex;align-items:center;gap:8px;min-width:0}.wui-upload__file-name[data-v-94986e5c]{display:inline-flex;align-items:center;flex:1;min-width:0;gap:6px;padding:3px 0;border:0;background:transparent;color:var(--el-color-primary, #409eff);cursor:pointer;font:inherit;font-size:13px;text-align:left}.wui-upload__file-name span[data-v-94986e5c]{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.wui-upload__remove[data-v-94986e5c]{display:inline-flex;align-items:center;justify-content:center;padding:3px;border:0;background:transparent;color:var(--el-text-color-secondary, #909399);cursor:pointer}.wui-upload__remove[data-v-94986e5c]:hover{color:var(--el-color-danger, #f56c6c)}.wui-upload-list[data-v-5b306917]{display:grid;gap:8px}.wui-upload-list__tips[data-v-5b306917]{margin:0;color:var(--el-text-color-secondary, #909399);font-size:12px}.wui-upload-list__grid[data-v-5b306917]{display:flex;flex-wrap:wrap;gap:10px}.wui-upload-list__card[data-v-5b306917],.wui-upload-list__add[data-v-5b306917] .el-upload{position:relative;display:grid;width:92px;height:92px;overflow:hidden;border:1px solid var(--el-border-color, #dcdfe6);border-radius:4px;background:var(--el-fill-color-light, #f5f7fa)}.wui-upload-list__preview[data-v-5b306917]{display:flex;align-items:center;justify-content:center;width:100%;height:100%;padding:0;border:0;background:transparent;color:var(--el-text-color-secondary, #909399);cursor:pointer}.wui-upload-list__preview[data-v-5b306917]:disabled{cursor:default}.wui-upload-list__preview img[data-v-5b306917]{width:100%;height:100%;object-fit:cover}.wui-upload-list__name[data-v-5b306917]{position:absolute;right:0;bottom:0;left:0;padding:3px 5px;overflow:hidden;background:#0000008c;color:#fff;font-size:11px;line-height:16px;text-overflow:ellipsis;white-space:nowrap}.wui-upload-list__remove[data-v-5b306917]{position:absolute;top:3px;right:3px;display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;padding:0;border:0;border-radius:50%;background:#0000008c;color:#fff;cursor:pointer}.wui-upload-list__add[data-v-5b306917] .el-upload{place-items:center;color:var(--el-text-color-secondary, #909399);cursor:pointer}.wui-upload-list__add[data-v-5b306917] .el-upload:hover{border-color:var(--el-color-primary, #409eff);color:var(--el-color-primary, #409eff)}
@@ -0,0 +1,426 @@
1
+ import { defineComponent as le, ref as m, watch as ue, onBeforeUnmount as de, openBlock as O, createElementBlock as A, createElementVNode as pe, renderSlot as W, toDisplayString as fe, createCommentVNode as me } from "vue";
2
+ const V = /* @__PURE__ */ new WeakMap();
3
+ function he(r, i) {
4
+ const c = r, a = i;
5
+ let s = V.get(r);
6
+ return s || (s = /* @__PURE__ */ new Set(), V.set(r, s), c.install = (U) => {
7
+ s == null || s.forEach((p) => {
8
+ U.component(p, r);
9
+ });
10
+ }), s.add(a), c;
11
+ }
12
+ function H() {
13
+ const r = globalThis.crypto;
14
+ if (typeof (r == null ? void 0 : r.randomUUID) == "function")
15
+ return r.randomUUID().replace(/-/g, "");
16
+ if (typeof (r == null ? void 0 : r.getRandomValues) == "function") {
17
+ const i = new Uint32Array(4);
18
+ return r.getRandomValues(i), Array.from(i, (c) => c.toString(16).padStart(8, "0")).join("");
19
+ }
20
+ return `${Date.now().toString(36)}${Math.random().toString(36).slice(2)}`;
21
+ }
22
+ function ge(r) {
23
+ const i = Number.isFinite(r) && r > 0 ? r : 0;
24
+ return i < 1024 ? `${i} B` : i < 1024 * 1024 ? `${(i / 1024).toFixed(2)} KB` : i < 1024 * 1024 * 1024 ? `${(i / (1024 * 1024)).toFixed(2)} MB` : `${(i / (1024 * 1024 * 1024)).toFixed(2)} GB`;
25
+ }
26
+ function we(r) {
27
+ var c;
28
+ const i = (c = r.split(".").pop()) == null ? void 0 : c.trim().toLowerCase();
29
+ return !i || i === r.toLowerCase() ? "bin" : i.replace(/[^a-z0-9]/g, "") || "bin";
30
+ }
31
+ function ye(r, i) {
32
+ const c = Se(r, "easy-oil"), a = H(), s = a.slice(0, 12);
33
+ return {
34
+ fileId: a,
35
+ fileName: `${c}_${Date.now()}_${s}.${i}`
36
+ };
37
+ }
38
+ function Ue(r) {
39
+ if (!r)
40
+ return "";
41
+ const i = r.trim().replace(/^\/+/, "").replace(/\/{2,}/g, "/");
42
+ return i && !i.endsWith("/") ? `${i}/` : i;
43
+ }
44
+ function q(r, i) {
45
+ const c = i.replace(/^\/+/, ""), a = r.replace(/\/+$/, "");
46
+ return a ? `${a}/${c}` : `/${c}`;
47
+ }
48
+ function Se(r, i) {
49
+ return r.trim().replace(/[\\/\u0000-\u001f]+/g, "-").replace(/\s+/g, "-") || i;
50
+ }
51
+ const Ce = { class: "wui-upload-cos" }, Te = ["accept", "multiple"], be = {
52
+ key: 0,
53
+ class: "wui-upload-cos__toast",
54
+ role: "status"
55
+ }, Ie = /* @__PURE__ */ le({
56
+ name: "UploadCos",
57
+ __name: "UploadCos",
58
+ props: {
59
+ appChanneId: { default: "" },
60
+ multiple: { type: Boolean, default: !0 },
61
+ accept: { default: "" },
62
+ baseUrl: { default: "" },
63
+ limit: { default: 0 },
64
+ overLoaderList: { default: () => [] },
65
+ fileType: { default: "file" },
66
+ appName: { default: "qingyiweb" },
67
+ isUseCos: { type: Boolean, default: !0 },
68
+ defaultUploadConfig: { default: () => ({}) }
69
+ },
70
+ emits: ["uploadfiles", "errorUpLoad", "overLimitTips", "update:overLoaderList", "upload-progress"],
71
+ setup(r, { expose: i, emit: c }) {
72
+ const a = r, s = c, U = m(), p = m([]), S = m(!1), F = m(""), b = m(!1), h = m({});
73
+ let f;
74
+ ue(
75
+ () => a.overLoaderList,
76
+ (e) => {
77
+ p.value = Array.from(e ?? []);
78
+ },
79
+ { immediate: !0 }
80
+ ), de(() => {
81
+ f && clearTimeout(f);
82
+ });
83
+ function C(e) {
84
+ F.value = e, b.value = !0, f && clearTimeout(f), f = setTimeout(() => {
85
+ b.value = !1, f = void 0;
86
+ }, 2e3);
87
+ }
88
+ function L() {
89
+ var e;
90
+ S.value || (e = U.value) == null || e.click();
91
+ }
92
+ function J(e) {
93
+ if (!(!e.url || typeof window > "u"))
94
+ try {
95
+ const t = new URL(e.url, window.location.href);
96
+ if (!["http:", "https:", "blob:"].includes(t.protocol))
97
+ return;
98
+ const n = window.open(t.href, "_blank", "noopener,noreferrer");
99
+ n && (n.opener = null);
100
+ } catch {
101
+ }
102
+ }
103
+ async function G(e) {
104
+ const t = e.target;
105
+ if (!(t instanceof HTMLInputElement))
106
+ return;
107
+ const n = Array.from(t.files ?? []);
108
+ if (!n.length)
109
+ return;
110
+ const o = a.limit > 0 ? Math.max(a.limit - p.value.length, 0) : n.length, l = a.multiple ? o : Math.min(o, 1), u = n.slice(0, l);
111
+ if (a.limit > 0 && u.length < n.length && s("overLimitTips"), !!u.length) {
112
+ S.value = !0;
113
+ try {
114
+ let y;
115
+ if (a.isUseCos)
116
+ try {
117
+ y = await _();
118
+ } catch {
119
+ C("获取上传凭证失败");
120
+ return;
121
+ }
122
+ for (const d of u) {
123
+ if (d.size <= 0) {
124
+ C(`文件 ${d.name} 无效,大小为 0`);
125
+ continue;
126
+ }
127
+ try {
128
+ y ? await E(d, y) : await x(d);
129
+ } catch {
130
+ }
131
+ }
132
+ } finally {
133
+ t.value = "", S.value = !1;
134
+ }
135
+ }
136
+ }
137
+ async function E(e, t) {
138
+ const n = M(e);
139
+ T(n, e, 0);
140
+ try {
141
+ const o = t ?? await _(), l = await Q(e, o, n);
142
+ return T(n, e, 100), z(l);
143
+ } catch (o) {
144
+ throw s("errorUpLoad", o), C("上传失败"), o;
145
+ } finally {
146
+ N(n);
147
+ }
148
+ }
149
+ async function x(e) {
150
+ const t = M(e), n = (o) => T(t, e, o);
151
+ n(0);
152
+ try {
153
+ const o = await ee(e, n);
154
+ return n(100), z(j(o, I(e)));
155
+ } catch (o) {
156
+ throw s("errorUpLoad", o), C("上传失败"), o;
157
+ } finally {
158
+ N(t);
159
+ }
160
+ }
161
+ async function _() {
162
+ if (!a.baseUrl)
163
+ throw new Error("baseUrl is required.");
164
+ const e = await $(
165
+ q(a.baseUrl, "ms-attachment/cos/getAccessInfo"),
166
+ {
167
+ method: "POST",
168
+ headers: { "Content-Type": "application/json" },
169
+ body: JSON.stringify({ _appid: R() })
170
+ }
171
+ ), t = await D(e, "获取上传凭证失败");
172
+ if (!k(t, 200))
173
+ throw new Error("获取上传凭证失败");
174
+ return ne(t.data);
175
+ }
176
+ async function Q(e, t, n) {
177
+ const o = te(e), l = we(e.name), { fileId: u, fileName: y } = ye(a.appName, l), d = `${Ue(t.dir)}${y}`, P = await (await X(t)).uploadFile({
178
+ Bucket: t.bucket,
179
+ Region: t.region,
180
+ Key: d,
181
+ Body: e,
182
+ SliceSize: 5 * 1024 * 1024,
183
+ onProgress: ({ percent: ce }) => {
184
+ T(n, e, ce * 100);
185
+ }
186
+ });
187
+ if (!P.Location)
188
+ throw new Error("COS 上传未返回文件地址");
189
+ const K = ie(P.Location), ae = await o, se = I(e, {
190
+ url: K,
191
+ ext: l,
192
+ path: `/${d}`,
193
+ ...ae
194
+ });
195
+ return Z({
196
+ file: e,
197
+ fileId: u,
198
+ extension: l,
199
+ objectKey: d,
200
+ objectUrl: K,
201
+ fileData: se
202
+ });
203
+ }
204
+ async function X(e) {
205
+ const t = await import("cos-js-sdk-v5"), n = Y(t);
206
+ return new n({
207
+ SecretId: e.tmpSecretID,
208
+ SecretKey: e.tmpSecretKey,
209
+ SecurityToken: e.sessionToken,
210
+ StartTime: e.startTime,
211
+ ExpiredTime: e.expiredTime
212
+ });
213
+ }
214
+ function Y(e) {
215
+ const t = w(e) && "default" in e ? e.default : e;
216
+ if (typeof t != "function")
217
+ throw new Error("COS SDK 加载失败");
218
+ return t;
219
+ }
220
+ async function Z(e) {
221
+ if (!a.baseUrl)
222
+ return e.fileData;
223
+ const t = await $(
224
+ q(a.baseUrl, "ms-attachment/cos/object/add"),
225
+ {
226
+ method: "POST",
227
+ headers: { "Content-Type": "application/json" },
228
+ body: JSON.stringify({
229
+ _appid: R(),
230
+ // The legacy API field name is kept, although the value is a random file identifier.
231
+ fileMd5: e.fileId,
232
+ ext: e.extension,
233
+ size: e.file.size,
234
+ path: `/${e.objectKey}`,
235
+ url: e.objectUrl,
236
+ fileName: e.file.name
237
+ })
238
+ }
239
+ ), n = await D(t, "文件元数据保存失败");
240
+ if (!k(n, 200))
241
+ throw new Error("文件元数据保存失败");
242
+ const o = v(re(n.data, "fileURL"));
243
+ return {
244
+ ...e.fileData,
245
+ url: o ?? e.objectUrl,
246
+ ext: e.extension
247
+ };
248
+ }
249
+ async function ee(e, t) {
250
+ const n = a.defaultUploadConfig;
251
+ if (!oe(n))
252
+ throw new Error("defaultUploadConfig is incomplete.");
253
+ const o = new FormData();
254
+ o.append(a.fileType || "file", e);
255
+ const l = await $(n.uploadUrl, {
256
+ method: "POST",
257
+ headers: {
258
+ token: n.token,
259
+ yyid: n.yyid,
260
+ "x-app-channel-id": String(n.appChannelId),
261
+ "x-data-channel-id": String(n.dataChannelId)
262
+ },
263
+ body: o
264
+ }), u = await D(l, "默认直传失败");
265
+ if (!k(u, 2e4))
266
+ throw new Error("默认直传失败");
267
+ return t(100), j(u.data, I(e));
268
+ }
269
+ function z(e) {
270
+ const t = [...p.value, e];
271
+ return p.value = t, s("uploadfiles", e), s("update:overLoaderList", t), e;
272
+ }
273
+ function T(e, t, n) {
274
+ const o = Math.max(0, Math.min(100, Math.round(n)));
275
+ h.value = {
276
+ ...h.value,
277
+ [e]: o
278
+ }, s("upload-progress", t, o);
279
+ }
280
+ function N(e) {
281
+ const t = { ...h.value };
282
+ delete t[e], h.value = t;
283
+ }
284
+ function M(e) {
285
+ return `${Date.now()}_${e.name}_${H().slice(0, 12)}`;
286
+ }
287
+ function R() {
288
+ var e;
289
+ return ((e = a.appChanneId) == null ? void 0 : e.trim()) || void 0;
290
+ }
291
+ function I(e, t = {}) {
292
+ return {
293
+ name: e.name,
294
+ origin_name: e.name,
295
+ size: e.size,
296
+ width: 0,
297
+ height: 0,
298
+ ...t
299
+ };
300
+ }
301
+ async function te(e) {
302
+ if (e.type.startsWith("image/"))
303
+ return new Promise((t) => {
304
+ const n = new FileReader();
305
+ n.onerror = () => t(void 0), n.onload = () => {
306
+ if (typeof n.result != "string") {
307
+ t(void 0);
308
+ return;
309
+ }
310
+ const o = new Image();
311
+ o.onload = () => t({
312
+ width: o.naturalWidth,
313
+ height: o.naturalHeight
314
+ }), o.onerror = () => t(void 0), o.src = n.result;
315
+ }, n.readAsDataURL(e);
316
+ });
317
+ }
318
+ async function $(e, t) {
319
+ const n = globalThis.fetch;
320
+ if (typeof n != "function")
321
+ throw new Error("浏览器不支持 Fetch。");
322
+ const o = await n(e, t);
323
+ if (!o.ok)
324
+ throw new Error(`上传服务请求失败 (${o.status})`);
325
+ return o;
326
+ }
327
+ async function D(e, t) {
328
+ let n;
329
+ try {
330
+ n = await e.json();
331
+ } catch {
332
+ throw new Error(t);
333
+ }
334
+ if (!w(n))
335
+ throw new Error(t);
336
+ return n;
337
+ }
338
+ function k(e, t) {
339
+ const n = e.code;
340
+ return typeof n != "string" && typeof n != "number" ? !1 : String(n) === String(t);
341
+ }
342
+ function ne(e) {
343
+ if (!w(e))
344
+ throw new Error("上传凭证格式无效");
345
+ return {
346
+ tmpSecretID: g(e, ["tmpSecretID", "tmpSecretId", "TmpSecretId"]),
347
+ tmpSecretKey: g(e, ["tmpSecretKey", "TmpSecretKey"]),
348
+ sessionToken: g(e, ["sessionToken", "SessionToken", "token", "Token"]),
349
+ bucket: g(e, ["bucket", "Bucket"]),
350
+ region: g(e, ["region", "Region"]),
351
+ dir: v(e.dir),
352
+ startTime: B(e.startTime ?? e.StartTime),
353
+ expiredTime: B(e.expiredTime ?? e.ExpiredTime)
354
+ };
355
+ }
356
+ function j(e, t) {
357
+ if (!w(e))
358
+ throw new Error("上传服务未返回文件信息");
359
+ return {
360
+ ...t,
361
+ ...e
362
+ };
363
+ }
364
+ function oe(e) {
365
+ return !!(e && e.uploadUrl && e.token && e.yyid && e.appChannelId !== void 0 && e.dataChannelId !== void 0);
366
+ }
367
+ function re(e, t) {
368
+ return w(e) ? e[t] : void 0;
369
+ }
370
+ function v(e) {
371
+ return typeof e == "string" && e.trim() ? e : void 0;
372
+ }
373
+ function B(e) {
374
+ if (typeof e == "number" && Number.isFinite(e))
375
+ return e;
376
+ if (typeof e == "string" && e.trim()) {
377
+ const t = Number(e);
378
+ return Number.isFinite(t) ? t : void 0;
379
+ }
380
+ }
381
+ function g(e, t) {
382
+ for (const n of t) {
383
+ const o = v(e[n]);
384
+ if (o)
385
+ return o;
386
+ }
387
+ throw new Error("上传凭证缺少必要字段");
388
+ }
389
+ function ie(e) {
390
+ return /^https?:\/\//i.test(e) ? e : `https://${e.replace(/^\/+/, "")}`;
391
+ }
392
+ function w(e) {
393
+ return typeof e == "object" && e !== null && !Array.isArray(e);
394
+ }
395
+ return i({
396
+ triggerUpload: L,
397
+ handleSingleFileUpload: E,
398
+ uploadDefault: x,
399
+ formatFileSize: ge
400
+ }), (e, t) => (O(), A("div", Ce, [
401
+ pe("input", {
402
+ ref_key: "fileInput",
403
+ ref: U,
404
+ class: "wui-upload-cos__input",
405
+ type: "file",
406
+ accept: r.accept,
407
+ multiple: r.multiple,
408
+ onChange: G
409
+ }, null, 40, Te),
410
+ W(e.$slots, "upload-button", {
411
+ triggerUpload: L,
412
+ isUploading: S.value
413
+ }),
414
+ W(e.$slots, "file-list", {
415
+ uploadedFiles: p.value,
416
+ openFile: J,
417
+ progressMap: h.value
418
+ }),
419
+ b.value ? (O(), A("div", be, fe(F.value), 1)) : me("", !0)
420
+ ]));
421
+ }
422
+ }), ve = he(Ie, "UploadCos");
423
+ export {
424
+ ve as UploadCos,
425
+ ve as default
426
+ };
@@ -0,0 +1 @@
1
+ .wui-upload-cos{display:flex;width:fit-content}.wui-upload-cos__input{display:none}.wui-upload-cos__toast{position:fixed;top:200px;left:50%;z-index:9999;max-width:min(360px,calc(100vw - 32px));padding:8px 16px;border-radius:4px;background:#000000b8;color:#fff;font-size:14px;line-height:20px;text-align:center;transform:translate(-50%)}
@@ -0,0 +1 @@
1
+ (function(d,a){typeof exports=="object"&&typeof module<"u"?a(exports,require("vue")):typeof define=="function"&&define.amd?define(["exports","vue"],a):(d=typeof globalThis<"u"?globalThis:d||self,a(d.ElementCustomUIUploadCos={},d.Vue))})(this,function(d,a){"use strict";const L=new WeakMap;function H(r,i){const c=r,s=i;let l=L.get(r);return l||(l=new Set,L.set(r,l),c.install=S=>{l==null||l.forEach(m=>{S.component(m,r)})}),l.add(s),c}function _(){const r=globalThis.crypto;if(typeof(r==null?void 0:r.randomUUID)=="function")return r.randomUUID().replace(/-/g,"");if(typeof(r==null?void 0:r.getRandomValues)=="function"){const i=new Uint32Array(4);return r.getRandomValues(i),Array.from(i,c=>c.toString(16).padStart(8,"0")).join("")}return`${Date.now().toString(36)}${Math.random().toString(36).slice(2)}`}function J(r){const i=Number.isFinite(r)&&r>0?r:0;return i<1024?`${i} B`:i<1024*1024?`${(i/1024).toFixed(2)} KB`:i<1024*1024*1024?`${(i/(1024*1024)).toFixed(2)} MB`:`${(i/(1024*1024*1024)).toFixed(2)} GB`}function G(r){var c;const i=(c=r.split(".").pop())==null?void 0:c.trim().toLowerCase();return!i||i===r.toLowerCase()?"bin":i.replace(/[^a-z0-9]/g,"")||"bin"}function Q(r,i){const c=Y(r,"easy-oil"),s=_(),l=s.slice(0,12);return{fileId:s,fileName:`${c}_${Date.now()}_${l}.${i}`}}function X(r){if(!r)return"";const i=r.trim().replace(/^\/+/,"").replace(/\/{2,}/g,"/");return i&&!i.endsWith("/")?`${i}/`:i}function x(r,i){const c=i.replace(/^\/+/,""),s=r.replace(/\/+$/,"");return s?`${s}/${c}`:`/${c}`}function Y(r,i){return r.trim().replace(/[\\/\u0000-\u001f]+/g,"-").replace(/\s+/g,"-")||i}const Z={class:"wui-upload-cos"},ee=["accept","multiple"],te={key:0,class:"wui-upload-cos__toast",role:"status"},z=H(a.defineComponent({name:"UploadCos",__name:"UploadCos",props:{appChanneId:{default:""},multiple:{type:Boolean,default:!0},accept:{default:""},baseUrl:{default:""},limit:{default:0},overLoaderList:{default:()=>[]},fileType:{default:"file"},appName:{default:"qingyiweb"},isUseCos:{type:Boolean,default:!0},defaultUploadConfig:{default:()=>({})}},emits:["uploadfiles","errorUpLoad","overLimitTips","update:overLoaderList","upload-progress"],setup(r,{expose:i,emit:c}){const s=r,l=c,S=a.ref(),m=a.ref([]),C=a.ref(!1),M=a.ref(""),I=a.ref(!1),g=a.ref({});let h;a.watch(()=>s.overLoaderList,e=>{m.value=Array.from(e??[])},{immediate:!0}),a.onBeforeUnmount(()=>{h&&clearTimeout(h)});function T(e){M.value=e,I.value=!0,h&&clearTimeout(h),h=setTimeout(()=>{I.value=!1,h=void 0},2e3)}function j(){var e;C.value||(e=S.value)==null||e.click()}function ne(e){if(!(!e.url||typeof window>"u"))try{const t=new URL(e.url,window.location.href);if(!["http:","https:","blob:"].includes(t.protocol))return;const n=window.open(t.href,"_blank","noopener,noreferrer");n&&(n.opener=null)}catch{}}async function oe(e){const t=e.target;if(!(t instanceof HTMLInputElement))return;const n=Array.from(t.files??[]);if(!n.length)return;const o=s.limit>0?Math.max(s.limit-m.value.length,0):n.length,u=s.multiple?o:Math.min(o,1),p=n.slice(0,u);if(s.limit>0&&p.length<n.length&&l("overLimitTips"),!!p.length){C.value=!0;try{let U;if(s.isUseCos)try{U=await P()}catch{T("获取上传凭证失败");return}for(const f of p){if(f.size<=0){T(`文件 ${f.name} 无效,大小为 0`);continue}try{U?await B(f,U):await N(f)}catch{}}}finally{t.value="",C.value=!1}}}async function B(e,t){const n=O(e);b(n,e,0);try{const o=t??await P(),u=await re(e,o,n);return b(n,e,100),R(u)}catch(o){throw l("errorUpLoad",o),T("上传失败"),o}finally{K(n)}}async function N(e){const t=O(e),n=o=>b(t,e,o);n(0);try{const o=await le(e,n);return n(100),R(A(o,$(e)))}catch(o){throw l("errorUpLoad",o),T("上传失败"),o}finally{K(t)}}async function P(){if(!s.baseUrl)throw new Error("baseUrl is required.");const e=await k(x(s.baseUrl,"ms-attachment/cos/getAccessInfo"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({_appid:v()})}),t=await D(e,"获取上传凭证失败");if(!E(t,200))throw new Error("获取上传凭证失败");return ue(t.data)}async function re(e,t,n){const o=ce(e),u=G(e.name),{fileId:p,fileName:U}=Q(s.appName,u),f=`${X(t.dir)}${U}`,W=await(await ie(t)).uploadFile({Bucket:t.bucket,Region:t.region,Key:f,Body:e,SliceSize:5*1024*1024,onProgress:({percent:ge})=>{b(n,e,ge*100)}});if(!W.Location)throw new Error("COS 上传未返回文件地址");const q=fe(W.Location),me=await o,he=$(e,{url:q,ext:u,path:`/${f}`,...me});return se({file:e,fileId:p,extension:u,objectKey:f,objectUrl:q,fileData:he})}async function ie(e){const t=await import("cos-js-sdk-v5"),n=ae(t);return new n({SecretId:e.tmpSecretID,SecretKey:e.tmpSecretKey,SecurityToken:e.sessionToken,StartTime:e.startTime,ExpiredTime:e.expiredTime})}function ae(e){const t=w(e)&&"default"in e?e.default:e;if(typeof t!="function")throw new Error("COS SDK 加载失败");return t}async function se(e){if(!s.baseUrl)return e.fileData;const t=await k(x(s.baseUrl,"ms-attachment/cos/object/add"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({_appid:v(),fileMd5:e.fileId,ext:e.extension,size:e.file.size,path:`/${e.objectKey}`,url:e.objectUrl,fileName:e.file.name})}),n=await D(t,"文件元数据保存失败");if(!E(n,200))throw new Error("文件元数据保存失败");const o=F(pe(n.data,"fileURL"));return{...e.fileData,url:o??e.objectUrl,ext:e.extension}}async function le(e,t){const n=s.defaultUploadConfig;if(!de(n))throw new Error("defaultUploadConfig is incomplete.");const o=new FormData;o.append(s.fileType||"file",e);const u=await k(n.uploadUrl,{method:"POST",headers:{token:n.token,yyid:n.yyid,"x-app-channel-id":String(n.appChannelId),"x-data-channel-id":String(n.dataChannelId)},body:o}),p=await D(u,"默认直传失败");if(!E(p,2e4))throw new Error("默认直传失败");return t(100),A(p.data,$(e))}function R(e){const t=[...m.value,e];return m.value=t,l("uploadfiles",e),l("update:overLoaderList",t),e}function b(e,t,n){const o=Math.max(0,Math.min(100,Math.round(n)));g.value={...g.value,[e]:o},l("upload-progress",t,o)}function K(e){const t={...g.value};delete t[e],g.value=t}function O(e){return`${Date.now()}_${e.name}_${_().slice(0,12)}`}function v(){var e;return((e=s.appChanneId)==null?void 0:e.trim())||void 0}function $(e,t={}){return{name:e.name,origin_name:e.name,size:e.size,width:0,height:0,...t}}async function ce(e){if(e.type.startsWith("image/"))return new Promise(t=>{const n=new FileReader;n.onerror=()=>t(void 0),n.onload=()=>{if(typeof n.result!="string"){t(void 0);return}const o=new Image;o.onload=()=>t({width:o.naturalWidth,height:o.naturalHeight}),o.onerror=()=>t(void 0),o.src=n.result},n.readAsDataURL(e)})}async function k(e,t){const n=globalThis.fetch;if(typeof n!="function")throw new Error("浏览器不支持 Fetch。");const o=await n(e,t);if(!o.ok)throw new Error(`上传服务请求失败 (${o.status})`);return o}async function D(e,t){let n;try{n=await e.json()}catch{throw new Error(t)}if(!w(n))throw new Error(t);return n}function E(e,t){const n=e.code;return typeof n!="string"&&typeof n!="number"?!1:String(n)===String(t)}function ue(e){if(!w(e))throw new Error("上传凭证格式无效");return{tmpSecretID:y(e,["tmpSecretID","tmpSecretId","TmpSecretId"]),tmpSecretKey:y(e,["tmpSecretKey","TmpSecretKey"]),sessionToken:y(e,["sessionToken","SessionToken","token","Token"]),bucket:y(e,["bucket","Bucket"]),region:y(e,["region","Region"]),dir:F(e.dir),startTime:V(e.startTime??e.StartTime),expiredTime:V(e.expiredTime??e.ExpiredTime)}}function A(e,t){if(!w(e))throw new Error("上传服务未返回文件信息");return{...t,...e}}function de(e){return!!(e&&e.uploadUrl&&e.token&&e.yyid&&e.appChannelId!==void 0&&e.dataChannelId!==void 0)}function pe(e,t){return w(e)?e[t]:void 0}function F(e){return typeof e=="string"&&e.trim()?e:void 0}function V(e){if(typeof e=="number"&&Number.isFinite(e))return e;if(typeof e=="string"&&e.trim()){const t=Number(e);return Number.isFinite(t)?t:void 0}}function y(e,t){for(const n of t){const o=F(e[n]);if(o)return o}throw new Error("上传凭证缺少必要字段")}function fe(e){return/^https?:\/\//i.test(e)?e:`https://${e.replace(/^\/+/,"")}`}function w(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}return i({triggerUpload:j,handleSingleFileUpload:B,uploadDefault:N,formatFileSize:J}),(e,t)=>(a.openBlock(),a.createElementBlock("div",Z,[a.createElementVNode("input",{ref_key:"fileInput",ref:S,class:"wui-upload-cos__input",type:"file",accept:r.accept,multiple:r.multiple,onChange:oe},null,40,ee),a.renderSlot(e.$slots,"upload-button",{triggerUpload:j,isUploading:C.value}),a.renderSlot(e.$slots,"file-list",{uploadedFiles:m.value,openFile:ne,progressMap:g.value}),I.value?(a.openBlock(),a.createElementBlock("div",te,a.toDisplayString(M.value),1)):a.createCommentVNode("",!0)]))}}),"UploadCos");d.UploadCos=z,d.default=z,Object.defineProperties(d,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
@@ -0,0 +1,3 @@
1
+ export { isArray, isObject } from './is';
2
+ export { withInstall } from './withInstall';
3
+ export type { SFCWithInstall } from './withInstall';
@@ -0,0 +1,2 @@
1
+ export declare function isArray<T>(value: T | readonly T[] | unknown): value is T[];
2
+ export declare function isObject(value: unknown): value is Record<PropertyKey, unknown>;
@@ -0,0 +1,7 @@
1
+ import { Component, Plugin } from 'vue';
2
+ export type SFCWithInstall<T> = T & Plugin;
3
+ /**
4
+ * Adds Vue's plugin install hook to an SFC so it works with both
5
+ * `app.use(Component)` and named imports.
6
+ */
7
+ export declare function withInstall<T extends Component>(component: T, alias?: string): SFCWithInstall<T>;