完善保险端的前后端

This commit is contained in:
shenquanyi
2025-09-23 18:29:24 +08:00
parent e7a0cd4aa3
commit b58ed724b0
69 changed files with 9728 additions and 769 deletions

View File

@@ -38,4 +38,14 @@ router.get('/applications-stats', jwtAuth, checkPermission('insurance', 'read'),
insuranceController.getApplicationStats
);
// 导出保险申请数据
router.get('/applications/export', jwtAuth, checkPermission('insurance', 'read'),
insuranceController.exportApplications
);
// 获取参保类型选项
router.get('/categories', jwtAuth, checkPermission('insurance', 'read'),
insuranceController.getInsuranceCategories
);
module.exports = router;

View File

@@ -3,32 +3,32 @@ const router = express.Router();
const insuranceTypeController = require('../controllers/insuranceTypeController');
const { jwtAuth, checkPermission } = require('../middleware/auth');
// 获取保险类型列表
// 获取险种列表
router.get('/', jwtAuth, checkPermission('insurance_type', 'read'),
insuranceTypeController.getInsuranceTypes
);
// 获取单个保险类型详情
// 获取单个险种详情
router.get('/:id', jwtAuth, checkPermission('insurance_type', 'read'),
insuranceTypeController.getInsuranceTypeById
);
// 创建保险类型
// 创建险种
router.post('/', jwtAuth, checkPermission('insurance_type', 'create'),
insuranceTypeController.createInsuranceType
);
// 更新保险类型
// 更新险种
router.put('/:id', jwtAuth, checkPermission('insurance_type', 'update'),
insuranceTypeController.updateInsuranceType
);
// 删除保险类型
// 删除险种
router.delete('/:id', jwtAuth, checkPermission('insurance_type', 'delete'),
insuranceTypeController.deleteInsuranceType
);
// 更新保险类型状态
// 更新险种状态
router.patch('/:id/status', jwtAuth, checkPermission('insurance_type', 'update'),
insuranceTypeController.updateInsuranceTypeStatus
);

View File

@@ -0,0 +1,31 @@
const express = require('express');
const router = express.Router();
const {
getLivestockClaims,
createLivestockClaim,
getLivestockClaimById,
reviewLivestockClaim,
updateLivestockClaimPayment,
getLivestockClaimStats
} = require('../controllers/livestockClaimController');
const { authenticateToken, requirePermission } = require('../middleware/auth');
// 获取生资理赔列表
router.get('/', authenticateToken, requirePermission('livestock_claim:read'), getLivestockClaims);
// 获取生资理赔统计
router.get('/stats', authenticateToken, requirePermission('livestock_claim:read'), getLivestockClaimStats);
// 获取单个生资理赔详情
router.get('/:id', authenticateToken, requirePermission('livestock_claim:read'), getLivestockClaimById);
// 创建生资理赔申请
router.post('/', authenticateToken, requirePermission('livestock_claim:create'), createLivestockClaim);
// 审核生资理赔
router.patch('/:id/review', authenticateToken, requirePermission('livestock_claim:review'), reviewLivestockClaim);
// 更新理赔支付状态
router.patch('/:id/payment', authenticateToken, requirePermission('livestock_claim:payment'), updateLivestockClaimPayment);
module.exports = router;

View File

@@ -0,0 +1,35 @@
const express = require('express');
const router = express.Router();
const {
getLivestockPolicies,
createLivestockPolicy,
getLivestockPolicyById,
updateLivestockPolicy,
updateLivestockPolicyStatus,
deleteLivestockPolicy,
getLivestockPolicyStats
} = require('../controllers/livestockPolicyController');
const { authenticateToken, requirePermission } = require('../middleware/auth');
// 获取生资保单列表
router.get('/', authenticateToken, requirePermission('livestock_policy:read'), getLivestockPolicies);
// 获取生资保单统计
router.get('/stats', authenticateToken, requirePermission('livestock_policy:read'), getLivestockPolicyStats);
// 获取单个生资保单详情
router.get('/:id', authenticateToken, requirePermission('livestock_policy:read'), getLivestockPolicyById);
// 创建生资保单
router.post('/', authenticateToken, requirePermission('livestock_policy:create'), createLivestockPolicy);
// 更新生资保单
router.put('/:id', authenticateToken, requirePermission('livestock_policy:update'), updateLivestockPolicy);
// 更新生资保单状态
router.patch('/:id/status', authenticateToken, requirePermission('livestock_policy:update'), updateLivestockPolicyStatus);
// 删除生资保单
router.delete('/:id', authenticateToken, requirePermission('livestock_policy:delete'), deleteLivestockPolicy);
module.exports = router;

