@ibiz-template/mob-vue3-components 0.7.41-alpha.11 → 0.7.41-alpha.12

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 (29) hide show
  1. package/dist/{index-q0SBDv6c.js → index-yGM1h2Ma.js} +12 -12
  2. package/dist/index-yGM1h2Ma.js.map +1 -0
  3. package/dist/index.min.css +9 -9
  4. package/dist/index.system.min.js +1 -1
  5. package/dist/{quill-sraxwYmv.js → quill-7fiycnP7.js} +2 -2
  6. package/dist/{quill-sraxwYmv.js.map → quill-7fiycnP7.js.map} +1 -1
  7. package/dist/{quill-editor-5QOfComp.js → quill-editor-Nndlb9WE.js} +2 -2
  8. package/dist/{quill-editor-5QOfComp.js.map → quill-editor-Nndlb9WE.js.map} +1 -1
  9. package/dist/{quill-editor-preview-65f3RVj0.js → quill-editor-preview-GUdcFmjn.js} +2 -2
  10. package/dist/{quill-editor-preview-65f3RVj0.js.map → quill-editor-preview-GUdcFmjn.js.map} +1 -1
  11. package/es/editor/dropdown-list/ibiz-cascader-dropdown/ibiz-cascader-dropdown.d.ts +1 -1
  12. package/es/editor/dropdown-list/ibiz-cascader-dropdown/ibiz-cascader-dropdown.mjs +11 -4
  13. package/es/editor/upload/ibiz-file-upload/ibiz-file-upload.d.ts +2 -0
  14. package/es/editor/upload/ibiz-file-upload/ibiz-file-upload.mjs +3 -0
  15. package/es/editor/upload/upload-editor.controller.d.ts +4 -0
  16. package/es/editor/upload/upload-editor.controller.mjs +15 -1
  17. package/es/editor/upload/use/use-van-upload.d.ts +1 -0
  18. package/es/editor/upload/use/use-van-upload.mjs +8 -2
  19. package/es/util/directive/loading.mjs +1 -0
  20. package/lib/editor/dropdown-list/ibiz-cascader-dropdown/ibiz-cascader-dropdown.cjs +10 -3
  21. package/lib/editor/upload/ibiz-file-upload/ibiz-file-upload.cjs +3 -0
  22. package/lib/editor/upload/upload-editor.controller.cjs +15 -1
  23. package/lib/editor/upload/use/use-van-upload.cjs +8 -2
  24. package/lib/util/directive/loading.cjs +1 -0
  25. package/package.json +1 -1
  26. package/dist/index-q0SBDv6c.js.map +0 -1
  27. package/es/editor/upload/use/use-ibiz-upload.d.ts +0 -95
  28. package/es/editor/upload/use/use-ibiz-upload.mjs +0 -170
  29. package/lib/editor/upload/use/use-ibiz-upload.cjs +0 -175
