@maketribe/ms-app 3.2.7 → 3.2.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/components/basic/data-table-select/data-table-select.js +2 -2
- package/dist/cjs/components/basic/data-table-select/data-table-select.js.map +1 -1
- package/dist/cjs/components/basic/doc-editor/plugins/ImagePlugin/ImageEditPanel.js +4 -4
- package/dist/cjs/components/basic/doc-editor/plugins/ImagePlugin/ImageEditPanel.js.map +1 -1
- package/dist/cjs/components/basic/icon-select/icon-select.js +25 -9
- package/dist/cjs/components/basic/icon-select/icon-select.js.map +1 -1
- package/dist/cjs/components/basic/svg-icon/svg-icon.js +4 -4
- package/dist/cjs/components/basic/svg-icon/svg-icon.js.map +1 -1
- package/dist/cjs/components/basic/upload-file/ui/upload-image/upload-image-options.js +12 -0
- package/dist/cjs/components/basic/upload-file/ui/upload-image/upload-image-options.js.map +1 -1
- package/dist/cjs/components/basic/upload-file/ui/upload-image/upload-image.js +34 -6
- package/dist/cjs/components/basic/upload-file/ui/upload-image/upload-image.js.map +1 -1
- package/dist/cjs/components/business/resource-list/ResourceManager.js +2 -1
- package/dist/cjs/components/business/resource-list/ResourceManager.js.map +1 -1
- package/dist/cjs/components/data-model/data-filter-form/data-filter-form.js +2 -6
- package/dist/cjs/components/data-model/data-filter-form/data-filter-form.js.map +1 -1
- package/dist/cjs/components/data-model/data-form/data-form-item/data-form-item.js +1 -1
- package/dist/cjs/components/data-model/data-form/data-form-item/data-form-item.js.map +1 -1
- package/dist/cjs/components/data-model/data-table/components/header-components/table-filter/table-filter.js +62 -2
- package/dist/cjs/components/data-model/data-table/components/header-components/table-filter/table-filter.js.map +1 -1
- package/dist/cjs/components/data-model/data-table/views/tree-view/tree-view.js +2 -2
- package/dist/cjs/components/data-model/data-table/views/tree-view/tree-view.js.map +1 -1
- package/dist/cjs/message-impl/DialogerImpl.js +4 -2
- package/dist/cjs/message-impl/DialogerImpl.js.map +1 -1
- package/dist/cjs/modules/cms/components/part-tree/index.vue.js +5 -5
- package/dist/cjs/modules/cms/composables/part-extensions.js.map +1 -1
- package/dist/cjs/modules/cms/pages/cms-ad/index.vue2.js +4 -4
- package/dist/cjs/modules/cms/pages/cms-contents/article-edit-add-page.vue2.js +60 -47
- package/dist/cjs/modules/cms/pages/cms-contents/article-edit-add-page.vue2.js.map +1 -1
- package/dist/cjs/modules/cms/pages/cms-contents/components/article-atlas.vue.js +4 -4
- package/dist/cjs/modules/cms/pages/cms-contents/index.vue2.js +71 -48
- package/dist/cjs/modules/cms/pages/cms-contents/index.vue2.js.map +1 -1
- package/dist/cjs/modules/cms/pages/cms-resource/index.vue2.js +30 -0
- package/dist/cjs/modules/cms/pages/cms-resource/index.vue2.js.map +1 -1
- package/dist/cjs/modules/ms/components/material-list/components/file-view/file-view.js +3 -3
- package/dist/cjs/modules/ms/components/material-list/components/file-view/file-view.js.map +1 -1
- package/dist/cjs/modules/ms/components/material-list/components/video-view/video-view.js +6 -6
- package/dist/cjs/modules/ms/components/material-list/components/video-view/video-view.js.map +1 -1
- package/dist/cjs/modules/ms/components/material-list/material-group.js +5 -5
- package/dist/cjs/modules/ms/components/material-list/material-group.js.map +1 -1
- package/dist/cjs/modules/ms/dataviews/ms-config/MsConfigTable.js +0 -1
- package/dist/cjs/modules/ms/dataviews/ms-config/MsConfigTable.js.map +1 -1
- package/dist/cjs/modules/ms/dataviews/ms-deny-ip-access-list/MsDenyIPAccessListTable.js +0 -1
- package/dist/cjs/modules/ms/dataviews/ms-deny-ip-access-list/MsDenyIPAccessListTable.js.map +1 -1
- package/dist/cjs/modules/ms/dataviews/ms-ip-white-list/MsIPWhitelistTable.js +0 -1
- package/dist/cjs/modules/ms/dataviews/ms-ip-white-list/MsIPWhitelistTable.js.map +1 -1
- package/dist/cjs/modules/ms/dataviews/ms-member/MsMemberTable.js +3 -4
- package/dist/cjs/modules/ms/dataviews/ms-member/MsMemberTable.js.map +1 -1
- package/dist/cjs/modules/ms/dataviews/ms-menu/MsMenuForm.js +10 -10
- package/dist/cjs/modules/ms/dataviews/ms-menu/MsMenuForm.js.map +1 -1
- package/dist/cjs/modules/ms/dataviews/ms-menu/MsMenuTable.js +0 -1
- package/dist/cjs/modules/ms/dataviews/ms-menu/MsMenuTable.js.map +1 -1
- package/dist/cjs/modules/ms/dataviews/ms-menu/ms-route/MsRouteTable.js +4 -1
- package/dist/cjs/modules/ms/dataviews/ms-menu/ms-route/MsRouteTable.js.map +1 -1
- package/dist/cjs/modules/ms/dataviews/ms-role/MsRoleTable.js +0 -1
- package/dist/cjs/modules/ms/dataviews/ms-role/MsRoleTable.js.map +1 -1
- package/dist/cjs/modules/ms/index.js +5 -0
- package/dist/cjs/modules/ms/index.js.map +1 -1
- package/dist/cjs/modules/ms/pages/icons/index.vue.js +4 -0
- package/dist/cjs/modules/ms/pages/icons/index.vue.js.map +1 -0
- package/dist/cjs/modules/ms/pages/icons/index.vue2.js +139 -0
- package/dist/cjs/modules/ms/pages/icons/index.vue2.js.map +1 -0
- package/dist/cjs/modules/ms/pages/ms-role/components/aside.vue.js +3 -3
- package/dist/esm/components/basic/icon-select/icon-select.js +26 -10
- package/dist/esm/components/basic/icon-select/icon-select.js.map +1 -1
- package/dist/esm/components/basic/svg-icon/svg-icon.js +3 -3
- package/dist/esm/components/basic/svg-icon/svg-icon.js.map +1 -1
- package/dist/esm/components/basic/upload-file/ui/upload-image/upload-image-options.js +12 -0
- package/dist/esm/components/basic/upload-file/ui/upload-image/upload-image-options.js.map +1 -1
- package/dist/esm/components/basic/upload-file/ui/upload-image/upload-image.js +34 -6
- package/dist/esm/components/basic/upload-file/ui/upload-image/upload-image.js.map +1 -1
- package/dist/esm/components/business/resource-list/ResourceManager.js +2 -1
- package/dist/esm/components/business/resource-list/ResourceManager.js.map +1 -1
- package/dist/esm/components/data-model/data-filter-form/data-filter-form.js +1 -5
- package/dist/esm/components/data-model/data-filter-form/data-filter-form.js.map +1 -1
- package/dist/esm/components/data-model/data-form/data-form-item/data-form-item.js +2 -2
- package/dist/esm/components/data-model/data-form/data-form-item/data-form-item.js.map +1 -1
- package/dist/esm/components/data-model/data-table/components/header-components/table-filter/table-filter.js +64 -4
- package/dist/esm/components/data-model/data-table/components/header-components/table-filter/table-filter.js.map +1 -1
- package/dist/esm/message-impl/DialogerImpl.js +4 -2
- package/dist/esm/message-impl/DialogerImpl.js.map +1 -1
- package/dist/esm/modules/cms/composables/part-extensions.js.map +1 -1
- package/dist/esm/modules/cms/pages/cms-contents/article-edit-add-page.vue2.js +60 -47
- package/dist/esm/modules/cms/pages/cms-contents/article-edit-add-page.vue2.js.map +1 -1
- package/dist/esm/modules/cms/pages/cms-contents/index.vue2.js +72 -49
- package/dist/esm/modules/cms/pages/cms-contents/index.vue2.js.map +1 -1
- package/dist/esm/modules/cms/pages/cms-resource/index.vue2.js +30 -0
- package/dist/esm/modules/cms/pages/cms-resource/index.vue2.js.map +1 -1
- package/dist/esm/modules/ms/dataviews/ms-config/MsConfigTable.js +1 -2
- package/dist/esm/modules/ms/dataviews/ms-config/MsConfigTable.js.map +1 -1
- package/dist/esm/modules/ms/dataviews/ms-deny-ip-access-list/MsDenyIPAccessListTable.js +1 -2
- package/dist/esm/modules/ms/dataviews/ms-deny-ip-access-list/MsDenyIPAccessListTable.js.map +1 -1
- package/dist/esm/modules/ms/dataviews/ms-ip-white-list/MsIPWhitelistTable.js +1 -2
- package/dist/esm/modules/ms/dataviews/ms-ip-white-list/MsIPWhitelistTable.js.map +1 -1
- package/dist/esm/modules/ms/dataviews/ms-member/MsMemberTable.js +4 -5
- package/dist/esm/modules/ms/dataviews/ms-member/MsMemberTable.js.map +1 -1
- package/dist/esm/modules/ms/dataviews/ms-menu/MsMenuForm.js +10 -10
- package/dist/esm/modules/ms/dataviews/ms-menu/MsMenuForm.js.map +1 -1
- package/dist/esm/modules/ms/dataviews/ms-menu/MsMenuTable.js +1 -2
- package/dist/esm/modules/ms/dataviews/ms-menu/MsMenuTable.js.map +1 -1
- package/dist/esm/modules/ms/dataviews/ms-menu/ms-route/MsRouteTable.js +4 -1
- package/dist/esm/modules/ms/dataviews/ms-menu/ms-route/MsRouteTable.js.map +1 -1
- package/dist/esm/modules/ms/dataviews/ms-role/MsRoleTable.js +1 -2
- package/dist/esm/modules/ms/dataviews/ms-role/MsRoleTable.js.map +1 -1
- package/dist/esm/modules/ms/index.js +5 -0
- package/dist/esm/modules/ms/index.js.map +1 -1
- package/dist/esm/modules/ms/pages/icons/index.vue.js +5 -0
- package/dist/esm/modules/ms/pages/icons/index.vue.js.map +1 -0
- package/dist/esm/modules/ms/pages/icons/index.vue2.js +123 -0
- package/dist/esm/modules/ms/pages/icons/index.vue2.js.map +1 -0
- package/dist/style/components/form/form-detail.css +1 -1
- package/dist/style/components/form/form-icon-select.css +1 -1
- package/dist/style/components/form/index.css +1 -1
- package/dist/style/components/index.css +1 -1
- package/dist/style/components/table/index.css +1 -1
- package/dist/style/components/table/table-filter.css +1 -0
- package/dist/style/components/table-view.css +1 -1
- package/dist/style/index.css +1 -1
- package/dist/style/modules/ms/index.css +1 -1
- package/dist/style/modules/ms/pages/icon.css +1 -0
- package/dist/style/modules/ms/pages/index.css +1 -1
- package/dist/style/src/components/form/form-detail.scss +1 -1
- package/dist/style/src/components/form/form-icon-select.scss +21 -8
- package/dist/style/src/components/table/index.scss +2 -1
- package/dist/style/src/components/table/table-filter.scss +8 -0
- package/dist/style/src/components/table-view.scss +44 -43
- package/dist/style/src/modules/ms/pages/icon.scss +50 -0
- package/dist/style/src/modules/ms/pages/index.scss +2 -1
- package/dist/types/components/basic/upload-file/ui/upload-image/index.d.ts +9 -0
- package/dist/types/components/basic/upload-file/ui/upload-image/upload-image-options.d.ts +3 -0
- package/dist/types/components/basic/upload-file/ui/upload-image/upload-image.d.ts +9 -0
- package/dist/types/components/business/resource-list/ResourceManager.d.ts +1 -0
- package/dist/types/modules/cms/composables/part-extensions.d.ts +1 -1
- package/dist/types/modules/ms/pages/icons/index.vue.d.ts +2 -0
- package/package.json +4 -4
|
@@ -19,7 +19,7 @@ import "@maketribe/request";
|
|
|
19
19
|
import "@maketribe/utils";
|
|
20
20
|
import "../../../../components/basic/upload-file/context/web-file-upload-context.js";
|
|
21
21
|
import "../../../../components/basic/upload-file/context/web-file-upload-context-options.js";
|
|
22
|
-
import "../../../../components/basic/upload-file/ui/upload-image/index.js";
|
|
22
|
+
import { MKUploadImage } from "../../../../components/basic/upload-file/ui/upload-image/index.js";
|
|
23
23
|
import "../../../../components/basic/upload-file/upload-file-options.js";
|
|
24
24
|
import { MKDocEditor } from "../../../../components/basic/doc-editor/index.js";
|
|
25
25
|
import "../../../../components/basic/copy-container/index.js";
|
|
@@ -87,6 +87,30 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
87
87
|
articleDv.data.subTitle = val;
|
|
88
88
|
}
|
|
89
89
|
});
|
|
90
|
+
const getDefaultDescContent = () => {
|
|
91
|
+
var _a;
|
|
92
|
+
if (!descAutoCreate.value) {
|
|
93
|
+
return "";
|
|
94
|
+
}
|
|
95
|
+
let val = "";
|
|
96
|
+
const div = document.createElement("div");
|
|
97
|
+
div.innerHTML = content.value;
|
|
98
|
+
val = (_a = div.textContent) == null ? void 0 : _a.substring(0, 700);
|
|
99
|
+
if (div.textContent.length > 700) {
|
|
100
|
+
val += "...";
|
|
101
|
+
}
|
|
102
|
+
return val;
|
|
103
|
+
};
|
|
104
|
+
const descAutoCreate = ref(true);
|
|
105
|
+
const desc = computed({
|
|
106
|
+
get() {
|
|
107
|
+
var _a;
|
|
108
|
+
return ((_a = articleDv.data) == null ? void 0 : _a.desc) || getDefaultDescContent();
|
|
109
|
+
},
|
|
110
|
+
set(val) {
|
|
111
|
+
articleDv.data.desc = val;
|
|
112
|
+
}
|
|
113
|
+
});
|
|
90
114
|
const releaseDate = computed({
|
|
91
115
|
get() {
|
|
92
116
|
var _a, _b;
|
|
@@ -128,6 +152,10 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
128
152
|
articleDv.init();
|
|
129
153
|
});
|
|
130
154
|
const saveHandle = async () => {
|
|
155
|
+
var _a;
|
|
156
|
+
if (!((_a = articleDv.data) == null ? void 0 : _a.desc)) {
|
|
157
|
+
desc.value = getDefaultDescContent();
|
|
158
|
+
}
|
|
131
159
|
await articleDv.submit();
|
|
132
160
|
if (route.query.id) {
|
|
133
161
|
articleDv.editRecord(route.query.id);
|
|
@@ -164,8 +192,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
164
192
|
const _component_el_col = resolveComponent("el-col");
|
|
165
193
|
const _component_el_date_picker = resolveComponent("el-date-picker");
|
|
166
194
|
const _component_el_select = resolveComponent("el-select");
|
|
167
|
-
const
|
|
168
|
-
const _component_MKUploadFile = resolveComponent("MKUploadFile");
|
|
195
|
+
const _component_el_switch = resolveComponent("el-switch");
|
|
169
196
|
const _component_el_tab_pane = resolveComponent("el-tab-pane");
|
|
170
197
|
const _component_el_tabs = resolveComponent("el-tabs");
|
|
171
198
|
const _directive_loading = resolveDirective("loading");
|
|
@@ -437,7 +464,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
437
464
|
createElementVNode("div", _hoisted_6, [
|
|
438
465
|
createVNode(_component_el_tabs, {
|
|
439
466
|
modelValue: articleOptionsActive.value,
|
|
440
|
-
"onUpdate:modelValue": _cache[
|
|
467
|
+
"onUpdate:modelValue": _cache[12] || (_cache[12] = ($event) => articleOptionsActive.value = $event)
|
|
441
468
|
}, {
|
|
442
469
|
default: withCtx(() => [
|
|
443
470
|
createVNode(_component_el_tab_pane, {
|
|
@@ -516,75 +543,61 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
516
543
|
]),
|
|
517
544
|
_: 1
|
|
518
545
|
}),
|
|
546
|
+
createVNode(_component_el_divider, { "content-position": "left" }, {
|
|
547
|
+
default: withCtx(() => [
|
|
548
|
+
createTextVNode(" 文章封面/简介 "),
|
|
549
|
+
createVNode(_component_el_switch, {
|
|
550
|
+
modelValue: descAutoCreate.value,
|
|
551
|
+
"onUpdate:modelValue": _cache[7] || (_cache[7] = ($event) => descAutoCreate.value = $event),
|
|
552
|
+
style: { "margin-left": "10px" },
|
|
553
|
+
"inline-prompt": "",
|
|
554
|
+
"active-text": "自动生成",
|
|
555
|
+
"inactive-text": "手动撰写"
|
|
556
|
+
}, null, 8, ["modelValue"])
|
|
557
|
+
]),
|
|
558
|
+
_: 1
|
|
559
|
+
}),
|
|
519
560
|
createVNode(_component_el_row, { class: "cover-desc" }, {
|
|
520
561
|
default: withCtx(() => [
|
|
521
|
-
createVNode(
|
|
562
|
+
createVNode(unref(MKUploadImage), {
|
|
522
563
|
modelValue: articleDv.data.cover,
|
|
523
|
-
"onUpdate:modelValue": _cache[
|
|
524
|
-
|
|
564
|
+
"onUpdate:modelValue": _cache[8] || (_cache[8] = ($event) => articleDv.data.cover = $event),
|
|
565
|
+
width: "115px",
|
|
566
|
+
height: "115px",
|
|
525
567
|
uploadContext: new (unref(MaterialUploadContext))({
|
|
526
568
|
allowMaterialTypeValues: [1]
|
|
527
569
|
})
|
|
528
|
-
},
|
|
529
|
-
default: withCtx(() => [
|
|
530
|
-
createVNode(_component_el_image, {
|
|
531
|
-
class: "cover-image",
|
|
532
|
-
src: articleDv.data.cover,
|
|
533
|
-
style: { "width": "100%", "height": "100%" },
|
|
534
|
-
fit: "contain"
|
|
535
|
-
}, {
|
|
536
|
-
error: withCtx(() => [
|
|
537
|
-
createVNode(unref(MKSvgIcon), { iconClass: "Picture" })
|
|
538
|
-
]),
|
|
539
|
-
_: 1
|
|
540
|
-
}, 8, ["src"])
|
|
541
|
-
]),
|
|
542
|
-
_: 1
|
|
543
|
-
}, 8, ["modelValue", "uploadContext"]),
|
|
570
|
+
}, null, 8, ["modelValue", "uploadContext"]),
|
|
544
571
|
createVNode(_component_el_input, {
|
|
545
572
|
class: "desc",
|
|
546
573
|
type: "textarea",
|
|
547
|
-
autosize: { minRows: 5, maxRows:
|
|
574
|
+
autosize: { minRows: 5, maxRows: 30 },
|
|
548
575
|
maxlength: "1000",
|
|
549
576
|
"show-word-limit": "",
|
|
550
577
|
placeholder: "[选填] 文章简介",
|
|
551
|
-
modelValue:
|
|
552
|
-
"onUpdate:modelValue": _cache[
|
|
578
|
+
modelValue: desc.value,
|
|
579
|
+
"onUpdate:modelValue": _cache[9] || (_cache[9] = ($event) => desc.value = $event)
|
|
553
580
|
}, null, 8, ["modelValue"])
|
|
554
581
|
]),
|
|
555
582
|
_: 1
|
|
556
583
|
}),
|
|
557
584
|
createVNode(_component_el_divider, { "content-position": "left" }, {
|
|
558
585
|
default: withCtx(() => [
|
|
559
|
-
createTextVNode("
|
|
586
|
+
createTextVNode("文章Banner图")
|
|
560
587
|
]),
|
|
561
588
|
_: 1
|
|
562
589
|
}),
|
|
563
590
|
createVNode(_component_el_row, null, {
|
|
564
591
|
default: withCtx(() => [
|
|
565
|
-
createVNode(
|
|
566
|
-
class: "banner",
|
|
592
|
+
createVNode(unref(MKUploadImage), {
|
|
567
593
|
modelValue: articleDv.data.banner,
|
|
568
|
-
"onUpdate:modelValue": _cache[
|
|
594
|
+
"onUpdate:modelValue": _cache[10] || (_cache[10] = ($event) => articleDv.data.banner = $event),
|
|
595
|
+
width: "100%",
|
|
596
|
+
height: "300px",
|
|
569
597
|
uploadContext: new (unref(MaterialUploadContext))({
|
|
570
598
|
allowMaterialTypeValues: [1]
|
|
571
599
|
})
|
|
572
|
-
},
|
|
573
|
-
default: withCtx(() => [
|
|
574
|
-
createVNode(_component_el_image, {
|
|
575
|
-
class: "cover-image",
|
|
576
|
-
src: articleDv.data.banner,
|
|
577
|
-
style: { "width": "100%", "height": "100%" },
|
|
578
|
-
fit: "cover"
|
|
579
|
-
}, {
|
|
580
|
-
error: withCtx(() => [
|
|
581
|
-
createVNode(unref(MKSvgIcon), { iconClass: "Picture" })
|
|
582
|
-
]),
|
|
583
|
-
_: 1
|
|
584
|
-
}, 8, ["src"])
|
|
585
|
-
]),
|
|
586
|
-
_: 1
|
|
587
|
-
}, 8, ["modelValue", "uploadContext"])
|
|
600
|
+
}, null, 8, ["modelValue", "uploadContext"])
|
|
588
601
|
]),
|
|
589
602
|
_: 1
|
|
590
603
|
})
|
|
@@ -601,7 +614,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
601
614
|
return [
|
|
602
615
|
createVNode(_sfc_main$1, {
|
|
603
616
|
modelValue: atlas.value,
|
|
604
|
-
"onUpdate:modelValue": _cache[
|
|
617
|
+
"onUpdate:modelValue": _cache[11] || (_cache[11] = ($event) => atlas.value = $event),
|
|
605
618
|
articleId: parseInt((_a = articleDv.data) == null ? void 0 : _a.id)
|
|
606
619
|
}, null, 8, ["modelValue", "articleId"])
|
|
607
620
|
];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"article-edit-add-page.vue2.js","sources":["../../../../../../src/modules/cms/pages/cms-contents/article-edit-add-page.vue"],"sourcesContent":["<template>\r\n <div class=\"mk-cms-article-eidtadd__warp\">\r\n <el-page-header style=\"background-color: #fff;padding: 10px;\" :icon=\"null\" @back=\"()=>router.push({name:'cms/contents',query:{pid:articleDv?.data?.cmsPartId} })\">\r\n <template #content>\r\n <el-text v-if=\"!articleDv.data?.modifier\">{{ !!route.query.id ? \"编辑文章\" : \"创建文章\" }}</el-text>\r\n <el-text v-else>{{ articleDv.data?.modifierName }} 于 {{ articleDv.data?.updatedAt }} 更新</el-text>\r\n </template>\r\n <template #extra>\r\n <div class=\"mk-cms-article-eidtadd__header_tools\">\r\n <el-tag v-if=\"!articleDv.data?.publishTime\" effect=\"dark\" round>未发布</el-tag>\r\n <el-text v-else>发布时间:{{ articleDv.data?.publishTime }}</el-text>\r\n <el-dropdown>\r\n <span class=\"el-dropdown-link\" style=\"margin-left: 10px;\">\r\n <el-button type=\"primary\" plain>\r\n <MKSvgIcon iconClass=\"save\" style=\"margin-right: 10px;\" />\r\n 保存\r\n </el-button>\r\n </span>\r\n <template #dropdown>\r\n <el-dropdown-menu>\r\n <el-dropdown-item @click=\"saveHandle\">\r\n <MKSvgIcon iconClass=\"save\" style=\"margin-right: 5px;\" />\r\n 仅保存\r\n </el-dropdown-item>\r\n <el-dropdown-item>\r\n <MKSvgIcon iconClass=\"save\" style=\"margin-right: 5px;\" />\r\n 保存为草稿\r\n </el-dropdown-item>\r\n <el-dropdown-item>\r\n <MKSvgIcon iconClass=\"View\" style=\"margin-right: 5px;\" />\r\n 保存并预览\r\n </el-dropdown-item>\r\n <el-dropdown-item>\r\n <MKSvgIcon iconClass=\"Share\" style=\"margin-right: 5px;\" />\r\n 保存并发布\r\n </el-dropdown-item>\r\n </el-dropdown-menu>\r\n </template>\r\n </el-dropdown>\r\n </div>\r\n </template>\r\n </el-page-header>\r\n <div class=\"mk-cms-article-eidtadd__body\" v-loading=\"articleDv.loading\">\r\n\r\n <MKDocEditor v-if=\"articleDv.data\" :content=\"content\" @change=\"EditorChangeHandle\">\r\n <template #header>\r\n <div class=\"mk-cms-article-eidtadd__body__header\">\r\n <el-row>\r\n <el-input class=\"title\" type=\"textarea\" :autosize=\"{ minRows: 1, maxRows: 4 }\" maxlength=\"150\"\r\n show-word-limit placeholder=\"请输入标题\" v-model=\"title\" />\r\n </el-row>\r\n <el-row>\r\n <el-input class=\"sub-title\" type=\"textarea\" :autosize=\"{ minRows: 1, maxRows: 4 }\" maxlength=\"150\"\r\n show-word-limit placeholder=\"[选填] 请输入子标题\" v-model=\"subTitle\" />\r\n </el-row>\r\n </div>\r\n </template>\r\n <template #after-extentions>\r\n <div class=\"mk-cms-article-eidtadd__body__extentions\" :class=\"{ hide: showExtentions! }\" ref=\"extentionsRef\">\r\n <MKSvgIcon icon-class=\"ArrowLeft\" class=\"open\" @click=\"showExtentionsHandle\" v-if=\"showExtentions\">\r\n </MKSvgIcon>\r\n <MKSvgIcon v-else icon-class=\"ArrowRight\" class=\"close\" @click=\"hideExtentionsHandle\">\r\n </MKSvgIcon>\r\n <el-divider content-position=\"left\">文章设置</el-divider>\r\n <MKDataForm :dataForm=\"articleDv\">\r\n <MKForm :dataForm=\"articleDv\" style=\"width:225px\" label-width=\"110px\">\r\n <el-row>\r\n <MKDataFormItem style=\"width: 100%;\" name=\"isTop\"></MKDataFormItem>\r\n </el-row>\r\n <el-row>\r\n <MKDataFormItem style=\"width: 100%;\" name=\"isNew\"></MKDataFormItem>\r\n </el-row>\r\n <el-row>\r\n <MKDataFormItem style=\"width: 100%;\" name=\"isHotRecommend\"></MKDataFormItem>\r\n </el-row>\r\n <el-row>\r\n <MKDataFormItem style=\"width: 100%;\" name=\"isPartRecommend\"></MKDataFormItem>\r\n </el-row>\r\n <el-row>\r\n <MKDataFormItem style=\"width: 100%;\" name=\"isShowList\"></MKDataFormItem>\r\n </el-row>\r\n <el-row>\r\n <MKDataFormItem style=\"width: 100%;\" name=\"isDraft\"></MKDataFormItem>\r\n </el-row>\r\n <el-row>\r\n <MKDataFormItem style=\"width: 100%;\" name=\"sortNo\"></MKDataFormItem>\r\n </el-row>\r\n </MKForm>\r\n </MKDataForm>\r\n </div>\r\n </template>\r\n <template #footer>\r\n <div class=\"mk-cms-article-eidtadd__body__footer\">\r\n <el-tabs v-model=\"articleOptionsActive\">\r\n <el-tab-pane label=\"基础内容\" name=\"content\">\r\n <div class=\"content\">\r\n <el-row :gutter=\"20\">\r\n <el-col :span=\"6\">\r\n <el-input placeholder=\"[选填] 作者\" v-model=\"articleDv.data.author\" clearable>\r\n <template #prefix>\r\n <MKSvgIcon iconClass=\"UserFilled\" />\r\n </template>\r\n </el-input>\r\n </el-col>\r\n <el-col :span=\"6\">\r\n <el-date-picker v-model=\"releaseDate\" type=\"datetime\" placeholder=\"发布时间\"\r\n :default-time=\"new Date()\" />\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <el-input placeholder=\"[选填] 发布地址\" v-model=\"articleDv.data.locationDesc\" clearable>\r\n <template #prefix>\r\n <MKSvgIcon iconClass=\"Location\" />\r\n </template>\r\n </el-input>\r\n </el-col>\r\n </el-row>\r\n <el-row>\r\n <el-select v-model=\"tags\" multiple filterable allow-create default-first-option\r\n :reserve-keyword=\"false\" placeholder=\"[可选] 选择文章标签\" style=\"width: 100%\">\r\n <template #prefix>\r\n <MKSvgIcon iconClass=\"CollectionTag\" />\r\n </template>\r\n </el-select>\r\n </el-row>\r\n <el-row class=\"cover-desc\">\r\n <MKUploadFile v-model=\"articleDv.data.cover\" class=\"cover\" :uploadContext=\"new MaterialUploadContext({\r\n allowMaterialTypeValues: [1],\r\n })\">\r\n <el-image class=\"cover-image\" :src=\"articleDv.data.cover\" style=\"width: 100%; height: 100%\"\r\n fit=\"contain\">\r\n <template #error>\r\n <MKSvgIcon iconClass=\"Picture\" />\r\n </template>\r\n </el-image>\r\n </MKUploadFile>\r\n <el-input class=\"desc\" type=\"textarea\" :autosize=\"{ minRows: 5, maxRows: 10 }\" maxlength=\"1000\"\r\n show-word-limit placeholder=\"[选填] 文章简介\" v-model=\"articleDv.data.desc\" />\r\n </el-row>\r\n <el-divider content-position=\"left\">文章封面</el-divider>\r\n <el-row>\r\n <MKUploadFile class=\"banner\" v-model=\"articleDv.data.banner\" :uploadContext=\"new MaterialUploadContext({\r\n allowMaterialTypeValues: [1],\r\n })\">\r\n <el-image class=\"cover-image\" :src=\"articleDv.data.banner\" style=\"width: 100%; height: 100%\"\r\n fit=\"cover\">\r\n <template #error>\r\n <MKSvgIcon iconClass=\"Picture\" />\r\n </template>\r\n </el-image>\r\n </MKUploadFile>\r\n </el-row>\r\n </div>\r\n </el-tab-pane>\r\n <el-tab-pane label=\"文章资源库\" name=\"atlas\">\r\n <ArticleAtlas v-model=\"atlas\" :articleId=\"parseInt(articleDv.data?.id)\" />\r\n </el-tab-pane>\r\n <el-tab-pane label=\"页面设置\" name=\"settings\">\r\n <MKDataForm :dataForm=\"articleDv\" label-width=\"120px\">\r\n <MKForm :dataForm=\"articleDv\">\r\n <el-row>\r\n <MKDataFormItem style=\"width: 100%;\" name=\"seoKeywords\"></MKDataFormItem>\r\n </el-row>\r\n <el-row>\r\n <MKDataFormItem style=\"width: 100%;\" name=\"seoDesc\"></MKDataFormItem>\r\n </el-row>\r\n </MKForm>\r\n </MKDataForm>\r\n </el-tab-pane>\r\n </el-tabs>\r\n </div>\r\n </template>\r\n </MKDocEditor>\r\n </div>\r\n </div>\r\n</template>\r\n<script setup lang='ts'>\r\nimport { onMounted, reactive, ref, computed } from \"vue\";\r\nimport { MKDocEditor, MKSvgIcon } from '../../../../components'\r\nimport { MKDataForm, MKForm, MKDataFormItem } from \"../../../../components\";\r\nimport ArticleAtlas from \"./components/article-atlas.vue\";\r\nimport { CmsArticlesForm } from \"../../dataviews\";\r\nimport { useRoute,useRouter } from \"vue-router\";\r\nimport { MaterialUploadContext } from \"../../../ms\";\r\n\r\nconst route = useRoute()\r\nconst router = useRouter();\r\n\r\n\r\n// 文章请求\r\nconst articleDv = reactive(new CmsArticlesForm()) as CmsArticlesForm;\r\nconst articleOptionsActive = ref(\"content\");\r\n\r\n//qiat\r\n\r\n// 标题\r\nconst title = computed({\r\n get() { return articleDv.data?.title || \"\"; },\r\n set(val) { articleDv.data.title = val; }\r\n});\r\n// 子标题\r\nconst subTitle = computed({\r\n get() { return articleDv.data?.subTitle || \"\"; },\r\n set(val) { articleDv.data.subTitle = val; }\r\n});\r\n// 发布时间\r\nconst releaseDate = computed({\r\n get() { return articleDv.data?.releaseDate || articleDv.data?.publishTime; },\r\n set(val) { articleDv.data.releaseDate = val; }\r\n});\r\n// 标签\r\nconst tags = ref([]);\r\n// computed({ \r\n// get() { return articleDv.data?.tags || [] }, \r\n// set(val) { articleDv.data.tags = val; } \r\n// });\r\n// 内容\r\nconst content = computed({\r\n get() { return articleDv.data?.content || \"\"; },\r\n set(val) { articleDv.data.content = val; }\r\n});\r\n\r\n// 图集\r\nconst atlas = computed({\r\n get() {\r\n return articleDv.data?.atlas\r\n },\r\n set(val) { articleDv.data.atlas = val; }\r\n});\r\n\r\n\r\nonMounted(() => {\r\n\r\n // 初始化数据加载\r\n if (route.query.id) {\r\n articleDv.editRecord(route.query.id);\r\n }\r\n else if (route.query.partId) {\r\n articleDv.addRecord({\r\n cmsPartId: route.query.partId\r\n });\r\n }\r\n else {\r\n articleDv.addRecord();\r\n }\r\n articleDv.init();\r\n \r\n})\r\n\r\n// 保存\r\nconst saveHandle = async () => {\r\n\r\n let result = await articleDv.submit();\r\n if (route.query.id) {\r\n articleDv.editRecord(route.query.id);\r\n } else if (route.query.partId) {\r\n articleDv.addRecord({\r\n cmsPartId: route.query.partId\r\n });\r\n } else {\r\n articleDv.addRecord();\r\n }\r\n}\r\nconst showExtentions = ref(false);\r\nconst extentionsRef = ref();\r\n// 隐藏扩展\r\nconst hideExtentionsHandle = () => {\r\n\r\n showExtentions.value = true;\r\n}\r\n//展示扩展\r\nconst showExtentionsHandle = () => {\r\n\r\n showExtentions.value = false;\r\n\r\n}\r\n\r\nconst EditorChangeHandle = (v: any) => {\r\n articleDv.data.content = v;\r\n}\r\n\r\n</script>\r\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"article-edit-add-page.vue2.js","sources":["../../../../../../src/modules/cms/pages/cms-contents/article-edit-add-page.vue"],"sourcesContent":["<template>\r\n <div class=\"mk-cms-article-eidtadd__warp\">\r\n <el-page-header style=\"background-color: #fff;padding: 10px;\" :icon=\"null\"\r\n @back=\"() => router.push({ name: 'cms/contents', query: { pid: articleDv?.data?.cmsPartId } })\">\r\n <template #content>\r\n <el-text v-if=\"!articleDv.data?.modifier\">{{ !!route.query.id ? \"编辑文章\" : \"创建文章\" }}</el-text>\r\n <el-text v-else>{{ articleDv.data?.modifierName }} 于 {{ articleDv.data?.updatedAt }} 更新</el-text>\r\n </template>\r\n <template #extra>\r\n <div class=\"mk-cms-article-eidtadd__header_tools\">\r\n <el-tag v-if=\"!articleDv.data?.publishTime\" effect=\"dark\" round>未发布</el-tag>\r\n <el-text v-else>发布时间:{{ articleDv.data?.publishTime }}</el-text>\r\n <el-dropdown>\r\n <span class=\"el-dropdown-link\" style=\"margin-left: 10px;\">\r\n <el-button type=\"primary\" plain>\r\n <MKSvgIcon iconClass=\"save\" style=\"margin-right: 10px;\" />\r\n 保存\r\n </el-button>\r\n </span>\r\n <template #dropdown>\r\n <el-dropdown-menu>\r\n <el-dropdown-item @click=\"saveHandle\">\r\n <MKSvgIcon iconClass=\"save\" style=\"margin-right: 5px;\" />\r\n 仅保存\r\n </el-dropdown-item>\r\n <el-dropdown-item>\r\n <MKSvgIcon iconClass=\"save\" style=\"margin-right: 5px;\" />\r\n 保存为草稿\r\n </el-dropdown-item>\r\n <el-dropdown-item>\r\n <MKSvgIcon iconClass=\"View\" style=\"margin-right: 5px;\" />\r\n 保存并预览\r\n </el-dropdown-item>\r\n <el-dropdown-item>\r\n <MKSvgIcon iconClass=\"Share\" style=\"margin-right: 5px;\" />\r\n 保存并发布\r\n </el-dropdown-item>\r\n </el-dropdown-menu>\r\n </template>\r\n </el-dropdown>\r\n </div>\r\n </template>\r\n </el-page-header>\r\n <div class=\"mk-cms-article-eidtadd__body\" v-loading=\"articleDv.loading\">\r\n\r\n <MKDocEditor v-if=\"articleDv.data\" :content=\"content\" @change=\"EditorChangeHandle\">\r\n <template #header>\r\n <div class=\"mk-cms-article-eidtadd__body__header\">\r\n <el-row>\r\n <el-input class=\"title\" type=\"textarea\" :autosize=\"{ minRows: 1, maxRows: 4 }\" maxlength=\"150\"\r\n show-word-limit placeholder=\"请输入标题\" v-model=\"title\" />\r\n </el-row>\r\n <el-row>\r\n <el-input class=\"sub-title\" type=\"textarea\" :autosize=\"{ minRows: 1, maxRows: 4 }\" maxlength=\"150\"\r\n show-word-limit placeholder=\"[选填] 请输入子标题\" v-model=\"subTitle\" />\r\n </el-row>\r\n </div>\r\n </template>\r\n <template #after-extentions>\r\n <div class=\"mk-cms-article-eidtadd__body__extentions\" :class=\"{ hide: showExtentions! }\" ref=\"extentionsRef\">\r\n <MKSvgIcon icon-class=\"ArrowLeft\" class=\"open\" @click=\"showExtentionsHandle\" v-if=\"showExtentions\">\r\n </MKSvgIcon>\r\n <MKSvgIcon v-else icon-class=\"ArrowRight\" class=\"close\" @click=\"hideExtentionsHandle\">\r\n </MKSvgIcon>\r\n <el-divider content-position=\"left\">文章设置</el-divider>\r\n <MKDataForm :dataForm=\"articleDv\">\r\n <MKForm :dataForm=\"articleDv\" style=\"width:225px\" label-width=\"110px\">\r\n <el-row>\r\n <MKDataFormItem style=\"width: 100%;\" name=\"isTop\"></MKDataFormItem>\r\n </el-row>\r\n <el-row>\r\n <MKDataFormItem style=\"width: 100%;\" name=\"isNew\"></MKDataFormItem>\r\n </el-row>\r\n <el-row>\r\n <MKDataFormItem style=\"width: 100%;\" name=\"isHotRecommend\"></MKDataFormItem>\r\n </el-row>\r\n <el-row>\r\n <MKDataFormItem style=\"width: 100%;\" name=\"isPartRecommend\"></MKDataFormItem>\r\n </el-row>\r\n <el-row>\r\n <MKDataFormItem style=\"width: 100%;\" name=\"isShowList\"></MKDataFormItem>\r\n </el-row>\r\n <el-row>\r\n <MKDataFormItem style=\"width: 100%;\" name=\"isDraft\"></MKDataFormItem>\r\n </el-row>\r\n <el-row>\r\n <MKDataFormItem style=\"width: 100%;\" name=\"sortNo\"></MKDataFormItem>\r\n </el-row>\r\n </MKForm>\r\n </MKDataForm>\r\n </div>\r\n </template>\r\n <template #footer>\r\n <div class=\"mk-cms-article-eidtadd__body__footer\">\r\n <el-tabs v-model=\"articleOptionsActive\">\r\n <el-tab-pane label=\"基础内容\" name=\"content\">\r\n <div class=\"content\">\r\n <el-row :gutter=\"20\">\r\n <el-col :span=\"6\">\r\n <el-input placeholder=\"[选填] 作者\" v-model=\"articleDv.data.author\" clearable>\r\n <template #prefix>\r\n <MKSvgIcon iconClass=\"UserFilled\" />\r\n </template>\r\n </el-input>\r\n </el-col>\r\n <el-col :span=\"6\">\r\n <el-date-picker v-model=\"releaseDate\" type=\"datetime\" placeholder=\"发布时间\"\r\n :default-time=\"new Date()\" />\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <el-input placeholder=\"[选填] 发布地址\" v-model=\"articleDv.data.locationDesc\" clearable>\r\n <template #prefix>\r\n <MKSvgIcon iconClass=\"Location\" />\r\n </template>\r\n </el-input>\r\n </el-col>\r\n </el-row>\r\n <el-row>\r\n <el-select v-model=\"tags\" multiple filterable allow-create default-first-option\r\n :reserve-keyword=\"false\" placeholder=\"[可选] 选择文章标签\" style=\"width: 100%\">\r\n <template #prefix>\r\n <MKSvgIcon iconClass=\"CollectionTag\" />\r\n </template>\r\n </el-select>\r\n </el-row>\r\n <el-divider content-position=\"left\">\r\n 文章封面/简介\r\n <el-switch v-model=\"descAutoCreate\" style=\"margin-left: 10px;\" inline-prompt active-text=\"自动生成\"\r\n inactive-text=\"手动撰写\" />\r\n </el-divider>\r\n <el-row class=\"cover-desc\">\r\n <!-- <MKUploadFile v-model=\"articleDv.data.cover\" class=\"cover\" :uploadContext=\"new MaterialUploadContext({\r\n allowMaterialTypeValues: [1],\r\n })\">\r\n <MKSvgIcon iconClass=\"close\"></MKSvgIcon>\r\n <el-image class=\"cover-image\" :src=\"articleDv.data.cover\" style=\"width: 100%; height: 100%\"\r\n fit=\"contain\">\r\n <template #error>\r\n <MKSvgIcon iconClass=\"Picture\" />\r\n </template>\r\n </el-image>\r\n </MKUploadFile> -->\r\n <MKUploadImage v-model=\"articleDv.data.cover\" width=\"115px\" height=\"115px\":uploadContext=\"new MaterialUploadContext({\r\n allowMaterialTypeValues: [1],\r\n })\">\r\n\r\n </MKUploadImage>\r\n <el-input class=\"desc\" type=\"textarea\" :autosize=\"{ minRows: 5, maxRows: 30 }\" maxlength=\"1000\"\r\n show-word-limit placeholder=\"[选填] 文章简介\" v-model=\"desc\" />\r\n </el-row>\r\n <el-divider content-position=\"left\">文章Banner图</el-divider>\r\n <el-row>\r\n <MKUploadImage v-model=\"articleDv.data.banner\" width=\"100%\" height=\"300px\":uploadContext=\"new MaterialUploadContext({\r\n allowMaterialTypeValues: [1],\r\n })\">\r\n\r\n </MKUploadImage>\r\n </el-row>\r\n </div>\r\n </el-tab-pane>\r\n <el-tab-pane label=\"文章资源库\" name=\"atlas\">\r\n <ArticleAtlas v-model=\"atlas\" :articleId=\"parseInt(articleDv.data?.id)\" />\r\n </el-tab-pane>\r\n <el-tab-pane label=\"页面设置\" name=\"settings\">\r\n <MKDataForm :dataForm=\"articleDv\" label-width=\"120px\">\r\n <MKForm :dataForm=\"articleDv\">\r\n <el-row>\r\n <MKDataFormItem style=\"width: 100%;\" name=\"seoKeywords\"></MKDataFormItem>\r\n </el-row>\r\n <el-row>\r\n <MKDataFormItem style=\"width: 100%;\" name=\"seoDesc\"></MKDataFormItem>\r\n </el-row>\r\n </MKForm>\r\n </MKDataForm>\r\n </el-tab-pane>\r\n </el-tabs>\r\n </div>\r\n </template>\r\n </MKDocEditor>\r\n </div>\r\n </div>\r\n</template>\r\n<script setup lang='ts'>\r\nimport { onMounted, reactive, ref, computed } from \"vue\";\r\nimport { MKDocEditor, MKSvgIcon, MKUploadImage } from '../../../../components'\r\nimport { MKDataForm, MKForm, MKDataFormItem } from \"../../../../components\";\r\nimport ArticleAtlas from \"./components/article-atlas.vue\";\r\nimport { CmsArticlesForm } from \"../../dataviews\";\r\nimport { useRoute, useRouter } from \"vue-router\";\r\nimport { MaterialUploadContext } from \"../../../ms\";\r\n\r\nconst route = useRoute()\r\nconst router = useRouter();\r\n\r\n\r\n// 文章请求\r\nconst articleDv = reactive(new CmsArticlesForm()) as CmsArticlesForm;\r\nconst articleOptionsActive = ref(\"content\");\r\n\r\n\r\n// 标题\r\nconst title = computed({\r\n get() { return articleDv.data?.title || \"\"; },\r\n set(val) { articleDv.data.title = val; }\r\n});\r\n// 子标题\r\nconst subTitle = computed({\r\n get() { return articleDv.data?.subTitle || \"\"; },\r\n set(val) { articleDv.data.subTitle = val; }\r\n});\r\n// 获取默认简介\r\nconst getDefaultDescContent = () => {\r\n if (!descAutoCreate.value) {\r\n return \"\";\r\n }\r\n let val: any = \"\";\r\n const div = document.createElement(\"div\");\r\n div.innerHTML = content.value;\r\n val = div.textContent?.substring(0, 700);\r\n if (div.textContent!.length > 700) {\r\n val += \"...\";\r\n }\r\n return val;\r\n}\r\nconst descAutoCreate = ref(true)\r\n// 简介\r\nconst desc = computed({\r\n get() {\r\n return articleDv.data?.desc || getDefaultDescContent();\r\n },\r\n set(val) {\r\n articleDv.data.desc = val;\r\n }\r\n});\r\n// 发布时间\r\nconst releaseDate = computed({\r\n get() { return articleDv.data?.releaseDate || articleDv.data?.publishTime; },\r\n set(val) { articleDv.data.releaseDate = val; }\r\n});\r\n// 标签\r\nconst tags = ref([]);\r\n// computed({ \r\n// get() { return articleDv.data?.tags || [] }, \r\n// set(val) { articleDv.data.tags = val; } \r\n// });\r\n// 内容\r\nconst content = computed({\r\n get() { return articleDv.data?.content || \"\"; },\r\n set(val) { articleDv.data.content = val; }\r\n});\r\n\r\n// 图集\r\nconst atlas = computed({\r\n get() {\r\n return articleDv.data?.atlas\r\n },\r\n set(val) { articleDv.data.atlas = val; }\r\n});\r\n\r\n\r\nonMounted(() => {\r\n\r\n // 初始化数据加载\r\n if (route.query.id) {\r\n articleDv.editRecord(route.query.id);\r\n }\r\n else if (route.query.partId) {\r\n articleDv.addRecord({\r\n cmsPartId: route.query.partId\r\n });\r\n }\r\n else {\r\n articleDv.addRecord();\r\n }\r\n\r\n articleDv.init();\r\n\r\n})\r\n\r\n// 保存\r\nconst saveHandle = async () => {\r\n\r\n // 简介不存在的时候使用自动生成的\r\n if (!articleDv.data?.desc) {\r\n desc.value = getDefaultDescContent();\r\n }\r\n\r\n let result = await articleDv.submit();\r\n\r\n if (route.query.id) {\r\n articleDv.editRecord(route.query.id);\r\n }\r\n else if (route.query.partId) {\r\n articleDv.addRecord({\r\n cmsPartId: route.query.partId\r\n });\r\n }\r\n else {\r\n articleDv.addRecord();\r\n }\r\n}\r\nconst showExtentions = ref(false);\r\nconst extentionsRef = ref();\r\n// 隐藏扩展\r\nconst hideExtentionsHandle = () => {\r\n\r\n showExtentions.value = true;\r\n}\r\n//展示扩展\r\nconst showExtentionsHandle = () => {\r\n\r\n showExtentions.value = false;\r\n\r\n}\r\n\r\nconst EditorChangeHandle = (v: any) => {\r\n articleDv.data.content = v;\r\n}\r\n\r\n</script>\r\n"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { defineComponent, ref, reactive, onMounted, resolveComponent, resolveDirective, withDirectives, openBlock, createElementBlock, createVNode, withCtx, createElementVNode, createTextVNode, unref, createBlock, Fragment, createCommentVNode, resolveDynamicComponent } from "vue";
|
|
1
|
+
import { defineComponent, ref, reactive, onMounted, watch, resolveComponent, resolveDirective, withDirectives, openBlock, createElementBlock, createVNode, withCtx, createElementVNode, createTextVNode, unref, createBlock, Fragment, createCommentVNode, resolveDynamicComponent } from "vue";
|
|
2
2
|
import { MKPartTree } from "../../components/part-tree/index.js";
|
|
3
3
|
import _sfc_main$1 from "./components/article-list.vue.js";
|
|
4
4
|
import _sfc_main$2 from "./components/part-info.vue.js";
|
|
@@ -80,11 +80,11 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
80
80
|
};
|
|
81
81
|
const showPublish = ref(false);
|
|
82
82
|
const optionData = ref({
|
|
83
|
-
isPublishList:
|
|
84
|
-
isPublishCover:
|
|
85
|
-
isPublishContent:
|
|
86
|
-
isPublishAssets:
|
|
87
|
-
isCompulsion:
|
|
83
|
+
isPublishList: false,
|
|
84
|
+
isPublishCover: false,
|
|
85
|
+
isPublishContent: false,
|
|
86
|
+
isPublishAssets: false,
|
|
87
|
+
isCompulsion: true
|
|
88
88
|
});
|
|
89
89
|
const btnLoading = ref(false);
|
|
90
90
|
const activeTabName = ref("article-list");
|
|
@@ -95,9 +95,13 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
95
95
|
onMounted(() => {
|
|
96
96
|
partDataForm.init();
|
|
97
97
|
});
|
|
98
|
-
const selectPartHandle = (item) => {
|
|
98
|
+
const selectPartHandle = async (item) => {
|
|
99
99
|
if (curSelectPartItem.value != item) {
|
|
100
100
|
curSelectPartItem.value = item;
|
|
101
|
+
console.warn(`🚀 ~ file: index.vue:169 ~ curSelectPartItem.value:`, curSelectPartItem.value);
|
|
102
|
+
if (!curSelectPartItem.value.contentTemplate) {
|
|
103
|
+
activeTabName.value = "part";
|
|
104
|
+
}
|
|
101
105
|
partDataForm.editRecord(curSelectPartItem.value.id);
|
|
102
106
|
router.replace({ name: "cms/contents", query: { pid: curSelectPartItem.value.id } });
|
|
103
107
|
partExt.value = usePartExtension(curSelectPartItem.value.id);
|
|
@@ -151,6 +155,11 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
151
155
|
partForm.addRecord({ parentId: item.id });
|
|
152
156
|
}
|
|
153
157
|
};
|
|
158
|
+
watch(activeTabName, async () => {
|
|
159
|
+
if (activeTabName.value == "part") {
|
|
160
|
+
curSelectPartItem.value = (await partDataForm.editRecord(curSelectPartItem.value.id)).data.data;
|
|
161
|
+
}
|
|
162
|
+
});
|
|
154
163
|
partForm.submittedEvent.on(() => {
|
|
155
164
|
var _a;
|
|
156
165
|
(_a = partTreeRef.value.dataTree) == null ? void 0 : _a.load();
|
|
@@ -202,9 +211,8 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
202
211
|
}
|
|
203
212
|
};
|
|
204
213
|
const savePartHandle = async () => {
|
|
205
|
-
|
|
214
|
+
curSelectPartItem.value = partDataForm.data;
|
|
206
215
|
await partDataForm.submit();
|
|
207
|
-
await ((_a = partTreeRef.value.dataTree) == null ? void 0 : _a.load());
|
|
208
216
|
};
|
|
209
217
|
const EditorChangeHandle = (v) => {
|
|
210
218
|
partDataForm.data.content = v;
|
|
@@ -296,21 +304,23 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
296
304
|
}, {
|
|
297
305
|
default: withCtx(() => [
|
|
298
306
|
createElementVNode("div", _hoisted_5, [
|
|
299
|
-
partExt.value && activeTabName.value == "part-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
307
|
+
partExt.value && activeTabName.value == "part-ext" ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [
|
|
308
|
+
partExt.value.save ? (openBlock(), createBlock(_component_el_button, {
|
|
309
|
+
key: 0,
|
|
310
|
+
type: "primary",
|
|
311
|
+
text: "",
|
|
312
|
+
onClick: _cache[0] || (_cache[0] = ($event) => partExt.value.save())
|
|
313
|
+
}, {
|
|
314
|
+
default: withCtx(() => [
|
|
315
|
+
createVNode(_component_MKSvgIcon, {
|
|
316
|
+
iconClass: "save",
|
|
317
|
+
style: { "margin-right": "5px" }
|
|
318
|
+
}),
|
|
319
|
+
createTextVNode(" 保存 ")
|
|
320
|
+
]),
|
|
321
|
+
_: 1
|
|
322
|
+
})) : createCommentVNode("", true)
|
|
323
|
+
], 64)) : (openBlock(), createElementBlock(Fragment, { key: 1 }, [
|
|
314
324
|
activeTabName.value != "article-list" ? (openBlock(), createBlock(_component_el_button, {
|
|
315
325
|
key: 0,
|
|
316
326
|
type: "primary",
|
|
@@ -323,16 +333,17 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
323
333
|
iconClass: "save",
|
|
324
334
|
style: { "margin-right": "5px" }
|
|
325
335
|
}),
|
|
326
|
-
createTextVNode("
|
|
336
|
+
createTextVNode(" 保存 ")
|
|
327
337
|
]),
|
|
328
338
|
_: 1
|
|
329
339
|
}, 8, ["disabled"])) : createCommentVNode("", true)
|
|
330
340
|
], 64)),
|
|
331
341
|
createVNode(_component_el_dropdown, null, {
|
|
332
342
|
dropdown: withCtx(() => [
|
|
333
|
-
|
|
343
|
+
createVNode(_component_el_dropdown_menu, null, {
|
|
334
344
|
default: withCtx(() => [
|
|
335
|
-
|
|
345
|
+
curSelectPartItem.value.coverTemplate ? (openBlock(), createBlock(_component_el_dropdown_item, {
|
|
346
|
+
key: 0,
|
|
336
347
|
onClick: _cache[2] || (_cache[2] = ($event) => previewHandle())
|
|
337
348
|
}, {
|
|
338
349
|
default: withCtx(() => [
|
|
@@ -343,9 +354,9 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
343
354
|
createTextVNode(" 预览封面 ")
|
|
344
355
|
]),
|
|
345
356
|
_: 1
|
|
346
|
-
}),
|
|
357
|
+
})) : createCommentVNode("", true),
|
|
347
358
|
curSelectPartItem.value.listTemplate ? (openBlock(), createBlock(_component_el_dropdown_item, {
|
|
348
|
-
key:
|
|
359
|
+
key: 1,
|
|
349
360
|
onClick: _cache[3] || (_cache[3] = ($event) => previewHandle(true))
|
|
350
361
|
}, {
|
|
351
362
|
default: withCtx(() => [
|
|
@@ -371,7 +382,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
371
382
|
})
|
|
372
383
|
]),
|
|
373
384
|
_: 1
|
|
374
|
-
})
|
|
385
|
+
})
|
|
375
386
|
]),
|
|
376
387
|
default: withCtx(() => [
|
|
377
388
|
createElementVNode("span", _hoisted_6, [
|
|
@@ -389,7 +400,8 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
389
400
|
_: 1
|
|
390
401
|
})
|
|
391
402
|
]),
|
|
392
|
-
|
|
403
|
+
curSelectPartItem.value.contentTemplate ? (openBlock(), createBlock(_component_el_tab_pane, {
|
|
404
|
+
key: 0,
|
|
393
405
|
label: "文章列表",
|
|
394
406
|
name: "article-list"
|
|
395
407
|
}, {
|
|
@@ -400,9 +412,9 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
400
412
|
}, null, 8, ["part"])) : createCommentVNode("", true)
|
|
401
413
|
]),
|
|
402
414
|
_: 1
|
|
403
|
-
}),
|
|
415
|
+
})) : createCommentVNode("", true),
|
|
404
416
|
withDirectives((openBlock(), createBlock(_component_el_tab_pane, {
|
|
405
|
-
label: "
|
|
417
|
+
label: "栏目设置",
|
|
406
418
|
name: "part"
|
|
407
419
|
}, {
|
|
408
420
|
default: withCtx(() => [
|
|
@@ -418,7 +430,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
418
430
|
[_directive_loading, partDataForm.loading]
|
|
419
431
|
]),
|
|
420
432
|
curSelectPartItem.value.cmsPartTypeId != 1 ? withDirectives((openBlock(), createBlock(_component_el_tab_pane, {
|
|
421
|
-
key:
|
|
433
|
+
key: 1,
|
|
422
434
|
label: "页面内容",
|
|
423
435
|
name: "part-content",
|
|
424
436
|
style: { "background-color": "#f4f4f4" }
|
|
@@ -426,20 +438,28 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
426
438
|
default: withCtx(() => {
|
|
427
439
|
var _a;
|
|
428
440
|
return [
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
}, null, 8, ["content"])) : createCommentVNode("", true)
|
|
436
|
-
], 64))
|
|
441
|
+
activeTabName.value == "part-content" ? (openBlock(), createBlock(unref(MKDocEditor), {
|
|
442
|
+
key: 0,
|
|
443
|
+
content: (_a = partDataForm.data) == null ? void 0 : _a.content,
|
|
444
|
+
placeholder: "从这里开始写正文...",
|
|
445
|
+
onChange: EditorChangeHandle
|
|
446
|
+
}, null, 8, ["content"])) : createCommentVNode("", true)
|
|
437
447
|
];
|
|
438
448
|
}),
|
|
439
449
|
_: 1
|
|
440
450
|
})), [
|
|
441
451
|
[_directive_loading, partDataForm.loading]
|
|
442
|
-
]) : createCommentVNode("", true)
|
|
452
|
+
]) : createCommentVNode("", true),
|
|
453
|
+
partExt.value ? (openBlock(), createBlock(_component_el_tab_pane, {
|
|
454
|
+
key: 2,
|
|
455
|
+
label: "页面扩展设置",
|
|
456
|
+
name: "part-ext"
|
|
457
|
+
}, {
|
|
458
|
+
default: withCtx(() => [
|
|
459
|
+
(openBlock(), createBlock(resolveDynamicComponent(partExt.value.component)))
|
|
460
|
+
]),
|
|
461
|
+
_: 1
|
|
462
|
+
})) : createCommentVNode("", true)
|
|
443
463
|
]),
|
|
444
464
|
_: 1
|
|
445
465
|
}, 8, ["modelValue"])) : (openBlock(), createBlock(_component_el_empty, {
|
|
@@ -482,24 +502,27 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
482
502
|
createTextVNode(),
|
|
483
503
|
createVNode(unref(ElSwitch), {
|
|
484
504
|
modelValue: optionData.value.isPublishList,
|
|
485
|
-
"onUpdate:modelValue": _cache[6] || (_cache[6] = ($event) => optionData.value.isPublishList = $event)
|
|
486
|
-
|
|
505
|
+
"onUpdate:modelValue": _cache[6] || (_cache[6] = ($event) => optionData.value.isPublishList = $event),
|
|
506
|
+
disabled: !curSelectPartItem.value.listTemplate
|
|
507
|
+
}, null, 8, ["modelValue", "disabled"])
|
|
487
508
|
]),
|
|
488
509
|
createElementVNode("div", null, [
|
|
489
510
|
_hoisted_9,
|
|
490
511
|
createTextVNode(),
|
|
491
512
|
createVNode(unref(ElSwitch), {
|
|
492
513
|
modelValue: optionData.value.isPublishCover,
|
|
493
|
-
"onUpdate:modelValue": _cache[7] || (_cache[7] = ($event) => optionData.value.isPublishCover = $event)
|
|
494
|
-
|
|
514
|
+
"onUpdate:modelValue": _cache[7] || (_cache[7] = ($event) => optionData.value.isPublishCover = $event),
|
|
515
|
+
disabled: !curSelectPartItem.value.coverTemplate
|
|
516
|
+
}, null, 8, ["modelValue", "disabled"])
|
|
495
517
|
]),
|
|
496
518
|
createElementVNode("div", null, [
|
|
497
519
|
_hoisted_10,
|
|
498
520
|
createTextVNode(),
|
|
499
521
|
createVNode(unref(ElSwitch), {
|
|
500
522
|
modelValue: optionData.value.isPublishContent,
|
|
501
|
-
"onUpdate:modelValue": _cache[8] || (_cache[8] = ($event) => optionData.value.isPublishContent = $event)
|
|
502
|
-
|
|
523
|
+
"onUpdate:modelValue": _cache[8] || (_cache[8] = ($event) => optionData.value.isPublishContent = $event),
|
|
524
|
+
disabled: !curSelectPartItem.value.contentTemplate
|
|
525
|
+
}, null, 8, ["modelValue", "disabled"])
|
|
503
526
|
]),
|
|
504
527
|
createElementVNode("div", null, [
|
|
505
528
|
_hoisted_11,
|
|
@@ -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 @click=\"publishAllHandle\">\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\" :curSelectId=\"(route.query.pid as string)\" />\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-if=\" partExt && activeTabName == 'part-content'\">\r\n <el-button type=\"primary\" text @click=\"partExt.save()\">\r\n <MKSvgIcon iconClass=\"save\" style=\"margin-right: 5px\" />\r\n 保存\r\n </el-button>\r\n </template>\r\n <template v-else>\r\n <el-button type=\"primary\" text @click=\"savePartHandle()\" :disabled=\"!partDataForm?.isChanged\" v-if=\"activeTabName != 'article-list'\">\r\n <MKSvgIcon iconClass=\"save\" style=\"margin-right: 5px\" />\r\n 栏目保存\r\n </el-button>\r\n </template>\r\n <el-dropdown>\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 v-if=\"curSelectPartItem.coverTemplate\">\r\n <el-dropdown-item @click=\"previewHandle()\">\r\n <MKSvgIcon iconClass=\"View\" style=\"margin-left: 10px;\" />\r\n 预览封面\r\n </el-dropdown-item>\r\n <el-dropdown-item @click=\"previewHandle(true)\" 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 <!-- <el-button type=\"primary\" size=\"large\" text @click=\"showPublish = true\">\r\n 栏目发布\r\n <MKSvgIcon iconClass=\"Promotion\" style=\"margin-left: 10px\" />\r\n </el-button> -->\r\n \r\n </div>\r\n <el-tab-pane label=\"文章列表\" name=\"article-list\">\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 <template v-if=\"partExt\">\r\n <component :is=\"partExt.component\" />\r\n </template>\r\n <template v-else>\r\n <MKDocEditor v-if=\"activeTabName == 'part-content'\" :content=\"partDataForm.data?.content\"\r\n placeholder=\"从这里开始写正文...\" @change=\"EditorChangeHandle\" />\r\n </template>\r\n \r\n </el-tab-pane>\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\" /></div>\r\n <div><span>是否发布封面:</span> <el-switch v-model=\"optionData.isPublishCover\" /></div>\r\n <div><span>是否发布内容:</span> <el-switch v-model=\"optionData.isPublishContent\" /></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=\"btnLoading\">确定</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 { MKDocEditor } from \"../../../../components\";\r\nimport { reactive, ref,onMounted } from \"vue\";\r\nimport { Dialoger, FormColumn, Messager } from \"@maketribe/dm\";\r\nimport { CmsContentManPartForm,CmsPartForm, CmsPartTypesTable } from \"../../dataviews\";\r\nimport { useRoute,useRouter } from \"vue-router\";\r\nimport { MSAppClient } from \"../../../../core\";\r\nimport { usePartExtension ,type PartExtension } from \"../../composables/part-extensions\"\r\nimport { ElSwitch } from \"element-plus\";\r\n//路由\r\nconst route = useRoute();\r\nconst router = useRouter();\r\n//预览\r\nconst previewHandle = (isList = false) => {\r\n if (isList) {\r\n window.open(`/api/cms/content/preview/part/${curSelectPartItem.value.id}?pageNo=1`)\r\n } else {\r\n window.open(`/api/cms/content/preview/part/${curSelectPartItem.value.id}`)\r\n }\r\n}\r\n\r\n//发布栏目时的配置\r\nconst showPublish = ref(false)\r\n\r\n//发布配置项\r\nconst optionData = ref({\r\n isPublishList: true,\r\n isPublishCover: true,\r\n isPublishContent: true,\r\n isPublishAssets: true,\r\n isCompulsion: false\r\n});\r\n//发布弹窗的按钮\r\nconst btnLoading = 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 partExt = ref<PartExtension>();\r\n\r\n//栏目数据\r\nconst partDataForm = reactive(new CmsContentManPartForm()) as CmsContentManPartForm;\r\n\r\n// 挂载的时候初始化下\r\nonMounted(()=>{\r\n // 需要走一下初始化\r\n partDataForm.init();\r\n})\r\n\r\n// 选择栏目\r\nconst selectPartHandle = (item: any) => {\r\n if(curSelectPartItem.value != item){\r\n curSelectPartItem.value = item;\r\n partDataForm.editRecord(curSelectPartItem.value.id)\r\n router.replace({name:'cms/contents',query:{pid:curSelectPartItem.value.id} } as any)\r\n partExt.value = usePartExtension(curSelectPartItem.value.id);\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\nconst editPartHandle = (item: any) => {\r\n curSelectPartItem.value = item;\r\n activeTabName.value = \"part\";\r\n};\r\n\r\n//栏目表单\r\nconst partForm = reactive(\r\n new (class extends CmsPartForm {\r\n protected async initialize() {\r\n await super.initialize();\r\n this.setColumns([\r\n new FormColumn({\r\n name: \"cmsPartTypeId\",\r\n label: \"栏目类型\",\r\n componentInfo: \"MKFormDataSelect\",\r\n defaultValue: \"2\",\r\n componentProps: {\r\n dataTable: this.register(\r\n new CmsPartTypesTable()\r\n ) as CmsPartTypesTable,\r\n },\r\n required: true,\r\n }),\r\n new FormColumn({\r\n name: \"name\",\r\n label: \"栏目名称\",\r\n required: true,\r\n }),\r\n new FormColumn({\r\n name: \"title\",\r\n label: \"栏目标题\",\r\n required: true,\r\n }),\r\n ]);\r\n }\r\n })()\r\n);\r\n/**\r\n * 显示添加栏目表单\r\n */\r\nconst showPartFormHandle = async (item?: any) => {\r\n await Dialoger.dataFormDialog({\r\n dataForm: partForm as CmsContentManPartForm,\r\n });\r\n\r\n if (item.id) {\r\n partForm.addRecord({ parentId: item.id });\r\n }\r\n};\r\n\r\n//\r\npartForm.submittedEvent.on(() => {\r\n (partTreeRef.value! as any).dataTree?.load();\r\n});\r\n\r\nconst loading = ref(false)\r\n\r\n// 整站发布\r\nconst publishAllHandle = async () => {\r\n\r\n const httpRequest = MSAppClient.instance?.httpRequest!;\r\n\r\n try {\r\n const isConfirm = await Dialoger.confirm({ title: \"全量发布\", message: \"是否整站全量发布?\", type: \"warning\" })\r\n\r\n if (!isConfirm) {\r\n return;\r\n }\r\n loading.value = true\r\n\r\n const response = await httpRequest.post(\r\n `/cms/content/publish/all`\r\n );\r\n\r\n if (response.data.code !== 200) {\r\n Messager.error({ message: response.data.msg });\r\n return;\r\n }\r\n\r\n Messager.success({ message: \"发布成功\" });\r\n\r\n } finally {\r\n loading.value = false\r\n }\r\n}\r\n\r\nconst publishPartHandle = async () => {\r\n const httpRequest = MSAppClient.instance?.httpRequest!;\r\n try {\r\n btnLoading.value = true\r\n\r\n const response = await httpRequest.post(\r\n `/cms/content/publish/part`, {\r\n partIds: [\r\n curSelectPartItem.value.id\r\n ],\r\n ...optionData.value\r\n }\r\n );\r\n\r\n if (response.data.code !== 200) {\r\n Messager.error({ message: response.data.msg });\r\n return;\r\n }\r\n showPublish.value = false;\r\n Messager.success({ message: \"发布成功\" });\r\n\r\n } finally {\r\n btnLoading.value = false\r\n }\r\n}\r\n\r\n/**\r\n * 保存栏目信息\r\n */\r\nconst savePartHandle = async () => {\r\n await partDataForm.submit();\r\n await (partTreeRef.value! as any).dataTree?.load();\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 @click=\"publishAllHandle\">\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=\"(route.query.pid as string)\" />\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-if=\"partExt && activeTabName == 'part-ext'\">\r\n <el-button type=\"primary\" v-if=\"partExt.save\" text @click=\"partExt.save()\">\r\n <MKSvgIcon iconClass=\"save\" style=\"margin-right: 5px\" />\r\n 保存\r\n </el-button>\r\n </template>\r\n <template v-else>\r\n <el-button type=\"primary\" text @click=\"savePartHandle()\" :disabled=\"!partDataForm?.isChanged\"\r\n v-if=\"activeTabName != 'article-list'\">\r\n <MKSvgIcon iconClass=\"save\" style=\"margin-right: 5px\" />\r\n 保存\r\n </el-button>\r\n </template>\r\n <el-dropdown>\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=\"previewHandle()\" v-if=\"curSelectPartItem.coverTemplate\">\r\n <MKSvgIcon iconClass=\"View\" style=\"margin-left: 10px;\" />\r\n 预览封面\r\n </el-dropdown-item>\r\n <el-dropdown-item @click=\"previewHandle(true)\" 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'\" :content=\"partDataForm.data?.content\"\r\n placeholder=\"从这里开始写正文...\" @change=\"EditorChangeHandle\" />\r\n </el-tab-pane>\r\n <el-tab-pane v-if=\"partExt\" label=\"页面扩展设置\" name=\"part-ext\">\r\n <component :is=\"partExt.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=\"btnLoading\">确定</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 { MKDocEditor } from \"../../../../components\";\r\nimport { reactive, ref, onMounted, watch } from \"vue\";\r\nimport { Dialoger, FormColumn, Messager } from \"@maketribe/dm\";\r\nimport { CmsContentManPartForm, CmsPartForm, CmsPartTypesTable } from \"../../dataviews\";\r\nimport { useRoute, useRouter } from \"vue-router\";\r\nimport { MSAppClient } from \"../../../../core\";\r\nimport { usePartExtension, type PartExtension } from \"../../composables/part-extensions\"\r\nimport { ElSwitch } from \"element-plus\";\r\n//路由\r\nconst route = useRoute();\r\nconst router = useRouter();\r\n//预览\r\nconst previewHandle = (isList = false) => {\r\n if (isList) {\r\n window.open(`/api/cms/content/preview/part/${curSelectPartItem.value.id}?pageNo=1`)\r\n } else {\r\n window.open(`/api/cms/content/preview/part/${curSelectPartItem.value.id}`)\r\n }\r\n}\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\nconst btnLoading = 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 partExt = ref<PartExtension>();\r\n\r\n//栏目数据\r\nconst partDataForm = reactive(new CmsContentManPartForm()) as CmsContentManPartForm;\r\n\r\n// 挂载的时候初始化下\r\nonMounted(() => {\r\n // 需要走一下初始化\r\n partDataForm.init();\r\n})\r\n\r\n// 选择栏目\r\nconst selectPartHandle = async (item: any) => {\r\n if (curSelectPartItem.value != item) {\r\n curSelectPartItem.value = item;\r\n console.warn(`🚀 ~ file: index.vue:169 ~ curSelectPartItem.value:`, curSelectPartItem.value);\r\n\r\n if (!curSelectPartItem.value.contentTemplate) {\r\n activeTabName.value = \"part\";\r\n }\r\n\r\n partDataForm.editRecord(curSelectPartItem.value.id)\r\n\r\n router.replace({ name: 'cms/contents', query: { pid: curSelectPartItem.value.id } } as any)\r\n partExt.value = usePartExtension(curSelectPartItem.value.id);\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\nconst editPartHandle = (item: any) => {\r\n curSelectPartItem.value = item;\r\n activeTabName.value = \"part\";\r\n};\r\n\r\n//栏目表单\r\nconst partForm = reactive(\r\n new (class extends CmsPartForm {\r\n protected async initialize() {\r\n await super.initialize();\r\n this.setColumns([\r\n new FormColumn({\r\n name: \"cmsPartTypeId\",\r\n label: \"栏目类型\",\r\n componentInfo: \"MKFormDataSelect\",\r\n defaultValue: \"2\",\r\n componentProps: {\r\n dataTable: this.register(\r\n new CmsPartTypesTable()\r\n ) as CmsPartTypesTable,\r\n },\r\n required: true,\r\n }),\r\n new FormColumn({\r\n name: \"name\",\r\n label: \"栏目名称\",\r\n required: true,\r\n }),\r\n new FormColumn({\r\n name: \"title\",\r\n label: \"栏目标题\",\r\n required: true,\r\n }),\r\n ]);\r\n }\r\n })()\r\n);\r\n/**\r\n * 显示添加栏目表单\r\n */\r\nconst showPartFormHandle = async (item?: any) => {\r\n await Dialoger.dataFormDialog({\r\n dataForm: partForm as CmsContentManPartForm,\r\n });\r\n\r\n if (item.id) {\r\n partForm.addRecord({ parentId: item.id });\r\n }\r\n};\r\n\r\nwatch(activeTabName, async () => {\r\n if (activeTabName.value == \"part\") {\r\n curSelectPartItem.value = (await partDataForm.editRecord(curSelectPartItem.value.id)).data.data\r\n }\r\n})\r\n\r\n//监听表单完成事件\r\npartForm.submittedEvent.on(() => {\r\n (partTreeRef.value! as any).dataTree?.load();\r\n});\r\n\r\nconst loading = ref(false)\r\n\r\n// 整站发布\r\nconst publishAllHandle = async () => {\r\n\r\n const httpRequest = MSAppClient.instance?.httpRequest!;\r\n\r\n try {\r\n const isConfirm = await Dialoger.confirm({ title: \"全量发布\", message: \"是否整站全量发布?\", type: \"warning\" })\r\n\r\n if (!isConfirm) {\r\n return;\r\n }\r\n loading.value = true\r\n\r\n const response = await httpRequest.post(\r\n `/cms/content/publish/all`\r\n );\r\n\r\n if (response.data.code !== 200) {\r\n Messager.error({ message: response.data.msg });\r\n return;\r\n }\r\n\r\n Messager.success({ message: \"发布成功\" });\r\n\r\n } finally {\r\n loading.value = false\r\n }\r\n}\r\n\r\n//栏目发布\r\nconst publishPartHandle = async () => {\r\n const httpRequest = MSAppClient.instance?.httpRequest!;\r\n try {\r\n btnLoading.value = true\r\n\r\n const response = await httpRequest.post(\r\n `/cms/content/publish/part`, {\r\n partIds: [\r\n curSelectPartItem.value.id\r\n ],\r\n ...optionData.value\r\n }\r\n );\r\n\r\n if (response.data.code !== 200) {\r\n Messager.error({ message: response.data.msg });\r\n return;\r\n }\r\n showPublish.value = false;\r\n\r\n Messager.success({ message: \"发布成功\" });\r\n\r\n } finally {\r\n btnLoading.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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"}
|