完善保险前后端、养殖端小程序

This commit is contained in:
xuqiuyun
2025-09-25 19:09:51 +08:00
parent 76b5393182
commit 852adbcfff
199 changed files with 8642 additions and 52333 deletions

View File

@@ -0,0 +1,42 @@
const { DataTypes } = require('sequelize');
const { sequelize } = require('../config/database');
const MenuPermission = sequelize.define('MenuPermission', {
id: {
type: DataTypes.INTEGER,
autoIncrement: true,
primaryKey: true,
comment: '关联ID'
},
menu_id: {
type: DataTypes.INTEGER,
allowNull: false,
comment: '菜单ID'
},
permission_id: {
type: DataTypes.INTEGER,
allowNull: false,
comment: '权限ID'
},
required: {
type: DataTypes.BOOLEAN,
allowNull: false,
defaultValue: true,
comment: '是否必需权限'
}
}, {
tableName: 'menu_permissions',
timestamps: true,
underscored: true,
indexes: [
{
fields: ['menu_id', 'permission_id'],
unique: true,
name: 'uk_menu_permission'
},
{ fields: ['menu_id'] },
{ fields: ['permission_id'] }
]
});
module.exports = MenuPermission;

View File

@@ -0,0 +1,93 @@
const { DataTypes } = require('sequelize');
const { sequelize } = require('../config/database');
const Permission = sequelize.define('Permission', {
id: {
type: DataTypes.INTEGER,
autoIncrement: true,
primaryKey: true,
comment: '权限ID'
},
name: {
type: DataTypes.STRING(100),
allowNull: false,
comment: '权限名称',
validate: {
len: [2, 100]
}
},
code: {
type: DataTypes.STRING(100),
allowNull: false,
unique: true,
comment: '权限代码',
validate: {
len: [2, 100],
is: /^[a-zA-Z0-9_:]+$/ // 只允许字母、数字、下划线和冒号
}
},
description: {
type: DataTypes.TEXT,
allowNull: true,
comment: '权限描述'
},
module: {
type: DataTypes.STRING(50),
allowNull: false,
comment: '所属模块',
validate: {
len: [2, 50]
}
},
type: {
type: DataTypes.ENUM('menu', 'operation'),
allowNull: false,
defaultValue: 'operation',
comment: '权限类型menu-菜单权限operation-操作权限'
},
parent_id: {
type: DataTypes.INTEGER,
allowNull: true,
comment: '父权限ID'
},
status: {
type: DataTypes.ENUM('active', 'inactive'),
allowNull: false,
defaultValue: 'active',
comment: '状态'
},
sort_order: {
type: DataTypes.INTEGER,
allowNull: false,
defaultValue: 0,
comment: '排序'
}
}, {
tableName: 'permissions',
timestamps: true,
underscored: true,
indexes: [
{ fields: ['code'], unique: true },
{ fields: ['module'] },
{ fields: ['type'] },
{ fields: ['parent_id'] },
{ fields: ['status'] }
]
});
// 定义自关联关系
Permission.hasMany(Permission, {
as: 'children',
foreignKey: 'parent_id',
onDelete: 'SET NULL',
onUpdate: 'CASCADE'
});
Permission.belongsTo(Permission, {
as: 'parent',
foreignKey: 'parent_id',
onDelete: 'SET NULL',
onUpdate: 'CASCADE'
});
module.exports = Permission;

View File

@@ -0,0 +1,42 @@
const { DataTypes } = require('sequelize');
const { sequelize } = require('../config/database');
const RolePermission = sequelize.define('RolePermission', {
id: {
type: DataTypes.INTEGER,
autoIncrement: true,
primaryKey: true,
comment: '关联ID'
},
role_id: {
type: DataTypes.INTEGER,
allowNull: false,
comment: '角色ID'
},
permission_id: {
type: DataTypes.INTEGER,
allowNull: false,
comment: '权限ID'
},
granted: {
type: DataTypes.BOOLEAN,
allowNull: false,
defaultValue: true,
comment: '是否授权'
}
}, {
tableName: 'role_permissions',
timestamps: true,
underscored: true,
indexes: [
{
fields: ['role_id', 'permission_id'],
unique: true,
name: 'uk_role_permission'
},
{ fields: ['role_id'] },
{ fields: ['permission_id'] }
]
});
module.exports = RolePermission;

