Merge branch 'main' of https://dd3skj.picp.vip/JyuHsin/zhgh_jshvc
This commit is contained in:
+14
@@ -0,0 +1,14 @@
|
|||||||
|
package com.budwk.app.base.event.flow.jumptofirsttask;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @version 1.0
|
||||||
|
* @Author FKY
|
||||||
|
* @name:FlowJumpToFirstTaskNodeListener
|
||||||
|
* @Date 2025/12/20 14:10
|
||||||
|
* @注释
|
||||||
|
*/
|
||||||
|
public interface FlowJumpToFirstTaskNodeListener {
|
||||||
|
|
||||||
|
void receive(Long processTaskId);
|
||||||
|
|
||||||
|
}
|
||||||
+25
@@ -0,0 +1,25 @@
|
|||||||
|
package com.budwk.app.base.event.flow.jumptofirsttask;
|
||||||
|
|
||||||
|
import com.budwk.app.base.event.user.UserChangeEventListener;
|
||||||
|
import com.budwk.app.base.utils.AppIocUtil;
|
||||||
|
import org.nutz.ioc.Ioc;
|
||||||
|
import org.nutz.mvc.Mvcs;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @version 1.0
|
||||||
|
* @Author FKY
|
||||||
|
* @name:FlowJumpToFirstTaskNodeEvent
|
||||||
|
* @Date 2025/12/20 14:09
|
||||||
|
* @注释
|
||||||
|
*/
|
||||||
|
public class FlowJumpToFirstTaskNodePublisher {
|
||||||
|
|
||||||
|
public static void broadcast(Long processTaskId) {
|
||||||
|
String[] names = Mvcs.getIoc().getNamesByType(FlowJumpToFirstTaskNodeListener.class);
|
||||||
|
for (String listener : names) {
|
||||||
|
FlowJumpToFirstTaskNodeListener listenerBean = Mvcs.getIoc().get(FlowJumpToFirstTaskNodeListener.class, listener);
|
||||||
|
listenerBean.receive(processTaskId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -48,6 +48,7 @@ public class FlowTodoCenterController {
|
|||||||
t.displayName AS taskName,
|
t.displayName AS taskName,
|
||||||
t.taskState,
|
t.taskState,
|
||||||
t.formKey,
|
t.formKey,
|
||||||
|
t.h5FormKey,
|
||||||
t.createdAt,
|
t.createdAt,
|
||||||
t.finishTime,
|
t.finishTime,
|
||||||
t.variable,
|
t.variable,
|
||||||
@@ -92,6 +93,7 @@ public class FlowTodoCenterController {
|
|||||||
t.displayName AS taskName,
|
t.displayName AS taskName,
|
||||||
t.taskState,
|
t.taskState,
|
||||||
t.formKey,
|
t.formKey,
|
||||||
|
t.h5FormKey,
|
||||||
t.createdAt,
|
t.createdAt,
|
||||||
t.finishTime,
|
t.finishTime,
|
||||||
t.variable,
|
t.variable,
|
||||||
@@ -140,7 +142,9 @@ public class FlowTodoCenterController {
|
|||||||
ins.createdAt,
|
ins.createdAt,
|
||||||
ins.variable ->> '$.instanceName' AS instanceName,
|
ins.variable ->> '$.instanceName' AS instanceName,
|
||||||
GROUP_CONCAT(DISTINCT t.displayName) as taskName,
|
GROUP_CONCAT(DISTINCT t.displayName) as taskName,
|
||||||
cat.`name` categoryName
|
cat.`name` categoryName,
|
||||||
|
t.formKey,
|
||||||
|
t.h5FormKey
|
||||||
FROM
|
FROM
|
||||||
wf_process_instance ins
|
wf_process_instance ins
|
||||||
LEFT JOIN wf_process_task t ON t.processInstanceId = ins.id and t.taskState = 10
|
LEFT JOIN wf_process_task t ON t.processInstanceId = ins.id and t.taskState = 10
|
||||||
|
|||||||
@@ -41,6 +41,8 @@ public class TaskModel extends NodeModel {
|
|||||||
*/
|
*/
|
||||||
private String countersignCompletionCondition;
|
private String countersignCompletionCondition;
|
||||||
|
|
||||||
|
private String h5form;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void exec(Execution execution) {
|
public void exec(Execution execution) {
|
||||||
// 执行任务节点自定义执行逻辑
|
// 执行任务节点自定义执行逻辑
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ public interface NodeParser {
|
|||||||
String EXPR_KEY = "expr"; // 表达式key
|
String EXPR_KEY = "expr"; // 表达式key
|
||||||
String HANDLE_CLASS_KEY = "handleClass"; // 表达式处理类
|
String HANDLE_CLASS_KEY = "handleClass"; // 表达式处理类
|
||||||
String FORM_KEY = "form"; // 表单标识
|
String FORM_KEY = "form"; // 表单标识
|
||||||
|
String H5_FORM_KEY = "h5form"; // 表单标识
|
||||||
String ASSIGNEE_KEY = "assignee"; // 参与人
|
String ASSIGNEE_KEY = "assignee"; // 参与人
|
||||||
String ASSIGNMENT_HANDLE_KEY = "assignmentHandler"; // 参与人处理类
|
String ASSIGNMENT_HANDLE_KEY = "assignmentHandler"; // 参与人处理类
|
||||||
String TASK_TYPE_KEY = "taskType"; // 任务类型(主办/协办)
|
String TASK_TYPE_KEY = "taskType"; // 任务类型(主办/协办)
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ public class TaskParser extends AbstractNodeParser {
|
|||||||
TaskModel taskModel = (TaskModel)nodeModel;
|
TaskModel taskModel = (TaskModel)nodeModel;
|
||||||
Dict properties = lfNode.getProperties();
|
Dict properties = lfNode.getProperties();
|
||||||
taskModel.setForm(properties.getStr(FORM_KEY));
|
taskModel.setForm(properties.getStr(FORM_KEY));
|
||||||
|
taskModel.setH5form(properties.getStr(H5_FORM_KEY));
|
||||||
taskModel.setAssignee(properties.getStr(ASSIGNEE_KEY));
|
taskModel.setAssignee(properties.getStr(ASSIGNEE_KEY));
|
||||||
taskModel.setAssignmentHandler(properties.getStr(ASSIGNMENT_HANDLE_KEY));
|
taskModel.setAssignmentHandler(properties.getStr(ASSIGNMENT_HANDLE_KEY));
|
||||||
taskModel.setTaskType(ProcessTaskTypeEnum.codeOf(properties.get(TASK_TYPE_KEY)));
|
taskModel.setTaskType(ProcessTaskTypeEnum.codeOf(properties.get(TASK_TYPE_KEY)));
|
||||||
|
|||||||
@@ -66,6 +66,10 @@ public class ProcessTask extends BaseModel {
|
|||||||
@Column
|
@Column
|
||||||
private String formKey;
|
private String formKey;
|
||||||
|
|
||||||
|
@Comment("h5任务处理表单KEY")
|
||||||
|
@Column
|
||||||
|
private String h5FormKey;
|
||||||
|
|
||||||
@Comment("父任务ID")
|
@Comment("父任务ID")
|
||||||
@Column
|
@Column
|
||||||
private Long taskParentId;
|
private Long taskParentId;
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package com.budwk.app.flow.service;
|
|||||||
|
|
||||||
import cn.hutool.core.lang.Dict;
|
import cn.hutool.core.lang.Dict;
|
||||||
import cn.hutool.core.util.ObjectUtil;
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
|
import com.budwk.app.base.event.flow.jumptofirsttask.FlowJumpToFirstTaskNodePublisher;
|
||||||
import com.budwk.app.flow.constant.FlowConst;
|
import com.budwk.app.flow.constant.FlowConst;
|
||||||
import com.budwk.app.flow.engine.FlowEngine;
|
import com.budwk.app.flow.engine.FlowEngine;
|
||||||
import com.budwk.app.flow.enums.ProcessSubmitTypeEnum;
|
import com.budwk.app.flow.enums.ProcessSubmitTypeEnum;
|
||||||
@@ -52,6 +53,10 @@ public class FlowCommonService {
|
|||||||
} else if (ObjectUtil.equals(submitType, ProcessSubmitTypeEnum.ROLLBACK_TO_OPERATOR.getCode())) {
|
} else if (ObjectUtil.equals(submitType, ProcessSubmitTypeEnum.ROLLBACK_TO_OPERATOR.getCode())) {
|
||||||
// 退回发起人
|
// 退回发起人
|
||||||
flowEngine.executeAndJumpToFirstTaskNode(processTaskId, operator, args);
|
flowEngine.executeAndJumpToFirstTaskNode(processTaskId, operator, args);
|
||||||
|
|
||||||
|
// 退回发起人发送订阅消息,执行相关操作
|
||||||
|
FlowJumpToFirstTaskNodePublisher.broadcast(processTaskId);
|
||||||
|
|
||||||
} else if (ObjectUtil.equals(submitType, ProcessSubmitTypeEnum.COUNTERSIGN_DISAGREE.getCode())) {
|
} else if (ObjectUtil.equals(submitType, ProcessSubmitTypeEnum.COUNTERSIGN_DISAGREE.getCode())) {
|
||||||
// 会签不同意,追加不同意标识
|
// 会签不同意,追加不同意标识
|
||||||
args.put(FlowConst.COUNTERSIGN_DISAGREE_FLAG, 1);
|
args.put(FlowConst.COUNTERSIGN_DISAGREE_FLAG, 1);
|
||||||
|
|||||||
@@ -174,6 +174,7 @@ public class ProcessTaskServiceImpl extends BaseServiceImpl<ProcessTask> impleme
|
|||||||
processTask.setTaskState(ProcessTaskStateEnum.DOING.getCode());
|
processTask.setTaskState(ProcessTaskStateEnum.DOING.getCode());
|
||||||
processTask.setTaskType(taskModel.getTaskType().getCode());
|
processTask.setTaskType(taskModel.getTaskType().getCode());
|
||||||
processTask.setFormKey(taskModel.getForm());
|
processTask.setFormKey(taskModel.getForm());
|
||||||
|
processTask.setH5FormKey(taskModel.getH5form());
|
||||||
processTask.setProcessInstanceId(execution.getProcessInstanceId());
|
processTask.setProcessInstanceId(execution.getProcessInstanceId());
|
||||||
|
|
||||||
// 增加是否为第一个任务节点标识
|
// 增加是否为第一个任务节点标识
|
||||||
|
|||||||
@@ -300,7 +300,7 @@ public class SysUnitController {
|
|||||||
)
|
)
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
List<Tree<String>> treeList = TreeUtil.build(nodeList, StrUtil.blankToDefault(pid, "0000"));
|
List<Tree<String>> treeList = TreeUtil.build(nodeList, StrUtil.blankToDefault(pid, "0"));
|
||||||
|
|
||||||
// NutMap menuMap = NutMap.NEW();
|
// NutMap menuMap = NutMap.NEW();
|
||||||
// for (Sys_unit unit : list) {
|
// for (Sys_unit unit : list) {
|
||||||
@@ -326,7 +326,7 @@ public class SysUnitController {
|
|||||||
public Object addDo(@Param("..") Sys_unit unit, @Param("parentId") String parentId, HttpServletRequest req) {
|
public Object addDo(@Param("..") Sys_unit unit, @Param("parentId") String parentId, HttpServletRequest req) {
|
||||||
try {
|
try {
|
||||||
if ("root".equals(parentId)) {
|
if ("root".equals(parentId)) {
|
||||||
parentId = "";
|
parentId = "0";
|
||||||
}
|
}
|
||||||
unit.setCreatedBy(SecurityUtil.getUserId());
|
unit.setCreatedBy(SecurityUtil.getUserId());
|
||||||
unit.setUnitType("用户自建");
|
unit.setUnitType("用户自建");
|
||||||
|
|||||||
@@ -60,6 +60,7 @@ public class SysV4ServController {
|
|||||||
cnd.where().andLike("t.disPlayName", keyword);
|
cnd.where().andLike("t.disPlayName", keyword);
|
||||||
}
|
}
|
||||||
cnd.andEX("t.category", "=", categoryId);
|
cnd.andEX("t.category", "=", categoryId);
|
||||||
|
cnd.andEX("t.pinyinName", "=", letter);
|
||||||
sql.setCondition(cnd);
|
sql.setCondition(cnd);
|
||||||
List<NutMap> list = sysMenuService.listMap(sql);
|
List<NutMap> list = sysMenuService.listMap(sql);
|
||||||
return Result.success(list);
|
return Result.success(list);
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ public class CspProcessor extends AbstractProcessor {
|
|||||||
"style-src * 'unsafe-inline' data:; " +
|
"style-src * 'unsafe-inline' data:; " +
|
||||||
"img-src 'self' data: https:; " +
|
"img-src 'self' data: https:; " +
|
||||||
"font-src * data: https:; " +
|
"font-src * data: https:; " +
|
||||||
"connect-src 'self' https:; " +
|
"connect-src 'self' https: webpack:; " +
|
||||||
"frame-ancestors 'self'; " +
|
"frame-ancestors 'self'; " +
|
||||||
"object-src 'self';";
|
"object-src 'self';";
|
||||||
|
|
||||||
|
|||||||
+1
-7
@@ -37,6 +37,7 @@ import org.nutz.dao.Cnd;
|
|||||||
import org.nutz.dao.Dao;
|
import org.nutz.dao.Dao;
|
||||||
import org.nutz.dao.Sqls;
|
import org.nutz.dao.Sqls;
|
||||||
import org.nutz.dao.sql.Sql;
|
import org.nutz.dao.sql.Sql;
|
||||||
|
import org.nutz.dao.util.cri.SqlExpressionGroup;
|
||||||
import org.nutz.ioc.aop.Aop;
|
import org.nutz.ioc.aop.Aop;
|
||||||
import org.nutz.ioc.loader.annotation.Inject;
|
import org.nutz.ioc.loader.annotation.Inject;
|
||||||
import org.nutz.ioc.loader.annotation.IocBean;
|
import org.nutz.ioc.loader.annotation.IocBean;
|
||||||
@@ -125,13 +126,6 @@ public class ActivityDeclareMineController {
|
|||||||
""");
|
""");
|
||||||
Cnd cnd = Cnd.NEW();
|
Cnd cnd = Cnd.NEW();
|
||||||
pageParam.buildSearch(cnd, "info.");
|
pageParam.buildSearch(cnd, "info.");
|
||||||
if (!AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_MEMBER_ADMIN.name())) {
|
|
||||||
if (AuthUtil.hasRole(RoleConstant.BRANCH_UNION_CHAIRMAN.name())) {
|
|
||||||
cnd.and("info.unionId", "=", SecurityUtil.getUnionId());
|
|
||||||
} else {
|
|
||||||
cnd.and("info.userId", "=", SecurityUtil.getUserId());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (StrUtil.isAllBlank(pageParam.getPageOrderName(), pageParam.getPageOrderBy())) {
|
if (StrUtil.isAllBlank(pageParam.getPageOrderName(), pageParam.getPageOrderBy())) {
|
||||||
cnd.desc("info.applyTime");
|
cnd.desc("info.applyTime");
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
+8
-5
@@ -51,15 +51,18 @@ public class CommonPageParam extends PageForm {
|
|||||||
if (!AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_ADMIN.name())) {
|
if (!AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_ADMIN.name())) {
|
||||||
|
|
||||||
cnd.and(prefix + "declareUnitName", "<>", ActivityDeclareReimbursement.SCHOOL_UNION.name());
|
cnd.and(prefix + "declareUnitName", "<>", ActivityDeclareReimbursement.SCHOOL_UNION.name());
|
||||||
|
SqlExpressionGroup group = new SqlExpressionGroup();
|
||||||
if (AuthUtil.hasRoleOr(RoleConstant.BRANCH_UNION_CHAIRMAN.name(),
|
if (AuthUtil.hasRoleOr(RoleConstant.BRANCH_UNION_CHAIRMAN.name(),
|
||||||
RoleConstant.BRANCH_UNION_ADMIN.name(),
|
RoleConstant.BRANCH_UNION_ADMIN.name(),
|
||||||
RoleConstant.BRANCH_UNION_OPERATOR.name())) {
|
RoleConstant.BRANCH_UNION_OPERATOR.name())) {
|
||||||
cnd.and(prefix + "unionid", "=", SecurityUtil.getUnionId());
|
group.or(prefix + "unionid", "=", SecurityUtil.getUnionId());
|
||||||
} else if (AuthUtil.hasRoleOr(RoleConstant.CLUB_MANAGER.name(), RoleConstant.CLUB_PRESIDENT.name())) {
|
|
||||||
// cnd.and(prefix + "clubId", "=", );
|
|
||||||
} else {
|
|
||||||
cnd.andEX(prefix + "userId", "=", SecurityUtil.getUserId());
|
|
||||||
}
|
}
|
||||||
|
if (AuthUtil.hasRoleOr(RoleConstant.CLUB_MANAGER.name(), RoleConstant.CLUB_PRESIDENT.name())) {
|
||||||
|
// cnd.and(prefix + "clubId", "=", );
|
||||||
|
group.or(prefix + "clubId", "in", SecurityUtil.getClubIds());
|
||||||
|
}
|
||||||
|
group.or(prefix + "userId", "=", SecurityUtil.getUserId());
|
||||||
|
cnd.and(group);
|
||||||
} else {
|
} else {
|
||||||
cnd.andEX(prefix + "unionId", "=", this.getUnionId());
|
cnd.andEX(prefix + "unionId", "=", this.getUnionId());
|
||||||
cnd.andEX(prefix + "clubId", "=", this.getClubId());
|
cnd.andEX(prefix + "clubId", "=", this.getClubId());
|
||||||
|
|||||||
+1
@@ -91,6 +91,7 @@ public class ActivityBudgetSchoolAuditController {
|
|||||||
cnd.and("t.taskName", "=", "b6f29037-972d-4b97-8677-c3b3672ef0dc");
|
cnd.and("t.taskName", "=", "b6f29037-972d-4b97-8677-c3b3672ef0dc");
|
||||||
// cnd.and("ta.actorId", "in", List.of(SecurityUtil.getUserId()));
|
// cnd.and("ta.actorId", "in", List.of(SecurityUtil.getUserId()));
|
||||||
cnd.andEX("info.unionId", "=", unionId);
|
cnd.andEX("info.unionId", "=", unionId);
|
||||||
|
cnd.andEX("info.clubId", "=", clubId);
|
||||||
cnd.andEX("info.outlayManageSource", "=", outlayManageSource);
|
cnd.andEX("info.outlayManageSource", "=", outlayManageSource);
|
||||||
cnd.andEX("info.budgetReimburseType", "=", budgetReimburseType);
|
cnd.andEX("info.budgetReimburseType", "=", budgetReimburseType);
|
||||||
|
|
||||||
|
|||||||
+1
@@ -91,6 +91,7 @@ public class ActivityBudgetSchoolPrincipalController {
|
|||||||
cnd.and("t.taskName", "=", "0b6aea8c-9d24-4d6d-b10b-4c930c919093");
|
cnd.and("t.taskName", "=", "0b6aea8c-9d24-4d6d-b10b-4c930c919093");
|
||||||
cnd.and("ta.actorId", "in", List.of(SecurityUtil.getUserId()));
|
cnd.and("ta.actorId", "in", List.of(SecurityUtil.getUserId()));
|
||||||
cnd.andEX("info.unionId", "=", unionId);
|
cnd.andEX("info.unionId", "=", unionId);
|
||||||
|
cnd.andEX("info.clubId", "=", clubId);
|
||||||
cnd.andEX("info.outlayManageSource", "=", outlayManageSource);
|
cnd.andEX("info.outlayManageSource", "=", outlayManageSource);
|
||||||
cnd.andEX("info.budgetReimburseType", "=", budgetReimburseType);
|
cnd.andEX("info.budgetReimburseType", "=", budgetReimburseType);
|
||||||
|
|
||||||
|
|||||||
+6
-2
@@ -2,6 +2,7 @@ package com.budwk.app.zhgh.democratic.proposal.controller.common;
|
|||||||
|
|
||||||
import cn.dev33.satoken.annotation.SaCheckLogin;
|
import cn.dev33.satoken.annotation.SaCheckLogin;
|
||||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||||
|
import cn.hutool.core.util.StrUtil;
|
||||||
import com.budwk.app.base.result.Result;
|
import com.budwk.app.base.result.Result;
|
||||||
import com.budwk.app.zhgh.democratic.proposal.models.ProposalConfig;
|
import com.budwk.app.zhgh.democratic.proposal.models.ProposalConfig;
|
||||||
import com.budwk.app.zhgh.democratic.proposal.models.ProposalType;
|
import com.budwk.app.zhgh.democratic.proposal.models.ProposalType;
|
||||||
@@ -49,8 +50,11 @@ public class ProposalCommonController {
|
|||||||
@At
|
@At
|
||||||
@SaCheckLogin
|
@SaCheckLogin
|
||||||
@ApiOperation("查询全部的教代会")
|
@ApiOperation("查询全部的教代会")
|
||||||
public Result listSession() {
|
public Result listSession(String orderBy) {
|
||||||
List<Teacher_congress_session> list = dao.query(Teacher_congress_session.class, Cnd.NEW().desc("startDate"));
|
if (StrUtil.isBlank(orderBy)) {
|
||||||
|
orderBy = "desc";
|
||||||
|
}
|
||||||
|
List<Teacher_congress_session> list = dao.query(Teacher_congress_session.class, Cnd.NEW().orderBy("startDate", orderBy));
|
||||||
return Result.success(list);
|
return Result.success(list);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+7
-1
@@ -89,7 +89,13 @@ public class ProposalSeniorBasicController {
|
|||||||
@ApiOperation(value = "提案内容修改")
|
@ApiOperation(value = "提案内容修改")
|
||||||
@Aop(TransAop.READ_COMMITTED)
|
@Aop(TransAop.READ_COMMITTED)
|
||||||
public Result update(@Valid @Param("info") ProposalInfo proposalInfo) {
|
public Result update(@Valid @Param("info") ProposalInfo proposalInfo) {
|
||||||
dao.update(proposalInfo,"^name|typeId|brief|measures|excerpt|suggestUnits$");
|
int count = dao.count(ProposalInfo.class, Cnd.where("code", "=", proposalInfo.getCode()).and("id", "<>", proposalInfo.getId()));
|
||||||
|
|
||||||
|
if (count > 0) {
|
||||||
|
return Result.error("提案编号已存在");
|
||||||
|
}
|
||||||
|
|
||||||
|
dao.update(proposalInfo,"^code|name|typeId|brief|measures|excerpt|suggestUnits|files$");
|
||||||
return Result.success();
|
return Result.success();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+2
-1
@@ -93,7 +93,8 @@ public class ProposalSchoolLeaderApprovalController {
|
|||||||
t.taskParentId,
|
t.taskParentId,
|
||||||
t.variable taskVariable,
|
t.variable taskVariable,
|
||||||
IFNULL(GROUP_CONCAT(DISTINCT nt.displayName),'结束') curTaskName,
|
IFNULL(GROUP_CONCAT(DISTINCT nt.displayName),'结束') curTaskName,
|
||||||
IF(rt.id IS NOT NULL, 1, 0) AS canRevoke
|
IF(rt.id IS NOT NULL, 1, 0) AS canRevoke,
|
||||||
|
GROUP_CONCAT(DISTINCT ta.actorName, '(', ta.actorAccount, ')' ) AS auditUser
|
||||||
FROM
|
FROM
|
||||||
wf_process_task t
|
wf_process_task t
|
||||||
LEFT JOIN wf_process_instance ins ON ins.id = t.processInstanceId
|
LEFT JOIN wf_process_instance ins ON ins.id = t.processInstanceId
|
||||||
|
|||||||
+2
-1
@@ -104,7 +104,8 @@ public class ProposalUnderTakeReplyController {
|
|||||||
t.variable->>'$.underTakeName' AS underTakeName,
|
t.variable->>'$.underTakeName' AS underTakeName,
|
||||||
IF(JSON_EXTRACT(t.variable, '$.underTakeIsMaster') = true, 1, 0) AS underTakeIsMaster,
|
IF(JSON_EXTRACT(t.variable, '$.underTakeIsMaster') = true, 1, 0) AS underTakeIsMaster,
|
||||||
t.variable->>'$.tf_transferUserId' AS tf_transferUserId,
|
t.variable->>'$.tf_transferUserId' AS tf_transferUserId,
|
||||||
transferUser.username AS transferUserName
|
transferUser.username AS transferUserName,
|
||||||
|
GROUP_CONCAT(DISTINCT ta.actorName, '(', ta.actorAccount, ')' ) AS auditUser
|
||||||
FROM
|
FROM
|
||||||
wf_process_task t
|
wf_process_task t
|
||||||
LEFT JOIN wf_process_instance ins ON ins.id = t.processInstanceId
|
LEFT JOIN wf_process_instance ins ON ins.id = t.processInstanceId
|
||||||
|
|||||||
+6
-1
@@ -13,8 +13,10 @@ import com.budwk.app.sys.models.Sys_user_role;
|
|||||||
import com.budwk.app.sys.services.SysRoleService;
|
import com.budwk.app.sys.services.SysRoleService;
|
||||||
import com.budwk.app.zhgh.democratic.proposal.models.ProposalReplyUnit;
|
import com.budwk.app.zhgh.democratic.proposal.models.ProposalReplyUnit;
|
||||||
import com.budwk.app.zhgh.democratic.proposal.models.ProposalUndertake;
|
import com.budwk.app.zhgh.democratic.proposal.models.ProposalUndertake;
|
||||||
|
import org.nutz.aop.interceptor.ioc.TransAop;
|
||||||
import org.nutz.dao.Cnd;
|
import org.nutz.dao.Cnd;
|
||||||
import org.nutz.dao.Dao;
|
import org.nutz.dao.Dao;
|
||||||
|
import org.nutz.ioc.aop.Aop;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@@ -22,7 +24,9 @@ import java.util.List;
|
|||||||
* 提案主办单位处理人
|
* 提案主办单位处理人
|
||||||
*/
|
*/
|
||||||
public class ProposalMasterUnitAssignmentHandler implements AssignmentHandler {
|
public class ProposalMasterUnitAssignmentHandler implements AssignmentHandler {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@Aop(TransAop.READ_COMMITTED)
|
||||||
public List<String> assign(TaskModel model, Execution execution) {
|
public List<String> assign(TaskModel model, Execution execution) {
|
||||||
Dao dao = ServiceContext.find(Dao.class);
|
Dao dao = ServiceContext.find(Dao.class);
|
||||||
SysRoleService sysRoleService = ServiceContext.find(SysRoleService.class);
|
SysRoleService sysRoleService = ServiceContext.find(SysRoleService.class);
|
||||||
@@ -42,7 +46,8 @@ public class ProposalMasterUnitAssignmentHandler implements AssignmentHandler {
|
|||||||
|
|
||||||
// 如果没有 认为是需要重新答复 从记录表里取值
|
// 如果没有 认为是需要重新答复 从记录表里取值
|
||||||
if(StrUtil.isBlank(masterUnitId)){
|
if(StrUtil.isBlank(masterUnitId)){
|
||||||
ProposalReplyUnit masterUnit = dao.fetch(ProposalReplyUnit.class, Cnd.where(ProposalReplyUnit::getProposalId, "=", proposalId).and(ProposalReplyUnit::getIsMaster, "=", 1));
|
ProposalReplyUnit masterUnit = dao.fetch(ProposalReplyUnit.class, Cnd.where(ProposalReplyUnit::getProposalId, "=", proposalId)
|
||||||
|
.and(ProposalReplyUnit::getIsMaster, "=", 1));
|
||||||
if (masterUnit == null) {
|
if (masterUnit == null) {
|
||||||
throw new BaseException("系统异常");
|
throw new BaseException("系统异常");
|
||||||
}
|
}
|
||||||
|
|||||||
+4
@@ -26,9 +26,13 @@ public class ProposalCaseTaskRevokeEventListener implements ProcessEventListener
|
|||||||
if (event.getEventType() == ProcessEventTypeEnum.PROCESS_TASK_REVOKE) {
|
if (event.getEventType() == ProcessEventTypeEnum.PROCESS_TASK_REVOKE) {
|
||||||
Long taskId = event.getSourceId();
|
Long taskId = event.getSourceId();
|
||||||
ProcessTask task = dao.fetch(ProcessTask.class, taskId);
|
ProcessTask task = dao.fetch(ProcessTask.class, taskId);
|
||||||
|
|
||||||
|
ProcessTask parentProcessTask = dao.fetch(ProcessTask.class, task.getTaskParentId());
|
||||||
|
if ("committee".equals(parentProcessTask.getTaskName())) {
|
||||||
ProcessInstance instance = dao.fetch(ProcessInstance.class, task.getProcessInstanceId());
|
ProcessInstance instance = dao.fetch(ProcessInstance.class, task.getProcessInstanceId());
|
||||||
String businessNo = instance.getBusinessNo();
|
String businessNo = instance.getBusinessNo();
|
||||||
dao.clear(ProposalReplyUnit.class, Cnd.where(ProposalReplyUnit::getProposalId, "=", businessNo));
|
dao.clear(ProposalReplyUnit.class, Cnd.where(ProposalReplyUnit::getProposalId, "=", businessNo));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|||||||
+39
@@ -0,0 +1,39 @@
|
|||||||
|
package com.budwk.app.zhgh.democratic.proposal.listenter;
|
||||||
|
|
||||||
|
import com.budwk.app.base.event.flow.jumptofirsttask.FlowJumpToFirstTaskNodeListener;
|
||||||
|
import com.budwk.app.flow.entity.ProcessInstance;
|
||||||
|
import com.budwk.app.flow.entity.ProcessTask;
|
||||||
|
import com.budwk.app.flow.service.ProcessInstanceService;
|
||||||
|
import com.budwk.app.flow.service.ProcessTaskService;
|
||||||
|
import com.budwk.app.zhgh.democratic.proposal.models.ProposalSecond;
|
||||||
|
import org.nutz.dao.Cnd;
|
||||||
|
import org.nutz.dao.Dao;
|
||||||
|
import org.nutz.ioc.loader.annotation.Inject;
|
||||||
|
import org.nutz.ioc.loader.annotation.IocBean;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @version 1.0
|
||||||
|
* @Author FKY
|
||||||
|
* @name:ProposalJumpToWriteEventListener
|
||||||
|
* @Date 2025/12/20 14:50
|
||||||
|
* @注释 提案退回发起人监听器
|
||||||
|
*/
|
||||||
|
@IocBean
|
||||||
|
public class ProposalJumpToWriteEventListener implements FlowJumpToFirstTaskNodeListener {
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
private Dao dao;
|
||||||
|
@Inject
|
||||||
|
private ProcessTaskService processTaskService;
|
||||||
|
@Inject
|
||||||
|
private ProcessInstanceService processInstanceService;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void receive(Long processTaskId) {
|
||||||
|
ProcessTask processTask = processTaskService.getById(processTaskId);
|
||||||
|
ProcessInstance processInstance = processInstanceService.getById(processTask.getProcessInstanceId());
|
||||||
|
|
||||||
|
// 清空提案的附议人
|
||||||
|
dao.clear(ProposalSecond.class, Cnd.where(ProposalSecond::getProposalId, "=", processInstance.getBusinessNo()));
|
||||||
|
}
|
||||||
|
}
|
||||||
+16
@@ -8,6 +8,7 @@ import lombok.Data;
|
|||||||
import lombok.EqualsAndHashCode;
|
import lombok.EqualsAndHashCode;
|
||||||
import org.nutz.dao.Cnd;
|
import org.nutz.dao.Cnd;
|
||||||
import org.nutz.dao.util.cri.SqlExpressionGroup;
|
import org.nutz.dao.util.cri.SqlExpressionGroup;
|
||||||
|
import org.nutz.lang.Lang;
|
||||||
|
|
||||||
@EqualsAndHashCode(callSuper = true)
|
@EqualsAndHashCode(callSuper = true)
|
||||||
@Data
|
@Data
|
||||||
@@ -58,6 +59,8 @@ public class ProposalQueryComprehensiveParam extends PageForm {
|
|||||||
@ApiModelProperty(name = "通用关键字")
|
@ApiModelProperty(name = "通用关键字")
|
||||||
private String commonKeyword;
|
private String commonKeyword;
|
||||||
|
|
||||||
|
@ApiModelProperty(name = "搜索关键字")
|
||||||
|
private String createUserKeyword;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -71,7 +74,12 @@ public class ProposalQueryComprehensiveParam extends PageForm {
|
|||||||
cnd = Cnd.NEW();
|
cnd = Cnd.NEW();
|
||||||
}
|
}
|
||||||
//教代会届次
|
//教代会届次
|
||||||
|
if (Lang.isNotEmpty(searchParam.getSessionIds())) {
|
||||||
|
cnd.and("info.sessionId", "in", searchParam.getSessionIds());
|
||||||
|
} else {
|
||||||
cnd.andEX("info.sessionId", "=", searchParam.getSessionId());
|
cnd.andEX("info.sessionId", "=", searchParam.getSessionId());
|
||||||
|
}
|
||||||
|
|
||||||
//提案名称
|
//提案名称
|
||||||
if (StrUtil.isNotBlank(searchParam.getName())) {
|
if (StrUtil.isNotBlank(searchParam.getName())) {
|
||||||
cnd.where().andLike("info.name", searchParam.getName());
|
cnd.where().andLike("info.name", searchParam.getName());
|
||||||
@@ -93,6 +101,14 @@ public class ProposalQueryComprehensiveParam extends PageForm {
|
|||||||
if (StrUtil.isNotBlank(searchParam.getCreateUserName())) {
|
if (StrUtil.isNotBlank(searchParam.getCreateUserName())) {
|
||||||
cnd.where().andLike("info.createUserName", searchParam.getCreateUserName());
|
cnd.where().andLike("info.createUserName", searchParam.getCreateUserName());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (StrUtil.isNotBlank(searchParam.getCreateUserKeyword())) {
|
||||||
|
SqlExpressionGroup seg = new SqlExpressionGroup();
|
||||||
|
seg.orLike("info.createUserName", searchParam.getCreateUserKeyword());
|
||||||
|
seg.orLike("info.createUserLoginName", searchParam.getCreateUserKeyword());
|
||||||
|
cnd.and(seg);
|
||||||
|
}
|
||||||
|
|
||||||
// 提案人分工会
|
// 提案人分工会
|
||||||
cnd.andEX("tcde.unionId", "=", searchParam.getUnionId());
|
cnd.andEX("tcde.unionId", "=", searchParam.getUnionId());
|
||||||
// 提案人单位
|
// 提案人单位
|
||||||
|
|||||||
+3
@@ -36,6 +36,7 @@ import org.nutz.dao.sql.Sql;
|
|||||||
import org.nutz.ioc.loader.annotation.Inject;
|
import org.nutz.ioc.loader.annotation.Inject;
|
||||||
import org.nutz.ioc.loader.annotation.IocBean;
|
import org.nutz.ioc.loader.annotation.IocBean;
|
||||||
import org.nutz.json.Json;
|
import org.nutz.json.Json;
|
||||||
|
import org.nutz.lang.Lang;
|
||||||
import org.nutz.lang.util.NutMap;
|
import org.nutz.lang.util.NutMap;
|
||||||
|
|
||||||
import javax.servlet.http.HttpServletResponse;
|
import javax.servlet.http.HttpServletResponse;
|
||||||
@@ -209,9 +210,11 @@ public class ProposalExportServiceImpl extends BaseServiceImpl<ProposalInfo> imp
|
|||||||
if (inviteTask != null) {
|
if (inviteTask != null) {
|
||||||
NutMap variable = Json.fromJson(NutMap.class, inviteTask.getVariable());
|
NutMap variable = Json.fromJson(NutMap.class, inviteTask.getVariable());
|
||||||
List<NutMap> seconders = variable.getAsList(FlowConst.TASK_FORM_DATA_PREFIX + "seconder", NutMap.class);
|
List<NutMap> seconders = variable.getAsList(FlowConst.TASK_FORM_DATA_PREFIX + "seconder", NutMap.class);
|
||||||
|
if (Lang.isNotEmpty(seconders)) {
|
||||||
list.get(i).put("secondedUserNames", seconders.stream().map(v -> v.getString("userName")).collect(Collectors.joining(",")));
|
list.get(i).put("secondedUserNames", seconders.stream().map(v -> v.getString("userName")).collect(Collectors.joining(",")));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
List<ExcelExportEntity> exportEntities = new ArrayList<>();
|
List<ExcelExportEntity> exportEntities = new ArrayList<>();
|
||||||
exportEntities.add(new ExcelExportEntity("序号", "index", 10));
|
exportEntities.add(new ExcelExportEntity("序号", "index", 10));
|
||||||
|
|||||||
+3
-1
@@ -67,12 +67,13 @@ public class TeacherCongressSessionServiceImpl extends BaseServiceImpl<Teacher_c
|
|||||||
session.setFullName("第" + session.getJ() + "第" + session.getC());
|
session.setFullName("第" + session.getJ() + "第" + session.getC());
|
||||||
insert(session);
|
insert(session);
|
||||||
|
|
||||||
|
// 继承上届信息
|
||||||
|
if (isExtend) {
|
||||||
//代表团角色ID
|
//代表团角色ID
|
||||||
Sys_role delegationHeadRole = sysRoleService.getByCode(RoleConstant.TEACHER_CONGRESS_DELEGATION_HEAD);
|
Sys_role delegationHeadRole = sysRoleService.getByCode(RoleConstant.TEACHER_CONGRESS_DELEGATION_HEAD);
|
||||||
Sys_role delegationViceHeadRole = sysRoleService.getByCode(RoleConstant.TEACHER_CONGRESS_VICE_DELEGATION_HEAD);
|
Sys_role delegationViceHeadRole = sysRoleService.getByCode(RoleConstant.TEACHER_CONGRESS_VICE_DELEGATION_HEAD);
|
||||||
Sys_role delegationContactRole = sysRoleService.getByCode(RoleConstant.TEACHER_CONGRESS_DELEGATION_CONTACT);
|
Sys_role delegationContactRole = sysRoleService.getByCode(RoleConstant.TEACHER_CONGRESS_DELEGATION_CONTACT);
|
||||||
|
|
||||||
// 继承上届信息
|
|
||||||
//查询本届上次的信息
|
//查询本届上次的信息
|
||||||
int c_num = Convert.chineseToNumber(session.getC().replaceAll("次", ""));
|
int c_num = Convert.chineseToNumber(session.getC().replaceAll("次", ""));
|
||||||
if (c_num == 1) return;
|
if (c_num == 1) return;
|
||||||
@@ -236,6 +237,7 @@ public class TeacherCongressSessionServiceImpl extends BaseServiceImpl<Teacher_c
|
|||||||
sysRoleService.clearCache();
|
sysRoleService.clearCache();
|
||||||
sysUserService.clearCache();
|
sysUserService.clearCache();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Aop(TransAop.READ_COMMITTED)
|
@Aop(TransAop.READ_COMMITTED)
|
||||||
|
|||||||
@@ -67,15 +67,15 @@ layout("/layouts/v4/baseLayout.html"){
|
|||||||
}
|
}
|
||||||
|
|
||||||
.apps-header {
|
.apps-header {
|
||||||
padding: 0 0 20px 0;
|
padding: 0 0 10px 0;
|
||||||
border-bottom: 1px solid #eee;
|
border-bottom: 1px solid #eee;
|
||||||
margin-bottom: 20px;
|
margin-bottom: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.apps-search-container {
|
.apps-search-container {
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
margin-bottom: 20px;
|
/*margin-bottom: 20px;*/
|
||||||
}
|
}
|
||||||
|
|
||||||
.apps-search {
|
.apps-search {
|
||||||
@@ -103,13 +103,16 @@ layout("/layouts/v4/baseLayout.html"){
|
|||||||
}
|
}
|
||||||
|
|
||||||
.apps-filter {
|
.apps-filter {
|
||||||
margin-top: 20px;
|
margin-top: 10px;
|
||||||
|
display: flex;
|
||||||
|
align-items: flex-end;
|
||||||
}
|
}
|
||||||
|
|
||||||
.apps-filter-title {
|
.apps-filter-title {
|
||||||
color: #666;
|
color: #666;
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
margin-bottom: 5px;
|
margin-bottom: 5px;
|
||||||
|
margin-right: 5px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.apps-filter-tags {
|
.apps-filter-tags {
|
||||||
@@ -356,20 +359,20 @@ layout("/layouts/v4/baseLayout.html"){
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- 字母过滤 -->
|
<!-- 字母过滤 -->
|
||||||
<!-- <div class="apps-filter">-->
|
<div class="apps-filter">
|
||||||
<!-- <div class="apps-filter-title">首字母:</div>-->
|
<div class="apps-filter-title">首字母:</div>
|
||||||
<!-- <div class="apps-filter-tags alphabet-filter">-->
|
<div class="apps-filter-tags alphabet-filter">
|
||||||
<!-- <div :class="['filter-tag', activeAlphabet === '' ? 'active' : '']" @click="changeAlphabet('')">全部</div>-->
|
<div :class="['filter-tag', activeAlphabet === '' ? 'active' : '']" @click="changeAlphabet('')">全部</div>
|
||||||
<!-- <div-->
|
<div
|
||||||
<!-- v-for="letter in alphabets"-->
|
v-for="letter in alphabets"
|
||||||
<!-- :key="letter"-->
|
:key="letter"
|
||||||
<!-- :class="['alphabet-item', activeAlphabet === letter ? 'active' : '']"-->
|
:class="['alphabet-item', activeAlphabet === letter ? 'active' : '']"
|
||||||
<!-- @click="changeAlphabet(letter)"-->
|
@click="changeAlphabet(letter)"
|
||||||
<!-- >-->
|
>
|
||||||
<!-- {{ letter }}-->
|
{{ letter }}
|
||||||
<!-- </div>-->
|
</div>
|
||||||
<!-- </div>-->
|
</div>
|
||||||
<!-- </div>-->
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- 应用网格 -->
|
<!-- 应用网格 -->
|
||||||
|
|||||||
@@ -71,7 +71,7 @@
|
|||||||
<script src="https://vxeui.com/umd/xe-utils@3.5.30/dist/xe-utils.umd.min.js"></script>
|
<script src="https://vxeui.com/umd/xe-utils@3.5.30/dist/xe-utils.umd.min.js"></script>
|
||||||
<script src="https://vxeui.com/umd/vxe-pc-ui@3.1.25/lib/index.umd.min.js"></script>
|
<script src="https://vxeui.com/umd/vxe-pc-ui@3.1.25/lib/index.umd.min.js"></script>
|
||||||
<script src="https://vxeui.com/umd/vxe-table@3.9.0/lib/index.umd.min.js"></script>
|
<script src="https://vxeui.com/umd/vxe-table@3.9.0/lib/index.umd.min.js"></script>
|
||||||
l
|
|
||||||
<!-- 引入 form-create 和 designer -->
|
<!-- 引入 form-create 和 designer -->
|
||||||
<script src="${base!}/assets/platform/plugins/form-create/form-create.min.js"></script>
|
<script src="${base!}/assets/platform/plugins/form-create/form-create.min.js"></script>
|
||||||
<script src="${base!}/assets/platform/plugins/form-create/index.umd.js"></script>
|
<script src="${base!}/assets/platform/plugins/form-create/index.umd.js"></script>
|
||||||
@@ -80,7 +80,7 @@
|
|||||||
<script src="${base!}/assets/platform/plugins/swiper/swiper-bundle.js"></script>
|
<script src="${base!}/assets/platform/plugins/swiper/swiper-bundle.js"></script>
|
||||||
<link rel="stylesheet" href="${base!}/assets/platform/plugins/swiper/swiper-bundle.min.css"></link>
|
<link rel="stylesheet" href="${base!}/assets/platform/plugins/swiper/swiper-bundle.min.css"></link>
|
||||||
|
|
||||||
<!-- <script src="${base!}/assets/platform/plugins/snaker/SnakerflowDesigner.umd.min.js"></script>-->
|
<!--<script src="${base!}/assets/platform/plugins/snaker/SnakerflowDesigner.umd.js"></script>-->
|
||||||
|
|
||||||
<script src="${base!}/components/plugins/sysDict/DictData.js"></script>
|
<script src="${base!}/components/plugins/sysDict/DictData.js"></script>
|
||||||
<script src="${base!}/assets/platform/js/util/commonUtil.js"></script>
|
<script src="${base!}/assets/platform/js/util/commonUtil.js"></script>
|
||||||
@@ -351,6 +351,16 @@
|
|||||||
Vue.prototype.$auth = commonUtil.authService()
|
Vue.prototype.$auth = commonUtil.authService()
|
||||||
Vue.prototype.$axios = commonUtil.axiosService()
|
Vue.prototype.$axios = commonUtil.axiosService()
|
||||||
Vue.prototype.$downLoad = commonUtil.downLoadService
|
Vue.prototype.$downLoad = commonUtil.downLoadService
|
||||||
|
|
||||||
|
Vue.prototype.$processStatusMap = {
|
||||||
|
10: {text: "进行中", class: "doing"},
|
||||||
|
20: {text: "已完成", class: "finished"},
|
||||||
|
30: {text: "已撤回", class: "withdraw"},
|
||||||
|
40: {text: "强行终止", class: "interrupt"},
|
||||||
|
45: {text: "已拒绝", class: "reject"},
|
||||||
|
50: {text: "挂起", class: "pending"},
|
||||||
|
99: {text: "已废弃", class: "abandon"}
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<!--vue全局组件-->
|
<!--vue全局组件-->
|
||||||
@@ -676,7 +686,7 @@
|
|||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
</header>
|
</header>
|
||||||
<div style="height: 45px"></div>
|
<div style="height: 64px"></div>
|
||||||
|
|
||||||
<main class="v4-content">
|
<main class="v4-content">
|
||||||
<!-- 页面内容区域 -->
|
<!-- 页面内容区域 -->
|
||||||
|
|||||||
@@ -108,6 +108,7 @@ const user = {
|
|||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
</el-table>
|
</el-table>
|
||||||
|
<!--#include("/layouts/pagination.html"){}#-->
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -63,15 +63,15 @@ layout("/layouts/v4/baseLayout.html"){
|
|||||||
}
|
}
|
||||||
|
|
||||||
.apps-header {
|
.apps-header {
|
||||||
padding: 0 0 20px 0;
|
padding: 0 0 10px 0;
|
||||||
border-bottom: 1px solid #eee;
|
border-bottom: 1px solid #eee;
|
||||||
margin-bottom: 20px;
|
margin-bottom: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.apps-search-container {
|
.apps-search-container {
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
margin-bottom: 20px;
|
/*margin-bottom: 20px;*/
|
||||||
}
|
}
|
||||||
|
|
||||||
.apps-search {
|
.apps-search {
|
||||||
@@ -99,13 +99,16 @@ layout("/layouts/v4/baseLayout.html"){
|
|||||||
}
|
}
|
||||||
|
|
||||||
.apps-filter {
|
.apps-filter {
|
||||||
margin-top: 20px;
|
margin-top: 10px;
|
||||||
|
display: flex;
|
||||||
|
align-items: flex-end;
|
||||||
}
|
}
|
||||||
|
|
||||||
.apps-filter-title {
|
.apps-filter-title {
|
||||||
color: #666;
|
color: #666;
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
margin-bottom: 5px;
|
margin-bottom: 5px;
|
||||||
|
margin-right: 5px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.apps-filter-tags {
|
.apps-filter-tags {
|
||||||
@@ -351,22 +354,22 @@ layout("/layouts/v4/baseLayout.html"){
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- 字母过滤 -->
|
<!-- 字母过滤 -->
|
||||||
<!-- <div class="apps-filter">-->
|
<div class="apps-filter">
|
||||||
<!-- <div class="apps-filter-title">首字母:</div>-->
|
<div class="apps-filter-title">首字母:</div>
|
||||||
<!-- <div class="apps-filter-tags alphabet-filter">-->
|
<div class="apps-filter-tags alphabet-filter">
|
||||||
<!-- <div :class="['filter-tag', activeAlphabet === '' ? 'active' : '']" @click="changeAlphabet('')">-->
|
<div :class="['filter-tag', activeAlphabet === '' ? 'active' : '']" @click="changeAlphabet('')">
|
||||||
<!-- 全部-->
|
全部
|
||||||
<!-- </div>-->
|
</div>
|
||||||
<!-- <div-->
|
<div
|
||||||
<!-- v-for="letter in alphabets"-->
|
v-for="letter in alphabets"
|
||||||
<!-- :key="letter"-->
|
:key="letter"
|
||||||
<!-- :class="['alphabet-item', activeAlphabet === letter ? 'active' : '']"-->
|
:class="['alphabet-item', activeAlphabet === letter ? 'active' : '']"
|
||||||
<!-- @click="changeAlphabet(letter)"-->
|
@click="changeAlphabet(letter)"
|
||||||
<!-- >-->
|
>
|
||||||
<!-- {{ letter }}-->
|
{{ letter }}
|
||||||
<!-- </div>-->
|
</div>
|
||||||
<!-- </div>-->
|
</div>
|
||||||
<!-- </div>-->
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- 应用网格 -->
|
<!-- 应用网格 -->
|
||||||
|
|||||||
@@ -39,14 +39,18 @@
|
|||||||
'assigneeText',
|
'assigneeText',
|
||||||
'assigneeMode',
|
'assigneeMode',
|
||||||
'buttonConfig',
|
'buttonConfig',
|
||||||
'enableNextOperator'
|
'enableNextOperator',
|
||||||
|
'h5form'
|
||||||
]"
|
]"
|
||||||
>
|
>
|
||||||
<!-- <template v-slot:form-item-task-form="{model,field}">-->
|
<template v-slot:form-item-task-form="{model,field}">
|
||||||
<!-- <el-form-item label="form">-->
|
<el-form-item label="pc跳转地址">
|
||||||
<!-- -->
|
<el-input placeholder="请输入pc跳转地址" clearable v-model="model[field]"></el-input>
|
||||||
<!-- </el-form-item>-->
|
</el-form-item>
|
||||||
<!-- </template>-->
|
<el-form-item label="h5跳转地址">
|
||||||
|
<el-input placeholder="请输入h5跳转地址" clearable v-model="model['h5form']"></el-input>
|
||||||
|
</el-form-item>
|
||||||
|
</template>
|
||||||
|
|
||||||
<template v-slot:form-item-task-assignee="{model,field}">
|
<template v-slot:form-item-task-assignee="{model,field}">
|
||||||
<assignee-form :model="model" :field="field" :start_node_next_node_ids="startNodeNextNodeIds"></assignee-form>
|
<assignee-form :model="model" :field="field" :start_node_next_node_ids="startNodeNextNodeIds"></assignee-form>
|
||||||
|
|||||||
@@ -59,6 +59,10 @@
|
|||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div id="app" v-cloak>
|
<div id="app" v-cloak>
|
||||||
|
<van-notice-bar
|
||||||
|
left-icon="volume-o"
|
||||||
|
text="请选择完文件后,一次性上传。"
|
||||||
|
></van-notice-bar>
|
||||||
<h1>文件上传</h1>
|
<h1>文件上传</h1>
|
||||||
<van-uploader
|
<van-uploader
|
||||||
v-model="fileList"
|
v-model="fileList"
|
||||||
|
|||||||
@@ -1,7 +1,75 @@
|
|||||||
<!--#
|
<!--#
|
||||||
layout("/layouts/platform.html"){
|
layout("/layouts/platform.html"){
|
||||||
#-->
|
#-->
|
||||||
<style></style>
|
<style scoped>
|
||||||
|
.custom-tree {
|
||||||
|
background: transparent;
|
||||||
|
padding: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 节点行高调整 */
|
||||||
|
.custom-tree .el-tree-node {
|
||||||
|
margin: 2px 0;
|
||||||
|
border-radius: 6px;
|
||||||
|
transition: all 0.2s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* 选中状态 */
|
||||||
|
.custom-tree .el-tree-node.is-current > .el-tree-node__content {
|
||||||
|
background: #e8f4ff;
|
||||||
|
border-left: 3px solid #409eff;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 节点内容区域 */
|
||||||
|
.custom-tree .el-tree-node__content {
|
||||||
|
height: 36px;
|
||||||
|
line-height: 36px;
|
||||||
|
padding: 0 8px;
|
||||||
|
border-radius: 6px;
|
||||||
|
transition: all 0.2s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 自定义节点内容 */
|
||||||
|
.custom-tree-node {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
width: 100%;
|
||||||
|
gap: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* 文件夹图标颜色优化 */
|
||||||
|
.el-icon-folder {
|
||||||
|
color: #909399;
|
||||||
|
}
|
||||||
|
.el-icon-folder-opened {
|
||||||
|
color: #409eff;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 展开时图标旋转动画 */
|
||||||
|
.custom-tree .el-tree-node__expand-icon {
|
||||||
|
transition: transform 0.3s ease;
|
||||||
|
}
|
||||||
|
.custom-tree .el-tree-node__expand-icon.expanded {
|
||||||
|
transform: rotate(90deg);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 节点标签 */
|
||||||
|
.node-label {
|
||||||
|
flex: 1;
|
||||||
|
font-size: 13px;
|
||||||
|
color: #303133;
|
||||||
|
font-weight: 500;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 禁用展开图标(当无子节点时) */
|
||||||
|
.custom-tree .el-tree-node__expand-icon.is-leaf {
|
||||||
|
color: transparent;
|
||||||
|
cursor: default;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
<div id="app" v-cloak>
|
<div id="app" v-cloak>
|
||||||
<el-row type="flex" :gutter="20" style="height: calc(100vh - 126px)">
|
<el-row type="flex" :gutter="20" style="height: calc(100vh - 126px)">
|
||||||
<el-col :span="5">
|
<el-col :span="5">
|
||||||
@@ -12,21 +80,19 @@ layout("/layouts/platform.html"){
|
|||||||
:data="treeData"
|
:data="treeData"
|
||||||
ref="treeRef"
|
ref="treeRef"
|
||||||
:expand-on-click-node="false"
|
:expand-on-click-node="false"
|
||||||
:props="{
|
:props="{ children: 'children', label: 'name' }"
|
||||||
children: 'children',
|
|
||||||
label: 'name'
|
|
||||||
}"
|
|
||||||
node-key="id"
|
node-key="id"
|
||||||
default-expand-all
|
default-expand-all
|
||||||
@node-click="treeNodeClick"
|
@node-click="treeNodeClick"
|
||||||
:filter-node-method="filterNode"
|
:filter-node-method="filterNode"
|
||||||
highlight-current
|
highlight-current
|
||||||
|
class="custom-tree"
|
||||||
>
|
>
|
||||||
<template slot-scope="{ node, data }">
|
<template slot-scope="{ node, data }">
|
||||||
<span class="el-tree-node__label">
|
<span class="custom-tree-node">
|
||||||
<i class="el-icon-folder-opened" v-if="node.level===1"></i>
|
<i class="el-icon-folder-opened" v-if="node.level===1"></i>
|
||||||
<i class="el-icon-folder" v-else></i>
|
<i class="el-icon-folder" v-else></i>
|
||||||
{{node.label}}
|
<span class="node-label">{{ node.label }}</span>
|
||||||
</span>
|
</span>
|
||||||
</template>
|
</template>
|
||||||
</el-tree>
|
</el-tree>
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
const UNIT_MANAGE_TEMPLATE = {
|
const UNIT_MANAGE_TEMPLATE = {
|
||||||
template: `
|
template: /*language=HTML*/ `
|
||||||
<div>
|
<div>
|
||||||
<el-card shadow="never" style="border: 1px solid var(--border-color-lighter);">
|
<el-card shadow="never" style="border: 1px solid var(--border-color-lighter);">
|
||||||
<el-row :gutter="10" type="flex">
|
<el-row :gutter="10" type="flex">
|
||||||
@@ -30,10 +30,7 @@ const UNIT_MANAGE_TEMPLATE = {
|
|||||||
|
|
||||||
<el-dialog title="设置单位" :visible.sync="dialogVisible" :close-on-click-modal="false" width="40%" top="2%">
|
<el-dialog title="设置单位" :visible.sync="dialogVisible" :close-on-click-modal="false" width="40%" top="2%">
|
||||||
<el-form :model="formData" ref="form" :rules="formRules" size="small" label-width="80px">
|
<el-form :model="formData" ref="form" :rules="formRules" size="small" label-width="80px">
|
||||||
<el-form-item v-if="formData.id === '' || formData.id === null || currentNode === 1" prop="parentId" label="上级单位" label-width="80px">
|
<el-form-item label="上级单位">
|
||||||
<el-cascader :props="props" :options="options" v-model="parentUnit" placeholder="请选择上次单位,不选择则为顶级" style="width: 100%"></el-cascader>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item v-else label="上级单位">
|
|
||||||
<el-input maxlength="100" disabled :value="currentData?.name" type="text"></el-input>
|
<el-input maxlength="100" disabled :value="currentData?.name" type="text"></el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item prop="name" label="单位名称">
|
<el-form-item prop="name" label="单位名称">
|
||||||
@@ -47,10 +44,20 @@ const UNIT_MANAGE_TEMPLATE = {
|
|||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item prop="unitLevel" label="单位等级">
|
<el-form-item prop="unitLevel" label="单位等级">
|
||||||
<el-select v-model="formData.unitLevel" placeholder="请输入单位等级" style="width: 100%">
|
<el-select v-model="formData.unitLevel" placeholder="请输入单位等级" style="width: 100%">
|
||||||
|
<el-option v-if="unitLevel === 1" label="一级单位" :value="1"></el-option>
|
||||||
<el-option v-if="unitLevel === 2" label="二级单位" :value="2"></el-option>
|
<el-option v-if="unitLevel === 2" label="二级单位" :value="2"></el-option>
|
||||||
<el-option v-if="unitLevel === 3" label="三级单位" :value="3"></el-option>
|
<el-option v-if="unitLevel === 3" label="三级单位" :value="3"></el-option>
|
||||||
|
<el-option v-if="unitLevel === 4" label="四级单位" :value="4"></el-option>
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
||||||
|
<el-form-item prop="unionId" label="所属工会">
|
||||||
|
<el-select v-model="formData.unionId" placeholder="请选择所属工会" style="width: 100%">
|
||||||
|
<el-option :key="item.id" :label="item.name" :value="item.id"
|
||||||
|
v-for="item in unions"></el-option>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
|
||||||
<!-- <el-form-item prop="address" label="单位地址">-->
|
<!-- <el-form-item prop="address" label="单位地址">-->
|
||||||
<!-- <el-input maxlength="100" placeholder="请输入单位地址" v-model="formData.address" auto-complete="off" tabindex="5" type="text"></el-input>-->
|
<!-- <el-input maxlength="100" placeholder="请输入单位地址" v-model="formData.address" auto-complete="off" tabindex="5" type="text"></el-input>-->
|
||||||
<!-- </el-form-item>-->
|
<!-- </el-form-item>-->
|
||||||
@@ -88,6 +95,7 @@ const UNIT_MANAGE_TEMPLATE = {
|
|||||||
required: true
|
required: true
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
store,
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
pageForm: {
|
pageForm: {
|
||||||
@@ -107,7 +115,7 @@ const UNIT_MANAGE_TEMPLATE = {
|
|||||||
formRules: {
|
formRules: {
|
||||||
name: [{ required: true, message: "必填", trigger: "blur" }],
|
name: [{ required: true, message: "必填", trigger: "blur" }],
|
||||||
unitcode: [{ required: true, message: "必填", trigger: "blur" }],
|
unitcode: [{ required: true, message: "必填", trigger: "blur" }],
|
||||||
unitLevel: [{ required: true, message: "必填", trigger: "blur" }],
|
unitLevel: [{ required: false, message: "必填", trigger: "blur" }],
|
||||||
email: [
|
email: [
|
||||||
{ required: false, message: "单位邮箱", trigger: "blur" },
|
{ required: false, message: "单位邮箱", trigger: "blur" },
|
||||||
{ type: "email", message: "请输入正确的邮箱地址", trigger: ["blur", "change"] }
|
{ type: "email", message: "请输入正确的邮箱地址", trigger: ["blur", "change"] }
|
||||||
@@ -115,24 +123,8 @@ const UNIT_MANAGE_TEMPLATE = {
|
|||||||
},
|
},
|
||||||
options: [],
|
options: [],
|
||||||
parentUnit: [],
|
parentUnit: [],
|
||||||
props: {
|
|
||||||
lazy: true,
|
unions: [],
|
||||||
checkStrictly: true,
|
|
||||||
multiple: false,
|
|
||||||
lazyLoad: function (node, resolve) {
|
|
||||||
var url = base + "/platform/sys/unit/cascaderData"
|
|
||||||
$.post(
|
|
||||||
url,
|
|
||||||
{ pid: node.value },
|
|
||||||
function (data) {
|
|
||||||
if (data.code === 0) {
|
|
||||||
resolve(data.data)
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"json"
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
computed: {},
|
computed: {},
|
||||||
@@ -148,14 +140,16 @@ const UNIT_MANAGE_TEMPLATE = {
|
|||||||
this.options = []
|
this.options = []
|
||||||
},
|
},
|
||||||
doHandle() {
|
doHandle() {
|
||||||
|
this.$confirm("确定要提交吗?", "提示", {
|
||||||
|
confirmButtonText: "确定",
|
||||||
|
cancelButtonText: "取消",
|
||||||
|
type: "warning"
|
||||||
|
}).then(() => {
|
||||||
const self = this
|
const self = this
|
||||||
const url = this.formData.id ? "/platform/sys/unit/editDo" : "/platform/sys/unit/addDo"
|
const url = this.formData.id ? "/platform/sys/unit/editDo" : "/platform/sys/unit/addDo"
|
||||||
this.$refs["form"].validate(async function (valid) {
|
this.$refs["form"].validate(async function (valid) {
|
||||||
if (valid) {
|
if (valid) {
|
||||||
if (!self.formData.id) {
|
if (self.currentNode) {
|
||||||
self.formData.parentId = self.parentUnit[self.parentUnit.length - 1] || ""
|
|
||||||
}
|
|
||||||
if (self.currentNode !== 1) {
|
|
||||||
self.formData.parentId = self.currentData.id
|
self.formData.parentId = self.currentData.id
|
||||||
}
|
}
|
||||||
const resp = await self.$axios.post(url, self.formData)
|
const resp = await self.$axios.post(url, self.formData)
|
||||||
@@ -169,6 +163,7 @@ const UNIT_MANAGE_TEMPLATE = {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
})
|
||||||
},
|
},
|
||||||
async openEdit(id) {
|
async openEdit(id) {
|
||||||
console.log(this.currentData)
|
console.log(this.currentData)
|
||||||
@@ -216,7 +211,13 @@ const UNIT_MANAGE_TEMPLATE = {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
created() {
|
async created() {
|
||||||
this.pageData()
|
this.pageData()
|
||||||
|
|
||||||
|
if (this.$auth.hasRoleOr('SYSADMIN, SCHOOL_UNION_ADMIN')) {
|
||||||
|
this.unions = await this.$businessTool.listUnion()
|
||||||
|
} else {
|
||||||
|
this.unions = await this.$businessTool.listUnion(this.store.state.user.union.id)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+1
@@ -212,6 +212,7 @@ layout("/layouts/platform.html"){
|
|||||||
message: '提交成功!'
|
message: '提交成功!'
|
||||||
})
|
})
|
||||||
this.doSearch()
|
this.doSearch()
|
||||||
|
this.getApplyMoney()
|
||||||
this.$refs.guava.index()
|
this.$refs.guava.index()
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|||||||
+1
-1
@@ -8,7 +8,7 @@ layout("/layouts/platform.html"){
|
|||||||
<el-form :model="formData" :rules="formRules" ref="formRef" class="flow-task-form">
|
<el-form :model="formData" :rules="formRules" ref="formRef" class="flow-task-form">
|
||||||
<el-descriptions :column="2" border>
|
<el-descriptions :column="2" border>
|
||||||
<el-descriptions-item label="申报人姓名">{{formData.userName}}</el-descriptions-item>
|
<el-descriptions-item label="申报人姓名">{{formData.userName}}</el-descriptions-item>
|
||||||
<el-descriptions-item label="申报时间">{{formData.applyDate}}</el-descriptions-item>
|
<el-descriptions-item label="申报时间">{{$moment(formData.applyDate).format('YYYY-MM-DD')}}</el-descriptions-item>
|
||||||
<el-descriptions-item label="经费项目">
|
<el-descriptions-item label="经费项目">
|
||||||
<el-form-item
|
<el-form-item
|
||||||
prop="activityMatter" label="经费项目">
|
prop="activityMatter" label="经费项目">
|
||||||
|
|||||||
+3
@@ -88,6 +88,9 @@ layout("/layouts/platform.html"){
|
|||||||
<enum-tag :value="row.instanceState" name="ProcessInstanceStateEnum" label_key="message"
|
<enum-tag :value="row.instanceState" name="ProcessInstanceStateEnum" label_key="message"
|
||||||
size="small"></enum-tag>
|
size="small"></enum-tag>
|
||||||
</template>
|
</template>
|
||||||
|
<template v-slot="{row}" v-else-if="column.prop==='applyDate'">
|
||||||
|
{{ $moment(row.applyDate).format('YYYY-MM-DD') }}
|
||||||
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column align="center" fixed="right" header-align="center" label="操作"
|
<el-table-column align="center" fixed="right" header-align="center" label="操作"
|
||||||
width="300px">
|
width="300px">
|
||||||
|
|||||||
+1
-1
@@ -35,7 +35,7 @@ layout("/layouts/platform.html"){
|
|||||||
</el-option>
|
</el-option>
|
||||||
</el-select>
|
</el-select>
|
||||||
</search-item>
|
</search-item>
|
||||||
<search-item label="协会"
|
<search-item label="所属协会"
|
||||||
v-if="!pageForm.outlayManageSource||pageForm.outlayManageSource==='ACTIVITY_BUDGET_TYPE_THREE'">
|
v-if="!pageForm.outlayManageSource||pageForm.outlayManageSource==='ACTIVITY_BUDGET_TYPE_THREE'">
|
||||||
<el-select clearable
|
<el-select clearable
|
||||||
placeholder="请选择协会"
|
placeholder="请选择协会"
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ const ACTIVITY_BUDGET_INFO = {
|
|||||||
<el-descriptions-item label="申报预算金额(元)">{{viewData.declareTotalBudgetMoney}}
|
<el-descriptions-item label="申报预算金额(元)">{{viewData.declareTotalBudgetMoney}}
|
||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
<el-descriptions-item label="最终预算金额(元)">{{viewData.totalBudgetMoney}}</el-descriptions-item>
|
<el-descriptions-item label="最终预算金额(元)">{{viewData.totalBudgetMoney}}</el-descriptions-item>
|
||||||
<el-descriptions-item label="申报时间">{{viewData.applyDate}}</el-descriptions-item>
|
<el-descriptions-item label="申报时间">{{$moment(viewData.applyDate).format('YYYY-MM-DD')}}</el-descriptions-item>
|
||||||
<el-descriptions-item v-if="viewData.isSchoolBudget" label="校工会预算">{{viewData.activityMatterTwo}}
|
<el-descriptions-item v-if="viewData.isSchoolBudget" label="校工会预算">{{viewData.activityMatterTwo}}
|
||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
<el-descriptions-item v-if="!viewData.isSchoolBudget"></el-descriptions-item>
|
<el-descriptions-item v-if="!viewData.isSchoolBudget"></el-descriptions-item>
|
||||||
|
|||||||
+11
@@ -34,6 +34,16 @@ layout("/layouts/platform.html"){
|
|||||||
</el-option>
|
</el-option>
|
||||||
</el-select>
|
</el-select>
|
||||||
</search-item>
|
</search-item>
|
||||||
|
<search-item label="所属协会"
|
||||||
|
v-if="!pageForm.outlayManageSource||pageForm.outlayManageSource==='ACTIVITY_BUDGET_TYPE_THREE'">
|
||||||
|
<el-select v-model="pageForm.clubId" filterable
|
||||||
|
clearable
|
||||||
|
placeholder="请选择所属工会" style="width: 100%;">
|
||||||
|
<el-option v-for="item in clubOption" :label="item.clubName"
|
||||||
|
:value="item.id">
|
||||||
|
</el-option>
|
||||||
|
</el-select>
|
||||||
|
</search-item>
|
||||||
<search-item label="预算条目">
|
<search-item label="预算条目">
|
||||||
<dict-select v-model="pageForm.budgetReimburseType"
|
<dict-select v-model="pageForm.budgetReimburseType"
|
||||||
code="ACTIVITY_BUDGET_REIMBURSE_TYPE"></dict-select>
|
code="ACTIVITY_BUDGET_REIMBURSE_TYPE"></dict-select>
|
||||||
@@ -225,6 +235,7 @@ layout("/layouts/platform.html"){
|
|||||||
this.budgetReimburseTypeOption = await this.$businessTool.getDictOptions("ACTIVITY_BUDGET_REIMBURSE_TYPE")
|
this.budgetReimburseTypeOption = await this.$businessTool.getDictOptions("ACTIVITY_BUDGET_REIMBURSE_TYPE")
|
||||||
this.budgetTypeOption.unshift({name: "全部类型", code: ""})
|
this.budgetTypeOption.unshift({name: "全部类型", code: ""})
|
||||||
this.unionList = await this.$businessTool.listUnion()
|
this.unionList = await this.$businessTool.listUnion()
|
||||||
|
this.clubOption = await this.$businessTool.listClub()
|
||||||
this.pageData()
|
this.pageData()
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|||||||
+11
@@ -34,6 +34,16 @@ layout("/layouts/platform.html"){
|
|||||||
</el-option>
|
</el-option>
|
||||||
</el-select>
|
</el-select>
|
||||||
</search-item>
|
</search-item>
|
||||||
|
<search-item label="所属协会"
|
||||||
|
v-if="!pageForm.outlayManageSource||pageForm.outlayManageSource==='ACTIVITY_BUDGET_TYPE_THREE'">
|
||||||
|
<el-select v-model="pageForm.clubId" filterable
|
||||||
|
clearable
|
||||||
|
placeholder="请选择所属工会" style="width: 100%;">
|
||||||
|
<el-option v-for="item in clubOption" :label="item.clubName"
|
||||||
|
:value="item.id">
|
||||||
|
</el-option>
|
||||||
|
</el-select>
|
||||||
|
</search-item>
|
||||||
<search-item label="预算条目">
|
<search-item label="预算条目">
|
||||||
<dict-select v-model="pageForm.budgetReimburseType"
|
<dict-select v-model="pageForm.budgetReimburseType"
|
||||||
code="ACTIVITY_BUDGET_REIMBURSE_TYPE"></dict-select>
|
code="ACTIVITY_BUDGET_REIMBURSE_TYPE"></dict-select>
|
||||||
@@ -225,6 +235,7 @@ layout("/layouts/platform.html"){
|
|||||||
this.budgetReimburseTypeOption = await this.$businessTool.getDictOptions("ACTIVITY_BUDGET_REIMBURSE_TYPE")
|
this.budgetReimburseTypeOption = await this.$businessTool.getDictOptions("ACTIVITY_BUDGET_REIMBURSE_TYPE")
|
||||||
this.budgetTypeOption.unshift({name: "全部类型", code: ""})
|
this.budgetTypeOption.unshift({name: "全部类型", code: ""})
|
||||||
this.unionList = await this.$businessTool.listUnion()
|
this.unionList = await this.$businessTool.listUnion()
|
||||||
|
this.clubOption = await this.$businessTool.listClub()
|
||||||
this.pageData()
|
this.pageData()
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|||||||
+1
-1
@@ -75,7 +75,7 @@ layout("/layouts/platform.html"){
|
|||||||
</el-form>
|
</el-form>
|
||||||
<el-row type="flex" justify="end">
|
<el-row type="flex" justify="end">
|
||||||
<el-button @click="$refs.guava.index()" size="small">取消</el-button>
|
<el-button @click="$refs.guava.index()" size="small">取消</el-button>
|
||||||
<el-button @click="handleTaskAction(6)" size="small" type="info">退回到提案人</el-button>
|
<el-button @click="handleTaskAction(6)" size="small" type="info">退回到发起人</el-button>
|
||||||
<el-button @click="handleTaskAction(20)" size="small" type="danger">不同意</el-button>
|
<el-button @click="handleTaskAction(20)" size="small" type="danger">不同意</el-button>
|
||||||
<el-button @click="handleTaskAction(1)" size="small" type="primary">同意</el-button>
|
<el-button @click="handleTaskAction(1)" size="small" type="primary">同意</el-button>
|
||||||
</el-row>
|
</el-row>
|
||||||
|
|||||||
@@ -28,9 +28,9 @@ const PROPOSAL_INFO = {
|
|||||||
<dict-tag :options="dict.type.PROPOSAL_CASE_FILING_RESULT"
|
<dict-tag :options="dict.type.PROPOSAL_CASE_FILING_RESULT"
|
||||||
:value="viewData.caseFilingResult"></dict-tag>
|
:value="viewData.caseFilingResult"></dict-tag>
|
||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
<el-descriptions-item label="调研情况" :span="3">
|
<!--<el-descriptions-item label="调研情况" :span="3">
|
||||||
<div class="text-left">{{viewData.researchFindings}}</div>
|
<div class="text-left">{{viewData.researchFindings}}</div>
|
||||||
</el-descriptions-item>
|
</el-descriptions-item>-->
|
||||||
<el-descriptions-item label="提案案由" :span="3">
|
<el-descriptions-item label="提案案由" :span="3">
|
||||||
<div class="text-left" v-html="viewData.brief"></div>
|
<div class="text-left" v-html="viewData.brief"></div>
|
||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
|
|||||||
+3
-1
@@ -337,7 +337,9 @@ layout("/layouts/platform.html"){
|
|||||||
})
|
})
|
||||||
},
|
},
|
||||||
listSession() {
|
listSession() {
|
||||||
this.$axios.post("/platform/proposal/common/listSession").then((res) => {
|
this.$axios.post("/platform/proposal/common/listSession", {
|
||||||
|
orderBy: "asc"
|
||||||
|
}).then((res) => {
|
||||||
if (res.code === 0) {
|
if (res.code === 0) {
|
||||||
this.sessionOptions = res.data
|
this.sessionOptions = res.data
|
||||||
if (this.sessionOptions) {
|
if (this.sessionOptions) {
|
||||||
|
|||||||
+1
-1
@@ -140,7 +140,7 @@ layout("/layouts/platform.html"){
|
|||||||
<!--#include("../../common/info.js"){}#-->
|
<!--#include("../../common/info.js"){}#-->
|
||||||
new Vue({
|
new Vue({
|
||||||
el: "#app",
|
el: "#app",
|
||||||
dicts: ["PROPOSAL_TYPE", "PROPOSAL_CASE_FILING_RESULT"],
|
dicts: ["PROPOSAL_TYPE", "PROPOSAL_CASE_FILING_RESULT", "PROPOSAL_CASE_FILING_TYPE"],
|
||||||
store,
|
store,
|
||||||
mixins: [initTableMixins],
|
mixins: [initTableMixins],
|
||||||
components: {
|
components: {
|
||||||
|
|||||||
+18
-11
@@ -128,21 +128,28 @@ layout("/layouts/platform.html"){
|
|||||||
</el-row>
|
</el-row>
|
||||||
|
|
||||||
<el-row :gutter="20" type="flex">
|
<el-row :gutter="20" type="flex">
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="提案编号" prop="code"
|
||||||
|
:rules="[{required:true,message:'请输入提案编号',trigger:'blur'}]">
|
||||||
|
<el-input maxlength="100" placeholder="提案编号" v-model="formData.code"></el-input>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
<el-col :span="12">
|
<el-col :span="12">
|
||||||
<el-form-item label="提案名称" prop="name"
|
<el-form-item label="提案名称" prop="name"
|
||||||
:rules="[{required:true,message:'请输入提案名称',trigger:'blur'}]">
|
:rules="[{required:true,message:'请输入提案名称',trigger:'blur'}]">
|
||||||
<el-input maxlength="100" placeholder="提案名称" v-model="formData.name"></el-input>
|
<el-input maxlength="100" placeholder="提案名称" v-model="formData.name"></el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
|
||||||
|
<el-row :gutter="20" type="flex">
|
||||||
<el-col :span="12">
|
<el-col :span="12">
|
||||||
<el-form-item label="提案方式" prop="source">
|
<el-form-item label="提案方式" prop="source">
|
||||||
<el-input :value="dict.type.PROPOSAL_SOURCE.find(v=>v.code === formData.source)?.name"
|
<el-input :value="dict.type.PROPOSAL_SOURCE.find(v=>v.code === formData.source)?.name"
|
||||||
disabled></el-input>
|
disabled></el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
|
||||||
|
|
||||||
<el-row :gutter="20" type="flex">
|
|
||||||
<el-col :span="12">
|
<el-col :span="12">
|
||||||
<el-form-item label="提案类别" prop="typeId">
|
<el-form-item label="提案类别" prop="typeId">
|
||||||
<el-select v-model="formData.typeId" style="width: 100%">
|
<el-select v-model="formData.typeId" style="width: 100%">
|
||||||
@@ -177,15 +184,15 @@ layout("/layouts/platform.html"){
|
|||||||
<text-editor v-model="formData.measures" key="measures"
|
<text-editor v-model="formData.measures" key="measures"
|
||||||
placeholder="建议措施"></text-editor>
|
placeholder="建议措施"></text-editor>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<!-- <el-form-item label="附件上传" prop="files">-->
|
<el-form-item label="附件上传" prop="files">
|
||||||
<!-- <file-upload-->
|
<file-upload
|
||||||
<!-- :value.sync="formData.files"-->
|
:value.sync="formData.files"
|
||||||
<!-- :upload_number="5"-->
|
:upload_number="5"
|
||||||
<!-- upload_result_category="array"-->
|
upload_result_category="array"
|
||||||
<!-- upload_mode="drag"-->
|
upload_mode="drag"
|
||||||
<!-- complete_result-->
|
complete_result
|
||||||
<!-- ></file-upload>-->
|
></file-upload>
|
||||||
<!-- </el-form-item>-->
|
</el-form-item>
|
||||||
</el-form>
|
</el-form>
|
||||||
<el-row type="flex" justify="end">
|
<el-row type="flex" justify="end">
|
||||||
<el-button @click="$refs.guava.index()">取 消</el-button>
|
<el-button @click="$refs.guava.index()">取 消</el-button>
|
||||||
|
|||||||
+9
@@ -231,6 +231,14 @@ layout("/layouts/platform.html"){
|
|||||||
cancelButtonText: "取消",
|
cancelButtonText: "取消",
|
||||||
type: "warning"
|
type: "warning"
|
||||||
}).then(() => {
|
}).then(() => {
|
||||||
|
// 是否有协办单位
|
||||||
|
let tf_helpunitreply;
|
||||||
|
if (this.formData.tf_slaveUnitIds && this.formData.tf_slaveUnitIds.length > 0) {
|
||||||
|
tf_helpunitreply = 'HAS_HELP_UNIT'
|
||||||
|
} else {
|
||||||
|
tf_helpunitreply = 'NO_HELP_UNIT'
|
||||||
|
}
|
||||||
|
|
||||||
const loading = createLoading('提交中')
|
const loading = createLoading('提交中')
|
||||||
this.$axios.post("/flow/common/executeTask", {
|
this.$axios.post("/flow/common/executeTask", {
|
||||||
data: JSON.stringify({
|
data: JSON.stringify({
|
||||||
@@ -239,6 +247,7 @@ layout("/layouts/platform.html"){
|
|||||||
tf_masterUnitName: this.formData.tf_masterUnitId ? this.underTakeOptions.find(v => v.id === this.formData.tf_masterUnitId)?.name : null,
|
tf_masterUnitName: this.formData.tf_masterUnitId ? this.underTakeOptions.find(v => v.id === this.formData.tf_masterUnitId)?.name : null,
|
||||||
tf_slaveUnitNames: this.formData.tf_slaveUnitIds.map(v => this.underTakeOptions.find(v2 => v2.id === v)?.name),
|
tf_slaveUnitNames: this.formData.tf_slaveUnitIds.map(v => this.underTakeOptions.find(v2 => v2.id === v)?.name),
|
||||||
tf_slaveUnitNameStr: this.formData.tf_slaveUnitIds.map(v => this.underTakeOptions.find(v2 => v2.id === v)?.name).join(','),
|
tf_slaveUnitNameStr: this.formData.tf_slaveUnitIds.map(v => this.underTakeOptions.find(v2 => v2.id === v)?.name).join(','),
|
||||||
|
tf_helpunitreply: tf_helpunitreply
|
||||||
})
|
})
|
||||||
}).then((res) => {
|
}).then((res) => {
|
||||||
if (res.code === 0) {
|
if (res.code === 0) {
|
||||||
|
|||||||
-12
@@ -92,17 +92,6 @@ layout("/layouts/platform.html"){
|
|||||||
:rules="[{required:true,message:'必填',trigger:['change','blur']}]">
|
:rules="[{required:true,message:'必填',trigger:['change','blur']}]">
|
||||||
<user-opinion-textarea v-model="formData.tf_opinion"></user-opinion-textarea>
|
<user-opinion-textarea v-model="formData.tf_opinion"></user-opinion-textarea>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<template v-if="['SATISFIED','FAIRLY_SATISFIED'].includes(formData.tf_feedback)">
|
|
||||||
<el-form-item label="通讯地址" prop="tf_address" :rules="[{required:true,message:'必填',trigger:['change','blur']}]">
|
|
||||||
<el-input v-model="formData.tf_address" placeholder="请输入通讯地址" clearable></el-input>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="联系电话" prop="tf_phone" :rules="[{required:true,message:'必填',trigger:['change','blur']}]">
|
|
||||||
<el-input v-model="formData.tf_phone" placeholder="请输入联系电话" clearable></el-input>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="邮政编码" prop="tf_postcode" :rules="[{required:true,message:'必填',trigger:['change','blur']}]">
|
|
||||||
<el-input v-model="formData.tf_postcode" placeholder="请输入邮政编码" clearable></el-input>
|
|
||||||
</el-form-item>
|
|
||||||
</template>
|
|
||||||
</el-form>
|
</el-form>
|
||||||
<el-row type="flex" justify="end">
|
<el-row type="flex" justify="end">
|
||||||
<el-button @click="$refs.guava.index()" size="small">取消</el-button>
|
<el-button @click="$refs.guava.index()" size="small">取消</el-button>
|
||||||
@@ -231,7 +220,6 @@ layout("/layouts/platform.html"){
|
|||||||
if (this.sessionOptions) {
|
if (this.sessionOptions) {
|
||||||
this.$set(this.pageForm, "sessionId", this.sessionOptions[0].id)
|
this.$set(this.pageForm, "sessionId", this.sessionOptions[0].id)
|
||||||
this.pageData()
|
this.pageData()
|
||||||
this.listDelegation()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -42,6 +42,9 @@ layout("/layouts/platform.html"){
|
|||||||
<template v-else-if="column.prop === 'merge'" scope="{row}">
|
<template v-else-if="column.prop === 'merge'" scope="{row}">
|
||||||
<el-tag v-if="row.merge" size="small">是</el-tag>
|
<el-tag v-if="row.merge" size="small">是</el-tag>
|
||||||
</template>
|
</template>
|
||||||
|
<template v-else-if="column.prop === 'taskName'" scope="{row}">
|
||||||
|
<span>{{ (row.startTaskId) ? row.taskName : '待提交' }}</span>
|
||||||
|
</template>
|
||||||
<template v-else-if="column.prop === 'instanceState'" scope="{row}">
|
<template v-else-if="column.prop === 'instanceState'" scope="{row}">
|
||||||
<enum-tag :value="row.instanceState" name="ProcessInstanceStateEnum" label_key="message"
|
<enum-tag :value="row.instanceState" name="ProcessInstanceStateEnum" label_key="message"
|
||||||
size="small"></enum-tag>
|
size="small"></enum-tag>
|
||||||
|
|||||||
+1
@@ -137,6 +137,7 @@ layout("/layouts/platform.html"){
|
|||||||
{label: "提案类别", prop: "typeName"},
|
{label: "提案类别", prop: "typeName"},
|
||||||
{label: "是否并案", prop: "merge"},
|
{label: "是否并案", prop: "merge"},
|
||||||
{label: "当前节点", prop: "curTaskName"},
|
{label: "当前节点", prop: "curTaskName"},
|
||||||
|
{label: "审核人", prop: "auditUser"},
|
||||||
{label: "流程状态", prop: "instanceState"}
|
{label: "流程状态", prop: "instanceState"}
|
||||||
],
|
],
|
||||||
pageForm: {
|
pageForm: {
|
||||||
|
|||||||
+1
@@ -260,6 +260,7 @@ layout("/layouts/platform.html"){
|
|||||||
{label: "承办单位", prop: "underTakeName"},
|
{label: "承办单位", prop: "underTakeName"},
|
||||||
{label: "承办类型", prop: "underTakeIsMaster"},
|
{label: "承办类型", prop: "underTakeIsMaster"},
|
||||||
{label: "当前节点", prop: "curTaskName"},
|
{label: "当前节点", prop: "curTaskName"},
|
||||||
|
{label: "审核人", prop: "auditUser"},
|
||||||
{label: "流程状态", prop: "instanceState"}
|
{label: "流程状态", prop: "instanceState"}
|
||||||
],
|
],
|
||||||
pageForm: {
|
pageForm: {
|
||||||
|
|||||||
+21
@@ -1,6 +1,13 @@
|
|||||||
<!--#
|
<!--#
|
||||||
layout("/layouts/platform.html"){
|
layout("/layouts/platform.html"){
|
||||||
#-->
|
#-->
|
||||||
|
|
||||||
|
<style>
|
||||||
|
.write-dialog .el-dialog__body {
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
<div id="app" v-cloak>
|
<div id="app" v-cloak>
|
||||||
<guava ref="guava">
|
<guava ref="guava">
|
||||||
<el-card shadow="never">
|
<el-card shadow="never">
|
||||||
@@ -219,8 +226,13 @@ layout("/layouts/platform.html"){
|
|||||||
<div style="max-height: 75vh;overflow-y: auto">
|
<div style="max-height: 75vh;overflow-y: auto">
|
||||||
<formal-write ref="formalWriteRef" :is_read="isRead" :user_id="userId"
|
<formal-write ref="formalWriteRef" :is_read="isRead" :user_id="userId"
|
||||||
:session_id="pageForm.sessionId"
|
:session_id="pageForm.sessionId"
|
||||||
|
:dialog="true"
|
||||||
@refresh="writeDialog=false;doSearch()"></formal-write>
|
@refresh="writeDialog=false;doSearch()"></formal-write>
|
||||||
</div>
|
</div>
|
||||||
|
<div slot="footer" class="dialog-footer">
|
||||||
|
<el-button @click="$refs.formalWriteRef.onSave()">保存草稿</el-button>
|
||||||
|
<el-button type="primary" @click="$refs.formalWriteRef.onSubmit()">提交信息</el-button>
|
||||||
|
</div>
|
||||||
</el-dialog>
|
</el-dialog>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
@@ -339,7 +351,16 @@ layout("/layouts/platform.html"){
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
<style>
|
||||||
|
.write-dialog .el-dialog__title {
|
||||||
|
font-size: 22px; /* 调整为您需要的大小 */
|
||||||
|
font-weight: 500;
|
||||||
|
}
|
||||||
|
|
||||||
|
.write-dialog .el-dialog__body {
|
||||||
|
padding-top: 0px;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
<!--#
|
<!--#
|
||||||
}
|
}
|
||||||
|
|||||||
+66
-48
@@ -1,6 +1,6 @@
|
|||||||
const write = {
|
const write = {
|
||||||
template: /*language=HTML*/ `
|
template: /*language=HTML*/ `
|
||||||
<div class="container-x1">
|
<div class="container-x1" style="padding: 0">
|
||||||
|
|
||||||
<div class="form-container">
|
<div class="form-container">
|
||||||
<header class="header-x">
|
<header class="header-x">
|
||||||
@@ -32,7 +32,7 @@ const write = {
|
|||||||
<div class="info-content">
|
<div class="info-content">
|
||||||
<i class="fa fa-info-circle info-icon"></i>
|
<i class="fa fa-info-circle info-icon"></i>
|
||||||
<div class="info-text">
|
<div class="info-text">
|
||||||
<h3 class="info-title">推选信息</h3>
|
<h2 class="info-title" style="font-size: 18px;">推选信息</h2>
|
||||||
<p class="info-desc">您已被预选为{{ sessionName }}代表</p>
|
<p class="info-desc">您已被预选为{{ sessionName }}代表</p>
|
||||||
<div class="info-details">
|
<div class="info-details">
|
||||||
<p>推选单位:{{ formData.unionName }}</p>
|
<p>推选单位:{{ formData.unionName }}</p>
|
||||||
@@ -58,28 +58,27 @@ const write = {
|
|||||||
:disabled="(formData && !['53ff0c2a-ba93-45e9-a9fd-db51cdab3080','97b0846b-22c6-4d34-9002-a6b67d592944'].includes(formData.taskKey)) || is_read"
|
:disabled="(formData && !['53ff0c2a-ba93-45e9-a9fd-db51cdab3080','97b0846b-22c6-4d34-9002-a6b67d592944'].includes(formData.taskKey)) || is_read"
|
||||||
>
|
>
|
||||||
<div class="form-section">
|
<div class="form-section">
|
||||||
<h3 class="section-title">基本信息</h3>
|
<h2 class="section-title">基本信息</h3>
|
||||||
<div class="form-grid">
|
<div class="form-grid custom-grid">
|
||||||
<el-row :gutter="20">
|
<div class="grid-item">
|
||||||
<el-col :span="12">
|
|
||||||
<el-form-item label="姓名" prop="userName">
|
<el-form-item label="姓名" prop="userName">
|
||||||
<el-input v-model="formData.userName" readonly></el-input>
|
<el-input v-model="formData.userName" readonly></el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</div>
|
||||||
<el-col :span="12">
|
<div class="grid-item">
|
||||||
<el-form-item label="工号" prop="loginName">
|
<el-form-item label="工号" prop="loginName">
|
||||||
<el-input v-model="formData.loginName" readonly></el-input>
|
<el-input v-model="formData.loginName" readonly></el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</div>
|
||||||
<el-col :span="12">
|
<div class="grid-item">
|
||||||
<el-form-item label="性别" prop="sex">
|
<el-form-item label="性别" prop="sex">
|
||||||
<el-radio-group v-model="formData.sex" size="small">
|
<el-radio-group v-model="formData.sex" size="small">
|
||||||
<el-radio border label="男">男</el-radio>
|
<el-radio border label="男">男</el-radio>
|
||||||
<el-radio border label="女">女</el-radio>
|
<el-radio border label="女">女</el-radio>
|
||||||
</el-radio-group>
|
</el-radio-group>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</div>
|
||||||
<el-col :span="12">
|
<div class="grid-item">
|
||||||
<el-form-item label="出生年月" prop="birthday">
|
<el-form-item label="出生年月" prop="birthday">
|
||||||
<el-date-picker
|
<el-date-picker
|
||||||
v-model="formData.birthday"
|
v-model="formData.birthday"
|
||||||
@@ -89,21 +88,21 @@ const write = {
|
|||||||
style="width: 100%"
|
style="width: 100%"
|
||||||
></el-date-picker>
|
></el-date-picker>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</div>
|
||||||
<el-col :span="12">
|
<div class="grid-item">
|
||||||
<el-form-item label="民族" prop="nation">
|
<el-form-item label="民族" prop="nation">
|
||||||
<dict-select v-model="formData.nation" style="width: 100%"
|
<dict-select v-model="formData.nation" style="width: 100%"
|
||||||
placeholder="请选择民族"
|
placeholder="请选择民族"
|
||||||
code="USER_NATION"></dict-select>
|
code="USER_NATION"></dict-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</div>
|
||||||
<el-col :span="12">
|
<div class="grid-item">
|
||||||
<el-form-item label="政治面貌" prop="political">
|
<el-form-item label="政治面貌" prop="political">
|
||||||
<el-input maxlength="100" placeholder="政治面貌"
|
<el-input maxlength="100" placeholder="政治面貌"
|
||||||
v-model="formData.political"></el-input>
|
v-model="formData.political"></el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</div>
|
||||||
<el-col :span="12">
|
<div class="grid-item">
|
||||||
<el-form-item label="所属工会">
|
<el-form-item label="所属工会">
|
||||||
<el-input
|
<el-input
|
||||||
v-model="formData.unionName"
|
v-model="formData.unionName"
|
||||||
@@ -112,8 +111,8 @@ const write = {
|
|||||||
clearable
|
clearable
|
||||||
></el-input>
|
></el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</div>
|
||||||
<el-col :span="12">
|
<div class="grid-item">
|
||||||
<el-form-item label="所属单位">
|
<el-form-item label="所属单位">
|
||||||
<el-input
|
<el-input
|
||||||
v-model="formData.unitName"
|
v-model="formData.unitName"
|
||||||
@@ -122,77 +121,70 @@ const write = {
|
|||||||
clearable
|
clearable
|
||||||
></el-input>
|
></el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</div>
|
||||||
<el-col :span="12">
|
<div class="grid-item">
|
||||||
<el-form-item label="职称" prop="professionalTitle">
|
<el-form-item label="职称" prop="professionalTitle">
|
||||||
<dict-select v-model="formData.professionalTitle" style="width: 100%"
|
<dict-select v-model="formData.professionalTitle" style="width: 100%"
|
||||||
placeholder="请选择职称"
|
placeholder="请选择职称"
|
||||||
code="technical_title_level"></dict-select>
|
code="technical_title_level"></dict-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</div>
|
||||||
<el-col :span="12">
|
<div class="grid-item">
|
||||||
<el-form-item label="是否聘用制" prop="employ">
|
<el-form-item label="是否聘用制" prop="employ">
|
||||||
<el-radio-group v-model="formData.employ" size="small">
|
<el-radio-group v-model="formData.employ" size="small">
|
||||||
<el-radio border :label="true">是</el-radio>
|
<el-radio border :label="true">是</el-radio>
|
||||||
<el-radio border :label="false">否</el-radio>
|
<el-radio border :label="false">否</el-radio>
|
||||||
</el-radio-group>
|
</el-radio-group>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</div>
|
||||||
<el-col :span="12">
|
<div class="grid-item">
|
||||||
<el-form-item label="是否高级职称" prop="seniorTeacher">
|
<el-form-item label="是否高级职称" prop="seniorTeacher">
|
||||||
<el-radio-group v-model="formData.seniorTeacher" size="small">
|
<el-radio-group v-model="formData.seniorTeacher" size="small">
|
||||||
<el-radio border :label="true">是</el-radio>
|
<el-radio border :label="true">是</el-radio>
|
||||||
<el-radio border :label="false">否</el-radio>
|
<el-radio border :label="false">否</el-radio>
|
||||||
</el-radio-group>
|
</el-radio-group>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
</div>
|
||||||
</el-col>
|
<div class="grid-item">
|
||||||
<el-col :span="12">
|
|
||||||
<el-form-item label="是否中级职称及以下" prop="intermediateBelow">
|
<el-form-item label="是否中级职称及以下" prop="intermediateBelow">
|
||||||
<el-radio-group v-model="formData.intermediateBelow" size="small">
|
<el-radio-group v-model="formData.intermediateBelow" size="small">
|
||||||
<el-radio border :label="true">是</el-radio>
|
<el-radio border :label="true">是</el-radio>
|
||||||
<el-radio border :label="false">否</el-radio>
|
<el-radio border :label="false">否</el-radio>
|
||||||
</el-radio-group>
|
</el-radio-group>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</div>
|
||||||
<el-col :span="12">
|
<div class="grid-item">
|
||||||
<el-form-item label="是否干部" prop="cadre">
|
<el-form-item label="是否干部" prop="cadre">
|
||||||
<el-radio-group v-model="formData.cadre" size="small">
|
<el-radio-group v-model="formData.cadre" size="small">
|
||||||
<el-radio border :label="true">是</el-radio>
|
<el-radio border :label="true">是</el-radio>
|
||||||
<el-radio border :label="false">否</el-radio>
|
<el-radio border :label="false">否</el-radio>
|
||||||
</el-radio-group>
|
</el-radio-group>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</div>
|
||||||
<el-col :span="12">
|
<div class="grid-item">
|
||||||
<el-form-item label="是否工人" prop="worker">
|
<el-form-item label="是否工人" prop="worker">
|
||||||
<el-radio-group v-model="formData.worker" size="small">
|
<el-radio-group v-model="formData.worker" size="small">
|
||||||
<el-radio border :label="true">是</el-radio>
|
<el-radio border :label="true">是</el-radio>
|
||||||
<el-radio border :label="false">否</el-radio>
|
<el-radio border :label="false">否</el-radio>
|
||||||
</el-radio-group>
|
</el-radio-group>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</div>
|
||||||
|
<div class="grid-item">
|
||||||
<el-col :span="12">
|
|
||||||
<el-form-item label="校级领导" prop="schoolLeader">
|
<el-form-item label="校级领导" prop="schoolLeader">
|
||||||
<el-radio-group v-model="formData.schoolLeader" size="small">
|
<el-radio-group v-model="formData.schoolLeader" size="small">
|
||||||
<el-radio border :label="true">是</el-radio>
|
<el-radio border :label="true">是</el-radio>
|
||||||
<el-radio border :label="false">否</el-radio>
|
<el-radio border :label="false">否</el-radio>
|
||||||
</el-radio-group>
|
</el-radio-group>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</div>
|
||||||
|
<div class="grid-item">
|
||||||
<el-col :span="12">
|
|
||||||
<el-form-item label="中层领导" prop="middleLevelLeader">
|
<el-form-item label="中层领导" prop="middleLevelLeader">
|
||||||
<el-radio-group v-model="formData.middleLevelLeader" size="small">
|
<el-radio-group v-model="formData.middleLevelLeader" size="small">
|
||||||
<el-radio border :label="true">是</el-radio>
|
<el-radio border :label="true">是</el-radio>
|
||||||
<el-radio border :label="false">否</el-radio>
|
<el-radio border :label="false">否</el-radio>
|
||||||
</el-radio-group>
|
</el-radio-group>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</div>
|
||||||
|
|
||||||
</el-row>
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<div class="form-grid">
|
<div class="form-grid">
|
||||||
|
|
||||||
@@ -206,7 +198,7 @@ const write = {
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div v-if="formData && ['53ff0c2a-ba93-45e9-a9fd-db51cdab3080','97b0846b-22c6-4d34-9002-a6b67d592944'].includes(formData.taskKey)"
|
<div v-if="!dialog && formData && ['53ff0c2a-ba93-45e9-a9fd-db51cdab3080','97b0846b-22c6-4d34-9002-a6b67d592944'].includes(formData.taskKey)"
|
||||||
class="form-actions">
|
class="form-actions">
|
||||||
<el-button @click="onSave">保存草稿</el-button>
|
<el-button @click="onSave">保存草稿</el-button>
|
||||||
<el-button type="primary" @click="onSubmit">提交信息</el-button>
|
<el-button type="primary" @click="onSubmit">提交信息</el-button>
|
||||||
@@ -270,7 +262,12 @@ const write = {
|
|||||||
type: Boolean,
|
type: Boolean,
|
||||||
required: false,
|
required: false,
|
||||||
default: false
|
default: false
|
||||||
}
|
},
|
||||||
|
dialog: {
|
||||||
|
type: Boolean,
|
||||||
|
required: false,
|
||||||
|
default: null
|
||||||
|
},
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
@@ -453,7 +450,12 @@ const write = {
|
|||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
background-color: white;
|
background-color: white;
|
||||||
margin-bottom: 20px;
|
margin-bottom: 1px;
|
||||||
|
}
|
||||||
|
|
||||||
|
::v-deep .el-tabs__item {
|
||||||
|
font-size: 18px;/* 填写信息 */
|
||||||
|
font-weight: 500;
|
||||||
}
|
}
|
||||||
|
|
||||||
.header-x .header-left {
|
.header-x .header-left {
|
||||||
@@ -544,6 +546,7 @@ const write = {
|
|||||||
background-color: white;
|
background-color: white;
|
||||||
border-radius: 8px;
|
border-radius: 8px;
|
||||||
padding: 32px;
|
padding: 32px;
|
||||||
|
padding-top: 20px;
|
||||||
margin-bottom: 20px;
|
margin-bottom: 20px;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -552,6 +555,7 @@ const write = {
|
|||||||
background-color: #ebf5ff;
|
background-color: #ebf5ff;
|
||||||
padding: 16px;
|
padding: 16px;
|
||||||
margin-bottom: 32px;
|
margin-bottom: 32px;
|
||||||
|
margin-top: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.info-box ::v-deep .info-content {
|
.info-box ::v-deep .info-content {
|
||||||
@@ -572,6 +576,7 @@ const write = {
|
|||||||
.info-box .info-content .info-text ::v-deep .info-title {
|
.info-box .info-content .info-text ::v-deep .info-title {
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
margin-bottom: 8px;
|
margin-bottom: 8px;
|
||||||
|
font-size: 18px; /* 推选信息没用 */
|
||||||
}
|
}
|
||||||
|
|
||||||
.info-box .info-content .info-text ::v-deep .info-desc {
|
.info-box .info-content .info-text ::v-deep .info-desc {
|
||||||
@@ -594,7 +599,7 @@ const write = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.form-section ::v-deep .section-title {
|
.form-section ::v-deep .section-title {
|
||||||
font-size: 18px;
|
font-size: 18px;/* 基本信息没用 */
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
margin-bottom: 16px;
|
margin-bottom: 16px;
|
||||||
}
|
}
|
||||||
@@ -628,6 +633,19 @@ const write = {
|
|||||||
::v-deep .hidden {
|
::v-deep .hidden {
|
||||||
display: none !important;
|
display: none !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
::v-deep .custom-grid {
|
||||||
|
display: flex;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
gap: 16px;
|
||||||
|
margin: 0 -8px 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
::v-deep .grid-item {
|
||||||
|
flex: 1 1 calc(50% - 16px);
|
||||||
|
min-width: 200px; /* 防止在窄屏过度压缩 */
|
||||||
|
padding: 0 8px;
|
||||||
|
}
|
||||||
`
|
`
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
+5
@@ -142,8 +142,13 @@ layout("/layouts/platform.html"){
|
|||||||
<div style="max-height: 75vh;overflow-y: auto">
|
<div style="max-height: 75vh;overflow-y: auto">
|
||||||
<formal-write ref="formalWriteRef" :is_read="isRead" :user_id="userId"
|
<formal-write ref="formalWriteRef" :is_read="isRead" :user_id="userId"
|
||||||
:session_id="pageForm.sessionId"
|
:session_id="pageForm.sessionId"
|
||||||
|
:dialog="true"
|
||||||
@refresh="writeDialog=false;doSearch()"></formal-write>
|
@refresh="writeDialog=false;doSearch()"></formal-write>
|
||||||
</div>
|
</div>
|
||||||
|
<div slot="footer" class="dialog-footer">
|
||||||
|
<el-button @click="$refs.formalWriteRef.onSave()">保存草稿</el-button>
|
||||||
|
<el-button type="primary" @click="$refs.formalWriteRef.onSubmit()">提交信息</el-button>
|
||||||
|
</div>
|
||||||
</el-dialog>
|
</el-dialog>
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -27,9 +27,9 @@ const PROPOSAL_INFO = {
|
|||||||
<dict-tag :options="dict.type.PROPOSAL_CASE_FILING_RESULT"
|
<dict-tag :options="dict.type.PROPOSAL_CASE_FILING_RESULT"
|
||||||
:value="viewData.caseFilingResult"></dict-tag>
|
:value="viewData.caseFilingResult"></dict-tag>
|
||||||
</van-cell>
|
</van-cell>
|
||||||
<van-cell title="调研情况" class="direction-column-cell">
|
<!--<van-cell title="调研情况" class="direction-column-cell">
|
||||||
<div v-html="viewData.researchFindings"></div>
|
<div v-html="viewData.researchFindings"></div>
|
||||||
</van-cell>
|
</van-cell>-->
|
||||||
<van-cell title="提案案由" class="direction-column-cell">
|
<van-cell title="提案案由" class="direction-column-cell">
|
||||||
<div v-html="viewData.brief"></div>
|
<div v-html="viewData.brief"></div>
|
||||||
</van-cell>
|
</van-cell>
|
||||||
|
|||||||
+1
-1
@@ -25,7 +25,7 @@ layout("/layouts/platform_h5.html"){
|
|||||||
<table-column label="提案类别">{{row.typeName}}</table-column>
|
<table-column label="提案类别">{{row.typeName}}</table-column>
|
||||||
<table-column label="提案人">{{row.createUserName}}</table-column>
|
<table-column label="提案人">{{row.createUserName}}</table-column>
|
||||||
<table-column label="代表团">{{row.delegationName}}</table-column>
|
<table-column label="代表团">{{row.delegationName}}</table-column>
|
||||||
<table-column label="当前节点">{{row.taskName}}</table-column>
|
<table-column label="当前节点">{{ (row.startTaskId) ? row.taskName : '待提交' }}</table-column>
|
||||||
</template>
|
</template>
|
||||||
<template #actions="{index,row}">
|
<template #actions="{index,row}">
|
||||||
<div class="action-btn" @click="onView(row)">
|
<div class="action-btn" @click="onView(row)">
|
||||||
|
|||||||
+1
-1
@@ -54,7 +54,7 @@ layout("/layouts/platform_h5.html"){
|
|||||||
<div class="action-btn" v-if="!pageForm.approval && $auth.hasRoleOr('SYSADMIN,PROPOSAL_UNIT_LEADER')"
|
<div class="action-btn" v-if="!pageForm.approval && $auth.hasRoleOr('SYSADMIN,PROPOSAL_UNIT_LEADER')"
|
||||||
@click="openTransfer(row)">
|
@click="openTransfer(row)">
|
||||||
<i class="fa fa-arrow-right"></i>
|
<i class="fa fa-arrow-right"></i>
|
||||||
<span>转办</span>
|
<span>转交</span>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
</table-list>
|
</table-list>
|
||||||
|
|||||||
+3
-3
@@ -270,7 +270,7 @@ layout("/layouts/platform_h5.html"){
|
|||||||
</van-cell-group>
|
</van-cell-group>
|
||||||
|
|
||||||
<van-cell-group title="提案内容" class="form-group">
|
<van-cell-group title="提案内容" class="form-group">
|
||||||
<van-field
|
<!--<van-field
|
||||||
v-model="formData.researchFindings"
|
v-model="formData.researchFindings"
|
||||||
name="researchFindings"
|
name="researchFindings"
|
||||||
label="调研情况"
|
label="调研情况"
|
||||||
@@ -280,7 +280,7 @@ layout("/layouts/platform_h5.html"){
|
|||||||
placeholder="请输入调研情况"
|
placeholder="请输入调研情况"
|
||||||
:rules="[{ required: true, message: '请填写调研情况' }]"
|
:rules="[{ required: true, message: '请填写调研情况' }]"
|
||||||
required
|
required
|
||||||
></van-field>
|
></van-field>-->
|
||||||
|
|
||||||
<van-field
|
<van-field
|
||||||
v-model="formData.brief"
|
v-model="formData.brief"
|
||||||
@@ -308,7 +308,7 @@ layout("/layouts/platform_h5.html"){
|
|||||||
|
|
||||||
<!-- 附件上传 -->
|
<!-- 附件上传 -->
|
||||||
<van-cell-group title="附件上传" class="form-group">
|
<van-cell-group title="附件上传" class="form-group">
|
||||||
<van-field label="附件" name="files" required class="direction-column-field">
|
<van-field label="附件" name="files" class="direction-column-field">
|
||||||
<h5-file-upload
|
<h5-file-upload
|
||||||
slot="input"
|
slot="input"
|
||||||
:value.sync="formData.files"
|
:value.sync="formData.files"
|
||||||
|
|||||||
@@ -177,13 +177,12 @@ const todo = {
|
|||||||
|
|
||||||
// 处理任务
|
// 处理任务
|
||||||
onView(task) {
|
onView(task) {
|
||||||
const {taskId, taskKey, instanceId, businessNo, formKey} = task;
|
const {taskId, taskKey, instanceId, businessNo, formKey, h5FormKey} = task;
|
||||||
this.$toast("暂未开通从当前地址点击查看!");
|
if (!h5FormKey) {
|
||||||
return;
|
|
||||||
if (!formKey) {
|
|
||||||
this.$toast("当前流程没有配置地址");
|
this.$toast("当前流程没有配置地址");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
this.$pjaxReplace(h5FormKey + "?taskId=" + taskId + "bizId=" + businessNo + "taskKey=" + taskKey)
|
||||||
},
|
},
|
||||||
|
|
||||||
// 获取空状态文本
|
// 获取空状态文本
|
||||||
|
|||||||
Reference in New Issue
Block a user