This commit is contained in:
@jyuhsin
2025-12-22 17:11:20 +08:00
15 changed files with 348 additions and 269 deletions
@@ -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();
// for (Sys_unit unit : list) {
@@ -2,6 +2,7 @@ package com.budwk.app.zhgh.democratic.proposal.controller.common;
import cn.dev33.satoken.annotation.SaCheckLogin;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.hutool.core.util.StrUtil;
import com.budwk.app.base.result.Result;
import com.budwk.app.zhgh.democratic.proposal.models.ProposalConfig;
import com.budwk.app.zhgh.democratic.proposal.models.ProposalType;
@@ -49,8 +50,11 @@ public class ProposalCommonController {
@At
@SaCheckLogin
@ApiOperation("查询全部的教代会")
public Result listSession() {
List<Teacher_congress_session> list = dao.query(Teacher_congress_session.class, Cnd.NEW().asc("startDate"));
public Result listSession(String orderBy) {
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);
}
@@ -89,7 +89,13 @@ public class ProposalSeniorBasicController {
@ApiOperation(value = "提案内容修改")
@Aop(TransAop.READ_COMMITTED)
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();
}
@@ -67,174 +67,176 @@ public class TeacherCongressSessionServiceImpl extends BaseServiceImpl<Teacher_c
session.setFullName("" + session.getJ() + "" + session.getC());
insert(session);
//代表团角色ID
Sys_role delegationHeadRole = sysRoleService.getByCode(RoleConstant.TEACHER_CONGRESS_DELEGATION_HEAD);
Sys_role delegationViceHeadRole = sysRoleService.getByCode(RoleConstant.TEACHER_CONGRESS_VICE_DELEGATION_HEAD);
Sys_role delegationContactRole = sysRoleService.getByCode(RoleConstant.TEACHER_CONGRESS_DELEGATION_CONTACT);
// 继承上届信息
//查询本届上次的信息
int c_num = Convert.chineseToNumber(session.getC().replaceAll("", ""));
if (c_num == 1) return;
int last_c_num = c_num - 1;
String last_c = Convert.numberToChinese(last_c_num, false);
Teacher_congress_session lastSession = fetch(Cnd.where(Teacher_congress_session::getJ, "=", session.getJ())
.and(Teacher_congress_session::getC, "=", last_c + ""));
if (isExtend) {
//代表团角色ID
Sys_role delegationHeadRole = sysRoleService.getByCode(RoleConstant.TEACHER_CONGRESS_DELEGATION_HEAD);
Sys_role delegationViceHeadRole = sysRoleService.getByCode(RoleConstant.TEACHER_CONGRESS_VICE_DELEGATION_HEAD);
Sys_role delegationContactRole = sysRoleService.getByCode(RoleConstant.TEACHER_CONGRESS_DELEGATION_CONTACT);
if (ObjectUtil.isEmpty(lastSession)) return;
//查询本届上次的信息
int c_num = Convert.chineseToNumber(session.getC().replaceAll("", ""));
if (c_num == 1) return;
int last_c_num = c_num - 1;
String last_c = Convert.numberToChinese(last_c_num, false);
Teacher_congress_session lastSession = fetch(Cnd.where(Teacher_congress_session::getJ, "=", session.getJ())
.and(Teacher_congress_session::getC, "=", last_c + ""));
//机构及机构人员数据
List<Teacher_congress_institution> lastInstitutions = dao().query(Teacher_congress_institution.class, Cnd.where(Teacher_congress_institution::getSessionId, "=", lastSession.getId()));
List<TreeNode<String>> treeNodes = lastInstitutions.stream().map(institution -> new TreeNode<>(institution.getId(), institution.getParentId(), institution.getName(), institution.getLocation()).setExtra(Map.of("code", institution.getCode(), "sessionId", institution.getSessionId()))).toList();
List<Tree<String>> treeList = TreeUtil.build(treeNodes, "0");
insertInstitution(session.getId(), "0", treeList);
if (ObjectUtil.isEmpty(lastSession)) return;
//从代表团入手
List<Teacher_congress_delegation> lastDelegations = dao().query(Teacher_congress_delegation.class, Cnd.where("sessionId", "=", lastSession.getId()));
for (Teacher_congress_delegation lastDelegation : lastDelegations) {
//代表团继承
Teacher_congress_delegation newDelegation = BeanUtil.copyProperties(lastDelegation, Teacher_congress_delegation.class);
newDelegation.setId(null);
newDelegation.setSessionId(session.getId());
dao().insert(newDelegation);
//机构及机构人员数据
List<Teacher_congress_institution> lastInstitutions = dao().query(Teacher_congress_institution.class, Cnd.where(Teacher_congress_institution::getSessionId, "=", lastSession.getId()));
List<TreeNode<String>> treeNodes = lastInstitutions.stream().map(institution -> new TreeNode<>(institution.getId(), institution.getParentId(), institution.getName(), institution.getLocation()).setExtra(Map.of("code", institution.getCode(), "sessionId", institution.getSessionId()))).toList();
List<Tree<String>> treeList = TreeUtil.build(treeNodes, "0");
insertInstitution(session.getId(), "0", treeList);
//团长角色权限继承
List<Sys_user_role> lastHeadUserRoles = dao().query(Sys_user_role.class, Cnd.where(Sys_user_role::getTcDelegationId, "=", lastDelegation.getId())
.and(Sys_user_role::getRoleId, "=", delegationHeadRole.getId()));
for (Sys_user_role lastHeadUser : lastHeadUserRoles) {
Sys_user_role newHeadUser = BeanUtil.copyProperties(lastHeadUser, Sys_user_role.class);
newHeadUser.setTcDelegationId(newDelegation.getId());
newHeadUser.setTcSessionId(session.getId());
dao().insert(newHeadUser);
}
//副团长角色权限继承
List<Sys_user_role> lastViceHeadUserRoles = dao().query(Sys_user_role.class, Cnd.where(Sys_user_role::getTcDelegationId, "=", lastDelegation.getId())
.and(Sys_user_role::getRoleId, "=", delegationViceHeadRole.getId()));
for (Sys_user_role lastViceHeadUser : lastViceHeadUserRoles) {
Sys_user_role newViceHeadUser = BeanUtil.copyProperties(lastViceHeadUser, Sys_user_role.class);
newViceHeadUser.setTcDelegationId(newDelegation.getId());
newViceHeadUser.setTcSessionId(session.getId());
dao().insert(newViceHeadUser);
}
//联络人角色权限继承
List<Sys_user_role> lastContactUserRoles = dao().query(Sys_user_role.class, Cnd.where(Sys_user_role::getTcDelegationId, "=", lastDelegation.getId())
.and(Sys_user_role::getRoleId, "=", delegationContactRole.getId()));
for (Sys_user_role lastContactUser : lastContactUserRoles) {
Sys_user_role newContactUser = BeanUtil.copyProperties(lastContactUser, Sys_user_role.class);
newContactUser.setTcDelegationId(newDelegation.getId());
newContactUser.setTcSessionId(session.getId());
dao().insert(newContactUser);
}
//从代表团入手
List<Teacher_congress_delegation> lastDelegations = dao().query(Teacher_congress_delegation.class, Cnd.where("sessionId", "=", lastSession.getId()));
for (Teacher_congress_delegation lastDelegation : lastDelegations) {
//代表团继承
Teacher_congress_delegation newDelegation = BeanUtil.copyProperties(lastDelegation, Teacher_congress_delegation.class);
newDelegation.setId(null);
newDelegation.setSessionId(session.getId());
dao().insert(newDelegation);
//组成分工会
List<Teacher_congress_delegation_union> lastDelegationUnions = dao().query(Teacher_congress_delegation_union.class, Cnd.where(Teacher_congress_delegation_union::getDelegationId, "=", lastDelegation.getId()));
List<Teacher_congress_delegation_union> newDelegationUnions = lastDelegationUnions.stream().map(lastDelegationUnion -> {
Teacher_congress_delegation_union newDelegationUnion = BeanUtil.copyProperties(lastDelegationUnion, Teacher_congress_delegation_union.class);
newDelegationUnion.setId(R.UU32());
newDelegationUnion.setDelegationId(newDelegation.getId());
newDelegationUnion.setSessionId(session.getId());
newDelegationUnion.setCreatedAt(null);
newDelegationUnion.setUpdatedAt(null);
newDelegationUnion.setCreatedBy(null);
newDelegationUnion.setUpdatedBy(null);
return newDelegationUnion;
}).toList();
dao().fastInsert(newDelegationUnions);
//组成单位
List<Teacher_congress_delegation_unit> lastDelegationUnits = dao().query(Teacher_congress_delegation_unit.class, Cnd.where(Teacher_congress_delegation_unit::getDelegationId, "=", lastDelegation.getId()));
List<Teacher_congress_delegation_unit> newDelegationUnits = lastDelegationUnits.stream().map(lastDelegationUnit -> {
Teacher_congress_delegation_unit newDelegationUnit = BeanUtil.copyProperties(lastDelegationUnit, Teacher_congress_delegation_unit.class);
newDelegationUnit.setId(R.UU32());
newDelegationUnit.setDelegationId(newDelegation.getId());
newDelegationUnit.setSessionId(session.getId());
newDelegationUnit.setCreatedAt(null);
newDelegationUnit.setUpdatedAt(null);
newDelegationUnit.setCreatedBy(null);
newDelegationUnit.setUpdatedBy(null);
return newDelegationUnit;
}).toList();
dao().fastInsert(newDelegationUnits);
}
//代表数据 单位 分工会 要根据最新的设置来调整
//代表数据
List<Teacher_congress_delegate> lastDelegates = dao().query(Teacher_congress_delegate.class, Cnd.where(Teacher_congress_delegate::getSessionId, "=", lastSession.getId()));
List<Teacher_congress_delegate> newDelegates = lastDelegates.stream().map(lastDelegate -> {
Teacher_congress_delegate newDelegate = BeanUtil.copyProperties(lastDelegate, Teacher_congress_delegate.class);
newDelegate.setId(R.UU32());
newDelegate.setSessionId(session.getId());
newDelegate.setCreatedAt(null);
newDelegate.setUpdatedAt(null);
newDelegate.setCreatedBy(null);
newDelegate.setUpdatedBy(null);
//查询本人最新的信息从用户表中
View_user vwUser = dao().fetch(View_user.class, Cnd.where(Sys_user::getId, "=", lastDelegate.getUserId()));
if (ObjectUtil.isNotEmpty(vwUser)) {
newDelegate.setUnitId(vwUser.getUnitId());
newDelegate.setUnitName(vwUser.getUnitName());
newDelegate.setUnionId(vwUser.getUnionId());
newDelegate.setUnionName(vwUser.getUnionName());
newDelegate.setSex(vwUser.getSex());
newDelegate.setMobile(vwUser.getMobile());
//去查询他当前所处的单位、分工会处于哪个代表团
if (StrUtil.isNotBlank(vwUser.getUnionId())) {
Teacher_congress_delegation_union delegationUnion = dao().fetch(Teacher_congress_delegation_union.class, Cnd.where(Teacher_congress_delegation_union::getSessionId, "=", session.getId())
.and(Teacher_congress_delegation_union::getUnionId, "=", vwUser.getUnionId()));
if (ObjectUtil.isNotEmpty(delegationUnion)) {
newDelegate.setDelegationId(delegationUnion.getDelegationId());
}
//团长角色权限继承
List<Sys_user_role> lastHeadUserRoles = dao().query(Sys_user_role.class, Cnd.where(Sys_user_role::getTcDelegationId, "=", lastDelegation.getId())
.and(Sys_user_role::getRoleId, "=", delegationHeadRole.getId()));
for (Sys_user_role lastHeadUser : lastHeadUserRoles) {
Sys_user_role newHeadUser = BeanUtil.copyProperties(lastHeadUser, Sys_user_role.class);
newHeadUser.setTcDelegationId(newDelegation.getId());
newHeadUser.setTcSessionId(session.getId());
dao().insert(newHeadUser);
}
//副团长角色权限继承
List<Sys_user_role> lastViceHeadUserRoles = dao().query(Sys_user_role.class, Cnd.where(Sys_user_role::getTcDelegationId, "=", lastDelegation.getId())
.and(Sys_user_role::getRoleId, "=", delegationViceHeadRole.getId()));
for (Sys_user_role lastViceHeadUser : lastViceHeadUserRoles) {
Sys_user_role newViceHeadUser = BeanUtil.copyProperties(lastViceHeadUser, Sys_user_role.class);
newViceHeadUser.setTcDelegationId(newDelegation.getId());
newViceHeadUser.setTcSessionId(session.getId());
dao().insert(newViceHeadUser);
}
//联络人角色权限继承
List<Sys_user_role> lastContactUserRoles = dao().query(Sys_user_role.class, Cnd.where(Sys_user_role::getTcDelegationId, "=", lastDelegation.getId())
.and(Sys_user_role::getRoleId, "=", delegationContactRole.getId()));
for (Sys_user_role lastContactUser : lastContactUserRoles) {
Sys_user_role newContactUser = BeanUtil.copyProperties(lastContactUser, Sys_user_role.class);
newContactUser.setTcDelegationId(newDelegation.getId());
newContactUser.setTcSessionId(session.getId());
dao().insert(newContactUser);
}
if (StrUtil.isNotBlank(vwUser.getUnitId())) {
Teacher_congress_delegation_unit delegationUnit = dao().fetch(Teacher_congress_delegation_unit.class, Cnd.where(Teacher_congress_delegation_unit::getSessionId, "=", session.getId())
.and(Teacher_congress_delegation_unit::getUnitId, "=", vwUser.getUnitId()));
if (ObjectUtil.isNotEmpty(delegationUnit)) {
newDelegate.setDelegationId(delegationUnit.getDelegationId());
//组成分工会
List<Teacher_congress_delegation_union> lastDelegationUnions = dao().query(Teacher_congress_delegation_union.class, Cnd.where(Teacher_congress_delegation_union::getDelegationId, "=", lastDelegation.getId()));
List<Teacher_congress_delegation_union> newDelegationUnions = lastDelegationUnions.stream().map(lastDelegationUnion -> {
Teacher_congress_delegation_union newDelegationUnion = BeanUtil.copyProperties(lastDelegationUnion, Teacher_congress_delegation_union.class);
newDelegationUnion.setId(R.UU32());
newDelegationUnion.setDelegationId(newDelegation.getId());
newDelegationUnion.setSessionId(session.getId());
newDelegationUnion.setCreatedAt(null);
newDelegationUnion.setUpdatedAt(null);
newDelegationUnion.setCreatedBy(null);
newDelegationUnion.setUpdatedBy(null);
return newDelegationUnion;
}).toList();
dao().fastInsert(newDelegationUnions);
//组成单位
List<Teacher_congress_delegation_unit> lastDelegationUnits = dao().query(Teacher_congress_delegation_unit.class, Cnd.where(Teacher_congress_delegation_unit::getDelegationId, "=", lastDelegation.getId()));
List<Teacher_congress_delegation_unit> newDelegationUnits = lastDelegationUnits.stream().map(lastDelegationUnit -> {
Teacher_congress_delegation_unit newDelegationUnit = BeanUtil.copyProperties(lastDelegationUnit, Teacher_congress_delegation_unit.class);
newDelegationUnit.setId(R.UU32());
newDelegationUnit.setDelegationId(newDelegation.getId());
newDelegationUnit.setSessionId(session.getId());
newDelegationUnit.setCreatedAt(null);
newDelegationUnit.setUpdatedAt(null);
newDelegationUnit.setCreatedBy(null);
newDelegationUnit.setUpdatedBy(null);
return newDelegationUnit;
}).toList();
dao().fastInsert(newDelegationUnits);
}
//代表数据 单位 分工会 要根据最新的设置来调整
//代表数据
List<Teacher_congress_delegate> lastDelegates = dao().query(Teacher_congress_delegate.class, Cnd.where(Teacher_congress_delegate::getSessionId, "=", lastSession.getId()));
List<Teacher_congress_delegate> newDelegates = lastDelegates.stream().map(lastDelegate -> {
Teacher_congress_delegate newDelegate = BeanUtil.copyProperties(lastDelegate, Teacher_congress_delegate.class);
newDelegate.setId(R.UU32());
newDelegate.setSessionId(session.getId());
newDelegate.setCreatedAt(null);
newDelegate.setUpdatedAt(null);
newDelegate.setCreatedBy(null);
newDelegate.setUpdatedBy(null);
//查询本人最新的信息从用户表中
View_user vwUser = dao().fetch(View_user.class, Cnd.where(Sys_user::getId, "=", lastDelegate.getUserId()));
if (ObjectUtil.isNotEmpty(vwUser)) {
newDelegate.setUnitId(vwUser.getUnitId());
newDelegate.setUnitName(vwUser.getUnitName());
newDelegate.setUnionId(vwUser.getUnionId());
newDelegate.setUnionName(vwUser.getUnionName());
newDelegate.setSex(vwUser.getSex());
newDelegate.setMobile(vwUser.getMobile());
//去查询他当前所处的单位、分工会处于哪个代表团
if (StrUtil.isNotBlank(vwUser.getUnionId())) {
Teacher_congress_delegation_union delegationUnion = dao().fetch(Teacher_congress_delegation_union.class, Cnd.where(Teacher_congress_delegation_union::getSessionId, "=", session.getId())
.and(Teacher_congress_delegation_union::getUnionId, "=", vwUser.getUnionId()));
if (ObjectUtil.isNotEmpty(delegationUnion)) {
newDelegate.setDelegationId(delegationUnion.getDelegationId());
}
}
if (StrUtil.isNotBlank(vwUser.getUnitId())) {
Teacher_congress_delegation_unit delegationUnit = dao().fetch(Teacher_congress_delegation_unit.class, Cnd.where(Teacher_congress_delegation_unit::getSessionId, "=", session.getId())
.and(Teacher_congress_delegation_unit::getUnitId, "=", vwUser.getUnitId()));
if (ObjectUtil.isNotEmpty(delegationUnit)) {
newDelegate.setDelegationId(delegationUnit.getDelegationId());
}
}
}
return newDelegate;
}).toList();
dao().insert(newDelegates);
//代表权限数据
for (Teacher_congress_delegate newDelegate : newDelegates) {
Sys_user_role sysUserRole = new Sys_user_role();
sysUserRole.setTcSessionId(session.getId());
sysUserRole.setUserId(newDelegate.getUserId());
sysUserRole.setRoleId(newDelegate.getRoleId());
sysUserRole.setTcDelegationId(newDelegate.getDelegationId());
dao().insert(sysUserRole);
}
Sys_role committeeDoctorRole = sysRoleService.getByCode(RoleConstant.PROPOSAL_COMMITTEE_DIRECTOR);
//提案委员会主任权限
Teacher_congress_institution teacherCongressInstitutionProposalCommittee = dao().fetch(Teacher_congress_institution.class, Cnd.where(Teacher_congress_institution::getCode, "=", "TEACHER_CONGRESS_INSTITUTION_PROPOSAL_COMMITTEE")
.and(Teacher_congress_institution::getSessionId, "=", session.getId()));
if (ObjectUtil.isNotEmpty(teacherCongressInstitutionProposalCommittee)) {
List<Teacher_congress_institution_user> teacherCongressInstitutionUsers = dao().query(Teacher_congress_institution_user.class, Cnd.where(Teacher_congress_institution_user::getSessionId, "=", session.getId())
.and(Teacher_congress_institution_user::getInstitutionId, "=", teacherCongressInstitutionProposalCommittee.getId())
.and(Teacher_congress_institution_user::getIdentity, "=", "主任")
);
if (ObjectUtil.isNotEmpty(teacherCongressInstitutionUsers)) {
for (Teacher_congress_institution_user teacherCongressInstitutionUser : teacherCongressInstitutionUsers) {
Sys_user_role sysUserRole = new Sys_user_role();
sysUserRole.setTcSessionId(session.getId());
sysUserRole.setUserId(teacherCongressInstitutionUser.getUserId());
sysUserRole.setRoleId(committeeDoctorRole.getId());
dao().insert(sysUserRole);
}
}
}
return newDelegate;
}).toList();
dao().insert(newDelegates);
//代表权限数据
for (Teacher_congress_delegate newDelegate : newDelegates) {
Sys_user_role sysUserRole = new Sys_user_role();
sysUserRole.setTcSessionId(session.getId());
sysUserRole.setUserId(newDelegate.getUserId());
sysUserRole.setRoleId(newDelegate.getRoleId());
sysUserRole.setTcDelegationId(newDelegate.getDelegationId());
dao().insert(sysUserRole);
sysRoleService.clearCache();
sysUserService.clearCache();
}
Sys_role committeeDoctorRole = sysRoleService.getByCode(RoleConstant.PROPOSAL_COMMITTEE_DIRECTOR);
//提案委员会主任权限
Teacher_congress_institution teacherCongressInstitutionProposalCommittee = dao().fetch(Teacher_congress_institution.class, Cnd.where(Teacher_congress_institution::getCode, "=", "TEACHER_CONGRESS_INSTITUTION_PROPOSAL_COMMITTEE")
.and(Teacher_congress_institution::getSessionId, "=", session.getId()));
if (ObjectUtil.isNotEmpty(teacherCongressInstitutionProposalCommittee)) {
List<Teacher_congress_institution_user> teacherCongressInstitutionUsers = dao().query(Teacher_congress_institution_user.class, Cnd.where(Teacher_congress_institution_user::getSessionId, "=", session.getId())
.and(Teacher_congress_institution_user::getInstitutionId, "=", teacherCongressInstitutionProposalCommittee.getId())
.and(Teacher_congress_institution_user::getIdentity, "=", "主任")
);
if (ObjectUtil.isNotEmpty(teacherCongressInstitutionUsers)) {
for (Teacher_congress_institution_user teacherCongressInstitutionUser : teacherCongressInstitutionUsers) {
Sys_user_role sysUserRole = new Sys_user_role();
sysUserRole.setTcSessionId(session.getId());
sysUserRole.setUserId(teacherCongressInstitutionUser.getUserId());
sysUserRole.setRoleId(committeeDoctorRole.getId());
dao().insert(sysUserRole);
}
}
}
sysRoleService.clearCache();
sysUserService.clearCache();
}
@Override
@@ -1,35 +1,101 @@
<!--#
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>
<el-row type="flex" :gutter="20" style="height: calc(100vh - 126px)">
<el-col :span="5">
<el-card shadow="never">
<el-input placeholder="输入关键字进行查找" v-model="filterText" clearable></el-input>
<div style="max-height: calc(100vh - 200px); overflow-y: auto">
<el-tree
:data="treeData"
ref="treeRef"
:expand-on-click-node="false"
:props="{
children: 'children',
label: 'name'
}"
node-key="id"
default-expand-all
@node-click="treeNodeClick"
:filter-node-method="filterNode"
highlight-current
>
<template slot-scope="{ node, data }">
<span class="el-tree-node__label">
<i class="el-icon-folder-opened" v-if="node.level===1"></i>
<i class="el-icon-folder" v-else></i>
{{node.label}}
</span>
</template>
</el-tree>
<el-tree
:data="treeData"
ref="treeRef"
:expand-on-click-node="false"
:props="{ children: 'children', label: 'name' }"
node-key="id"
default-expand-all
@node-click="treeNodeClick"
:filter-node-method="filterNode"
highlight-current
class="custom-tree"
>
<template slot-scope="{ node, data }">
<span class="custom-tree-node">
<i class="el-icon-folder-opened" v-if="node.level===1"></i>
<i class="el-icon-folder" v-else></i>
<span class="node-label">{{ node.label }}</span>
</span>
</template>
</el-tree>
</div>
</el-card>
</el-col>
@@ -1,5 +1,5 @@
const UNIT_MANAGE_TEMPLATE = {
template: `
template: /*language=HTML*/ `
<div>
<el-card shadow="never" style="border: 1px solid var(--border-color-lighter);">
<el-row :gutter="10" type="flex">
@@ -9,7 +9,7 @@ const UNIT_MANAGE_TEMPLATE = {
</el-card>
<el-card shadow="never" style="border: 1px solid var(--border-color-lighter); margin-top: 10px">
<table-tool label="单位列表">
<!-- <el-button @click="openAdd" type="primary" size="small">新建单位</el-button>-->
<el-button @click="openAdd" type="primary" size="small">新建单位</el-button>
</table-tool>
<el-table :data="tableData" size="mini">
<el-table-column label="序号" type="index" width="60">
@@ -30,10 +30,7 @@ const UNIT_MANAGE_TEMPLATE = {
<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-item v-if="formData.id === '' || formData.id === null || currentNode === 1" prop="parentId" label="上级单位" label-width="80px">
<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-form-item label="上级单位">
<el-input maxlength="100" disabled :value="currentData?.name" type="text"></el-input>
</el-form-item>
<el-form-item prop="name" label="单位名称">
@@ -47,10 +44,20 @@ const UNIT_MANAGE_TEMPLATE = {
</el-form-item>
<el-form-item prop="unitLevel" label="单位等级">
<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 === 3" label="三级单位" :value="3"></el-option>
<el-option v-if="unitLevel === 4" label="四级单位" :value="4"></el-option>
</el-select>
</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-input maxlength="100" placeholder="请输入单位地址" v-model="formData.address" auto-complete="off" tabindex="5" type="text"></el-input>-->
<!-- </el-form-item>-->
@@ -88,6 +95,7 @@ const UNIT_MANAGE_TEMPLATE = {
required: true
}
},
store,
data() {
return {
pageForm: {
@@ -107,7 +115,7 @@ const UNIT_MANAGE_TEMPLATE = {
formRules: {
name: [{ required: true, message: "必填", trigger: "blur" }],
unitcode: [{ required: true, message: "必填", trigger: "blur" }],
unitLevel: [{ required: true, message: "必填", trigger: "blur" }],
unitLevel: [{ required: false, message: "必填", trigger: "blur" }],
email: [
{ required: false, message: "单位邮箱", trigger: "blur" },
{ type: "email", message: "请输入正确的邮箱地址", trigger: ["blur", "change"] }
@@ -115,24 +123,8 @@ const UNIT_MANAGE_TEMPLATE = {
},
options: [],
parentUnit: [],
props: {
lazy: true,
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"
)
}
}
unions: [],
}
},
computed: {},
@@ -148,26 +140,29 @@ const UNIT_MANAGE_TEMPLATE = {
this.options = []
},
doHandle() {
const self = this
const url = this.formData.id ? "/platform/sys/unit/editDo" : "/platform/sys/unit/addDo"
this.$refs["form"].validate(async function (valid) {
if (valid) {
if (!self.formData.id) {
self.formData.parentId = self.parentUnit[self.parentUnit.length - 1] || ""
this.$confirm("确定要提交吗?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
}).then(() => {
const self = this
const url = this.formData.id ? "/platform/sys/unit/editDo" : "/platform/sys/unit/addDo"
this.$refs["form"].validate(async function (valid) {
if (valid) {
if (self.currentNode) {
self.formData.parentId = self.currentData.id
}
const resp = await self.$axios.post(url, self.formData)
if (resp.code === 0) {
self.$message.success(resp.msg)
self.doSearch()
self.dialogVisible = false
self.$emit("refresh", null)
} else {
self.$message.warning(resp.msg)
}
}
if (self.currentNode !== 1) {
self.formData.parentId = self.currentData.id
}
const resp = await self.$axios.post(url, self.formData)
if (resp.code === 0) {
self.$message.success(resp.msg)
self.doSearch()
self.dialogVisible = false
self.$emit("refresh", null)
} else {
self.$message.warning(resp.msg)
}
}
})
})
},
async openEdit(id) {
@@ -216,7 +211,13 @@ const UNIT_MANAGE_TEMPLATE = {
})
}
},
created() {
async created() {
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)
}
}
}
@@ -337,7 +337,9 @@ layout("/layouts/platform.html"){
})
},
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) {
this.sessionOptions = res.data
if (this.sessionOptions) {
@@ -140,7 +140,7 @@ layout("/layouts/platform.html"){
<!--#include("../../common/info.js"){}#-->
new Vue({
el: "#app",
dicts: ["PROPOSAL_TYPE", "PROPOSAL_CASE_FILING_RESULT"],
dicts: ["PROPOSAL_TYPE", "PROPOSAL_CASE_FILING_RESULT", "PROPOSAL_CASE_FILING_TYPE"],
store,
mixins: [initTableMixins],
components: {
@@ -128,29 +128,36 @@ layout("/layouts/platform.html"){
</el-row>
<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-form-item label="提案名称" prop="name"
:rules="[{required:true,message:'请输入提案名称',trigger:'blur'}]">
<el-input maxlength="100" placeholder="提案名称" v-model="formData.name"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="提案方式" prop="source">
<el-input :value="dict.type.PROPOSAL_SOURCE.find(v=>v.code === formData.source)?.name"
disabled></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20" type="flex">
<el-col :span="12">
<el-form-item label="提案类别" prop="typeId">
<el-select v-model="formData.typeId" style="width: 100%">
<el-option :key="item.code" :label="item.name" :value="item.id"
v-for="item in typeOptions"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="提案方式" prop="source">
<el-input :value="dict.type.PROPOSAL_SOURCE.find(v=>v.code === formData.source)?.name"
disabled></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="提案类别" prop="typeId">
<el-select v-model="formData.typeId" style="width: 100%">
<el-option :key="item.code" :label="item.name" :value="item.id"
v-for="item in typeOptions"></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<!-- <el-form-item label="提案摘要" prop="excerpt">-->
@@ -177,15 +184,15 @@ layout("/layouts/platform.html"){
<text-editor v-model="formData.measures" key="measures"
placeholder="建议措施"></text-editor>
</el-form-item>
<!-- <el-form-item label="附件上传" prop="files">-->
<!-- <file-upload-->
<!-- :value.sync="formData.files"-->
<!-- :upload_number="5"-->
<!-- upload_result_category="array"-->
<!-- upload_mode="drag"-->
<!-- complete_result-->
<!-- ></file-upload>-->
<!-- </el-form-item>-->
<el-form-item label="附件上传" prop="files">
<file-upload
:value.sync="formData.files"
:upload_number="5"
upload_result_category="array"
upload_mode="drag"
complete_result
></file-upload>
</el-form-item>
</el-form>
<el-row type="flex" justify="end">
<el-button @click="$refs.guava.index()">取 消</el-button>
@@ -92,17 +92,6 @@ layout("/layouts/platform.html"){
:rules="[{required:true,message:'必填',trigger:['change','blur']}]">
<user-opinion-textarea v-model="formData.tf_opinion"></user-opinion-textarea>
</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-row type="flex" justify="end">
<el-button @click="$refs.guava.index()" size="small">取消</el-button>
@@ -231,7 +220,6 @@ layout("/layouts/platform.html"){
if (this.sessionOptions) {
this.$set(this.pageForm, "sessionId", this.sessionOptions[0].id)
this.pageData()
this.listDelegation()
}
}
})
@@ -42,6 +42,9 @@ layout("/layouts/platform.html"){
<template v-else-if="column.prop === 'merge'" scope="{row}">
<el-tag v-if="row.merge" size="small"></el-tag>
</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}">
<enum-tag :value="row.instanceState" name="ProcessInstanceStateEnum" label_key="message"
size="small"></enum-tag>
@@ -27,9 +27,9 @@ const PROPOSAL_INFO = {
<dict-tag :options="dict.type.PROPOSAL_CASE_FILING_RESULT"
:value="viewData.caseFilingResult"></dict-tag>
</van-cell>
<van-cell title="调研情况" class="direction-column-cell">
<!--<van-cell title="调研情况" class="direction-column-cell">
<div v-html="viewData.researchFindings"></div>
</van-cell>
</van-cell>-->
<van-cell title="提案案由" class="direction-column-cell">
<div v-html="viewData.brief"></div>
</van-cell>
@@ -25,7 +25,7 @@ layout("/layouts/platform_h5.html"){
<table-column label="提案类别">{{row.typeName}}</table-column>
<table-column label="提案人">{{row.createUserName}}</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 #actions="{index,row}">
<div class="action-btn" @click="onView(row)">
@@ -54,7 +54,7 @@ layout("/layouts/platform_h5.html"){
<div class="action-btn" v-if="!pageForm.approval && $auth.hasRoleOr('SYSADMIN,PROPOSAL_UNIT_LEADER')"
@click="openTransfer(row)">
<i class="fa fa-arrow-right"></i>
<span></span>
<span></span>
</div>
</template>
</table-list>
@@ -308,7 +308,7 @@ layout("/layouts/platform_h5.html"){
<!-- 附件上传 -->
<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
slot="input"
:value.sync="formData.files"