View File

@@ -0,0 +1,35 @@
const express = require('express');
const router = express.Router();
const {
getLivestockTypes,
getActiveLivestockTypes,
createLivestockType,
getLivestockTypeById,
updateLivestockType,
deleteLivestockType,
batchUpdateLivestockTypeStatus
} = require('../controllers/livestockTypeController');
const { authenticateToken, requirePermission } = require('../middleware/auth');
// 获取牲畜类型列表
router.get('/', authenticateToken, requirePermission('livestock_type:read'), getLivestockTypes);
// 获取所有启用的牲畜类型(用于下拉选择)
router.get('/active', authenticateToken, getActiveLivestockTypes);
// 获取单个牲畜类型详情
router.get('/:id', authenticateToken, requirePermission('livestock_type:read'), getLivestockTypeById);
// 创建牲畜类型
router.post('/', authenticateToken, requirePermission('livestock_type:create'), createLivestockType);
// 更新牲畜类型
router.put('/:id', authenticateToken, requirePermission('livestock_type:update'), updateLivestockType);
// 删除牲畜类型
router.delete('/:id', authenticateToken, requirePermission('livestock_type:delete'), deleteLivestockType);
// 批量更新牲畜类型状态
router.patch('/batch/status', authenticateToken, requirePermission('livestock_type:update'), batchUpdateLivestockTypeStatus);
module.exports = router;

View File

