优化字典模块

This commit is contained in:
李志强 2025-11-17 15:33:57 +08:00
parent 4b953d8fa9
commit e98b30edd3
10 changed files with 1014 additions and 204 deletions

View File

@ -5,9 +5,11 @@
<i class="fa fa-bars"></i>
</el-button>
<el-breadcrumb separator="/" class="bread">
<el-breadcrumb-item :to="{ path: '/' }" style="position: relative !important; top: 1px !important;">首页</el-breadcrumb-item>
<el-breadcrumb-item :to="{ path: '/' }"
style="position: relative !important; top: 1px !important;">首页</el-breadcrumb-item>
<el-breadcrumb-item v-for="(item, index) in breadcrumbs" :key="index"
:to="(item.label === '首页' || index === breadcrumbs.length - 1) ? { path: item.path } : null" style="position: relative !important; top: 1px !important;">
:to="(item.label === '首页' || index === breadcrumbs.length - 1) ? { path: item.path } : null"
style="position: relative !important; top: 1px !important;">
{{ item.label }}
</el-breadcrumb-item>
</el-breadcrumb>
@ -21,6 +23,22 @@
<el-button circle :icon="themeIcon" @click="toggleTheme" class="theme-toggle-btn"
:title="currentTheme === 'dark' ? '切换到亮色模式' : '切换到暗色模式'" />
<!-- 消息中心 -->
<el-dropdown trigger="click">
<span class="el-dropdown-link" style="cursor: pointer;">
<el-button circle class="message-btn" title="消息中心">
<el-icon>
<Bell />
</el-icon>
</el-button>
</span>
<template #dropdown>
<el-dropdown-menu class="message-menu" style="width: 260px;">
<el-dropdown-item disabled>暂无新消息</el-dropdown-item>
</el-dropdown-menu>
</template>
</el-dropdown>
<el-dropdown trigger="click" @command="handleCommand">
<span class="el-dropdown-link" style="cursor: pointer;">
<img :src="getImageUrl('user')" class="user" />
@ -45,6 +63,9 @@
</el-dropdown>
</div>
</div>
<div class="message-center">
</div>
</template>
<script setup lang="ts">
@ -52,7 +73,7 @@ import { ref, computed, onMounted, onUnmounted } from "vue";
import { useRouter, useRoute } from "vue-router";
import { useAllDataStore, useMenuStore } from "@/stores";
import { useAuthStore } from "@/stores/auth";
import { User, SwitchButton, Sunny, Moon, Refresh } from '@element-plus/icons-vue';
import { User, SwitchButton, Sunny, Moon, Refresh, Bell } from '@element-plus/icons-vue';
import { ElMessage } from 'element-plus';
const router = useRouter();
@ -72,7 +93,6 @@ interface Breadcrumb {
const menuStore = useMenuStore();
const cacheLoading = ref(false);
// 使 store
const menuList = computed(() => menuStore.menus);
@ -360,7 +380,7 @@ onUnmounted(() => {
height: 40px;
border-radius: 50%;
// 使 Element Plus
border: 2px solid var(--el-border-color);
// border: 2px solid var(--el-border-color);
transition: border-color 0.3s ease;
&:hover {
@ -444,7 +464,11 @@ onUnmounted(() => {
}
}
:deep(.el-tabs__nav){
:deep(.el-tabs__nav) {
height: 36px !important;
}
:deep(.el-button) {
margin-left: 0 !important;
}
</style>

View File

@ -35,7 +35,7 @@
</div>
<el-table
:data="filteredDictTypes"
:data="dictTypes"
stripe
style="width: 100%"
v-loading="typeLoading"
@ -67,8 +67,8 @@
</el-tag>
</template>
</el-table-column>
<el-table-column prop="sort" label="排序" width="80" align="center" />
<el-table-column prop="remark" label="备注" min-width="200" show-overflow-tooltip />
<!-- <el-table-column prop="sort" label="排序" width="80" align="center" /> -->
<!-- <el-table-column prop="remark" label="备注" min-width="200" show-overflow-tooltip /> -->
<el-table-column prop="create_time" label="创建时间" width="180" align="center">
<template #default="{ row }">
{{ formatDate(row.create_time) }}
@ -91,6 +91,16 @@
</template>
</el-table-column>
</el-table>
<div class="pagination-bar">
<el-pagination
background
:current-page="currentPage"
:page-size="pageSize"
:total="totalCount"
@current-change="handlePageChange"
layout="total, prev, pager, next"
/>
</div>
</div>
</div>
@ -150,6 +160,11 @@ const typeSearchKeyword = ref('')
const typeDialogVisible = ref(false)
const currentDictType = ref<any>(null)
//
const currentPage = ref(1)
const pageSize = ref(10)
const totalCount = ref(0)
const selectedDictTypeId = ref<number | null>(null)
const selectedDictType = computed(() => {
if (!selectedDictTypeId.value) {
@ -158,19 +173,6 @@ const selectedDictType = computed(() => {
return dictTypes.value.find((type) => type.id === selectedDictTypeId.value) || null
})
//
const filteredDictTypes = computed(() => {
if (!typeSearchKeyword.value) {
return dictTypes.value
}
const keyword = typeSearchKeyword.value.toLowerCase()
return dictTypes.value.filter(
(type) =>
(type.dict_name && type.dict_name.toLowerCase().includes(keyword)) ||
(type.dict_code && type.dict_code.toLowerCase().includes(keyword))
)
})
//
function formatDate(dateStr: string | null | undefined): string {
if (!dateStr) return ''
@ -192,31 +194,42 @@ function formatDate(dateStr: string | null | undefined): string {
async function fetchDictTypes() {
typeLoading.value = true
try {
const res = await getDictTypes()
const res = await getDictTypes({
page: currentPage.value,
pageSize: pageSize.value,
keyword: typeSearchKeyword.value
})
if (res.success === true && res.data) {
dictTypes.value = Array.isArray(res.data) ? res.data : []
dictTypes.value = Array.isArray(res.data.list) ? res.data.list : (Array.isArray(res.data) ? res.data : [])
totalCount.value = res.data.total || res.data.length || 0
} else if (Array.isArray(res)) {
dictTypes.value = res
totalCount.value = res.length
} else {
dictTypes.value = []
totalCount.value = 0
ElMessage.error(res.message || '获取字典类型失败')
}
} catch (error: any) {
ElMessage.error(error.message || '获取字典类型失败')
dictTypes.value = []
totalCount.value = 0
} finally {
typeLoading.value = false
}
}
//
//
function handleTypeSearch() {
// computed
currentPage.value = 1
fetchDictTypes()
}
//
//
function handlePageChange(page: number) {
currentPage.value = page
fetchDictTypes()
}
//
function handleAddType() {
@ -334,6 +347,12 @@ onMounted(() => {
}
}
.pagination-bar {
display: flex;
justify-content: flex-end;
margin-top: 20px;
}
.color-display {
display: flex;
align-items: center;

View File

@ -45,7 +45,11 @@ func (c *DictController) GetDictTypes() {
status = &statusVal
}
dictTypes, err := services.GetDictTypes(tenantId, userId, parentId, status)
// 分页参数
page, _ := c.GetInt("page", 1)
pageSize, _ := c.GetInt("pageSize", 20)
dictTypes, total, err := services.GetDictTypes(tenantId, userId, parentId, status, page, pageSize)
if err != nil {
c.Data["json"] = map[string]interface{}{
"success": false,
@ -57,7 +61,12 @@ func (c *DictController) GetDictTypes() {
c.Data["json"] = map[string]interface{}{
"success": true,
"data": dictTypes,
"data": map[string]interface{}{
"list": dictTypes,
"total": total,
"page": page,
"pageSize": pageSize,
},
}
c.ServeJSON()
}

View File

@ -0,0 +1,914 @@
-- MySQL dump 10.13 Distrib 8.0.41, for Win64 (x86_64)
--
-- Host: 212.64.112.158 Database: gotest
-- ------------------------------------------------------
-- Server version 5.7.44-log
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!50503 SET NAMES utf8mb4 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Current Database: `gotest`
--
CREATE DATABASE /*!32312 IF NOT EXISTS*/ `gotest` /*!40100 DEFAULT CHARACTER SET utf8mb4 */;
USE `gotest`;
--
-- Table structure for table `sys_access_log`
--
DROP TABLE IF EXISTS `sys_access_log`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `sys_access_log` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`tenant_id` int(11) NOT NULL DEFAULT '0',
`user_id` int(11) NOT NULL DEFAULT '0',
`username` varchar(255) NOT NULL DEFAULT '',
`module` varchar(255) NOT NULL DEFAULT '',
`resource_type` varchar(255) NOT NULL DEFAULT '',
`resource_id` int(11) DEFAULT NULL,
`request_url` varchar(255) DEFAULT NULL,
`query_string` longtext,
`ip_address` varchar(255) DEFAULT NULL,
`user_agent` varchar(255) DEFAULT NULL,
`request_method` varchar(255) DEFAULT NULL,
`duration` int(11) DEFAULT NULL,
`create_time` datetime NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `sys_dict_item`
--
DROP TABLE IF EXISTS `sys_dict_item`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `sys_dict_item` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`dict_type_id` bigint(20) NOT NULL COMMENT '字典类型ID',
`dict_label` varchar(100) NOT NULL COMMENT '字典标签(显示值,如 正常)',
`dict_value` varchar(100) NOT NULL COMMENT '字典值(存储值,如 1',
`parent_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '父级字典项ID0表示一级项',
`status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '状态0-禁用1-启用)',
`sort` int(11) NOT NULL DEFAULT '0' COMMENT '排序号',
`color` varchar(20) DEFAULT NULL COMMENT '颜色标记(如 #1890ff',
`icon` varchar(50) DEFAULT NULL COMMENT '图标(如 el-icon-success',
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
`create_by` varchar(50) DEFAULT NULL COMMENT '创建人',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_by` varchar(50) DEFAULT NULL COMMENT '更新人',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`is_deleted` tinyint(1) NOT NULL DEFAULT '0' COMMENT '逻辑删除0-未删1-已删)',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_dict_type_value` (`dict_type_id`,`dict_value`,`is_deleted`),
KEY `idx_dict_type_parent_status` (`dict_type_id`,`parent_id`,`status`,`is_deleted`),
KEY `idx_parent_id` (`parent_id`,`status`,`is_deleted`)
) ENGINE=InnoDB AUTO_INCREMENT=48 DEFAULT CHARSET=utf8mb4 COMMENT='字典项表';
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `sys_dict_type`
--
DROP TABLE IF EXISTS `sys_dict_type`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `sys_dict_type` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`tenant_id` int(11) NOT NULL DEFAULT '0' COMMENT '租户ID0表示平台字典>0表示租户字典',
`dict_code` varchar(50) NOT NULL COMMENT '字典编码(唯一,如 USER_STATUS',
`dict_name` varchar(100) NOT NULL COMMENT '字典名称(如 用户状态)',
`parent_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '父级字典ID0表示一级字典',
`is_global` tinyint(4) DEFAULT '0' COMMENT '是否全局0-否 1-是',
`status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '状态0-禁用1-启用)',
`sort` int(11) NOT NULL DEFAULT '0' COMMENT '排序号',
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
`create_by` varchar(50) DEFAULT NULL COMMENT '创建人',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_by` varchar(50) DEFAULT NULL COMMENT '更新人',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`is_deleted` tinyint(1) NOT NULL DEFAULT '0' COMMENT '逻辑删除0-未删1-已删)',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_dict_code_tenant` (`dict_code`,`is_deleted`),
KEY `idx_parent_id` (`parent_id`,`is_deleted`),
KEY `idx_status` (`status`,`is_deleted`),
KEY `idx_tenant_id` (`tenant_id`,`is_deleted`)
) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=utf8mb4 COMMENT='字典类型表';
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `sys_feedback`
--
DROP TABLE IF EXISTS `sys_feedback`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `sys_feedback` (
`id` varchar(36) NOT NULL COMMENT 'ID',
`tenant_id` varchar(64) NOT NULL COMMENT '租户ID',
`feedback_name` varchar(50) DEFAULT '' COMMENT '反馈人姓名',
`module` varchar(30) NOT NULL COMMENT '反馈对应模块',
`feedback_type` varchar(20) NOT NULL COMMENT '反馈类型',
`content` text NOT NULL COMMENT '反馈详细内容',
`attachment_url` varchar(255) DEFAULT '' COMMENT '附件URL',
`handle_status` varchar(20) NOT NULL DEFAULT '0' COMMENT '处理状态0-待处理/1-处理中/2-已解决/3-已驳回/4-无需处理)',
`handle_remark` text COMMENT '处理备注移除默认值TEXT类型不支持',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`delete_time` datetime DEFAULT NULL COMMENT '删除时间',
PRIMARY KEY (`id`),
KEY `idx_tenant_id` (`tenant_id`) COMMENT '租户ID索引优化租户级查询',
KEY `idx_module` (`module`) COMMENT '模块索引,优化模块级反馈统计',
KEY `idx_handle_status` (`handle_status`) COMMENT '处理状态索引,优化待处理反馈查询',
KEY `idx_create_time` (`create_time`) COMMENT '创建时间索引,优化时间范围查询'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='通用反馈表(支持租户隔离、软删除)';
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `sys_operation_log`
--
DROP TABLE IF EXISTS `sys_operation_log`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `sys_operation_log` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '日志ID',
`tenant_id` int(11) NOT NULL DEFAULT '0' COMMENT '租户ID0表示平台操作>0表示租户操作',
`user_id` int(11) NOT NULL COMMENT '操作用户ID',
`username` varchar(50) NOT NULL COMMENT '操作用户名',
`module` varchar(100) NOT NULL COMMENT '操作模块user/tenant/dict/role等',
`resource_type` varchar(50) NOT NULL COMMENT '资源类型如User/Tenant/Dict等',
`resource_id` int(11) DEFAULT NULL COMMENT '资源ID如被操作的用户ID、租户ID等',
`operation` varchar(20) NOT NULL COMMENT '操作类型CREATE/UPDATE/DELETE/LOGIN/LOGOUT/VIEW等',
`description` varchar(500) DEFAULT NULL COMMENT '操作描述',
`old_value` longtext COMMENT '修改前的值JSON格式用于UPDATE操作',
`new_value` longtext COMMENT '修改后的值JSON格式用于UPDATE操作',
`ip_address` varchar(50) DEFAULT NULL COMMENT 'IP地址',
`user_agent` varchar(500) DEFAULT NULL COMMENT '用户代理信息',
`request_method` varchar(10) DEFAULT NULL COMMENT '请求方法GET/POST/PUT/DELETE等',
`request_url` varchar(500) DEFAULT NULL COMMENT '请求URL',
`status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '1-成功0-失败',
`error_message` text COMMENT '错误信息',
`duration` int(11) DEFAULT NULL COMMENT '执行时长(毫秒)',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '操作时间',
PRIMARY KEY (`id`),
KEY `idx_tenant_id` (`tenant_id`),
KEY `idx_user_id` (`user_id`),
KEY `idx_module` (`module`),
KEY `idx_resource_type` (`resource_type`),
KEY `idx_resource_id` (`resource_id`),
KEY `idx_operation` (`operation`),
KEY `idx_create_time` (`create_time`),
KEY `idx_tenant_user_time` (`tenant_id`,`user_id`,`create_time`),
KEY `idx_tenant_module_time` (`tenant_id`,`module`,`create_time`)
) ENGINE=InnoDB AUTO_INCREMENT=86 DEFAULT CHARSET=utf8mb4 COMMENT='系统操作日志表';
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `yz_exam`
--
DROP TABLE IF EXISTS `yz_exam`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `yz_exam` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '考试唯一标识',
`tenant_id` int(11) NOT NULL COMMENT '租户ID多租户隔离',
`category_id` int(11) NOT NULL COMMENT '关联考试分类表ID',
`exam_name` varchar(100) NOT NULL COMMENT '考试名称',
`exam_desc` varchar(500) DEFAULT '' COMMENT '考试描述',
`exam_time` datetime NOT NULL COMMENT '考试开始时间',
`exam_duration` int(11) NOT NULL COMMENT '考试时长(分钟)',
`status` tinyint(1) NOT NULL DEFAULT '0' COMMENT '考试状态0-未开始1-进行中2-已结束3-已取消)',
`create_by` int(11) NOT NULL COMMENT '创建人ID',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
KEY `idx_tenant_category_status` (`tenant_id`,`category_id`,`status`),
KEY `idx_tenant_create_by` (`tenant_id`,`create_by`),
KEY `fk_yz_exam_category` (`category_id`),
CONSTRAINT `fk_yz_exam_category` FOREIGN KEY (`category_id`) REFERENCES `yz_exam_category` (`id`) ON DELETE CASCADE,
CONSTRAINT `fk_yz_exam_tenant` FOREIGN KEY (`tenant_id`) REFERENCES `yz_tenants` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='考试主表(关联分类+租户隔离)';
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `yz_exam_category`
--
DROP TABLE IF EXISTS `yz_exam_category`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `yz_exam_category` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '分类唯一标识',
`tenant_id` int(11) NOT NULL COMMENT '租户ID多租户隔离',
`category_name` varchar(50) NOT NULL COMMENT '分类名称',
`parent_id` int(11) DEFAULT '0' COMMENT '父分类ID0表示一级分类',
`sort_order` tinyint(4) DEFAULT '0' COMMENT '排序序号',
`status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '状态1-启用0-禁用)',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
KEY `idx_tenant_parent` (`tenant_id`,`parent_id`),
KEY `idx_tenant_status` (`tenant_id`,`status`),
KEY `idx_tenant_id` (`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='考试分类表(含多租户隔离)';
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `yz_exam_users`
--
DROP TABLE IF EXISTS `yz_exam_users`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `yz_exam_users` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '用户唯一标识',
`tenant_id` int(11) NOT NULL COMMENT '租户ID多租户隔离',
`username` varchar(50) NOT NULL COMMENT '用户名',
`real_name` varchar(50) DEFAULT '' COMMENT '真实姓名',
`mobile` varchar(20) DEFAULT '' COMMENT '手机号',
`email` varchar(100) DEFAULT '' COMMENT '邮箱',
`user_type` tinyint(1) NOT NULL DEFAULT '1' COMMENT '用户类型1-学生2-教师3-管理员)',
`status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '账号状态1-正常0-禁用2-冻结)',
`password` varchar(100) NOT NULL COMMENT '加密后密码salt+明文密码哈希)',
`salt` varchar(50) NOT NULL COMMENT '密码盐值',
`last_login_time` datetime DEFAULT NULL COMMENT '最后登录时间',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_tenant_username` (`tenant_id`,`username`),
UNIQUE KEY `uk_salt` (`salt`) USING BTREE,
UNIQUE KEY `uk_tenant_mobile` (`tenant_id`,`mobile`) USING BTREE,
KEY `idx_tenant_username` (`tenant_id`,`username`),
KEY `idx_tenant_type_status` (`tenant_id`,`user_type`,`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='考试用户表';
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `yz_files`
--
DROP TABLE IF EXISTS `yz_files`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `yz_files` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '文件ID',
`tenant_id` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '租户ID',
`user_id` int(11) NOT NULL DEFAULT '0' COMMENT '用户ID',
`file_name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '文件名称',
`original_name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '原始文件名',
`file_path` varchar(500) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '文件存储路径',
`file_url` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '文件访问URL',
`file_size` bigint(20) NOT NULL DEFAULT '0' COMMENT '文件大小(字节)',
`file_type` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '文件类型',
`file_ext` varchar(20) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '文件扩展名',
`md5` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '文件MD5值用于去重',
`category` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '文件分类',
`sub_category` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '子分类',
`status` tinyint(4) DEFAULT '1' COMMENT '状态(1:正常, 0:删除)',
`is_public` tinyint(4) DEFAULT '0' COMMENT '是否公开(1:是, 0:否)',
`upload_by` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '上传人',
`upload_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '上传时间',
`delete_time` datetime DEFAULT NULL COMMENT '删除时间',
PRIMARY KEY (`id`),
KEY `idx_tenant` (`tenant_id`),
KEY `idx_user` (`user_id`),
KEY `idx_category` (`category`),
KEY `idx_upload_time` (`upload_time`),
KEY `idx_status` (`status`),
KEY `idx_md5` (`md5`),
KEY `idx_original_name` (`original_name`)
) ENGINE=InnoDB AUTO_INCREMENT=72 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='文件表';
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `yz_knowledge`
--
DROP TABLE IF EXISTS `yz_knowledge`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `yz_knowledge` (
`knowledge_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '知识ID',
`tenant_id` int(11) DEFAULT NULL COMMENT '租户ID',
`title` varchar(200) NOT NULL COMMENT '标题',
`category_id` int(11) DEFAULT NULL COMMENT '分类ID',
`tags` text COMMENT '标签JSON数组存储标签名称',
`author` varchar(50) NOT NULL COMMENT '作者',
`content` longtext COMMENT '正文内容(富文本)',
`summary` varchar(500) DEFAULT NULL COMMENT '摘要',
`cover_url` varchar(500) DEFAULT NULL COMMENT '封面图片URL',
`status` tinyint(4) DEFAULT '0' COMMENT '状态0-草稿1-已发布2-已归档',
`share` int(10) DEFAULT '0' COMMENT '是否共享 0-不共享 1-共享',
`view_count` int(11) DEFAULT '0' COMMENT '查看次数',
`like_count` int(11) DEFAULT '0' COMMENT '点赞数',
`is_recommend` tinyint(4) DEFAULT '0' COMMENT '是否推荐0-否1-是',
`is_top` tinyint(4) DEFAULT '0' COMMENT '是否置顶0-否1-是',
`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 '更新人',
`delete_by` varchar(255) DEFAULT NULL COMMENT '删除人',
PRIMARY KEY (`knowledge_id`),
KEY `idx_category_id` (`category_id`),
KEY `idx_author` (`author`),
KEY `idx_status` (`status`),
KEY `idx_create_time` (`create_time`),
KEY `idx_view_count` (`view_count`),
KEY `idx_is_recommend` (`is_recommend`),
KEY `idx_is_top` (`is_top`)
) ENGINE=InnoDB AUTO_INCREMENT=16 DEFAULT CHARSET=utf8mb4 COMMENT='知识库内容表';
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `yz_knowledge_category`
--
DROP TABLE IF EXISTS `yz_knowledge_category`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `yz_knowledge_category` (
`category_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '分类ID',
`tenant_id` int(11) DEFAULT NULL COMMENT '租户ID',
`category_name` varchar(100) NOT NULL COMMENT '分类名称',
`category_desc` varchar(500) DEFAULT NULL COMMENT '分类描述',
`parent_id` int(11) DEFAULT '0' COMMENT '父分类ID0表示顶级分类',
`sort_order` int(11) DEFAULT '0' COMMENT '排序序号',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`category_id`),
KEY `idx_parent_id` (`parent_id`),
KEY `idx_sort_order` (`sort_order`)
) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8mb4 COMMENT='知识库分类表';
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `yz_knowledge_favorites`
--
DROP TABLE IF EXISTS `yz_knowledge_favorites`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `yz_knowledge_favorites` (
`favorite_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '收藏ID',
`knowledge_id` int(11) NOT NULL COMMENT '知识ID',
`user_id` int(11) NOT NULL COMMENT '用户ID',
`tenant_id` int(11) DEFAULT NULL COMMENT '租户ID',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
PRIMARY KEY (`favorite_id`),
UNIQUE KEY `uk_knowledge_user` (`knowledge_id`,`user_id`),
KEY `idx_user_id` (`user_id`),
CONSTRAINT `yz_fk_fav_knowledge` FOREIGN KEY (`knowledge_id`) REFERENCES `yz_knowledge` (`knowledge_id`) ON DELETE CASCADE,
CONSTRAINT `yz_fk_fav_user` FOREIGN KEY (`user_id`) REFERENCES `yz_users` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='知识库收藏表';
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `yz_knowledge_tags`
--
DROP TABLE IF EXISTS `yz_knowledge_tags`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `yz_knowledge_tags` (
`tag_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '标签ID',
`tenant_id` int(11) DEFAULT NULL COMMENT '租户ID',
`tag_name` varchar(50) NOT NULL COMMENT '标签名称',
`tag_background` varchar(20) DEFAULT NULL COMMENT '标签背景',
`tag_color` varchar(20) DEFAULT NULL COMMENT '标签颜色',
`usage_count` int(11) DEFAULT '0' COMMENT '使用次数',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`tag_id`),
UNIQUE KEY `uk_tag_name` (`tag_name`),
KEY `idx_usage_count` (`usage_count`)
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8mb4 COMMENT='知识库标签表';
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `yz_menus`
--
DROP TABLE IF EXISTS `yz_menus`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `yz_menus` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '菜单ID',
`name` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '菜单名称',
`path` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '菜单路径',
`parent_id` int(11) DEFAULT '0' COMMENT '父菜单ID0表示顶级菜单',
`icon` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '菜单图标',
`order` int(11) DEFAULT '0' COMMENT '排序序号',
`status` tinyint(4) DEFAULT '1' COMMENT '状态0-禁用1-启用',
`is_show` int(11) DEFAULT NULL COMMENT '是否显示 0-不显示 1-显示',
`component_path` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '组件路径',
`is_external` tinyint(4) DEFAULT '0' COMMENT '是否外部链接0-内部路由1-外部链接',
`external_url` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '外部链接地址',
`menu_type` tinyint(4) DEFAULT '1' COMMENT '菜单类型1-页面菜单2-目录菜单3-权限按钮',
`permission` varchar(200) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '权限标识',
`description` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL 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(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '创建人',
`update_by` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '更新人',
PRIMARY KEY (`id`),
KEY `idx_parent_id` (`parent_id`),
KEY `idx_status` (`status`),
KEY `idx_order` (`order`),
KEY `idx_menu_type` (`menu_type`),
KEY `idx_delete_time` (`delete_time`)
) ENGINE=InnoDB AUTO_INCREMENT=136 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='菜单表(增强版)';
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `yz_program_category`
--
DROP TABLE IF EXISTS `yz_program_category`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `yz_program_category` (
`category_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '分类ID',
`category_name` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '分类名称',
`category_desc` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '分类描述',
`parent_id` int(11) DEFAULT '0' COMMENT '父分类ID0表示顶级分类',
`sort_order` int(11) DEFAULT '0' COMMENT '排序序号,用于展示顺序',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`category_id`),
KEY `idx_parent_id` (`parent_id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='程序分类表';
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `yz_program_info`
--
DROP TABLE IF EXISTS `yz_program_info`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `yz_program_info` (
`program_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '程序ID',
`category_id` int(11) NOT NULL COMMENT '所属分类ID',
`program_name` varchar(200) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '程序名称',
`program_desc` text COLLATE utf8mb4_unicode_ci COMMENT '程序描述',
`jump_url` varchar(1000) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '跳转地址',
`icon_url` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '程序图标地址',
`version` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '程序版本',
`status` tinyint(4) DEFAULT '1' COMMENT '状态0-禁用1-启用',
`sort_order` int(11) DEFAULT '0' COMMENT '排序序号,用于展示顺序',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`program_id`),
KEY `idx_category_id` (`category_id`),
KEY `idx_status` (`status`),
CONSTRAINT `yz_fk_program_category` FOREIGN KEY (`category_id`) REFERENCES `yz_program_category` (`category_id`) ON DELETE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='程序信息表';
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `yz_roles`
--
DROP TABLE IF EXISTS `yz_roles`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `yz_roles` (
`role_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '角色ID',
`tenant_id` int(11) NOT NULL COMMENT '租户ID 0-全局角色 其他-各租户自设角色',
`role_code` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '角色代码',
`role_name` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '角色名称',
`description` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '角色描述',
`menu_ids` json DEFAULT NULL COMMENT '菜单权限ID数组JSON格式存储',
`status` tinyint(4) DEFAULT '1' COMMENT '角色状态0-禁用1-启用',
`sort_order` int(11) DEFAULT '0' COMMENT '排序序号',
`default` tinyint(4) NOT NULL DEFAULT '0' COMMENT '角色显示范围0-全局展示1-平台用户展示(yz_users)2-租户用户展示(yz_tenant_employees)',
`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) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '创建人',
`update_by` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '更新人',
PRIMARY KEY (`role_id`),
UNIQUE KEY `uk_role_code` (`role_code`),
KEY `idx_status` (`status`),
KEY `idx_sort_order` (`sort_order`),
KEY `idx_create_time` (`create_time`),
KEY `idx_tenant_id` (`tenant_id`),
KEY `idx_delete_time` (`delete_time`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='角色表';
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `yz_tenant_crm_contact`
--
DROP TABLE IF EXISTS `yz_tenant_crm_contact`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `yz_tenant_crm_contact` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增主键ID',
`tenant_id` bigint(20) NOT NULL COMMENT '租户ID关联租户表隔离数据',
`related_type` tinyint(4) NOT NULL COMMENT '关联类型1=客户2=供应商(区分联系人归属)',
`related_id` bigint(20) NOT NULL COMMENT '关联ID关联yz_tenant_crm_customer.id或yz_tenant_crm_supplier.id',
`contact_name` varchar(50) NOT NULL COMMENT '联系人姓名',
`gender` tinyint(4) DEFAULT '0' COMMENT '性别0=未知1=男2=女',
`mobile` varchar(20) DEFAULT NULL COMMENT '手机号(唯一索引,避免重复)',
`phone` varchar(20) DEFAULT NULL COMMENT '固定电话',
`email` varchar(100) DEFAULT NULL COMMENT '邮箱',
`position` varchar(50) DEFAULT NULL COMMENT '职位(如:项目经理、采购负责人)',
`department` varchar(50) DEFAULT NULL COMMENT '所属部门',
`is_primary` tinyint(4) DEFAULT '0' COMMENT '是否主联系人0=否1=是(一个客户/供应商可设一个主联系人)',
`remark` varchar(500) DEFAULT NULL COMMENT '备注(如:关键决策人、对接优先级等)',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`create_by` bigint(20) DEFAULT NULL COMMENT '创建人ID关联用户表',
`update_by` bigint(20) DEFAULT NULL COMMENT '更新人ID关联用户表',
`is_deleted` tinyint(4) DEFAULT '0' COMMENT '逻辑删除0=正常1=删除',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_tenant_mobile` (`tenant_id`,`mobile`) COMMENT '同一租户内手机号唯一',
KEY `idx_tenant_related` (`tenant_id`,`related_type`,`related_id`) COMMENT '查询租户下某客户/供应商的所有联系人',
KEY `idx_contact_name` (`tenant_id`,`contact_name`) COMMENT '按姓名模糊查询联系人'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='租户CRM联系人表';
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `yz_tenant_crm_customer`
--
DROP TABLE IF EXISTS `yz_tenant_crm_customer`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `yz_tenant_crm_customer` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增主键ID',
`tenant_id` varchar(64) NOT NULL COMMENT '租户ID',
`customer_name` varchar(100) NOT NULL COMMENT '客户名称(企业/个人名称)',
`customer_type` varchar(20) NOT NULL COMMENT '客户类型1-企业/2-政府机构/3-国企/4-个人)',
`contact_person` varchar(50) NOT NULL COMMENT '联系人姓名',
`contact_phone` varchar(20) NOT NULL COMMENT '联系人电话',
`contact_email` varchar(100) DEFAULT '' COMMENT '联系人邮箱',
`customer_level` varchar(20) DEFAULT '3' COMMENT '客户等级1-核心客户/2-重要客户/3-普通客户/4-潜在客户)',
`industry` varchar(50) DEFAULT '' COMMENT '所属行业(如:互联网、金融、制造业、教育等)',
`address` varchar(255) DEFAULT '' COMMENT '客户地址(详细地址)',
`register_time` date DEFAULT NULL COMMENT '客户注册/合作起始日期',
`expire_time` date DEFAULT NULL COMMENT '合作到期日期(无到期则为空)',
`status` varchar(20) NOT NULL DEFAULT '1' COMMENT '客户状态0-禁用/1-正常/2-冻结/3-已注销)',
`remark` text COMMENT '客户备注',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`delete_time` datetime DEFAULT NULL COMMENT '删除时间',
PRIMARY KEY (`id`),
KEY `idx_tenant_id` (`tenant_id`) COMMENT '租户ID索引优化多租户隔离查询',
KEY `idx_customer_name` (`customer_name`) COMMENT '客户名称索引,优化按名称模糊查询',
KEY `idx_contact_phone` (`contact_phone`) COMMENT '联系人电话索引,优化按电话精准查询',
KEY `idx_status` (`status`) COMMENT '客户状态索引,优化按状态筛选(如:查询正常客户)',
KEY `idx_register_time` (`register_time`) COMMENT '注册时间索引,优化按合作时间范围查询'
) ENGINE=InnoDB AUTO_INCREMENT=1001 DEFAULT CHARSET=utf8mb4 COMMENT='客户管理表(支持租户隔离、软删除、客户全生命周期追踪)';
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `yz_tenant_crm_supplier`
--
DROP TABLE IF EXISTS `yz_tenant_crm_supplier`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `yz_tenant_crm_supplier` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增主键ID',
`tenant_id` varchar(64) NOT NULL COMMENT '租户ID',
`supplier_name` varchar(100) NOT NULL COMMENT '供应商名称(企业/个人名称)',
`supplier_type` varchar(20) NOT NULL COMMENT '供应商类型',
`contact_person` varchar(50) NOT NULL COMMENT '联系人姓名',
`contact_phone` varchar(20) NOT NULL COMMENT '联系人电话',
`contact_email` varchar(100) DEFAULT '' COMMENT '联系人邮箱',
`supplier_level` varchar(20) DEFAULT '3' COMMENT '供应商等级1-核心供应商/2-重要供应商/3-普通供应商/4-潜在供应商)',
`industry` varchar(50) DEFAULT '' COMMENT '所属行业',
`address` varchar(255) DEFAULT '' COMMENT '供应商地址',
`register_time` date DEFAULT NULL COMMENT '供应商注册/合作起始日期',
`expire_time` date DEFAULT NULL COMMENT '合作到期日期',
`status` varchar(20) NOT NULL DEFAULT '1' COMMENT '供应商状态0-禁用/1-正常/2-冻结/3-已注销)',
`remark` text COMMENT '供应商备注',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`delete_time` datetime DEFAULT NULL COMMENT '删除时间',
PRIMARY KEY (`id`),
KEY `idx_tenant_id` (`tenant_id`) COMMENT '租户ID索引优化多租户隔离查询',
KEY `idx_supplier_name` (`supplier_name`) COMMENT '供应商名称索引,优化按名称模糊查询',
KEY `idx_contact_phone` (`contact_phone`) COMMENT '联系人电话索引,优化按电话精准查询',
KEY `idx_status` (`status`) COMMENT '供应商状态索引,优化按状态筛选',
KEY `idx_register_time` (`register_time`) COMMENT '注册时间索引,优化按合作时间范围查询'
) ENGINE=InnoDB AUTO_INCREMENT=501 DEFAULT CHARSET=utf8mb4 COMMENT='供应商管理表';
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `yz_tenant_departments`
--
DROP TABLE IF EXISTS `yz_tenant_departments`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `yz_tenant_departments` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '部门ID',
`tenant_id` int(11) NOT NULL DEFAULT '0' COMMENT '租户ID',
`name` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '部门名称',
`code` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '部门编码',
`parent_id` int(11) DEFAULT '0' COMMENT '父部门ID0表示顶级部门',
`description` text COLLATE utf8mb4_unicode_ci COMMENT '部门描述',
`manager_id` int(11) DEFAULT NULL COMMENT '部门经理ID',
`sort_order` int(11) DEFAULT '0' COMMENT '排序序号',
`status` tinyint(4) DEFAULT '1' COMMENT '状态1-启用0-禁用',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`delete_time` datetime DEFAULT NULL COMMENT '删除时间(软删除)',
PRIMARY KEY (`id`),
KEY `idx_tenant_id` (`tenant_id`),
KEY `idx_code` (`code`),
KEY `idx_parent_id` (`parent_id`),
KEY `idx_status` (`status`),
KEY `idx_sort_order` (`sort_order`),
KEY `idx_delete_time` (`delete_time`),
KEY `idx_tenant_delete` (`tenant_id`,`delete_time`)
) ENGINE=InnoDB AUTO_INCREMENT=19 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='部门表';
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `yz_tenant_employees`
--
DROP TABLE IF EXISTS `yz_tenant_employees`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `yz_tenant_employees` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '员工ID',
`tenant_id` int(11) NOT NULL DEFAULT '0' COMMENT '租户ID',
`employee_no` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '工号',
`name` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '姓名',
`phone` varchar(20) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '手机号',
`email` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '邮箱',
`department_id` int(11) DEFAULT NULL COMMENT '部门ID',
`position_id` int(11) DEFAULT NULL COMMENT '职位ID',
`role` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '用户角色',
`bank_name` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '工资卡开户行',
`bank_account` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '工资卡卡号',
`password` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '登录密码(加密后)',
`salt` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '密码盐值',
`last_login_time` datetime DEFAULT NULL COMMENT '最后登录时间',
`last_login_ip` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '最后登录IP',
`status` tinyint(4) DEFAULT '1' COMMENT '状态1-在职0-离职',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`delete_time` datetime DEFAULT NULL COMMENT '删除时间(软删除)',
PRIMARY KEY (`id`),
KEY `idx_tenant_id` (`tenant_id`),
KEY `idx_employee_no` (`employee_no`),
KEY `idx_name` (`name`),
KEY `idx_department_id` (`department_id`),
KEY `idx_position_id` (`position_id`),
KEY `idx_status` (`status`),
KEY `idx_create_time` (`create_time`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='员工表';
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `yz_tenant_positions`
--
DROP TABLE IF EXISTS `yz_tenant_positions`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `yz_tenant_positions` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '职位ID',
`tenant_id` int(11) NOT NULL DEFAULT '0' COMMENT '租户ID',
`name` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '职位名称',
`code` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '职位编码',
`department_id` int(11) DEFAULT NULL COMMENT '所属部门ID',
`level` int(11) DEFAULT '0' COMMENT '职位级别',
`description` text COLLATE utf8mb4_unicode_ci COMMENT '职位描述',
`sort_order` int(11) DEFAULT '0' COMMENT '排序序号',
`status` tinyint(4) DEFAULT '1' COMMENT '状态1-启用0-禁用',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`delete_time` datetime DEFAULT NULL COMMENT '删除时间(软删除)',
PRIMARY KEY (`id`),
KEY `idx_tenant_id` (`tenant_id`),
KEY `idx_code` (`code`),
KEY `idx_department_id` (`department_id`),
KEY `idx_status` (`status`),
KEY `idx_sort_order` (`sort_order`),
KEY `idx_delete_time` (`delete_time`),
KEY `idx_dept_delete_status` (`department_id`,`delete_time`,`status`)
) ENGINE=InnoDB AUTO_INCREMENT=104 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='职位表';
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `yz_tenant_tasks`
--
DROP TABLE IF EXISTS `yz_tenant_tasks`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `yz_tenant_tasks` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '任务ID主键',
`tenant_id` bigint(20) NOT NULL COMMENT '租户ID多租户隔离如无多租户需求可设为默认1',
`task_no` varchar(64) NOT NULL COMMENT '任务编号唯一标识如TASK20251112001',
`task_name` varchar(255) NOT NULL COMMENT '任务名称',
`task_desc` text COMMENT '任务描述(富文本内容,支持图片/表格)',
`task_type` varchar(32) DEFAULT 'common' COMMENT '任务类型common=普通任务project=项目任务repeat=重复任务,可自定义)',
`business_tag` varchar(64) DEFAULT NULL COMMENT '业务标签(多个标签用逗号分隔,如"紧急,日常协作"',
`parent_task_id` bigint(20) DEFAULT NULL COMMENT '父任务ID子任务关联用无父任务则为NULL',
`project_id` bigint(20) DEFAULT NULL COMMENT '关联项目ID关联OA项目模块',
`related_id` bigint(20) DEFAULT NULL COMMENT '关联其他模块ID如审批单ID、客户ID',
`related_type` varchar(32) DEFAULT NULL COMMENT '关联模块类型approval=审批单customer=客户,为空则无关联)',
`team_employee_ids` varchar(500) DEFAULT NULL COMMENT '团队成员',
`creator_id` bigint(20) NOT NULL COMMENT '创建人ID',
`creator_name` varchar(64) NOT NULL COMMENT '创建人姓名',
`principal_id` bigint(20) NOT NULL COMMENT '负责人ID',
`principal_name` varchar(64) NOT NULL COMMENT '负责人姓名',
`participant_ids` varchar(512) DEFAULT NULL COMMENT '参与人ID多个用逗号分隔',
`participant_names` varchar(512) DEFAULT NULL COMMENT '参与人姓名(多个用逗号分隔)',
`cc_ids` varchar(512) DEFAULT NULL COMMENT '抄送人ID多个用逗号分隔',
`cc_names` varchar(512) DEFAULT NULL COMMENT '抄送人姓名(多个用逗号分隔)',
`plan_start_time` datetime DEFAULT NULL COMMENT '计划开始时间',
`plan_end_time` datetime NOT NULL COMMENT '计划截止时间',
`actual_start_time` datetime DEFAULT NULL COMMENT '实际开始时间',
`actual_end_time` datetime DEFAULT NULL COMMENT '实际结束时间',
`estimated_hours` decimal(10,2) DEFAULT NULL COMMENT '预估工时(小时)',
`actual_hours` decimal(10,2) DEFAULT NULL COMMENT '实际工时(小时)',
`task_status` varchar(32) NOT NULL DEFAULT 'not_started' COMMENT '任务状态0-未开始1-进行中2-暂停3-已完成4-已关闭)',
`priority` varchar(16) NOT NULL DEFAULT 'medium' COMMENT '优先级0-高1-中2-低3-紧急)',
`progress` tinyint(4) NOT NULL DEFAULT '0' COMMENT '任务进度0-100子任务存在时自动计算',
`need_approval` tinyint(4) NOT NULL DEFAULT '0' COMMENT '是否需要完成审批0=否1=是)',
`approval_id` bigint(20) DEFAULT NULL COMMENT '关联审批单ID完成审批时填写',
`delay_approved` tinyint(4) NOT NULL DEFAULT '0' COMMENT '是否已延期审批0=否1=是)',
`old_plan_end_time` datetime DEFAULT NULL COMMENT '原计划截止时间(延期时记录)',
`repeat_type` varchar(16) DEFAULT NULL COMMENT '重复类型daily=按日weekly=按周monthly=按月,为空则非重复任务)',
`repeat_cycle` int(11) DEFAULT NULL COMMENT '重复周期如每周重复则为7每月重复则为30',
`repeat_end_time` datetime DEFAULT NULL COMMENT '重复截止时间(重复任务终止时间)',
`attachment_ids` varchar(1024) DEFAULT NULL COMMENT '附件ID关联文件表多个用逗号分隔',
`remark` varchar(512) DEFAULT NULL COMMENT '备注(额外说明)',
`is_archived` tinyint(4) NOT NULL DEFAULT '0' COMMENT '是否归档0=未归档1=已归档)',
`archive_time` datetime DEFAULT NULL COMMENT '归档时间',
`created_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`deleted_time` datetime DEFAULT NULL COMMENT '删除时间',
`operator_id` bigint(20) DEFAULT NULL COMMENT '最后操作人ID',
`operator_name` varchar(64) DEFAULT NULL COMMENT '最后操作人姓名',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_tenant_task_no` (`tenant_id`,`task_no`) COMMENT '租户+任务编号唯一索引',
KEY `idx_tenant_principal` (`tenant_id`,`principal_id`) COMMENT '租户+负责人索引(查询个人任务)',
KEY `idx_tenant_status` (`tenant_id`,`task_status`) COMMENT '租户+状态索引(筛选任务状态)',
KEY `idx_tenant_project` (`tenant_id`,`project_id`) COMMENT '租户+项目索引(查询项目下任务)',
KEY `idx_tenant_plan_end_time` (`tenant_id`,`plan_end_time`) COMMENT '租户+截止时间索引(逾期提醒、日历视图)',
KEY `idx_parent_task_id` (`parent_task_id`) COMMENT '父任务ID索引查询子任务'
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COMMENT='OA系统任务表多租户适配';
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `yz_tenants`
--
DROP TABLE IF EXISTS `yz_tenants`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `yz_tenants` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '租户ID',
`name` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '租户名称',
`code` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '租户编码(唯一)',
`owner` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '负责人',
`phone` varchar(20) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '联系电话',
`email` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '邮箱地址',
`status` varchar(20) COLLATE utf8mb4_unicode_ci DEFAULT '1' COMMENT '状态1-启用0-禁用',
`audit_status` varchar(20) COLLATE utf8mb4_unicode_ci DEFAULT 'pending' COMMENT '审核状态pending-待审核approved-已通过rejected-已拒绝',
`audit_comment` text COLLATE utf8mb4_unicode_ci COMMENT '审核意见',
`audit_by` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '审核人',
`audit_time` datetime DEFAULT NULL COMMENT '审核时间',
`capacity` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT '0' COMMENT '分配空间容量MB',
`capacity_used` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT '0' COMMENT '已用空间容量MB',
`attachment_url` longtext COLLATE utf8mb4_unicode_ci COMMENT '附件',
`remark` text COLLATE utf8mb4_unicode_ci 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) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '创建人',
`update_by` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '更新人',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_code` (`code`),
KEY `idx_name` (`name`),
KEY `idx_owner` (`owner`),
KEY `idx_status` (`status`),
KEY `idx_audit_status` (`audit_status`),
KEY `idx_create_time` (`create_time`)
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='租户表';
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `yz_users`
--
DROP TABLE IF EXISTS `yz_users`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `yz_users` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '用户ID',
`tenant_id` int(11) DEFAULT NULL COMMENT '租户ID',
`username` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '用户名',
`password` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '加密后的密码',
`salt` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '密码盐值',
`email` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '邮箱地址',
`avatar` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '头像URL',
`nickname` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '昵称',
`role` varchar(20) COLLATE utf8mb4_unicode_ci DEFAULT 'user' COMMENT '用户角色',
`department_id` int(11) DEFAULT NULL COMMENT '部门ID',
`position_id` int(11) DEFAULT NULL COMMENT '职位ID',
`status` tinyint(4) DEFAULT '1' COMMENT '用户状态0-禁用1-启用',
`last_login_time` datetime DEFAULT NULL COMMENT '最后登录时间',
`last_login_ip` varchar(45) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '最后登录IP',
`login_count` int(11) 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) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '创建人',
`update_by` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '更新人',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_username` (`username`),
KEY `idx_email` (`email`),
KEY `idx_role` (`role`),
KEY `idx_status` (`status`),
KEY `idx_create_time` (`create_time`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户表';
/*!40101 SET character_set_client = @saved_cs_client */;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
CREATE TABLE `yz_exam_question` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '试题唯一标识',
`tenant_id` int(11) NOT NULL COMMENT '租户ID多租户隔离',
`question_type` tinyint(1) NOT NULL DEFAULT 1 COMMENT '题型1-单选2-多选3-判断4-填空5-简答)',
`question_title` varchar(1000) NOT NULL COMMENT '题干内容',
`question_analysis` varchar(2000) DEFAULT '' COMMENT '试题解析',
`score` decimal(5,2) NOT NULL DEFAULT 0.00 COMMENT '试题分值',
`sort_order` tinyint(4) DEFAULT 0 COMMENT '排序序号',
`status` tinyint(1) NOT NULL DEFAULT 1 COMMENT '状态1-启用0-禁用)',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`delete_time` datetime DEFAULT NULL COMMENT '删除时间(软删除)',
PRIMARY KEY (`id`),
-- 核心联合索引:租户+状态+删除时间(查询可用试题)
KEY `idx_tenant_status_delete` (`tenant_id`, `status`, `delete_time`),
-- 联合索引:租户+题型+删除时间(筛选特定题型试题)
KEY `idx_tenant_type_delete` (`tenant_id`, `question_type`, `delete_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='试题主表(通用型+多租户隔离+软删除)';
CREATE TABLE `yz_exam_question_option` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '选项唯一标识',
`tenant_id` int(11) NOT NULL COMMENT '租户ID多租户隔离',
`question_id` bigint(20) NOT NULL COMMENT '关联试题主表ID',
`option_label` varchar(10) NOT NULL COMMENT '选项标签A/B/C/D/对/错)',
`option_content` varchar(500) NOT NULL COMMENT '选项内容',
`sort_order` tinyint(4) DEFAULT 0 COMMENT '排序序号',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`delete_time` datetime DEFAULT NULL COMMENT '删除时间(软删除)',
PRIMARY KEY (`id`),
-- 核心联合索引:租户+试题ID+删除时间(查询某试题所有选项)
KEY `idx_tenant_question_delete` (`tenant_id`, `question_id`, `delete_time`),
-- 联合索引:租户+试题ID+选项标签+删除时间(快速定位选项)
KEY `idx_tenant_question_label_delete` (`tenant_id`, `question_id`, `option_label`, `delete_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='试题选项表(客观题专用+多租户隔离+软删除)';
CREATE TABLE `yz_exam_question_answer` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '答案唯一标识',
`tenant_id` int(11) NOT NULL COMMENT '租户ID多租户隔离',
`question_id` bigint(20) NOT NULL COMMENT '关联试题主表ID',
`answer_content` varchar(1000) NOT NULL COMMENT '正确答案(客观题存标签,主观题存文字)',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`delete_time` datetime DEFAULT NULL COMMENT '删除时间(软删除)',
PRIMARY KEY (`id`),
-- 核心联合索引:租户+试题ID+删除时间(查询某试题正确答案)
KEY `idx_tenant_question_delete` (`tenant_id`, `question_id`, `delete_time`),
-- 唯一索引:同一租户下同一试题只能有一个正确答案
UNIQUE KEY `uk_tenant_question` (`tenant_id`, `question_id`, `delete_time`) COMMENT '软删除状态下试题答案唯一'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='试题答案表(通用答案存储+多租户隔离+软删除)';

View File

@ -1,20 +0,0 @@
-- 反馈表sys_feedback修复TEXT字段默认值错误
CREATE TABLE `sys_feedback` (
`id` varchar(36) NOT NULL COMMENT 'ID',
`tenant_id` varchar(64) NOT NULL COMMENT '租户ID',
`feedback_name` varchar(50) DEFAULT '' COMMENT '反馈人姓名',
`module` varchar(30) NOT NULL COMMENT '反馈对应模块',
`feedback_type` varchar(20) NOT NULL COMMENT '反馈类型',
`content` text NOT NULL COMMENT '反馈详细内容',
`attachment_url` varchar(255) DEFAULT '' COMMENT '附件URL',
`handle_status` varchar(20) NOT NULL DEFAULT '0' COMMENT '处理状态0-待处理/1-处理中/2-已解决/3-已驳回/4-无需处理)',
`handle_remark` text COMMENT '处理备注移除默认值TEXT类型不支持',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`delete_time` datetime DEFAULT NULL COMMENT '删除时间',
PRIMARY KEY (`id`),
KEY `idx_tenant_id` (`tenant_id`) COMMENT '租户ID索引优化租户级查询',
KEY `idx_module` (`module`) COMMENT '模块索引,优化模块级反馈统计',
KEY `idx_handle_status` (`handle_status`) COMMENT '处理状态索引,优化待处理反馈查询',
KEY `idx_create_time` (`create_time`) COMMENT '创建时间索引,优化时间范围查询'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='通用反馈表(支持租户隔离、软删除)';

View File

@ -1,24 +0,0 @@
CREATE TABLE yz_tenant_crm_contact (
id BIGINT NOT NULL AUTO_INCREMENT COMMENT '自增主键ID',
tenant_id BIGINT NOT NULL COMMENT '租户ID关联租户表隔离数据',
related_type TINYINT NOT NULL COMMENT '关联类型1=客户2=供应商(区分联系人归属)',
related_id BIGINT NOT NULL COMMENT '关联ID关联yz_tenant_crm_customer.id或yz_tenant_crm_supplier.id',
contact_name VARCHAR(50) NOT NULL COMMENT '联系人姓名',
gender TINYINT DEFAULT 0 COMMENT '性别0=未知1=男2=女',
mobile VARCHAR(20) COMMENT '手机号(唯一索引,避免重复)',
phone VARCHAR(20) COMMENT '固定电话',
email VARCHAR(100) COMMENT '邮箱',
position VARCHAR(50) COMMENT '职位(如:项目经理、采购负责人)',
department VARCHAR(50) COMMENT '所属部门',
is_primary TINYINT DEFAULT 0 COMMENT '是否主联系人0=否1=是(一个客户/供应商可设一个主联系人)',
remark VARCHAR(500) COMMENT '备注(如:关键决策人、对接优先级等)',
create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
create_by BIGINT COMMENT '创建人ID关联用户表',
update_by BIGINT COMMENT '更新人ID关联用户表',
is_deleted TINYINT DEFAULT 0 COMMENT '逻辑删除0=正常1=删除',
PRIMARY KEY (id),
UNIQUE KEY uk_tenant_mobile (tenant_id, mobile) COMMENT '同一租户内手机号唯一',
KEY idx_tenant_related (tenant_id, related_type, related_id) COMMENT '查询租户下某客户/供应商的所有联系人',
KEY idx_contact_name (tenant_id, contact_name) COMMENT '按姓名模糊查询联系人'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='租户CRM联系人表';

View File

@ -1,26 +0,0 @@
-- 客户管理表yz_tenant_crm_customer支持租户隔离、软删除、时间追踪
CREATE TABLE `yz_tenant_crm_customer` (
`id` varchar(36) NOT NULL COMMENT 'ID',
`tenant_id` varchar(64) NOT NULL COMMENT '租户ID',
`customer_name` varchar(100) NOT NULL COMMENT '客户名称(企业/个人名称)',
`customer_type` varchar(20) NOT NULL COMMENT '客户类型',
`contact_person` varchar(50) NOT NULL COMMENT '联系人姓名',
`contact_phone` varchar(20) NOT NULL COMMENT '联系人电话',
`contact_email` varchar(100) DEFAULT '' COMMENT '联系人邮箱',
`customer_level` varchar(20) DEFAULT '3' COMMENT '客户等级1-核心客户/2-重要客户/3-普通客户/4-潜在客户)',
`industry` varchar(50) DEFAULT '' COMMENT '所属行业',
`address` varchar(255) DEFAULT '' COMMENT '客户地址',
`register_time` date DEFAULT NULL COMMENT '客户注册/合作起始日期',
`expire_time` date DEFAULT NULL COMMENT '合作到期日期',
`status` varchar(20) NOT NULL DEFAULT '1' COMMENT '客户状态0-禁用/1-正常/2-冻结/3-已注销)',
`remark` text COMMENT '客户备注',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`delete_time` datetime DEFAULT NULL COMMENT '删除时间',
PRIMARY KEY (`id`),
KEY `idx_tenant_id` (`tenant_id`) COMMENT '租户ID索引优化多租户隔离查询',
KEY `idx_customer_name` (`customer_name`) COMMENT '客户名称索引,优化按名称模糊查询',
KEY `idx_contact_phone` (`contact_phone`) COMMENT '联系人电话索引,优化按电话精准查询',
KEY `idx_status` (`status`) COMMENT '客户状态索引,优化按状态筛选(如:查询正常客户)',
KEY `idx_register_time` (`register_time`) COMMENT '注册时间索引,优化按合作时间范围查询'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='客户管理表(支持租户隔离、软删除、客户全生命周期追踪)';

View File

@ -1,26 +0,0 @@
-- 客户管理表yz_tenant_crm_supplier支持租户隔离、软删除、时间追踪
CREATE TABLE `yz_tenant_crm_supplier` (
`id` varchar(36) NOT NULL COMMENT 'ID',
`tenant_id` varchar(64) NOT NULL COMMENT '租户ID',
`supplier_name` varchar(100) NOT NULL COMMENT '供应商名称(企业/个人名称)',
`supplier_type` varchar(20) NOT NULL COMMENT '供应商类型',
`contact_person` varchar(50) NOT NULL COMMENT '联系人姓名',
`contact_phone` varchar(20) NOT NULL COMMENT '联系人电话',
`contact_email` varchar(100) DEFAULT '' COMMENT '联系人邮箱',
`supplier_level` varchar(20) DEFAULT '3' COMMENT '供应商等级1-核心供应商/2-重要供应商/3-普通供应商/4-潜在供应商)',
`industry` varchar(50) DEFAULT '' COMMENT '所属行业',
`address` varchar(255) DEFAULT '' COMMENT '供应商地址',
`register_time` date DEFAULT NULL COMMENT '供应商注册/合作起始日期',
`expire_time` date DEFAULT NULL COMMENT '合作到期日期',
`status` varchar(20) NOT NULL DEFAULT '1' COMMENT '供应商状态0-禁用/1-正常/2-冻结/3-已注销)',
`remark` text COMMENT '供应商备注',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`delete_time` datetime DEFAULT NULL COMMENT '删除时间',
PRIMARY KEY (`id`),
KEY `idx_tenant_id` (`tenant_id`) COMMENT '租户ID索引优化多租户隔离查询',
KEY `idx_supplier_name` (`supplier_name`) COMMENT '供应商名称索引,优化按名称模糊查询',
KEY `idx_contact_phone` (`contact_phone`) COMMENT '联系人电话索引,优化按电话精准查询',
KEY `idx_status` (`status`) COMMENT '供应商状态索引,优化按状态筛选',
KEY `idx_register_time` (`register_time`) COMMENT '注册时间索引,优化按合作时间范围查询'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='供应商管理表';

View File

@ -1,75 +0,0 @@
CREATE TABLE `yz_tenant_tasks` (
-- 主键与基础标识
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '任务ID主键',
`tenant_id` bigint NOT NULL COMMENT '租户ID多租户隔离如无多租户需求可设为默认1',
`task_no` varchar(64) NOT NULL COMMENT '任务编号唯一标识如TASK20251112001',
-- 任务核心信息
`task_name` varchar(255) NOT NULL COMMENT '任务名称',
`task_desc` text COMMENT '任务描述(富文本内容,支持图片/表格)',
`task_type` varchar(32) DEFAULT 'common' COMMENT '任务类型common=普通任务project=项目任务repeat=重复任务,可自定义)',
`business_tag` varchar(64) COMMENT '业务标签(多个标签用逗号分隔,如"紧急,日常协作"',
-- 关联信息
`parent_task_id` bigint DEFAULT NULL COMMENT '父任务ID子任务关联用无父任务则为NULL',
`project_id` bigint DEFAULT NULL COMMENT '关联项目ID关联OA项目模块',
`related_id` bigint DEFAULT NULL COMMENT '关联其他模块ID如审批单ID、客户ID',
`related_type` varchar(32) COMMENT '关联模块类型approval=审批单customer=客户,为空则无关联)',
-- 人员配置
`creator_id` bigint NOT NULL COMMENT '创建人ID',
`creator_name` varchar(64) NOT NULL COMMENT '创建人姓名',
`principal_id` bigint NOT NULL COMMENT '负责人ID',
`principal_name` varchar(64) NOT NULL COMMENT '负责人姓名',
`participant_ids` varchar(512) COMMENT '参与人ID多个用逗号分隔',
`participant_names` varchar(512) COMMENT '参与人姓名(多个用逗号分隔)',
`cc_ids` varchar(512) COMMENT '抄送人ID多个用逗号分隔',
`cc_names` varchar(512) COMMENT '抄送人姓名(多个用逗号分隔)',
-- 时间配置
`plan_start_time` datetime DEFAULT NULL COMMENT '计划开始时间',
`plan_end_time` datetime NOT NULL COMMENT '计划截止时间',
`actual_start_time` datetime DEFAULT NULL COMMENT '实际开始时间',
`actual_end_time` datetime DEFAULT NULL COMMENT '实际结束时间',
`estimated_hours` decimal(10,2) DEFAULT NULL COMMENT '预估工时(小时)',
`actual_hours` decimal(10,2) DEFAULT NULL COMMENT '实际工时(小时)',
-- 状态与优先级
`task_status` varchar(32) NOT NULL DEFAULT 'not_started' COMMENT '任务状态not_started=未开始in_progress=进行中paused=暂停completed=已完成closed=已关闭,可自定义)',
`priority` varchar(16) NOT NULL DEFAULT 'medium' COMMENT '优先级high=高medium=中low=低urgent=紧急)',
`progress` tinyint NOT NULL DEFAULT 0 COMMENT '任务进度0-100子任务存在时自动计算',
-- 规则与审批配置
`need_approval` tinyint NOT NULL DEFAULT 0 COMMENT '是否需要完成审批0=否1=是)',
`approval_id` bigint DEFAULT NULL COMMENT '关联审批单ID完成审批时填写',
`delay_approved` tinyint NOT NULL DEFAULT 0 COMMENT '是否已延期审批0=否1=是)',
`old_plan_end_time` datetime COMMENT '原计划截止时间(延期时记录)',
-- 重复任务配置
`repeat_type` varchar(16) DEFAULT NULL COMMENT '重复类型daily=按日weekly=按周monthly=按月,为空则非重复任务)',
`repeat_cycle` int DEFAULT NULL COMMENT '重复周期如每周重复则为7每月重复则为30',
`repeat_end_time` datetime DEFAULT NULL COMMENT '重复截止时间(重复任务终止时间)',
-- 辅助字段
`attachment_ids` varchar(1024) COMMENT '附件ID关联文件表多个用逗号分隔',
`remark` varchar(512) COMMENT '备注(额外说明)',
`is_archived` tinyint NOT NULL DEFAULT 0 COMMENT '是否归档0=未归档1=已归档)',
`archive_time` datetime COMMENT '归档时间',
-- 审计字段
`created_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`deleted` tinyint NOT NULL DEFAULT 0 COMMENT '逻辑删除0=正常1=删除)',
`deleted_time` datetime COMMENT '删除时间',
`operator_id` bigint COMMENT '最后操作人ID',
`operator_name` varchar(64) COMMENT '最后操作人姓名',
-- 索引
PRIMARY KEY (`id`),
UNIQUE KEY `uk_tenant_task_no` (`tenant_id`,`task_no`) COMMENT '租户+任务编号唯一索引',
KEY `idx_tenant_principal` (`tenant_id`,`principal_id`) COMMENT '租户+负责人索引(查询个人任务)',
KEY `idx_tenant_status` (`tenant_id`,`task_status`) COMMENT '租户+状态索引(筛选任务状态)',
KEY `idx_tenant_project` (`tenant_id`,`project_id`) COMMENT '租户+项目索引(查询项目下任务)',
KEY `idx_tenant_plan_end_time` (`tenant_id`,`plan_end_time`) COMMENT '租户+截止时间索引(逾期提醒、日历视图)',
KEY `idx_parent_task_id` (`parent_task_id`) COMMENT '父任务ID索引查询子任务'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='OA系统任务表多租户适配';

View File

@ -121,7 +121,7 @@ func GetDictTypeById(id int) (*models.DictType, error) {
}
// GetDictTypes 获取字典类型列表
func GetDictTypes(tenantId int, userId int, parentId int, status *int8) ([]*models.DictType, error) {
func GetDictTypes(tenantId int, userId int, parentId int, status *int8, pageNum int, pageSize int) ([]*models.DictType, int64, error) {
o := orm.NewOrm()
qs := o.QueryTable("sys_dict_type").Filter("is_deleted", 0)
@ -151,9 +151,24 @@ func GetDictTypes(tenantId int, userId int, parentId int, status *int8) ([]*mode
qs = qs.Filter("status", *status)
}
// 获取总数
total, err := qs.Count()
if err != nil {
return nil, 0, err
}
// 分页处理
if pageNum <= 0 {
pageNum = 1
}
if pageSize <= 0 {
pageSize = 20
}
offset := (pageNum - 1) * pageSize
var dictTypes []*models.DictType
_, err := qs.OrderBy("sort", "create_time").All(&dictTypes)
return dictTypes, err
_, err = qs.OrderBy("-id", "sort").Offset(offset).Limit(pageSize).All(&dictTypes)
return dictTypes, total, err
}
// ========== 字典项相关服务 ==========