View File

@@ -65,6 +65,12 @@ const User = sequelize.define('User', {
avatar: {
type: DataTypes.STRING(255),
allowNull: true
},
fixed_token: {
type: DataTypes.STRING(255),
allowNull: true,
unique: true,
comment: '用户固定token用于API访问验证'
}
}, {
tableName: 'users',

View File

@@ -2,6 +2,9 @@
const { sequelize } = require('../config/database');
const User = require('./User');
const Role = require('./Role');
const Permission = require('./Permission');
const RolePermission = require('./RolePermission');
const MenuPermission = require('./MenuPermission');
const InsuranceApplication = require('./InsuranceApplication');
const InsuranceType = require('./InsuranceType');
const Policy = require('./Policy');
@@ -22,6 +25,46 @@ const OperationLog = require('./OperationLog');
User.belongsTo(Role, { foreignKey: 'role_id', as: 'role' });
Role.hasMany(User, { foreignKey: 'role_id', as: 'users' });
// 角色和权限多对多关联(通过中间表)
Role.belongsToMany(Permission, {
through: RolePermission,
foreignKey: 'role_id',
otherKey: 'permission_id',
as: 'rolePermissions'
});
Permission.belongsToMany(Role, {
through: RolePermission,
foreignKey: 'permission_id',
otherKey: 'role_id',
as: 'permissionRoles'
});
// 角色权限关联表的直接关联
RolePermission.belongsTo(Role, { foreignKey: 'role_id', as: 'role' });
RolePermission.belongsTo(Permission, { foreignKey: 'permission_id', as: 'permission' });
Role.hasMany(RolePermission, { foreignKey: 'role_id', as: 'rolePermissionRecords' });
Permission.hasMany(RolePermission, { foreignKey: 'permission_id', as: 'permissionRoleRecords' });
// 菜单和权限多对多关联(通过中间表)
Menu.belongsToMany(Permission, {
through: MenuPermission,
foreignKey: 'menu_id',
otherKey: 'permission_id',
as: 'permissions'
});
Permission.belongsToMany(Menu, {
through: MenuPermission,
foreignKey: 'permission_id',
otherKey: 'menu_id',
as: 'menus'
});
// 菜单权限关联表的直接关联
MenuPermission.belongsTo(Menu, { foreignKey: 'menu_id', as: 'menu' });
MenuPermission.belongsTo(Permission, { foreignKey: 'permission_id', as: 'permission' });
Menu.hasMany(MenuPermission, { foreignKey: 'menu_id', as: 'menuPermissions' });
Permission.hasMany(MenuPermission, { foreignKey: 'permission_id', as: 'menuPermissions' });
// 保险申请和保险类型关联
InsuranceApplication.belongsTo(InsuranceType, {
foreignKey: 'insurance_type_id',
@@ -82,6 +125,26 @@ Policy.hasMany(Claim, {
as: 'claims'
});
// 理赔和客户关联
Claim.belongsTo(User, {
foreignKey: 'customer_id',
as: 'customer'
});
User.hasMany(Claim, {
foreignKey: 'customer_id',
as: 'customer_claims'
});
// 理赔和审核人关联
Claim.belongsTo(User, {
foreignKey: 'reviewer_id',
as: 'reviewer'
});
User.hasMany(Claim, {
foreignKey: 'reviewer_id',
as: 'reviewed_claims'
});
// 监管任务关联
SupervisoryTask.belongsTo(User, {
foreignKey: 'assignedTo',
@@ -198,6 +261,9 @@ module.exports = {
sequelize,
User,
Role,
Permission,
RolePermission,
MenuPermission,
InsuranceApplication,
InsuranceType,
Policy,