@maketribe/ms-app 3.2.30 → 3.2.32
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/components/basic/data-tree-select/data-tree-select-options.js +1 -1
- package/dist/cjs/components/basic/data-tree-select/data-tree-select-options.js.map +1 -1
- package/dist/cjs/components/basic/doc-editor/core/element-block.js +2 -0
- package/dist/cjs/components/basic/doc-editor/core/element-block.js.map +1 -1
- package/dist/cjs/components/basic/doc-editor/editor.vue.js +6 -2
- package/dist/cjs/components/basic/doc-editor/editor.vue.js.map +1 -1
- package/dist/cjs/components/basic/doc-editor/plugins/GridPlugin/GridNode.js +2 -4
- package/dist/cjs/components/basic/doc-editor/plugins/GridPlugin/GridNode.js.map +1 -1
- package/dist/cjs/components/basic/doc-editor/plugins/GridPlugin/ModuleGridNode.js +11 -4
- package/dist/cjs/components/basic/doc-editor/plugins/GridPlugin/ModuleGridNode.js.map +1 -1
- package/dist/cjs/index.js +1 -0
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/modules/cms/composables/part-extensions.js +14 -0
- package/dist/cjs/modules/cms/composables/part-extensions.js.map +1 -1
- package/dist/cjs/modules/cms/dataviews/cms-ad-contents/CmsAdContentsForm.js +0 -1
- package/dist/cjs/modules/cms/dataviews/cms-ad-contents/CmsAdContentsForm.js.map +1 -1
- package/dist/cjs/modules/cms/index.js.map +1 -1
- package/dist/cjs/modules/cms/pages/cms-contents/index.vue2.js +36 -25
- package/dist/cjs/modules/cms/pages/cms-contents/index.vue2.js.map +1 -1
- package/dist/cjs/modules/ms/components/rich-text-editor/index.js +2 -6
- package/dist/cjs/modules/ms/components/rich-text-editor/index.js.map +1 -1
- package/dist/cjs/modules/ms/components/rich-text-editor/rich-text-editor-options.js +17 -0
- package/dist/cjs/modules/ms/components/rich-text-editor/rich-text-editor-options.js.map +1 -1
- package/dist/cjs/modules/ms/components/rich-text-editor/rich-text-editor.js +12 -8
- package/dist/cjs/modules/ms/components/rich-text-editor/rich-text-editor.js.map +1 -1
- package/dist/cjs/modules/ms/components/rich-text-editor/skins/ui/ms/skin.js +1 -1
- package/dist/cjs/modules/ms/components/rich-text-editor/skins/ui/ms/skin.js.map +1 -1
- package/dist/cjs/modules/ms/index.js +1 -0
- package/dist/cjs/modules/ms/index.js.map +1 -1
- package/dist/esm/components/basic/data-tree-select/data-tree-select-options.js +1 -1
- package/dist/esm/components/basic/data-tree-select/data-tree-select-options.js.map +1 -1
- package/dist/esm/components/basic/doc-editor/core/element-block.js +2 -0
- package/dist/esm/components/basic/doc-editor/core/element-block.js.map +1 -1
- package/dist/esm/components/basic/doc-editor/editor.vue.js +7 -3
- package/dist/esm/components/basic/doc-editor/editor.vue.js.map +1 -1
- package/dist/esm/components/basic/doc-editor/plugins/GridPlugin/GridNode.js +2 -4
- package/dist/esm/components/basic/doc-editor/plugins/GridPlugin/GridNode.js.map +1 -1
- package/dist/esm/components/basic/doc-editor/plugins/GridPlugin/ModuleGridNode.js +11 -4
- package/dist/esm/components/basic/doc-editor/plugins/GridPlugin/ModuleGridNode.js.map +1 -1
- package/dist/esm/index.js +2 -1
- package/dist/esm/modules/cms/composables/part-extensions.js +14 -0
- package/dist/esm/modules/cms/composables/part-extensions.js.map +1 -1
- package/dist/esm/modules/cms/dataviews/cms-ad-contents/CmsAdContentsForm.js +0 -1
- package/dist/esm/modules/cms/dataviews/cms-ad-contents/CmsAdContentsForm.js.map +1 -1
- package/dist/esm/modules/cms/index.js.map +1 -1
- package/dist/esm/modules/cms/pages/cms-contents/index.vue2.js +37 -26
- package/dist/esm/modules/cms/pages/cms-contents/index.vue2.js.map +1 -1
- package/dist/esm/modules/ms/components/rich-text-editor/index.js +2 -5
- package/dist/esm/modules/ms/components/rich-text-editor/index.js.map +1 -1
- package/dist/esm/modules/ms/components/rich-text-editor/rich-text-editor-options.js +17 -0
- package/dist/esm/modules/ms/components/rich-text-editor/rich-text-editor-options.js.map +1 -1
- package/dist/esm/modules/ms/components/rich-text-editor/rich-text-editor.js +12 -8
- package/dist/esm/modules/ms/components/rich-text-editor/rich-text-editor.js.map +1 -1
- package/dist/esm/modules/ms/components/rich-text-editor/skins/ui/ms/skin.js +1 -1
- package/dist/esm/modules/ms/components/rich-text-editor/skins/ui/ms/skin.js.map +1 -1
- package/dist/esm/modules/ms/index.js +1 -0
- package/dist/esm/modules/ms/index.js.map +1 -1
- package/dist/style/index.css +1 -1
- package/dist/style/modules/ms/components/rich-text-editor/index.css +1 -1
- package/dist/style/modules/ms/index.css +1 -1
- package/dist/style/src/modules/ms/components/rich-text-editor/index.scss +4 -0
- package/dist/types/components/basic/doc-editor/editor.vue.d.ts +9 -0
- package/dist/types/components/basic/doc-editor/index.d.ts +19 -0
- package/dist/types/modules/cms/composables/part-extensions.d.ts +13 -1
- package/dist/types/modules/cms/index.d.ts +2 -2
- package/dist/types/modules/ms/components/rich-text-editor/index.d.ts +39 -0
- package/dist/types/modules/ms/components/rich-text-editor/rich-text-editor-options.d.ts +18 -0
- package/dist/types/modules/ms/components/rich-text-editor/rich-text-editor.d.ts +41 -0
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"element-block.js","sources":["../../../../../../src/components/basic/doc-editor/core/element-block.ts"],"sourcesContent":["\r\n\r\nimport { mergeRegister } from '@lexical/utils'\r\nimport { COMMAND_PRIORITY_LOW,CLICK_COMMAND, LexicalCommand, createCommand, BaseSelection } from 'lexical'\r\nimport { useLexicalComposer,useMounted } from 'lexical-vue'\r\nimport { ref,watch } from 'vue'\r\n\r\nimport { \r\n isNodeSelected,setSelected,clearSelection,\r\n} from './utils'\r\n\r\n/**\r\n * toolsbar的函数\r\n */\r\nexport type SelectElementBlockToolsbarFunction = (selection:BaseSelection|null)=>Array<any>|null;\r\n\r\n/**\r\n * 元素抗选中类型\r\n */\r\nexport type SelectElementBlocktEventType = {\r\n element:HTMLElement,\r\n toolsbars:Array<any>|SelectElementBlockToolsbarFunction\r\n}\r\n\r\n/**\r\n * 选中元素快\r\n */\r\nexport const SELECTED_ELEMENTBLOCK_COMMAND: LexicalCommand<SelectElementBlocktEventType|null> = createCommand('SELECTED_ELEMENTBLOCK_COMMAND')\r\n\r\n/**\r\n * 移除元素快\r\n */\r\nexport const REMOVE_ELEMENTBLOCK_COMMAND: LexicalCommand<undefined|null> = createCommand('REMOVE_ELEMENTBLOCK_COMMAND')\r\n\r\n/**\r\n * 更新模块工具条位置信息\r\n */\r\nexport const UPDATE_ELEMENTBLOCK_TOOLBAR_POS_COMMAND: LexicalCommand<undefined|null> = createCommand('UPDATE_ELEMENTBLOCK_TOOLBAR_POS_COMMAND')\r\n\r\n\r\n\r\n/**\r\n * 判断选中的方法\r\n */\r\nexport type SelectExistFunc = (el:HTMLElement)=>HTMLElement|null\r\n\r\n/**\r\n * 判断选中的方法\r\n */\r\nexport type ElementSelectionHandle = (el:HTMLElement)=>undefined\r\n\r\n/**\r\n * 使用元素模块激活\r\n */\r\nexport const useElementBlockActive = (func:SelectExistFunc,selectionHandle:ElementSelectionHandle, unSelectionHandle:ElementSelectionHandle)=>{\r\n\r\n const editor = useLexicalComposer()\r\n\r\n let curSelectEl:HTMLElement|null = null\r\n \r\n // 编辑器挂载\r\n useMounted(()=>{\r\n // 注册事件\r\n return mergeRegister(\r\n // 点击选中\r\n editor.registerCommand<MouseEvent>(CLICK_COMMAND,(event) => {\r\n \r\n const el = func(event.target as HTMLElement);\r\n const nodeKey = el?.getAttribute(\"node-key\");\r\n\r\n // 不为null的话则视为点击选中\r\n if(nodeKey){\r\n \r\n event.preventDefault();\r\n\r\n selectionHandle(el as HTMLElement)\r\n\r\n if(curSelectEl && curSelectEl != el){\r\n unSelectionHandle(curSelectEl);\r\n }\r\n curSelectEl = el;\r\n return true;\r\n }\r\n else{\r\n curSelectEl && unSelectionHandle(curSelectEl);\r\n curSelectEl = null;\r\n }\r\n \r\n return false;\r\n }, COMMAND_PRIORITY_LOW)\r\n )\r\n })\r\n\r\n}\r\n\r\n/**\r\n * 使用元素块选中\r\n */\r\nexport const useElementBlockSelection = (func:SelectExistFunc,toolsbars:Array<any>|SelectElementBlockToolsbarFunction)=>{\r\n\r\n const editor = useLexicalComposer()\r\n const isSelected = ref(false)\r\n const curSelectKey = ref<any>(null)\r\n const curSelectEl = ref<any>(null)\r\n const curSelectPos = ref<any>(null)\r\n // 更新选中框\r\n const updateActiveBox = (el:HTMLElement|null):undefined=>{\r\n if(el){\r\n const selectRect = el.getBoundingClientRect();\r\n curSelectPos.value = {\r\n top:`${selectRect.y}px`,left:`${selectRect.x}px`,\r\n width:`${selectRect.width}px`,height:`${selectRect.height}px`\r\n };\r\n }\r\n }\r\n // 更新选中\r\n const updateActiveViewState = (el:HTMLElement|null):undefined=>{\r\n \r\n if(el){\r\n\r\n updateActiveBox(el);\r\n editor.dispatchCommand(SELECTED_ELEMENTBLOCK_COMMAND,{ \r\n element:curSelectEl.value,\r\n toolsbars:toolsbars\r\n });\r\n }\r\n else{\r\n curSelectEl.value = null;\r\n curSelectKey.value = null;\r\n curSelectPos.value = null;\r\n editor.dispatchCommand(SELECTED_ELEMENTBLOCK_COMMAND,null);\r\n }\r\n }\r\n\r\n // 设置选中\r\n const setSelection = async (nodeKey:string,el:HTMLElement|null|undefined)=>{\r\n\r\n // 没来得及取消的则先取消\r\n if(isSelected.value){ \r\n isSelected.value = false;\r\n await clearSelection(editor);\r\n }\r\n // 稍微停顿下\r\n await new Promise(reslove=>setTimeout(reslove, 10));\r\n await setSelected(editor,true,nodeKey);\r\n curSelectEl.value = el == null ? editor.getElementByKey(nodeKey) : el;\r\n curSelectKey.value = nodeKey;\r\n isSelected.value = isNodeSelected(editor, nodeKey);\r\n }\r\n // 是否选中\r\n watch(isSelected,(state)=>{\r\n if(state){\r\n updateActiveViewState(state ? curSelectEl.value : null)\r\n }\r\n else{\r\n updateActiveViewState(null)\r\n }\r\n })\r\n \r\n // 编辑器挂载\r\n useMounted(()=>{\r\n // 注册事件\r\n return mergeRegister(\r\n // 更新选中状态\r\n editor.registerUpdateListener(() => {\r\n \r\n isSelected.value = isNodeSelected(editor, curSelectKey.value);\r\n setTimeout(()=>updateActiveBox(curSelectEl.value),10)\r\n \r\n }),\r\n // 点击选中\r\n editor.registerCommand<MouseEvent>(CLICK_COMMAND,(event) => {\r\n \r\n const el = func(event.target as HTMLElement);\r\n const nodeKey = el?.getAttribute(\"node-key\");\r\n\r\n // 不为null的话则视为点击选中\r\n if(nodeKey != null){\r\n \r\n event.preventDefault();\r\n \r\n if (!event.shiftKey) { \r\n // 先取消\r\n clearSelection(editor).then(()=>{\r\n // 设置选中\r\n setSelection(nodeKey,el)\r\n })\r\n }\r\n else{\r\n // 设置选中\r\n setSelection(nodeKey,el)\r\n }\r\n\r\n return true;\r\n }\r\n \r\n return false;\r\n }, COMMAND_PRIORITY_LOW)\r\n )\r\n })\r\n\r\n\r\n return { isSelected,setSelection, curSelectKey,curSelectPos };\r\n\r\n}\r\n"],"names":[],"mappings":";;;;;AA2Ba,MAAA,gCAAmF,cAAc,+BAA+B;AAKhI,MAAA,8BAA8D,cAAc,6BAA6B;AAKzG,MAAA,0CAA0E,cAAc,yCAAyC;AA6DjI,MAAA,2BAA2B,CAAC,MAAqB,cAA0D;AAEtH,QAAM,SAAS;AACT,QAAA,aAAa,IAAI,KAAK;AACtB,QAAA,eAAe,IAAS,IAAI;AAC5B,QAAA,cAAc,IAAS,IAAI;AAC3B,QAAA,eAAe,IAAS,IAAI;AAE5B,QAAA,kBAAmB,CAAC,OAAgC;AACxD,QAAG,IAAG;AACE,YAAA,aAAa,GAAG;AACtB,mBAAa,QAAQ;AAAA,QACnB,KAAI,GAAG,WAAW,CAAC;AAAA,QAAK,MAAK,GAAG,WAAW,CAAC;AAAA,QAC5C,OAAM,GAAG,WAAW,KAAK;AAAA,QAAK,QAAO,GAAG,WAAW,MAAM;AAAA,MAAA;AAAA,IAE7D;AAAA,EAAA;AAGI,QAAA,wBAAwB,CAAC,OAAgC;AAE7D,QAAG,IAAG;AAEJ,sBAAgB,EAAE;AAClB,aAAO,gBAAgB,+BAA8B;AAAA,QACnD,SAAQ,YAAY;AAAA,QACpB;AAAA,MAAA,CACD;AAAA,IAAA,OAEC;AACF,kBAAY,QAAQ;AACpB,mBAAa,QAAQ;AACrB,mBAAa,QAAQ;AACd,aAAA,gBAAgB,+BAA8B,IAAI;AAAA,IAC3D;AAAA,EAAA;AAII,QAAA,eAAe,OAAO,SAAe,OAAgC;AAGzE,QAAG,WAAW,OAAM;AAClB,iBAAW,QAAQ;AACnB,YAAO,eAAe,MAAM;AAAA,IAC9B;AAEA,UAAM,IAAI,QAAQ,CAAA,YAAS,WAAW,SAAS,EAAE,CAAC;AAC5C,UAAA,YAAY,QAAO,MAAK,OAAO;AACrC,gBAAY,QAAQ,MAAM,OAAO,OAAO,gBAAgB,OAAO,IAAI;AACnE,iBAAa,QAAQ;AACV,eAAA,QAAQ,eAAe,QAAQ,OAAO;AAAA,EAAA;
|
|
1
|
+
{"version":3,"file":"element-block.js","sources":["../../../../../../src/components/basic/doc-editor/core/element-block.ts"],"sourcesContent":["\r\n\r\nimport { mergeRegister } from '@lexical/utils'\r\nimport { COMMAND_PRIORITY_LOW,CLICK_COMMAND, LexicalCommand, createCommand, BaseSelection } from 'lexical'\r\nimport { useLexicalComposer,useMounted } from 'lexical-vue'\r\nimport { ref,watch } from 'vue'\r\n\r\nimport { \r\n isNodeSelected,setSelected,clearSelection,\r\n} from './utils'\r\n\r\n/**\r\n * toolsbar的函数\r\n */\r\nexport type SelectElementBlockToolsbarFunction = (selection:BaseSelection|null)=>Array<any>|null;\r\n\r\n/**\r\n * 元素抗选中类型\r\n */\r\nexport type SelectElementBlocktEventType = {\r\n element:HTMLElement,\r\n toolsbars:Array<any>|SelectElementBlockToolsbarFunction\r\n}\r\n\r\n/**\r\n * 选中元素快\r\n */\r\nexport const SELECTED_ELEMENTBLOCK_COMMAND: LexicalCommand<SelectElementBlocktEventType|null> = createCommand('SELECTED_ELEMENTBLOCK_COMMAND')\r\n\r\n/**\r\n * 移除元素快\r\n */\r\nexport const REMOVE_ELEMENTBLOCK_COMMAND: LexicalCommand<undefined|null> = createCommand('REMOVE_ELEMENTBLOCK_COMMAND')\r\n\r\n/**\r\n * 更新模块工具条位置信息\r\n */\r\nexport const UPDATE_ELEMENTBLOCK_TOOLBAR_POS_COMMAND: LexicalCommand<undefined|null> = createCommand('UPDATE_ELEMENTBLOCK_TOOLBAR_POS_COMMAND')\r\n\r\n\r\n\r\n/**\r\n * 判断选中的方法\r\n */\r\nexport type SelectExistFunc = (el:HTMLElement)=>HTMLElement|null\r\n\r\n/**\r\n * 判断选中的方法\r\n */\r\nexport type ElementSelectionHandle = (el:HTMLElement)=>undefined\r\n\r\n/**\r\n * 使用元素模块激活\r\n */\r\nexport const useElementBlockActive = (func:SelectExistFunc,selectionHandle:ElementSelectionHandle, unSelectionHandle:ElementSelectionHandle)=>{\r\n\r\n const editor = useLexicalComposer()\r\n\r\n let curSelectEl:HTMLElement|null = null\r\n \r\n // 编辑器挂载\r\n useMounted(()=>{\r\n // 注册事件\r\n return mergeRegister(\r\n // 点击选中\r\n editor.registerCommand<MouseEvent>(CLICK_COMMAND,(event) => {\r\n \r\n const el = func(event.target as HTMLElement);\r\n const nodeKey = el?.getAttribute(\"node-key\");\r\n\r\n // 不为null的话则视为点击选中\r\n if(nodeKey){\r\n \r\n event.preventDefault();\r\n\r\n selectionHandle(el as HTMLElement)\r\n\r\n if(curSelectEl && curSelectEl != el){\r\n unSelectionHandle(curSelectEl);\r\n }\r\n curSelectEl = el;\r\n return true;\r\n }\r\n else{\r\n curSelectEl && unSelectionHandle(curSelectEl);\r\n curSelectEl = null;\r\n }\r\n \r\n return false;\r\n }, COMMAND_PRIORITY_LOW)\r\n )\r\n })\r\n\r\n}\r\n\r\n/**\r\n * 使用元素块选中\r\n */\r\nexport const useElementBlockSelection = (func:SelectExistFunc,toolsbars:Array<any>|SelectElementBlockToolsbarFunction)=>{\r\n\r\n const editor = useLexicalComposer()\r\n const isSelected = ref(false)\r\n const curSelectKey = ref<any>(null)\r\n const curSelectEl = ref<any>(null)\r\n const curSelectPos = ref<any>(null)\r\n // 更新选中框\r\n const updateActiveBox = (el:HTMLElement|null):undefined=>{\r\n if(el){\r\n const selectRect = el.getBoundingClientRect();\r\n curSelectPos.value = {\r\n top:`${selectRect.y}px`,left:`${selectRect.x}px`,\r\n width:`${selectRect.width}px`,height:`${selectRect.height}px`\r\n };\r\n }\r\n }\r\n // 更新选中\r\n const updateActiveViewState = (el:HTMLElement|null):undefined=>{\r\n \r\n if(el){\r\n\r\n updateActiveBox(el);\r\n editor.dispatchCommand(SELECTED_ELEMENTBLOCK_COMMAND,{ \r\n element:curSelectEl.value,\r\n toolsbars:toolsbars\r\n });\r\n }\r\n else{\r\n curSelectEl.value = null;\r\n curSelectKey.value = null;\r\n curSelectPos.value = null;\r\n editor.dispatchCommand(SELECTED_ELEMENTBLOCK_COMMAND,null);\r\n }\r\n }\r\n\r\n // 设置选中\r\n const setSelection = async (nodeKey:string,el:HTMLElement|null|undefined)=>{\r\n\r\n // 没来得及取消的则先取消\r\n if(isSelected.value){ \r\n isSelected.value = false;\r\n await clearSelection(editor);\r\n }\r\n // 稍微停顿下\r\n await new Promise(reslove=>setTimeout(reslove, 10));\r\n await setSelected(editor,true,nodeKey);\r\n curSelectEl.value = el == null ? editor.getElementByKey(nodeKey) : el;\r\n curSelectKey.value = nodeKey;\r\n isSelected.value = isNodeSelected(editor, nodeKey);\r\n // 500毫秒之后计算下选择框\r\n setTimeout(()=>updateActiveBox(curSelectEl.value),500)\r\n // 之后再计算下避免由于图片加载高度计算错误问题\r\n setTimeout(()=>updateActiveBox(curSelectEl.value),1000)\r\n }\r\n // 是否选中\r\n watch(isSelected,(state)=>{\r\n if(state){\r\n updateActiveViewState(state ? curSelectEl.value : null)\r\n }\r\n else{\r\n updateActiveViewState(null)\r\n }\r\n })\r\n \r\n // 编辑器挂载\r\n useMounted(()=>{\r\n // 注册事件\r\n return mergeRegister(\r\n // 更新选中状态\r\n editor.registerUpdateListener(() => {\r\n \r\n isSelected.value = isNodeSelected(editor, curSelectKey.value);\r\n setTimeout(()=>updateActiveBox(curSelectEl.value),10)\r\n \r\n }),\r\n // 点击选中\r\n editor.registerCommand<MouseEvent>(CLICK_COMMAND,(event) => {\r\n \r\n const el = func(event.target as HTMLElement);\r\n const nodeKey = el?.getAttribute(\"node-key\");\r\n\r\n // 不为null的话则视为点击选中\r\n if(nodeKey != null){\r\n \r\n event.preventDefault();\r\n \r\n if (!event.shiftKey) { \r\n // 先取消\r\n clearSelection(editor).then(()=>{\r\n // 设置选中\r\n setSelection(nodeKey,el)\r\n })\r\n }\r\n else{\r\n // 设置选中\r\n setSelection(nodeKey,el)\r\n }\r\n\r\n return true;\r\n }\r\n \r\n return false;\r\n }, COMMAND_PRIORITY_LOW)\r\n )\r\n })\r\n\r\n\r\n return { isSelected,setSelection, curSelectKey,curSelectPos };\r\n\r\n}\r\n"],"names":[],"mappings":";;;;;AA2Ba,MAAA,gCAAmF,cAAc,+BAA+B;AAKhI,MAAA,8BAA8D,cAAc,6BAA6B;AAKzG,MAAA,0CAA0E,cAAc,yCAAyC;AA6DjI,MAAA,2BAA2B,CAAC,MAAqB,cAA0D;AAEtH,QAAM,SAAS;AACT,QAAA,aAAa,IAAI,KAAK;AACtB,QAAA,eAAe,IAAS,IAAI;AAC5B,QAAA,cAAc,IAAS,IAAI;AAC3B,QAAA,eAAe,IAAS,IAAI;AAE5B,QAAA,kBAAmB,CAAC,OAAgC;AACxD,QAAG,IAAG;AACE,YAAA,aAAa,GAAG;AACtB,mBAAa,QAAQ;AAAA,QACnB,KAAI,GAAG,WAAW,CAAC;AAAA,QAAK,MAAK,GAAG,WAAW,CAAC;AAAA,QAC5C,OAAM,GAAG,WAAW,KAAK;AAAA,QAAK,QAAO,GAAG,WAAW,MAAM;AAAA,MAAA;AAAA,IAE7D;AAAA,EAAA;AAGI,QAAA,wBAAwB,CAAC,OAAgC;AAE7D,QAAG,IAAG;AAEJ,sBAAgB,EAAE;AAClB,aAAO,gBAAgB,+BAA8B;AAAA,QACnD,SAAQ,YAAY;AAAA,QACpB;AAAA,MAAA,CACD;AAAA,IAAA,OAEC;AACF,kBAAY,QAAQ;AACpB,mBAAa,QAAQ;AACrB,mBAAa,QAAQ;AACd,aAAA,gBAAgB,+BAA8B,IAAI;AAAA,IAC3D;AAAA,EAAA;AAII,QAAA,eAAe,OAAO,SAAe,OAAgC;AAGzE,QAAG,WAAW,OAAM;AAClB,iBAAW,QAAQ;AACnB,YAAO,eAAe,MAAM;AAAA,IAC9B;AAEA,UAAM,IAAI,QAAQ,CAAA,YAAS,WAAW,SAAS,EAAE,CAAC;AAC5C,UAAA,YAAY,QAAO,MAAK,OAAO;AACrC,gBAAY,QAAQ,MAAM,OAAO,OAAO,gBAAgB,OAAO,IAAI;AACnE,iBAAa,QAAQ;AACV,eAAA,QAAQ,eAAe,QAAQ,OAAO;AAEjD,eAAW,MAAI,gBAAgB,YAAY,KAAK,GAAE,GAAG;AAErD,eAAW,MAAI,gBAAgB,YAAY,KAAK,GAAE,GAAI;AAAA,EAAA;AAGlD,QAAA,YAAW,CAAC,UAAQ;AACxB,QAAG,OAAM;AACe,4BAAA,QAAQ,YAAY,QAAQ,IAAI;AAAA,IAAA,OAEpD;AACF,4BAAsB,IAAI;AAAA,IAC5B;AAAA,EAAA,CACD;AAGD,aAAW,MAAI;AAEN,WAAA;AAAA;AAAA,MAEL,OAAO,uBAAuB,MAAM;AAElC,mBAAW,QAAQ,eAAe,QAAQ,aAAa,KAAK;AAC5D,mBAAW,MAAI,gBAAgB,YAAY,KAAK,GAAE,EAAE;AAAA,MAAA,CAErD;AAAA;AAAA,MAED,OAAO,gBAA4B,eAAc,CAAC,UAAU;AAEpD,cAAA,KAAK,KAAK,MAAM,MAAqB;AACrC,cAAA,UAAU,yBAAI,aAAa;AAGjC,YAAG,WAAW,MAAK;AAEjB,gBAAM,eAAe;AAEjB,cAAA,CAAC,MAAM,UAAU;AAEJ,2BAAA,MAAM,EAAE,KAAK,MAAI;AAE9B,2BAAa,SAAQ,EAAE;AAAA,YAAA,CACxB;AAAA,UAAA,OAEC;AAEF,yBAAa,SAAQ,EAAE;AAAA,UACzB;AAEO,iBAAA;AAAA,QACT;AAEO,eAAA;AAAA,SACN,oBAAoB;AAAA,IAAA;AAAA,EACzB,CACD;AAGD,SAAO,EAAE,YAAW,cAAc,cAAa,aAAa;AAE9D;"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { defineComponent, ref, computed, onMounted, watch, openBlock, createBlock, unref, withCtx,
|
|
1
|
+
import { defineComponent, ref, computed, onMounted, watch, resolveDirective, openBlock, createBlock, unref, withCtx, withDirectives, createElementBlock, normalizeClass, createVNode, createElementVNode, renderSlot, Teleport, createCommentVNode } from "vue";
|
|
2
2
|
import { LexicalComposer, LexicalAutoFocusPlugin, LexicalCheckListPlugin, LexicalHashtagPlugin, LexicalListPlugin, LexicalHistoryPlugin } from "lexical-vue";
|
|
3
3
|
import _sfc_main$4 from "./plugins/AutoLinkPlugin/index.vue.js";
|
|
4
4
|
import _sfc_main$3 from "./plugins/ImagePlugin/index.vue.js";
|
|
@@ -22,6 +22,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
22
22
|
props: {
|
|
23
23
|
placeholder: { type: String, default: "这里输入正文..." },
|
|
24
24
|
content: { type: String, default: `` },
|
|
25
|
+
loading: { type: Boolean, defualt: false },
|
|
25
26
|
js: { type: String, default: `` },
|
|
26
27
|
css: { type: String, default: `` }
|
|
27
28
|
},
|
|
@@ -85,9 +86,10 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
85
86
|
setTimeout(() => updateStage(), 500);
|
|
86
87
|
});
|
|
87
88
|
return (_ctx, _cache) => {
|
|
89
|
+
const _directive_loading = resolveDirective("loading");
|
|
88
90
|
return openBlock(), createBlock(unref(LexicalComposer), { "initial-config": config }, {
|
|
89
91
|
default: withCtx(() => [
|
|
90
|
-
|
|
92
|
+
withDirectives((openBlock(), createElementBlock("div", {
|
|
91
93
|
class: normalizeClass(["mk-doc-editor", unref(DEVICE_VIEW_MODE)])
|
|
92
94
|
}, [
|
|
93
95
|
createVNode(unref(_sfc_main$1), {
|
|
@@ -123,7 +125,9 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
123
125
|
]),
|
|
124
126
|
renderSlot(_ctx.$slots, "after-extentions")
|
|
125
127
|
])
|
|
126
|
-
], 2),
|
|
128
|
+
], 2)), [
|
|
129
|
+
[_directive_loading, __props.loading]
|
|
130
|
+
]),
|
|
127
131
|
createVNode(unref(LexicalAutoFocusPlugin)),
|
|
128
132
|
createVNode(unref(LexicalCheckListPlugin)),
|
|
129
133
|
createVNode(unref(LexicalHashtagPlugin)),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"editor.vue.js","sources":["../../../../../src/components/basic/doc-editor/editor.vue"],"sourcesContent":["<template>\r\n <LexicalComposer :initial-config=\"config\">\r\n <div class=\"mk-doc-editor\" :class=\"DEVICE_VIEW_MODE\">\r\n <ToolbarPlugin :js=\"js\" :css=\"css\" />\r\n <div class=\"mk-doc-editor__stage_warp\">\r\n <slot name=\"before-extentions\"></slot>\r\n <div class=\"mk-doc-editor__stage_body\">\r\n <slot name=\"header\"></slot>\r\n <iframe title=\"iframe\" class=\"mk-doc-editor__stage_iframe\" ref=\"iframeContentRef\"></iframe>\r\n <Teleport v-if=\"iframeBody\" :to=\"iframeBody\">\r\n <RichTextPlugin :content=\"props.content\" @change=\"contentChangeHandle\" :placeholder=\"placeholder\">\r\n </RichTextPlugin>\r\n <ImagePlugin />\r\n <AutoLinkPlugin />\r\n <ModulePlugin />\r\n <GridPlugin />\r\n </Teleport>\r\n <ElementBlockSelectionPlugin />\r\n <slot name=\"footer\"></slot>\r\n </div>\r\n <slot name=\"after-extentions\"></slot>\r\n </div>\r\n \r\n </div>\r\n <LexicalAutoFocusPlugin />\r\n <LexicalCheckListPlugin />\r\n <LexicalHashtagPlugin />\r\n <LexicalListPlugin />\r\n <LexicalHistoryPlugin />\r\n </LexicalComposer>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { defineOptions,defineProps,defineEmits,computed,ref,onMounted,watch } from \"vue\"\r\nimport {\r\n LexicalComposer,\r\n LexicalAutoFocusPlugin,\r\n LexicalCheckListPlugin,\r\n LexicalHashtagPlugin,\r\n LexicalHistoryPlugin,\r\n LexicalListPlugin,\r\n} from 'lexical-vue'\r\nimport { \r\n ToolbarPlugin,\r\n RichTextPlugin,\r\n AutoLinkPlugin,\r\n ImagePlugin,\r\n ElementBlockSelectionPlugin,\r\n GridPlugin,\r\n ModulePlugin\r\n} from \"./plugins\"\r\nimport { useModules } from \"./plugins/ModulePlugin/composables\"\r\nimport { DEVICE_VIEW_MODE } from \"./core\"\r\n\r\nimport DocTheme from \"./themes/DocTheme\";\r\nimport DocNodes from \"./plugins/nodes\"\r\nimport DocEditorCss from \"./themes/doc-editor.css?raw\";\r\nimport DocEditorEditCss from \"./themes/doc-editor-edit.css?raw\";\r\nimport DocThemeCss from \"./themes/doc-theme.css?raw\";\r\n\r\n// 定义组件\r\ndefineOptions({ name: \"MKDocEditor\" })\r\n\r\n// 事件\r\nconst emit = defineEmits(['change']);\r\n\r\n// 参数\r\nconst props = defineProps({\r\n placeholder:{type:String,default:\"这里输入正文...\"},\r\n content:{ type:String,default:`` },\r\n js:{ type:String,default:`` },\r\n css:{ type:String,default:`` }\r\n})\r\n \r\n\r\n// 配置\r\nconst config = {\r\n namespace: 'MyEditor',\r\n theme: DocTheme,\r\n nodes: [\r\n ...DocNodes,\r\n ],\r\n onError(error:Error) {\r\n // Catch any errors that occur during Lexical updates and log them\r\n // or throw them as needed. If you don't throw them, Lexical will\r\n // try to recover gracefully without losing user data.\r\n console.error(error)\r\n },\r\n}\r\n\r\n// iframe 编辑器\r\nconst iframeContentRef = ref(null as any);\r\nconst iframeBody = computed(()=>iframeContentRef.value?.contentWindow?.document?.body)\r\n\r\n//内容改变时\r\nconst updateStage = ()=>{\r\n setTimeout(() => {\r\n if(iframeBody.value?.scrollHeight > iframeBody.value?.offsetHeight){\r\n iframeContentRef.value.style.height = (iframeBody.value?.scrollHeight + 10)+\"px\";\r\n }\r\n }, 10);\r\n}\r\nconst contentChangeHandle = (content:any)=>{\r\n emit('change',content);\r\n updateStage();\r\n}\r\n\r\nonMounted(()=>{\r\n\r\n const doc = iframeContentRef.value?.contentWindow?.document;\r\n\r\n // 样式\r\n const style = document.createElement(\"style\");\r\n style.setAttribute(\"type\",\"text/css\")\r\n\r\n // 默认样式\r\n style.innerHTML = [DocEditorCss,DocThemeCss,DocEditorEditCss].join(\"\\r\\n\");\r\n\r\n //模块渲染样式\r\n style.innerHTML += useModules().filter(item=>item.editorCss).map(item=>item.editorCss).join(\"\\r\\n\");\r\n\r\n doc.head.append(style);\r\n\r\n // 扩展的js和css\r\n props.js.split(\",\").filter(item=>!!item).forEach(path=>{\r\n const script = document.createElement(\"script\");\r\n script.src = path;\r\n script.setAttribute(\"crossorigin\",\"true\")\r\n doc.head.append(script);\r\n })\r\n\r\n props.css.split(\",\").filter(item=>!!item).forEach(path=>{\r\n const link = document.createElement(\"link\");\r\n link.href = path;\r\n link.setAttribute(\"rel\",\"stylesheet\")\r\n link.setAttribute(\"crossorigin\",\"true\")\r\n doc.head.append(link);\r\n })\r\n\r\n // 设备显示模式改变\r\n watch(DEVICE_VIEW_MODE,(payload: string) => {\r\n doc.body.style.fontSize = payload == \"pc\" ? \"14px\" : \"18px\";\r\n updateStage();\r\n return false\r\n },{ immediate :true})\r\n\r\n // 初始化计算舞台\r\n setTimeout(()=> updateStage(),500)\r\n});\r\n\r\n</script>\r\n"],"names":["DocNodes"],"mappings":"
|
|
1
|
+
{"version":3,"file":"editor.vue.js","sources":["../../../../../src/components/basic/doc-editor/editor.vue"],"sourcesContent":["<template>\r\n <LexicalComposer :initial-config=\"config\">\r\n <div class=\"mk-doc-editor\" v-loading=\"loading\" :class=\"DEVICE_VIEW_MODE\">\r\n <ToolbarPlugin :js=\"js\" :css=\"css\" />\r\n <div class=\"mk-doc-editor__stage_warp\">\r\n <slot name=\"before-extentions\"></slot>\r\n <div class=\"mk-doc-editor__stage_body\">\r\n <slot name=\"header\"></slot>\r\n <iframe title=\"iframe\" class=\"mk-doc-editor__stage_iframe\" ref=\"iframeContentRef\"></iframe>\r\n <Teleport v-if=\"iframeBody\" :to=\"iframeBody\">\r\n <RichTextPlugin :content=\"props.content\" @change=\"contentChangeHandle\" :placeholder=\"placeholder\">\r\n </RichTextPlugin>\r\n <ImagePlugin />\r\n <AutoLinkPlugin />\r\n <ModulePlugin />\r\n <GridPlugin />\r\n </Teleport>\r\n <ElementBlockSelectionPlugin />\r\n <slot name=\"footer\"></slot>\r\n </div>\r\n <slot name=\"after-extentions\"></slot>\r\n </div>\r\n \r\n </div>\r\n <LexicalAutoFocusPlugin />\r\n <LexicalCheckListPlugin />\r\n <LexicalHashtagPlugin />\r\n <LexicalListPlugin />\r\n <LexicalHistoryPlugin />\r\n </LexicalComposer>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { defineOptions,defineProps,defineEmits,computed,ref,onMounted,watch } from \"vue\"\r\nimport {\r\n LexicalComposer,\r\n LexicalAutoFocusPlugin,\r\n LexicalCheckListPlugin,\r\n LexicalHashtagPlugin,\r\n LexicalHistoryPlugin,\r\n LexicalListPlugin,\r\n} from 'lexical-vue'\r\nimport { \r\n ToolbarPlugin,\r\n RichTextPlugin,\r\n AutoLinkPlugin,\r\n ImagePlugin,\r\n ElementBlockSelectionPlugin,\r\n GridPlugin,\r\n ModulePlugin\r\n} from \"./plugins\"\r\nimport { useModules } from \"./plugins/ModulePlugin/composables\"\r\nimport { DEVICE_VIEW_MODE } from \"./core\"\r\n\r\nimport DocTheme from \"./themes/DocTheme\";\r\nimport DocNodes from \"./plugins/nodes\"\r\nimport DocEditorCss from \"./themes/doc-editor.css?raw\";\r\nimport DocEditorEditCss from \"./themes/doc-editor-edit.css?raw\";\r\nimport DocThemeCss from \"./themes/doc-theme.css?raw\";\r\n\r\n// 定义组件\r\ndefineOptions({ name: \"MKDocEditor\" })\r\n\r\n// 事件\r\nconst emit = defineEmits(['change']);\r\n\r\n// 参数\r\nconst props = defineProps({\r\n placeholder:{type:String,default:\"这里输入正文...\"},\r\n content:{ type:String,default:`` },\r\n loading:{ type:Boolean,defualt:false},\r\n js:{ type:String,default:`` },\r\n css:{ type:String,default:`` }\r\n})\r\n \r\n\r\n// 配置\r\nconst config = {\r\n namespace: 'MyEditor',\r\n theme: DocTheme,\r\n nodes: [\r\n ...DocNodes,\r\n ],\r\n onError(error:Error) {\r\n // Catch any errors that occur during Lexical updates and log them\r\n // or throw them as needed. If you don't throw them, Lexical will\r\n // try to recover gracefully without losing user data.\r\n console.error(error)\r\n },\r\n}\r\n\r\n// iframe 编辑器\r\nconst iframeContentRef = ref(null as any);\r\nconst iframeBody = computed(()=>iframeContentRef.value?.contentWindow?.document?.body)\r\n\r\n//内容改变时\r\nconst updateStage = ()=>{\r\n setTimeout(() => {\r\n if(iframeBody.value?.scrollHeight > iframeBody.value?.offsetHeight){\r\n iframeContentRef.value.style.height = (iframeBody.value?.scrollHeight + 10)+\"px\";\r\n }\r\n }, 10);\r\n}\r\nconst contentChangeHandle = (content:any)=>{\r\n emit('change',content);\r\n updateStage();\r\n}\r\n\r\nonMounted(()=>{\r\n\r\n const doc = iframeContentRef.value?.contentWindow?.document;\r\n\r\n // 样式\r\n const style = document.createElement(\"style\");\r\n style.setAttribute(\"type\",\"text/css\")\r\n\r\n // 默认样式\r\n style.innerHTML = [DocEditorCss,DocThemeCss,DocEditorEditCss].join(\"\\r\\n\");\r\n\r\n //模块渲染样式\r\n style.innerHTML += useModules().filter(item=>item.editorCss).map(item=>item.editorCss).join(\"\\r\\n\");\r\n\r\n doc.head.append(style);\r\n\r\n // 扩展的js和css\r\n props.js.split(\",\").filter(item=>!!item).forEach(path=>{\r\n const script = document.createElement(\"script\");\r\n script.src = path;\r\n script.setAttribute(\"crossorigin\",\"true\")\r\n doc.head.append(script);\r\n })\r\n\r\n props.css.split(\",\").filter(item=>!!item).forEach(path=>{\r\n const link = document.createElement(\"link\");\r\n link.href = path;\r\n link.setAttribute(\"rel\",\"stylesheet\")\r\n link.setAttribute(\"crossorigin\",\"true\")\r\n doc.head.append(link);\r\n })\r\n\r\n // 设备显示模式改变\r\n watch(DEVICE_VIEW_MODE,(payload: string) => {\r\n doc.body.style.fontSize = payload == \"pc\" ? \"14px\" : \"18px\";\r\n updateStage();\r\n return false\r\n },{ immediate :true})\r\n\r\n // 初始化计算舞台\r\n setTimeout(()=> updateStage(),500)\r\n});\r\n\r\n</script>\r\n"],"names":["DocNodes"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgEA,UAAM,OAAO;AAGb,UAAM,QAAQ;AAUd,UAAM,SAAS;AAAA,MACb,WAAW;AAAA,MACX;AAAA,MACA,OAAO;AAAA,QACL,GAAGA;AAAAA,MACL;AAAA,MACA,QAAQ,OAAa;AAInB,gBAAQ,MAAM,KAAK;AAAA,MACrB;AAAA,IAAA;AAII,UAAA,mBAAmB,IAAI,IAAW;AACxC,UAAM,aAAa,SAAS;;AAAI,gDAAiB,UAAjB,mBAAwB,kBAAxB,mBAAuC,aAAvC,mBAAiD;AAAA,KAAI;AAGrF,UAAM,cAAc,MAAI;AACtB,iBAAW,MAAM;;AACf,cAAG,gBAAW,UAAX,mBAAkB,kBAAe,gBAAW,UAAX,mBAAkB,eAAa;AACjE,2BAAiB,MAAM,MAAM,WAAU,gBAAW,UAAX,mBAAkB,gBAAe,KAAI;AAAA,QAC9E;AAAA,SACC,EAAE;AAAA,IAAA;AAED,UAAA,sBAAsB,CAAC,YAAc;AACzC,WAAK,UAAS,OAAO;AACT;IAAA;AAGd,cAAU,MAAI;;AAEN,YAAA,OAAM,4BAAiB,UAAjB,mBAAwB,kBAAxB,mBAAuC;AAG7C,YAAA,QAAQ,SAAS,cAAc,OAAO;AACtC,YAAA,aAAa,QAAO,UAAU;AAGpC,YAAM,YAAY,CAAC,cAAa,aAAY,gBAAgB,EAAE,KAAK,MAAM;AAGzE,YAAM,aAAa,WAAA,EAAa,OAAO,UAAM,KAAK,SAAS,EAAE,IAAI,CAAM,SAAA,KAAK,SAAS,EAAE,KAAK,MAAM;AAE9F,UAAA,KAAK,OAAO,KAAK;AAGf,YAAA,GAAG,MAAM,GAAG,EAAE,OAAO,CAAM,SAAA,CAAC,CAAC,IAAI,EAAE,QAAQ,CAAM,SAAA;AAC/C,cAAA,SAAS,SAAS,cAAc,QAAQ;AAC9C,eAAO,MAAM;AACN,eAAA,aAAa,eAAc,MAAM;AACpC,YAAA,KAAK,OAAO,MAAM;AAAA,MAAA,CACvB;AAEK,YAAA,IAAI,MAAM,GAAG,EAAE,OAAO,CAAM,SAAA,CAAC,CAAC,IAAI,EAAE,QAAQ,CAAM,SAAA;AAChD,cAAA,OAAO,SAAS,cAAc,MAAM;AAC1C,aAAK,OAAO;AACP,aAAA,aAAa,OAAM,YAAY;AAC/B,aAAA,aAAa,eAAc,MAAM;AAClC,YAAA,KAAK,OAAO,IAAI;AAAA,MAAA,CACrB;AAGK,YAAA,kBAAiB,CAAC,YAAoB;AAC1C,YAAI,KAAK,MAAM,WAAW,WAAW,OAAO,SAAS;AACzC;AACL,eAAA;AAAA,MAAA,GACP,EAAE,WAAW,KAAA,CAAK;AAGT,iBAAA,MAAK,eAAc,GAAG;AAAA,IAAA,CAClC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -79,10 +79,8 @@ class GridNode extends ElementNode {
|
|
|
79
79
|
* @param el
|
|
80
80
|
*/
|
|
81
81
|
updateElementAttr(el) {
|
|
82
|
-
Object.keys(this.__attrs).forEach((key) => {
|
|
83
|
-
|
|
84
|
-
el.style[key] = this.__attrs[key];
|
|
85
|
-
}
|
|
82
|
+
Object.keys(this.__attrs).filter((key) => key != "class").forEach((key) => {
|
|
83
|
+
el.style[key] = this.__attrs[key];
|
|
86
84
|
});
|
|
87
85
|
let extraClassName = GridNode.getExtraClassName(el);
|
|
88
86
|
if (extraClassName != this.__attrs.class) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GridNode.js","sources":["../../../../../../../src/components/basic/doc-editor/plugins/GridPlugin/GridNode.ts"],"sourcesContent":["\r\n\r\n\r\n\r\n\r\nimport type { DOMConversionMap, SerializedElementNode, LexicalNode, NodeKey, Spread,EditorConfig, DOMExportOutput } from 'lexical'\r\nimport { ElementNode } from 'lexical'\r\n\r\n/**\r\n * 容器属性\r\n */\r\nexport type GridNodeAttrType = {\r\n class:string,\r\n width:string,\r\n height:string,\r\n maxWidth:string,\r\n maxHeight:string,\r\n flex:string\r\n};\r\n\r\n/**\r\n * 节点序列化 \r\n */\r\nexport type SerializedGridNode = Spread<{ attrs:GridNodeAttrType },SerializedElementNode>\r\n\r\n/**\r\n * 格子\r\n */\r\nexport class GridNode extends ElementNode{\r\n\r\n __attrs:GridNodeAttrType\r\n\r\n static getType(): string { return \"grid\"; }\r\n\r\n static hasGridNodeByElement(el:HTMLElement):HTMLElement|null{\r\n return el.classList.contains(GridNode.getMarkClassName()) ? el : null;\r\n }\r\n\r\n static getMarkClassName(): string {\r\n return `mk-doc__${GridNode.getType()}`\r\n }\r\n\r\n static getExtraClassName(el:HTMLElement){\r\n return el.className.replace(GridNode.getMarkClassName(),\"\").trim();\r\n }\r\n\r\n static clone(node: GridNode): GridNode {\r\n \r\n return new GridNode(node.__attrs,node.__key)\r\n }\r\n\r\n static importJSON(serializedNode: SerializedGridNode): GridNode {\r\n return new GridNode(serializedNode.attrs)\r\n }\r\n\r\n static importDOM(): DOMConversionMap | null {\r\n return {\r\n div : (domNode: HTMLElement) => {\r\n\r\n return GridNode.hasGridNodeByElement(domNode) ? {\r\n\r\n conversion: ()=>{ \r\n\r\n return { \r\n\r\n node:new GridNode({\r\n class:GridNode.getExtraClassName(domNode),\r\n width:domNode.style.width || \"100%\",\r\n height:domNode.style.height,\r\n flex:domNode.style.flex,\r\n maxWidth:domNode.style.maxWidth,\r\n maxHeight:domNode.style.maxHeight\r\n } as GridNodeAttrType) \r\n };\r\n },\r\n priority: 1\r\n } : null;\r\n }\r\n }\r\n }\r\n\r\n constructor(attrs:GridNodeAttrType,key?: NodeKey) {\r\n super(key)\r\n this.__attrs = attrs;\r\n }\r\n\r\n /**\r\n * 设置属性\r\n * @param pos \r\n */\r\n setAttrs(data?:GridNodeAttrType){\r\n const writable = this.getWritable();\r\n Object.assign(writable.__attrs,data)\r\n }\r\n\r\n /**\r\n * 获取属性\r\n * @param pos \r\n */\r\n getAttrs():GridNodeAttrType{\r\n return this.__attrs;\r\n }\r\n\r\n /**\r\n * 导出JSON\r\n * @returns \r\n */\r\n exportJSON(): SerializedGridNode {\r\n return {\r\n ...super.exportJSON(), \r\n type: this.getType(),\r\n attrs:this.__attrs,\r\n version: 1\r\n }\r\n }\r\n\r\n /**\r\n * 更新元素属性\r\n * @param el \r\n */\r\n updateElementAttr(el:HTMLElement){\r\n // 更新属性\r\n Object.keys(this.__attrs).
|
|
1
|
+
{"version":3,"file":"GridNode.js","sources":["../../../../../../../src/components/basic/doc-editor/plugins/GridPlugin/GridNode.ts"],"sourcesContent":["\r\n\r\n\r\n\r\n\r\nimport type { DOMConversionMap, SerializedElementNode, LexicalNode, NodeKey, Spread,EditorConfig, DOMExportOutput } from 'lexical'\r\nimport { ElementNode } from 'lexical'\r\n\r\n/**\r\n * 容器属性\r\n */\r\nexport type GridNodeAttrType = {\r\n class:string,\r\n width:string,\r\n height:string,\r\n maxWidth:string,\r\n maxHeight:string,\r\n flex:string\r\n};\r\n\r\n/**\r\n * 节点序列化 \r\n */\r\nexport type SerializedGridNode = Spread<{ attrs:GridNodeAttrType },SerializedElementNode>\r\n\r\n/**\r\n * 格子\r\n */\r\nexport class GridNode extends ElementNode{\r\n\r\n __attrs:GridNodeAttrType\r\n\r\n static getType(): string { return \"grid\"; }\r\n\r\n static hasGridNodeByElement(el:HTMLElement):HTMLElement|null{\r\n return el.classList.contains(GridNode.getMarkClassName()) ? el : null;\r\n }\r\n\r\n static getMarkClassName(): string {\r\n return `mk-doc__${GridNode.getType()}`\r\n }\r\n\r\n static getExtraClassName(el:HTMLElement){\r\n return el.className.replace(GridNode.getMarkClassName(),\"\").trim();\r\n }\r\n\r\n static clone(node: GridNode): GridNode {\r\n \r\n return new GridNode(node.__attrs,node.__key)\r\n }\r\n\r\n static importJSON(serializedNode: SerializedGridNode): GridNode {\r\n return new GridNode(serializedNode.attrs)\r\n }\r\n\r\n static importDOM(): DOMConversionMap | null {\r\n return {\r\n div : (domNode: HTMLElement) => {\r\n\r\n return GridNode.hasGridNodeByElement(domNode) ? {\r\n\r\n conversion: ()=>{ \r\n\r\n return { \r\n\r\n node:new GridNode({\r\n class:GridNode.getExtraClassName(domNode),\r\n width:domNode.style.width || \"100%\",\r\n height:domNode.style.height,\r\n flex:domNode.style.flex,\r\n maxWidth:domNode.style.maxWidth,\r\n maxHeight:domNode.style.maxHeight\r\n } as GridNodeAttrType) \r\n };\r\n },\r\n priority: 1\r\n } : null;\r\n }\r\n }\r\n }\r\n\r\n constructor(attrs:GridNodeAttrType,key?: NodeKey) {\r\n super(key)\r\n this.__attrs = attrs;\r\n }\r\n\r\n /**\r\n * 设置属性\r\n * @param pos \r\n */\r\n setAttrs(data?:GridNodeAttrType){\r\n const writable = this.getWritable();\r\n Object.assign(writable.__attrs,data)\r\n }\r\n\r\n /**\r\n * 获取属性\r\n * @param pos \r\n */\r\n getAttrs():GridNodeAttrType{\r\n return this.__attrs;\r\n }\r\n\r\n /**\r\n * 导出JSON\r\n * @returns \r\n */\r\n exportJSON(): SerializedGridNode {\r\n return {\r\n ...super.exportJSON(), \r\n type: this.getType(),\r\n attrs:this.__attrs,\r\n version: 1\r\n }\r\n }\r\n\r\n /**\r\n * 更新元素属性\r\n * @param el \r\n */\r\n updateElementAttr(el:HTMLElement){\r\n\r\n // 更新属性\r\n Object.keys(this.__attrs).filter(key=>key != \"class\").forEach((key:any)=>{\r\n el.style[key] = (this.__attrs as any)[key]\r\n })\r\n\r\n // 移除格子基础标识\r\n let extraClassName = GridNode.getExtraClassName(el);\r\n\r\n if(extraClassName != this.__attrs.class){\r\n\r\n if(extraClassName){\r\n el.classList.remove(extraClassName);\r\n }\r\n\r\n // 添加样式\r\n if (this.__attrs.class) {\r\n el.classList.add(this.__attrs.class);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * 获取标识类\r\n * @returns \r\n */\r\n getMarkClassName(): string {\r\n return `mk-doc__${this.getType()}`\r\n }\r\n\r\n /**\r\n * 导出DOM\r\n * @returns \r\n */\r\n exportDOM(): DOMExportOutput {\r\n \r\n const element = document.createElement('div')\r\n\r\n this.updateElementAttr(element);\r\n\r\n // 标识格子\r\n if (!element.classList.contains(GridNode.getMarkClassName())) {\r\n element.classList.add(GridNode.getMarkClassName());\r\n }\r\n\r\n // 标识指定\r\n if (!element.classList.contains(this.getMarkClassName())) {\r\n element.classList.add(this.getMarkClassName());\r\n }\r\n\r\n return { element }\r\n }\r\n\r\n /**\r\n * 创建渲染DOM\r\n * @param config \r\n * @returns \r\n */\r\n createDOM(config: EditorConfig): HTMLElement {\r\n\r\n const el = this.exportDOM().element as HTMLElement;\r\n\r\n el.setAttribute(\"node-key\",this.__key)\r\n\r\n return el;\r\n }\r\n\r\n /**\r\n * 更新DOM\r\n * @param prevNode \r\n * @param dom \r\n * @param config \r\n * @returns \r\n */\r\n updateDOM(prevNode: GridNode, el: HTMLElement, config: EditorConfig): boolean {\r\n // 更新属性\r\n \r\n this.updateElementAttr(el);\r\n\r\n // 移除老标识\r\n let extraClassName = GridNode.getExtraClassName(el).replace(this.getMarkClassName(),\"\").trim();\r\n\r\n if(extraClassName != this.__attrs.class){\r\n\r\n if(extraClassName){\r\n el.classList.remove(extraClassName);\r\n }\r\n\r\n if (this.__attrs.class) {\r\n el.classList.add(this.__attrs.class);\r\n }\r\n }\r\n return false\r\n }\r\n\r\n /**\r\n * 非内联\r\n * @returns \r\n */\r\n isInline(): boolean {\r\n return false;\r\n }\r\n}\r\n\r\n/**\r\n * 是否是格子\r\n * @param node \r\n * @returns \r\n */\r\nexport function $isGridNode(\r\n node: GridNode | LexicalNode | null | undefined,\r\n): node is GridNode {\r\n return node instanceof GridNode\r\n}\r\n\r\n"],"names":[],"mappings":"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"}
|
|
@@ -77,11 +77,18 @@ class ModuleGridNode extends GridNode {
|
|
|
77
77
|
* @param el
|
|
78
78
|
*/
|
|
79
79
|
updateElementAttr(el) {
|
|
80
|
-
Object.keys(this.__attrs).forEach((key) => {
|
|
81
|
-
|
|
82
|
-
el.style[key] = this.__attrs[key];
|
|
83
|
-
}
|
|
80
|
+
Object.keys(this.__attrs).filter((key) => key != "class" && key != "overflowX").forEach((key) => {
|
|
81
|
+
el.style[key] = this.__attrs[key];
|
|
84
82
|
});
|
|
83
|
+
let extraClassName = GridNode.getExtraClassName(el);
|
|
84
|
+
if (extraClassName != this.__attrs.class) {
|
|
85
|
+
if (extraClassName) {
|
|
86
|
+
el.classList.remove(extraClassName);
|
|
87
|
+
}
|
|
88
|
+
if (this.__attrs.class) {
|
|
89
|
+
el.classList.add(this.__attrs.class);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
85
92
|
if (this.__attrs.overflowX) {
|
|
86
93
|
el.style.overflowX = "auto";
|
|
87
94
|
el.style.whiteSpace = "nowrap";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ModuleGridNode.js","sources":["../../../../../../../src/components/basic/doc-editor/plugins/GridPlugin/ModuleGridNode.ts"],"sourcesContent":["import { type DOMConversionMap,type NodeKey, type Spread, type DOMExportOutput, type LexicalCommand, createCommand, LexicalNode, EditorConfig } from 'lexical'\r\nimport { type GridNodeAttrType , GridNode,SerializedGridNode } from \"./GridNode\"\r\n\r\n/**\r\n * 属性\r\n */\r\nexport type ModuleGridNodeAttrType = GridNodeAttrType & {\r\n overflowX:boolean\r\n};\r\n\r\n\r\n/**\r\n * 插入模块格子\r\n */\r\nexport const INSERT_MODULEGRID_COMMAND: LexicalCommand<ModuleGridNodeAttrType> = createCommand('INSERT_MODULEGRID_COMMAND')\r\n\r\n\r\n/**\r\n * 节点序列化 \r\n */\r\nexport type SerializedModuleGridNode = Spread<{ attrs:ModuleGridNodeAttrType },SerializedGridNode>\r\n\r\n/**\r\n * 模块格子\r\n */\r\nexport class ModuleGridNode extends GridNode{\r\n\r\n declare __attrs:ModuleGridNodeAttrType\r\n\r\n static getType(): string { return \"module-grid\"; }\r\n\r\n static hasGridNodeByElement(el:HTMLElement):HTMLElement|null{\r\n return el.classList.contains(ModuleGridNode.getMarkClassName()) ? el : null;\r\n }\r\n \r\n static getMarkClassName(): string {\r\n return `mk-doc__${ModuleGridNode.getType()}`\r\n }\r\n static getExtraClassName(el:HTMLElement){\r\n return GridNode.getExtraClassName(el).replace(ModuleGridNode.getMarkClassName(),\"\").trim();\r\n }\r\n static clone(node: ModuleGridNode): ModuleGridNode {\r\n return new ModuleGridNode(node.__attrs,node.__key)\r\n }\r\n\r\n static importJSON(serializedNode: SerializedModuleGridNode): ModuleGridNode {\r\n return new ModuleGridNode(serializedNode.attrs)\r\n }\r\n\r\n static importDOM(): DOMConversionMap | null {\r\n return {\r\n div : (domNode: HTMLElement) => {\r\n\r\n return ModuleGridNode.hasGridNodeByElement(domNode) ? {\r\n\r\n conversion: ()=>{ \r\n\r\n return { \r\n node:new ModuleGridNode({\r\n class:ModuleGridNode.getExtraClassName(domNode),\r\n width:domNode.style.width || \"100%\",\r\n height:domNode.style.height,\r\n flex:domNode.style.flex,\r\n maxWidth:domNode.style.maxWidth,\r\n maxHeight:domNode.style.maxHeight,\r\n overflowX:domNode.style.overflowX == \"auto\"\r\n } as ModuleGridNodeAttrType) \r\n };\r\n },\r\n priority: 4\r\n } : null;\r\n }\r\n }\r\n }\r\n\r\n constructor(attrs:ModuleGridNodeAttrType,key?: NodeKey) {\r\n super(attrs,key)\r\n }\r\n\r\n /**\r\n * 设置属性\r\n * @param pos \r\n */\r\n setAttrs(data?:ModuleGridNodeAttrType){\r\n const writable = this.getWritable();\r\n Object.assign(writable.__attrs,data)\r\n }\r\n\r\n /**\r\n * 获取属性\r\n * @param pos \r\n */\r\n getAttrs():ModuleGridNodeAttrType{\r\n return this.__attrs;\r\n }\r\n /**\r\n * 导出JSON\r\n * @returns \r\n */\r\n exportJSON(): SerializedGridNode {\r\n return {\r\n ...super.exportJSON(),\r\n type: this.getType(),\r\n attrs:this.__attrs,\r\n version: 1\r\n }\r\n }\r\n\r\n /**\r\n * 更新元素属性\r\n * @param el \r\n */\r\n updateElementAttr(el:HTMLElement){\r\n // 更新属性\r\n Object.keys(this.__attrs).
|
|
1
|
+
{"version":3,"file":"ModuleGridNode.js","sources":["../../../../../../../src/components/basic/doc-editor/plugins/GridPlugin/ModuleGridNode.ts"],"sourcesContent":["import { type DOMConversionMap,type NodeKey, type Spread, type DOMExportOutput, type LexicalCommand, createCommand, LexicalNode, EditorConfig } from 'lexical'\r\nimport { type GridNodeAttrType , GridNode,SerializedGridNode } from \"./GridNode\"\r\n\r\n/**\r\n * 属性\r\n */\r\nexport type ModuleGridNodeAttrType = GridNodeAttrType & {\r\n overflowX:boolean\r\n};\r\n\r\n\r\n/**\r\n * 插入模块格子\r\n */\r\nexport const INSERT_MODULEGRID_COMMAND: LexicalCommand<ModuleGridNodeAttrType> = createCommand('INSERT_MODULEGRID_COMMAND')\r\n\r\n\r\n/**\r\n * 节点序列化 \r\n */\r\nexport type SerializedModuleGridNode = Spread<{ attrs:ModuleGridNodeAttrType },SerializedGridNode>\r\n\r\n/**\r\n * 模块格子\r\n */\r\nexport class ModuleGridNode extends GridNode{\r\n\r\n declare __attrs:ModuleGridNodeAttrType\r\n\r\n static getType(): string { return \"module-grid\"; }\r\n\r\n static hasGridNodeByElement(el:HTMLElement):HTMLElement|null{\r\n return el.classList.contains(ModuleGridNode.getMarkClassName()) ? el : null;\r\n }\r\n \r\n static getMarkClassName(): string {\r\n return `mk-doc__${ModuleGridNode.getType()}`\r\n }\r\n static getExtraClassName(el:HTMLElement){\r\n return GridNode.getExtraClassName(el).replace(ModuleGridNode.getMarkClassName(),\"\").trim();\r\n }\r\n static clone(node: ModuleGridNode): ModuleGridNode {\r\n return new ModuleGridNode(node.__attrs,node.__key)\r\n }\r\n\r\n static importJSON(serializedNode: SerializedModuleGridNode): ModuleGridNode {\r\n return new ModuleGridNode(serializedNode.attrs)\r\n }\r\n\r\n static importDOM(): DOMConversionMap | null {\r\n return {\r\n div : (domNode: HTMLElement) => {\r\n\r\n return ModuleGridNode.hasGridNodeByElement(domNode) ? {\r\n\r\n conversion: ()=>{ \r\n\r\n return { \r\n node:new ModuleGridNode({\r\n class:ModuleGridNode.getExtraClassName(domNode),\r\n width:domNode.style.width || \"100%\",\r\n height:domNode.style.height,\r\n flex:domNode.style.flex,\r\n maxWidth:domNode.style.maxWidth,\r\n maxHeight:domNode.style.maxHeight,\r\n overflowX:domNode.style.overflowX == \"auto\"\r\n } as ModuleGridNodeAttrType) \r\n };\r\n },\r\n priority: 4\r\n } : null;\r\n }\r\n }\r\n }\r\n\r\n constructor(attrs:ModuleGridNodeAttrType,key?: NodeKey) {\r\n super(attrs,key)\r\n }\r\n\r\n /**\r\n * 设置属性\r\n * @param pos \r\n */\r\n setAttrs(data?:ModuleGridNodeAttrType){\r\n const writable = this.getWritable();\r\n Object.assign(writable.__attrs,data)\r\n }\r\n\r\n /**\r\n * 获取属性\r\n * @param pos \r\n */\r\n getAttrs():ModuleGridNodeAttrType{\r\n return this.__attrs;\r\n }\r\n /**\r\n * 导出JSON\r\n * @returns \r\n */\r\n exportJSON(): SerializedGridNode {\r\n return {\r\n ...super.exportJSON(),\r\n type: this.getType(),\r\n attrs:this.__attrs,\r\n version: 1\r\n }\r\n }\r\n\r\n /**\r\n * 更新元素属性\r\n * @param el \r\n */\r\n updateElementAttr(el:HTMLElement){\r\n\r\n // 更新属性\r\n Object.keys(this.__attrs).filter(key=>key != \"class\" && key != \"overflowX\").forEach((key:any)=>{\r\n el.style[key] = (this.__attrs as any)[key]\r\n })\r\n\r\n // 移除格子基础标识\r\n let extraClassName = GridNode.getExtraClassName(el);\r\n\r\n if(extraClassName != this.__attrs.class){\r\n\r\n if(extraClassName){\r\n el.classList.remove(extraClassName);\r\n }\r\n\r\n // 添加样式\r\n if (this.__attrs.class) {\r\n el.classList.add(this.__attrs.class);\r\n }\r\n }\r\n \r\n if(this.__attrs.overflowX){\r\n el.style.overflowX = \"auto\";\r\n el.style.whiteSpace = \"nowrap\";\r\n }\r\n else{\r\n el.style.overflowX = \"\";\r\n el.style.whiteSpace = \"\";\r\n }\r\n }\r\n\r\n /**\r\n * 创建渲染DOM\r\n * @param config \r\n * @returns \r\n */\r\n createDOM(config: EditorConfig): HTMLElement {\r\n\r\n const el = super.createDOM(config);\r\n\r\n el.setAttribute(\"contenteditable\",\"false\")\r\n el.setAttribute(\"data-lexical-decorator\",\"true\")\r\n\r\n return el;\r\n }\r\n \r\n // /**\r\n // * 非内联\r\n // * @returns \r\n // */\r\n // isInline(): boolean {\r\n // return false;\r\n // }\r\n\r\n // /**\r\n // * 定义为影子根\r\n // * @returns \r\n // */\r\n // isShadowRoot(): boolean {\r\n // return true;\r\n // }\r\n}\r\n\r\n/**\r\n * 是否是模块格子\r\n * @param node \r\n * @returns \r\n */\r\nexport function $isModuleGridNode(\r\n node: ModuleGridNode | LexicalNode | null | undefined,\r\n): node is ModuleGridNode {\r\n return node instanceof ModuleGridNode\r\n}\r\n"],"names":[],"mappings":"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"}
|
package/dist/esm/index.js
CHANGED
|
@@ -120,7 +120,7 @@ import { MaterialUploadContext } from "./modules/ms/material-upload-context/Mate
|
|
|
120
120
|
import { materialUploadContextProps } from "./modules/ms/material-upload-context/material-upload-context-options.js";
|
|
121
121
|
import { MKMaterialUploadContext } from "./modules/ms/material-upload-context/material-upload-context.js";
|
|
122
122
|
import { ImageUploadContext } from "./modules/ms/image-upload-context/index.js";
|
|
123
|
-
import { registerPartExtension } from "./modules/cms/composables/part-extensions.js";
|
|
123
|
+
import { registerPartContentComponent, registerPartExtension } from "./modules/cms/composables/part-extensions.js";
|
|
124
124
|
import { CmsAdContentsForm } from "./modules/cms/dataviews/cms-ad-contents/CmsAdContentsForm.js";
|
|
125
125
|
import { CmsAdContentsTable } from "./modules/cms/dataviews/cms-ad-contents/CmsAdContentsTable.js";
|
|
126
126
|
import { CmsAdDefinesForm } from "./modules/cms/dataviews/cms-ad-defines/CmsAdDefinesForm.js";
|
|
@@ -344,6 +344,7 @@ export {
|
|
|
344
344
|
paginationProps,
|
|
345
345
|
provideGlobalConfig,
|
|
346
346
|
registerDocModule,
|
|
347
|
+
registerPartContentComponent,
|
|
347
348
|
registerPartExtension,
|
|
348
349
|
richTextEditorEmits,
|
|
349
350
|
richTextEditorProps,
|
|
@@ -5,8 +5,22 @@ const usePartExtensionList = (partIdorName) => {
|
|
|
5
5
|
const registerPartExtension = (partIdorName, ext) => {
|
|
6
6
|
PartExtensionList.push({ key: partIdorName, extension: ext });
|
|
7
7
|
};
|
|
8
|
+
const PartContentExtensionList = [];
|
|
9
|
+
const usePartContentComponent = (partIdorName) => {
|
|
10
|
+
var _a;
|
|
11
|
+
return (_a = PartContentExtensionList.find((item) => item.key == partIdorName)) == null ? void 0 : _a.component;
|
|
12
|
+
};
|
|
13
|
+
const registerPartContentComponent = (partIdorName, component) => {
|
|
14
|
+
if (!PartExtensionList.find((item) => item.key == partIdorName)) {
|
|
15
|
+
PartContentExtensionList.push({ key: partIdorName, component });
|
|
16
|
+
} else {
|
|
17
|
+
throw new Error(`重复的栏目内容扩展,栏目标识:[${partIdorName}]`);
|
|
18
|
+
}
|
|
19
|
+
};
|
|
8
20
|
export {
|
|
21
|
+
registerPartContentComponent,
|
|
9
22
|
registerPartExtension,
|
|
23
|
+
usePartContentComponent,
|
|
10
24
|
usePartExtensionList
|
|
11
25
|
};
|
|
12
26
|
//# sourceMappingURL=part-extensions.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"part-extensions.js","sources":["../../../../../src/modules/cms/composables/part-extensions.ts"],"sourcesContent":["\r\nimport { type Component } from \"vue\"\r\n\r\n/**\r\n *
|
|
1
|
+
{"version":3,"file":"part-extensions.js","sources":["../../../../../src/modules/cms/composables/part-extensions.ts"],"sourcesContent":["\r\nimport { type Component } from \"vue\"\r\n\r\n/**\r\n * 栏目扩展\r\n */\r\nexport type PartExtension = {\r\n title?:\"\",\r\n saveHandle?:Function,\r\n component:Component,\r\n save:Function\r\n}\r\n\r\n\r\nconst PartExtensionList:Array<({key:string|number,extension:PartExtension})> = [];\r\n\r\n/**\r\n * 使用扩展\r\n * @param partId 或者栏目名称\r\n * @returns \r\n */\r\nexport const usePartExtensionList = (partIdorName:string|number):any=>{\r\n return PartExtensionList.filter(item=>item.key == partIdorName).map(item=>item.extension);\r\n}\r\n\r\n/**\r\n * 注册扩展\r\n * @param partId \r\n * @returns \r\n */\r\nexport const registerPartExtension = (partIdorName:string|number,ext:PartExtension)=>{\r\n PartExtensionList.push({ key:partIdorName,extension:ext })\r\n}\r\n\r\n\r\n// 栏目内容扩展\r\nconst PartContentExtensionList:Array<({key:string|number,component:Component})> = [];\r\n\r\n/**\r\n * 使用扩展\r\n * @param partId 或者栏目名称\r\n * @returns \r\n */\r\nexport const usePartContentComponent = (partIdorName:string|number):any=>{\r\n return PartContentExtensionList.find(item=>item.key == partIdorName)?.component;\r\n}\r\n\r\n/**\r\n * 注册扩展\r\n * @param partId \r\n * @returns \r\n */\r\nexport const registerPartContentComponent = (partIdorName:string|number,component:any)=>{\r\n\r\n if(!PartExtensionList.find(item=>item.key == partIdorName)){\r\n PartContentExtensionList.push({ key:partIdorName,component })\r\n }\r\n else{\r\n throw new Error(`重复的栏目内容扩展,栏目标识:[${partIdorName}]`);\r\n }\r\n \r\n}\r\n"],"names":[],"mappings":"AAcA,MAAM,oBAAyE,CAAA;AAOlE,MAAA,uBAAuB,CAAC,iBAAiC;AAC7D,SAAA,kBAAkB,OAAO,CAAA,SAAM,KAAK,OAAO,YAAY,EAAE,IAAI,CAAM,SAAA,KAAK,SAAS;AAC1F;AAOa,MAAA,wBAAwB,CAAC,cAA2B,QAAoB;AACnF,oBAAkB,KAAK,EAAE,KAAI,cAAa,WAAU,KAAK;AAC3D;AAIA,MAAM,2BAA4E,CAAA;AAOrE,MAAA,0BAA0B,CAAC,iBAAiC;AA7BzE;AA8BE,UAAO,8BAAyB,KAAK,CAAA,SAAM,KAAK,OAAO,YAAY,MAA5D,mBAA+D;AACxE;AAOa,MAAA,+BAA+B,CAAC,cAA2B,cAAgB;AAEtF,MAAG,CAAC,kBAAkB,KAAK,UAAM,KAAK,OAAO,YAAY,GAAE;AACzD,6BAAyB,KAAK,EAAE,KAAI,cAAa,UAAW,CAAA;AAAA,EAAA,OAE1D;AACF,UAAM,IAAI,MAAM,mBAAmB,YAAY,GAAG;AAAA,EACpD;AAEF;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CmsAdContentsForm.js","sources":["../../../../../../src/modules/cms/dataviews/cms-ad-contents/CmsAdContentsForm.ts"],"sourcesContent":["import { DataForm, DataFormOptions, FormColumn } from \"@maketribe/dm\";\r\nimport { ImageUploadContext, MaterialUploadContext } from \"../../../ms\";\r\nimport { DATA_MODEL_NAME } from \"../../../../constants\";\r\nimport { MODULE_NAME } from \"../../constants\";\r\n\r\nexport class CmsAdContentsForm extends DataForm {\r\n\tstatic [DATA_MODEL_NAME]: string = \"ad-content\";\r\n\tcutSise: string = \"\";\r\n\tconstructor(options: DataFormOptions & { cutSise?: string } = {}) {\r\n\t\tsuper({\r\n\t\t\tname: CmsAdContentsForm[DATA_MODEL_NAME],\r\n\t\t\tmoduleName: MODULE_NAME,\r\n\t\t\t...options,\r\n\t\t});\r\n\t\
|
|
1
|
+
{"version":3,"file":"CmsAdContentsForm.js","sources":["../../../../../../src/modules/cms/dataviews/cms-ad-contents/CmsAdContentsForm.ts"],"sourcesContent":["import { DataForm, DataFormOptions, FormColumn } from \"@maketribe/dm\";\r\nimport { ImageUploadContext, MaterialUploadContext } from \"../../../ms\";\r\nimport { DATA_MODEL_NAME } from \"../../../../constants\";\r\nimport { MODULE_NAME } from \"../../constants\";\r\n\r\nexport class CmsAdContentsForm extends DataForm {\r\n\tstatic [DATA_MODEL_NAME]: string = \"ad-content\";\r\n\tcutSise: string = \"\";\r\n\tconstructor(options: DataFormOptions & { cutSise?: string } = {}) {\r\n\t\tsuper({\r\n\t\t\tname: CmsAdContentsForm[DATA_MODEL_NAME],\r\n\t\t\tmoduleName: MODULE_NAME,\r\n\t\t\t...options,\r\n\t\t});\r\n\t\tthis.cutSise = options.cutSise as string\r\n\t}\r\n\r\n\tchangeCutSise(cutSise: string) {\r\n\t\tthis.cutSise = cutSise\r\n\t}\r\n\r\n\tprotected async initialize() {\r\n\t\tawait super.initialize();\r\n\t\tthis.setColumns([\r\n\t\t\t// new FormColumn({ name: \"adDefineId\", label: \"广告定义\", required: true, visible: true }),\r\n\t\t\tnew FormColumn({\r\n\t\t\t\tname: \"title\", label: \"标题\", required: true, componentInfo: \"MKFormInput\",\r\n\t\t\t\tcomponentProps: {\r\n\t\t\t\t\ttype: \"textarea\",\r\n\t\t\t\t\trows: 2\r\n\t\t\t\t}\r\n\t\t\t}),\r\n\t\t\tnew FormColumn({\r\n\t\t\t\tname: \"desc\", label: \"描述\", required: true, componentInfo: \"MKFormInput\",\r\n\t\t\t\tcomponentProps: {\r\n\t\t\t\t\ttype: \"textarea\",\r\n\t\t\t\t\trows: 5\r\n\t\t\t\t}\r\n\t\t\t}),\r\n\t\t\tnew FormColumn({\r\n\t\t\t\tname: \"type\",\r\n\t\t\t\tlabel: \"素材类型\",\r\n\t\t\t\trequired: true,\r\n\t\t\t\tdefaultValue: 1,\r\n\t\t\t\tcomponentInfo: \"MKFormDataSelect\",\r\n\t\t\t\tcomponentProps: {\r\n\t\t\t\t\toptions: [\r\n\t\t\t\t\t\t{ value: 1, label: \"图片\" },\r\n\t\t\t\t\t\t{ value: 2, label: \"视频\" },\r\n\t\t\t\t\t],\r\n\t\t\t\t},\r\n\t\t\t}),\r\n\t\t\tnew FormColumn({\r\n\t\t\t\tname: \"path\",\r\n\t\t\t\tlabel: \"素材路径\",\r\n\t\t\t\trequired: true,\r\n\t\t\t\tcomponentInfo: \"MKFormImageUpload\",\r\n\t\t\t\tcomponentProps: {\r\n\t\t\t\t\tuploadContext: new ImageUploadContext(this.cutSise),\r\n\t\t\t\t},\r\n\t\t\t}),\r\n\t\t\tnew FormColumn({ name: \"link\", label: \"跳转链接\" }),\r\n\t\t]);\r\n\r\n\t\tthis.formItemValueChangeEvent.on((column) => {\r\n\t\t\tif (column.formItem.name == \"type\") {\r\n\t\t\t\tif (column.data.value == 1) {\r\n\t\t\t\t\tthis.getColumn(\"path\")!.componentInfo = \"MKFormImageUpload\"\r\n\t\t\t\t\tthis.getColumn(\"path\")!.componentProps.uploadContext =\r\n\t\t\t\t\t\tnew ImageUploadContext(this.cutSise);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthis.getColumn(\"path\")!.componentInfo = \"MKFormVideoUpload\"\r\n\t\t\t\t\tthis.getColumn(\"path\")!.componentProps.uploadContext =\r\n\t\t\t\t\t\tnew MaterialUploadContext({\r\n\t\t\t\t\t\t\tallowMaterialTypeValues: [2],\r\n\t\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n}\r\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKO,MAAM,qBAAN,MAAM,4BAA0B,eAC9B,sBAD8B,IAAS;AAAA,EAG/C,YAAY,UAAkD,IAAI;AAC3D,UAAA;AAAA,MACL,MAAM,mBAAkB,eAAe;AAAA,MACvC,YAAY;AAAA,MACZ,GAAG;AAAA,IAAA,CACH;AANF,mCAAkB;AAOjB,SAAK,UAAU,QAAQ;AAAA,EACxB;AAAA,EAEA,cAAc,SAAiB;AAC9B,SAAK,UAAU;AAAA,EAChB;AAAA,EAEA,MAAgB,aAAa;AAC5B,UAAM,MAAM;AACZ,SAAK,WAAW;AAAA;AAAA,MAEf,IAAI,WAAW;AAAA,QACd,MAAM;AAAA,QAAS,OAAO;AAAA,QAAM,UAAU;AAAA,QAAM,eAAe;AAAA,QAC3D,gBAAgB;AAAA,UACf,MAAM;AAAA,UACN,MAAM;AAAA,QACP;AAAA,MAAA,CACA;AAAA,MACD,IAAI,WAAW;AAAA,QACd,MAAM;AAAA,QAAQ,OAAO;AAAA,QAAM,UAAU;AAAA,QAAM,eAAe;AAAA,QAC1D,gBAAgB;AAAA,UACf,MAAM;AAAA,UACN,MAAM;AAAA,QACP;AAAA,MAAA,CACA;AAAA,MACD,IAAI,WAAW;AAAA,QACd,MAAM;AAAA,QACN,OAAO;AAAA,QACP,UAAU;AAAA,QACV,cAAc;AAAA,QACd,eAAe;AAAA,QACf,gBAAgB;AAAA,UACf,SAAS;AAAA,YACR,EAAE,OAAO,GAAG,OAAO,KAAK;AAAA,YACxB,EAAE,OAAO,GAAG,OAAO,KAAK;AAAA,UACzB;AAAA,QACD;AAAA,MAAA,CACA;AAAA,MACD,IAAI,WAAW;AAAA,QACd,MAAM;AAAA,QACN,OAAO;AAAA,QACP,UAAU;AAAA,QACV,eAAe;AAAA,QACf,gBAAgB;AAAA,UACf,eAAe,IAAI,mBAAmB,KAAK,OAAO;AAAA,QACnD;AAAA,MAAA,CACA;AAAA,MACD,IAAI,WAAW,EAAE,MAAM,QAAQ,OAAO,QAAQ;AAAA,IAAA,CAC9C;AAEI,SAAA,yBAAyB,GAAG,CAAC,WAAW;AACxC,UAAA,OAAO,SAAS,QAAQ,QAAQ;AAC/B,YAAA,OAAO,KAAK,SAAS,GAAG;AACtB,eAAA,UAAU,MAAM,EAAG,gBAAgB;AACnC,eAAA,UAAU,MAAM,EAAG,eAAe,gBACtC,IAAI,mBAAmB,KAAK,OAAO;AAAA,QAAA,OAC9B;AACD,eAAA,UAAU,MAAM,EAAG,gBAAgB;AACxC,eAAK,UAAU,MAAM,EAAG,eAAe,gBACtC,IAAI,sBAAsB;AAAA,YACzB,yBAAyB,CAAC,CAAC;AAAA,UAAA,CAC3B;AAAA,QACH;AAAA,MACD;AAAA,IAAA,CACA;AAAA,EACF;AACD;AA1EC,cADY,oBACJ,IAA2B;AAD7B,IAAM,oBAAN;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../src/modules/cms/index.ts"],"sourcesContent":["import { InternalMkModule, MkModule } from \"../../core\";\r\n\r\nimport { registerPartExtension } from \"./composables/part-extensions\"\r\n \r\nimport {\r\n CmsAdContentsTable,\r\n CmsAdContentsForm,\r\n CmsAdDefinesTable,\r\n CmsAdDefinesForm,\r\n CmsPartTree,\r\n CmsPartForm,\r\n CmsPartTypesTable,\r\n CmsPartTypesForm,\r\n CmsTagsTable,\r\n CmsTagsForm,\r\n CmsArticlesTable,\r\n CmsArticlesForm,\r\n} from \"./dataviews\";\r\n\r\nexport * from \"./dataviews\";\r\nexport { registerPartExtension }\r\n\r\nconst cmsModule: MkModule = (module: InternalMkModule) => {\r\n module.registerDataTable(CmsAdContentsTable);\r\n module.registerDataForm(CmsAdContentsForm);\r\n\r\n module.registerDataTable(CmsAdDefinesTable);\r\n module.registerDataForm(CmsAdDefinesForm);\r\n\r\n module.registerDataTree(CmsPartTree);\r\n module.registerDataForm(CmsPartForm);\r\n\r\n module.registerDataTable(CmsPartTypesTable);\r\n module.registerDataForm(CmsPartTypesForm);\r\n\r\n module.registerDataTable(CmsTagsTable);\r\n module.registerDataForm(CmsTagsForm);\r\n\r\n module.registerDataTable(CmsArticlesTable);\r\n module.registerDataForm(CmsArticlesForm);\r\n\r\n module.registerExtendsPage({\r\n name: \"cms-resource/index\",\r\n path: \"/cms/resource\",\r\n component: () => import(\"./pages/cms-resource/index.vue\"),\r\n });\r\n\r\n // cms 设置\r\n module.registerExtendsPage({\r\n name: \"cms/settings\",\r\n path: \"cms/settings\",\r\n component: () => import(\"./pages/cms-settigns/index.vue\")\r\n });\r\n\r\n // 内容管理\r\n module.registerExtendsPage({\r\n name: \"cms/contents\",\r\n path: \"/cms/contents\",\r\n component: () => import(\"./pages/cms-contents/index.vue\"),\r\n meta: { name: \"cms-contents\" },\r\n });\r\n\r\n // 栏目编辑\r\n module.registerExtendsPage({\r\n name: \"cms/article\",\r\n path: \"/cms/article\",\r\n component: () => import(\"./pages/cms-contents/article-edit-add-page.vue\"),\r\n meta: { name: \"cms-article\" },\r\n });\r\n\r\n // 广告定义页面\r\n module.registerExtendsPage({\r\n name: \"cms/ad\",\r\n path: \"/cms/ad\",\r\n component: () => import(\"./pages/cms-ad/index.vue\"),\r\n // component: () => import(\"./pages/test/index.vue\")\r\n });\r\n};\r\n\r\nexport default cmsModule;\r\n"],"names":[],"mappings":";;;;;;;;;;;;;AAsBM,MAAA,YAAsB,CAAC,WAA6B;AACxD,SAAO,kBAAkB,kBAAkB;AAC3C,SAAO,iBAAiB,iBAAiB;AAEzC,SAAO,kBAAkB,iBAAiB;AAC1C,SAAO,iBAAiB,gBAAgB;AAExC,SAAO,iBAAiB,WAAW;AACnC,SAAO,iBAAiB,WAAW;AAEnC,SAAO,kBAAkB,iBAAiB;AAC1C,SAAO,iBAAiB,gBAAgB;AAExC,SAAO,kBAAkB,YAAY;AACrC,SAAO,iBAAiB,WAAW;AAEnC,SAAO,kBAAkB,gBAAgB;AACzC,SAAO,iBAAiB,eAAe;AAEvC,SAAO,oBAAoB;AAAA,IACzB,MAAM;AAAA,IACN,MAAM;AAAA,IACN,WAAW,MAAM,OAAO,mCAAgC;AAAA,EAAA,CACzD;AAGD,SAAO,oBAAoB;AAAA,IACzB,MAAM;AAAA,IACN,MAAM;AAAA,IACN,WAAW,MAAM,OAAO,mCAAgC;AAAA,EAAA,CACzD;AAGD,SAAO,oBAAoB;AAAA,IACzB,MAAM;AAAA,IACN,MAAM;AAAA,IACN,WAAW,MAAM,OAAO,mCAAgC;AAAA,IACxD,MAAM,EAAE,MAAM,eAAe;AAAA,EAAA,CAC9B;AAGD,SAAO,oBAAoB;AAAA,IACzB,MAAM;AAAA,IACN,MAAM;AAAA,IACN,WAAW,MAAM,OAAO,mDAAgD;AAAA,IACxE,MAAM,EAAE,MAAM,cAAc;AAAA,EAAA,CAC7B;AAGD,SAAO,oBAAoB;AAAA,IACzB,MAAM;AAAA,IACN,MAAM;AAAA,IACN,WAAW,MAAM,OAAO,6BAA0B;AAAA;AAAA,EAAA,CAEnD;AACH;"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../src/modules/cms/index.ts"],"sourcesContent":["import { InternalMkModule, MkModule } from \"../../core\";\r\n\r\nimport { registerPartExtension,registerPartContentComponent } from \"./composables/part-extensions\"\r\n \r\nimport {\r\n CmsAdContentsTable,\r\n CmsAdContentsForm,\r\n CmsAdDefinesTable,\r\n CmsAdDefinesForm,\r\n CmsPartTree,\r\n CmsPartForm,\r\n CmsPartTypesTable,\r\n CmsPartTypesForm,\r\n CmsTagsTable,\r\n CmsTagsForm,\r\n CmsArticlesTable,\r\n CmsArticlesForm,\r\n} from \"./dataviews\";\r\n\r\nexport * from \"./dataviews\";\r\nexport { registerPartExtension,registerPartContentComponent }\r\n\r\nconst cmsModule: MkModule = (module: InternalMkModule) => {\r\n module.registerDataTable(CmsAdContentsTable);\r\n module.registerDataForm(CmsAdContentsForm);\r\n\r\n module.registerDataTable(CmsAdDefinesTable);\r\n module.registerDataForm(CmsAdDefinesForm);\r\n\r\n module.registerDataTree(CmsPartTree);\r\n module.registerDataForm(CmsPartForm);\r\n\r\n module.registerDataTable(CmsPartTypesTable);\r\n module.registerDataForm(CmsPartTypesForm);\r\n\r\n module.registerDataTable(CmsTagsTable);\r\n module.registerDataForm(CmsTagsForm);\r\n\r\n module.registerDataTable(CmsArticlesTable);\r\n module.registerDataForm(CmsArticlesForm);\r\n\r\n module.registerExtendsPage({\r\n name: \"cms-resource/index\",\r\n path: \"/cms/resource\",\r\n component: () => import(\"./pages/cms-resource/index.vue\"),\r\n });\r\n\r\n // cms 设置\r\n module.registerExtendsPage({\r\n name: \"cms/settings\",\r\n path: \"cms/settings\",\r\n component: () => import(\"./pages/cms-settigns/index.vue\")\r\n });\r\n\r\n // 内容管理\r\n module.registerExtendsPage({\r\n name: \"cms/contents\",\r\n path: \"/cms/contents\",\r\n component: () => import(\"./pages/cms-contents/index.vue\"),\r\n meta: { name: \"cms-contents\" },\r\n });\r\n\r\n // 栏目编辑\r\n module.registerExtendsPage({\r\n name: \"cms/article\",\r\n path: \"/cms/article\",\r\n component: () => import(\"./pages/cms-contents/article-edit-add-page.vue\"),\r\n meta: { name: \"cms-article\" },\r\n });\r\n\r\n // 广告定义页面\r\n module.registerExtendsPage({\r\n name: \"cms/ad\",\r\n path: \"/cms/ad\",\r\n component: () => import(\"./pages/cms-ad/index.vue\"),\r\n // component: () => import(\"./pages/test/index.vue\")\r\n });\r\n};\r\n\r\nexport default cmsModule;\r\n"],"names":[],"mappings":";;;;;;;;;;;;;AAsBM,MAAA,YAAsB,CAAC,WAA6B;AACxD,SAAO,kBAAkB,kBAAkB;AAC3C,SAAO,iBAAiB,iBAAiB;AAEzC,SAAO,kBAAkB,iBAAiB;AAC1C,SAAO,iBAAiB,gBAAgB;AAExC,SAAO,iBAAiB,WAAW;AACnC,SAAO,iBAAiB,WAAW;AAEnC,SAAO,kBAAkB,iBAAiB;AAC1C,SAAO,iBAAiB,gBAAgB;AAExC,SAAO,kBAAkB,YAAY;AACrC,SAAO,iBAAiB,WAAW;AAEnC,SAAO,kBAAkB,gBAAgB;AACzC,SAAO,iBAAiB,eAAe;AAEvC,SAAO,oBAAoB;AAAA,IACzB,MAAM;AAAA,IACN,MAAM;AAAA,IACN,WAAW,MAAM,OAAO,mCAAgC;AAAA,EAAA,CACzD;AAGD,SAAO,oBAAoB;AAAA,IACzB,MAAM;AAAA,IACN,MAAM;AAAA,IACN,WAAW,MAAM,OAAO,mCAAgC;AAAA,EAAA,CACzD;AAGD,SAAO,oBAAoB;AAAA,IACzB,MAAM;AAAA,IACN,MAAM;AAAA,IACN,WAAW,MAAM,OAAO,mCAAgC;AAAA,IACxD,MAAM,EAAE,MAAM,eAAe;AAAA,EAAA,CAC9B;AAGD,SAAO,oBAAoB;AAAA,IACzB,MAAM;AAAA,IACN,MAAM;AAAA,IACN,WAAW,MAAM,OAAO,mDAAgD;AAAA,IACxE,MAAM,EAAE,MAAM,cAAc;AAAA,EAAA,CAC7B;AAGD,SAAO,oBAAoB;AAAA,IACzB,MAAM;AAAA,IACN,MAAM;AAAA,IACN,WAAW,MAAM,OAAO,6BAA0B;AAAA;AAAA,EAAA,CAEnD;AACH;"}
|
|
@@ -44,7 +44,7 @@ import "../../../../components/business/resource-manager/index.js";
|
|
|
44
44
|
import { CmsPartForm } from "../../dataviews/cms-parts/CmsPartForm.js";
|
|
45
45
|
import { CmsContentManPartForm } from "../../dataviews/cms-parts/CmsContentManPartForm.js";
|
|
46
46
|
import { CmsPartMiniForm } from "../../dataviews/cms-parts/CmsPartMiniForm.js";
|
|
47
|
-
import { usePartExtensionList } from "../../composables/part-extensions.js";
|
|
47
|
+
import { usePartExtensionList, usePartContentComponent } from "../../composables/part-extensions.js";
|
|
48
48
|
import { useCmsSettings } from "../../cms-settings.js";
|
|
49
49
|
const _hoisted_1 = { class: "mk-cms-contents__warp" };
|
|
50
50
|
const _hoisted_2 = { style: { "color": "var(--el-text-color-regular)", "margin-left": "10px" } };
|
|
@@ -52,12 +52,13 @@ const _hoisted_3 = { class: "flex items-center" };
|
|
|
52
52
|
const _hoisted_4 = { class: "mk-cms-contents__body" };
|
|
53
53
|
const _hoisted_5 = { class: "mk-cms-contents__body__right__action" };
|
|
54
54
|
const _hoisted_6 = { class: "el-dropdown-link" };
|
|
55
|
-
const _hoisted_7 = {
|
|
56
|
-
const _hoisted_8 =
|
|
57
|
-
const _hoisted_9 = /* @__PURE__ */ createElementVNode("span", null, "
|
|
58
|
-
const _hoisted_10 = /* @__PURE__ */ createElementVNode("span", null, "
|
|
59
|
-
const _hoisted_11 = /* @__PURE__ */ createElementVNode("span", null, "
|
|
60
|
-
const _hoisted_12 = /* @__PURE__ */ createElementVNode("span", null, "
|
|
55
|
+
const _hoisted_7 = { style: { "background": "#fff", "margin-top": "-10px" } };
|
|
56
|
+
const _hoisted_8 = { class: "mk-cms-contents__publish" };
|
|
57
|
+
const _hoisted_9 = /* @__PURE__ */ createElementVNode("span", null, "是否发布列表:", -1);
|
|
58
|
+
const _hoisted_10 = /* @__PURE__ */ createElementVNode("span", null, "是否发布封面:", -1);
|
|
59
|
+
const _hoisted_11 = /* @__PURE__ */ createElementVNode("span", null, "是否发布内容:", -1);
|
|
60
|
+
const _hoisted_12 = /* @__PURE__ */ createElementVNode("span", null, "是否发布资源:", -1);
|
|
61
|
+
const _hoisted_13 = /* @__PURE__ */ createElementVNode("span", null, "是否强制发布:", -1);
|
|
61
62
|
const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
62
63
|
__name: "index",
|
|
63
64
|
setup(__props) {
|
|
@@ -83,6 +84,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
83
84
|
const curSelectPartItem = ref(null);
|
|
84
85
|
const partTreeRef = ref(null);
|
|
85
86
|
const partExList = ref([]);
|
|
87
|
+
const partContentComponent = ref(null);
|
|
86
88
|
const partDataForm = reactive(new CmsContentManPartForm());
|
|
87
89
|
partDataForm.init();
|
|
88
90
|
let beforeInitFormPart = null;
|
|
@@ -106,6 +108,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
106
108
|
}
|
|
107
109
|
router.replace({ name: "cms/contents", query: { pid: curSelectPartItem.value.id } });
|
|
108
110
|
partExList.value = usePartExtensionList(curSelectPartItem.value.id).concat(usePartExtensionList(curSelectPartItem.value.name));
|
|
111
|
+
partContentComponent.value = usePartContentComponent(curSelectPartItem.value.id) || usePartContentComponent(curSelectPartItem.value.name);
|
|
109
112
|
}
|
|
110
113
|
};
|
|
111
114
|
const deletePartHandle = (item) => {
|
|
@@ -270,7 +273,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
270
273
|
}, 1032, ["onClick"])) : createCommentVNode("", true)
|
|
271
274
|
], 64);
|
|
272
275
|
}), 256)),
|
|
273
|
-
activeTabName.value == "part" || activeTabName.value == "part-content" ? (openBlock(), createBlock(_component_el_button, {
|
|
276
|
+
activeTabName.value == "part" || activeTabName.value == "part-content" && !partContentComponent.value ? (openBlock(), createBlock(_component_el_button, {
|
|
274
277
|
key: 0,
|
|
275
278
|
type: "primary",
|
|
276
279
|
text: "",
|
|
@@ -377,41 +380,49 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
377
380
|
})), [
|
|
378
381
|
[_directive_loading, partDataForm.loading]
|
|
379
382
|
]),
|
|
380
|
-
curSelectPartItem.value.cmsPartTypeId != 1 ?
|
|
383
|
+
curSelectPartItem.value.cmsPartTypeId != 1 ? (openBlock(), createBlock(_component_el_tab_pane, {
|
|
381
384
|
key: 1,
|
|
382
385
|
label: "页面内容",
|
|
383
386
|
name: "part-content",
|
|
384
387
|
style: { "background-color": "#f4f4f4" }
|
|
385
388
|
}, {
|
|
386
389
|
default: withCtx(() => {
|
|
387
|
-
var _a;
|
|
390
|
+
var _a, _b, _c, _d;
|
|
388
391
|
return [
|
|
389
|
-
|
|
390
|
-
|
|
392
|
+
partContentComponent.value ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [
|
|
393
|
+
((_a = partDataForm.data) == null ? void 0 : _a.id) ? (openBlock(), createBlock(_sfc_main$3, {
|
|
394
|
+
key: 0,
|
|
395
|
+
partId: (_b = partDataForm.data) == null ? void 0 : _b.id,
|
|
396
|
+
title: (_c = partDataForm.data) == null ? void 0 : _c.title
|
|
397
|
+
}, null, 8, ["partId", "title"])) : createCommentVNode("", true),
|
|
398
|
+
createElementVNode("div", _hoisted_7, [
|
|
399
|
+
(openBlock(), createBlock(resolveDynamicComponent(partContentComponent.value)))
|
|
400
|
+
])
|
|
401
|
+
], 64)) : activeTabName.value == "part-content" ? (openBlock(), createBlock(unref(MKDocEditor), {
|
|
402
|
+
key: 1,
|
|
391
403
|
css: unref(CmsSettings).part.doc.css,
|
|
392
404
|
js: unref(CmsSettings).part.doc.js,
|
|
393
|
-
|
|
405
|
+
loading: partDataForm.loading,
|
|
406
|
+
content: (_d = partDataForm.data) == null ? void 0 : _d.content,
|
|
394
407
|
placeholder: "从这里开始写正文...",
|
|
395
408
|
onChange: EditorChangeHandle
|
|
396
409
|
}, {
|
|
397
410
|
"before-extentions": withCtx(() => {
|
|
398
|
-
var _a2,
|
|
411
|
+
var _a2, _b2, _c2;
|
|
399
412
|
return [
|
|
400
413
|
((_a2 = partDataForm.data) == null ? void 0 : _a2.id) ? (openBlock(), createBlock(_sfc_main$3, {
|
|
401
414
|
key: 0,
|
|
402
|
-
partId: (
|
|
403
|
-
title: (
|
|
415
|
+
partId: (_b2 = partDataForm.data) == null ? void 0 : _b2.id,
|
|
416
|
+
title: (_c2 = partDataForm.data) == null ? void 0 : _c2.title
|
|
404
417
|
}, null, 8, ["partId", "title"])) : createCommentVNode("", true)
|
|
405
418
|
];
|
|
406
419
|
}),
|
|
407
420
|
_: 1
|
|
408
|
-
}, 8, ["css", "js", "content"])) : createCommentVNode("", true)
|
|
421
|
+
}, 8, ["css", "js", "loading", "content"])) : createCommentVNode("", true)
|
|
409
422
|
];
|
|
410
423
|
}),
|
|
411
424
|
_: 1
|
|
412
|
-
})),
|
|
413
|
-
[_directive_loading, partDataForm.loading]
|
|
414
|
-
]) : createCommentVNode("", true),
|
|
425
|
+
})) : createCommentVNode("", true),
|
|
415
426
|
(openBlock(true), createElementBlock(Fragment, null, renderList(partExList.value, (ext, i) => {
|
|
416
427
|
return openBlock(), createBlock(_component_el_tab_pane, {
|
|
417
428
|
label: ext.title || `页面扩展设置 ${i == 0 ? "" : i}`,
|
|
@@ -459,9 +470,9 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
459
470
|
}, 8, ["loading"])
|
|
460
471
|
]),
|
|
461
472
|
default: withCtx(() => [
|
|
462
|
-
createElementVNode("div",
|
|
473
|
+
createElementVNode("div", _hoisted_8, [
|
|
463
474
|
createElementVNode("div", null, [
|
|
464
|
-
|
|
475
|
+
_hoisted_9,
|
|
465
476
|
createTextVNode(),
|
|
466
477
|
createVNode(unref(ElSwitch), {
|
|
467
478
|
modelValue: optionData.value.isPublishList,
|
|
@@ -470,7 +481,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
470
481
|
}, null, 8, ["modelValue", "disabled"])
|
|
471
482
|
]),
|
|
472
483
|
createElementVNode("div", null, [
|
|
473
|
-
|
|
484
|
+
_hoisted_10,
|
|
474
485
|
createTextVNode(),
|
|
475
486
|
createVNode(unref(ElSwitch), {
|
|
476
487
|
modelValue: optionData.value.isPublishCover,
|
|
@@ -479,7 +490,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
479
490
|
}, null, 8, ["modelValue", "disabled"])
|
|
480
491
|
]),
|
|
481
492
|
createElementVNode("div", null, [
|
|
482
|
-
|
|
493
|
+
_hoisted_11,
|
|
483
494
|
createTextVNode(),
|
|
484
495
|
createVNode(unref(ElSwitch), {
|
|
485
496
|
modelValue: optionData.value.isPublishContent,
|
|
@@ -488,7 +499,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
488
499
|
}, null, 8, ["modelValue", "disabled"])
|
|
489
500
|
]),
|
|
490
501
|
createElementVNode("div", null, [
|
|
491
|
-
|
|
502
|
+
_hoisted_12,
|
|
492
503
|
createTextVNode(),
|
|
493
504
|
createVNode(unref(ElSwitch), {
|
|
494
505
|
modelValue: optionData.value.isPublishAssets,
|
|
@@ -496,7 +507,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
496
507
|
}, null, 8, ["modelValue"])
|
|
497
508
|
]),
|
|
498
509
|
createElementVNode("div", null, [
|
|
499
|
-
|
|
510
|
+
_hoisted_13,
|
|
500
511
|
createTextVNode(),
|
|
501
512
|
createVNode(unref(ElSwitch), {
|
|
502
513
|
modelValue: optionData.value.isCompulsion,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.vue2.js","sources":["../../../../../../src/modules/cms/pages/cms-contents/index.vue"],"sourcesContent":["<template>\r\n <div class=\"mk-cms-contents__warp\" v-loading=\"loading\">\r\n <el-page-header style=\"background-color: #fff; padding: 10px\" :icon=\"null\">\r\n <template #title>\r\n <h3 style=\"color: var(--el-text-color-regular); margin-left: 10px\">\r\n <MKSvgIcon iconClass=\"richtext-outline\" style=\"margin-right: 5px\" />\r\n 内容管理\r\n </h3>\r\n </template>\r\n <template #extra>\r\n <div class=\"flex items-center\">\r\n <el-button-group>\r\n <el-button type=\"primary\" size=\"large\" text v-if=\"CmsSettings.publish.mode == 'static'\" @click=\"publishAllPartHandle\">\r\n <MKSvgIcon iconClass=\"Promotion\" style=\"margin-right: 10px\" />\r\n 整站发布\r\n </el-button>\r\n <el-button type=\"primary\" size=\"large\" text @click=\"showPartFormHandle\">\r\n <MKSvgIcon iconClass=\"Plus\" style=\"margin-right: 10px\" />\r\n 新增栏目\r\n </el-button>\r\n </el-button-group>\r\n </div>\r\n </template>\r\n </el-page-header>\r\n <div class=\"mk-cms-contents__body\">\r\n <MKPartTree class=\"mk-cms-contents__body__left\" @select=\"selectPartHandle\" @edit=\"editPartHandle\"\r\n @add=\"showPartFormHandle\" @deleteSuccessfully=\"deletePartHandle\" ref=\"partTreeRef\"\r\n :curSelectId=\"curSelectPartId\" />\r\n <el-tabs v-if=\"curSelectPartItem\" v-model=\"activeTabName\" class=\"mk-cms-contents__body__right\">\r\n <div class=\"mk-cms-contents__body__right__action\">\r\n\r\n <template v-for=\"(ext,i) in partExList\" :label=\"ext.title || `页面扩展设置 ${i+1}`\" :name=\"\">\r\n <el-button type=\"primary\" text @click=\"ext.save()\" v-if=\"activeTabName == `part-ext${i}` && ext.save\">\r\n <MKSvgIcon iconClass=\"save\" style=\"margin-right: 5px\" />\r\n 保存{{ext.title}}\r\n </el-button>\r\n </template>\r\n <template v-if=\"activeTabName == 'part' || activeTabName == 'part-content'\">\r\n <el-button type=\"primary\" text @click=\"savePartHandle()\" :disabled=\"!partDataForm?.isChanged\">\r\n <MKSvgIcon iconClass=\"save\" style=\"margin-right: 5px\" />\r\n 保存\r\n </el-button>\r\n </template>\r\n <el-dropdown v-if=\"CmsSettings.publish.mode == 'static' && curSelectPartItem.coverTemplate || curSelectPartItem.listTemplate || curSelectPartItem.contentTemplate\">\r\n <span class=\"el-dropdown-link\">\r\n <el-button type=\"primary\" text>\r\n <MKSvgIcon iconClass=\"MoreFilled\" />\r\n </el-button>\r\n </span>\r\n <template #dropdown>\r\n <el-dropdown-menu>\r\n <el-dropdown-item @click=\"CmsPartForm.openPreview(curSelectPartItem.id)\" v-if=\"CmsSettings.publish.mode == 'static' && curSelectPartItem.coverTemplate\">\r\n <MKSvgIcon iconClass=\"View\" style=\"margin-left: 10px;\" />\r\n 预览封面\r\n </el-dropdown-item>\r\n <el-dropdown-item @click=\"CmsPartForm.openPreview(curSelectPartItem.id,'1')\" v-if=\"curSelectPartItem.listTemplate\">\r\n <MKSvgIcon iconClass=\"View\" style=\"margin-left: 10px;\" />\r\n 预览列表\r\n </el-dropdown-item>\r\n <el-dropdown-item @click=\"showPublish = true\">\r\n <MKSvgIcon iconClass=\"Promotion\" style=\"margin-left: 10px;\" />\r\n 发布当前栏目\r\n </el-dropdown-item>\r\n </el-dropdown-menu>\r\n </template>\r\n </el-dropdown>\r\n </div>\r\n <el-tab-pane label=\"文章列表\" name=\"article-list\" v-if=\"curSelectPartItem.contentTemplate\">\r\n <ArticleList v-if=\"activeTabName == 'article-list'\" :part=\"curSelectPartItem\" />\r\n </el-tab-pane>\r\n <el-tab-pane label=\"栏目设置\" name=\"part\" v-loading=\"partDataForm.loading\">\r\n <PartInfo v-if=\"activeTabName == 'part'\" :part=\"curSelectPartItem\" ref=\"partInfoRef\"\r\n :partDataForm=\"partDataForm\" />\r\n </el-tab-pane>\r\n <el-tab-pane label=\"页面内容\" name=\"part-content\" style=\"background-color: #f4f4f4\"\r\n v-if=\"curSelectPartItem.cmsPartTypeId != 1\" v-loading=\"partDataForm.loading\">\r\n <MKDocEditor v-if=\"activeTabName == 'part-content'\" :css=\"CmsSettings.part.doc.css\" :js=\"CmsSettings.part.doc.js\" :content=\"partDataForm.data?.content\"\r\n placeholder=\"从这里开始写正文...\" @change=\"EditorChangeHandle\">\r\n <template #before-extentions>\r\n <PartBannerEdit v-if=\"partDataForm.data?.id\" :partId=\"partDataForm.data?.id\" :title=\"partDataForm.data?.title\" />\r\n </template>\r\n </MKDocEditor>\r\n </el-tab-pane>\r\n <el-tab-pane v-for=\"(ext,i) in partExList\" :label=\"ext.title || `页面扩展设置 ${i==0 ?'':i}`\" :name=\"`part-ext${i}`\">\r\n <component :is=\"ext.component\" />\r\n </el-tab-pane>\r\n \r\n </el-tabs>\r\n <el-empty v-else description=\"请选择栏目\" style=\"width: 100%\" />\r\n </div>\r\n <el-dialog v-model=\"showPublish\" title=\"栏目发布\" width=\"475px\" :append-to-body=\"false\">\r\n <div class=\"mk-cms-contents__publish\">\r\n <div><span>是否发布列表:</span> <el-switch v-model=\"optionData.isPublishList\"\r\n :disabled=\"!curSelectPartItem.listTemplate\" /></div>\r\n <div><span>是否发布封面:</span> <el-switch v-model=\"optionData.isPublishCover\"\r\n :disabled=\"!curSelectPartItem.coverTemplate\" /></div>\r\n <div><span>是否发布内容:</span> <el-switch v-model=\"optionData.isPublishContent\"\r\n :disabled=\"!curSelectPartItem.contentTemplate\" /></div>\r\n <div><span>是否发布资源:</span> <el-switch v-model=\"optionData.isPublishAssets\" /></div>\r\n <div><span>是否强制发布:</span> <el-switch v-model=\"optionData.isCompulsion\" /></div>\r\n </div>\r\n <template #footer>\r\n <el-button @click=\"showPublish = false\">取消</el-button>\r\n <el-button type=\"primary\" @click=\"publishPartHandle\" :loading=\"publishLoading\">确定</el-button>\r\n </template>\r\n </el-dialog>\r\n </div>\r\n</template>\r\n<script setup lang=\"ts\" >\r\nimport { MKPartTree } from \"../../components\";\r\nimport ArticleList from \"./components/article-list.vue\";\r\nimport PartInfo from \"./components/part-info.vue\";\r\nimport PartBannerEdit from \"./components/part-banner-edit.vue\";\r\nimport { MKDocEditor } from \"../../../../components\";\r\nimport { reactive, ref, watch,watchEffect } from \"vue\";\r\nimport { Dialoger } from \"@maketribe/dm\";\r\nimport { CmsContentManPartForm,CmsPartForm, CmsPartMiniForm } from \"../../dataviews/cms-parts\";\r\nimport { useRoute, useRouter } from \"vue-router\";\r\nimport { usePartExtensionList, type PartExtension } from \"../../composables/part-extensions\"\r\nimport { ElSwitch } from \"element-plus\";\r\nimport { useCmsSettings } from \"../../cms-settings\"\r\n//路由 \r\nconst route = useRoute();\r\nconst router = useRouter();\r\n\r\n// 当前选中的栏目id\r\nconst curSelectPartId = ref<string>(route.query.pid as string)\r\nwatch(()=>route.query.pid,(v:any)=>{\r\n curSelectPartId.value = v \r\n},{ immediate:true });\r\n\r\n//栏目Mini表单\r\nconst partMiniForm = reactive<CmsPartMiniForm>(new CmsPartMiniForm());\r\n\r\n// cms 配置\r\nconst CmsSettings = useCmsSettings(true);\r\n\r\n//发布栏目时的配置\r\nconst showPublish = ref(false)\r\n\r\n//发布配置项\r\nconst optionData = ref({\r\n isPublishList: false,\r\n isPublishCover: false,\r\n isPublishContent: false,\r\n isPublishAssets: false,\r\n isCompulsion: true\r\n});\r\n\r\n//发布加载状态\r\nconst publishLoading = ref(false);\r\n\r\n// 数据加载状态\r\nconst loading = ref(false)\r\n\r\n// 激活的tab\r\nconst activeTabName = ref(\"article-list\");\r\n\r\n// 当前选中的菜单\r\nconst curSelectPartItem = ref(null as any);\r\n\r\n// 栏目树ref\r\nconst partTreeRef = ref(null);\r\n\r\n//栏目扩展\r\nconst partExList = ref<Array<PartExtension>>([]);\r\n\r\n//栏目数据\r\nconst partDataForm = reactive(new CmsContentManPartForm()) as CmsContentManPartForm;\r\n\r\n// 初始化表单\r\npartDataForm.init();\r\n\r\n// 切换tab 加载栏目表单数据\r\nlet beforeInitFormPart:any = null;\r\nwatchEffect(async ()=>{\r\n if((activeTabName.value == \"part\" || activeTabName.value == \"part-content\") && curSelectPartItem.value != beforeInitFormPart){\r\n try {\r\n beforeInitFormPart = curSelectPartItem.value;\r\n await partDataForm.editRecord(curSelectPartItem.value.id);\r\n } catch (error) {\r\n console.log(error)\r\n }\r\n }\r\n});\r\n\r\n// 选择栏目\r\nconst selectPartHandle = async (item: any) => {\r\n\r\n if (curSelectPartItem.value != item) {\r\n\r\n curSelectPartItem.value = item;\r\n\r\n if (!curSelectPartItem.value.contentTemplate) {\r\n activeTabName.value = \"part\";\r\n }\r\n else{\r\n activeTabName.value = \"article-list\";\r\n }\r\n router.replace({ name: 'cms/contents', query: { pid: curSelectPartItem.value.id } } as any)\r\n partExList.value = usePartExtensionList(curSelectPartItem.value.id).concat(usePartExtensionList(curSelectPartItem.value.name));\r\n }\r\n};\r\n\r\n//删除栏目\r\nconst deletePartHandle = (item: any) => {\r\n if (item.id == curSelectPartItem.value.id) {\r\n curSelectPartItem.value = null;\r\n }\r\n};\r\n\r\n//编辑栏目\r\nconst editPartHandle = (item: any) => {\r\n curSelectPartItem.value = item;\r\n activeTabName.value = \"part\";\r\n};\r\n\r\n/**\r\n * 显示添加栏目表单\r\n */\r\nconst showPartFormHandle = async (item?: any) => {\r\n await Dialoger.dataFormDialog({\r\n dataForm: partMiniForm as CmsContentManPartForm,\r\n });\r\n\r\n if (item.id) {\r\n partMiniForm.addRecord({ parentId: item.id });\r\n }\r\n\r\n};\r\n\r\nwatch(showPublish, async (v) => {\r\n if(v){\r\n optionData.value.isPublishList = !!curSelectPartItem.value.listTemplate\r\n optionData.value.isPublishCover = !!curSelectPartItem.value.coverTemplate\r\n optionData.value.isPublishContent = !!curSelectPartItem.value.contentTemplate\r\n }\r\n})\r\n \r\n//监听表单完成事件\r\npartMiniForm.submittedEvent.on(({ response }:any) => {\r\n if(response.data.data){\r\n // 重置选中\r\n curSelectPartId.value = response.data.data;\r\n // 刷新完成直接选中\r\n (partTreeRef.value! as any).dataTree?.load();\r\n }\r\n \r\n});\r\n\r\n//栏目发布\r\nconst publishAllPartHandle = async () => {\r\n\r\n try {\r\n\r\n loading.value = true;\r\n \r\n await CmsPartForm.publishAll()\r\n } \r\n finally {\r\n loading.value = false;\r\n }\r\n\r\n}\r\nconst publishPartHandle = async () => {\r\n \r\n try {\r\n\r\n publishLoading.value = true\r\n\r\n await CmsPartForm.publish(curSelectPartItem.value.id,optionData.value);\r\n\r\n showPublish.value = false;\r\n\r\n } finally {\r\n publishLoading.value = false\r\n }\r\n}\r\n\r\n/**\r\n * 保存栏目信息\r\n */\r\nconst savePartHandle = async () => {\r\n curSelectPartItem.value = partDataForm.data;\r\n await partDataForm.submit();\r\n}\r\n\r\n/**\r\n * 更新编辑器内容\r\n * @param v 内容\r\n */\r\nconst EditorChangeHandle = (v: any) => {\r\n partDataForm.data.content = v\r\n}\r\n</script>\r\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.vue2.js","sources":["../../../../../../src/modules/cms/pages/cms-contents/index.vue"],"sourcesContent":["<template>\r\n <div class=\"mk-cms-contents__warp\" v-loading=\"loading\">\r\n <el-page-header style=\"background-color: #fff; padding: 10px\" :icon=\"null\">\r\n <template #title>\r\n <h3 style=\"color: var(--el-text-color-regular); margin-left: 10px\">\r\n <MKSvgIcon iconClass=\"richtext-outline\" style=\"margin-right: 5px\" />\r\n 内容管理\r\n </h3>\r\n </template>\r\n <template #extra>\r\n <div class=\"flex items-center\">\r\n <el-button-group>\r\n <el-button type=\"primary\" size=\"large\" text v-if=\"CmsSettings.publish.mode == 'static'\" @click=\"publishAllPartHandle\">\r\n <MKSvgIcon iconClass=\"Promotion\" style=\"margin-right: 10px\" />\r\n 整站发布\r\n </el-button>\r\n <el-button type=\"primary\" size=\"large\" text @click=\"showPartFormHandle\">\r\n <MKSvgIcon iconClass=\"Plus\" style=\"margin-right: 10px\" />\r\n 新增栏目\r\n </el-button>\r\n </el-button-group>\r\n </div>\r\n </template>\r\n </el-page-header>\r\n <div class=\"mk-cms-contents__body\">\r\n <MKPartTree class=\"mk-cms-contents__body__left\" @select=\"selectPartHandle\" @edit=\"editPartHandle\"\r\n @add=\"showPartFormHandle\" @deleteSuccessfully=\"deletePartHandle\" ref=\"partTreeRef\"\r\n :curSelectId=\"curSelectPartId\" />\r\n <el-tabs v-if=\"curSelectPartItem\" v-model=\"activeTabName\" class=\"mk-cms-contents__body__right\">\r\n <div class=\"mk-cms-contents__body__right__action\">\r\n\r\n <template v-for=\"(ext,i) in partExList\" :label=\"ext.title || `页面扩展设置 ${i+1}`\" :name=\"\">\r\n <el-button type=\"primary\" text @click=\"ext.save()\" v-if=\"activeTabName == `part-ext${i}` && ext.save\">\r\n <MKSvgIcon iconClass=\"save\" style=\"margin-right: 5px\" />\r\n 保存{{ext.title}}\r\n </el-button>\r\n </template>\r\n <template v-if=\"activeTabName == 'part' || (activeTabName == 'part-content' && !partContentComponent)\">\r\n <el-button type=\"primary\" text @click=\"savePartHandle()\" :disabled=\"!partDataForm?.isChanged\">\r\n <MKSvgIcon iconClass=\"save\" style=\"margin-right: 5px\" />\r\n 保存\r\n </el-button>\r\n </template>\r\n <el-dropdown v-if=\"CmsSettings.publish.mode == 'static' && curSelectPartItem.coverTemplate || curSelectPartItem.listTemplate || curSelectPartItem.contentTemplate\">\r\n <span class=\"el-dropdown-link\">\r\n <el-button type=\"primary\" text>\r\n <MKSvgIcon iconClass=\"MoreFilled\" />\r\n </el-button>\r\n </span>\r\n <template #dropdown>\r\n <el-dropdown-menu>\r\n <el-dropdown-item @click=\"CmsPartForm.openPreview(curSelectPartItem.id)\" v-if=\"CmsSettings.publish.mode == 'static' && curSelectPartItem.coverTemplate\">\r\n <MKSvgIcon iconClass=\"View\" style=\"margin-left: 10px;\" />\r\n 预览封面\r\n </el-dropdown-item>\r\n <el-dropdown-item @click=\"CmsPartForm.openPreview(curSelectPartItem.id,'1')\" v-if=\"curSelectPartItem.listTemplate\">\r\n <MKSvgIcon iconClass=\"View\" style=\"margin-left: 10px;\" />\r\n 预览列表\r\n </el-dropdown-item>\r\n <el-dropdown-item @click=\"showPublish = true\">\r\n <MKSvgIcon iconClass=\"Promotion\" style=\"margin-left: 10px;\" />\r\n 发布当前栏目\r\n </el-dropdown-item>\r\n </el-dropdown-menu>\r\n </template>\r\n </el-dropdown>\r\n </div>\r\n <el-tab-pane label=\"文章列表\" name=\"article-list\" v-if=\"curSelectPartItem.contentTemplate\">\r\n <ArticleList v-if=\"activeTabName == 'article-list'\" :part=\"curSelectPartItem\" />\r\n </el-tab-pane>\r\n <el-tab-pane label=\"栏目设置\" name=\"part\" v-loading=\"partDataForm.loading\">\r\n <PartInfo v-if=\"activeTabName == 'part'\" :part=\"curSelectPartItem\" ref=\"partInfoRef\"\r\n :partDataForm=\"partDataForm\" />\r\n </el-tab-pane>\r\n <el-tab-pane label=\"页面内容\" name=\"part-content\" style=\"background-color: #f4f4f4\" v-if=\"curSelectPartItem.cmsPartTypeId != 1\">\r\n \r\n <template v-if=\"partContentComponent\">\r\n <PartBannerEdit v-if=\"partDataForm.data?.id\" :partId=\"partDataForm.data?.id\" :title=\"partDataForm.data?.title\" />\r\n <div style=\"background: #fff;margin-top: -10px;\">\r\n <component :is=\"partContentComponent\" />\r\n </div>\r\n </template>\r\n <template v-else-if=\"activeTabName == 'part-content'\">\r\n <MKDocEditor :css=\"CmsSettings.part.doc.css\" :js=\"CmsSettings.part.doc.js\" :loading=\"partDataForm.loading\" :content=\"partDataForm.data?.content\"\r\n placeholder=\"从这里开始写正文...\" @change=\"EditorChangeHandle\">\r\n <template #before-extentions>\r\n <PartBannerEdit v-if=\"partDataForm.data?.id\" :partId=\"partDataForm.data?.id\" :title=\"partDataForm.data?.title\" />\r\n </template>\r\n </MKDocEditor>\r\n </template>\r\n \r\n </el-tab-pane>\r\n <el-tab-pane v-for=\"(ext,i) in partExList\" :label=\"ext.title || `页面扩展设置 ${i==0 ?'':i}`\" :name=\"`part-ext${i}`\">\r\n <component :is=\"ext.component\" />\r\n </el-tab-pane>\r\n \r\n </el-tabs>\r\n <el-empty v-else description=\"请选择栏目\" style=\"width: 100%\" />\r\n </div>\r\n <el-dialog v-model=\"showPublish\" title=\"栏目发布\" width=\"475px\" :append-to-body=\"false\">\r\n <div class=\"mk-cms-contents__publish\">\r\n <div><span>是否发布列表:</span> <el-switch v-model=\"optionData.isPublishList\"\r\n :disabled=\"!curSelectPartItem.listTemplate\" /></div>\r\n <div><span>是否发布封面:</span> <el-switch v-model=\"optionData.isPublishCover\"\r\n :disabled=\"!curSelectPartItem.coverTemplate\" /></div>\r\n <div><span>是否发布内容:</span> <el-switch v-model=\"optionData.isPublishContent\"\r\n :disabled=\"!curSelectPartItem.contentTemplate\" /></div>\r\n <div><span>是否发布资源:</span> <el-switch v-model=\"optionData.isPublishAssets\" /></div>\r\n <div><span>是否强制发布:</span> <el-switch v-model=\"optionData.isCompulsion\" /></div>\r\n </div>\r\n <template #footer>\r\n <el-button @click=\"showPublish = false\">取消</el-button>\r\n <el-button type=\"primary\" @click=\"publishPartHandle\" :loading=\"publishLoading\">确定</el-button>\r\n </template>\r\n </el-dialog>\r\n </div>\r\n</template>\r\n<script setup lang=\"ts\" >\r\nimport { MKPartTree } from \"../../components\";\r\nimport ArticleList from \"./components/article-list.vue\";\r\nimport PartInfo from \"./components/part-info.vue\";\r\nimport PartBannerEdit from \"./components/part-banner-edit.vue\";\r\nimport { MKDocEditor } from \"../../../../components\";\r\nimport { reactive, ref, watch,watchEffect } from \"vue\";\r\nimport { Dialoger } from \"@maketribe/dm\";\r\nimport { CmsContentManPartForm,CmsPartForm, CmsPartMiniForm } from \"../../dataviews/cms-parts\";\r\nimport { useRoute, useRouter } from \"vue-router\";\r\nimport { usePartExtensionList,usePartContentComponent, type PartExtension } from \"../../composables/part-extensions\"\r\nimport { ElSwitch } from \"element-plus\";\r\nimport { useCmsSettings } from \"../../cms-settings\"\r\n//路由 \r\nconst route = useRoute();\r\nconst router = useRouter();\r\n\r\n// 当前选中的栏目id\r\nconst curSelectPartId = ref<string>(route.query.pid as string)\r\nwatch(()=>route.query.pid,(v:any)=>{\r\n curSelectPartId.value = v \r\n},{ immediate:true });\r\n\r\n//栏目Mini表单\r\nconst partMiniForm = reactive<CmsPartMiniForm>(new CmsPartMiniForm());\r\n\r\n// cms 配置\r\nconst CmsSettings = useCmsSettings(true);\r\n\r\n//发布栏目时的配置\r\nconst showPublish = ref(false)\r\n\r\n//发布配置项\r\nconst optionData = ref({\r\n isPublishList: false,\r\n isPublishCover: false,\r\n isPublishContent: false,\r\n isPublishAssets: false,\r\n isCompulsion: true\r\n});\r\n\r\n//发布加载状态\r\nconst publishLoading = ref(false);\r\n\r\n// 数据加载状态\r\nconst loading = ref(false)\r\n\r\n// 激活的tab\r\nconst activeTabName = ref(\"article-list\");\r\n\r\n// 当前选中的菜单\r\nconst curSelectPartItem = ref(null as any);\r\n\r\n// 栏目树ref\r\nconst partTreeRef = ref(null);\r\n\r\n//栏目扩展\r\nconst partExList = ref<Array<PartExtension>>([]);\r\nconst partContentComponent = ref<any>(null)\r\n\r\n//栏目数据\r\nconst partDataForm = reactive(new CmsContentManPartForm()) as CmsContentManPartForm;\r\n\r\n// 初始化表单\r\npartDataForm.init();\r\n\r\n// 切换tab 加载栏目表单数据\r\nlet beforeInitFormPart:any = null;\r\nwatchEffect(async ()=>{\r\n if((activeTabName.value == \"part\" || activeTabName.value == \"part-content\") && curSelectPartItem.value != beforeInitFormPart){\r\n try {\r\n beforeInitFormPart = curSelectPartItem.value;\r\n await partDataForm.editRecord(curSelectPartItem.value.id);\r\n } catch (error) {\r\n console.log(error)\r\n }\r\n }\r\n});\r\n\r\n// 选择栏目\r\nconst selectPartHandle = async (item: any) => {\r\n\r\n if (curSelectPartItem.value != item) {\r\n\r\n curSelectPartItem.value = item;\r\n\r\n if (!curSelectPartItem.value.contentTemplate) {\r\n activeTabName.value = \"part\";\r\n }\r\n else{\r\n activeTabName.value = \"article-list\";\r\n }\r\n router.replace({ name: 'cms/contents', query: { pid: curSelectPartItem.value.id } } as any)\r\n partExList.value = usePartExtensionList(curSelectPartItem.value.id).concat(usePartExtensionList(curSelectPartItem.value.name));\r\n partContentComponent.value = usePartContentComponent(curSelectPartItem.value.id) || usePartContentComponent(curSelectPartItem.value.name) \r\n }\r\n};\r\n\r\n//删除栏目\r\nconst deletePartHandle = (item: any) => {\r\n if (item.id == curSelectPartItem.value.id) {\r\n curSelectPartItem.value = null;\r\n }\r\n};\r\n\r\n//编辑栏目\r\nconst editPartHandle = (item: any) => {\r\n curSelectPartItem.value = item;\r\n activeTabName.value = \"part\";\r\n};\r\n\r\n/**\r\n * 显示添加栏目表单\r\n */\r\nconst showPartFormHandle = async (item?: any) => {\r\n await Dialoger.dataFormDialog({\r\n dataForm: partMiniForm as CmsContentManPartForm,\r\n });\r\n\r\n if (item.id) {\r\n partMiniForm.addRecord({ parentId: item.id });\r\n }\r\n\r\n};\r\n\r\nwatch(showPublish, async (v) => {\r\n if(v){\r\n optionData.value.isPublishList = !!curSelectPartItem.value.listTemplate\r\n optionData.value.isPublishCover = !!curSelectPartItem.value.coverTemplate\r\n optionData.value.isPublishContent = !!curSelectPartItem.value.contentTemplate\r\n }\r\n})\r\n \r\n//监听表单完成事件\r\npartMiniForm.submittedEvent.on(({ response }:any) => {\r\n if(response.data.data){\r\n // 重置选中\r\n curSelectPartId.value = response.data.data;\r\n // 刷新完成直接选中\r\n (partTreeRef.value! as any).dataTree?.load();\r\n }\r\n \r\n});\r\n\r\n//栏目发布\r\nconst publishAllPartHandle = async () => {\r\n\r\n try {\r\n\r\n loading.value = true;\r\n \r\n await CmsPartForm.publishAll()\r\n } \r\n finally {\r\n loading.value = false;\r\n }\r\n\r\n}\r\nconst publishPartHandle = async () => {\r\n \r\n try {\r\n\r\n publishLoading.value = true\r\n\r\n await CmsPartForm.publish(curSelectPartItem.value.id,optionData.value);\r\n\r\n showPublish.value = false;\r\n\r\n } finally {\r\n publishLoading.value = false\r\n }\r\n}\r\n\r\n/**\r\n * 保存栏目信息\r\n */\r\nconst savePartHandle = async () => {\r\n curSelectPartItem.value = partDataForm.data;\r\n await partDataForm.submit();\r\n}\r\n\r\n/**\r\n * 更新编辑器内容\r\n * @param v 内容\r\n */\r\nconst EditorChangeHandle = (v: any) => {\r\n partDataForm.data.content = v\r\n}\r\n</script>\r\n"],"names":[],"mappings":"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"}
|