申诉管理模块: 新增手机h5端(提交申述,我的申诉, 申诉受理,申诉执行);
This commit is contained in:
+10
-3
@@ -1,6 +1,7 @@
|
||||
package com.budwk.app.zhgh.democratic.appeal.controller;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import cn.dev33.satoken.annotation.SaMode;
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.core.bean.copier.CopyOptions;
|
||||
import cn.hutool.core.lang.Dict;
|
||||
@@ -49,8 +50,14 @@ public class AppealAcceptController {
|
||||
public void index() {
|
||||
}
|
||||
|
||||
@At("/h5")
|
||||
@Ok("beetl:/platform/zhghh5/democratic/appeal/accept/index.html")
|
||||
@SaCheckPermission("h5.appeal.accept")
|
||||
public void h5Index() {
|
||||
}
|
||||
|
||||
@At
|
||||
@SaCheckPermission("appeal.accept")
|
||||
@SaCheckPermission(value = {"appeal.accept", "h5.appeal.accept"}, mode = SaMode.OR)
|
||||
public Result pageData(Integer pageNumber, Integer pageSize, String searchKeyword, String appealTypeId,
|
||||
Integer year, boolean approval) {
|
||||
Sql sql = listSql();
|
||||
@@ -68,7 +75,7 @@ public class AppealAcceptController {
|
||||
}
|
||||
|
||||
@At
|
||||
@SaCheckPermission("appeal.accept")
|
||||
@SaCheckPermission(value = {"appeal.accept", "h5.appeal.accept"}, mode = SaMode.OR)
|
||||
@ApiOperation("查询受理任务")
|
||||
public Result queryTask(@Param("taskId") Long taskId) {
|
||||
Sql sql = listSql();
|
||||
@@ -77,7 +84,7 @@ public class AppealAcceptController {
|
||||
}
|
||||
|
||||
@At
|
||||
@SaCheckPermission("appeal.accept")
|
||||
@SaCheckPermission(value = {"appeal.accept", "h5.appeal.accept"}, mode = SaMode.OR)
|
||||
@ApiOperation("受理申诉")
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
@SLog(tag = "申诉管理-受理", msg = "受理申诉")
|
||||
|
||||
+10
-3
@@ -1,6 +1,7 @@
|
||||
package com.budwk.app.zhgh.democratic.appeal.controller;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import cn.dev33.satoken.annotation.SaMode;
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.core.bean.copier.CopyOptions;
|
||||
import cn.hutool.core.lang.Dict;
|
||||
@@ -49,8 +50,14 @@ public class AppealExecuteController {
|
||||
public void index() {
|
||||
}
|
||||
|
||||
@At("/h5")
|
||||
@Ok("beetl:/platform/zhghh5/democratic/appeal/execute/index.html")
|
||||
@SaCheckPermission("h5.appeal.execute")
|
||||
public void h5Index() {
|
||||
}
|
||||
|
||||
@At
|
||||
@SaCheckPermission("appeal.execute")
|
||||
@SaCheckPermission(value = {"appeal.execute", "h5.appeal.execute"}, mode = SaMode.OR)
|
||||
public Result pageData(Integer pageNumber, Integer pageSize, String searchKeyword, String appealTypeId,
|
||||
Integer year, boolean approval) {
|
||||
Sql sql = listSql();
|
||||
@@ -68,7 +75,7 @@ public class AppealExecuteController {
|
||||
}
|
||||
|
||||
@At
|
||||
@SaCheckPermission("appeal.execute")
|
||||
@SaCheckPermission(value = {"appeal.execute", "h5.appeal.execute"}, mode = SaMode.OR)
|
||||
@ApiOperation("查询执行任务")
|
||||
public Result queryTask(@Param("taskId") Long taskId) {
|
||||
Sql sql = listSql();
|
||||
@@ -77,7 +84,7 @@ public class AppealExecuteController {
|
||||
}
|
||||
|
||||
@At
|
||||
@SaCheckPermission("appeal.execute")
|
||||
@SaCheckPermission(value = {"appeal.execute", "h5.appeal.execute"}, mode = SaMode.OR)
|
||||
@ApiOperation("提交执行情况")
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
@SLog(tag = "申诉管理-执行", msg = "提交执行情况")
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
package com.budwk.app.zhgh.democratic.appeal.controller;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import io.swagger.annotations.Api;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.mvc.annotation.At;
|
||||
import org.nutz.mvc.annotation.Ok;
|
||||
|
||||
@IocBean
|
||||
@At("/platform/appeal")
|
||||
@Api("申诉管理-H5入口")
|
||||
public class AppealH5Controller {
|
||||
|
||||
@At("/h5")
|
||||
@Ok("beetl:/platform/zhghh5/democratic/appeal/index.html")
|
||||
@SaCheckPermission("h5.appeal")
|
||||
public void h5Index() {
|
||||
}
|
||||
}
|
||||
+9
-2
@@ -1,6 +1,7 @@
|
||||
package com.budwk.app.zhgh.democratic.appeal.controller;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import cn.dev33.satoken.annotation.SaMode;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.budwk.app.base.page.Pagination;
|
||||
import com.budwk.app.base.result.Result;
|
||||
@@ -38,8 +39,14 @@ public class AppealMineController {
|
||||
public void index() {
|
||||
}
|
||||
|
||||
@At("/h5")
|
||||
@Ok("beetl:/platform/zhghh5/democratic/appeal/mine/index.html")
|
||||
@SaCheckPermission("h5.appeal.mine")
|
||||
public void h5Index() {
|
||||
}
|
||||
|
||||
@At
|
||||
@SaCheckPermission("appeal.mine")
|
||||
@SaCheckPermission(value = {"appeal.mine", "h5.appeal.mine"}, mode = SaMode.OR)
|
||||
public Result pageData(Integer pageNumber, Integer pageSize, String searchKeyword, String appealTypeId, Integer year) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
@@ -72,7 +79,7 @@ public class AppealMineController {
|
||||
}
|
||||
|
||||
@At
|
||||
@SaCheckPermission("appeal.mine")
|
||||
@SaCheckPermission(value = {"appeal.mine", "h5.appeal.mine"}, mode = SaMode.OR)
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
@ApiOperation("删除申诉")
|
||||
public Result delete(@Param("id") String id) {
|
||||
|
||||
+12
-5
@@ -1,6 +1,7 @@
|
||||
package com.budwk.app.zhgh.democratic.appeal.controller;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import cn.dev33.satoken.annotation.SaMode;
|
||||
import cn.hutool.core.lang.Dict;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.budwk.app.base.annotation.SLog;
|
||||
@@ -57,8 +58,14 @@ public class AppealWriteController {
|
||||
public void index() {
|
||||
}
|
||||
|
||||
@At("/h5")
|
||||
@Ok("beetl:/platform/zhghh5/democratic/appeal/write/index.html")
|
||||
@SaCheckPermission("h5.appeal.write")
|
||||
public void h5Index() {
|
||||
}
|
||||
|
||||
@At
|
||||
@SaCheckPermission("appeal.write")
|
||||
@SaCheckPermission(value = {"appeal.write", "h5.appeal.write"}, mode = SaMode.OR)
|
||||
@ApiOperation("当前用户信息")
|
||||
public Result currentUserInfo() {
|
||||
View_user user = dao.fetch(View_user.class, Cnd.where("id", "=", SecurityUtil.getUserId()));
|
||||
@@ -85,14 +92,14 @@ public class AppealWriteController {
|
||||
}
|
||||
|
||||
@At
|
||||
@SaCheckPermission("appeal.write")
|
||||
@SaCheckPermission(value = {"appeal.write", "h5.appeal.write"}, mode = SaMode.OR)
|
||||
@ApiOperation("获取申诉信息")
|
||||
public Result info(@Param("id") String id) {
|
||||
return Result.success(appealInfoService.fetch(id));
|
||||
}
|
||||
|
||||
@At
|
||||
@SaCheckPermission("appeal.write")
|
||||
@SaCheckPermission(value = {"appeal.write", "h5.appeal.write"}, mode = SaMode.OR)
|
||||
@ApiOperation("保存申诉")
|
||||
@SLog(tag = "申诉管理-提交申诉", msg = "保存申诉")
|
||||
public Result save(@Param("data") AppealInfo appealInfo) {
|
||||
@@ -102,7 +109,7 @@ public class AppealWriteController {
|
||||
}
|
||||
|
||||
@At
|
||||
@SaCheckPermission("appeal.write")
|
||||
@SaCheckPermission(value = {"appeal.write", "h5.appeal.write"}, mode = SaMode.OR)
|
||||
@ApiOperation("提交申诉")
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
@SLog(tag = "申诉管理-提交申诉", msg = "提交申诉")
|
||||
@@ -130,7 +137,7 @@ public class AppealWriteController {
|
||||
}
|
||||
|
||||
@At
|
||||
@SaCheckPermission("appeal.write")
|
||||
@SaCheckPermission(value = {"appeal.write", "h5.appeal.write"}, mode = SaMode.OR)
|
||||
@ApiOperation("重新提交申诉")
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
@SLog(tag = "申诉管理-提交申诉", msg = "重新提交申诉")
|
||||
|
||||
@@ -0,0 +1,330 @@
|
||||
-- 申诉管理初始化脚本
|
||||
-- 说明:本脚本依赖系统基础表 sys_menu、sys_role 已存在;如 sys_role_menu 不存在会自动创建。
|
||||
|
||||
SET @now := CAST(UNIX_TIMESTAMP(NOW()) * 1000 AS UNSIGNED);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `appeal_type` (
|
||||
`id` varchar(32) NOT NULL COMMENT 'ID',
|
||||
`name` varchar(100) DEFAULT NULL COMMENT '类型名称',
|
||||
`sort` int DEFAULT 0 COMMENT '排序',
|
||||
`enabled` tinyint(1) DEFAULT 1 COMMENT '是否启用',
|
||||
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
|
||||
`createdBy` varchar(32) DEFAULT NULL COMMENT '创建人',
|
||||
`createdAt` bigint DEFAULT NULL COMMENT '创建时间',
|
||||
`updatedBy` varchar(32) DEFAULT NULL COMMENT '修改人',
|
||||
`updatedAt` bigint DEFAULT NULL COMMENT '修改时间',
|
||||
`delFlag` tinyint(1) DEFAULT 0 COMMENT '删除标记',
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `INDEX_APPEAL_TYPE_ENABLED` (`enabled`),
|
||||
KEY `INDEX_APPEAL_TYPE_SORT` (`sort`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='申诉类型';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `appeal_info` (
|
||||
`id` varchar(32) NOT NULL COMMENT 'ID',
|
||||
`userId` varchar(32) DEFAULT NULL COMMENT '申诉人ID',
|
||||
`userName` varchar(50) DEFAULT NULL COMMENT '申诉人姓名',
|
||||
`loginName` varchar(50) DEFAULT NULL COMMENT '申诉人工号',
|
||||
`sex` varchar(20) DEFAULT NULL COMMENT '性别',
|
||||
`birthday` date DEFAULT NULL COMMENT '出生年月',
|
||||
`political` varchar(100) DEFAULT NULL COMMENT '政治面貌',
|
||||
`unitId` varchar(32) DEFAULT NULL COMMENT '所在单位ID',
|
||||
`unitName` varchar(100) DEFAULT NULL COMMENT '所在单位',
|
||||
`positionName` varchar(100) DEFAULT NULL COMMENT '岗位',
|
||||
`address` varchar(300) DEFAULT NULL COMMENT '住址',
|
||||
`mobile` varchar(100) DEFAULT NULL COMMENT '联系方式',
|
||||
`appealTypeId` varchar(32) DEFAULT NULL COMMENT '申诉类型ID',
|
||||
`appealTypeName` varchar(100) DEFAULT NULL COMMENT '申诉类型名称',
|
||||
`defendantUnitId` varchar(32) DEFAULT NULL COMMENT '被申诉单位ID',
|
||||
`defendantUnitName` varchar(100) DEFAULT NULL COMMENT '被申诉单位',
|
||||
`defendantAddress` varchar(300) DEFAULT NULL COMMENT '被申诉单位地址',
|
||||
`defendantContact` varchar(100) DEFAULT NULL COMMENT '被申诉单位联系方式',
|
||||
`title` varchar(200) DEFAULT NULL COMMENT '申诉标题',
|
||||
`appealMatter` text COMMENT '申诉事项',
|
||||
`reason` text COMMENT '申诉理由',
|
||||
`request` text COMMENT '申诉要求',
|
||||
`applyDate` date DEFAULT NULL COMMENT '申请日期',
|
||||
`signature` varchar(255) DEFAULT NULL COMMENT '申诉人签名',
|
||||
`files` json COMMENT '附件',
|
||||
`state` varchar(50) DEFAULT NULL COMMENT '业务状态',
|
||||
`acceptUserId` varchar(32) DEFAULT NULL COMMENT '受理人ID',
|
||||
`acceptUserName` varchar(50) DEFAULT NULL COMMENT '受理人姓名',
|
||||
`acceptTime` datetime DEFAULT NULL COMMENT '受理时间',
|
||||
`decisionContent` text COMMENT '处理决定',
|
||||
`legalBasis` text COMMENT '事实理由及适用依据',
|
||||
`decisionDate` date DEFAULT NULL COMMENT '作出决定日期',
|
||||
`decisionFiles` json COMMENT '决定书附件',
|
||||
`executeUserId` varchar(32) DEFAULT NULL COMMENT '执行人ID',
|
||||
`executeUserName` varchar(50) DEFAULT NULL COMMENT '执行人姓名',
|
||||
`executeTime` datetime DEFAULT NULL COMMENT '执行时间',
|
||||
`executeContent` text COMMENT '执行情况',
|
||||
`executeFiles` json COMMENT '执行附件',
|
||||
`createdBy` varchar(32) DEFAULT NULL COMMENT '创建人',
|
||||
`createdAt` bigint DEFAULT NULL COMMENT '创建时间',
|
||||
`updatedBy` varchar(32) DEFAULT NULL COMMENT '修改人',
|
||||
`updatedAt` bigint DEFAULT NULL COMMENT '修改时间',
|
||||
`delFlag` tinyint(1) DEFAULT 0 COMMENT '删除标记',
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `INDEX_APPEAL_INFO_USER` (`userId`),
|
||||
KEY `INDEX_APPEAL_INFO_UNIT` (`unitId`),
|
||||
KEY `INDEX_APPEAL_INFO_TYPE` (`appealTypeId`),
|
||||
KEY `INDEX_APPEAL_INFO_DEFENDANT_UNIT` (`defendantUnitId`),
|
||||
KEY `INDEX_APPEAL_INFO_STATE` (`state`),
|
||||
KEY `INDEX_APPEAL_INFO_APPLY_DATE` (`applyDate`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='教职工申诉';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `sys_role_menu` (
|
||||
`roleId` varchar(32) NOT NULL,
|
||||
`menuId` varchar(32) NOT NULL,
|
||||
KEY `INDEX_SYS_ROLE_MENU_ROLE` (`roleId`),
|
||||
KEY `INDEX_SYS_ROLE_MENU_MENU` (`menuId`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='角色菜单关系';
|
||||
|
||||
INSERT INTO `sys_role` (`id`, `name`, `code`, `aliasName`, `disabled`, `unitid`, `note`, `sort`, `createdBy`, `createdAt`, `updatedBy`, `updatedAt`, `delFlag`)
|
||||
SELECT 'a0e9c002000000000000000000000001', '申诉处理委员会成员', 'APPEAL_COMMITTEE_MEMBER', 'AppealCommitteeMember', 0, NULL, '申诉受理环节处理角色', 60, '', @now, '', @now, 0
|
||||
FROM DUAL
|
||||
WHERE NOT EXISTS (SELECT 1 FROM `sys_role` WHERE `code` = 'APPEAL_COMMITTEE_MEMBER');
|
||||
|
||||
INSERT INTO `sys_menu` (`id`, `parentId`, `path`, `name`, `aliasName`, `type`, `href`, `target`, `icon`, `showit`, `disabled`, `permission`, `note`, `location`, `hasChildren`, `createdBy`, `createdAt`, `updatedBy`, `updatedAt`, `delFlag`, `platform`)
|
||||
SELECT 'a0e9c001000000000000000000000001', '', '9901', '申诉管理', 'Appeal', 'menu', '', '', 'ti-comments', 1, 0, 'appeal', NULL, 9901, 1, '', @now, '', @now, 0, 'PC'
|
||||
FROM DUAL
|
||||
WHERE NOT EXISTS (SELECT 1 FROM `sys_menu` WHERE `permission` = 'appeal' OR `path` = '9901');
|
||||
|
||||
INSERT INTO `sys_menu` (`id`, `parentId`, `path`, `name`, `aliasName`, `type`, `href`, `target`, `icon`, `showit`, `disabled`, `permission`, `note`, `location`, `hasChildren`, `createdBy`, `createdAt`, `updatedBy`, `updatedAt`, `delFlag`, `platform`)
|
||||
SELECT 'a0e9c001000000000000000000000002', parent.`id`, '99010001', '申诉类型', 'AppealType', 'menu', '/platform/appeal/type', 'data-pjax', '', 1, 0, 'appeal.type', NULL, 990101, 0, '', @now, '', @now, 0, 'PC'
|
||||
FROM `sys_menu` parent
|
||||
WHERE parent.`permission` = 'appeal'
|
||||
AND NOT EXISTS (SELECT 1 FROM `sys_menu` WHERE `permission` = 'appeal.type' OR `path` = '99010001');
|
||||
|
||||
INSERT INTO `sys_menu` (`id`, `parentId`, `path`, `name`, `aliasName`, `type`, `href`, `target`, `icon`, `showit`, `disabled`, `permission`, `note`, `location`, `hasChildren`, `createdBy`, `createdAt`, `updatedBy`, `updatedAt`, `delFlag`, `platform`)
|
||||
SELECT 'a0e9c001000000000000000000000003', parent.`id`, '99010002', '提交申诉', 'AppealWrite', 'menu', '/platform/appeal/write', 'data-pjax', '', 1, 0, 'appeal.write', NULL, 990102, 0, '', @now, '', @now, 0, 'PC'
|
||||
FROM `sys_menu` parent
|
||||
WHERE parent.`permission` = 'appeal'
|
||||
AND NOT EXISTS (SELECT 1 FROM `sys_menu` WHERE `permission` = 'appeal.write' OR `path` = '99010002');
|
||||
|
||||
INSERT INTO `sys_menu` (`id`, `parentId`, `path`, `name`, `aliasName`, `type`, `href`, `target`, `icon`, `showit`, `disabled`, `permission`, `note`, `location`, `hasChildren`, `createdBy`, `createdAt`, `updatedBy`, `updatedAt`, `delFlag`, `platform`)
|
||||
SELECT 'a0e9c001000000000000000000000004', parent.`id`, '99010003', '我的申诉', 'AppealMine', 'menu', '/platform/appeal/mine', 'data-pjax', '', 1, 0, 'appeal.mine', NULL, 990103, 0, '', @now, '', @now, 0, 'PC'
|
||||
FROM `sys_menu` parent
|
||||
WHERE parent.`permission` = 'appeal'
|
||||
AND NOT EXISTS (SELECT 1 FROM `sys_menu` WHERE `permission` = 'appeal.mine' OR `path` = '99010003');
|
||||
|
||||
INSERT INTO `sys_menu` (`id`, `parentId`, `path`, `name`, `aliasName`, `type`, `href`, `target`, `icon`, `showit`, `disabled`, `permission`, `note`, `location`, `hasChildren`, `createdBy`, `createdAt`, `updatedBy`, `updatedAt`, `delFlag`, `platform`)
|
||||
SELECT 'a0e9c001000000000000000000000005', parent.`id`, '99010004', '申诉受理', 'AppealAccept', 'menu', '/platform/appeal/accept', 'data-pjax', '', 1, 0, 'appeal.accept', NULL, 990104, 0, '', @now, '', @now, 0, 'PC'
|
||||
FROM `sys_menu` parent
|
||||
WHERE parent.`permission` = 'appeal'
|
||||
AND NOT EXISTS (SELECT 1 FROM `sys_menu` WHERE `permission` = 'appeal.accept' OR `path` = '99010004');
|
||||
|
||||
INSERT INTO `sys_menu` (`id`, `parentId`, `path`, `name`, `aliasName`, `type`, `href`, `target`, `icon`, `showit`, `disabled`, `permission`, `note`, `location`, `hasChildren`, `createdBy`, `createdAt`, `updatedBy`, `updatedAt`, `delFlag`, `platform`)
|
||||
SELECT 'a0e9c001000000000000000000000006', parent.`id`, '99010005', '申诉执行', 'AppealExecute', 'menu', '/platform/appeal/execute', 'data-pjax', '', 1, 0, 'appeal.execute', NULL, 990105, 0, '', @now, '', @now, 0, 'PC'
|
||||
FROM `sys_menu` parent
|
||||
WHERE parent.`permission` = 'appeal'
|
||||
AND NOT EXISTS (SELECT 1 FROM `sys_menu` WHERE `permission` = 'appeal.execute' OR `path` = '99010005');
|
||||
|
||||
INSERT INTO `sys_menu` (`id`, `parentId`, `path`, `name`, `aliasName`, `type`, `href`, `target`, `icon`, `showit`, `disabled`, `permission`, `note`, `location`, `hasChildren`, `createdBy`, `createdAt`, `updatedBy`, `updatedAt`, `delFlag`, `platform`)
|
||||
SELECT 'a0e9c001000000000000000000000007', parent.`id`, '99010006', '查询统计', 'AppealQuery', 'menu', '/platform/appeal/query', 'data-pjax', '', 1, 0, 'appeal.query', NULL, 990106, 0, '', @now, '', @now, 0, 'PC'
|
||||
FROM `sys_menu` parent
|
||||
WHERE parent.`permission` = 'appeal'
|
||||
AND NOT EXISTS (SELECT 1 FROM `sys_menu` WHERE `permission` = 'appeal.query' OR `path` = '99010006');
|
||||
|
||||
UPDATE `sys_menu`
|
||||
SET `platform` = 'PC'
|
||||
WHERE `permission` IN ('appeal', 'appeal.type', 'appeal.write', 'appeal.mine', 'appeal.accept', 'appeal.execute', 'appeal.query')
|
||||
AND (`platform` IS NULL OR `platform` = '');
|
||||
|
||||
INSERT INTO `appeal_type` (`id`, `name`, `sort`, `enabled`, `remark`, `createdBy`, `createdAt`, `updatedBy`, `updatedAt`, `delFlag`)
|
||||
SELECT 'a0e9c003000000000000000000000001', '处分', 1, 1, NULL, '', @now, '', @now, 0
|
||||
FROM DUAL
|
||||
WHERE NOT EXISTS (SELECT 1 FROM `appeal_type` WHERE `name` = '处分');
|
||||
|
||||
INSERT INTO `appeal_type` (`id`, `name`, `sort`, `enabled`, `remark`, `createdBy`, `createdAt`, `updatedBy`, `updatedAt`, `delFlag`)
|
||||
SELECT 'a0e9c003000000000000000000000002', '岗位聘用', 2, 1, NULL, '', @now, '', @now, 0
|
||||
FROM DUAL
|
||||
WHERE NOT EXISTS (SELECT 1 FROM `appeal_type` WHERE `name` = '岗位聘用');
|
||||
|
||||
INSERT INTO `appeal_type` (`id`, `name`, `sort`, `enabled`, `remark`, `createdBy`, `createdAt`, `updatedBy`, `updatedAt`, `delFlag`)
|
||||
SELECT 'a0e9c003000000000000000000000003', '撤销奖励', 3, 1, NULL, '', @now, '', @now, 0
|
||||
FROM DUAL
|
||||
WHERE NOT EXISTS (SELECT 1 FROM `appeal_type` WHERE `name` = '撤销奖励');
|
||||
|
||||
INSERT INTO `appeal_type` (`id`, `name`, `sort`, `enabled`, `remark`, `createdBy`, `createdAt`, `updatedBy`, `updatedAt`, `delFlag`)
|
||||
SELECT 'a0e9c003000000000000000000000004', '考核结果定为基本合格或不合格', 4, 1, NULL, '', @now, '', @now, 0
|
||||
FROM DUAL
|
||||
WHERE NOT EXISTS (SELECT 1 FROM `appeal_type` WHERE `name` = '考核结果定为基本合格或不合格');
|
||||
|
||||
INSERT INTO `appeal_type` (`id`, `name`, `sort`, `enabled`, `remark`, `createdBy`, `createdAt`, `updatedBy`, `updatedAt`, `delFlag`)
|
||||
SELECT 'a0e9c003000000000000000000000005', '未按国家规定确定或扣减工资福利待遇', 5, 1, NULL, '', @now, '', @now, 0
|
||||
FROM DUAL
|
||||
WHERE NOT EXISTS (SELECT 1 FROM `appeal_type` WHERE `name` = '未按国家规定确定或扣减工资福利待遇');
|
||||
|
||||
INSERT INTO `appeal_type` (`id`, `name`, `sort`, `enabled`, `remark`, `createdBy`, `createdAt`, `updatedBy`, `updatedAt`, `delFlag`)
|
||||
SELECT 'a0e9c003000000000000000000000006', '法律法规和规章制度规定可以提出申诉的其他事项', 6, 1, NULL, '', @now, '', @now, 0
|
||||
FROM DUAL
|
||||
WHERE NOT EXISTS (SELECT 1 FROM `appeal_type` WHERE `name` = '法律法规和规章制度规定可以提出申诉的其他事项');
|
||||
|
||||
/* todo 系统上线时手动录入工作流程
|
||||
INSERT INTO `wf_process_category` (`id`, `name`, `picIcon`, `icon`, `createdBy`, `createdAt`, `updatedBy`, `updatedAt`, `delFlag`)
|
||||
SELECT 'a0e9c004000000000000000000000001', '申诉管理', NULL, 'ti-comments', '', @now, '', @now, 0
|
||||
FROM DUAL
|
||||
WHERE NOT EXISTS (SELECT 1 FROM `wf_process_category` WHERE `id` = 'a0e9c004000000000000000000000001' OR `name` = '申诉管理');
|
||||
|
||||
SET @appeal_flow_json := '{
|
||||
"name": "SSGL",
|
||||
"displayName": "申诉管理",
|
||||
"type": "appeal",
|
||||
"category": "a0e9c004000000000000000000000001",
|
||||
"description": "教职工申诉审核流程",
|
||||
"instanceUrl": "/platform/appeal/write",
|
||||
"instanceViewUrl": "/platform/appeal/mine",
|
||||
"nodes": [
|
||||
{
|
||||
"id": "startTask",
|
||||
"type": "snaker:start",
|
||||
"x": 120,
|
||||
"y": 160,
|
||||
"text": {"value": "提交申诉"},
|
||||
"properties": {"width": 90, "height": 50}
|
||||
},
|
||||
{
|
||||
"id": "appealAccept",
|
||||
"type": "snaker:task",
|
||||
"x": 330,
|
||||
"y": 160,
|
||||
"text": {"value": "受理"},
|
||||
"properties": {
|
||||
"width": 120,
|
||||
"height": 60,
|
||||
"form": "/platform/appeal/accept",
|
||||
"taskType": 0,
|
||||
"performType": 0,
|
||||
"assignmentHandler": "com.budwk.app.flow.handler.FlowAppealCommitteeAssignmentHandler"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "appealExecute",
|
||||
"type": "snaker:task",
|
||||
"x": 560,
|
||||
"y": 160,
|
||||
"text": {"value": "执行"},
|
||||
"properties": {
|
||||
"width": 120,
|
||||
"height": 60,
|
||||
"form": "/platform/appeal/execute",
|
||||
"taskType": 0,
|
||||
"performType": 0,
|
||||
"assignmentHandler": "com.budwk.app.flow.handler.FlowAppealDefendantUnitAssignmentHandler"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "endTask",
|
||||
"type": "snaker:end",
|
||||
"x": 780,
|
||||
"y": 160,
|
||||
"text": {"value": "结束"},
|
||||
"properties": {"width": 90, "height": 50}
|
||||
}
|
||||
],
|
||||
"edges": [
|
||||
{
|
||||
"id": "edge_start_accept",
|
||||
"type": "polyline",
|
||||
"sourceNodeId": "startTask",
|
||||
"targetNodeId": "appealAccept",
|
||||
"properties": {},
|
||||
"text": {"value": ""},
|
||||
"startPoint": {"x": 165, "y": 160},
|
||||
"endPoint": {"x": 270, "y": 160},
|
||||
"pointsList": [{"x": 165, "y": 160}, {"x": 270, "y": 160}]
|
||||
},
|
||||
{
|
||||
"id": "edge_accept_execute",
|
||||
"type": "polyline",
|
||||
"sourceNodeId": "appealAccept",
|
||||
"targetNodeId": "appealExecute",
|
||||
"properties": {"expr": "#submitType==1"},
|
||||
"text": {"value": "受理"},
|
||||
"startPoint": {"x": 390, "y": 160},
|
||||
"endPoint": {"x": 500, "y": 160},
|
||||
"pointsList": [{"x": 390, "y": 160}, {"x": 500, "y": 160}]
|
||||
},
|
||||
{
|
||||
"id": "edge_accept_end",
|
||||
"type": "polyline",
|
||||
"sourceNodeId": "appealAccept",
|
||||
"targetNodeId": "endTask",
|
||||
"properties": {"expr": "#submitType==2"},
|
||||
"text": {"value": "不予受理"},
|
||||
"startPoint": {"x": 330, "y": 220},
|
||||
"endPoint": {"x": 780, "y": 220},
|
||||
"pointsList": [{"x": 330, "y": 220}, {"x": 780, "y": 220}, {"x": 780, "y": 185}]
|
||||
},
|
||||
{
|
||||
"id": "edge_execute_end",
|
||||
"type": "polyline",
|
||||
"sourceNodeId": "appealExecute",
|
||||
"targetNodeId": "endTask",
|
||||
"properties": {},
|
||||
"text": {"value": ""},
|
||||
"startPoint": {"x": 620, "y": 160},
|
||||
"endPoint": {"x": 735, "y": 160},
|
||||
"pointsList": [{"x": 620, "y": 160}, {"x": 735, "y": 160}]
|
||||
}
|
||||
]
|
||||
}';
|
||||
|
||||
INSERT INTO `wf_process_define` (`name`, `displayName`, `type`, `category`, `instanceUrl`, `instanceViewUrl`, `icon`, `state`, `content`, `version`, `pinyinName`, `description`, `createdBy`, `createdAt`, `updatedBy`, `updatedAt`, `delFlag`)
|
||||
SELECT 'SSGL', '申诉管理', 'appeal', 'a0e9c004000000000000000000000001', '/platform/appeal/write', '/platform/appeal/mine', 'ti-comments', 1, @appeal_flow_json, 1, 'S', '教职工申诉审核流程', '', @now, '', @now, 0
|
||||
FROM DUAL
|
||||
WHERE NOT EXISTS (SELECT 1 FROM `wf_process_define` WHERE `name` = 'SSGL');
|
||||
|
||||
UPDATE `wf_process_define`
|
||||
SET `state` = 1,
|
||||
`type` = 'appeal',
|
||||
`category` = 'a0e9c004000000000000000000000001',
|
||||
`pinyinName` = 'S',
|
||||
`icon` = 'ti-comments',
|
||||
`updatedAt` = @now
|
||||
WHERE `name` = 'SSGL'
|
||||
AND (`state` IS NULL OR `state` <> 1 OR IFNULL(`type`, '') <> 'appeal' OR IFNULL(`category`, '') <> 'a0e9c004000000000000000000000001' OR IFNULL(`pinyinName`, '') <> 'S' OR IFNULL(`icon`, '') <> 'ti-comments');
|
||||
|
||||
UPDATE `wf_process_define`
|
||||
SET `content` = @appeal_flow_json,
|
||||
`displayName` = IFNULL(`displayName`, '申诉管理'),
|
||||
`instanceUrl` = IFNULL(`instanceUrl`, '/platform/appeal/write'),
|
||||
`instanceViewUrl` = IFNULL(`instanceViewUrl`, '/platform/appeal/mine'),
|
||||
`updatedAt` = @now
|
||||
WHERE `name` = 'SSGL'
|
||||
AND (`content` IS NULL OR `content` = '');*/
|
||||
/*
|
||||
INSERT INTO `sys_role_menu` (`roleId`, `menuId`)
|
||||
SELECT r.`id`, m.`id`
|
||||
FROM `sys_role` r
|
||||
JOIN `sys_menu` m ON m.`permission` IN ('appeal', 'appeal.write', 'appeal.mine')
|
||||
WHERE r.`code` = 'MEMBER'
|
||||
AND NOT EXISTS (SELECT 1 FROM `sys_role_menu` rm WHERE rm.`roleId` = r.`id` AND rm.`menuId` = m.`id`);
|
||||
|
||||
INSERT INTO `sys_role_menu` (`roleId`, `menuId`)
|
||||
SELECT r.`id`, m.`id`
|
||||
FROM `sys_role` r
|
||||
JOIN `sys_menu` m ON m.`permission` IN ('appeal', 'appeal.accept', 'appeal.query')
|
||||
WHERE r.`code` = 'APPEAL_COMMITTEE_MEMBER'
|
||||
AND NOT EXISTS (SELECT 1 FROM `sys_role_menu` rm WHERE rm.`roleId` = r.`id` AND rm.`menuId` = m.`id`);
|
||||
|
||||
INSERT INTO `sys_role_menu` (`roleId`, `menuId`)
|
||||
SELECT r.`id`, m.`id`
|
||||
FROM `sys_role` r
|
||||
JOIN `sys_menu` m ON m.`permission` IN ('appeal', 'appeal.execute', 'appeal.query')
|
||||
WHERE r.`code` = 'BRANCH_UNION_ADMIN'
|
||||
AND NOT EXISTS (SELECT 1 FROM `sys_role_menu` rm WHERE rm.`roleId` = r.`id` AND rm.`menuId` = m.`id`);
|
||||
|
||||
INSERT INTO `sys_role_menu` (`roleId`, `menuId`)
|
||||
SELECT r.`id`, m.`id`
|
||||
FROM `sys_role` r
|
||||
JOIN `sys_menu` m ON m.`permission` IN ('appeal', 'appeal.type', 'appeal.write', 'appeal.mine', 'appeal.accept', 'appeal.execute', 'appeal.query')
|
||||
WHERE r.`code` IN ('SYSADMIN', 'SCHOOL_UNION_ADMIN', 'SCHOOL_UNION_DC_ADMIN')
|
||||
AND NOT EXISTS (SELECT 1 FROM `sys_role_menu` rm WHERE rm.`roleId` = r.`id` AND rm.`menuId` = m.`id`);
|
||||
*/
|
||||
INSERT INTO `sys_role_menu` (`roleId`, `menuId`)
|
||||
SELECT r.`id`, m.`id`
|
||||
FROM `sys_role` r
|
||||
JOIN `sys_menu` m ON m.`permission` IN ('appeal', 'appeal.type', 'appeal.write', 'appeal.mine', 'appeal.accept', 'appeal.execute', 'appeal.query')
|
||||
WHERE r.`code` IN ('SYSADMIN')
|
||||
AND NOT EXISTS (SELECT 1 FROM `sys_role_menu` rm WHERE rm.`roleId` = r.`id` AND rm.`menuId` = m.`id`);
|
||||
@@ -0,0 +1,146 @@
|
||||
-- 申诉管理手机端初始化脚本
|
||||
-- 说明:PC端申诉模块已部署时,只需要执行本脚本新增手机端入口和权限。
|
||||
|
||||
SET @now := CAST(UNIX_TIMESTAMP(NOW()) * 1000 AS UNSIGNED);
|
||||
|
||||
INSERT INTO `sys_module` (`id`, `platform`, `name`, `icon`, `faIcon`, `sortNum`, `createdBy`, `createdAt`, `updatedBy`, `updatedAt`, `delFlag`)
|
||||
SELECT 'a0e9c005000000000000000000000001', 'H5', '民主管理', NULL, 'ti-comments', 9901, '', @now, '', @now, 0
|
||||
FROM DUAL
|
||||
WHERE NOT EXISTS (SELECT 1 FROM `sys_module` WHERE `id` = 'a0e9c005000000000000000000000001' OR (`platform` = 'H5' AND `name` = '民主管理'));
|
||||
|
||||
INSERT INTO `sys_menu` (`id`, `parentId`, `path`, `name`, `initialPinyinName`, `aliasName`, `type`, `href`, `target`, `icon`, `picIcon`, `showit`, `disabled`, `permission`, `note`, `location`, `hasChildren`, `createdBy`, `createdAt`, `updatedBy`, `updatedAt`, `delFlag`, `platform`, `moduleId`, `isRecommendApp`, `isRecommendService`)
|
||||
SELECT 'a0e9c006000000000000000000000001', '', 'H9901', '申诉管理', 'S', 'AppealH5', 'menu', '/platform/appeal/h5', 'data-pjax', 'comment-o', NULL, 1, 0, 'h5.appeal', NULL, 9901, 1, '', @now, '', @now, 0, 'H5', module.`id`, 0, 1
|
||||
FROM `sys_module` module
|
||||
WHERE module.`platform` = 'H5'
|
||||
AND module.`name` = '民主管理'
|
||||
AND NOT EXISTS (SELECT 1 FROM `sys_menu` WHERE `permission` = 'h5.appeal' OR `path` = 'H9901');
|
||||
|
||||
INSERT INTO `sys_menu` (`id`, `parentId`, `path`, `name`, `initialPinyinName`, `aliasName`, `type`, `href`, `target`, `icon`, `picIcon`, `showit`, `disabled`, `permission`, `note`, `location`, `hasChildren`, `createdBy`, `createdAt`, `updatedBy`, `updatedAt`, `delFlag`, `platform`, `moduleId`, `isRecommendApp`, `isRecommendService`)
|
||||
SELECT 'a0e9c006000000000000000000000002', 'a0e9c006000000000000000000000001', 'H9901H9902', '提交申诉', 'T', 'AppealWriteH5', 'menu', '/platform/appeal/write/h5', 'data-pjax', 'edit', NULL, 1, 0, 'h5.appeal.write', NULL, 9902, 0, '', @now, '', @now, 0, 'H5', module.`id`, 0, 0
|
||||
FROM `sys_module` module
|
||||
WHERE module.`platform` = 'H5'
|
||||
AND module.`name` = '民主管理'
|
||||
AND NOT EXISTS (SELECT 1 FROM `sys_menu` WHERE `permission` = 'h5.appeal.write' OR `path` = 'H9902');
|
||||
|
||||
INSERT INTO `sys_menu` (`id`, `parentId`, `path`, `name`, `initialPinyinName`, `aliasName`, `type`, `href`, `target`, `icon`, `picIcon`, `showit`, `disabled`, `permission`, `note`, `location`, `hasChildren`, `createdBy`, `createdAt`, `updatedBy`, `updatedAt`, `delFlag`, `platform`, `moduleId`, `isRecommendApp`, `isRecommendService`)
|
||||
SELECT 'a0e9c006000000000000000000000003', 'a0e9c006000000000000000000000001', 'H9901H9903', '我的申诉', 'W', 'AppealMineH5', 'menu', '/platform/appeal/mine/h5', 'data-pjax', 'records', NULL, 1, 0, 'h5.appeal.mine', NULL, 9903, 0, '', @now, '', @now, 0, 'H5', module.`id`, 0, 0
|
||||
FROM `sys_module` module
|
||||
WHERE module.`platform` = 'H5'
|
||||
AND module.`name` = '民主管理'
|
||||
AND NOT EXISTS (SELECT 1 FROM `sys_menu` WHERE `permission` = 'h5.appeal.mine' OR `path` = 'H9903');
|
||||
|
||||
INSERT INTO `sys_menu` (`id`, `parentId`, `path`, `name`, `initialPinyinName`, `aliasName`, `type`, `href`, `target`, `icon`, `picIcon`, `showit`, `disabled`, `permission`, `note`, `location`, `hasChildren`, `createdBy`, `createdAt`, `updatedBy`, `updatedAt`, `delFlag`, `platform`, `moduleId`, `isRecommendApp`, `isRecommendService`)
|
||||
SELECT 'a0e9c006000000000000000000000004', 'a0e9c006000000000000000000000001', 'H9901H9904', '申诉受理', 'S', 'AppealAcceptH5', 'menu', '/platform/appeal/accept/h5', 'data-pjax', 'todo-list-o', NULL, 1, 0, 'h5.appeal.accept', NULL, 9904, 0, '', @now, '', @now, 0, 'H5', module.`id`, 0, 0
|
||||
FROM `sys_module` module
|
||||
WHERE module.`platform` = 'H5'
|
||||
AND module.`name` = '民主管理'
|
||||
AND NOT EXISTS (SELECT 1 FROM `sys_menu` WHERE `permission` = 'h5.appeal.accept' OR `path` = 'H9904');
|
||||
|
||||
INSERT INTO `sys_menu` (`id`, `parentId`, `path`, `name`, `initialPinyinName`, `aliasName`, `type`, `href`, `target`, `icon`, `picIcon`, `showit`, `disabled`, `permission`, `note`, `location`, `hasChildren`, `createdBy`, `createdAt`, `updatedBy`, `updatedAt`, `delFlag`, `platform`, `moduleId`, `isRecommendApp`, `isRecommendService`)
|
||||
SELECT 'a0e9c006000000000000000000000005', 'a0e9c006000000000000000000000001', 'H9901H9905', '申诉执行', 'S', 'AppealExecuteH5', 'menu', '/platform/appeal/execute/h5', 'data-pjax', 'passed', NULL, 1, 0, 'h5.appeal.execute', NULL, 9905, 0, '', @now, '', @now, 0, 'H5', module.`id`, 0, 0
|
||||
FROM `sys_module` module
|
||||
WHERE module.`platform` = 'H5'
|
||||
AND module.`name` = '民主管理'
|
||||
AND NOT EXISTS (SELECT 1 FROM `sys_menu` WHERE `permission` = 'h5.appeal.execute' OR `path` = 'H9905');
|
||||
|
||||
UPDATE `sys_menu`
|
||||
SET `href` = '/platform/appeal/h5',
|
||||
`hasChildren` = 1,
|
||||
`isRecommendService` = 1,
|
||||
`updatedAt` = @now
|
||||
WHERE `permission` = 'h5.appeal';
|
||||
|
||||
UPDATE `sys_menu`
|
||||
SET `parentId` = 'a0e9c006000000000000000000000001',
|
||||
`path` = CONCAT('H9901', RIGHT(`path`, 5)),
|
||||
`isRecommendService` = 0,
|
||||
`updatedAt` = @now
|
||||
WHERE `permission` IN ('h5.appeal.write', 'h5.appeal.mine', 'h5.appeal.accept', 'h5.appeal.execute');
|
||||
|
||||
INSERT INTO `sys_role_menu` (`roleId`, `menuId`)
|
||||
SELECT r.`id`, m.`id`
|
||||
FROM `sys_role` r
|
||||
JOIN `sys_menu` m ON m.`permission` IN ('h5.appeal', 'h5.appeal.write', 'h5.appeal.mine', 'h5.appeal.accept', 'h5.appeal.execute')
|
||||
WHERE r.`code` = 'SYSADMIN'
|
||||
AND NOT EXISTS (SELECT 1 FROM `sys_role_menu` rm WHERE rm.`roleId` = r.`id` AND rm.`menuId` = m.`id`);
|
||||
|
||||
INSERT INTO `sys_role_menu` (`roleId`, `menuId`)
|
||||
SELECT r.`id`, m.`id`
|
||||
FROM `sys_role` r
|
||||
JOIN `sys_menu` m ON m.`permission` IN ('h5.appeal', 'h5.appeal.write', 'h5.appeal.mine')
|
||||
WHERE r.`code` IN ('SYSADMIN', 'MEMBER')
|
||||
AND NOT EXISTS (SELECT 1 FROM `sys_role_menu` rm WHERE rm.`roleId` = r.`id` AND rm.`menuId` = m.`id`);
|
||||
|
||||
INSERT INTO `sys_role_menu` (`roleId`, `menuId`)
|
||||
SELECT r.`id`, m.`id`
|
||||
FROM `sys_role` r
|
||||
JOIN `sys_menu` m ON m.`permission` IN ('h5.appeal', 'h5.appeal.accept')
|
||||
WHERE r.`code` = 'APPEAL_COMMITTEE_MEMBER'
|
||||
AND NOT EXISTS (SELECT 1 FROM `sys_role_menu` rm WHERE rm.`roleId` = r.`id` AND rm.`menuId` = m.`id`);
|
||||
|
||||
/* 分工会管理员不需要权限
|
||||
INSERT INTO `sys_role_menu` (`roleId`, `menuId`)
|
||||
SELECT r.`id`, m.`id`
|
||||
FROM `sys_role` r
|
||||
JOIN `sys_menu` m ON m.`permission` IN ('h5.appeal', 'h5.appeal.execute')
|
||||
WHERE r.`code` = 'BRANCH_UNION_ADMIN'
|
||||
AND NOT EXISTS (SELECT 1 FROM `sys_role_menu` rm WHERE rm.`roleId` = r.`id` AND rm.`menuId` = m.`id`);*/
|
||||
|
||||
UPDATE `wf_process_define`
|
||||
SET `content` = REPLACE(`content`, '"form": "/platform/appeal/accept",', '"form": "/platform/appeal/accept", "h5form": "/platform/appeal/accept/h5",'),
|
||||
`updatedAt` = @now
|
||||
WHERE `name` = 'SSGL'
|
||||
AND `content` LIKE '%"id": "appealAccept"%'
|
||||
AND `content` LIKE '%"form": "/platform/appeal/accept"%'
|
||||
AND `content` NOT LIKE '%"h5form": "/platform/appeal/accept/h5"%';
|
||||
|
||||
UPDATE `wf_process_define`
|
||||
SET `content` = REPLACE(`content`, '"form":"/platform/appeal/accept",', '"form":"/platform/appeal/accept","h5form":"/platform/appeal/accept/h5",'),
|
||||
`updatedAt` = @now
|
||||
WHERE `name` = 'SSGL'
|
||||
AND `content` LIKE '%"id":"appealAccept"%'
|
||||
AND `content` LIKE '%"form":"/platform/appeal/accept"%'
|
||||
AND `content` NOT LIKE '%"h5form":"/platform/appeal/accept/h5"%'
|
||||
AND `content` NOT LIKE '%"h5form": "/platform/appeal/accept/h5"%';
|
||||
|
||||
UPDATE `wf_process_define`
|
||||
SET `content` = REPLACE(`content`, '"form": "/platform/appeal/execute",', '"form": "/platform/appeal/execute", "h5form": "/platform/appeal/execute/h5",'),
|
||||
`updatedAt` = @now
|
||||
WHERE `name` = 'SSGL'
|
||||
AND `content` LIKE '%"id": "appealExecute"%'
|
||||
AND `content` LIKE '%"form": "/platform/appeal/execute"%'
|
||||
AND `content` NOT LIKE '%"h5form": "/platform/appeal/execute/h5"%';
|
||||
|
||||
UPDATE `wf_process_define`
|
||||
SET `content` = REPLACE(`content`, '"form":"/platform/appeal/execute",', '"form":"/platform/appeal/execute","h5form":"/platform/appeal/execute/h5",'),
|
||||
`updatedAt` = @now
|
||||
WHERE `name` = 'SSGL'
|
||||
AND `content` LIKE '%"id":"appealExecute"%'
|
||||
AND `content` LIKE '%"form":"/platform/appeal/execute"%'
|
||||
AND `content` NOT LIKE '%"h5form":"/platform/appeal/execute/h5"%'
|
||||
AND `content` NOT LIKE '%"h5form": "/platform/appeal/execute/h5"%';
|
||||
|
||||
UPDATE `wf_process_define`
|
||||
SET `h5InstanceUrl` = IFNULL(NULLIF(`h5InstanceUrl`, ''), '/platform/appeal/write/h5'),
|
||||
`h5InstanceViewUrl` = IFNULL(NULLIF(`h5InstanceViewUrl`, ''), '/platform/appeal/mine/h5'),
|
||||
`updatedAt` = @now
|
||||
WHERE `name` = 'SSGL'
|
||||
AND (IFNULL(`h5InstanceUrl`, '') = '' OR IFNULL(`h5InstanceViewUrl`, '') = '');
|
||||
|
||||
UPDATE `wf_process_task` t
|
||||
JOIN `wf_process_instance` ins ON ins.`id` = t.`processInstanceId`
|
||||
JOIN `wf_process_define` def ON def.`id` = ins.`processDefineId`
|
||||
SET t.`h5FormKey` = '/platform/appeal/accept/h5',
|
||||
t.`updatedAt` = @now
|
||||
WHERE def.`name` = 'SSGL'
|
||||
AND t.`taskName` = 'appealAccept'
|
||||
AND IFNULL(t.`h5FormKey`, '') = '';
|
||||
|
||||
UPDATE `wf_process_task` t
|
||||
JOIN `wf_process_instance` ins ON ins.`id` = t.`processInstanceId`
|
||||
JOIN `wf_process_define` def ON def.`id` = ins.`processDefineId`
|
||||
SET t.`h5FormKey` = '/platform/appeal/execute/h5',
|
||||
t.`updatedAt` = @now
|
||||
WHERE def.`name` = 'SSGL'
|
||||
AND t.`taskName` = 'appealExecute'
|
||||
AND IFNULL(t.`h5FormKey`, '') = '';
|
||||
@@ -0,0 +1,252 @@
|
||||
<!--#
|
||||
layout("/layouts/platform_h5.html"){
|
||||
#-->
|
||||
<div id="app" v-cloak>
|
||||
<van-nav-bar @click-left="historyBack" left-arrow left-text="返回" title="申诉受理" placeholder fixed></van-nav-bar>
|
||||
|
||||
<van-sticky offset-top="46px">
|
||||
<van-search
|
||||
v-model="pageForm.searchKeyword"
|
||||
:show-action="false"
|
||||
input-align="left"
|
||||
placeholder="请输入申诉标题搜索"
|
||||
@search="doSearch"
|
||||
></van-search>
|
||||
<van-dropdown-menu :close-on-click-outside="false" :close-on-click-overlay="false">
|
||||
<van-dropdown-item v-model="pageForm.appealTypeId" :options="typeOptions" @change="doSearch"></van-dropdown-item>
|
||||
</van-dropdown-menu>
|
||||
<van-tabs v-model="pageForm.approvalText"
|
||||
@change="(val)=>{this.pageForm.approval = val === '1'; this.doSearch();}">
|
||||
<van-tab title="已审核" name="1"></van-tab>
|
||||
<van-tab title="未审核" name="0"></van-tab>
|
||||
</van-tabs>
|
||||
</van-sticky>
|
||||
|
||||
<table-list api="/platform/appeal/accept/pageData" :page_form.sync="pageForm" @ready="onReady"
|
||||
ref="tableListRef" title="title">
|
||||
<template v-slot="{row}">
|
||||
<table-column label="申诉人">{{row.userName}}</table-column>
|
||||
<table-column label="申诉类型">{{row.appealTypeName}}</table-column>
|
||||
<table-column label="被申诉单位">{{row.defendantUnitName}}</table-column>
|
||||
<table-column label="申请日期">{{formatDate(row.applyDate)}}</table-column>
|
||||
<table-column label="当前节点">{{row.curTaskName}}</table-column>
|
||||
</template>
|
||||
<template #actions="{row}">
|
||||
<div class="action-btn" @click="onView(row)">
|
||||
<i class="fa fa-eye"></i>
|
||||
<span>查看</span>
|
||||
</div>
|
||||
<div class="action-btn" v-if="row.taskState === 10" @click="onDeal(row)">
|
||||
<i class="fa fa-edit"></i>
|
||||
<span>审核</span>
|
||||
</div>
|
||||
<div class="action-btn delete" v-if="row.canRevoke" @click="onRevoke(row)">
|
||||
<i class="fa fa-reply"></i>
|
||||
<span>撤回</span>
|
||||
</div>
|
||||
</template>
|
||||
</table-list>
|
||||
|
||||
<appeal-info ref="appealInfoRef">
|
||||
<div v-if="showApprovalForm" class="appeal-h5-audit-form">
|
||||
<div class="process-title">受理申诉</div>
|
||||
<van-form ref="formRef">
|
||||
<van-field :value="formData.title" label="申诉标题" readonly></van-field>
|
||||
<van-field
|
||||
v-model="formData.decisionDate"
|
||||
name="decisionDate"
|
||||
label="决定日期"
|
||||
placeholder="请选择决定日期"
|
||||
:rules="[{ required: true, message: '请选择决定日期' }]"
|
||||
required
|
||||
readonly
|
||||
is-link
|
||||
@click="showDecisionDatePicker = true"
|
||||
></van-field>
|
||||
<van-popup v-model="showDecisionDatePicker" position="bottom">
|
||||
<van-datetime-picker
|
||||
v-model="decisionDateValue"
|
||||
type="date"
|
||||
title="选择决定日期"
|
||||
@confirm="onDecisionDateConfirm"
|
||||
@cancel="showDecisionDatePicker = false"
|
||||
></van-datetime-picker>
|
||||
</van-popup>
|
||||
<van-field
|
||||
v-model="formData.decisionContent"
|
||||
name="decisionContent"
|
||||
label="决定内容"
|
||||
placeholder="请输入处理决定内容"
|
||||
type="textarea"
|
||||
rows="4"
|
||||
maxlength="2000"
|
||||
show-word-limit
|
||||
:rules="[{ required: true, validator: validateText, message: '请输入处理决定内容' }]"
|
||||
required
|
||||
></van-field>
|
||||
<van-field
|
||||
v-model="formData.legalBasis"
|
||||
name="legalBasis"
|
||||
label="事实理由及依据"
|
||||
placeholder="请输入事实理由及依据"
|
||||
type="textarea"
|
||||
rows="5"
|
||||
maxlength="3000"
|
||||
show-word-limit
|
||||
:rules="[{ required: true, validator: validateText, message: '请输入事实理由及依据' }]"
|
||||
required
|
||||
></van-field>
|
||||
<van-cell title="决定书附件" class="direction-column-cell">
|
||||
<h5-file-upload :value.sync="formData.decisionFiles" :upload_number="5" upload_mode="file" upload_result_category="array" complete_result></h5-file-upload>
|
||||
</van-cell>
|
||||
</van-form>
|
||||
<div class="h5-form-actions">
|
||||
<van-button block @click="closeApprovalDialog">取消</van-button>
|
||||
<van-button type="warning" block @click="doAccept(6)">退回修改</van-button>
|
||||
<van-button type="danger" block @click="doAccept(2)">不予受理</van-button>
|
||||
<van-button type="primary" block @click="doAccept(1)">受理并转执行</van-button>
|
||||
</div>
|
||||
</div>
|
||||
</appeal-info>
|
||||
</div>
|
||||
|
||||
<script nonce="${cspNonce!}">
|
||||
<!--#include("../common/info.js"){}#-->
|
||||
|
||||
const vue = new Vue({
|
||||
el: "#app",
|
||||
store,
|
||||
data() {
|
||||
return {
|
||||
pageForm: {
|
||||
pageNumber: 1,
|
||||
pageSize: 10,
|
||||
totalCount: 0,
|
||||
searchKeyword: null,
|
||||
appealTypeId: null,
|
||||
year: null,
|
||||
approvalText: "0",
|
||||
approval: false
|
||||
},
|
||||
typeOptions: [{text: "全部类型", value: null}],
|
||||
showApprovalForm: false,
|
||||
showDecisionDatePicker: false,
|
||||
decisionDateValue: new Date(),
|
||||
formData: {},
|
||||
currentTaskId: null
|
||||
}
|
||||
},
|
||||
components: {
|
||||
"appeal-info": appealInfo
|
||||
},
|
||||
methods: {
|
||||
onReady() {
|
||||
this.loadTypeOptions()
|
||||
this.doSearch()
|
||||
},
|
||||
loadTypeOptions() {
|
||||
this.$axios.post("/platform/appeal/common/typeOptions").then((res) => {
|
||||
if (res.code === 0) {
|
||||
this.typeOptions = [{text: "全部类型", value: null}]
|
||||
.concat((res.data || []).map((item) => ({text: item.name, value: item.id})))
|
||||
}
|
||||
})
|
||||
},
|
||||
onView(row) {
|
||||
this.showApprovalForm = false
|
||||
this.$refs.appealInfoRef.onOpen(row)
|
||||
},
|
||||
closeApprovalDialog() {
|
||||
this.showApprovalForm = false
|
||||
this.currentTaskId = null
|
||||
this.$refs.appealInfoRef.onClose()
|
||||
},
|
||||
onDeal(row) {
|
||||
this.currentTaskId = row.taskId
|
||||
this.$axios.post("/platform/appeal/accept/queryTask", {taskId: row.taskId}).then((res) => {
|
||||
if (res.code === 0) {
|
||||
this.formData = res.data || row
|
||||
if (!this.formData.decisionDate) {
|
||||
this.$set(this.formData, "decisionDate", this.$moment().format("YYYY-MM-DD"))
|
||||
}
|
||||
this.decisionDateValue = this.formData.decisionDate ? new Date(this.formData.decisionDate) : new Date()
|
||||
this.showApprovalForm = true
|
||||
this.$refs.appealInfoRef.onOpen(this.formData)
|
||||
}
|
||||
})
|
||||
},
|
||||
onDecisionDateConfirm(value) {
|
||||
this.$set(this.formData, "decisionDate", this.$moment(value).format("YYYY-MM-DD"))
|
||||
this.showDecisionDatePicker = false
|
||||
},
|
||||
async doAccept(submitType) {
|
||||
if (submitType !== 6) {
|
||||
try {
|
||||
await this.$refs.formRef.validate()
|
||||
} catch (error) {
|
||||
return
|
||||
}
|
||||
}
|
||||
this.$dialog.confirm({
|
||||
title: "提示",
|
||||
message: "您确定要提交吗?"
|
||||
}).then(() => {
|
||||
this.$axios.post("/platform/appeal/accept/accept", {
|
||||
data: JSON.stringify(this.formData),
|
||||
taskId: this.currentTaskId,
|
||||
submitType
|
||||
}).then((res) => {
|
||||
if (res.code === 0) {
|
||||
this.$toast.success(res.msg)
|
||||
this.closeApprovalDialog()
|
||||
this.doSearch()
|
||||
}
|
||||
})
|
||||
}).catch(() => {
|
||||
})
|
||||
},
|
||||
onRevoke(row) {
|
||||
this.$dialog.confirm({
|
||||
title: "提示",
|
||||
message: "您确定要撤回吗?"
|
||||
}).then(() => {
|
||||
this.$axios.post("/flow/common/revokeTask", {taskId: row.taskId}).then((res) => {
|
||||
if (res.code === 0) {
|
||||
this.$toast.success(res.msg)
|
||||
this.doSearch()
|
||||
}
|
||||
})
|
||||
}).catch(() => {
|
||||
})
|
||||
},
|
||||
doSearch() {
|
||||
this.$nextTick(() => {
|
||||
this.pageForm.pageNumber = 1
|
||||
this.pageForm.totalCount = 0
|
||||
this.$refs.tableListRef.doSearch()
|
||||
})
|
||||
},
|
||||
validateText(value, rule) {
|
||||
return !!((value || "").trim())
|
||||
},
|
||||
formatDate(value) {
|
||||
return value ? this.$moment(value).format("YYYY-MM-DD") : ""
|
||||
}
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<style>
|
||||
.appeal-h5-audit-form {
|
||||
padding-bottom: 12px;
|
||||
}
|
||||
|
||||
.h5-form-actions {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(2, minmax(0, 1fr));
|
||||
gap: 10px;
|
||||
padding: 10px;
|
||||
}
|
||||
</style>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,113 @@
|
||||
const appealInfo = {
|
||||
template: /*language=HTML*/ `
|
||||
<van-action-sheet v-model="visible" title="申诉详情">
|
||||
<div class="detail-container appeal-detail">
|
||||
<van-cell-group title="申诉基础信息">
|
||||
<van-cell title="申诉标题">{{ text(viewData.title) }}</van-cell>
|
||||
<van-cell title="申诉人">{{ text(viewData.userName) }}</van-cell>
|
||||
<van-cell title="性别">{{ text(viewData.sex) }}</van-cell>
|
||||
<van-cell title="出生年月">{{ dateText(viewData.birthday) }}</van-cell>
|
||||
<van-cell title="政治面貌">{{ text(viewData.political) }}</van-cell>
|
||||
<van-cell title="工号">{{ text(viewData.loginName) }}</van-cell>
|
||||
<van-cell title="所在单位">{{ text(viewData.unitName) }}</van-cell>
|
||||
<van-cell title="岗位">{{ text(viewData.positionName) }}</van-cell>
|
||||
<van-cell title="联系电话">{{ text(viewData.mobile) }}</van-cell>
|
||||
<van-cell title="申请日期">{{ dateText(viewData.applyDate) }}</van-cell>
|
||||
<van-cell title="业务状态">{{ text(viewData.state || '草稿') }}</van-cell>
|
||||
<van-cell class="direction-column-cell" title="住址">{{ text(viewData.address) }}</van-cell>
|
||||
<van-cell title="申诉类型">{{ text(viewData.appealTypeName) }}</van-cell>
|
||||
<van-cell title="被申诉单位">{{ text(viewData.defendantUnitName) }}</van-cell>
|
||||
<van-cell class="direction-column-cell" title="被申诉单位地址">{{ text(viewData.defendantAddress) }}</van-cell>
|
||||
<van-cell title="被申诉单位电话">{{ text(viewData.defendantContact) }}</van-cell>
|
||||
<van-cell class="direction-column-cell" title="申诉事项">{{ text(viewData.appealMatter) }}</van-cell>
|
||||
<van-cell class="direction-column-cell" title="申诉理由">{{ text(viewData.reason) }}</van-cell>
|
||||
<van-cell class="direction-column-cell" title="申诉要求">{{ text(viewData.request) }}</van-cell>
|
||||
<van-cell class="direction-column-cell" title="申诉材料附件">
|
||||
<template slot="default">
|
||||
<div v-if="fileList(viewData.files).length">
|
||||
<div v-for="(file,index) in fileList(viewData.files)" :key="index">
|
||||
<a :href="file.url || file.path || file" target="_blank">{{ file.name || file.fileName || ('附件' + (index + 1)) }}</a>
|
||||
</div>
|
||||
</div>
|
||||
<span v-else>暂无</span>
|
||||
</template>
|
||||
</van-cell>
|
||||
<van-cell title="申诉人签名">
|
||||
<van-image v-if="viewData.signature" :src="viewData.signature" class="signature-image"></van-image>
|
||||
<span v-else>暂无</span>
|
||||
</van-cell>
|
||||
</van-cell-group>
|
||||
|
||||
<van-cell-group title="受理与处理决定" v-if="viewData.acceptTime || viewData.decisionContent">
|
||||
<van-cell title="受理人">{{ text(viewData.acceptUserName) }}</van-cell>
|
||||
<van-cell title="受理时间">{{ text(viewData.acceptTime) }}</van-cell>
|
||||
<van-cell title="决定日期">{{ dateText(viewData.decisionDate) }}</van-cell>
|
||||
<van-cell class="direction-column-cell" title="决定内容">{{ text(viewData.decisionContent) }}</van-cell>
|
||||
<van-cell class="direction-column-cell" title="事实理由及依据">{{ text(viewData.legalBasis) }}</van-cell>
|
||||
</van-cell-group>
|
||||
|
||||
<van-cell-group title="执行情况" v-if="viewData.executeTime || viewData.executeContent">
|
||||
<van-cell title="执行人">{{ text(viewData.executeUserName) }}</van-cell>
|
||||
<van-cell title="执行时间">{{ text(viewData.executeTime) }}</van-cell>
|
||||
<van-cell class="direction-column-cell" title="执行情况">{{ text(viewData.executeContent) }}</van-cell>
|
||||
</van-cell-group>
|
||||
|
||||
<template v-for="task in doneTasks">
|
||||
<van-cell-group :title="task.displayName" :key="task.id">
|
||||
<van-cell title="办理用户">
|
||||
{{ task.taskFormData && task.taskFormData.userName ? task.taskFormData.userName : task.ext.initiatorName }}
|
||||
</van-cell>
|
||||
<van-cell title="办理时间">{{ task.finishTime }}</van-cell>
|
||||
<van-cell title="办理结果">
|
||||
<dict-tag :options="dict.type.PROCESS_TASK_SUBMIT_TYPE" :value="task.ext.submitType"></dict-tag>
|
||||
</van-cell>
|
||||
<van-cell title="办理意见" class="direction-column-cell" v-if="task.taskFormData && task.taskFormData.tf_opinion">
|
||||
<div v-html="task.taskFormData.tf_opinion"></div>
|
||||
</van-cell>
|
||||
</van-cell-group>
|
||||
</template>
|
||||
</div>
|
||||
<slot></slot>
|
||||
</van-action-sheet>
|
||||
`,
|
||||
dicts: ["PROCESS_TASK_SUBMIT_TYPE"],
|
||||
data() {
|
||||
return {
|
||||
visible: false,
|
||||
viewData: {},
|
||||
doneTasks: []
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
onOpen(row) {
|
||||
this.viewData = {...row}
|
||||
this.visible = true
|
||||
this.getDoneTasks()
|
||||
},
|
||||
getDoneTasks() {
|
||||
if (!this.viewData.id) {
|
||||
this.doneTasks = []
|
||||
return
|
||||
}
|
||||
this.$axios.post("/flow/common/doneTasks", {bizId: this.viewData.id}).then((res) => {
|
||||
if (res.code === 0) this.doneTasks = res.data || []
|
||||
})
|
||||
},
|
||||
text(value) {
|
||||
return value || "暂无"
|
||||
},
|
||||
dateText(value) {
|
||||
return value ? this.$moment(value).format("YYYY-MM-DD") : "暂无"
|
||||
},
|
||||
fileList(value) {
|
||||
if (!value) return []
|
||||
if (Array.isArray(value)) return value
|
||||
try {
|
||||
const list = JSON.parse(value)
|
||||
return Array.isArray(list) ? list : []
|
||||
} catch (e) {
|
||||
return []
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,212 @@
|
||||
<!--#
|
||||
layout("/layouts/platform_h5.html"){
|
||||
#-->
|
||||
<div id="app" v-cloak>
|
||||
<van-nav-bar @click-left="historyBack" left-arrow left-text="返回" title="申诉执行" placeholder fixed></van-nav-bar>
|
||||
|
||||
<van-sticky offset-top="46px">
|
||||
<van-search
|
||||
v-model="pageForm.searchKeyword"
|
||||
:show-action="false"
|
||||
input-align="left"
|
||||
placeholder="请输入申诉标题搜索"
|
||||
@search="doSearch"
|
||||
></van-search>
|
||||
<van-dropdown-menu :close-on-click-outside="false" :close-on-click-overlay="false">
|
||||
<van-dropdown-item v-model="pageForm.appealTypeId" :options="typeOptions" @change="doSearch"></van-dropdown-item>
|
||||
</van-dropdown-menu>
|
||||
<van-tabs v-model="pageForm.approvalText"
|
||||
@change="(val)=>{this.pageForm.approval = val === '1'; this.doSearch();}">
|
||||
<van-tab title="已审核" name="1"></van-tab>
|
||||
<van-tab title="未审核" name="0"></van-tab>
|
||||
</van-tabs>
|
||||
</van-sticky>
|
||||
|
||||
<table-list api="/platform/appeal/execute/pageData" :page_form.sync="pageForm" @ready="onReady"
|
||||
ref="tableListRef" title="title">
|
||||
<template v-slot="{row}">
|
||||
<table-column label="申诉人">{{row.userName}}</table-column>
|
||||
<table-column label="申诉类型">{{row.appealTypeName}}</table-column>
|
||||
<table-column label="被申诉单位">{{row.defendantUnitName}}</table-column>
|
||||
<table-column label="申请日期">{{formatDate(row.applyDate)}}</table-column>
|
||||
<table-column label="当前节点">{{row.curTaskName}}</table-column>
|
||||
</template>
|
||||
<template #actions="{row}">
|
||||
<div class="action-btn" @click="onView(row)">
|
||||
<i class="fa fa-eye"></i>
|
||||
<span>查看</span>
|
||||
</div>
|
||||
<div class="action-btn" v-if="row.taskState === 10" @click="onDeal(row)">
|
||||
<i class="fa fa-edit"></i>
|
||||
<span>审核</span>
|
||||
</div>
|
||||
<div class="action-btn delete" v-if="row.canRevoke" @click="onRevoke(row)">
|
||||
<i class="fa fa-reply"></i>
|
||||
<span>撤回</span>
|
||||
</div>
|
||||
</template>
|
||||
</table-list>
|
||||
|
||||
<appeal-info ref="appealInfoRef">
|
||||
<div v-if="showApprovalForm" class="appeal-h5-audit-form">
|
||||
<div class="process-title">执行反馈</div>
|
||||
<van-form ref="formRef">
|
||||
<van-field :value="formData.title" label="申诉标题" readonly></van-field>
|
||||
<van-field
|
||||
v-model="formData.executeContent"
|
||||
name="executeContent"
|
||||
label="执行情况"
|
||||
placeholder="请输入执行情况"
|
||||
type="textarea"
|
||||
rows="5"
|
||||
maxlength="2000"
|
||||
show-word-limit
|
||||
:rules="[{ required: true, validator: validateText, message: '请输入执行情况' }]"
|
||||
required
|
||||
></van-field>
|
||||
<van-cell title="执行附件" class="direction-column-cell">
|
||||
<h5-file-upload :value.sync="formData.executeFiles" :upload_number="5" upload_mode="file" upload_result_category="array" complete_result></h5-file-upload>
|
||||
</van-cell>
|
||||
</van-form>
|
||||
<div class="h5-form-actions">
|
||||
<van-button block @click="closeApprovalDialog">取消</van-button>
|
||||
<van-button type="primary" block @click="doExecute">提交</van-button>
|
||||
</div>
|
||||
</div>
|
||||
</appeal-info>
|
||||
</div>
|
||||
|
||||
<script nonce="${cspNonce!}">
|
||||
<!--#include("../common/info.js"){}#-->
|
||||
|
||||
const vue = new Vue({
|
||||
el: "#app",
|
||||
store,
|
||||
data() {
|
||||
return {
|
||||
pageForm: {
|
||||
pageNumber: 1,
|
||||
pageSize: 10,
|
||||
totalCount: 0,
|
||||
searchKeyword: null,
|
||||
appealTypeId: null,
|
||||
year: null,
|
||||
approvalText: "0",
|
||||
approval: false
|
||||
},
|
||||
typeOptions: [{text: "全部类型", value: null}],
|
||||
showApprovalForm: false,
|
||||
formData: {},
|
||||
currentTaskId: null
|
||||
}
|
||||
},
|
||||
components: {
|
||||
"appeal-info": appealInfo
|
||||
},
|
||||
methods: {
|
||||
onReady() {
|
||||
this.loadTypeOptions()
|
||||
this.doSearch()
|
||||
},
|
||||
loadTypeOptions() {
|
||||
this.$axios.post("/platform/appeal/common/typeOptions").then((res) => {
|
||||
if (res.code === 0) {
|
||||
this.typeOptions = [{text: "全部类型", value: null}]
|
||||
.concat((res.data || []).map((item) => ({text: item.name, value: item.id})))
|
||||
}
|
||||
})
|
||||
},
|
||||
onView(row) {
|
||||
this.showApprovalForm = false
|
||||
this.$refs.appealInfoRef.onOpen(row)
|
||||
},
|
||||
closeApprovalDialog() {
|
||||
this.showApprovalForm = false
|
||||
this.currentTaskId = null
|
||||
this.$refs.appealInfoRef.onClose()
|
||||
},
|
||||
onDeal(row) {
|
||||
this.currentTaskId = row.taskId
|
||||
this.$axios.post("/platform/appeal/execute/queryTask", {taskId: row.taskId}).then((res) => {
|
||||
if (res.code === 0) {
|
||||
this.formData = res.data || row
|
||||
this.showApprovalForm = true
|
||||
this.$refs.appealInfoRef.onOpen(this.formData)
|
||||
}
|
||||
})
|
||||
},
|
||||
async doExecute() {
|
||||
try {
|
||||
await this.$refs.formRef.validate()
|
||||
} catch (error) {
|
||||
return
|
||||
}
|
||||
this.$dialog.confirm({
|
||||
title: "提示",
|
||||
message: "您确定要提交吗?"
|
||||
}).then(() => {
|
||||
this.$axios.post("/platform/appeal/execute/execute", {
|
||||
data: JSON.stringify(this.formData),
|
||||
taskId: this.currentTaskId
|
||||
}).then((res) => {
|
||||
if (res.code === 0) {
|
||||
const finishedTaskId = this.currentTaskId
|
||||
this.$toast.success(res.msg)
|
||||
this.closeApprovalDialog()
|
||||
this.removeTaskFromList(finishedTaskId)
|
||||
setTimeout(() => this.doSearch(), 300)
|
||||
}
|
||||
})
|
||||
}).catch(() => {
|
||||
})
|
||||
},
|
||||
onRevoke(row) {
|
||||
this.$dialog.confirm({
|
||||
title: "提示",
|
||||
message: "您确定要撤回吗?"
|
||||
}).then(() => {
|
||||
this.$axios.post("/flow/common/revokeTask", {taskId: row.taskId}).then((res) => {
|
||||
if (res.code === 0) {
|
||||
this.$toast.success(res.msg)
|
||||
this.doSearch()
|
||||
}
|
||||
})
|
||||
}).catch(() => {
|
||||
})
|
||||
},
|
||||
doSearch() {
|
||||
this.$nextTick(() => {
|
||||
this.pageForm.pageNumber = 1
|
||||
this.pageForm.totalCount = 0
|
||||
this.$refs.tableListRef.doSearch()
|
||||
})
|
||||
},
|
||||
removeTaskFromList(taskId) {
|
||||
const tableList = this.$refs.tableListRef
|
||||
if (!tableList || !taskId) return
|
||||
tableList.tableData = (tableList.tableData || []).filter((row) => row.taskId !== taskId)
|
||||
tableList.localPageForm.totalCount = Math.max((tableList.localPageForm.totalCount || 1) - 1, 0)
|
||||
},
|
||||
validateText(value, rule) {
|
||||
return !!((value || "").trim())
|
||||
},
|
||||
formatDate(value) {
|
||||
return value ? this.$moment(value).format("YYYY-MM-DD") : ""
|
||||
}
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<style>
|
||||
.appeal-h5-audit-form {
|
||||
padding-bottom: 12px;
|
||||
}
|
||||
|
||||
.h5-form-actions {
|
||||
display: flex;
|
||||
column-gap: 10px;
|
||||
padding: 10px;
|
||||
}
|
||||
</style>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,142 @@
|
||||
<!--#
|
||||
layout("/layouts/platform_h5.html"){
|
||||
#-->
|
||||
<div id="app" v-cloak>
|
||||
<van-nav-bar title="申诉管理" fixed placeholder left-text="返回" left-arrow @click-left="historyBack"></van-nav-bar>
|
||||
|
||||
<div class="appeal-entry-list">
|
||||
<div class="entry-card" v-if="$auth.hasPermission('h5.appeal.write')" @click="goPage('/platform/appeal/write/h5')">
|
||||
<div class="entry-icon write-icon">
|
||||
<van-icon name="edit"></van-icon>
|
||||
</div>
|
||||
<div class="entry-info">
|
||||
<div class="entry-title">提交申诉</div>
|
||||
<div class="entry-desc">填写并提交个人申诉申请</div>
|
||||
</div>
|
||||
<van-icon name="arrow" class="entry-arrow"></van-icon>
|
||||
</div>
|
||||
|
||||
<div class="entry-card" v-if="$auth.hasPermission('h5.appeal.mine')" @click="goPage('/platform/appeal/mine/h5')">
|
||||
<div class="entry-icon mine-icon">
|
||||
<van-icon name="records"></van-icon>
|
||||
</div>
|
||||
<div class="entry-info">
|
||||
<div class="entry-title">我的申诉</div>
|
||||
<div class="entry-desc">查看本人申诉记录和办理进度</div>
|
||||
</div>
|
||||
<van-icon name="arrow" class="entry-arrow"></van-icon>
|
||||
</div>
|
||||
|
||||
<div class="entry-card" v-if="$auth.hasPermission('h5.appeal.accept')" @click="goPage('/platform/appeal/accept/h5')">
|
||||
<div class="entry-icon accept-icon">
|
||||
<van-icon name="todo-list-o"></van-icon>
|
||||
</div>
|
||||
<div class="entry-info">
|
||||
<div class="entry-title">申诉受理</div>
|
||||
<div class="entry-desc">处理申诉受理环节任务</div>
|
||||
</div>
|
||||
<van-icon name="arrow" class="entry-arrow"></van-icon>
|
||||
</div>
|
||||
|
||||
<div class="entry-card" v-if="$auth.hasPermission('h5.appeal.execute')" @click="goPage('/platform/appeal/execute/h5')">
|
||||
<div class="entry-icon execute-icon">
|
||||
<van-icon name="passed"></van-icon>
|
||||
</div>
|
||||
<div class="entry-info">
|
||||
<div class="entry-title">申诉执行</div>
|
||||
<div class="entry-desc">反馈申诉处理决定执行情况</div>
|
||||
</div>
|
||||
<van-icon name="arrow" class="entry-arrow"></van-icon>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script nonce="${cspNonce!}">
|
||||
new Vue({
|
||||
el: "#app",
|
||||
store,
|
||||
methods: {
|
||||
goPage(url) {
|
||||
this.$pjaxReplace(url)
|
||||
}
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
<style>
|
||||
body {
|
||||
background: #f7f8fa;
|
||||
}
|
||||
|
||||
.appeal-entry-list {
|
||||
padding: 12px;
|
||||
}
|
||||
|
||||
.entry-card {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
min-height: 72px;
|
||||
margin-bottom: 10px;
|
||||
padding: 14px 12px;
|
||||
background: #fff;
|
||||
border-radius: 8px;
|
||||
box-shadow: 0 1px 4px rgba(0, 0, 0, .04);
|
||||
}
|
||||
|
||||
.entry-icon {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
width: 42px;
|
||||
height: 42px;
|
||||
border-radius: 8px;
|
||||
color: #fff;
|
||||
font-size: 23px;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
.write-icon {
|
||||
background: #1989fa;
|
||||
}
|
||||
|
||||
.mine-icon {
|
||||
background: #07c160;
|
||||
}
|
||||
|
||||
.accept-icon {
|
||||
background: #ff976a;
|
||||
}
|
||||
|
||||
.execute-icon {
|
||||
background: #7232dd;
|
||||
}
|
||||
|
||||
.entry-info {
|
||||
flex: 1;
|
||||
min-width: 0;
|
||||
margin-left: 12px;
|
||||
}
|
||||
|
||||
.entry-title {
|
||||
color: #323233;
|
||||
font-size: 16px;
|
||||
font-weight: 600;
|
||||
line-height: 22px;
|
||||
}
|
||||
|
||||
.entry-desc {
|
||||
margin-top: 4px;
|
||||
color: #969799;
|
||||
font-size: 13px;
|
||||
line-height: 18px;
|
||||
}
|
||||
|
||||
.entry-arrow {
|
||||
color: #c8c9cc;
|
||||
font-size: 18px;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
</style>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,120 @@
|
||||
<!--#
|
||||
layout("/layouts/platform_h5.html"){
|
||||
#-->
|
||||
|
||||
<style scoped>
|
||||
.van-cell__value {
|
||||
min-width: 62%;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div id="app">
|
||||
<van-nav-bar title="我的申诉" left-text="返回" right-text="提交" left-arrow @click-left="historyBack" @click-right="onWrite" fixed placeholder></van-nav-bar>
|
||||
|
||||
<van-sticky offset-top="46px">
|
||||
<van-dropdown-menu :close-on-click-outside="false" :close-on-click-overlay="false">
|
||||
<year-van-dropdown-item :num="5" @change="doSearch" v-model="pageForm.year"></year-van-dropdown-item>
|
||||
</van-dropdown-menu>
|
||||
</van-sticky>
|
||||
|
||||
<table-list api="/platform/appeal/mine/pageData" :page_form.sync="pageForm" ref="tableListRef" title="title" @ready="doSearch">
|
||||
<template v-slot="{index,row}">
|
||||
<table-column label="申诉类型">{{row.appealTypeName}}</table-column>
|
||||
<table-column label="被申诉单位">{{row.defendantUnitName}}</table-column>
|
||||
<table-column label="申请日期">{{row.applyDate}}</table-column>
|
||||
<table-column label="业务状态">{{row.state || '草稿'}}</table-column>
|
||||
<table-column label="当前节点">{{row.taskName}}</table-column>
|
||||
</template>
|
||||
<template #actions="{index,row}">
|
||||
<div class="action-btn" @click="onView(row)">
|
||||
<i class="fa fa-eye"></i>
|
||||
<span>查看</span>
|
||||
</div>
|
||||
<div class="action-btn" @click="onEdit(row)" v-if="row.taskKey === 'startTask' || !row.instanceId">
|
||||
<i class="fa fa-edit"></i>
|
||||
<span>编辑</span>
|
||||
</div>
|
||||
<div class="action-btn delete" @click="onRevoke(row)" v-if="row.canRevoke">
|
||||
<i class="fa fa-undo"></i>
|
||||
<span>撤回</span>
|
||||
</div>
|
||||
<div class="action-btn delete" @click="onDelete(row)" v-if="row.taskKey === 'startTask' || !row.instanceId">
|
||||
<i class="fa fa-trash"></i>
|
||||
<span>删除</span>
|
||||
</div>
|
||||
</template>
|
||||
</table-list>
|
||||
|
||||
<appeal-info ref="infoRef"></appeal-info>
|
||||
</div>
|
||||
|
||||
<script nonce="${cspNonce!}">
|
||||
<!--#include("../common/info.js"){}#-->
|
||||
new Vue({
|
||||
el: "#app",
|
||||
store,
|
||||
components: {
|
||||
"appeal-info": appealInfo
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
pageForm: {
|
||||
pageNumber: 1,
|
||||
pageSize: 10,
|
||||
totalCount: 0,
|
||||
year: new Date().getFullYear()
|
||||
}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
onView(row) {
|
||||
this.$refs.infoRef.onOpen(row)
|
||||
},
|
||||
onWrite() {
|
||||
this.$pjaxReplace("/platform/appeal/write/h5")
|
||||
},
|
||||
onEdit(row) {
|
||||
this.$pjaxReplace("/platform/appeal/write/h5?taskId=" + (row.startTaskId || "") + "&id=" + row.id)
|
||||
},
|
||||
onRevoke(row) {
|
||||
this.$dialog.confirm({
|
||||
title: "提示",
|
||||
message: "您确定要撤回吗?"
|
||||
}).then(() => {
|
||||
this.$axios.post("/flow/common/revokeTask", {taskId: row.startTaskId}).then((res) => {
|
||||
if (res.code === 0) {
|
||||
this.$toast(res.msg)
|
||||
this.doSearch()
|
||||
}
|
||||
})
|
||||
})
|
||||
},
|
||||
onDelete(row) {
|
||||
this.$dialog.confirm({
|
||||
title: "提示",
|
||||
message: "确定要删除此申诉吗?"
|
||||
}).then(() => {
|
||||
this.$axios.post("/platform/appeal/mine/delete", {id: row.id}).then((res) => {
|
||||
if (res.code === 0) {
|
||||
this.$toast.success(res.msg)
|
||||
this.doSearch()
|
||||
} else {
|
||||
this.$toast.fail(res.msg)
|
||||
}
|
||||
})
|
||||
}).catch(() => {})
|
||||
},
|
||||
doSearch() {
|
||||
this.$nextTick(() => {
|
||||
this.pageForm.pageNumber = 1
|
||||
this.pageForm.totalCount = 0
|
||||
this.$refs.tableListRef.doSearch()
|
||||
})
|
||||
}
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,225 @@
|
||||
<!--#
|
||||
layout("/layouts/platform_h5.html"){
|
||||
#-->
|
||||
|
||||
<style scoped>
|
||||
.appeal-actions {
|
||||
display: flex;
|
||||
gap: 10px;
|
||||
padding: 14px 16px 24px;
|
||||
background: #f7f8fa;
|
||||
}
|
||||
|
||||
.appeal-actions .van-button {
|
||||
flex: 1;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div id="app">
|
||||
<van-nav-bar title="提交申诉" left-text="返回" left-arrow @click-left="historyBack" fixed placeholder></van-nav-bar>
|
||||
|
||||
<van-form ref="formRef" class="form-container">
|
||||
<van-cell-group title="申诉人基本信息" class="form-section">
|
||||
<van-field label="申诉人" v-model="formData.userName" readonly required :rules="[{required:true}]"></van-field>
|
||||
<van-field label="性别" v-model="formData.sex" placeholder="请输入性别" required :rules="[{required:true}]"></van-field>
|
||||
<van-field label="出生年月" v-model="formData.birthday" type="date" placeholder="请选择出生年月" required :rules="[{required:true}]"></van-field>
|
||||
<van-field label="政治面貌" v-model="formData.political" placeholder="请输入政治面貌" required :rules="[{required:true}]"></van-field>
|
||||
<van-field label="工号" v-model="formData.loginName" readonly></van-field>
|
||||
<van-field label="所在单位" v-model="formData.unitName" readonly></van-field>
|
||||
<van-field label="岗位" v-model="formData.positionName" placeholder="请输入岗位" required :rules="[{required:true}]"></van-field>
|
||||
<van-field label="联系电话" name="mobile" v-model="formData.mobile" placeholder="请输入手机或办公电话" required :rules="phoneRules"></van-field>
|
||||
<van-field label="申请日期" v-model="formData.applyDate" type="date" placeholder="请选择申请日期" required :rules="[{required:true}]"></van-field>
|
||||
<van-field class="direction-column-field" label="住址" v-model="formData.address" placeholder="请输入住址" required :rules="[{required:true}]" type="textarea" rows="2" autosize></van-field>
|
||||
</van-cell-group>
|
||||
|
||||
<van-cell-group title="申诉事项" class="form-section">
|
||||
<van-field
|
||||
label="申诉类型"
|
||||
v-model="formData.appealTypeName"
|
||||
placeholder="请选择申诉类型"
|
||||
required
|
||||
readonly
|
||||
is-link
|
||||
:rules="[{required:true}]"
|
||||
@click="showTypePopup = true"
|
||||
></van-field>
|
||||
<van-field label="申诉标题" v-model="formData.title" placeholder="请输入申诉标题" required :rules="[{required:true}]" maxlength="200"></van-field>
|
||||
<van-field
|
||||
label="被申诉单位"
|
||||
v-model="formData.defendantUnitName"
|
||||
placeholder="请选择被申诉单位"
|
||||
required
|
||||
readonly
|
||||
is-link
|
||||
:rules="[{required:true}]"
|
||||
@click="showUnitPopup = true"
|
||||
></van-field>
|
||||
<van-field class="direction-column-field" label="被申诉单位地址" v-model="formData.defendantAddress" placeholder="请输入被申诉单位地址" required :rules="[{required:true}]" type="textarea" rows="2" autosize></van-field>
|
||||
<van-field label="被申诉单位电话" name="defendantContact" v-model="formData.defendantContact" placeholder="请输入联系电话" required :rules="phoneRules"></van-field>
|
||||
<van-field class="direction-column-field" label="申诉事项" v-model="formData.appealMatter" placeholder="请输入申诉事项" required :rules="[{required:true, validator: validateText}]" type="textarea" rows="4" maxlength="1000" show-word-limit autosize></van-field>
|
||||
<van-field class="direction-column-field" label="申诉理由" v-model="formData.reason" placeholder="请输入申诉理由" required :rules="[{required:true, validator: validateText}]" type="textarea" rows="5" maxlength="2000" show-word-limit autosize></van-field>
|
||||
<van-field class="direction-column-field" label="申诉要求" v-model="formData.request" placeholder="请输入申诉要求" required :rules="[{required:true, validator: validateText}]" type="textarea" rows="4" maxlength="1000" show-word-limit autosize></van-field>
|
||||
</van-cell-group>
|
||||
|
||||
<van-cell-group title="申诉材料附件" class="form-section">
|
||||
<van-field class="direction-column-field" label="" required :rules="[{validator: validateFiles, message:'请上传申诉材料附件'}]">
|
||||
<template #input>
|
||||
<h5-file-upload :value.sync="formData.files" :upload_number="5" upload_mode="file" upload_result_category="array" complete_result></h5-file-upload>
|
||||
</template>
|
||||
</van-field>
|
||||
</van-cell-group>
|
||||
|
||||
<van-cell-group title="申诉人签名" class="form-section">
|
||||
<van-field class="direction-column-field" label="" required :rules="[{validator: validateSignature, message:'请完成申诉人签名'}]">
|
||||
<template #input>
|
||||
<h5-signature v-model="formData.signature"></h5-signature>
|
||||
</template>
|
||||
</van-field>
|
||||
</van-cell-group>
|
||||
|
||||
<div class="appeal-actions">
|
||||
<van-button native-type="button" @click="onSave" round type="info" plain>保存</van-button>
|
||||
<van-button native-type="button" @click="onSubmit" round type="info">{{ hasTaskId() ? '提交' : '提交申诉' }}</van-button>
|
||||
</div>
|
||||
</van-form>
|
||||
|
||||
<van-popup v-model="showTypePopup" position="bottom">
|
||||
<van-picker show-toolbar :columns="typeOptions.map(i => i.name)" @confirm="onTypeConfirm" @cancel="showTypePopup = false"></van-picker>
|
||||
</van-popup>
|
||||
<van-popup v-model="showUnitPopup" position="bottom">
|
||||
<van-picker show-toolbar :columns="unitOptions.map(i => i.name)" @confirm="onUnitConfirm" @cancel="showUnitPopup = false"></van-picker>
|
||||
</van-popup>
|
||||
</div>
|
||||
|
||||
<script nonce="${cspNonce!}">
|
||||
new Vue({
|
||||
el: "#app",
|
||||
store,
|
||||
data() {
|
||||
return {
|
||||
taskId: null,
|
||||
formData: {
|
||||
files: []
|
||||
},
|
||||
typeOptions: [],
|
||||
unitOptions: [],
|
||||
showTypePopup: false,
|
||||
showUnitPopup: false,
|
||||
phoneRules: [
|
||||
{required: true, message: "请输入联系电话"},
|
||||
{validator: this.validatePhone, message: "请输入正确的联系电话"}
|
||||
]
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
queryParam(name) {
|
||||
return new URLSearchParams(window.location.search).get(name)
|
||||
},
|
||||
hasTaskId() {
|
||||
return !!this.taskId && this.taskId !== "undefined" && this.taskId !== "null"
|
||||
},
|
||||
validatePhone(value) {
|
||||
if (!value) return true
|
||||
return /^((1[3-9]\d{9})|(0\d{2,3}-?\d{7,8})|(\d{6,12}))$/.test(String(value).trim())
|
||||
},
|
||||
validateText(value) {
|
||||
return !!(value || "").trim()
|
||||
},
|
||||
validateFiles() {
|
||||
return this.formData.files && this.formData.files.length > 0
|
||||
},
|
||||
validateSignature() {
|
||||
return !!this.formData.signature
|
||||
},
|
||||
loadOptions() {
|
||||
this.$axios.post("/platform/appeal/common/typeOptions").then((res) => {
|
||||
if (res.code === 0) this.typeOptions = res.data || []
|
||||
})
|
||||
this.$axios.post("/platform/appeal/common/unitOptions").then((res) => {
|
||||
if (res.code === 0) this.unitOptions = res.data || []
|
||||
})
|
||||
},
|
||||
loadCurrentUser() {
|
||||
this.$axios.post("/platform/appeal/write/currentUserInfo").then((res) => {
|
||||
if (res.code === 0) {
|
||||
this.formData = Object.assign({files: []}, res.data, this.formData)
|
||||
this.normalizeDates()
|
||||
}
|
||||
})
|
||||
},
|
||||
loadInfo(id) {
|
||||
this.$axios.post("/platform/appeal/write/info", {id}).then((res) => {
|
||||
if (res.code === 0 && res.data) {
|
||||
this.formData = Object.assign({files: []}, res.data)
|
||||
this.normalizeDates()
|
||||
}
|
||||
})
|
||||
},
|
||||
normalizeDates() {
|
||||
;["birthday", "applyDate"].forEach((key) => {
|
||||
if (this.formData[key]) {
|
||||
this.$set(this.formData, key, this.$moment(this.formData[key]).format("YYYY-MM-DD"))
|
||||
}
|
||||
})
|
||||
},
|
||||
onTypeConfirm(value, index) {
|
||||
const item = this.typeOptions[index]
|
||||
this.$set(this.formData, "appealTypeId", item ? item.id : "")
|
||||
this.$set(this.formData, "appealTypeName", value || "")
|
||||
this.showTypePopup = false
|
||||
},
|
||||
onUnitConfirm(value, index) {
|
||||
const item = this.unitOptions[index]
|
||||
this.$set(this.formData, "defendantUnitId", item ? item.id : "")
|
||||
this.$set(this.formData, "defendantUnitName", value || "")
|
||||
this.$set(this.formData, "defendantAddress", item ? item.address : this.formData.defendantAddress)
|
||||
this.$set(this.formData, "defendantContact", item ? item.telephone : this.formData.defendantContact)
|
||||
this.showUnitPopup = false
|
||||
},
|
||||
onSave() {
|
||||
this.$dialog.confirm({
|
||||
title: "提示",
|
||||
message: "您确定保存吗?"
|
||||
}).then(() => {
|
||||
this.$axios.post("/platform/appeal/write/save", {data: JSON.stringify(this.formData)}).then((res) => {
|
||||
if (res.code === 0) {
|
||||
this.$toast(res.msg)
|
||||
this.formData = Object.assign({files: []}, res.data)
|
||||
this.normalizeDates()
|
||||
}
|
||||
})
|
||||
})
|
||||
},
|
||||
onSubmit() {
|
||||
this.$refs.formRef.validate().then(() => {
|
||||
const url = this.hasTaskId() ? "/platform/appeal/write/submitAgain" : "/platform/appeal/write/submit"
|
||||
this.$dialog.confirm({
|
||||
title: "提示",
|
||||
message: "您确定提交该申诉吗?"
|
||||
}).then(() => {
|
||||
this.$axios.post(url, {data: JSON.stringify(this.formData), taskId: this.taskId}).then((res) => {
|
||||
if (res.code === 0) {
|
||||
this.$toast(res.msg)
|
||||
this.$pjaxReplace("/platform/appeal/mine/h5")
|
||||
}
|
||||
})
|
||||
})
|
||||
})
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.taskId = this.queryParam("taskId")
|
||||
const id = this.queryParam("id")
|
||||
this.loadOptions()
|
||||
if (id) {
|
||||
this.loadInfo(id)
|
||||
} else {
|
||||
this.loadCurrentUser()
|
||||
}
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
Reference in New Issue
Block a user