This commit is contained in:
zhangjianjun 2026-04-09 13:34:22 +08:00
parent 030e5736e0
commit a69aa0e768
4 changed files with 93 additions and 9 deletions

View File

@ -23,7 +23,7 @@
label-position="left" v-loading="detailLoading" style="border-top: 1px solid var(--el-border-color);"> label-position="left" v-loading="detailLoading" style="border-top: 1px solid var(--el-border-color);">
<div v-if="normalFields.length" class="in18-form-top"> <div v-if="normalFields.length" class="in18-form-top">
<el-form-item v-for="item in normalFields" :key="item.key" :prop="item.key"> <el-form-item v-for="item in normalFields.filter(i => !i.hide)" :key="item.key" :prop="item.key">
<template #label> <template #label>
{{ item.name }} {{ item.name }}
</template> </template>
@ -60,6 +60,9 @@
:uploadFile="uploadFun" hideUploadButton :uploadFile="uploadFun" hideUploadButton
:onUpdateValue="(val: any) => { formData[item.key] = val[0]?.url || '' }" /> :onUpdateValue="(val: any) => { formData[item.key] = val[0]?.url || '' }" />
</div> </div>
<div v-else-if="item.type === 'datetime'">
<el-date-picker v-model="formData[item.key]" type="datetime" value-format="YYYY-MM-DD HH:mm:ss" placeholder="请选择日期时间" />
</div>
</el-form-item> </el-form-item>
</div> </div>
@ -185,6 +188,7 @@ type FormItemType =
| 'upload:images,video' | 'upload:images,video'
| 'upload:image,video' | 'upload:image,video'
| 'upload:file' | 'upload:file'
| 'datetime'
type FormItem = { type FormItem = {
name: string name: string

View File

@ -46,7 +46,7 @@
element-loading-background="rgba(255,255,255,0.8)" element-loading-background="rgba(255,255,255,0.8)"
@tab-change="handleTabChange" @tab-change="handleTabChange"
> >
<el-tab-pane v-for="lang in langKeys" :key="lang" :label="lang" :name="lang"> <el-tab-pane v-for="lang in langKeys" :key="lang" :label="langMap[lang]" :name="lang">
<el-scrollbar max-height="60vh"> <el-scrollbar max-height="60vh">
<div class="jfd-content"> <div class="jfd-content">
<NodeEditor v-for="sKey in getSectionKeys(lang)" :key="sKey" :parent="formData[lang]" <NodeEditor v-for="sKey in getSectionKeys(lang)" :key="sKey" :parent="formData[lang]"
@ -93,6 +93,10 @@ const props = withDefaults(defineProps<{
fieldMap: () => ({}), fieldMap: () => ({}),
uploadFile: () => Promise.resolve({}), uploadFile: () => Promise.resolve({}),
}) })
const langMap: any = {
"ZH": "中文",
"EN": "英文"
}
const emit = defineEmits(['close', 'submit']) const emit = defineEmits(['close', 'submit'])

View File

@ -36,11 +36,14 @@ const data: TableData = {
params.translations.ZH.path = params.path params.translations.ZH.path = params.path
delete params.path delete params.path
params.translations.ZH.cover = params.cover.image[0] || '' let img = params.cover.image[0]
params.translations.EN.cover = params.cover.image[0] || '' if(typeof img === 'object') {
img = img.url
}
params.translations.ZH.cover = img || ''
params.translations.EN.cover = img || ''
delete params.cover delete params.cover
if(data.id) { if(data.id) {
await self.api?.updateData(params) await self.api?.updateData(params)
} else { } else {

View File

@ -31,6 +31,19 @@ const data: TableData = {
video: data.cover_resource.video.map((i: any) => (i.url || i)), video: data.cover_resource.video.map((i: any) => (i.url || i)),
} }
} }
if(params.publish_time) {
params.translations['ZH'].publish_time = params.publish_time
params.translations['EN'].publish_time = params.publish_time
delete params.publish_time
}
if(params.covers_show !== undefined) {
params.cover_show = params.covers_show
delete params.covers_show
}
params.weight = String(params.weight || 0);
params.pinned = String(params.pinned || 0);
if(data.id) { if(data.id) {
await self.api?.updateData(params) await self.api?.updateData(params)
} else { } else {
@ -71,6 +84,14 @@ const data: TableData = {
self.bean.locales = LOCALES; self.bean.locales = LOCALES;
self.bean.id = null; self.bean.id = null;
self.bean.form = [ self.bean.form = [
{
key: "weight",
hide: true,
},
{
key: "pinned",
hide: true,
},
{ {
name: '分类', name: '分类',
key: 'category_id', key: 'category_id',
@ -82,9 +103,17 @@ const data: TableData = {
must: true, must: true,
shouldTranslate: false, shouldTranslate: false,
}, },
{
name: '发布时间',
key: 'publish_time',
type: 'datetime',
value: '',
must: true,
shouldTranslate: false,
},
{ {
name: '封面类型', name: '封面类型',
key: 'cover_show', key: 'covers_show',
type: 'select', type: 'select',
items: [ items: [
{key: 'image', name: '图片'}, {key: 'image', name: '图片'},
@ -213,7 +242,7 @@ const data: TableData = {
{ {
key: 'covers', key: 'covers',
name: '封面', name: '封面',
width: '200px', width: '100px',
renderBodyCell(data) { renderBodyCell(data) {
let covers = data.row.covers let covers = data.row.covers
try { try {
@ -228,6 +257,9 @@ const data: TableData = {
key: 'covers_show', key: 'covers_show',
name: '封面类型', name: '封面类型',
width: '100px', width: '100px',
renderBodyCell(data) {
return <span>{data.row.covers_show ? (data.row.covers_show === 'image' ? '图片' : '视频') : ""}</span>
}
}, },
{ {
key: 'title', key: 'title',
@ -239,15 +271,56 @@ const data: TableData = {
name: '内容', name: '内容',
}, },
{ {
key: 'create_time', key: 'publish_time',
name: '发布时间', name: '发布时间',
width: '150px', width: '150px',
},
{
key: 'create_time',
name: '创建时间',
width: '150px',
sort: 'desc' sort: 'desc'
}, },
{ {
key: 'count', key: 'count',
name: '阅读次数', name: '阅读次数',
width: '150px' width: '100px'
},
{
key: 'weight',
name: '权重',
width: '100px',
sort: 'desc',
editor: {
type: 'input',
subFun(self, data, row) {
return self.api?.updateData({
id: String(data.id),
category_id: String(row.category_id),
weight: data.weight,
pinned: String(row.pinned),
cover_show: row.covers_show
})
}
}
},
{
key: 'pinned',
name: '置于首页(最多3个)',
width: '120px',
editor: {
type: 'switch',
openValue: 1,
closeValue: 0,
subFun(self, data, row) {
return self.api?.updateData({
id: String(data.id),
pinned: String(data.pinned),
weight: String(row.weight),
cover_show: row.covers_show
})
}
}
}, },
{ {
key: 'table_tools', key: 'table_tools',