@@ -3,6 +3,11 @@ const router = express.Router();
const policyController = require('../controllers/policyController');
const { jwtAuth, checkPermission } = require('../middleware/auth');
// 获取保单统计(必须在动态路由之前)
router.get('/stats/overview', jwtAuth, checkPermission('policy', 'read'),
policyController.getPolicyStats
);
// 获取保单列表
router.get('/', jwtAuth, checkPermission('policy', 'read'),
policyController.getPolicies
@@ -28,9 +33,4 @@ router.patch('/:id/status', jwtAuth, checkPermission('policy', 'update'),
policyController.updatePolicyStatus
);
// 获取保单统计
router.get('/stats/overview', jwtAuth, checkPermission('policy', 'read'),
policyController.getPolicyStats
);
module.exports = router;

View File

@@ -0,0 +1,536 @@
const express = require('express');
const router = express.Router();
const regulatoryTaskCompletionController = require('../controllers/regulatoryTaskCompletionController');
const { jwtAuth, checkPermission } = require('../middleware/auth');
/**
* @swagger
* tags:
* name: RegulatoryTaskCompletion
* description: 监管任务结项管理API
*/
/**
* @swagger
* components:
* schemas:
* RegulatoryTaskCompletion:
* type: object
* required:
* - application_no
* - policy_no
* - product_name
* - customer_name
* properties:
* id:
* type: integer
* description: 记录ID
* application_no:
* type: string
* description: 申请编号
* policy_no:
* type: string
* description: 保单号
* product_name:
* type: string
* description: 产品名称
* customer_name:
* type: string
* description: 客户名称
* customer_phone:
* type: string
* description: 客户电话
* insurance_amount:
* type: number
* format: decimal
* description: 保险金额
* premium_amount:
* type: number
* format: decimal
* description: 保费金额
* start_date:
* type: string
* format: date
* description: 保险起期
* end_date:
* type: string
* format: date
* description: 保险止期
* completion_date:
* type: string
* format: date
* description: 结项日期
* status:
* type: string
* enum: [pending, approved, rejected, completed]
* description: 状态
* reviewer_name:
* type: string
* description: 审核人员
* review_comments:
* type: string
* description: 审核意见
* created_at:
* type: string
* format: date-time
* description: 创建时间
* updated_at:
* type: string
* format: date-time
* description: 更新时间
*/
/**
* @swagger
* /api/regulatory-task-completion:
* get:
* summary: 获取监管任务结项列表
* tags: [RegulatoryTaskCompletion]
* security:
* - bearerAuth: []
* parameters:
* - in: query
* name: application_no
* schema:
* type: string
* description: 申请编号(模糊查询)
* - in: query
* name: policy_no
* schema:
* type: string
* description: 保单号(模糊查询)
* - in: query
* name: product_name
* schema:
* type: string
* description: 产品名称(模糊查询)
* - in: query
* name: customer_name
* schema:
* type: string
* description: 客户名称(模糊查询)
* - in: query
* name: completion_date
* schema:
* type: string
* format: date
* description: 结项日期
* - in: query
* name: status
* schema:
* type: string
* enum: [pending, approved, rejected, completed]
* description: 状态
* - in: query
* name: reviewer_name
* schema:
* type: string
* description: 审核人员(模糊查询)
* - in: query
* name: page
* schema:
* type: integer
* default: 1
* description: 页码
* - in: query
* name: limit
* schema:
* type: integer
* default: 10
* description: 每页数量
* responses:
* 200:
* description: 成功获取监管任务结项列表
* content:
* application/json:
* schema:
* type: object
* properties:
* code:
* type: integer
* example: 200
* message:
* type: string
* example: success
* data:
* type: object
* properties:
* list:
* type: array
* items:
* $ref: '#/components/schemas/RegulatoryTaskCompletion'
* pagination:
* type: object
* properties:
* current:
* type: integer
* pageSize:
* type: integer
* total:
* type: integer
* totalPages:
* type: integer
*/
router.get('/', jwtAuth, checkPermission('regulatory_task', 'read'),
regulatoryTaskCompletionController.getTaskCompletions
);
/**
* @swagger
* /api/regulatory-task-completion/{id}:
* get:
* summary: 获取监管任务结项详情
* tags: [RegulatoryTaskCompletion]
* security:
* - bearerAuth: []
* parameters:
* - in: path
* name: id
* required: true
* schema:
* type: integer
* description: 记录ID
* responses:
* 200:
* description: 成功获取监管任务结项详情
* content:
* application/json:
* schema:
* type: object
* properties:
* code:
* type: integer
* example: 200
* message:
* type: string
* example: success
* data:
* allOf:
* - $ref: '#/components/schemas/RegulatoryTaskCompletion'
* - type: object
* properties:
* attachments:
* type: array
* items:
* type: object
* properties:
* id:
* type: integer
* file_name:
* type: string
* file_path:
* type: string
* file_size:
* type: integer
* file_type:
* type: string
* upload_time:
* type: string
* format: date-time
* operation_logs:
* type: array
* items:
* type: object
* properties:
* id:
* type: integer
* operation_type:
* type: string
* operation_description:
* type: string
* operator_name:
* type: string
* operation_time:
* type: string
* format: date-time
* ip_address:
* type: string
* 404:
* description: 记录不存在
*/
router.get('/:id', jwtAuth, checkPermission('regulatory_task', 'read'),
regulatoryTaskCompletionController.getTaskCompletionById
);
/**
* @swagger
* /api/regulatory-task-completion:
* post:
* summary: 创建监管任务结项记录
* tags: [RegulatoryTaskCompletion]
* security:
* - bearerAuth: []
* requestBody:
* required: true
* content:
* application/json:
* schema:
* type: object
* required:
* - application_no
* - policy_no
* - product_name
* - customer_name
* properties:
* application_no:
* type: string
* description: 申请编号
* policy_no:
* type: string
* description: 保单号
* product_name:
* type: string
* description: 产品名称
* customer_name:
* type: string
* description: 客户名称
* customer_phone:
* type: string
* description: 客户电话
* insurance_amount:
* type: number
* format: decimal
* description: 保险金额
* premium_amount:
* type: number
* format: decimal
* description: 保费金额
* start_date:
* type: string
* format: date
* description: 保险起期
* end_date:
* type: string
* format: date
* description: 保险止期
* completion_date:
* type: string
* format: date
* description: 结项日期
* status:
* type: string
* enum: [pending, approved, rejected, completed]
* default: pending
* description: 状态
* review_comments:
* type: string
* description: 审核意见
* attachments:
* type: array
* items:
* type: object
* properties:
* file_name:
* type: string
* file_path:
* type: string
* file_size:
* type: integer
* file_type:
* type: string
* responses:
* 201:
* description: 监管任务结项记录创建成功
* 400:
* description: 参数错误或记录已存在
*/
router.post('/', jwtAuth, checkPermission('regulatory_task', 'create'),
regulatoryTaskCompletionController.createTaskCompletion
);
/**
* @swagger
* /api/regulatory-task-completion/{id}:
* put:
* summary: 更新监管任务结项记录
* tags: [RegulatoryTaskCompletion]
* security:
* - bearerAuth: []
* parameters:
* - in: path
* name: id
* required: true
* schema:
* type: integer
* description: 记录ID
* requestBody:
* required: true
* content:
* application/json:
* schema:
* type: object
* properties:
* application_no:
* type: string
* policy_no:
* type: string
* product_name:
* type: string
* customer_name:
* type: string
* customer_phone:
* type: string
* insurance_amount:
* type: number
* format: decimal
* premium_amount:
* type: number
* format: decimal
* start_date:
* type: string
* format: date
* end_date:
* type: string
* format: date
* completion_date:
* type: string
* format: date
* status:
* type: string
* enum: [pending, approved, rejected, completed]
* review_comments:
* type: string
* responses:
* 200:
* description: 监管任务结项记录更新成功
* 404:
* description: 记录不存在
*/
router.put('/:id', jwtAuth, checkPermission('regulatory_task', 'update'),
regulatoryTaskCompletionController.updateTaskCompletion
);
/**
* @swagger
* /api/regulatory-task-completion/{id}:
* delete:
* summary: 删除监管任务结项记录
* tags: [RegulatoryTaskCompletion]
* security:
* - bearerAuth: []
* parameters:
* - in: path
* name: id
* required: true
* schema:
* type: integer
* description: 记录ID
* responses:
* 200:
* description: 监管任务结项记录删除成功
* 404:
* description: 记录不存在
*/
router.delete('/:id', jwtAuth, checkPermission('regulatory_task', 'delete'),
regulatoryTaskCompletionController.deleteTaskCompletion
);
/**
* @swagger
* /api/regulatory-task-completion/{id}/review:
* patch:
* summary: 审核监管任务结项记录
* tags: [RegulatoryTaskCompletion]
* security:
* - bearerAuth: []
* parameters:
* - in: path
* name: id
* required: true
* schema:
* type: integer
* description: 记录ID
* requestBody:
* required: true
* content:
* application/json:
* schema:
* type: object
* required:
* - status
* - reviewer_name
* properties:
* status:
* type: string
* enum: [pending, approved, rejected, completed]
* description: 审核状态
* review_comments:
* type: string
* description: 审核意见
* reviewer_name:
* type: string
* description: 审核人员
* responses:
* 200:
* description: 监管任务结项记录审核成功
* 400:
* description: 无效的状态值
* 404:
* description: 记录不存在
*/
router.patch('/:id/review', jwtAuth, checkPermission('regulatory_task', 'review'),
regulatoryTaskCompletionController.reviewTaskCompletion
);
/**
* @swagger
* /api/regulatory-task-completion/stats:
* get:
* summary: 获取监管任务结项统计数据
* tags: [RegulatoryTaskCompletion]
* security:
* - bearerAuth: []
* responses:
* 200:
* description: 成功获取统计数据
* content:
* application/json:
* schema:
* type: object
* properties:
* code:
* type: integer
* example: 200
* message:
* type: string
* example: success
* data:
* type: object
* properties:
* statusStats:
* type: array
* items:
* type: object
* properties:
* status:
* type: string
* count:
* type: integer
* monthlyStats:
* type: array
* items:
* type: object
* properties:
* month:
* type: string
* count:
* type: integer
* total_amount:
* type: number
* productStats:
* type: array
* items:
* type: object
* properties:
* product_name:
* type: string
* count:
* type: integer
* total_amount:
* type: number
*/
router.get('/stats', jwtAuth, checkPermission('regulatory_task', 'read'),
regulatoryTaskCompletionController.getTaskCompletionStats
);
module.exports = router;