|
@@ -23,12 +23,12 @@
|
|
|
<el-tag>{{ positionMap[row.position] || row.position }}</el-tag>
|
|
<el-tag>{{ positionMap[row.position] || row.position }}</el-tag>
|
|
|
</template>
|
|
</template>
|
|
|
</el-table-column>
|
|
</el-table-column>
|
|
|
- <el-table-column prop="link_type" label="链接类型" align="center" width="100">
|
|
|
|
|
|
|
+ <el-table-column prop="linkType" label="链接类型" align="center" width="100">
|
|
|
<template #default="{ row }">
|
|
<template #default="{ row }">
|
|
|
- {{ linkTypeMap[row.link_type] || row.link_type }}
|
|
|
|
|
|
|
+ {{ linkTypeMap[row.linkType] || row.linkType }}
|
|
|
</template>
|
|
</template>
|
|
|
</el-table-column>
|
|
</el-table-column>
|
|
|
- <el-table-column prop="link_url" label="链接地址" align="center" min-width="200" show-overflow-tooltip />
|
|
|
|
|
|
|
+ <el-table-column prop="linkUrl" label="链接地址" align="center" min-width="200" show-overflow-tooltip />
|
|
|
<el-table-column prop="sort" label="排序" align="center" width="70" />
|
|
<el-table-column prop="sort" label="排序" align="center" width="70" />
|
|
|
<el-table-column prop="status" label="状态" align="center" width="80">
|
|
<el-table-column prop="status" label="状态" align="center" width="80">
|
|
|
<template #default="{ row }">
|
|
<template #default="{ row }">
|
|
@@ -37,9 +37,9 @@
|
|
|
</el-tag>
|
|
</el-tag>
|
|
|
</template>
|
|
</template>
|
|
|
</el-table-column>
|
|
</el-table-column>
|
|
|
- <el-table-column prop="created_at" label="创建时间" align="center" min-width="160">
|
|
|
|
|
|
|
+ <el-table-column prop="createdAt" label="创建时间" align="center" min-width="160">
|
|
|
<template #default="{ row }">
|
|
<template #default="{ row }">
|
|
|
- <span v-if="row.created_at">{{ formatUnix(row.created_at) }}</span>
|
|
|
|
|
|
|
+ <span v-if="row.createdAt">{{ formatUnix(row.createdAt) }}</span>
|
|
|
</template>
|
|
</template>
|
|
|
</el-table-column>
|
|
</el-table-column>
|
|
|
<el-table-column fixed="right" label="操作" align="center" width="150">
|
|
<el-table-column fixed="right" label="操作" align="center" width="150">
|
|
@@ -70,15 +70,16 @@
|
|
|
<el-option label="我的页" value="mine" />
|
|
<el-option label="我的页" value="mine" />
|
|
|
</el-select>
|
|
</el-select>
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
- <el-form-item label="链接类型" prop="link_type">
|
|
|
|
|
- <el-select v-model="formData.link_type" placeholder="请选择链接类型" style="width: 100%">
|
|
|
|
|
- <el-option label="无链接" value="none" />
|
|
|
|
|
- <el-option label="内部页面" value="page" />
|
|
|
|
|
- <el-option label="外部链接" value="url" />
|
|
|
|
|
|
|
+ <el-form-item label="链接类型" prop="linkType">
|
|
|
|
|
+ <el-select v-model="formData.linkType" placeholder="请选择链接类型" style="width: 100%">
|
|
|
|
|
+ <el-option label="无链接" :value="0" />
|
|
|
|
|
+ <el-option label="内部页面" :value="1" />
|
|
|
|
|
+ <el-option label="外部链接" :value="2" />
|
|
|
|
|
+ <el-option label="任务详情" :value="3" />
|
|
|
</el-select>
|
|
</el-select>
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
- <el-form-item v-if="formData.link_type !== 'none'" label="链接地址" prop="link_url">
|
|
|
|
|
- <el-input v-model="formData.link_url" placeholder="请输入链接地址" />
|
|
|
|
|
|
|
+ <el-form-item v-if="formData.linkType !== 0" label="链接地址" prop="linkUrl">
|
|
|
|
|
+ <el-input v-model="formData.linkUrl" placeholder="请输入链接地址" />
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
<el-form-item label="排序" prop="sort">
|
|
<el-form-item label="排序" prop="sort">
|
|
|
<el-input-number v-model="formData.sort" :min="0" style="width: 100%" />
|
|
<el-input-number v-model="formData.sort" :min="0" style="width: 100%" />
|
|
@@ -109,7 +110,7 @@ const tableData = ref([]);
|
|
|
const pageable = reactive({ pageNum: 1, pageSize: 30, total: 0 });
|
|
const pageable = reactive({ pageNum: 1, pageSize: 30, total: 0 });
|
|
|
|
|
|
|
|
const positionMap = { home: "首页轮播", task: "任务页", mine: "我的页" };
|
|
const positionMap = { home: "首页轮播", task: "任务页", mine: "我的页" };
|
|
|
-const linkTypeMap = { none: "无链接", page: "内部页面", url: "外部链接" };
|
|
|
|
|
|
|
+const linkTypeMap = { 0: "无链接", 1: "内部页面", 2: "外部链接", 3: "任务详情" };
|
|
|
|
|
|
|
|
const dialogVisible = ref(false);
|
|
const dialogVisible = ref(false);
|
|
|
const isEdit = ref(false);
|
|
const isEdit = ref(false);
|
|
@@ -120,8 +121,8 @@ const formData = ref({
|
|
|
title: "",
|
|
title: "",
|
|
|
image: "",
|
|
image: "",
|
|
|
position: "home",
|
|
position: "home",
|
|
|
- link_type: "none",
|
|
|
|
|
- link_url: "",
|
|
|
|
|
|
|
+ linkType: 0,
|
|
|
|
|
+ linkUrl: "",
|
|
|
sort: 0,
|
|
sort: 0,
|
|
|
status: 1
|
|
status: 1
|
|
|
});
|
|
});
|
|
@@ -170,15 +171,25 @@ const handleCurrent = (data) => {
|
|
|
const openDialog = (row) => {
|
|
const openDialog = (row) => {
|
|
|
isEdit.value = !!row;
|
|
isEdit.value = !!row;
|
|
|
if (row) {
|
|
if (row) {
|
|
|
- formData.value = { ...row };
|
|
|
|
|
|
|
+ // 只复制表单需要的字段,避免发送多余字段给后端
|
|
|
|
|
+ formData.value = {
|
|
|
|
|
+ id: row.id,
|
|
|
|
|
+ title: row.title || "",
|
|
|
|
|
+ image: row.image || "",
|
|
|
|
|
+ position: row.position || "home",
|
|
|
|
|
+ linkType: row.linkType ?? 0,
|
|
|
|
|
+ linkUrl: row.linkUrl || "",
|
|
|
|
|
+ sort: row.sort ?? 0,
|
|
|
|
|
+ status: row.status ?? 1
|
|
|
|
|
+ };
|
|
|
} else {
|
|
} else {
|
|
|
formData.value = {
|
|
formData.value = {
|
|
|
id: null,
|
|
id: null,
|
|
|
title: "",
|
|
title: "",
|
|
|
image: "",
|
|
image: "",
|
|
|
position: "home",
|
|
position: "home",
|
|
|
- link_type: "none",
|
|
|
|
|
- link_url: "",
|
|
|
|
|
|
|
+ linkType: 0,
|
|
|
|
|
+ linkUrl: "",
|
|
|
sort: 0,
|
|
sort: 0,
|
|
|
status: 1
|
|
status: 1
|
|
|
};
|
|
};
|
|
@@ -196,7 +207,19 @@ const handleSubmit = async () => {
|
|
|
submitLoading.value = true;
|
|
submitLoading.value = true;
|
|
|
try {
|
|
try {
|
|
|
const api = isEdit.value ? updateBanner : createBanner;
|
|
const api = isEdit.value ? updateBanner : createBanner;
|
|
|
- const res = await api(formData.value);
|
|
|
|
|
|
|
+ // 后端期望 { id, data: {...} } 格式,字段名需要转为 snake_case
|
|
|
|
|
+ const { id } = formData.value;
|
|
|
|
|
+ const data = {
|
|
|
|
|
+ title: formData.value.title,
|
|
|
|
|
+ image: formData.value.image,
|
|
|
|
|
+ position: formData.value.position,
|
|
|
|
|
+ link_type: formData.value.linkType,
|
|
|
|
|
+ link_url: formData.value.linkUrl,
|
|
|
|
|
+ sort: formData.value.sort,
|
|
|
|
|
+ status: formData.value.status
|
|
|
|
|
+ };
|
|
|
|
|
+ const params = isEdit.value ? { id, data } : { data };
|
|
|
|
|
+ const res = await api(params);
|
|
|
if (res.code === 200) {
|
|
if (res.code === 200) {
|
|
|
ElNotification.success(isEdit.value ? "更新成功" : "创建成功");
|
|
ElNotification.success(isEdit.value ? "更新成功" : "创建成功");
|
|
|
dialogVisible.value = false;
|
|
dialogVisible.value = false;
|