路由更新

This commit is contained in:
2025-10-16 18:03:46 +08:00
parent 1199cbc176
commit 0811af6d03
94 changed files with 9511 additions and 667 deletions

View File

@@ -0,0 +1,82 @@
<template>
<div class="banner-management">
<div class="action-bar">
<el-button type="primary" @click="showCreateDialog">+ 新增Banner</el-button>
</div>
<el-table :data="banners" style="width: 100%">
<el-table-column label="预览" width="200">
<template #default="{ row }">
<img :src="row.image" class="banner-preview" />
</template>
</el-table-column>
<el-table-column prop="title" label="标题" min-width="150" />
<el-table-column prop="linkUrl" label="链接地址" min-width="200" />
<el-table-column prop="sort" label="排序" width="80" />
<el-table-column prop="status" label="状态" width="100">
<template #default="{ row }">
<el-switch
v-model="row.status"
@change="toggleStatus(row)"
/>
</template>
</el-table-column>
<el-table-column label="操作" width="180" fixed="right">
<template #default="{ row }">
<el-button size="small" @click="editBanner(row)">编辑</el-button>
<el-button size="small" type="danger" @click="deleteBanner(row)">删除</el-button>
</template>
</el-table-column>
</el-table>
</div>
</template>
<script setup lang="ts">
import { ref, onMounted } from 'vue';
import { ElButton, ElTable, ElTableColumn, ElSwitch, ElMessage } from 'element-plus';
const banners = ref<any[]>([]);
onMounted(() => {
loadBanners();
});
function loadBanners() {
// TODO: 加载Banner数据
}
function showCreateDialog() {
// TODO: 显示创建Banner对话框
}
function editBanner(row: any) {
// TODO: 编辑Banner
}
function deleteBanner(row: any) {
// TODO: 删除Banner
ElMessage.success('删除成功');
}
function toggleStatus(row: any) {
// TODO: 切换Banner状态
}
</script>
<style lang="scss" scoped>
.banner-management {
padding: 20px;
}
.action-bar {
margin-bottom: 20px;
}
.banner-preview {
width: 100%;
height: 80px;
object-fit: cover;
border-radius: 4px;
}
</style>

View File

@@ -0,0 +1,65 @@
<template>
<div class="column-management">
<div class="action-bar">
<el-button type="primary" @click="showCreateDialog">+ 新增栏目</el-button>
</div>
<el-table :data="columns" style="width: 100%" row-key="id" :tree-props="{children: 'children'}">
<el-table-column prop="name" label="栏目名称" min-width="200" />
<el-table-column prop="code" label="栏目编码" width="150" />
<el-table-column prop="sort" label="排序" width="80" />
<el-table-column prop="status" label="状态" width="100">
<template #default="{ row }">
<el-tag :type="row.status ? 'success' : 'info'">
{{ row.status ? '启用' : '禁用' }}
</el-tag>
</template>
</el-table-column>
<el-table-column label="操作" width="200" fixed="right">
<template #default="{ row }">
<el-button size="small" @click="editColumn(row)">编辑</el-button>
<el-button size="small" type="danger" @click="deleteColumn(row)">删除</el-button>
</template>
</el-table-column>
</el-table>
</div>
</template>
<script setup lang="ts">
import { ref, onMounted } from 'vue';
import { ElButton, ElTable, ElTableColumn, ElTag, ElMessage } from 'element-plus';
const columns = ref<any[]>([]);
onMounted(() => {
loadColumns();
});
function loadColumns() {
// TODO: 加载栏目数据
}
function showCreateDialog() {
// TODO: 显示创建栏目对话框
}
function editColumn(row: any) {
// TODO: 编辑栏目
}
function deleteColumn(row: any) {
// TODO: 删除栏目
ElMessage.success('删除成功');
}
</script>
<style lang="scss" scoped>
.column-management {
padding: 20px;
}
.action-bar {
margin-bottom: 20px;
}
</style>

View File

@@ -0,0 +1,41 @@
<template>
<div class="language-management">
<h1 class="page-title">语言管理</h1>
<el-tabs v-model="activeTab">
<el-tab-pane label="Banner管理" name="banner">
<BannerManagement />
</el-tab-pane>
<el-tab-pane label="资源栏目管理" name="column">
<ColumnManagement />
</el-tab-pane>
<el-tab-pane label="标签管理" name="tag">
<TagManagement />
</el-tab-pane>
</el-tabs>
</div>
</template>
<script setup lang="ts">
import { ref } from 'vue';
import { ElTabs, ElTabPane } from 'element-plus';
import BannerManagement from './components/BannerManagement.vue';
import ColumnManagement from './components/ColumnManagement.vue';
import TagManagement from './components/TagManagement.vue';
const activeTab = ref('banner');
</script>
<style lang="scss" scoped>
.language-management {
padding: 20px;
}
.page-title {
font-size: 28px;
font-weight: 600;
color: #141F38;
margin-bottom: 24px;
}
</style>

View File

@@ -0,0 +1,81 @@
<template>
<div class="tag-management">
<div class="action-bar">
<el-button type="primary" @click="showCreateDialog">+ 新增标签</el-button>
<el-input
v-model="searchKeyword"
placeholder="搜索标签..."
style="width: 300px"
clearable
/>
</div>
<el-table :data="tags" style="width: 100%">
<el-table-column prop="name" label="标签名称" min-width="150" />
<el-table-column prop="category" label="标签分类" width="120" />
<el-table-column prop="color" label="颜色" width="100">
<template #default="{ row }">
<div class="color-preview" :style="{ background: row.color }"></div>
</template>
</el-table-column>
<el-table-column prop="usageCount" label="使用次数" width="100" />
<el-table-column prop="createDate" label="创建时间" width="150" />
<el-table-column label="操作" width="180" fixed="right">
<template #default="{ row }">
<el-button size="small" @click="editTag(row)">编辑</el-button>
<el-button size="small" type="danger" @click="deleteTag(row)">删除</el-button>
</template>
</el-table-column>
</el-table>
</div>
</template>
<script setup lang="ts">
import { ref, onMounted } from 'vue';
import { ElButton, ElInput, ElTable, ElTableColumn, ElMessage } from 'element-plus';
const searchKeyword = ref('');
const tags = ref<any[]>([]);
onMounted(() => {
loadTags();
});
function loadTags() {
// TODO: 加载标签数据
}
function showCreateDialog() {
// TODO: 显示创建标签对话框
}
function editTag(row: any) {
// TODO: 编辑标签
}
function deleteTag(row: any) {
// TODO: 删除标签
ElMessage.success('删除成功');
}
</script>
<style lang="scss" scoped>
.tag-management {
padding: 20px;
}
.action-bar {
display: flex;
gap: 16px;
margin-bottom: 20px;
align-items: center;
}
.color-preview {
width: 40px;
height: 24px;
border-radius: 4px;
border: 1px solid #e0e0e0;
}
</style>