@@ -1,2 +1,2 @@
1
- System.register(["vue","@ibiz-template/vue3-util","./quill-sraxwYmv.js","@ibiz-template/core","lodash-es","./index-q0SBDv6c.js","vant","ramda","@ibiz-template/runtime","@floating-ui/dom","vue-router","pinia","qx-util","dayjs","vuedraggable","qs","vue-i18n","@ibiz-template/devtool","@ibiz-template/model-helper"],function(B){"use strict";var C,a,h,n,u,y,z,w,x,T,E,U,k,H;return{setters:[function(t){C=t.defineComponent,a=t.ref,h=t.watch,n=t.createVNode,u=t.resolveComponent,y=t.isVNode,z=t.nextTick},function(t){w=t.getHtmlProps,x=t.getEditorEmits,T=t.useNamespace},function(t){E=t.Q},function(t){U=t.getAppCookie,k=t.CoreConst,H=t.base64ToBlob},null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],execute:function(){function t(e){return typeof e=="function"||Object.prototype.toString.call(e)==="[object Object]"&&!y(e)}const I=B("default",C({name:"IBizQuill",props:w(),emits:x(),setup(e,{emit:r}){const d=T("quill"),l=e.controller,m=a(null),q=ibiz.i18n.getLang();let i=null;const L=a({[`${ibiz.env.tokenHeader}Authorization`]:`${ibiz.env.tokenPrefix}Bearer ${U(k.TOKEN)}`}),M=a(""),N=a(""),b=a(!1),g=a(!1),f=a(""),O=a(!0),P=o=>{const s=o.ops.find(c=>c.insert&&c.insert.image);if(s)return s.insert.image},j=()=>l.valueMode==="text"?i.getText():i.getSemanticHTML(),Q=async o=>{const s=H(o),c=await ibiz.util.file.fileUpload(M.value,s,L.value),p=N.value.replace("%fileId%",c.fileid),v=j();f.value=v.replace(o,p)},V=()=>{if(!m.value)return;const o=l.showToolbar?"snow":"bubble";i=new E(m.value,{theme:o,modules:l.modules,readOnly:e.disabled||e.readonly,placeholder:l.placeHolder}),i.on("text-change",(s,c,p)=>{if(p==="user"){const v=P(s);if(v&&l.imageMode==="file"){Q(v);return}f.value=j()}}),l.valueMode==="text"&&i.setText(e.value||"")};return h(()=>[e.disabled,e.readonly],()=>{i&&(e.disabled||e.readonly?i.enable(!1):i.enable())},{immediate:!0}),h(()=>e.data,o=>{if(o){const s=ibiz.util.file.calcFileUpDownUrl(l.context,l.params,o,l.editorParams);M.value=s.uploadUrl,N.value=s.downloadUrl}},{immediate:!0,deep:!0}),h(()=>e.value,()=>{!i||!e.value||(f.value=e.value,l.valueMode==="text"?i.setText(e.value):(g.value=!0,z(()=>{g.value=!1})))},{immediate:!0}),{ns:d,c:l,lang:q,editing:b,updating:g,editorRef:m,isCollapse:O,handleEdit:()=>{i||V()},handleCancel:()=>{b.value=!1},handleConfirm:()=>{r("change",f.value),b.value=!1}}},render(){let e,r;return n("div",{class:[this.ns.b(),this.disabled?this.ns.m("disabled"):"",this.readonly?this.ns.m("readonly"):"",this.ns.m(this.lang.toLowerCase())]},[!this.updating&&n(u("iBizQuillPreview"),{value:this.value,controller:this.controller,disabled:this.disabled,readonly:this.readonly,showCollapse:this.c.showCollapse,defaultHeight:this.c.defaultHeight,isCollapse:this.isCollapse,onEdit:()=>{this.editing=!0},onCollapse:d=>{this.isCollapse=d}},null),n(u("van-action-sheet"),{show:this.editing,"onUpdate:show":d=>this.editing=d,teleport:"body",class:[this.ns.e("popup"),this.ns.m(this.lang.toLowerCase())],onOpened:this.handleEdit},{default:()=>[n("div",{class:this.ns.e("content")},[n("div",{ref:"editorRef"},[this.controller.valueMode==="html"?n("div",{innerHTML:this.value},null):null])]),n("div",{class:this.ns.e("footer")},[n(u("van-button"),{class:this.ns.e("cancel"),onClick:this.handleCancel},t(e=ibiz.i18n.t("editor.common.cancel"))?e:{default:()=>[e]}),n(u("van-button"),{class:this.ns.e("confirm"),onClick:this.handleConfirm,type:"primary"},t(r=ibiz.i18n.t("editor.common.confirm"))?r:{default:()=>[r]})])]})])}}))}}});
2
- //# sourceMappingURL=quill-editor-5QOfComp.js.map
1
+ System.register(["vue","@ibiz-template/vue3-util","./quill-7fiycnP7.js","@ibiz-template/core","lodash-es","./index-yGM1h2Ma.js","vant","ramda","@ibiz-template/runtime","@floating-ui/dom","vue-router","pinia","qx-util","dayjs","vuedraggable","qs","vue-i18n","@ibiz-template/devtool","@ibiz-template/model-helper"],function(B){"use strict";var C,a,h,n,u,y,z,w,x,T,E,U,k,H;return{setters:[function(t){C=t.defineComponent,a=t.ref,h=t.watch,n=t.createVNode,u=t.resolveComponent,y=t.isVNode,z=t.nextTick},function(t){w=t.getHtmlProps,x=t.getEditorEmits,T=t.useNamespace},function(t){E=t.Q},function(t){U=t.getAppCookie,k=t.CoreConst,H=t.base64ToBlob},null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],execute:function(){function t(e){return typeof e=="function"||Object.prototype.toString.call(e)==="[object Object]"&&!y(e)}const I=B("default",C({name:"IBizQuill",props:w(),emits:x(),setup(e,{emit:r}){const d=T("quill"),l=e.controller,m=a(null),q=ibiz.i18n.getLang();let i=null;const L=a({[`${ibiz.env.tokenHeader}Authorization`]:`${ibiz.env.tokenPrefix}Bearer ${U(k.TOKEN)}`}),M=a(""),N=a(""),b=a(!1),g=a(!1),f=a(""),O=a(!0),P=o=>{const s=o.ops.find(c=>c.insert&&c.insert.image);if(s)return s.insert.image},j=()=>l.valueMode==="text"?i.getText():i.getSemanticHTML(),Q=async o=>{const s=H(o),c=await ibiz.util.file.fileUpload(M.value,s,L.value),p=N.value.replace("%fileId%",c.fileid),v=j();f.value=v.replace(o,p)},V=()=>{if(!m.value)return;const o=l.showToolbar?"snow":"bubble";i=new E(m.value,{theme:o,modules:l.modules,readOnly:e.disabled||e.readonly,placeholder:l.placeHolder}),i.on("text-change",(s,c,p)=>{if(p==="user"){const v=P(s);if(v&&l.imageMode==="file"){Q(v);return}f.value=j()}}),l.valueMode==="text"&&i.setText(e.value||"")};return h(()=>[e.disabled,e.readonly],()=>{i&&(e.disabled||e.readonly?i.enable(!1):i.enable())},{immediate:!0}),h(()=>e.data,o=>{if(o){const s=ibiz.util.file.calcFileUpDownUrl(l.context,l.params,o,l.editorParams);M.value=s.uploadUrl,N.value=s.downloadUrl}},{immediate:!0,deep:!0}),h(()=>e.value,()=>{!i||!e.value||(f.value=e.value,l.valueMode==="text"?i.setText(e.value):(g.value=!0,z(()=>{g.value=!1})))},{immediate:!0}),{ns:d,c:l,lang:q,editing:b,updating:g,editorRef:m,isCollapse:O,handleEdit:()=>{i||V()},handleCancel:()=>{b.value=!1},handleConfirm:()=>{r("change",f.value),b.value=!1}}},render(){let e,r;return n("div",{class:[this.ns.b(),this.disabled?this.ns.m("disabled"):"",this.readonly?this.ns.m("readonly"):"",this.ns.m(this.lang.toLowerCase())]},[!this.updating&&n(u("iBizQuillPreview"),{value:this.value,controller:this.controller,disabled:this.disabled,readonly:this.readonly,showCollapse:this.c.showCollapse,defaultHeight:this.c.defaultHeight,isCollapse:this.isCollapse,onEdit:()=>{this.editing=!0},onCollapse:d=>{this.isCollapse=d}},null),n(u("van-action-sheet"),{show:this.editing,"onUpdate:show":d=>this.editing=d,teleport:"body",class:[this.ns.e("popup"),this.ns.m(this.lang.toLowerCase())],onOpened:this.handleEdit},{default:()=>[n("div",{class:this.ns.e("content")},[n("div",{ref:"editorRef"},[this.controller.valueMode==="html"?n("div",{innerHTML:this.value},null):null])]),n("div",{class:this.ns.e("footer")},[n(u("van-button"),{class:this.ns.e("cancel"),onClick:this.handleCancel},t(e=ibiz.i18n.t("editor.common.cancel"))?e:{default:()=>[e]}),n(u("van-button"),{class:this.ns.e("confirm"),onClick:this.handleConfirm,type:"primary"},t(r=ibiz.i18n.t("editor.common.confirm"))?r:{default:()=>[r]})])]})])}}))}}});
2
+ //# sourceMappingURL=quill-editor-Nndlb9WE.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"quill-editor-5QOfComp.js","sources":["../src/editor/html/quill-editor/quill-editor.tsx"],"sourcesContent":["/* eslint-disable import/no-extraneous-dependencies */\nimport { defineComponent, nextTick, Ref, ref, watch } from 'vue';\nimport {\n getHtmlProps,\n getEditorEmits,\n useNamespace,\n} from '@ibiz-template/vue3-util';\nimport 'quill/dist/quill.core.css';\nimport 'quill/dist/quill.snow.css';\nimport 'quill/dist/quill.bubble.css';\nimport Quill from 'quill';\nimport { Delta } from 'quill/core';\nimport { base64ToBlob, CoreConst, getAppCookie } from '@ibiz-template/core';\nimport { HtmlEditorController } from '../html-editor.controller';\nimport './quill-editor.scss';\n\n/**\n * 移动端HTML编辑框\n * @primary\n * @description 基于Quill深度定制可扩展的富文本编辑器,集成文件/图片上传、实时预览及样式配置功能,提供完整的富媒体编辑解决方案。支持编辑器类型包含:`移动端HTML编辑框`\n * @editorparams {name:uploadParams,parameterType:IData,defaultvalue:{},description:上传参数}\n * @editorparams {name:exportParams,parameterType:IData,defaultvalue:{},description:下载参数}\n * @editorparams {name:SHOWTOOLBAR,parameterType:boolean,defaultvalue:true,description:显示工具栏}\n * @editorparams {name:VALUEMODE,parameterType:'text' | 'html',defaultvalue:html,description:值模式,暂时只支持html模式}\n * @editorparams {name:IMAGEMODE,parameterType:'base64' | 'file',defaultvalue:'file',description:图片模式}\n * @editorparams {name:MODULES,parameterType:IData,description:quill配置}\n * @editorparams {name:DEFAULTHEIGHT,parameterType:number,defaultvalue:200,description:收缩时的高度}\n * @editorparams {name:SHOWCOLLAPSE,parameterType:boolean,defaultvalue:true,description:是否显示伸缩按钮}\n * @ignoreprops autoFocus | overflowMode\n * @ignoreemits infoTextChange | enter\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst IBizQuill: any = defineComponent({\n name: 'IBizQuill',\n props: getHtmlProps<HtmlEditorController>(),\n emits: getEditorEmits(),\n setup(props, { emit }) {\n const ns = useNamespace('quill');\n const c: HtmlEditorController = props.controller;\n\n const editorRef = ref(null);\n\n const lang = ibiz.i18n.getLang();\n\n // 编辑器对象\n let quill: Quill | null = null;\n\n // 请求头\n const headers: Ref<IData> = ref({\n [`${ibiz.env.tokenHeader}Authorization`]: `${\n ibiz.env.tokenPrefix\n }Bearer ${getAppCookie(CoreConst.TOKEN)}`,\n });\n\n // 上传文件路径\n const uploadUrl: Ref<string> = ref('');\n\n // 下载文件路径\n const downloadUrl: Ref<string> = ref('');\n\n // 编辑状态\n const editing: Ref<boolean> = ref(false);\n\n // 更新中\n const updating: Ref<boolean> = ref(false);\n\n // 临时数据\n const tempValue: Ref<string> = ref('');\n\n // 是否完全展开\n const isCollapse: Ref<boolean> = ref(true);\n\n const getImage = (delta: Delta) => {\n const item = delta.ops.find(x => x.insert && (x.insert as IData).image);\n if (item) {\n return (item.insert as IData).image;\n }\n };\n\n const getValue = () => {\n if (c.valueMode === 'text') {\n return quill!.getText();\n }\n return quill!.getSemanticHTML();\n };\n\n // 处理图片上传(文件模式)\n const handleUpload = async (image: string) => {\n const blob = base64ToBlob(image);\n const file = await ibiz.util.file.fileUpload(\n uploadUrl.value,\n blob,\n headers.value,\n );\n const url = downloadUrl.value.replace('%fileId%', file.fileid);\n const value = getValue();\n tempValue.value = value.replace(image, url);\n };\n\n const init = () => {\n if (!editorRef.value) {\n return;\n }\n const theme = c.showToolbar ? 'snow' : 'bubble';\n quill = new Quill(editorRef.value, {\n theme,\n modules: c.modules,\n readOnly: props.disabled || props.readonly,\n placeholder: c.placeHolder,\n });\n quill.on('text-change', (delta, oldDelta, source) => {\n if (source === 'user') {\n const image = getImage(delta);\n if (image && c.imageMode === 'file') {\n handleUpload(image);\n return;\n }\n tempValue.value = getValue();\n }\n });\n if (c.valueMode === 'text') {\n quill.setText(props.value || '');\n }\n };\n\n watch(\n () => [props.disabled, props.readonly],\n () => {\n if (!quill) {\n return;\n }\n if (props.disabled || props.readonly) {\n quill.enable(false);\n } else {\n quill.enable();\n }\n },\n { immediate: true },\n );\n\n // data响应式变更基础路径\n watch(\n () => props.data,\n newVal => {\n if (newVal) {\n const urls = ibiz.util.file.calcFileUpDownUrl(\n c.context,\n c.params,\n newVal,\n c.editorParams,\n );\n uploadUrl.value = urls.uploadUrl;\n downloadUrl.value = urls.downloadUrl;\n }\n },\n { immediate: true, deep: true },\n );\n\n watch(\n () => props.value,\n () => {\n if (!quill || !props.value) {\n return;\n }\n tempValue.value = props.value;\n if (c.valueMode === 'text') {\n quill.setText(props.value);\n } else {\n updating.value = true;\n nextTick(() => {\n updating.value = false;\n });\n }\n },\n { immediate: true },\n );\n\n // 展开编辑\n const handleEdit = () => {\n if (!quill) {\n init();\n }\n };\n\n // 取消编辑\n const handleCancel = () => {\n editing.value = false;\n };\n\n // 确认编辑\n const handleConfirm = () => {\n emit('change', tempValue.value);\n editing.value = false;\n };\n\n return {\n ns,\n c,\n lang,\n editing,\n updating,\n editorRef,\n isCollapse,\n handleEdit,\n handleCancel,\n handleConfirm,\n };\n },\n render() {\n return (\n <div\n class={[\n this.ns.b(),\n this.disabled ? this.ns.m('disabled') : '',\n this.readonly ? this.ns.m('readonly') : '',\n this.ns.m(this.lang.toLowerCase()),\n ]}\n >\n {!this.updating && (\n <iBizQuillPreview\n value={this.value}\n controller={this.controller}\n disabled={this.disabled}\n readonly={this.readonly}\n showCollapse={this.c.showCollapse}\n defaultHeight={this.c.defaultHeight}\n isCollapse={this.isCollapse}\n onEdit={() => {\n this.editing = true;\n }}\n onCollapse={(val: boolean) => {\n this.isCollapse = val;\n }}\n />\n )}\n <van-action-sheet\n v-model:show={this.editing}\n teleport='body'\n class={[this.ns.e('popup'), this.ns.m(this.lang.toLowerCase())]}\n onOpened={this.handleEdit}\n >\n <div class={this.ns.e('content')}>\n <div ref='editorRef'>\n {this.controller.valueMode === 'html' ? (\n <div v-html={this.value}></div>\n ) : null}\n </div>\n </div>\n <div class={this.ns.e('footer')}>\n <van-button class={this.ns.e('cancel')} onClick={this.handleCancel}>\n {ibiz.i18n.t('editor.common.cancel')}\n </van-button>\n <van-button\n class={this.ns.e('confirm')}\n onClick={this.handleConfirm}\n type='primary'\n >\n {ibiz.i18n.t('editor.common.confirm')}\n </van-button>\n </div>\n </van-action-sheet>\n </div>\n );\n },\n});\n\nexport default IBizQuill;\n"],"names":["s","_isVNode","IBizQuill","exports","defineComponent","getHtmlProps","getEditorEmits","props","emit","ns","useNamespace","c","editorRef","ref","lang","quill","headers","getAppCookie","CoreConst","uploadUrl","downloadUrl","updating","tempValue","isCollapse","delta","item","image","tokenHeader","file","blob","value","getValue","url","init","theme","source","getImage","ops","valueMode","watch","ibiz","newVal","Quill","urls","readOnly","nextTick","editing","immediate","deep","_slot","_slot2","_createVNode","_resolveComponent","handleEdit","val","$event","handleCancel","handleConfirm","_isSlot","render"],"mappings":"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"}
1
+ {"version":3,"file":"quill-editor-Nndlb9WE.js","sources":["../src/editor/html/quill-editor/quill-editor.tsx"],"sourcesContent":["/* eslint-disable import/no-extraneous-dependencies */\nimport { defineComponent, nextTick, Ref, ref, watch } from 'vue';\nimport {\n getHtmlProps,\n getEditorEmits,\n useNamespace,\n} from '@ibiz-template/vue3-util';\nimport 'quill/dist/quill.core.css';\nimport 'quill/dist/quill.snow.css';\nimport 'quill/dist/quill.bubble.css';\nimport Quill from 'quill';\nimport { Delta } from 'quill/core';\nimport { base64ToBlob, CoreConst, getAppCookie } from '@ibiz-template/core';\nimport { HtmlEditorController } from '../html-editor.controller';\nimport './quill-editor.scss';\n\n/**\n * 移动端HTML编辑框\n * @primary\n * @description 基于Quill深度定制可扩展的富文本编辑器,集成文件/图片上传、实时预览及样式配置功能,提供完整的富媒体编辑解决方案。支持编辑器类型包含:`移动端HTML编辑框`\n * @editorparams {name:uploadParams,parameterType:IData,defaultvalue:{},description:上传参数}\n * @editorparams {name:exportParams,parameterType:IData,defaultvalue:{},description:下载参数}\n * @editorparams {name:SHOWTOOLBAR,parameterType:boolean,defaultvalue:true,description:显示工具栏}\n * @editorparams {name:VALUEMODE,parameterType:'text' | 'html',defaultvalue:html,description:值模式,暂时只支持html模式}\n * @editorparams {name:IMAGEMODE,parameterType:'base64' | 'file',defaultvalue:'file',description:图片模式}\n * @editorparams {name:MODULES,parameterType:IData,description:quill配置}\n * @editorparams {name:DEFAULTHEIGHT,parameterType:number,defaultvalue:200,description:收缩时的高度}\n * @editorparams {name:SHOWCOLLAPSE,parameterType:boolean,defaultvalue:true,description:是否显示伸缩按钮}\n * @ignoreprops autoFocus | overflowMode\n * @ignoreemits infoTextChange | enter\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst IBizQuill: any = defineComponent({\n name: 'IBizQuill',\n props: getHtmlProps<HtmlEditorController>(),\n emits: getEditorEmits(),\n setup(props, { emit }) {\n const ns = useNamespace('quill');\n const c: HtmlEditorController = props.controller;\n\n const editorRef = ref(null);\n\n const lang = ibiz.i18n.getLang();\n\n // 编辑器对象\n let quill: Quill | null = null;\n\n // 请求头\n const headers: Ref<IData> = ref({\n [`${ibiz.env.tokenHeader}Authorization`]: `${\n ibiz.env.tokenPrefix\n }Bearer ${getAppCookie(CoreConst.TOKEN)}`,\n });\n\n // 上传文件路径\n const uploadUrl: Ref<string> = ref('');\n\n // 下载文件路径\n const downloadUrl: Ref<string> = ref('');\n\n // 编辑状态\n const editing: Ref<boolean> = ref(false);\n\n // 更新中\n const updating: Ref<boolean> = ref(false);\n\n // 临时数据\n const tempValue: Ref<string> = ref('');\n\n // 是否完全展开\n const isCollapse: Ref<boolean> = ref(true);\n\n const getImage = (delta: Delta) => {\n const item = delta.ops.find(x => x.insert && (x.insert as IData).image);\n if (item) {\n return (item.insert as IData).image;\n }\n };\n\n const getValue = () => {\n if (c.valueMode === 'text') {\n return quill!.getText();\n }\n return quill!.getSemanticHTML();\n };\n\n // 处理图片上传(文件模式)\n const handleUpload = async (image: string) => {\n const blob = base64ToBlob(image);\n const file = await ibiz.util.file.fileUpload(\n uploadUrl.value,\n blob,\n headers.value,\n );\n const url = downloadUrl.value.replace('%fileId%', file.fileid);\n const value = getValue();\n tempValue.value = value.replace(image, url);\n };\n\n const init = () => {\n if (!editorRef.value) {\n return;\n }\n const theme = c.showToolbar ? 'snow' : 'bubble';\n quill = new Quill(editorRef.value, {\n theme,\n modules: c.modules,\n readOnly: props.disabled || props.readonly,\n placeholder: c.placeHolder,\n });\n quill.on('text-change', (delta, oldDelta, source) => {\n if (source === 'user') {\n const image = getImage(delta);\n if (image && c.imageMode === 'file') {\n handleUpload(image);\n return;\n }\n tempValue.value = getValue();\n }\n });\n if (c.valueMode === 'text') {\n quill.setText(props.value || '');\n }\n };\n\n watch(\n () => [props.disabled, props.readonly],\n () => {\n if (!quill) {\n return;\n }\n if (props.disabled || props.readonly) {\n quill.enable(false);\n } else {\n quill.enable();\n }\n },\n { immediate: true },\n );\n\n // data响应式变更基础路径\n watch(\n () => props.data,\n newVal => {\n if (newVal) {\n const urls = ibiz.util.file.calcFileUpDownUrl(\n c.context,\n c.params,\n newVal,\n c.editorParams,\n );\n uploadUrl.value = urls.uploadUrl;\n downloadUrl.value = urls.downloadUrl;\n }\n },\n { immediate: true, deep: true },\n );\n\n watch(\n () => props.value,\n () => {\n if (!quill || !props.value) {\n return;\n }\n tempValue.value = props.value;\n if (c.valueMode === 'text') {\n quill.setText(props.value);\n } else {\n updating.value = true;\n nextTick(() => {\n updating.value = false;\n });\n }\n },\n { immediate: true },\n );\n\n // 展开编辑\n const handleEdit = () => {\n if (!quill) {\n init();\n }\n };\n\n // 取消编辑\n const handleCancel = () => {\n editing.value = false;\n };\n\n // 确认编辑\n const handleConfirm = () => {\n emit('change', tempValue.value);\n editing.value = false;\n };\n\n return {\n ns,\n c,\n lang,\n editing,\n updating,\n editorRef,\n isCollapse,\n handleEdit,\n handleCancel,\n handleConfirm,\n };\n },\n render() {\n return (\n <div\n class={[\n this.ns.b(),\n this.disabled ? this.ns.m('disabled') : '',\n this.readonly ? this.ns.m('readonly') : '',\n this.ns.m(this.lang.toLowerCase()),\n ]}\n >\n {!this.updating && (\n <iBizQuillPreview\n value={this.value}\n controller={this.controller}\n disabled={this.disabled}\n readonly={this.readonly}\n showCollapse={this.c.showCollapse}\n defaultHeight={this.c.defaultHeight}\n isCollapse={this.isCollapse}\n onEdit={() => {\n this.editing = true;\n }}\n onCollapse={(val: boolean) => {\n this.isCollapse = val;\n }}\n />\n )}\n <van-action-sheet\n v-model:show={this.editing}\n teleport='body'\n class={[this.ns.e('popup'), this.ns.m(this.lang.toLowerCase())]}\n onOpened={this.handleEdit}\n >\n <div class={this.ns.e('content')}>\n <div ref='editorRef'>\n {this.controller.valueMode === 'html' ? (\n <div v-html={this.value}></div>\n ) : null}\n </div>\n </div>\n <div class={this.ns.e('footer')}>\n <van-button class={this.ns.e('cancel')} onClick={this.handleCancel}>\n {ibiz.i18n.t('editor.common.cancel')}\n </van-button>\n <van-button\n class={this.ns.e('confirm')}\n onClick={this.handleConfirm}\n type='primary'\n >\n {ibiz.i18n.t('editor.common.confirm')}\n </van-button>\n </div>\n </van-action-sheet>\n </div>\n );\n },\n});\n\nexport default IBizQuill;\n"],"names":["s","_isVNode","IBizQuill","exports","defineComponent","getHtmlProps","getEditorEmits","props","emit","ns","useNamespace","c","editorRef","ref","lang","quill","headers","getAppCookie","CoreConst","uploadUrl","downloadUrl","updating","tempValue","isCollapse","delta","item","image","tokenHeader","file","blob","value","getValue","url","init","theme","source","getImage","ops","valueMode","watch","ibiz","newVal","Quill","urls","readOnly","nextTick","editing","immediate","deep","_slot","_slot2","_createVNode","_resolveComponent","handleEdit","val","$event","handleCancel","handleConfirm","_isSlot","render"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- System.register(["vue","@ibiz-template/vue3-util","./quill-sraxwYmv.js","lodash-es","./index-q0SBDv6c.js","vant","@ibiz-template/core","ramda","@ibiz-template/runtime","@floating-ui/dom","vue-router","pinia","qx-util","dayjs","vuedraggable","qs","vue-i18n","@ibiz-template/devtool","@ibiz-template/model-helper"],function(k){"use strict";var v,s,p,f,m,l,r,g,C,w;return{setters:[function(e){v=e.defineComponent,s=e.ref,p=e.onMounted,f=e.nextTick,m=e.watch,l=e.createVNode,r=e.resolveComponent},function(e){g=e.getHtmlProps,C=e.useNamespace},function(e){w=e.Q},null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],execute:function(){const e=k("default",v({name:"IBizQuillPreview",props:{...g(),showCollapse:{type:Boolean},defaultHeight:{type:Number,default:200},isCollapse:{type:Boolean,default:!1}},setup(t,{emit:b}){const H=C("quill-preview"),c=t.controller,i=s(null),B=ibiz.i18n.getLang();let x=null;const h=s(""),o=s("auto"),u=s(!1),I=()=>{i.value&&(x=new w(i.value,{theme:"bubble",modules:c.modules,readOnly:!0,placeholder:c.placeHolder}),c.valueMode==="text"&&x.setText(t.value||""))},d=()=>{if(t.isCollapse&&i.value){const n=i.value.offsetHeight;n<t.defaultHeight?(o.value=`${n}px`,u.value=!1):(o.value=`${t.defaultHeight}px`,u.value=!0)}},P=n=>{if(!n)return;const a=n.querySelectorAll("img");let y=0;a.forEach(z=>{z.addEventListener("load",()=>{const T=z.offsetHeight;y+=T,y>t.defaultHeight&&(o.value=`${t.defaultHeight}px`,u.value=!0)})})};p(()=>{I(),f(()=>{d(),P(i.value)})});const q=()=>{b("edit")},M=()=>{h.value=""},N=n=>{const a=n.target;a&&a.tagName==="IMG"&&(h.value=a.src)},L=()=>{b("collapse",!t.isCollapse),d()},Q=()=>l("div",{class:H.b("collapse-btn"),onClick:L},[l("span",null,[t.isCollapse?ibiz.i18n.t("editor.html.expand"):ibiz.i18n.t("editor.html.collapse")]),t.isCollapse&&l("ion-icon",{name:"caret-down-outline"},null),!t.isCollapse&&l("ion-icon",{name:"caret-up-outline"},null)]);return m(()=>t.value,()=>{d()},{immediate:!0}),{ns:H,lang:B,editorRef:i,previewImage:h,collapseHeight:o,showCollapseBtn:u,handleClick:q,handleContentClick:N,handlePreviewClose:M,renderCollapseBtn:Q}},render(){return l("div",{class:[this.ns.b(),this.disabled?this.ns.m("disabled"):"",this.readonly?this.ns.m("readonly"):"",this.ns.m(this.lang.toLowerCase()),this.showCollapse?this.ns.m("show-collapse"):"",this.ns.is("collapse",this.isCollapse)],style:`--default-height: ${this.collapseHeight}`},[l("div",{ref:"editorRef",onClick:this.handleContentClick},[this.controller.valueMode==="html"?l("div",{innerHTML:this.value},null):null]),!this.readonly&&!this.disabled?l("div",{onClick:this.handleClick,class:this.ns.e("edit")},[l("ion-icon",{name:"create-outline"},null)]):null,this.showCollapse&&this.showCollapseBtn&&this.renderCollapseBtn(),l(r("van-popup"),{class:this.ns.e("image-popup"),show:!!this.previewImage,"close-on-popstate":!0,onClose:this.handlePreviewClose},{default:()=>[l(r("iBizPreviewImage"),{url:this.previewImage},null)]})])}}))}}});
2
- //# sourceMappingURL=quill-editor-preview-65f3RVj0.js.map
1
+ System.register(["vue","@ibiz-template/vue3-util","./quill-7fiycnP7.js","lodash-es","./index-yGM1h2Ma.js","vant","@ibiz-template/core","ramda","@ibiz-template/runtime","@floating-ui/dom","vue-router","pinia","qx-util","dayjs","vuedraggable","qs","vue-i18n","@ibiz-template/devtool","@ibiz-template/model-helper"],function(k){"use strict";var v,s,p,f,m,l,r,g,C,w;return{setters:[function(e){v=e.defineComponent,s=e.ref,p=e.onMounted,f=e.nextTick,m=e.watch,l=e.createVNode,r=e.resolveComponent},function(e){g=e.getHtmlProps,C=e.useNamespace},function(e){w=e.Q},null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],execute:function(){const e=k("default",v({name:"IBizQuillPreview",props:{...g(),showCollapse:{type:Boolean},defaultHeight:{type:Number,default:200},isCollapse:{type:Boolean,default:!1}},setup(t,{emit:b}){const H=C("quill-preview"),c=t.controller,i=s(null),B=ibiz.i18n.getLang();let x=null;const h=s(""),o=s("auto"),u=s(!1),I=()=>{i.value&&(x=new w(i.value,{theme:"bubble",modules:c.modules,readOnly:!0,placeholder:c.placeHolder}),c.valueMode==="text"&&x.setText(t.value||""))},d=()=>{if(t.isCollapse&&i.value){const n=i.value.offsetHeight;n<t.defaultHeight?(o.value=`${n}px`,u.value=!1):(o.value=`${t.defaultHeight}px`,u.value=!0)}},P=n=>{if(!n)return;const a=n.querySelectorAll("img");let y=0;a.forEach(z=>{z.addEventListener("load",()=>{const T=z.offsetHeight;y+=T,y>t.defaultHeight&&(o.value=`${t.defaultHeight}px`,u.value=!0)})})};p(()=>{I(),f(()=>{d(),P(i.value)})});const q=()=>{b("edit")},M=()=>{h.value=""},N=n=>{const a=n.target;a&&a.tagName==="IMG"&&(h.value=a.src)},L=()=>{b("collapse",!t.isCollapse),d()},Q=()=>l("div",{class:H.b("collapse-btn"),onClick:L},[l("span",null,[t.isCollapse?ibiz.i18n.t("editor.html.expand"):ibiz.i18n.t("editor.html.collapse")]),t.isCollapse&&l("ion-icon",{name:"caret-down-outline"},null),!t.isCollapse&&l("ion-icon",{name:"caret-up-outline"},null)]);return m(()=>t.value,()=>{d()},{immediate:!0}),{ns:H,lang:B,editorRef:i,previewImage:h,collapseHeight:o,showCollapseBtn:u,handleClick:q,handleContentClick:N,handlePreviewClose:M,renderCollapseBtn:Q}},render(){return l("div",{class:[this.ns.b(),this.disabled?this.ns.m("disabled"):"",this.readonly?this.ns.m("readonly"):"",this.ns.m(this.lang.toLowerCase()),this.showCollapse?this.ns.m("show-collapse"):"",this.ns.is("collapse",this.isCollapse)],style:`--default-height: ${this.collapseHeight}`},[l("div",{ref:"editorRef",onClick:this.handleContentClick},[this.controller.valueMode==="html"?l("div",{innerHTML:this.value},null):null]),!this.readonly&&!this.disabled?l("div",{onClick:this.handleClick,class:this.ns.e("edit")},[l("ion-icon",{name:"create-outline"},null)]):null,this.showCollapse&&this.showCollapseBtn&&this.renderCollapseBtn(),l(r("van-popup"),{class:this.ns.e("image-popup"),show:!!this.previewImage,"close-on-popstate":!0,onClose:this.handlePreviewClose},{default:()=>[l(r("iBizPreviewImage"),{url:this.previewImage},null)]})])}}))}}});
2
+ //# sourceMappingURL=quill-editor-preview-GUdcFmjn.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"quill-editor-preview-65f3RVj0.js","sources":["../src/editor/html/quill-editor-preview/quill-editor-preview.tsx"],"sourcesContent":["/* eslint-disable import/no-extraneous-dependencies */\nimport { defineComponent, nextTick, onMounted, ref, watch } from 'vue';\nimport { getHtmlProps, useNamespace } from '@ibiz-template/vue3-util';\nimport Quill from 'quill';\nimport { HtmlEditorController } from '../html-editor.controller';\nimport './quill-editor-preview.scss';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst IBizQuillPreview: any = defineComponent({\n name: 'IBizQuillPreview',\n props: {\n ...getHtmlProps<HtmlEditorController>(),\n showCollapse: {\n type: Boolean,\n },\n defaultHeight: {\n type: Number,\n default: 200,\n },\n isCollapse: {\n type: Boolean,\n default: false,\n },\n },\n setup(props, { emit }) {\n const ns = useNamespace('quill-preview');\n const c: HtmlEditorController = props.controller;\n\n const editorRef = ref(null);\n\n const lang = ibiz.i18n.getLang();\n\n // 编辑器对象\n let quill: Quill | null = null;\n\n // 预览图片路径\n const previewImage = ref('');\n\n // 伸缩内容高度\n const collapseHeight = ref('auto');\n\n // 显示伸缩按钮\n const showCollapseBtn = ref(false);\n\n const init = () => {\n if (!editorRef.value) {\n return;\n }\n quill = new Quill(editorRef.value, {\n theme: 'bubble',\n modules: c.modules,\n readOnly: true,\n placeholder: c.placeHolder,\n });\n if (c.valueMode === 'text') {\n quill.setText(props.value || '');\n }\n };\n\n // 重置伸缩高度\n const resetCollapseHeight = () => {\n if (props.isCollapse && editorRef.value) {\n // 收缩时\n const height = (editorRef.value as HTMLElement).offsetHeight;\n // 内容高度低于设置的默认高度时,拿内容高度作为伸缩高度\n if (height < props.defaultHeight) {\n collapseHeight.value = `${height}px`;\n showCollapseBtn.value = false;\n } else {\n collapseHeight.value = `${props.defaultHeight}px`;\n showCollapseBtn.value = true;\n }\n }\n };\n\n // 监听img加载情况\n const watchHtmlImages = (container: HTMLElement | null) => {\n if (!container) return;\n const images = container.querySelectorAll('img');\n let totalHieght = 0;\n images.forEach(image => {\n image.addEventListener('load', () => {\n const height = image.offsetHeight;\n totalHieght += height;\n if (totalHieght > props.defaultHeight) {\n collapseHeight.value = `${props.defaultHeight}px`;\n showCollapseBtn.value = true;\n }\n });\n });\n };\n\n onMounted(() => {\n init();\n nextTick(() => {\n resetCollapseHeight();\n watchHtmlImages(editorRef.value);\n });\n });\n\n const handleClick = () => {\n emit('edit');\n };\n\n const handlePreviewClose = () => {\n previewImage.value = '';\n };\n\n const handleContentClick = (event: MouseEvent) => {\n const target = event.target as HTMLElement;\n if (target && target.tagName === 'IMG') {\n previewImage.value = (target as IData).src;\n }\n };\n\n // 点击伸缩按钮\n const onClick = () => {\n // isCollapse.value = !isCollapse.value;\n emit('collapse', !props.isCollapse);\n resetCollapseHeight();\n };\n\n // 绘制伸缩按钮\n const renderCollapseBtn = () => {\n return (\n <div class={ns.b('collapse-btn')} onClick={onClick}>\n <span>\n {props.isCollapse\n ? ibiz.i18n.t('editor.html.expand')\n : ibiz.i18n.t('editor.html.collapse')}\n </span>\n {props.isCollapse && <ion-icon name='caret-down-outline'></ion-icon>}\n {!props.isCollapse && <ion-icon name='caret-up-outline'></ion-icon>}\n </div>\n );\n };\n\n watch(\n () => props.value,\n () => {\n resetCollapseHeight();\n },\n {\n immediate: true,\n },\n );\n\n return {\n ns,\n lang,\n editorRef,\n previewImage,\n collapseHeight,\n showCollapseBtn,\n handleClick,\n handleContentClick,\n handlePreviewClose,\n renderCollapseBtn,\n };\n },\n render() {\n return (\n <div\n class={[\n this.ns.b(),\n this.disabled ? this.ns.m('disabled') : '',\n this.readonly ? this.ns.m('readonly') : '',\n this.ns.m(this.lang.toLowerCase()),\n this.showCollapse ? this.ns.m('show-collapse') : '',\n this.ns.is('collapse', this.isCollapse),\n ]}\n style={`--default-height: ${this.collapseHeight}`}\n >\n <div ref='editorRef' onClick={this.handleContentClick}>\n {this.controller.valueMode === 'html' ? (\n <div v-html={this.value}></div>\n ) : null}\n </div>\n {!this.readonly && !this.disabled ? (\n <div onClick={this.handleClick} class={this.ns.e('edit')}>\n <ion-icon name='create-outline'></ion-icon>\n </div>\n ) : null}\n {this.showCollapse && this.showCollapseBtn && this.renderCollapseBtn()}\n <van-popup\n class={this.ns.e('image-popup')}\n show={!!this.previewImage}\n close-on-popstate={true}\n onClose={this.handlePreviewClose}\n >\n <iBizPreviewImage url={this.previewImage}></iBizPreviewImage>\n </van-popup>\n </div>\n );\n },\n});\n\nexport default IBizQuillPreview;\n"],"names":["IBizQuillPreview","name","props","getHtmlProps","showCollapse","type","Boolean","defaultHeight","default","isCollapse","emit","setup","ns","ref","c","quill","lang","getLang","showCollapseBtn","init","editorRef","value","theme","modules","height","readOnly","collapseHeight","placeHolder","resetCollapseHeight","container","images","totalHieght","image","onMounted","watchHtmlImages","nextTick","previewImage","handleContentClick","event","target","renderCollapseBtn","_createVNode","handlePreviewClose","watch","onClick","handleClick","immediate","_resolveComponent","render"],"mappings":"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"}
1
+ {"version":3,"file":"quill-editor-preview-GUdcFmjn.js","sources":["../src/editor/html/quill-editor-preview/quill-editor-preview.tsx"],"sourcesContent":["/* eslint-disable import/no-extraneous-dependencies */\nimport { defineComponent, nextTick, onMounted, ref, watch } from 'vue';\nimport { getHtmlProps, useNamespace } from '@ibiz-template/vue3-util';\nimport Quill from 'quill';\nimport { HtmlEditorController } from '../html-editor.controller';\nimport './quill-editor-preview.scss';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst IBizQuillPreview: any = defineComponent({\n name: 'IBizQuillPreview',\n props: {\n ...getHtmlProps<HtmlEditorController>(),\n showCollapse: {\n type: Boolean,\n },\n defaultHeight: {\n type: Number,\n default: 200,\n },\n isCollapse: {\n type: Boolean,\n default: false,\n },\n },\n setup(props, { emit }) {\n const ns = useNamespace('quill-preview');\n const c: HtmlEditorController = props.controller;\n\n const editorRef = ref(null);\n\n const lang = ibiz.i18n.getLang();\n\n // 编辑器对象\n let quill: Quill | null = null;\n\n // 预览图片路径\n const previewImage = ref('');\n\n // 伸缩内容高度\n const collapseHeight = ref('auto');\n\n // 显示伸缩按钮\n const showCollapseBtn = ref(false);\n\n const init = () => {\n if (!editorRef.value) {\n return;\n }\n quill = new Quill(editorRef.value, {\n theme: 'bubble',\n modules: c.modules,\n readOnly: true,\n placeholder: c.placeHolder,\n });\n if (c.valueMode === 'text') {\n quill.setText(props.value || '');\n }\n };\n\n // 重置伸缩高度\n const resetCollapseHeight = () => {\n if (props.isCollapse && editorRef.value) {\n // 收缩时\n const height = (editorRef.value as HTMLElement).offsetHeight;\n // 内容高度低于设置的默认高度时,拿内容高度作为伸缩高度\n if (height < props.defaultHeight) {\n collapseHeight.value = `${height}px`;\n showCollapseBtn.value = false;\n } else {\n collapseHeight.value = `${props.defaultHeight}px`;\n showCollapseBtn.value = true;\n }\n }\n };\n\n // 监听img加载情况\n const watchHtmlImages = (container: HTMLElement | null) => {\n if (!container) return;\n const images = container.querySelectorAll('img');\n let totalHieght = 0;\n images.forEach(image => {\n image.addEventListener('load', () => {\n const height = image.offsetHeight;\n totalHieght += height;\n if (totalHieght > props.defaultHeight) {\n collapseHeight.value = `${props.defaultHeight}px`;\n showCollapseBtn.value = true;\n }\n });\n });\n };\n\n onMounted(() => {\n init();\n nextTick(() => {\n resetCollapseHeight();\n watchHtmlImages(editorRef.value);\n });\n });\n\n const handleClick = () => {\n emit('edit');\n };\n\n const handlePreviewClose = () => {\n previewImage.value = '';\n };\n\n const handleContentClick = (event: MouseEvent) => {\n const target = event.target as HTMLElement;\n if (target && target.tagName === 'IMG') {\n previewImage.value = (target as IData).src;\n }\n };\n\n // 点击伸缩按钮\n const onClick = () => {\n // isCollapse.value = !isCollapse.value;\n emit('collapse', !props.isCollapse);\n resetCollapseHeight();\n };\n\n // 绘制伸缩按钮\n const renderCollapseBtn = () => {\n return (\n <div class={ns.b('collapse-btn')} onClick={onClick}>\n <span>\n {props.isCollapse\n ? ibiz.i18n.t('editor.html.expand')\n : ibiz.i18n.t('editor.html.collapse')}\n </span>\n {props.isCollapse && <ion-icon name='caret-down-outline'></ion-icon>}\n {!props.isCollapse && <ion-icon name='caret-up-outline'></ion-icon>}\n </div>\n );\n };\n\n watch(\n () => props.value,\n () => {\n resetCollapseHeight();\n },\n {\n immediate: true,\n },\n );\n\n return {\n ns,\n lang,\n editorRef,\n previewImage,\n collapseHeight,\n showCollapseBtn,\n handleClick,\n handleContentClick,\n handlePreviewClose,\n renderCollapseBtn,\n };\n },\n render() {\n return (\n <div\n class={[\n this.ns.b(),\n this.disabled ? this.ns.m('disabled') : '',\n this.readonly ? this.ns.m('readonly') : '',\n this.ns.m(this.lang.toLowerCase()),\n this.showCollapse ? this.ns.m('show-collapse') : '',\n this.ns.is('collapse', this.isCollapse),\n ]}\n style={`--default-height: ${this.collapseHeight}`}\n >\n <div ref='editorRef' onClick={this.handleContentClick}>\n {this.controller.valueMode === 'html' ? (\n <div v-html={this.value}></div>\n ) : null}\n </div>\n {!this.readonly && !this.disabled ? (\n <div onClick={this.handleClick} class={this.ns.e('edit')}>\n <ion-icon name='create-outline'></ion-icon>\n </div>\n ) : null}\n {this.showCollapse && this.showCollapseBtn && this.renderCollapseBtn()}\n <van-popup\n class={this.ns.e('image-popup')}\n show={!!this.previewImage}\n close-on-popstate={true}\n onClose={this.handlePreviewClose}\n >\n <iBizPreviewImage url={this.previewImage}></iBizPreviewImage>\n </van-popup>\n </div>\n );\n },\n});\n\nexport default IBizQuillPreview;\n"],"names":["IBizQuillPreview","name","props","getHtmlProps","showCollapse","type","Boolean","defaultHeight","default","isCollapse","emit","setup","ns","ref","c","quill","lang","getLang","showCollapseBtn","init","editorRef","value","theme","modules","height","readOnly","collapseHeight","placeHolder","resetCollapseHeight","container","images","totalHieght","image","onMounted","watchHtmlImages","nextTick","previewImage","handleContentClick","event","target","renderCollapseBtn","_createVNode","handlePreviewClose","watch","onClick","handleClick","immediate","_resolveComponent","render"],"mappings":"0qBAOA,KAAA,mBACMA,MAAAA,CACJC,KAAwB,EACxBC,aAAO,CACFC,KAAAA,OACHC,EACEC,cAAMC,CACP,KAAA,OACDC,QAAAA,GACEF,EACAG,WAAS,CACV,KAAA,QACDC,QAAY,EACVJ,CACAG,EACF,MAAAN,EAAA,CACD,KAAAQ,GACIC,CAAUD,MAAAA,EAAAA,EAAAA,eAAAA,EAAQ,EAAAR,EAAA,WACfU,EAAiBC,EAAA,MACjBC,EAA+B,KAAW,KAAA,QAAA,EAEhD,IAAAC,EAAe,KAEf,MAAMC,IAAiBC,EAAAA,cAEvBC,EAAAL,EAAA,EAAA,EACIE,EAA0B,IAAA,4BAK9B,MAAA,SACA,QAAoB,EAAA,oBAEpB,YAAA,EAAA,WACA,CAAA,EAEMI,EAAAA,YAAa,QACjBJ,EAAKK,QAAUC,EAAO,OAAA,EAAA,EAEtB,EACAN,EAA2B,KACzBO,GAAAA,EAAe,YAAAF,EAAA,MAAA,CACfG,MAAOC,EAAWJ,EAAA,MAAA,aAClBK,EAAcvB,EAAA,eACHwB,EAAIC,MAAAA,GAAAA,CAAAA,KACfT,EAAA,MAAA,KAEKQ,EAASxB,MAAW,GAAAA,EAAO,aAAA,KAClCgB,EAAA,MAAA,IAGF,EACMU,EAAmBC,GAAS,CAChC,GAAI3B,GACF,OACA,MAAA4B,EAAgBV,EAAAA,iBAA4C,KAAA,EAC5D,IAAAW,EAAA,EACAD,EAAU,QAAQE,IAChBN,EAAAA,iBAAwB,WAAY,CACpCR,MAAeM,EAAAQ,EAAM,aAChBD,GAAAP,EACLE,EAAoBxB,kBACLwB,EAAM,MAAO,GAAAxB,EAAA,aAAA,KAC9BgB,EAAA,MAAA,IAEH,GAED,EACAe,EAAMC,IAAAA,CACJf,IACAgB,MAAeN,CACXE,IACJD,EAAeE,EAAS,KAAA,CACtBA,CAAAA,CACE,CAAA,EACAD,MAAAA,MAAqB,CACrBrB,EAAA,MAAe,CACbgB,IACqB,IAAO,CAC9BU,EAAA,MAAA,EACF,EACAC,EAAAC,GAAA,CACH,MAAAC,EAAAD,EAAA,OAEDL,GAAgBM,EAAA,UAAA,QACdpB,EAAM,MAAAoB,EAAA,IAEJX,EACAM,EAAAA,IAAgBd,CAClBV,EAAE,WAAA,CAAAR,EAAA,UAAA,EACF0B,KAGIY,EAAQ,IACbC,EAAA,MAAA,CAEKC,MAAAA,EAAAA,EAAAA,cAA2B,EACnB,QAACrB,GACd,CAAAoB,EAAA,OAAA,KAAA,CAAAvC,EAAA,WAAA,KAAA,KAAA,EAAA,oBAAA,EAAA,KAAA,KAAA,EAAA,sBAAA,CAAA,CAAA,EAAAA,EAAA,YAAAuC,EAAA,WAAA,CAEKJ,KAAAA,oBACJ,EAAA,IAAY,EAAA,CAAAnC,EAAQ,YAAsBuC,EAAA,WAAA,CAC1C,KAAU,kBACRL,EAAAA,IAAAA,CAAAA,CAAAA,EAEJ,OAAAO,EAAC,IAAAzC,EAAA,MAAA,IAAA,IAED,EAAA,CACM0C,UAAO,EACX,CAAA,EACK,CACLhB,GAAAA,EACD,KAAAZ,cAED,aAAAoB,EACMI,eAAAA,EACJ,gBAAAtB,EAAA,YAAA2B,uBACoD,mBAAAH,EAM/B,kBAAAF,CAAA,CACC,UAAiD,CAGzE,OAACC,EAAA,MAAA,CAEDE,MACQzC,CAAAA,KAAK,GAACmB,EAAK,EACjB,KAAM,SAAA,KAAA,GAAA,EAAA,UAAA,EAAA,GAAA,KAAA,SAAA,KAAA,GAAA,EAAA,UAAA,EAAA,GAAA,KAAA,GAAA,EAAA,KAAA,KAAA,YAAA,CAAA,EAAA,KAAA,aAAA,KAAA,GAAA,EAAA,eAAA,EAAA,GAAA,KAAA,GAAA,GAAA,WAAA,KAAA,UAAA,CAAA,EACJO,MAAAA,qBAAqB,KAAA,cAAA,EACvB,EACA,CAAAa,EAAA,MAAA,CACEK,IAAAA,YAEH,QAAA,KAAA,oBAEM,CAAA,KAAA,WAAA,YAAA,OAAAL,EAAA,MAAA,CACL7B,UAAE,KAAA,OACE,IAAA,EAAA,IAAA,CAAA,EAAA,CAAA,KAAA,UAAA,CAAA,KAAA,SAAA6B,EAAA,MAAA,CACJrB,QAAS,KAAA,YACTgB,MAAY,KAAA,GAAA,EAAA,MAAA,GACE,CAAAK,EAAA,WAAA,CACdvB,KAAe,kBACJ,IAAA,CAAA,CAAA,EAAA,KAAA,KAAA,cAAA,KAAA,iBAAA,KAAA,kBAAA,EAAAuB,EAAAM,EAAA,WAAA,EAAA,CACXV,MAAkB,KAAA,GAAA,EAAA,aAAA,EAClBK,KAAkB,CAAA,CAAA,KAAA,aAClBF,oBAAAA,GACD,QAAA,KAAA,oBACF,CACDQ,QAAS,IAAA,CAAAP,EAAAM,EAAA,kBAAA,EAAA,CACP,IAAA,KAAA,YAAA,EAAA,IAAA,CAAA,GASK,CACO,CAAyC,CAAA,CAAA,CAAA"}
@@ -36,7 +36,7 @@ export declare const IBizCascaderDropdown: import("vue").DefineComponent<{
36
36
  show: Ref<boolean>;
37
37
  treeData: Ref<import("@ibiz-template/core").IApiData[]>;
38
38
  selectValue: Ref<string | string[] | string[][] | null>;
39
- curValue: import("vue").ComputedRef<any>;
39
+ curValue: Ref<string>;
40
40
  onBlur: () => void;
41
41
  onFocus: () => void;
42
42
  openPopup: () => void;
@@ -1,4 +1,4 @@
1
- import { ref, computed, resolveComponent, createVNode, defineComponent } from 'vue';
1
+ import { ref, watch, resolveComponent, createVNode, defineComponent } from 'vue';
2
2
  import { getDropdownProps, getEditorEmits, useNamespace } from '@ibiz-template/vue3-util';
3
3
  import { isNil } from 'ramda';
4
4
  import { IBizCommonRightIcon } from '../../common/right-icon/right-icon.mjs';
@@ -18,6 +18,7 @@ const IBizCascaderDropdown = /* @__PURE__ */ defineComponent({
18
18
  const c = props.controller;
19
19
  const treeData = ref([]);
20
20
  const codeListMap = /* @__PURE__ */ new Map();
21
+ const curValue = ref("");
21
22
  const selectValue = ref(null);
22
23
  const show = ref(false);
23
24
  const onClose = () => {
@@ -57,6 +58,10 @@ const IBizCascaderDropdown = /* @__PURE__ */ defineComponent({
57
58
  pvaluefield
58
59
  } = c.editorParams;
59
60
  treeData.value = transformTreeData(codeList, pvaluefield);
61
+ if (props.value) {
62
+ const item = codeListMap.get(props.value);
63
+ curValue.value = (item == null ? void 0 : item.text) || "";
64
+ }
60
65
  };
61
66
  loadCodeList();
62
67
  const onFinish = ($event) => {
@@ -72,9 +77,11 @@ const IBizCascaderDropdown = /* @__PURE__ */ defineComponent({
72
77
  } = $event;
73
78
  emit("change", value);
74
79
  };
75
- const curValue = computed(() => {
76
- const item = codeListMap.get(props.value || "");
77
- return (item == null ? void 0 : item.text) || "";
80
+ watch(() => props.value, (newVal) => {
81
+ const item = codeListMap.get(newVal || "");
82
+ curValue.value = (item == null ? void 0 : item.text) || "";
83
+ }, {
84
+ immediate: true
78
85
  });
79
86
  const onBlur = () => {
80
87
  emit("blur");
@@ -8,6 +8,7 @@ import { UploadEditorController } from '../upload-editor.controller';
8
8
  * @editorparams {name:accept,parameterType:string,description:允许上传的文件类型,van-uploader组件的accept属性}
9
9
  * @editorparams {name:uploadParams,parameterType:IData,description:上传参数}
10
10
  * @editorparams {name:exportParams,parameterType:IData,description:下载参数}
11
+ * @editorparams {name:showloading,parameterType:boolean,description:是否显示加载动画}
11
12
  * @ignoreprops autoFocus | overflowMode
12
13
  * @ignoreemits blur | focus | enter | infoTextChange
13
14
  *
@@ -44,6 +45,7 @@ export declare const IBizFileUpload: import("vue").DefineComponent<{
44
45
  name: string;
45
46
  url?: string | undefined;
46
47
  }[]>;
48
+ loading: import("vue").Ref<boolean>;
47
49
  onRemove: (file: import("@ibiz-template/core").IApiData) => void;
48
50
  beforeUpload: () => void;
49
51
  onDownload: (file: import("@ibiz-template/core").IApiData) => void;
@@ -17,6 +17,7 @@ const IBizFileUpload = /* @__PURE__ */ defineComponent({
17
17
  uploadUrl,
18
18
  headers,
19
19
  files,
20
+ loading,
20
21
  onRemove,
21
22
  beforeUpload,
22
23
  onDownload,
@@ -52,6 +53,7 @@ const IBizFileUpload = /* @__PURE__ */ defineComponent({
52
53
  uploadUrl,
53
54
  headers,
54
55
  files,
56
+ loading,
55
57
  onRemove,
56
58
  beforeUpload,
57
59
  onDownload,
@@ -77,6 +79,7 @@ const IBizFileUpload = /* @__PURE__ */ defineComponent({
77
79
  }, this.$attrs), {
78
80
  default: () => {
79
81
  return !this.readonly && !this.disabled && createVNode(resolveComponent("van-button"), {
82
+ "loading": this.loading,
80
83
  "class": this.ns.b("button"),
81
84
  "icon": "add-o",
82
85
  "type": "primary"
@@ -27,6 +27,10 @@ export declare class UploadEditorController extends EditorController<IFileUpload
27
27
  * 下载参数
28
28
  */
29
29
  exportParams?: IParams;
30
+ /**
31
+ * 显示加载动画
32
+ */
33
+ showLoading: boolean;
30
34
  /**
31
35
  * 文件类型
32
36
  *
@@ -31,6 +31,10 @@ class UploadEditorController extends EditorController {
31
31
  * 下载参数
32
32
  */
33
33
  __publicField(this, "exportParams");
34
+ /**
35
+ * 显示加载动画
36
+ */
37
+ __publicField(this, "showLoading", false);
34
38
  /**
35
39
  * 文件类型
36
40
  *
@@ -99,7 +103,14 @@ class UploadEditorController extends EditorController {
99
103
  this.multiple = false;
100
104
  }
101
105
  if (this.editorParams) {
102
- const { isDrag, multiple, accept, uploadParams, exportParams } = this.editorParams;
106
+ const {
107
+ isDrag,
108
+ multiple,
109
+ accept,
110
+ uploadParams,
111
+ exportParams,
112
+ showloading
113
+ } = this.editorParams;
103
114
  if (isDrag) {
104
115
  this.isDrag = Boolean(isDrag);
105
116
  }
@@ -109,6 +120,9 @@ class UploadEditorController extends EditorController {
109
120
  if (accept) {
110
121
  this.accept = accept;
111
122
  }
123
+ if (showloading) {
124
+ this.showLoading = Boolean(showloading);
125
+ }
112
126
  if (uploadParams) {
113
127
  try {
114
128
  this.uploadParams = JSON.parse(uploadParams);
@@ -21,6 +21,7 @@ export declare function useVanUpload(props: IParams, valueChange: (_value: strin
21
21
  url?: string | undefined;
22
22
  }[]>;
23
23
  limit: ComputedRef<1 | 9999>;
24
+ loading: Ref<boolean>;
24
25
  onDownload: (file: IData) => void;
25
26
  onError: (...args: IData[]) => never;
26
27
  onRemove: (file: IData) => void;
@@ -9,6 +9,7 @@ function useVanUpload(props, valueChange, c) {
9
9
  });
10
10
  const uploadUrl = ref("");
11
11
  const downloadUrl = ref("");
12
+ const loading = ref(false);
12
13
  watch(
13
14
  () => props.value,
14
15
  (newVal) => {
@@ -92,7 +93,6 @@ function useVanUpload(props, valueChange, c) {
92
93
  emitValue();
93
94
  };
94
95
  const uploadFile = (file) => {
95
- console.log(file);
96
96
  const formData = new FormData();
97
97
  formData.append("file", file.file);
98
98
  return new Promise((resolve, reject) => {
@@ -103,7 +103,6 @@ function useVanUpload(props, valueChange, c) {
103
103
  headers: headers.value
104
104
  }).then((res) => {
105
105
  if (res.status === 200) {
106
- console.log(88, res);
107
106
  onSuccess(res.data);
108
107
  resolve(true);
109
108
  } else {
@@ -116,6 +115,9 @@ function useVanUpload(props, valueChange, c) {
116
115
  });
117
116
  };
118
117
  const afterRead = async (file) => {
118
+ if (c.showLoading) {
119
+ loading.value = true;
120
+ }
119
121
  if (file.length && file.length > 0) {
120
122
  for (let i = 0; i < file.length; i++) {
121
123
  const fi = file[i];
@@ -124,6 +126,9 @@ function useVanUpload(props, valueChange, c) {
124
126
  } else {
125
127
  await uploadFile(file);
126
128
  }
129
+ if (c.showLoading) {
130
+ loading.value = false;
131
+ }
127
132
  };
128
133
  const onDownload = (file) => {
129
134
  const url = file.url || downloadUrl.value.replace("%fileId%", file.id);
@@ -138,6 +143,7 @@ function useVanUpload(props, valueChange, c) {
138
143
  headers,
139
144
  files,
140
145
  limit,
146
+ loading,
141
147
  onDownload,
142
148
  onError,
143
149
  onRemove,
@@ -9,6 +9,7 @@ const createInstance = (el) => {
9
9
  message: `${ibiz.i18n.t("util.loading")}...`,
10
10
  forbidClick: true,
11
11
  teleport: el,
12
+ duration: 0,
12
13
  className: ns.b(),
13
14
  loadingType: "spinner",
14
15
  overlayClass: ns.e("overlay")
@@ -20,6 +20,7 @@ const IBizCascaderDropdown = /* @__PURE__ */ vue.defineComponent({
20
20
  const c = props.controller;
21
21
  const treeData = vue.ref([]);
22
22
  const codeListMap = /* @__PURE__ */ new Map();
23
+ const curValue = vue.ref("");
23
24
  const selectValue = vue.ref(null);
24
25
  const show = vue.ref(false);
25
26
  const onClose = () => {
@@ -59,6 +60,10 @@ const IBizCascaderDropdown = /* @__PURE__ */ vue.defineComponent({
59
60
  pvaluefield
60
61
  } = c.editorParams;
61
62
  treeData.value = transformTreeData(codeList, pvaluefield);
63
+ if (props.value) {
64
+ const item = codeListMap.get(props.value);
65
+ curValue.value = (item == null ? void 0 : item.text) || "";
66
+ }
62
67
  };
63
68
  loadCodeList();
64
69
  const onFinish = ($event) => {
@@ -74,9 +79,11 @@ const IBizCascaderDropdown = /* @__PURE__ */ vue.defineComponent({
74
79
  } = $event;
75
80
  emit("change", value);
76
81
  };
77
- const curValue = vue.computed(() => {
78
- const item = codeListMap.get(props.value || "");
79
- return (item == null ? void 0 : item.text) || "";
82
+ vue.watch(() => props.value, (newVal) => {
83
+ const item = codeListMap.get(newVal || "");
84
+ curValue.value = (item == null ? void 0 : item.text) || "";
85
+ }, {
86
+ immediate: true
80
87
  });
81
88
  const onBlur = () => {
82
89
  emit("blur");
@@ -19,6 +19,7 @@ const IBizFileUpload = /* @__PURE__ */ vue.defineComponent({
19
19
  uploadUrl,
20
20
  headers,
21
21
  files,
22
+ loading,
22
23
  onRemove,
23
24
  beforeUpload,
24
25
  onDownload,
@@ -54,6 +55,7 @@ const IBizFileUpload = /* @__PURE__ */ vue.defineComponent({
54
55
  uploadUrl,
55
56
  headers,
56
57
  files,
58
+ loading,
57
59
  onRemove,
58
60
  beforeUpload,
59
61
  onDownload,
@@ -79,6 +81,7 @@ const IBizFileUpload = /* @__PURE__ */ vue.defineComponent({
79
81
  }, this.$attrs), {
80
82
  default: () => {
81
83
  return !this.readonly && !this.disabled && vue.createVNode(vue.resolveComponent("van-button"), {
84
+ "loading": this.loading,
82
85
  "class": this.ns.b("button"),
83
86
  "icon": "add-o",
84
87
  "type": "primary"
@@ -33,6 +33,10 @@ class UploadEditorController extends runtime.EditorController {
33
33
  * 下载参数
34
34
  */
35
35
  __publicField(this, "exportParams");
36
+ /**
37
+ * 显示加载动画
38
+ */
39
+ __publicField(this, "showLoading", false);
36
40
  /**
37
41
  * 文件类型
38
42
  *
@@ -101,7 +105,14 @@ class UploadEditorController extends runtime.EditorController {
101
105
  this.multiple = false;
102
106
  }
103
107
  if (this.editorParams) {
104
- const { isDrag, multiple, accept, uploadParams, exportParams } = this.editorParams;
108
+ const {
109
+ isDrag,
110
+ multiple,
111
+ accept,
112
+ uploadParams,
113
+ exportParams,
114
+ showloading
115
+ } = this.editorParams;
105
116
  if (isDrag) {
106
117
  this.isDrag = Boolean(isDrag);
107
118
  }
@@ -111,6 +122,9 @@ class UploadEditorController extends runtime.EditorController {
111
122
  if (accept) {
112
123
  this.accept = accept;
113
124
  }
125
+ if (showloading) {
126
+ this.showLoading = Boolean(showloading);
127
+ }
114
128
  if (uploadParams) {
115
129
  try {
116
130
  this.uploadParams = JSON.parse(uploadParams);
@@ -11,6 +11,7 @@ function useVanUpload(props, valueChange, c) {
11
11
  });
12
12
  const uploadUrl = vue.ref("");
13
13
  const downloadUrl = vue.ref("");
14
+ const loading = vue.ref(false);
14
15
  vue.watch(
15
16
  () => props.value,
16
17
  (newVal) => {
@@ -94,7 +95,6 @@ function useVanUpload(props, valueChange, c) {
94
95
  emitValue();
95
96
  };
96
97
  const uploadFile = (file) => {
97
- console.log(file);
98
98
  const formData = new FormData();
99
99
  formData.append("file", file.file);
100
100
  return new Promise((resolve, reject) => {
@@ -105,7 +105,6 @@ function useVanUpload(props, valueChange, c) {
105
105
  headers: headers.value
106
106
  }).then((res) => {
107
107
  if (res.status === 200) {
108
- console.log(88, res);
109
108
  onSuccess(res.data);
110
109
  resolve(true);
111
110
  } else {
@@ -118,6 +117,9 @@ function useVanUpload(props, valueChange, c) {
118
117
  });
119
118
  };
120
119
  const afterRead = async (file) => {
120
+ if (c.showLoading) {
121
+ loading.value = true;
122
+ }
121
123
  if (file.length && file.length > 0) {
122
124
  for (let i = 0; i < file.length; i++) {
123
125
  const fi = file[i];
@@ -126,6 +128,9 @@ function useVanUpload(props, valueChange, c) {
126
128
  } else {
127
129
  await uploadFile(file);
128
130
  }
131
+ if (c.showLoading) {
132
+ loading.value = false;
133
+ }
129
134
  };
130
135
  const onDownload = (file) => {
131
136
  const url = file.url || downloadUrl.value.replace("%fileId%", file.id);
@@ -140,6 +145,7 @@ function useVanUpload(props, valueChange, c) {
140
145
  headers,
141
146
  files,
142
147
  limit,
148
+ loading,
143
149
  onDownload,
144
150
  onError,
145
151
  onRemove,
@@ -11,6 +11,7 @@ const createInstance = (el) => {
11
11
  message: `${ibiz.i18n.t("util.loading")}...`,
12
12
  forbidClick: true,
13
13
  teleport: el,
14
+ duration: 0,
14
15
  className: ns.b(),
15
16
  loadingType: "spinner",
16
17
  overlayClass: ns.e("overlay")
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ibiz-template/mob-vue3-components",
3
- "version": "0.7.41-alpha.11",
3
+ "version": "0.7.41-alpha.12",
4
4
  "description": "移动端组件库(vue3)",
5
5
  "main": "lib/index.cjs",
6
6
  "module": "es/index.mjs",