批量更新
This commit is contained in:
@@ -1,59 +0,0 @@
|
||||
# 知识库数据库表创建说明
|
||||
|
||||
## 创建步骤
|
||||
|
||||
### 方法1:执行独立的 SQL 文件(推荐)
|
||||
```bash
|
||||
# 在 MySQL 中执行
|
||||
mysql -u root -p your_database < server/database/create_knowledge_tables.sql
|
||||
```
|
||||
|
||||
### 方法2:手动执行 SQL
|
||||
```sql
|
||||
-- 1. 进入 MySQL
|
||||
mysql -u root -p your_database
|
||||
|
||||
-- 2. 执行 SQL 脚本
|
||||
SOURCE server/database/create_knowledge_tables.sql;
|
||||
```
|
||||
|
||||
### 方法3:在 MySQL 客户端中复制粘贴
|
||||
直接打开 `server/database/create_knowledge_tables.sql` 文件,复制所有内容,在 MySQL 客户端中执行。
|
||||
|
||||
## 创建的表
|
||||
|
||||
1. **yz_knowledge_category** - 知识库分类表
|
||||
2. **yz_knowledge_tags** - 知识库标签表
|
||||
3. **yz_knowledge** - 知识库内容表
|
||||
|
||||
## 默认数据
|
||||
|
||||
- 5 个分类:技术文档、产品手册、用户指南、常见问题、API文档
|
||||
- 8 个标签:Vue、React、TypeScript、Element Plus、Vue Router、Pinia、Go、Python
|
||||
|
||||
## 验证创建
|
||||
|
||||
```sql
|
||||
-- 查看所有知识库相关表
|
||||
SHOW TABLES LIKE 'yz_knowledge%';
|
||||
|
||||
-- 查看知识库表结构
|
||||
DESC yz_knowledge;
|
||||
|
||||
-- 查看数据
|
||||
SELECT * FROM yz_knowledge;
|
||||
SELECT * FROM yz_knowledge_category;
|
||||
SELECT * FROM yz_knowledge_tags;
|
||||
```
|
||||
|
||||
## 如果表已存在
|
||||
|
||||
如果想重新创建表(会清空现有数据):
|
||||
```sql
|
||||
DROP TABLE IF EXISTS yz_knowledge_favorites;
|
||||
DROP TABLE IF EXISTS yz_knowledge;
|
||||
DROP TABLE IF EXISTS yz_knowledge_tags;
|
||||
DROP TABLE IF EXISTS yz_knowledge_category;
|
||||
```
|
||||
然后再执行创建脚本。
|
||||
|
||||
@@ -1,119 +0,0 @@
|
||||
# 租户表数据库创建说明
|
||||
|
||||
## 创建步骤
|
||||
|
||||
### 方法1:执行独立的 SQL 文件(推荐)
|
||||
```bash
|
||||
# 在 MySQL 中执行
|
||||
mysql -u root -p your_database < server/database/yz_tenants.sql
|
||||
```
|
||||
|
||||
### 方法2:手动执行 SQL
|
||||
```sql
|
||||
-- 1. 进入 MySQL
|
||||
mysql -u root -p your_database
|
||||
|
||||
-- 2. 执行 SQL 脚本
|
||||
SOURCE server/database/yz_tenants.sql;
|
||||
```
|
||||
|
||||
### 方法3:在 MySQL 客户端中复制粘贴
|
||||
直接打开 `server/database/yz_tenants.sql` 文件,复制所有内容,在 MySQL 客户端中执行。
|
||||
|
||||
## 创建的表
|
||||
|
||||
**yz_tenants** - 租户管理表
|
||||
|
||||
### 表结构说明
|
||||
|
||||
#### 基本信息字段
|
||||
- `id` - 租户ID(主键,自增)
|
||||
- `name` - 租户名称(必填)
|
||||
- `code` - 租户编码(必填,唯一)
|
||||
- `owner` - 负责人(必填)
|
||||
- `phone` - 联系电话(可选)
|
||||
- `email` - 邮箱地址(可选)
|
||||
|
||||
#### 状态字段
|
||||
- `status` - 状态:`enabled`(启用)或 `disabled`(禁用)
|
||||
- `audit_status` - 审核状态:
|
||||
- `pending` - 待审核
|
||||
- `approved` - 已通过
|
||||
- `rejected` - 已拒绝
|
||||
|
||||
#### 审核信息字段
|
||||
- `audit_comment` - 审核意见(可选)
|
||||
- `audit_by` - 审核人(可选)
|
||||
- `audit_time` - 审核时间(可选)
|
||||
|
||||
#### 其他字段
|
||||
- `remark` - 备注(可选)
|
||||
- `create_time` - 创建时间(自动)
|
||||
- `update_time` - 更新时间(自动)
|
||||
- `create_by` - 创建人(可选)
|
||||
- `update_by` - 更新人(可选)
|
||||
|
||||
### 索引说明
|
||||
- `uk_code` - 租户编码唯一索引
|
||||
- `idx_name` - 租户名称索引
|
||||
- `idx_owner` - 负责人索引
|
||||
- `idx_status` - 状态索引
|
||||
- `idx_audit_status` - 审核状态索引
|
||||
- `idx_create_time` - 创建时间索引
|
||||
|
||||
## 测试数据
|
||||
|
||||
SQL 文件中包含 10 条测试数据,涵盖了以下场景:
|
||||
1. **默认租户** - 已通过审核的系统默认租户
|
||||
2. **示例租户A** - 已通过审核的演示租户
|
||||
3. **示例租户B** - 待审核的租户
|
||||
4. **新申请租户C** - 待审核的新申请租户
|
||||
5. **已拒绝租户D** - 被拒绝的租户示例
|
||||
6. **企业租户E** - 已通过审核的企业级租户
|
||||
7. **测试租户F** - 已通过审核的测试环境租户
|
||||
8. **禁用租户G** - 已通过审核但被禁用的租户
|
||||
9. **小公司租户H** - 待审核的小型公司
|
||||
10. **个人开发者I** - 已通过审核的个人开发者账户
|
||||
|
||||
## 验证创建
|
||||
|
||||
```sql
|
||||
-- 查看租户表结构
|
||||
DESC yz_tenants;
|
||||
|
||||
-- 查看所有租户数据
|
||||
SELECT * FROM yz_tenants;
|
||||
|
||||
-- 查看特定状态的租户
|
||||
SELECT * FROM yz_tenants WHERE audit_status = 'pending';
|
||||
SELECT * FROM yz_tenants WHERE status = 'enabled';
|
||||
|
||||
-- 查看租户统计
|
||||
SELECT
|
||||
audit_status,
|
||||
COUNT(*) as count
|
||||
FROM yz_tenants
|
||||
GROUP BY audit_status;
|
||||
```
|
||||
|
||||
## 如果表已存在
|
||||
|
||||
如果想重新创建表(会清空现有数据):
|
||||
```sql
|
||||
DROP TABLE IF EXISTS yz_tenants;
|
||||
```
|
||||
然后再执行创建脚本。
|
||||
|
||||
## 与其他表的关系
|
||||
|
||||
租户表是系统中重要的基础表:
|
||||
- `yz_files` 表中的 `tenant_id` 字段引用租户编码(VARCHAR 类型,不是外键)
|
||||
- 未来可能会在 `yz_users` 表中添加 `tenant_id` 字段来关联租户
|
||||
|
||||
## 注意事项
|
||||
|
||||
1. **租户编码唯一性**:`code` 字段设置了唯一索引,确保每个租户编码都是唯一的
|
||||
2. **审核流程**:新创建的租户默认 `audit_status` 为 `pending`(待审核)
|
||||
3. **状态管理**:租户可以同时拥有 `status` 和 `audit_status` 两个状态字段,分别控制启用状态和审核状态
|
||||
4. **时间字段**:`create_time` 和 `update_time` 会自动管理,无需手动设置
|
||||
|
||||
@@ -1,97 +0,0 @@
|
||||
# 知识库分类联查更新说明
|
||||
|
||||
## 更新内容
|
||||
|
||||
本次更新将 `yz_knowledge` 表中的 `category_name` 字段移除,改为通过联查获取分类名称。
|
||||
|
||||
## 数据库变更
|
||||
|
||||
### 移除的字段
|
||||
|
||||
从 `yz_knowledge` 表中移除 `category_name` 字段:
|
||||
```sql
|
||||
ALTER TABLE `yz_knowledge` DROP COLUMN `category_name`;
|
||||
```
|
||||
|
||||
### 更新后的表结构
|
||||
|
||||
`yz_knowledge` 表现在只保留 `category_id` 字段,通过 `LEFT JOIN` 联查 `yz_knowledge_category` 表获取分类名称:
|
||||
|
||||
```sql
|
||||
SELECT k.*, c.category_name
|
||||
FROM yz_knowledge k
|
||||
LEFT JOIN yz_knowledge_category c ON k.category_id = c.category_id
|
||||
WHERE k.knowledge_id = ?
|
||||
```
|
||||
|
||||
## Go 代码变更
|
||||
|
||||
### server/models/knowledge.go
|
||||
|
||||
1. **Knowledge 结构体**:
|
||||
- `CategoryName` 字段的 ORM 标签改为 `orm:"-"`,表示不在数据库中存储
|
||||
- 从联查结果中获取分类名称
|
||||
|
||||
2. **GetKnowledgeById 方法**:
|
||||
- 使用 `LEFT JOIN` 联查获取分类名称
|
||||
- 使用原生 SQL 查询替代 ORM 查询
|
||||
|
||||
3. **GetAllKnowledge 方法**:
|
||||
- 使用原生 SQL 查询进行联查
|
||||
- 支持分页、状态筛选、分类筛选、关键词搜索
|
||||
|
||||
4. **UpdateKnowledge 方法**:
|
||||
- 移除了对 `category_name` 字段的更新操作
|
||||
- 只更新 `category_id` 字段
|
||||
|
||||
## 前端代码变更
|
||||
|
||||
### front/src/views/apps/knowledge/components/detail.vue
|
||||
|
||||
- 将 `categoryName` 映射到显示用的 `category` 字段
|
||||
- 添加 `parseTags` 方法解析标签数组
|
||||
|
||||
### front/src/views/apps/knowledge/components/edit.vue
|
||||
|
||||
- 接收数据时使用 `data.categoryName` 获取分类名称
|
||||
- 提交数据时不需要传递 `categoryName`,只传递 `category_id`
|
||||
|
||||
## 使用说明
|
||||
|
||||
### 创建知识记录
|
||||
|
||||
创建知识记录时,只传递 `category_id`:
|
||||
|
||||
```javascript
|
||||
{
|
||||
title: "标题",
|
||||
category_id: 1, // 只需传递分类ID
|
||||
// category_name 不需要传递,后台会从联查获取
|
||||
}
|
||||
```
|
||||
|
||||
### 获取知识详情
|
||||
|
||||
获取知识详情时,会自动联查获取 `category_name`:
|
||||
|
||||
```javascript
|
||||
{
|
||||
id: 1,
|
||||
title: "标题",
|
||||
category_id: 1,
|
||||
category_name: "技术文档", // 从联查获取
|
||||
}
|
||||
```
|
||||
|
||||
## 优势
|
||||
|
||||
1. **数据冗余消除**:分类名称不再冗余存储
|
||||
2. **数据一致性**:分类名称始终与分类表保持一致
|
||||
3. **易于维护**:修改分类名称时,所有知识的分类名称都会自动更新
|
||||
|
||||
## 注意事项
|
||||
|
||||
1. 确保 `yz_knowledge_category` 表存在并包含必要的分类数据
|
||||
2. 所有知识记录的 `category_id` 必须存在于 `yz_knowledge_category` 表中
|
||||
3. 如果某个知识没有分类(`category_id` 为 NULL),联查返回的 `category_name` 将为 NULL
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
-- 创建角色表
|
||||
CREATE TABLE IF NOT EXISTS yz_roles (
|
||||
role_id INT PRIMARY KEY AUTO_INCREMENT COMMENT '角色ID',
|
||||
tenant_id INT NOT NULL COMMENT '租户ID',
|
||||
role_code VARCHAR(50) NOT NULL COMMENT '角色代码',
|
||||
role_name VARCHAR(50) NOT NULL COMMENT '角色名称',
|
||||
description VARCHAR(500) DEFAULT NULL COMMENT '角色描述',
|
||||
status TINYINT DEFAULT 1 COMMENT '角色状态:0-禁用,1-启用',
|
||||
sort_order INT DEFAULT 0 COMMENT '排序序号',
|
||||
create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
delete_time DATETIME DEFAULT NULL COMMENT '删除时间',
|
||||
create_by VARCHAR(50) DEFAULT NULL COMMENT '创建人',
|
||||
update_by VARCHAR(50) DEFAULT NULL COMMENT '更新人',
|
||||
|
||||
-- 索引
|
||||
UNIQUE KEY uk_role_code (role_code),
|
||||
INDEX idx_status (status),
|
||||
INDEX idx_sort_order (sort_order),
|
||||
INDEX idx_create_time (create_time)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='角色表';
|
||||
|
||||
-- 插入默认角色数据
|
||||
INSERT INTO yz_roles (tenant_id, role_code, role_name, description, status, sort_order, create_by, delete_time) VALUES
|
||||
(0, 'system_admin', '系统管理员', '系统超级管理员,拥有所有权限', 1, 1, 'system'),
|
||||
(0, 'admin', '管理员', '普通管理员,拥有大部分管理权限', 1, 2, 'system'),
|
||||
(0, 'user', '普通用户', '普通用户,拥有基础使用权限', 1, 3, 'system')
|
||||
ON DUPLICATE KEY UPDATE
|
||||
tenant_id = VALUES(tenant_id),
|
||||
role_name = VALUES(role_name),
|
||||
description = VALUES(description),
|
||||
update_time = CURRENT_TIMESTAMP,
|
||||
delete_time = NULL;
|
||||
|
||||
Reference in New Issue
Block a user