@maketribe/ms-app 3.2.30 → 3.2.31
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/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/index.js +1 -0
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/modules/cms/composables/part-extensions.js +15 -0
- package/dist/cjs/modules/cms/composables/part-extensions.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 +37 -25
- package/dist/cjs/modules/cms/pages/cms-contents/index.vue2.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/index.js +2 -1
- package/dist/esm/modules/cms/composables/part-extensions.js +15 -0
- package/dist/esm/modules/cms/composables/part-extensions.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 +38 -26
- package/dist/esm/modules/cms/pages/cms-contents/index.vue2.js.map +1 -1
- package/dist/types/modules/cms/composables/part-extensions.d.ts +13 -1
- package/dist/types/modules/cms/index.d.ts +2 -2
- package/package.json +2 -2
|
@@ -49,6 +49,8 @@ const useElementBlockSelection = (func, toolsbars) => {
|
|
|
49
49
|
curSelectEl.value = el == null ? editor.getElementByKey(nodeKey) : el;
|
|
50
50
|
curSelectKey.value = nodeKey;
|
|
51
51
|
isSelected.value = utils$1.isNodeSelected(editor, nodeKey);
|
|
52
|
+
setTimeout(() => updateActiveBox(curSelectEl.value), 500);
|
|
53
|
+
setTimeout(() => updateActiveBox(curSelectEl.value), 1e3);
|
|
52
54
|
};
|
|
53
55
|
vue.watch(isSelected, (state) => {
|
|
54
56
|
if (state) {
|
|
@@ -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":["createCommand","useLexicalComposer","ref","clearSelection","setSelected","isNodeSelected","watch","useMounted","mergeRegister","CLICK_COMMAND","COMMAND_PRIORITY_LOW"],"mappings":";;;;;;;AA2Ba,MAAA,gCAAmFA,sBAAc,+BAA+B;AAKhI,MAAA,8BAA8DA,sBAAc,6BAA6B;AAKzG,MAAA,0CAA0EA,sBAAc,yCAAyC;AA6DjI,MAAA,2BAA2B,CAAC,MAAqB,cAA0D;AAEtH,QAAM,SAASC,WAAAA;AACT,QAAA,aAAaC,QAAI,KAAK;AACtB,QAAA,eAAeA,QAAS,IAAI;AAC5B,QAAA,cAAcA,QAAS,IAAI;AAC3B,QAAA,eAAeA,QAAS,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,YAAOC,QAAAA,eAAe,MAAM;AAAA,IAC9B;AAEA,UAAM,IAAI,QAAQ,CAAA,YAAS,WAAW,SAAS,EAAE,CAAC;AAC5C,UAAAC,oBAAY,QAAO,MAAK,OAAO;AACrC,gBAAY,QAAQ,MAAM,OAAO,OAAO,gBAAgB,OAAO,IAAI;AACnE,iBAAa,QAAQ;AACV,eAAA,QAAQC,QAAAA,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":["createCommand","useLexicalComposer","ref","clearSelection","setSelected","isNodeSelected","watch","useMounted","mergeRegister","CLICK_COMMAND","COMMAND_PRIORITY_LOW"],"mappings":";;;;;;;AA2Ba,MAAA,gCAAmFA,sBAAc,+BAA+B;AAKhI,MAAA,8BAA8DA,sBAAc,6BAA6B;AAKzG,MAAA,0CAA0EA,sBAAc,yCAAyC;AA6DjI,MAAA,2BAA2B,CAAC,MAAqB,cAA0D;AAEtH,QAAM,SAASC,WAAAA;AACT,QAAA,aAAaC,QAAI,KAAK;AACtB,QAAA,eAAeA,QAAS,IAAI;AAC5B,QAAA,cAAcA,QAAS,IAAI;AAC3B,QAAA,eAAeA,QAAS,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,YAAOC,QAAAA,eAAe,MAAM;AAAA,IAC9B;AAEA,UAAM,IAAI,QAAQ,CAAA,YAAS,WAAW,SAAS,EAAE,CAAC;AAC5C,UAAAC,oBAAY,QAAO,MAAK,OAAO;AACrC,gBAAY,QAAQ,MAAM,OAAO,OAAO,gBAAgB,OAAO,IAAI;AACnE,iBAAa,QAAQ;AACV,eAAA,QAAQC,QAAAA,eAAe,QAAQ,OAAO;AAEjD,eAAW,MAAI,gBAAgB,YAAY,KAAK,GAAE,GAAG;AAErD,eAAW,MAAI,gBAAgB,YAAY,KAAK,GAAE,GAAI;AAAA,EAAA;AAGlDC,YAAA,YAAW,CAAC,UAAQ;AACxB,QAAG,OAAM;AACe,4BAAA,QAAQ,YAAY,QAAQ,IAAI;AAAA,IAAA,OAEpD;AACF,4BAAsB,IAAI;AAAA,IAC5B;AAAA,EAAA,CACD;AAGDC,aAAAA,WAAW,MAAI;AAEN,WAAAC,MAAA;AAAA;AAAA,MAEL,OAAO,uBAAuB,MAAM;AAElC,mBAAW,QAAQH,QAAA,eAAe,QAAQ,aAAa,KAAK;AAC5D,mBAAW,MAAI,gBAAgB,YAAY,KAAK,GAAE,EAAE;AAAA,MAAA,CAErD;AAAA;AAAA,MAED,OAAO,gBAA4BI,uBAAc,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;AAEJN,mCAAA,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,SACNO,4BAAoB;AAAA,IAAA;AAAA,EACzB,CACD;AAGD,SAAO,EAAE,YAAW,cAAc,cAAa,aAAa;AAE9D;;;;;"}
|
package/dist/cjs/index.js
CHANGED
|
@@ -304,6 +304,7 @@ exports.MaterialUploadContext = MaterialUploadContext.MaterialUploadContext;
|
|
|
304
304
|
exports.materialUploadContextProps = materialUploadContextOptions.materialUploadContextProps;
|
|
305
305
|
exports.MKMaterialUploadContext = materialUploadContext.MKMaterialUploadContext;
|
|
306
306
|
exports.ImageUploadContext = index$J.ImageUploadContext;
|
|
307
|
+
exports.registerPartContentComponent = partExtensions.registerPartContentComponent;
|
|
307
308
|
exports.registerPartExtension = partExtensions.registerPartExtension;
|
|
308
309
|
exports.CmsAdContentsForm = CmsAdContentsForm.CmsAdContentsForm;
|
|
309
310
|
exports.CmsAdContentsTable = CmsAdContentsTable.CmsAdContentsTable;
|
package/dist/cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../src/index.ts"],"sourcesContent":["import \"./assets/iconfonts/iconfont.js\";\r\nimport \"./assets/iconfonts/oa-iconfont.js\";\r\nexport * from \"./constants\";\r\n\r\nexport * from \"./core\";\r\n\r\nimport { installer } from \"./installer\";\r\n\r\nexport * from \"./layouts\";\r\nexport * from \"./composables\";\r\nexport * from \"./components\";\r\nexport * from \"./tokens\";\r\n\r\nexport const install = installer.install;\r\nexport const version = installer.version;\r\n\r\nexport * from \"./init-application\";\r\nexport * from \"./define-data-table\";\r\nexport * from \"./define-data-form\";\r\nexport * from \"./define-data-tree\";\r\n\r\nexport * from \"./modules/ms\";\r\nexport * from \"./modules/cms\";\r\n"],"names":["installer"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAaO,MAAM,UAAUA,UAAU,UAAA;AAC1B,MAAM,UAAUA,UAAAA,UAAU
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/index.ts"],"sourcesContent":["import \"./assets/iconfonts/iconfont.js\";\r\nimport \"./assets/iconfonts/oa-iconfont.js\";\r\nexport * from \"./constants\";\r\n\r\nexport * from \"./core\";\r\n\r\nimport { installer } from \"./installer\";\r\n\r\nexport * from \"./layouts\";\r\nexport * from \"./composables\";\r\nexport * from \"./components\";\r\nexport * from \"./tokens\";\r\n\r\nexport const install = installer.install;\r\nexport const version = installer.version;\r\n\r\nexport * from \"./init-application\";\r\nexport * from \"./define-data-table\";\r\nexport * from \"./define-data-form\";\r\nexport * from \"./define-data-tree\";\r\n\r\nexport * from \"./modules/ms\";\r\nexport * from \"./modules/cms\";\r\n"],"names":["installer"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAaO,MAAM,UAAUA,UAAU,UAAA;AAC1B,MAAM,UAAUA,UAAAA,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -7,6 +7,21 @@ const usePartExtensionList = (partIdorName) => {
|
|
|
7
7
|
const registerPartExtension = (partIdorName, ext) => {
|
|
8
8
|
PartExtensionList.push({ key: partIdorName, extension: ext });
|
|
9
9
|
};
|
|
10
|
+
const PartContentExtensionList = [];
|
|
11
|
+
const usePartContentComponent = (partIdorName) => {
|
|
12
|
+
var _a;
|
|
13
|
+
console.log(PartContentExtensionList.find((item) => item.key == partIdorName));
|
|
14
|
+
return (_a = PartContentExtensionList.find((item) => item.key == partIdorName)) == null ? void 0 : _a.component;
|
|
15
|
+
};
|
|
16
|
+
const registerPartContentComponent = (partIdorName, component) => {
|
|
17
|
+
if (!PartExtensionList.find((item) => item.key == partIdorName)) {
|
|
18
|
+
PartContentExtensionList.push({ key: partIdorName, component });
|
|
19
|
+
} else {
|
|
20
|
+
throw new Error(`重复的栏目内容扩展,栏目标识:[${partIdorName}]`);
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
exports.registerPartContentComponent = registerPartContentComponent;
|
|
10
24
|
exports.registerPartExtension = registerPartExtension;
|
|
25
|
+
exports.usePartContentComponent = usePartContentComponent;
|
|
11
26
|
exports.usePartExtensionList = usePartExtensionList;
|
|
12
27
|
//# 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 console.log(PartContentExtensionList.find(item=>item.key == partIdorName));\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;;AACvE,UAAQ,IAAI,yBAAyB,KAAK,UAAM,KAAK,OAAO,YAAY,CAAC;AACzE,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":"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":["module","CmsAdContentsTable","CmsAdContentsForm","CmsAdDefinesTable","CmsAdDefinesForm","CmsPartTree","CmsPartForm","CmsPartTypesTable","CmsPartTypesForm","CmsTagsTable","CmsTagsForm","CmsArticlesTable","CmsArticlesForm"],"mappings":";;;;;;;;;;;;;;;;AAsBM,MAAA,YAAsB,CAACA,YAA6B;AACxD,EAAAA,QAAO,kBAAkBC,mBAAAA,kBAAkB;AAC3C,EAAAD,QAAO,iBAAiBE,kBAAAA,iBAAiB;AAEzC,EAAAF,QAAO,kBAAkBG,kBAAAA,iBAAiB;AAC1C,EAAAH,QAAO,iBAAiBI,iBAAAA,gBAAgB;AAExC,EAAAJ,QAAO,iBAAiBK,YAAAA,WAAW;AACnC,EAAAL,QAAO,iBAAiBM,YAAAA,WAAW;AAEnC,EAAAN,QAAO,kBAAkBO,kBAAAA,iBAAiB;AAC1C,EAAAP,QAAO,iBAAiBQ,iBAAAA,gBAAgB;AAExC,EAAAR,QAAO,kBAAkBS,aAAAA,YAAY;AACrC,EAAAT,QAAO,iBAAiBU,YAAAA,WAAW;AAEnC,EAAAV,QAAO,kBAAkBW,iBAAAA,gBAAgB;AACzC,EAAAX,QAAO,iBAAiBY,gBAAAA,eAAe;AAEvC,EAAAZ,QAAO,oBAAoB;AAAA,IACzB,MAAM;AAAA,IACN,MAAM;AAAA,IACN,WAAW,MAAM,QAAA,QAAA,EAAA,KAAA,MAAA,6CAAA,QAAO,mCAAgC,CAAA,CAAA;AAAA,EAAA,CACzD;AAGD,EAAAA,QAAO,oBAAoB;AAAA,IACzB,MAAM;AAAA,IACN,MAAM;AAAA,IACN,WAAW,MAAM,QAAA,QAAA,EAAA,KAAA,MAAA,6CAAA,QAAO,mCAAgC,CAAA,CAAA;AAAA,EAAA,CACzD;AAGD,EAAAA,QAAO,oBAAoB;AAAA,IACzB,MAAM;AAAA,IACN,MAAM;AAAA,IACN,WAAW,MAAM,QAAA,QAAA,EAAA,KAAA,MAAA,6CAAA,QAAO,mCAAgC,CAAA,CAAA;AAAA,IACxD,MAAM,EAAE,MAAM,eAAe;AAAA,EAAA,CAC9B;AAGD,EAAAA,QAAO,oBAAoB;AAAA,IACzB,MAAM;AAAA,IACN,MAAM;AAAA,IACN,WAAW,MAAM,QAAA,QAAA,EAAA,KAAA,MAAA,6CAAA,QAAO,mDAAgD,CAAA,CAAA;AAAA,IACxE,MAAM,EAAE,MAAM,cAAc;AAAA,EAAA,CAC7B;AAGD,EAAAA,QAAO,oBAAoB;AAAA,IACzB,MAAM;AAAA,IACN,MAAM;AAAA,IACN,WAAW,MAAM,QAAA,QAAA,EAAA,KAAA,MAAA,6CAAA,QAAO,6BAA0B,CAAA,CAAA;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":["module","CmsAdContentsTable","CmsAdContentsForm","CmsAdDefinesTable","CmsAdDefinesForm","CmsPartTree","CmsPartForm","CmsPartTypesTable","CmsPartTypesForm","CmsTagsTable","CmsTagsForm","CmsArticlesTable","CmsArticlesForm"],"mappings":";;;;;;;;;;;;;;;;AAsBM,MAAA,YAAsB,CAACA,YAA6B;AACxD,EAAAA,QAAO,kBAAkBC,mBAAAA,kBAAkB;AAC3C,EAAAD,QAAO,iBAAiBE,kBAAAA,iBAAiB;AAEzC,EAAAF,QAAO,kBAAkBG,kBAAAA,iBAAiB;AAC1C,EAAAH,QAAO,iBAAiBI,iBAAAA,gBAAgB;AAExC,EAAAJ,QAAO,iBAAiBK,YAAAA,WAAW;AACnC,EAAAL,QAAO,iBAAiBM,YAAAA,WAAW;AAEnC,EAAAN,QAAO,kBAAkBO,kBAAAA,iBAAiB;AAC1C,EAAAP,QAAO,iBAAiBQ,iBAAAA,gBAAgB;AAExC,EAAAR,QAAO,kBAAkBS,aAAAA,YAAY;AACrC,EAAAT,QAAO,iBAAiBU,YAAAA,WAAW;AAEnC,EAAAV,QAAO,kBAAkBW,iBAAAA,gBAAgB;AACzC,EAAAX,QAAO,iBAAiBY,gBAAAA,eAAe;AAEvC,EAAAZ,QAAO,oBAAoB;AAAA,IACzB,MAAM;AAAA,IACN,MAAM;AAAA,IACN,WAAW,MAAM,QAAA,QAAA,EAAA,KAAA,MAAA,6CAAA,QAAO,mCAAgC,CAAA,CAAA;AAAA,EAAA,CACzD;AAGD,EAAAA,QAAO,oBAAoB;AAAA,IACzB,MAAM;AAAA,IACN,MAAM;AAAA,IACN,WAAW,MAAM,QAAA,QAAA,EAAA,KAAA,MAAA,6CAAA,QAAO,mCAAgC,CAAA,CAAA;AAAA,EAAA,CACzD;AAGD,EAAAA,QAAO,oBAAoB;AAAA,IACzB,MAAM;AAAA,IACN,MAAM;AAAA,IACN,WAAW,MAAM,QAAA,QAAA,EAAA,KAAA,MAAA,6CAAA,QAAO,mCAAgC,CAAA,CAAA;AAAA,IACxD,MAAM,EAAE,MAAM,eAAe;AAAA,EAAA,CAC9B;AAGD,EAAAA,QAAO,oBAAoB;AAAA,IACzB,MAAM;AAAA,IACN,MAAM;AAAA,IACN,WAAW,MAAM,QAAA,QAAA,EAAA,KAAA,MAAA,6CAAA,QAAO,mDAAgD,CAAA,CAAA;AAAA,IACxE,MAAM,EAAE,MAAM,cAAc;AAAA,EAAA,CAC7B;AAGD,EAAAA,QAAO,oBAAoB;AAAA,IACzB,MAAM;AAAA,IACN,MAAM;AAAA,IACN,WAAW,MAAM,QAAA,QAAA,EAAA,KAAA,MAAA,6CAAA,QAAO,6BAA0B,CAAA,CAAA;AAAA;AAAA,EAAA,CAEnD;AACH;;;;;;;;;;;;;;"}
|
|
@@ -53,12 +53,13 @@ const _hoisted_3 = { class: "flex items-center" };
|
|
|
53
53
|
const _hoisted_4 = { class: "mk-cms-contents__body" };
|
|
54
54
|
const _hoisted_5 = { class: "mk-cms-contents__body__right__action" };
|
|
55
55
|
const _hoisted_6 = { class: "el-dropdown-link" };
|
|
56
|
-
const _hoisted_7 = {
|
|
57
|
-
const _hoisted_8 =
|
|
58
|
-
const _hoisted_9 = /* @__PURE__ */ vue.createElementVNode("span", null, "
|
|
59
|
-
const _hoisted_10 = /* @__PURE__ */ vue.createElementVNode("span", null, "
|
|
60
|
-
const _hoisted_11 = /* @__PURE__ */ vue.createElementVNode("span", null, "
|
|
61
|
-
const _hoisted_12 = /* @__PURE__ */ vue.createElementVNode("span", null, "
|
|
56
|
+
const _hoisted_7 = { style: { "background": "#fff", "margin-top": "-10px", "height": "100%", "overflow": "auto" } };
|
|
57
|
+
const _hoisted_8 = { class: "mk-cms-contents__publish" };
|
|
58
|
+
const _hoisted_9 = /* @__PURE__ */ vue.createElementVNode("span", null, "是否发布列表:", -1);
|
|
59
|
+
const _hoisted_10 = /* @__PURE__ */ vue.createElementVNode("span", null, "是否发布封面:", -1);
|
|
60
|
+
const _hoisted_11 = /* @__PURE__ */ vue.createElementVNode("span", null, "是否发布内容:", -1);
|
|
61
|
+
const _hoisted_12 = /* @__PURE__ */ vue.createElementVNode("span", null, "是否发布资源:", -1);
|
|
62
|
+
const _hoisted_13 = /* @__PURE__ */ vue.createElementVNode("span", null, "是否强制发布:", -1);
|
|
62
63
|
const _sfc_main = /* @__PURE__ */ vue.defineComponent({
|
|
63
64
|
__name: "index",
|
|
64
65
|
setup(__props) {
|
|
@@ -84,6 +85,7 @@ const _sfc_main = /* @__PURE__ */ vue.defineComponent({
|
|
|
84
85
|
const curSelectPartItem = vue.ref(null);
|
|
85
86
|
const partTreeRef = vue.ref(null);
|
|
86
87
|
const partExList = vue.ref([]);
|
|
88
|
+
const partContentComponent = vue.ref(null);
|
|
87
89
|
const partDataForm = vue.reactive(new CmsContentManPartForm.CmsContentManPartForm());
|
|
88
90
|
partDataForm.init();
|
|
89
91
|
let beforeInitFormPart = null;
|
|
@@ -107,6 +109,7 @@ const _sfc_main = /* @__PURE__ */ vue.defineComponent({
|
|
|
107
109
|
}
|
|
108
110
|
router.replace({ name: "cms/contents", query: { pid: curSelectPartItem.value.id } });
|
|
109
111
|
partExList.value = partExtensions.usePartExtensionList(curSelectPartItem.value.id).concat(partExtensions.usePartExtensionList(curSelectPartItem.value.name));
|
|
112
|
+
partContentComponent.value = partExtensions.usePartContentComponent(curSelectPartItem.value.id) || partExtensions.usePartContentComponent(curSelectPartItem.value.name);
|
|
110
113
|
}
|
|
111
114
|
};
|
|
112
115
|
const deletePartHandle = (item) => {
|
|
@@ -271,7 +274,7 @@ const _sfc_main = /* @__PURE__ */ vue.defineComponent({
|
|
|
271
274
|
}, 1032, ["onClick"])) : vue.createCommentVNode("", true)
|
|
272
275
|
], 64);
|
|
273
276
|
}), 256)),
|
|
274
|
-
activeTabName.value == "part" || activeTabName.value == "part-content" ? (vue.openBlock(), vue.createBlock(_component_el_button, {
|
|
277
|
+
activeTabName.value == "part" || activeTabName.value == "part-content" && !partContentComponent.value ? (vue.openBlock(), vue.createBlock(_component_el_button, {
|
|
275
278
|
key: 0,
|
|
276
279
|
type: "primary",
|
|
277
280
|
text: "",
|
|
@@ -378,41 +381,50 @@ const _sfc_main = /* @__PURE__ */ vue.defineComponent({
|
|
|
378
381
|
})), [
|
|
379
382
|
[_directive_loading, partDataForm.loading]
|
|
380
383
|
]),
|
|
381
|
-
curSelectPartItem.value.cmsPartTypeId != 1 ?
|
|
384
|
+
curSelectPartItem.value.cmsPartTypeId != 1 ? (vue.openBlock(), vue.createBlock(_component_el_tab_pane, {
|
|
382
385
|
key: 1,
|
|
383
386
|
label: "页面内容",
|
|
384
387
|
name: "part-content",
|
|
385
388
|
style: { "background-color": "#f4f4f4" }
|
|
386
389
|
}, {
|
|
387
390
|
default: vue.withCtx(() => {
|
|
388
|
-
var _a;
|
|
391
|
+
var _a, _b, _c, _d;
|
|
389
392
|
return [
|
|
390
|
-
|
|
391
|
-
|
|
393
|
+
partContentComponent.value ? (vue.openBlock(), vue.createElementBlock(vue.Fragment, { key: 0 }, [
|
|
394
|
+
((_a = partDataForm.data) == null ? void 0 : _a.id) ? (vue.openBlock(), vue.createBlock(partBannerEdit_vue_vue_type_script_setup_true_lang, {
|
|
395
|
+
key: 0,
|
|
396
|
+
partId: (_b = partDataForm.data) == null ? void 0 : _b.id,
|
|
397
|
+
title: (_c = partDataForm.data) == null ? void 0 : _c.title
|
|
398
|
+
}, null, 8, ["partId", "title"])) : vue.createCommentVNode("", true),
|
|
399
|
+
vue.createElementVNode("div", _hoisted_7, [
|
|
400
|
+
(vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(partContentComponent.value)))
|
|
401
|
+
])
|
|
402
|
+
], 64)) : activeTabName.value == "part-content" ? vue.withDirectives((vue.openBlock(), vue.createBlock(vue.unref(index$1.MKDocEditor), {
|
|
403
|
+
key: 1,
|
|
392
404
|
css: vue.unref(CmsSettings).part.doc.css,
|
|
393
405
|
js: vue.unref(CmsSettings).part.doc.js,
|
|
394
|
-
content: (
|
|
406
|
+
content: (_d = partDataForm.data) == null ? void 0 : _d.content,
|
|
395
407
|
placeholder: "从这里开始写正文...",
|
|
396
408
|
onChange: EditorChangeHandle
|
|
397
409
|
}, {
|
|
398
410
|
"before-extentions": vue.withCtx(() => {
|
|
399
|
-
var _a2,
|
|
411
|
+
var _a2, _b2, _c2;
|
|
400
412
|
return [
|
|
401
413
|
((_a2 = partDataForm.data) == null ? void 0 : _a2.id) ? (vue.openBlock(), vue.createBlock(partBannerEdit_vue_vue_type_script_setup_true_lang, {
|
|
402
414
|
key: 0,
|
|
403
|
-
partId: (
|
|
404
|
-
title: (
|
|
415
|
+
partId: (_b2 = partDataForm.data) == null ? void 0 : _b2.id,
|
|
416
|
+
title: (_c2 = partDataForm.data) == null ? void 0 : _c2.title
|
|
405
417
|
}, null, 8, ["partId", "title"])) : vue.createCommentVNode("", true)
|
|
406
418
|
];
|
|
407
419
|
}),
|
|
408
420
|
_: 1
|
|
409
|
-
}, 8, ["css", "js", "content"]))
|
|
421
|
+
}, 8, ["css", "js", "content"])), [
|
|
422
|
+
[_directive_loading, partDataForm.loading]
|
|
423
|
+
]) : vue.createCommentVNode("", true)
|
|
410
424
|
];
|
|
411
425
|
}),
|
|
412
426
|
_: 1
|
|
413
|
-
})),
|
|
414
|
-
[_directive_loading, partDataForm.loading]
|
|
415
|
-
]) : vue.createCommentVNode("", true),
|
|
427
|
+
})) : vue.createCommentVNode("", true),
|
|
416
428
|
(vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(partExList.value, (ext, i) => {
|
|
417
429
|
return vue.openBlock(), vue.createBlock(_component_el_tab_pane, {
|
|
418
430
|
label: ext.title || `页面扩展设置 ${i == 0 ? "" : i}`,
|
|
@@ -460,9 +472,9 @@ const _sfc_main = /* @__PURE__ */ vue.defineComponent({
|
|
|
460
472
|
}, 8, ["loading"])
|
|
461
473
|
]),
|
|
462
474
|
default: vue.withCtx(() => [
|
|
463
|
-
vue.createElementVNode("div",
|
|
475
|
+
vue.createElementVNode("div", _hoisted_8, [
|
|
464
476
|
vue.createElementVNode("div", null, [
|
|
465
|
-
|
|
477
|
+
_hoisted_9,
|
|
466
478
|
vue.createTextVNode(),
|
|
467
479
|
vue.createVNode(vue.unref(elementPlus.ElSwitch), {
|
|
468
480
|
modelValue: optionData.value.isPublishList,
|
|
@@ -471,7 +483,7 @@ const _sfc_main = /* @__PURE__ */ vue.defineComponent({
|
|
|
471
483
|
}, null, 8, ["modelValue", "disabled"])
|
|
472
484
|
]),
|
|
473
485
|
vue.createElementVNode("div", null, [
|
|
474
|
-
|
|
486
|
+
_hoisted_10,
|
|
475
487
|
vue.createTextVNode(),
|
|
476
488
|
vue.createVNode(vue.unref(elementPlus.ElSwitch), {
|
|
477
489
|
modelValue: optionData.value.isPublishCover,
|
|
@@ -480,7 +492,7 @@ const _sfc_main = /* @__PURE__ */ vue.defineComponent({
|
|
|
480
492
|
}, null, 8, ["modelValue", "disabled"])
|
|
481
493
|
]),
|
|
482
494
|
vue.createElementVNode("div", null, [
|
|
483
|
-
|
|
495
|
+
_hoisted_11,
|
|
484
496
|
vue.createTextVNode(),
|
|
485
497
|
vue.createVNode(vue.unref(elementPlus.ElSwitch), {
|
|
486
498
|
modelValue: optionData.value.isPublishContent,
|
|
@@ -489,7 +501,7 @@ const _sfc_main = /* @__PURE__ */ vue.defineComponent({
|
|
|
489
501
|
}, null, 8, ["modelValue", "disabled"])
|
|
490
502
|
]),
|
|
491
503
|
vue.createElementVNode("div", null, [
|
|
492
|
-
|
|
504
|
+
_hoisted_12,
|
|
493
505
|
vue.createTextVNode(),
|
|
494
506
|
vue.createVNode(vue.unref(elementPlus.ElSwitch), {
|
|
495
507
|
modelValue: optionData.value.isPublishAssets,
|
|
@@ -497,7 +509,7 @@ const _sfc_main = /* @__PURE__ */ vue.defineComponent({
|
|
|
497
509
|
}, null, 8, ["modelValue"])
|
|
498
510
|
]),
|
|
499
511
|
vue.createElementVNode("div", null, [
|
|
500
|
-
|
|
512
|
+
_hoisted_13,
|
|
501
513
|
vue.createTextVNode(),
|
|
502
514
|
vue.createVNode(vue.unref(elementPlus.ElSwitch), {
|
|
503
515
|
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":["useRoute","useRouter","ref","watch","reactive","CmsPartMiniForm","useCmsSettings","CmsContentManPartForm","watchEffect","usePartExtensionList","Dialoger","CmsPartForm"],"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;height: 100%;overflow: auto;\">\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\" :content=\"partDataForm.data?.content\"\r\n placeholder=\"从这里开始写正文...\" @change=\"EditorChangeHandle\" v-loading=\"partDataForm.loading\">\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":["useRoute","useRouter","ref","watch","reactive","CmsPartMiniForm","useCmsSettings","CmsContentManPartForm","watchEffect","usePartExtensionList","usePartContentComponent","Dialoger","CmsPartForm"],"mappings":"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"}
|
|
@@ -47,6 +47,8 @@ const useElementBlockSelection = (func, toolsbars) => {
|
|
|
47
47
|
curSelectEl.value = el == null ? editor.getElementByKey(nodeKey) : el;
|
|
48
48
|
curSelectKey.value = nodeKey;
|
|
49
49
|
isSelected.value = isNodeSelected(editor, nodeKey);
|
|
50
|
+
setTimeout(() => updateActiveBox(curSelectEl.value), 500);
|
|
51
|
+
setTimeout(() => updateActiveBox(curSelectEl.value), 1e3);
|
|
50
52
|
};
|
|
51
53
|
watch(isSelected, (state) => {
|
|
52
54
|
if (state) {
|
|
@@ -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;"}
|
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,23 @@ 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
|
+
console.log(PartContentExtensionList.find((item) => item.key == partIdorName));
|
|
12
|
+
return (_a = PartContentExtensionList.find((item) => item.key == partIdorName)) == null ? void 0 : _a.component;
|
|
13
|
+
};
|
|
14
|
+
const registerPartContentComponent = (partIdorName, component) => {
|
|
15
|
+
if (!PartExtensionList.find((item) => item.key == partIdorName)) {
|
|
16
|
+
PartContentExtensionList.push({ key: partIdorName, component });
|
|
17
|
+
} else {
|
|
18
|
+
throw new Error(`重复的栏目内容扩展,栏目标识:[${partIdorName}]`);
|
|
19
|
+
}
|
|
20
|
+
};
|
|
8
21
|
export {
|
|
22
|
+
registerPartContentComponent,
|
|
9
23
|
registerPartExtension,
|
|
24
|
+
usePartContentComponent,
|
|
10
25
|
usePartExtensionList
|
|
11
26
|
};
|
|
12
27
|
//# 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 console.log(PartContentExtensionList.find(item=>item.key == partIdorName));\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,UAAQ,IAAI,yBAAyB,KAAK,UAAM,KAAK,OAAO,YAAY,CAAC;AACzE,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":"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", "height": "100%", "overflow": "auto" } };
|
|
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,50 @@ 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" ? withDirectives((openBlock(), createBlock(unref(MKDocEditor), {
|
|
402
|
+
key: 1,
|
|
391
403
|
css: unref(CmsSettings).part.doc.css,
|
|
392
404
|
js: unref(CmsSettings).part.doc.js,
|
|
393
|
-
content: (
|
|
405
|
+
content: (_d = partDataForm.data) == null ? void 0 : _d.content,
|
|
394
406
|
placeholder: "从这里开始写正文...",
|
|
395
407
|
onChange: EditorChangeHandle
|
|
396
408
|
}, {
|
|
397
409
|
"before-extentions": withCtx(() => {
|
|
398
|
-
var _a2,
|
|
410
|
+
var _a2, _b2, _c2;
|
|
399
411
|
return [
|
|
400
412
|
((_a2 = partDataForm.data) == null ? void 0 : _a2.id) ? (openBlock(), createBlock(_sfc_main$3, {
|
|
401
413
|
key: 0,
|
|
402
|
-
partId: (
|
|
403
|
-
title: (
|
|
414
|
+
partId: (_b2 = partDataForm.data) == null ? void 0 : _b2.id,
|
|
415
|
+
title: (_c2 = partDataForm.data) == null ? void 0 : _c2.title
|
|
404
416
|
}, null, 8, ["partId", "title"])) : createCommentVNode("", true)
|
|
405
417
|
];
|
|
406
418
|
}),
|
|
407
419
|
_: 1
|
|
408
|
-
}, 8, ["css", "js", "content"]))
|
|
420
|
+
}, 8, ["css", "js", "content"])), [
|
|
421
|
+
[_directive_loading, partDataForm.loading]
|
|
422
|
+
]) : createCommentVNode("", true)
|
|
409
423
|
];
|
|
410
424
|
}),
|
|
411
425
|
_: 1
|
|
412
|
-
})),
|
|
413
|
-
[_directive_loading, partDataForm.loading]
|
|
414
|
-
]) : createCommentVNode("", true),
|
|
426
|
+
})) : createCommentVNode("", true),
|
|
415
427
|
(openBlock(true), createElementBlock(Fragment, null, renderList(partExList.value, (ext, i) => {
|
|
416
428
|
return openBlock(), createBlock(_component_el_tab_pane, {
|
|
417
429
|
label: ext.title || `页面扩展设置 ${i == 0 ? "" : i}`,
|
|
@@ -459,9 +471,9 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
459
471
|
}, 8, ["loading"])
|
|
460
472
|
]),
|
|
461
473
|
default: withCtx(() => [
|
|
462
|
-
createElementVNode("div",
|
|
474
|
+
createElementVNode("div", _hoisted_8, [
|
|
463
475
|
createElementVNode("div", null, [
|
|
464
|
-
|
|
476
|
+
_hoisted_9,
|
|
465
477
|
createTextVNode(),
|
|
466
478
|
createVNode(unref(ElSwitch), {
|
|
467
479
|
modelValue: optionData.value.isPublishList,
|
|
@@ -470,7 +482,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
470
482
|
}, null, 8, ["modelValue", "disabled"])
|
|
471
483
|
]),
|
|
472
484
|
createElementVNode("div", null, [
|
|
473
|
-
|
|
485
|
+
_hoisted_10,
|
|
474
486
|
createTextVNode(),
|
|
475
487
|
createVNode(unref(ElSwitch), {
|
|
476
488
|
modelValue: optionData.value.isPublishCover,
|
|
@@ -479,7 +491,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
479
491
|
}, null, 8, ["modelValue", "disabled"])
|
|
480
492
|
]),
|
|
481
493
|
createElementVNode("div", null, [
|
|
482
|
-
|
|
494
|
+
_hoisted_11,
|
|
483
495
|
createTextVNode(),
|
|
484
496
|
createVNode(unref(ElSwitch), {
|
|
485
497
|
modelValue: optionData.value.isPublishContent,
|
|
@@ -488,7 +500,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
488
500
|
}, null, 8, ["modelValue", "disabled"])
|
|
489
501
|
]),
|
|
490
502
|
createElementVNode("div", null, [
|
|
491
|
-
|
|
503
|
+
_hoisted_12,
|
|
492
504
|
createTextVNode(),
|
|
493
505
|
createVNode(unref(ElSwitch), {
|
|
494
506
|
modelValue: optionData.value.isPublishAssets,
|
|
@@ -496,7 +508,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
496
508
|
}, null, 8, ["modelValue"])
|
|
497
509
|
]),
|
|
498
510
|
createElementVNode("div", null, [
|
|
499
|
-
|
|
511
|
+
_hoisted_13,
|
|
500
512
|
createTextVNode(),
|
|
501
513
|
createVNode(unref(ElSwitch), {
|
|
502
514
|
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;height: 100%;overflow: auto;\">\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\" :content=\"partDataForm.data?.content\"\r\n placeholder=\"从这里开始写正文...\" @change=\"EditorChangeHandle\" v-loading=\"partDataForm.loading\">\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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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { type Component } from "vue";
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
3
|
+
* 栏目扩展
|
|
4
4
|
*/
|
|
5
5
|
export type PartExtension = {
|
|
6
6
|
title?: "";
|
|
@@ -20,3 +20,15 @@ export declare const usePartExtensionList: (partIdorName: string | number) => an
|
|
|
20
20
|
* @returns
|
|
21
21
|
*/
|
|
22
22
|
export declare const registerPartExtension: (partIdorName: string | number, ext: PartExtension) => void;
|
|
23
|
+
/**
|
|
24
|
+
* 使用扩展
|
|
25
|
+
* @param partId 或者栏目名称
|
|
26
|
+
* @returns
|
|
27
|
+
*/
|
|
28
|
+
export declare const usePartContentComponent: (partIdorName: string | number) => any;
|
|
29
|
+
/**
|
|
30
|
+
* 注册扩展
|
|
31
|
+
* @param partId
|
|
32
|
+
* @returns
|
|
33
|
+
*/
|
|
34
|
+
export declare const registerPartContentComponent: (partIdorName: string | number, component: any) => void;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { MkModule } from "../../core";
|
|
2
|
-
import { registerPartExtension } from "./composables/part-extensions";
|
|
2
|
+
import { registerPartExtension, registerPartContentComponent } from "./composables/part-extensions";
|
|
3
3
|
export * from "./dataviews";
|
|
4
|
-
export { registerPartExtension };
|
|
4
|
+
export { registerPartExtension, registerPartContentComponent };
|
|
5
5
|
declare const cmsModule: MkModule;
|
|
6
6
|
export default cmsModule;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@maketribe/ms-app",
|
|
3
|
-
"version": "3.2.
|
|
3
|
+
"version": "3.2.31",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "dist/cjs",
|
|
6
6
|
"module": "dist/esm",
|
|
@@ -52,9 +52,9 @@
|
|
|
52
52
|
"vue-codemirror": "^6.1.1",
|
|
53
53
|
"vue-cropper": "^1.1.4",
|
|
54
54
|
"vue-router": "^4.2.4",
|
|
55
|
-
"@maketribe/dm": "^3.2.11",
|
|
56
55
|
"@maketribe/request": "^3.2.3",
|
|
57
56
|
"@maketribe/locale": "^3.2.0",
|
|
57
|
+
"@maketribe/dm": "^3.2.11",
|
|
58
58
|
"@maketribe/utils": "^3.2.1"
|
|
59
59
|
},
|
|
60
60
|
"devDependencies": {
|