From 1b8a0f2d0b6cc7b662b165b369c5e6e4ccfc9e6e Mon Sep 17 00:00:00 2001 From: liu <2302563948@qq.com> Date: Tue, 11 Aug 2026 10:46:08 +0800 Subject: [PATCH] =?UTF-8?q?=E8=8F=9C=E5=8D=95=E6=B7=BB=E5=8A=A0=E6=A0=87?= =?UTF-8?q?=E7=AD=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...26_08_09_000000_create_category_tables.php | 1 + .../Requests/SysCategoryItemFormRequest.php | 1 + .../Models/SysCategoryItemModel.php | 2 ++ web/domain/iCategoryItem.ts | 2 ++ web/locales/en_US/system/category.ts | 2 ++ web/locales/zh_CN/system/category.ts | 2 ++ web/pages/system/category/item.tsx | 27 ++++++++++++++++++- 7 files changed, 36 insertions(+), 1 deletion(-) diff --git a/database/migrations/2026_08_09_000000_create_category_tables.php b/database/migrations/2026_08_09_000000_create_category_tables.php index 3e7015c..04cf3d7 100644 --- a/database/migrations/2026_08_09_000000_create_category_tables.php +++ b/database/migrations/2026_08_09_000000_create_category_tables.php @@ -30,6 +30,7 @@ return new class extends Migration $table->increments('id'); $table->integer('category_id')->default(0)->comment('所属分类ID'); $table->string('title', 100)->comment('导航标题'); + $table->json('tag')->comment('导航标签'); $table->integer('image_id')->comment('导航图标信息'); $table->string('link', 500)->nullable()->default('')->comment('跳转链接'); $table->unsignedTinyInteger('status')->default(0)->comment('状态:0=启用,1=禁用'); diff --git a/modules/SystemTool/Http/Requests/SysCategoryItemFormRequest.php b/modules/SystemTool/Http/Requests/SysCategoryItemFormRequest.php index ac82cf6..cc54c4b 100644 --- a/modules/SystemTool/Http/Requests/SysCategoryItemFormRequest.php +++ b/modules/SystemTool/Http/Requests/SysCategoryItemFormRequest.php @@ -18,6 +18,7 @@ class SysCategoryItemFormRequest extends BaseFormRequest 'title' => 'required|string|max:100', 'image_id' => ['required', 'integer', new Exists(SysFileModel::class, 'id')], 'link' => 'nullable|string|max:500', + 'tag' => 'nullable|array', 'status' => 'nullable|integer|in:0,1', 'sort' => 'nullable|integer', ]; diff --git a/modules/SystemTool/Models/SysCategoryItemModel.php b/modules/SystemTool/Models/SysCategoryItemModel.php index 6a95aca..9d90a6f 100644 --- a/modules/SystemTool/Models/SysCategoryItemModel.php +++ b/modules/SystemTool/Models/SysCategoryItemModel.php @@ -18,6 +18,7 @@ class SysCategoryItemModel extends Model 'status' => 'int', 'sort' => 'int', 'image_id' => 'int', + 'tag' => 'array', ]; protected $fillable = [ @@ -25,6 +26,7 @@ class SysCategoryItemModel extends Model 'title', 'image_id', 'link', + 'tag', 'status', 'sort', ]; diff --git a/web/domain/iCategoryItem.ts b/web/domain/iCategoryItem.ts index 5b3a2f3..13668f4 100644 --- a/web/domain/iCategoryItem.ts +++ b/web/domain/iCategoryItem.ts @@ -11,6 +11,8 @@ export interface ICategoryItem { image: ISysFileInfo | string; /** 跳转链接 */ link?: string; + /** 导航标签(字符串数组) */ + tag?: string[]; /** 状态:0=启用,1=禁用 */ status: number; /** 排序 */ diff --git a/web/locales/en_US/system/category.ts b/web/locales/en_US/system/category.ts index 6a68606..8580bac 100644 --- a/web/locales/en_US/system/category.ts +++ b/web/locales/en_US/system/category.ts @@ -28,6 +28,8 @@ export default { "system.category.item.image.required": "Item icon is required", "system.category.item.link": "Redirect Link", "system.category.item.link.placeholder": "Enter redirect link", + "system.category.item.tag": "Tags", + "system.category.item.tag.placeholder": "Type and press Enter to add a tag", "system.category.item.status": "Status", "system.category.item.status.required": "Status is required", "system.category.item.status.normal": "Active", diff --git a/web/locales/zh_CN/system/category.ts b/web/locales/zh_CN/system/category.ts index 1d9566a..5d7d79e 100644 --- a/web/locales/zh_CN/system/category.ts +++ b/web/locales/zh_CN/system/category.ts @@ -28,6 +28,8 @@ export default { "system.category.item.image.required": "导航图标不能为空", "system.category.item.link": "跳转链接", "system.category.item.link.placeholder": "请输入跳转链接", + "system.category.item.tag": "标签", + "system.category.item.tag.placeholder": "输入后按回车添加标签", "system.category.item.status": "状态", "system.category.item.status.required": "状态不能为空", "system.category.item.status.normal": "启用", diff --git a/web/pages/system/category/item.tsx b/web/pages/system/category/item.tsx index 4865e54..a1efddd 100644 --- a/web/pages/system/category/item.tsx +++ b/web/pages/system/category/item.tsx @@ -1,5 +1,5 @@ import XinTable from '@/components/XinTable'; -import { Badge, Button, Image, Space, Typography } from 'antd'; +import { Badge, Button, Image, Space, Tag, Typography } from 'antd'; import { LeftOutlined } from '@ant-design/icons'; import type { ICategoryItem } from '@/domain/iCategoryItem'; import type { XinTableColumn } from '@/components/XinTable/typings'; @@ -98,6 +98,29 @@ export default function CategoryItemPage() { placeholder: t('system.category.item.link.placeholder'), }, }, + { + title: t('system.category.item.tag'), + dataIndex: 'tag', + valueType: 'select', + colProps: { span: 24 }, + hideInSearch: true, + fieldProps: { + mode: 'tags', + placeholder: t('system.category.item.tag.placeholder'), + }, + render: (value: string[] | string | null) => { + if (!value) return '-'; + const tags = Array.isArray(value) ? value : [value]; + if (tags.length === 0) return '-'; + return ( + + {tags.map((tag) => ( + {tag} + ))} + + ); + }, + }, { title: t('system.category.item.status'), dataIndex: 'status', @@ -188,12 +211,14 @@ export default function CategoryItemPage() { if (mode === 'create') { await Create('/system/category/item', { ...values, + tag: values.tag ?? [], category_id: currentCategory.id, }); window.$message?.success(t('system.category.item.createSuccess')); } else { await Update('/system/category/item/' + defaultValue?.id, { ...values, + tag: values.tag ?? [], category_id: currentCategory.id, }); window.$message?.success(t('system.category.item.updateSuccess'));