feat: update content creation management
This commit is contained in:
@@ -1,4 +1,4 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="creation-page" :class="{ 'is-submitting': submitLoading }">
|
<div class="creation-page" :class="{ 'is-submitting': submitLoading }">
|
||||||
<div v-if="submitLoading" class="creation-loading-mask">
|
<div v-if="submitLoading" class="creation-loading-mask">
|
||||||
<div class="creation-loading-card">
|
<div class="creation-loading-card">
|
||||||
@@ -100,7 +100,7 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { computed, nextTick, onMounted, reactive, ref, watch } from 'vue';
|
import { computed, onMounted, reactive, ref, watch } from 'vue';
|
||||||
import { ElMessage, type FormInstance, type FormRules } from 'element-plus';
|
import { ElMessage, type FormInstance, type FormRules } from 'element-plus';
|
||||||
import {
|
import {
|
||||||
createCreation,
|
createCreation,
|
||||||
@@ -175,28 +175,32 @@ const rules: FormRules = {
|
|||||||
title: [{ required: true, message: '请输入标题', trigger: 'blur' }],
|
title: [{ required: true, message: '请输入标题', trigger: 'blur' }],
|
||||||
style: [{ required: true, message: '请选择内容风格', trigger: 'change' }],
|
style: [{ required: true, message: '请选择内容风格', trigger: 'change' }],
|
||||||
count: [{ required: true, message: '请输入生成条数', trigger: 'change' }],
|
count: [{ required: true, message: '请输入生成条数', trigger: 'change' }],
|
||||||
image_per_post: [{
|
image_per_post: [
|
||||||
required: true,
|
{
|
||||||
message: '请输入配图数量',
|
required: true,
|
||||||
trigger: 'change',
|
message: '请输入配图数量',
|
||||||
validator: (rule, value, callback) => {
|
trigger: 'change',
|
||||||
void rule;
|
validator: (rule, value, callback) => {
|
||||||
if (!showImageConfig.value) return callback();
|
void rule;
|
||||||
if (!value) return callback(new Error('请输入配图数量'));
|
if (!showImageConfig.value) return callback();
|
||||||
callback();
|
if (!value) return callback(new Error('请输入配图数量'));
|
||||||
|
callback();
|
||||||
|
},
|
||||||
},
|
},
|
||||||
}],
|
],
|
||||||
image_ratio: [{
|
image_ratio: [
|
||||||
required: true,
|
{
|
||||||
message: '请选择图片比例',
|
required: true,
|
||||||
trigger: 'change',
|
message: '请选择图片比例',
|
||||||
validator: (rule, value, callback) => {
|
trigger: 'change',
|
||||||
void rule;
|
validator: (rule, value, callback) => {
|
||||||
if (!showImageConfig.value) return callback();
|
void rule;
|
||||||
if (!value) return callback(new Error('请选择图片比例'));
|
if (!showImageConfig.value) return callback();
|
||||||
callback();
|
if (!value) return callback(new Error('请选择图片比例'));
|
||||||
|
callback();
|
||||||
|
},
|
||||||
},
|
},
|
||||||
}],
|
],
|
||||||
};
|
};
|
||||||
const joinUrl = (base: string, path: string) => `${base.replace(/\/$/, '')}${path.startsWith('/') ? path : `/${path}`}`;
|
const joinUrl = (base: string, path: string) => `${base.replace(/\/$/, '')}${path.startsWith('/') ? path : `/${path}`}`;
|
||||||
const buildAssetUrl = (path?: string) => {
|
const buildAssetUrl = (path?: string) => {
|
||||||
@@ -297,16 +301,6 @@ const downloadNode = async (data: TreeNode) => {
|
|||||||
ElMessage.error('下载失败');
|
ElMessage.error('下载失败');
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
const findFirstPreviewNode = (nodes: TreeNode[]): TreeNode | null => {
|
|
||||||
for (const node of nodes) {
|
|
||||||
if (node.nodeType === 'html' || node.nodeType === 'image') return node;
|
|
||||||
if (node.children?.length) {
|
|
||||||
const matched = findFirstPreviewNode(node.children);
|
|
||||||
if (matched) return matched;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
};
|
|
||||||
const getList = async () => {
|
const getList = async () => {
|
||||||
treeLoading.value = true;
|
treeLoading.value = true;
|
||||||
try {
|
try {
|
||||||
@@ -314,9 +308,6 @@ const getList = async () => {
|
|||||||
imgAddressPrefix.value = res.data?.imgAddressPrefix || '';
|
imgAddressPrefix.value = res.data?.imgAddressPrefix || '';
|
||||||
treeNodes.value = buildTreeNodes(res.data?.Tree || []);
|
treeNodes.value = buildTreeNodes(res.data?.Tree || []);
|
||||||
selectedPreview.value = null;
|
selectedPreview.value = null;
|
||||||
await nextTick();
|
|
||||||
const firstLeaf = findFirstPreviewNode(treeNodes.value);
|
|
||||||
if (firstLeaf) handleNodeClick(firstLeaf);
|
|
||||||
} catch {
|
} catch {
|
||||||
treeNodes.value = [];
|
treeNodes.value = [];
|
||||||
imgAddressPrefix.value = '';
|
imgAddressPrefix.value = '';
|
||||||
|
|||||||
Reference in New Issue
Block a user