..
This commit is contained in:
@@ -293,11 +293,11 @@
|
|||||||
<!-- <artifactId>nutz-plugins-validation</artifactId> -->
|
<!-- <artifactId>nutz-plugins-validation</artifactId> -->
|
||||||
<!-- <version>1.r.69.v20220215</version> -->
|
<!-- <version>1.r.69.v20220215</version> -->
|
||||||
<!-- </dependency> -->
|
<!-- </dependency> -->
|
||||||
<dependency>
|
<!-- <dependency>-->
|
||||||
<groupId>org.hibernate.validator</groupId>
|
<!-- <groupId>org.hibernate.validator</groupId>-->
|
||||||
<artifactId>hibernate-validator</artifactId>
|
<!-- <artifactId>hibernate-validator</artifactId>-->
|
||||||
<version>6.0.8.Final</version>
|
<!-- <version>6.0.8.Final</version>-->
|
||||||
</dependency>
|
<!-- </dependency>-->
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.glassfish</groupId>
|
<groupId>org.glassfish</groupId>
|
||||||
<artifactId>javax.el</artifactId>
|
<artifactId>javax.el</artifactId>
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ import com.budwk.app.web.commons.auth.satoken.SaTokenDaoRedisImpl;
|
|||||||
import com.budwk.app.web.commons.auth.satoken.StpInterfaceImpl;
|
import com.budwk.app.web.commons.auth.satoken.StpInterfaceImpl;
|
||||||
import com.budwk.app.web.commons.base.Globals;
|
import com.budwk.app.web.commons.base.Globals;
|
||||||
import com.budwk.app.web.commons.ext.pubsub.WebPubSub;
|
import com.budwk.app.web.commons.ext.pubsub.WebPubSub;
|
||||||
|
import com.budwk.app.zhgh.dayofficework.message.service.GlobalMessageSendService;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.beetl.core.GroupTemplate;
|
import org.beetl.core.GroupTemplate;
|
||||||
import org.nutz.boot.NbApp;
|
import org.nutz.boot.NbApp;
|
||||||
@@ -82,6 +83,7 @@ public class MainLauncher {
|
|||||||
init_auth();
|
init_auth();
|
||||||
ioc.get(Globals.class);
|
ioc.get(Globals.class);
|
||||||
ioc.get(FlowEngine.class);
|
ioc.get(FlowEngine.class);
|
||||||
|
ioc.get(GlobalMessageSendService.class);
|
||||||
|
|
||||||
AppIocUtil.setIoc(ioc);
|
AppIocUtil.setIoc(ioc);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,14 @@
|
|||||||
|
package com.budwk.app.base.param;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 自定义导出表格列
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class ExportTableColumns {
|
||||||
|
|
||||||
|
private String label;
|
||||||
|
private String prop;
|
||||||
|
|
||||||
|
}
|
||||||
@@ -201,4 +201,14 @@ public interface ProcessTaskService extends BaseService<ProcessTask> {
|
|||||||
* @param transferUserId 转办用户ID
|
* @param transferUserId 转办用户ID
|
||||||
*/
|
*/
|
||||||
void transfer(Long taskId, String transferUserId);
|
void transfer(Long taskId, String transferUserId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取正在进行的任务
|
||||||
|
*
|
||||||
|
* @param bizIds 业务ID
|
||||||
|
* @param taskName 任务名称
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
List<ProcessTask> getDoingTaskByBizIdTaskName(List<String> bizIds, String taskName);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -485,7 +485,17 @@ public class ProcessTaskServiceImpl extends BaseServiceImpl<ProcessTask> impleme
|
|||||||
processTaskList.forEach(processTask -> {
|
processTaskList.forEach(processTask -> {
|
||||||
ProcessPublisher.notify(ProcessEvent.builder().eventType(ProcessEventTypeEnum.PROCESS_TASK_START).sourceId(processTask.getId()).build());
|
ProcessPublisher.notify(ProcessEvent.builder().eventType(ProcessEventTypeEnum.PROCESS_TASK_START).sourceId(processTask.getId()).build());
|
||||||
});
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<ProcessTask> getDoingTaskByBizIdTaskName(List<String> bizIds, String taskName) {
|
||||||
|
List<ProcessInstance> instances = dao().query(ProcessInstance.class, Cnd.where(ProcessInstance::getBusinessNo, "in", bizIds));
|
||||||
|
List<Long> instanceIds = instances.stream().map(ProcessInstance::getId).toList();
|
||||||
|
List<ProcessTask> tasks = dao().query(ProcessTask.class, Cnd.where(ProcessTask::getProcessInstanceId, "in", instanceIds)
|
||||||
|
.and(ProcessTask::getTaskName, "=", taskName)
|
||||||
|
.and(ProcessTask::getTaskState, "=", ProcessTaskStateEnum.DOING.getCode()));
|
||||||
|
return tasks;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -22,30 +22,30 @@ import java.util.stream.Collectors;
|
|||||||
@Slf4j
|
@Slf4j
|
||||||
public class ParamValidationProcessor extends AbstractProcessor {
|
public class ParamValidationProcessor extends AbstractProcessor {
|
||||||
|
|
||||||
protected ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
|
// protected ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void process(ActionContext ac) throws Throwable {
|
public void process(ActionContext ac) throws Throwable {
|
||||||
Validator validator = factory.getValidator();
|
// Validator validator = factory.getValidator();
|
||||||
Method method = ac.getMethod();
|
// Method method = ac.getMethod();
|
||||||
Object[] methodArgs = ac.getMethodArgs();
|
// Object[] methodArgs = ac.getMethodArgs();
|
||||||
Parameter[] parameters = method.getParameters();
|
// Parameter[] parameters = method.getParameters();
|
||||||
for (int i = 0; i < parameters.length; i++) {
|
// for (int i = 0; i < parameters.length; i++) {
|
||||||
Parameter parameter = parameters[i];
|
// Parameter parameter = parameters[i];
|
||||||
boolean hasValidAnnotation = parameter.isAnnotationPresent(Valid.class);
|
// boolean hasValidAnnotation = parameter.isAnnotationPresent(Valid.class);
|
||||||
if (hasValidAnnotation) {
|
// if (hasValidAnnotation) {
|
||||||
Object argValue = methodArgs[i];
|
// Object argValue = methodArgs[i];
|
||||||
if (argValue == null) {
|
// if (argValue == null) {
|
||||||
throw new MethodArgumentNotValidException(parameter.getName() + "不能为null");
|
// throw new MethodArgumentNotValidException(parameter.getName() + "不能为null");
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
Set<ConstraintViolation<Object>> violations = validator.validate(argValue);
|
// Set<ConstraintViolation<Object>> violations = validator.validate(argValue);
|
||||||
if (!violations.isEmpty()) {
|
// if (!violations.isEmpty()) {
|
||||||
String errMsg = violations.stream().map(ConstraintViolation::getMessage).collect(Collectors.joining(","));
|
// String errMsg = violations.stream().map(ConstraintViolation::getMessage).collect(Collectors.joining(","));
|
||||||
throw new MethodArgumentNotValidException(errMsg);
|
// throw new MethodArgumentNotValidException(errMsg);
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
doNext(ac);
|
doNext(ac);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+31
-34
@@ -10,11 +10,12 @@ import org.nutz.ioc.Ioc;
|
|||||||
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 javax.annotation.PostConstruct;
|
import java.util.ArrayList;
|
||||||
import java.util.*;
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
import java.util.concurrent.CompletableFuture;
|
import java.util.concurrent.CompletableFuture;
|
||||||
import java.util.concurrent.ConcurrentHashMap;
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
import java.util.stream.Collectors;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 全局消息发送服务
|
* 全局消息发送服务
|
||||||
@@ -47,22 +48,18 @@ public class GlobalMessageSendService {
|
|||||||
log.info("开始初始化消息发送策略...");
|
log.info("开始初始化消息发送策略...");
|
||||||
|
|
||||||
// 获取所有实现了GlobalMessageSendStrategy接口的Bean
|
// 获取所有实现了GlobalMessageSendStrategy接口的Bean
|
||||||
String[] beanNames = ioc.getNames();
|
String[] namesByType = ioc.getNamesByType(GlobalMessageSendStrategy.class);
|
||||||
for (String beanName : beanNames) {
|
|
||||||
|
for (String beanName : namesByType) {
|
||||||
try {
|
try {
|
||||||
Object bean = ioc.get(null, beanName);
|
GlobalMessageSendStrategy strategy = ioc.get(GlobalMessageSendStrategy.class, beanName);
|
||||||
if (bean instanceof GlobalMessageSendStrategy) {
|
GlobalMessageChannel channel = strategy.getChannel();
|
||||||
GlobalMessageSendStrategy strategy = (GlobalMessageSendStrategy) bean;
|
strategyMap.put(channel, strategy);
|
||||||
GlobalMessageChannel channel = strategy.getChannel();
|
// 缓存本地策略
|
||||||
strategyMap.put(channel, strategy);
|
if (channel == GlobalMessageChannel.LOCAL) {
|
||||||
|
localStrategy = strategy;
|
||||||
// 缓存本地策略
|
|
||||||
if (channel == GlobalMessageChannel.LOCAL) {
|
|
||||||
localStrategy = strategy;
|
|
||||||
}
|
|
||||||
|
|
||||||
log.info("注册消息发送策略:{} -> {}", channel.getValue(), strategy.getClass().getSimpleName());
|
|
||||||
}
|
}
|
||||||
|
log.info("注册消息发送策略:{} -> {}", channel.getValue(), strategy.getClass().getSimpleName());
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.warn("初始化Bean {}时出错:{}", beanName, e.getMessage());
|
log.warn("初始化Bean {}时出错:{}", beanName, e.getMessage());
|
||||||
}
|
}
|
||||||
@@ -96,7 +93,7 @@ public class GlobalMessageSendService {
|
|||||||
request.setType(type);
|
request.setType(type);
|
||||||
request.setReceiverIds(receiverIds);
|
request.setReceiverIds(receiverIds);
|
||||||
request.setConfig(config);
|
request.setConfig(config);
|
||||||
|
|
||||||
sendMessage(request);
|
sendMessage(request);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -105,27 +102,27 @@ public class GlobalMessageSendService {
|
|||||||
*/
|
*/
|
||||||
public void sendMessage(GlobalMessageSendRequest request) {
|
public void sendMessage(GlobalMessageSendRequest request) {
|
||||||
try {
|
try {
|
||||||
log.info("开始发送全局消息,标题:{},接收人数量:{}", request.getTitle(),
|
log.info("开始发送全局消息,标题:{},接收人数量:{}", request.getTitle(),
|
||||||
request.getReceiverIds() != null ? request.getReceiverIds().size() : 0);
|
request.getReceiverIds() != null ? request.getReceiverIds().size() : 0);
|
||||||
|
|
||||||
// 参数校验
|
// 参数校验
|
||||||
validateRequest(request);
|
validateRequest(request);
|
||||||
|
|
||||||
// 获取启用的策略
|
// 获取启用的策略
|
||||||
List<GlobalMessageSendStrategy> enabledStrategies = getEnabledStrategies();
|
List<GlobalMessageSendStrategy> enabledStrategies = getEnabledStrategies();
|
||||||
|
|
||||||
if (enabledStrategies.isEmpty()) {
|
if (enabledStrategies.isEmpty()) {
|
||||||
log.warn("没有找到启用的消息发送策略");
|
log.warn("没有找到启用的消息发送策略");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 执行消息发送 - 本地消息优先,然后是外部策略
|
// 执行消息发送 - 本地消息优先,然后是外部策略
|
||||||
for (GlobalMessageSendStrategy strategy : enabledStrategies) {
|
for (GlobalMessageSendStrategy strategy : enabledStrategies) {
|
||||||
try {
|
try {
|
||||||
// 本地消息必须同步发送,确保优先完成
|
// 本地消息必须同步发送,确保优先完成
|
||||||
if (strategy.getChannel() == GlobalMessageChannel.LOCAL) {
|
if (strategy.getChannel() == GlobalMessageChannel.LOCAL) {
|
||||||
strategy.send(request.getTitle(), request.getContent(), request.getType(),
|
strategy.send(request.getTitle(), request.getContent(), request.getType(),
|
||||||
request.getReceiverIds(), request.getConfig());
|
request.getReceiverIds(), request.getConfig());
|
||||||
log.info("本地消息发送成功");
|
log.info("本地消息发送成功");
|
||||||
} else {
|
} else {
|
||||||
// 外部消息策略根据配置决定同步或异步
|
// 外部消息策略根据配置决定同步或异步
|
||||||
@@ -133,8 +130,8 @@ public class GlobalMessageSendService {
|
|||||||
// 异步发送
|
// 异步发送
|
||||||
CompletableFuture.runAsync(() -> {
|
CompletableFuture.runAsync(() -> {
|
||||||
try {
|
try {
|
||||||
strategy.send(request.getTitle(), request.getContent(), request.getType(),
|
strategy.send(request.getTitle(), request.getContent(), request.getType(),
|
||||||
request.getReceiverIds(), request.getConfig());
|
request.getReceiverIds(), request.getConfig());
|
||||||
log.info("异步发送消息成功,渠道:{}", strategy.getChannel().getValue());
|
log.info("异步发送消息成功,渠道:{}", strategy.getChannel().getValue());
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.error("异步发送消息失败,渠道:{},错误:{}", strategy.getChannel().getValue(), e.getMessage(), e);
|
log.error("异步发送消息失败,渠道:{},错误:{}", strategy.getChannel().getValue(), e.getMessage(), e);
|
||||||
@@ -142,8 +139,8 @@ public class GlobalMessageSendService {
|
|||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
// 同步发送
|
// 同步发送
|
||||||
strategy.send(request.getTitle(), request.getContent(), request.getType(),
|
strategy.send(request.getTitle(), request.getContent(), request.getType(),
|
||||||
request.getReceiverIds(), request.getConfig());
|
request.getReceiverIds(), request.getConfig());
|
||||||
log.info("同步发送消息成功,渠道:{}", strategy.getChannel().getValue());
|
log.info("同步发送消息成功,渠道:{}", strategy.getChannel().getValue());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -156,7 +153,7 @@ public class GlobalMessageSendService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
log.info("全局消息发送完成,标题:{}", request.getTitle());
|
log.info("全局消息发送完成,标题:{}", request.getTitle());
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.error("全局消息发送失败,标题:{},错误:{}", request.getTitle(), e.getMessage(), e);
|
log.error("全局消息发送失败,标题:{},错误:{}", request.getTitle(), e.getMessage(), e);
|
||||||
@@ -191,20 +188,20 @@ public class GlobalMessageSendService {
|
|||||||
*/
|
*/
|
||||||
private List<GlobalMessageSendStrategy> getEnabledStrategies() {
|
private List<GlobalMessageSendStrategy> getEnabledStrategies() {
|
||||||
List<GlobalMessageSendStrategy> enabledStrategies = new ArrayList<>();
|
List<GlobalMessageSendStrategy> enabledStrategies = new ArrayList<>();
|
||||||
|
|
||||||
// 本地消息策略必须存在且优先添加
|
// 本地消息策略必须存在且优先添加
|
||||||
if (localStrategy != null) {
|
if (localStrategy != null) {
|
||||||
enabledStrategies.add(localStrategy);
|
enabledStrategies.add(localStrategy);
|
||||||
log.debug("添加本地消息策略:{}", localStrategy.getChannel().getValue());
|
log.debug("添加本地消息策略:{}", localStrategy.getChannel().getValue());
|
||||||
}
|
}
|
||||||
|
|
||||||
// 查找其他启用的策略
|
// 查找其他启用的策略
|
||||||
for (GlobalMessageSendStrategy strategy : strategyMap.values()) {
|
for (GlobalMessageSendStrategy strategy : strategyMap.values()) {
|
||||||
// 跳过本地策略(已经添加)
|
// 跳过本地策略(已经添加)
|
||||||
if (strategy.getChannel() == GlobalMessageChannel.LOCAL) {
|
if (strategy.getChannel() == GlobalMessageChannel.LOCAL) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 检查策略是否启用
|
// 检查策略是否启用
|
||||||
if (strategy.isEnabled()) {
|
if (strategy.isEnabled()) {
|
||||||
enabledStrategies.add(strategy);
|
enabledStrategies.add(strategy);
|
||||||
@@ -213,7 +210,7 @@ public class GlobalMessageSendService {
|
|||||||
log.debug("跳过未启用的消息策略:{}", strategy.getChannel().getValue());
|
log.debug("跳过未启用的消息策略:{}", strategy.getChannel().getValue());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
log.info("共找到{}个启用的消息发送策略", enabledStrategies.size());
|
log.info("共找到{}个启用的消息发送策略", enabledStrategies.size());
|
||||||
return enabledStrategies;
|
return enabledStrategies;
|
||||||
}
|
}
|
||||||
|
|||||||
+19
-11
@@ -2,9 +2,8 @@ package com.budwk.app.zhgh.democratic.proposal.controller.export;
|
|||||||
|
|
||||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||||
import com.budwk.app.base.page.Pagination;
|
import com.budwk.app.base.page.Pagination;
|
||||||
|
import com.budwk.app.base.param.ExportTableColumns;
|
||||||
import com.budwk.app.base.result.Result;
|
import com.budwk.app.base.result.Result;
|
||||||
import com.budwk.app.base.service.BaseService;
|
|
||||||
import com.budwk.app.zhgh.democratic.proposal.controller.vo.ProposalInfoPageVO;
|
|
||||||
import com.budwk.app.zhgh.democratic.proposal.param.ProposalQueryComprehensiveParam;
|
import com.budwk.app.zhgh.democratic.proposal.param.ProposalQueryComprehensiveParam;
|
||||||
import com.budwk.app.zhgh.democratic.proposal.service.ProposalExportService;
|
import com.budwk.app.zhgh.democratic.proposal.service.ProposalExportService;
|
||||||
import io.swagger.annotations.ApiOperation;
|
import io.swagger.annotations.ApiOperation;
|
||||||
@@ -33,7 +32,8 @@ public class ProposalExportComprehensiveController {
|
|||||||
@At("")
|
@At("")
|
||||||
@Ok("beetl:/platform/zhgh/democratic/proposal/export/comprehensive/index.html")
|
@Ok("beetl:/platform/zhgh/democratic/proposal/export/comprehensive/index.html")
|
||||||
@SaCheckPermission("proposal.export.comprehensive")
|
@SaCheckPermission("proposal.export.comprehensive")
|
||||||
public void index() {}
|
public void index() {
|
||||||
|
}
|
||||||
|
|
||||||
@At
|
@At
|
||||||
@SaCheckPermission("proposal.query.comprehensive")
|
@SaCheckPermission("proposal.query.comprehensive")
|
||||||
@@ -42,7 +42,7 @@ public class ProposalExportComprehensiveController {
|
|||||||
Sql sql = Sqls.create("""
|
Sql sql = Sqls.create("""
|
||||||
SELECT
|
SELECT
|
||||||
info.*,
|
info.*,
|
||||||
COUNT(p.consolidationIds) > 0 AS isConsolidation,
|
IF(mer.proposalId IS NOT NULL, 1, 0) AS merge,
|
||||||
type.name AS typeName,
|
type.name AS typeName,
|
||||||
tcs.fullName AS sessionName,
|
tcs.fullName AS sessionName,
|
||||||
tcd.`name` AS delegationName,
|
tcd.`name` AS delegationName,
|
||||||
@@ -56,8 +56,8 @@ public class ProposalExportComprehensiveController {
|
|||||||
GROUP_CONCAT(DISTINCT CASE WHEN pru.isMaster = 0 THEN pru.unitName END) AS slaveUnitNames
|
GROUP_CONCAT(DISTINCT CASE WHEN pru.isMaster = 0 THEN pru.unitName END) AS slaveUnitNames
|
||||||
FROM
|
FROM
|
||||||
proposal_info info
|
proposal_info info
|
||||||
LEFT JOIN proposal_consolidation p ON JSON_CONTAINS(p.consolidationIds, JSON_QUOTE(info.id))
|
|
||||||
LEFT JOIN proposal_type type on type.id = info.typeId
|
LEFT JOIN proposal_type type on type.id = info.typeId
|
||||||
|
LEFT JOIN proposal_merge mer ON mer.proposalId = info.id
|
||||||
LEFT JOIN teacher_congress_session tcs on tcs.id = info.sessionId
|
LEFT JOIN teacher_congress_session tcs on tcs.id = info.sessionId
|
||||||
LEFT JOIN teacher_congress_delegation tcd on tcd.id = info.delegationId
|
LEFT JOIN teacher_congress_delegation tcd on tcd.id = info.delegationId
|
||||||
LEFT JOIN teacher_congress_delegate tcde on tcde.loginName = info.createUserLoginName
|
LEFT JOIN teacher_congress_delegate tcde on tcde.loginName = info.createUserLoginName
|
||||||
@@ -70,7 +70,7 @@ public class ProposalExportComprehensiveController {
|
|||||||
ProposalQueryComprehensiveParam.buildSearch(cnd, pageForm);
|
ProposalQueryComprehensiveParam.buildSearch(cnd, pageForm);
|
||||||
cnd.groupBy("info.id");
|
cnd.groupBy("info.id");
|
||||||
sql.setCondition(cnd);
|
sql.setCondition(cnd);
|
||||||
Pagination pagination = proposalExportService.listPageMap(pageForm.getPageNumber(),pageForm.getPageSize(), sql);
|
Pagination pagination = proposalExportService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
|
||||||
return Result.success(pagination);
|
return Result.success(pagination);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -79,7 +79,7 @@ public class ProposalExportComprehensiveController {
|
|||||||
@Ok("void")
|
@Ok("void")
|
||||||
@ApiOperation("导出汇总表excel")
|
@ApiOperation("导出汇总表excel")
|
||||||
@SaCheckPermission("proposal.query.comprehensive")
|
@SaCheckPermission("proposal.query.comprehensive")
|
||||||
public void exportSummaryAsExcel(@Valid @Param("pageForm") ProposalQueryComprehensiveParam pageForm, HttpServletResponse response){
|
public void exportSummaryAsExcel(@Valid @Param("pageForm") ProposalQueryComprehensiveParam pageForm, HttpServletResponse response) {
|
||||||
proposalExportService.exportSummaryAsExcel(pageForm, response);
|
proposalExportService.exportSummaryAsExcel(pageForm, response);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -88,7 +88,7 @@ public class ProposalExportComprehensiveController {
|
|||||||
@Ok("void")
|
@Ok("void")
|
||||||
@ApiOperation("导出提案立案汇总表excel")
|
@ApiOperation("导出提案立案汇总表excel")
|
||||||
@SaCheckPermission("proposal.query.comprehensive")
|
@SaCheckPermission("proposal.query.comprehensive")
|
||||||
public void exportProposalRegisterSummaryAsExcel(@Valid @Param("pageForm") ProposalQueryComprehensiveParam pageForm, HttpServletResponse response){
|
public void exportProposalRegisterSummaryAsExcel(@Valid @Param("pageForm") ProposalQueryComprehensiveParam pageForm, HttpServletResponse response) {
|
||||||
proposalExportService.exportProposalRegisterSummaryAsExcel(pageForm, response);
|
proposalExportService.exportProposalRegisterSummaryAsExcel(pageForm, response);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -96,7 +96,7 @@ public class ProposalExportComprehensiveController {
|
|||||||
@Ok("void")
|
@Ok("void")
|
||||||
@ApiOperation("导出全部提案ZIP")
|
@ApiOperation("导出全部提案ZIP")
|
||||||
@SaCheckPermission("proposal.query.comprehensive")
|
@SaCheckPermission("proposal.query.comprehensive")
|
||||||
public void exportAllProposalAsZip(@Valid @Param("pageForm") ProposalQueryComprehensiveParam pageForm, HttpServletResponse response){
|
public void exportAllProposalAsZip(@Valid @Param("pageForm") ProposalQueryComprehensiveParam pageForm, HttpServletResponse response) {
|
||||||
proposalExportService.exportProposalStatisticsAsZip(pageForm, response);
|
proposalExportService.exportProposalStatisticsAsZip(pageForm, response);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -104,7 +104,7 @@ public class ProposalExportComprehensiveController {
|
|||||||
@Ok("void")
|
@Ok("void")
|
||||||
@ApiOperation("导出全部提案反馈表ZIP")
|
@ApiOperation("导出全部提案反馈表ZIP")
|
||||||
@SaCheckPermission("proposal.query.comprehensive")
|
@SaCheckPermission("proposal.query.comprehensive")
|
||||||
public void exportAllProposalFeedBackAsZip(@Valid @Param("pageForm") ProposalQueryComprehensiveParam pageForm, HttpServletResponse response){
|
public void exportAllProposalFeedBackAsZip(@Valid @Param("pageForm") ProposalQueryComprehensiveParam pageForm, HttpServletResponse response) {
|
||||||
proposalExportService.exportFeedBackAsZip(pageForm, response);
|
proposalExportService.exportFeedBackAsZip(pageForm, response);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -112,8 +112,16 @@ public class ProposalExportComprehensiveController {
|
|||||||
@Ok("void")
|
@Ok("void")
|
||||||
@ApiOperation("导出征集表ZIP")
|
@ApiOperation("导出征集表ZIP")
|
||||||
@SaCheckPermission("proposal.query.comprehensive")
|
@SaCheckPermission("proposal.query.comprehensive")
|
||||||
public void exportCollectZip(@Valid @Param("pageForm") ProposalQueryComprehensiveParam pageForm, HttpServletResponse response){
|
public void exportCollectZip(@Valid @Param("pageForm") ProposalQueryComprehensiveParam pageForm, HttpServletResponse response) {
|
||||||
proposalExportService.exportCollectZip(pageForm, response);
|
proposalExportService.exportCollectZip(pageForm, response);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@At
|
||||||
|
@Ok("void")
|
||||||
|
@ApiOperation("导出自定义表excel")
|
||||||
|
@SaCheckPermission("proposal.query.comprehensive")
|
||||||
|
public void exportCustomAsExcel(@Valid @Param("pageForm") ProposalQueryComprehensiveParam pageForm, @Param("tableColumns") ExportTableColumns[] tableColumns, HttpServletResponse response) {
|
||||||
|
proposalExportService.exportCustomAsExcel(pageForm, tableColumns, response);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-2
@@ -49,7 +49,7 @@ public class ProposalQueryComprehensiveController {
|
|||||||
Sql sql = Sqls.create("""
|
Sql sql = Sqls.create("""
|
||||||
SELECT
|
SELECT
|
||||||
info.*,
|
info.*,
|
||||||
COUNT(p.consolidationIds) > 0 AS isConsolidation,
|
IF(mer.proposalId IS NOT NULL, 1, 0) AS merge,
|
||||||
type.name AS typeName,
|
type.name AS typeName,
|
||||||
tcs.fullName AS sessionName,
|
tcs.fullName AS sessionName,
|
||||||
tcd.`name` AS delegationName,
|
tcd.`name` AS delegationName,
|
||||||
@@ -63,8 +63,8 @@ public class ProposalQueryComprehensiveController {
|
|||||||
GROUP_CONCAT(DISTINCT CASE WHEN pru.isMaster = 0 THEN pru.unitName END) AS slaveUnitNames
|
GROUP_CONCAT(DISTINCT CASE WHEN pru.isMaster = 0 THEN pru.unitName END) AS slaveUnitNames
|
||||||
FROM
|
FROM
|
||||||
proposal_info info
|
proposal_info info
|
||||||
LEFT JOIN proposal_consolidation p ON JSON_CONTAINS(p.consolidationIds, JSON_QUOTE(info.id))
|
|
||||||
LEFT JOIN proposal_type type on type.id = info.typeId
|
LEFT JOIN proposal_type type on type.id = info.typeId
|
||||||
|
LEFT JOIN proposal_merge mer ON mer.proposalId = info.id
|
||||||
LEFT JOIN teacher_congress_session tcs on tcs.id = info.sessionId
|
LEFT JOIN teacher_congress_session tcs on tcs.id = info.sessionId
|
||||||
LEFT JOIN teacher_congress_delegation tcd on tcd.id = info.delegationId
|
LEFT JOIN teacher_congress_delegation tcd on tcd.id = info.delegationId
|
||||||
LEFT JOIN teacher_congress_delegate tcde on tcde.loginName = info.createUserLoginName
|
LEFT JOIN teacher_congress_delegate tcde on tcde.loginName = info.createUserLoginName
|
||||||
|
|||||||
+2
-2
@@ -42,7 +42,7 @@ public class ProposalQueryHistoryController {
|
|||||||
Sql sql = Sqls.create("""
|
Sql sql = Sqls.create("""
|
||||||
SELECT
|
SELECT
|
||||||
info.*,
|
info.*,
|
||||||
COUNT(p.consolidationIds) > 0 AS isConsolidation,
|
IF(mer.proposalId IS NOT NULL, 1, 0) AS merge,
|
||||||
type.name AS typeName,
|
type.name AS typeName,
|
||||||
tcs.fullName AS sessionName,
|
tcs.fullName AS sessionName,
|
||||||
tcd.`name` AS delegationName,
|
tcd.`name` AS delegationName,
|
||||||
@@ -56,8 +56,8 @@ public class ProposalQueryHistoryController {
|
|||||||
GROUP_CONCAT(DISTINCT CASE WHEN pru.isMaster = 0 THEN pru.unitName END) AS slaveUnitNames
|
GROUP_CONCAT(DISTINCT CASE WHEN pru.isMaster = 0 THEN pru.unitName END) AS slaveUnitNames
|
||||||
FROM
|
FROM
|
||||||
proposal_info info
|
proposal_info info
|
||||||
LEFT JOIN proposal_consolidation p ON JSON_CONTAINS(p.consolidationIds, JSON_QUOTE(info.id))
|
|
||||||
LEFT JOIN proposal_type type on type.id = info.typeId
|
LEFT JOIN proposal_type type on type.id = info.typeId
|
||||||
|
LEFT JOIN proposal_merge mer ON mer.proposalId = info.id
|
||||||
LEFT JOIN teacher_congress_session tcs on tcs.id = info.sessionId
|
LEFT JOIN teacher_congress_session tcs on tcs.id = info.sessionId
|
||||||
LEFT JOIN teacher_congress_delegation tcd on tcd.id = info.delegationId
|
LEFT JOIN teacher_congress_delegation tcd on tcd.id = info.delegationId
|
||||||
LEFT JOIN teacher_congress_delegate tcde on tcde.loginName = info.createUserLoginName
|
LEFT JOIN teacher_congress_delegate tcde on tcde.loginName = info.createUserLoginName
|
||||||
|
|||||||
+50
-3
@@ -1,24 +1,34 @@
|
|||||||
package com.budwk.app.zhgh.democratic.proposal.controller.transact;
|
package com.budwk.app.zhgh.democratic.proposal.controller.transact;
|
||||||
|
|
||||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||||
|
import cn.hutool.core.lang.Dict;
|
||||||
import com.budwk.app.base.constant.RoleConstant;
|
import com.budwk.app.base.constant.RoleConstant;
|
||||||
import com.budwk.app.base.page.Pagination;
|
import com.budwk.app.base.page.Pagination;
|
||||||
import com.budwk.app.base.result.Result;
|
import com.budwk.app.base.result.Result;
|
||||||
|
import com.budwk.app.flow.constant.FlowConst;
|
||||||
import com.budwk.app.flow.enums.ProcessTaskStateEnum;
|
import com.budwk.app.flow.enums.ProcessTaskStateEnum;
|
||||||
|
import com.budwk.app.flow.service.FlowCommonService;
|
||||||
import com.budwk.app.web.commons.auth.utils.AuthUtil;
|
import com.budwk.app.web.commons.auth.utils.AuthUtil;
|
||||||
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
|
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
|
||||||
|
import com.budwk.app.zhgh.democratic.proposal.models.ProposalMerge;
|
||||||
import com.budwk.app.zhgh.democratic.proposal.param.ProposalSearchParam;
|
import com.budwk.app.zhgh.democratic.proposal.param.ProposalSearchParam;
|
||||||
import com.budwk.app.zhgh.democratic.proposal.service.ProposalCommitteeFilingService;
|
import com.budwk.app.zhgh.democratic.proposal.service.ProposalCommitteeFilingService;
|
||||||
import io.swagger.annotations.Api;
|
import io.swagger.annotations.Api;
|
||||||
import io.swagger.annotations.ApiOperation;
|
import io.swagger.annotations.ApiOperation;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
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.Sqls;
|
import org.nutz.dao.Sqls;
|
||||||
import org.nutz.dao.sql.Sql;
|
import org.nutz.dao.sql.Sql;
|
||||||
|
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;
|
||||||
|
import org.nutz.json.Json;
|
||||||
|
import org.nutz.lang.random.R;
|
||||||
import org.nutz.mvc.annotation.At;
|
import org.nutz.mvc.annotation.At;
|
||||||
import org.nutz.mvc.annotation.Ok;
|
import org.nutz.mvc.annotation.Ok;
|
||||||
|
import org.nutz.mvc.annotation.Param;
|
||||||
|
|
||||||
import javax.validation.Valid;
|
import javax.validation.Valid;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -30,8 +40,13 @@ import java.util.List;
|
|||||||
@Api(tags = "提案委员会立案审核")
|
@Api(tags = "提案委员会立案审核")
|
||||||
public class ProposalCommitteeFilingController {
|
public class ProposalCommitteeFilingController {
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
private Dao dao;
|
||||||
@Inject
|
@Inject
|
||||||
private ProposalCommitteeFilingService proposalCommitteeFilingService;
|
private ProposalCommitteeFilingService proposalCommitteeFilingService;
|
||||||
|
@Inject
|
||||||
|
private FlowCommonService flowCommonService;
|
||||||
|
|
||||||
|
|
||||||
@At("")
|
@At("")
|
||||||
@Ok("beetl:/platform/zhgh/democratic/proposal/transact/committeeFiling/index.html")
|
@Ok("beetl:/platform/zhgh/democratic/proposal/transact/committeeFiling/index.html")
|
||||||
@@ -42,11 +57,12 @@ public class ProposalCommitteeFilingController {
|
|||||||
@At
|
@At
|
||||||
@SaCheckPermission("proposal.committeeFiling")
|
@SaCheckPermission("proposal.committeeFiling")
|
||||||
@ApiOperation("分页列表")
|
@ApiOperation("分页列表")
|
||||||
public Result pageData(@Valid ProposalSearchParam pageForm,boolean approval) {
|
public Result pageData(@Valid ProposalSearchParam pageForm, boolean approval) {
|
||||||
Sql sql = Sqls.create("""
|
Sql sql = Sqls.create("""
|
||||||
SELECT
|
SELECT
|
||||||
info.*,
|
info.*,
|
||||||
type.name AS typeName,
|
type.name AS typeName,
|
||||||
|
IF(mer.proposalId IS NOT NULL, 1, 0) AS merge,
|
||||||
tcs.fullName AS sessionName,
|
tcs.fullName AS sessionName,
|
||||||
tcd.`name` AS delegationName,
|
tcd.`name` AS delegationName,
|
||||||
ins.id AS instanceId,
|
ins.id AS instanceId,
|
||||||
@@ -73,13 +89,14 @@ public class ProposalCommitteeFilingController {
|
|||||||
LEFT JOIN wf_process_task rt ON rt.processInstanceId = ins.id AND rt.taskParentId = t.id AND rt.taskState = 10
|
LEFT JOIN wf_process_task rt ON rt.processInstanceId = ins.id AND rt.taskParentId = t.id AND rt.taskState = 10
|
||||||
LEFT JOIN proposal_info info ON info.id = ins.businessNo
|
LEFT JOIN proposal_info info ON info.id = ins.businessNo
|
||||||
LEFT JOIN proposal_type type on type.id = info.typeId
|
LEFT JOIN proposal_type type on type.id = info.typeId
|
||||||
|
LEFT JOIN proposal_merge mer ON mer.proposalId = info.id
|
||||||
LEFT JOIN teacher_congress_session tcs on tcs.id = info.sessionId
|
LEFT JOIN teacher_congress_session tcs on tcs.id = info.sessionId
|
||||||
LEFT JOIN teacher_congress_delegation tcd on tcd.id = info.delegationId
|
LEFT JOIN teacher_congress_delegation tcd on tcd.id = info.delegationId
|
||||||
$condition
|
$condition
|
||||||
""");
|
""");
|
||||||
Cnd cnd = Cnd.NEW();
|
Cnd cnd = Cnd.NEW();
|
||||||
cnd.and("t.taskName", "=", "committee");
|
cnd.and("t.taskName", "=", "committee");
|
||||||
if(!AuthUtil.hasRole(RoleConstant.SYSADMIN.name())){
|
if (!AuthUtil.hasRole(RoleConstant.SYSADMIN.name())) {
|
||||||
cnd.and("ta.actorId", "in", List.of(SecurityUtil.getUserId()));
|
cnd.and("ta.actorId", "in", List.of(SecurityUtil.getUserId()));
|
||||||
}
|
}
|
||||||
if (approval) {
|
if (approval) {
|
||||||
@@ -91,8 +108,38 @@ public class ProposalCommitteeFilingController {
|
|||||||
cnd.groupBy("t.id");
|
cnd.groupBy("t.id");
|
||||||
cnd.desc("t.createdAt");
|
cnd.desc("t.createdAt");
|
||||||
sql.setCondition(cnd);
|
sql.setCondition(cnd);
|
||||||
Pagination pagination = proposalCommitteeFilingService.listPageMap(pageForm.getPageNumber(),pageForm.getPageSize(), sql);
|
Pagination pagination = proposalCommitteeFilingService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
|
||||||
return Result.success(pagination);
|
return Result.success(pagination);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@At
|
||||||
|
@SaCheckPermission("proposal.committeeFiling")
|
||||||
|
@ApiOperation("并案审核")
|
||||||
|
@Aop(TransAop.READ_COMMITTED)
|
||||||
|
public Result merge(@Param("data") String data) {
|
||||||
|
Dict args = Json.fromJson(Dict.class, data);
|
||||||
|
|
||||||
|
List<Integer> taskIds = (List<Integer>) args.get("processTaskIds");
|
||||||
|
List<String> proposalIds = (List<String>) args.get("proposalIds");
|
||||||
|
|
||||||
|
// 记录提案并案
|
||||||
|
dao.clear(ProposalMerge.class, Cnd.where(ProposalMerge::getProposalId, "in", proposalIds));
|
||||||
|
String groupId = R.UU32();
|
||||||
|
List<ProposalMerge> merges = proposalIds.stream().map(proposalId -> {
|
||||||
|
ProposalMerge merge = new ProposalMerge();
|
||||||
|
merge.setProposalId(proposalId);
|
||||||
|
merge.setGroupId(groupId);
|
||||||
|
return merge;
|
||||||
|
}).toList();
|
||||||
|
dao.insert(merges);
|
||||||
|
|
||||||
|
for (Integer taskId : taskIds) {
|
||||||
|
Dict taskArgs = args.clone();
|
||||||
|
taskArgs.put(FlowConst.PROCESS_TASK_ID_KEY, taskId);
|
||||||
|
flowCommonService.executeTask(taskArgs);
|
||||||
|
}
|
||||||
|
|
||||||
|
return Result.success();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
+3
-1
@@ -41,7 +41,7 @@ public class ProposalFeedbackEvaluationController {
|
|||||||
private ProposalCommonService proposalCommonService;
|
private ProposalCommonService proposalCommonService;
|
||||||
|
|
||||||
@At("")
|
@At("")
|
||||||
@Ok("beetl:/platform/zhgh/democratic/proposal/transact/feedbackEvaluation/index.html")
|
@Ok("beetl:/platform/zhgh/democratic/proposal/transact/feedback/index.html")
|
||||||
@SaCheckPermission("proposal.feedbackEvaluation")
|
@SaCheckPermission("proposal.feedbackEvaluation")
|
||||||
public void index() {
|
public void index() {
|
||||||
}
|
}
|
||||||
@@ -61,6 +61,7 @@ public class ProposalFeedbackEvaluationController {
|
|||||||
SELECT
|
SELECT
|
||||||
info.*,
|
info.*,
|
||||||
type.name AS typeName,
|
type.name AS typeName,
|
||||||
|
IF(mer.proposalId IS NOT NULL, 1, 0) AS merge,
|
||||||
tcs.fullName AS sessionName,
|
tcs.fullName AS sessionName,
|
||||||
tcd.`name` AS delegationName,
|
tcd.`name` AS delegationName,
|
||||||
ins.id AS instanceId,
|
ins.id AS instanceId,
|
||||||
@@ -87,6 +88,7 @@ public class ProposalFeedbackEvaluationController {
|
|||||||
LEFT JOIN wf_process_task rt ON rt.processInstanceId = ins.id AND rt.taskParentId = t.id AND rt.taskState = 10
|
LEFT JOIN wf_process_task rt ON rt.processInstanceId = ins.id AND rt.taskParentId = t.id AND rt.taskState = 10
|
||||||
LEFT JOIN proposal_info info ON info.id = ins.businessNo
|
LEFT JOIN proposal_info info ON info.id = ins.businessNo
|
||||||
LEFT JOIN proposal_type type on type.id = info.typeId
|
LEFT JOIN proposal_type type on type.id = info.typeId
|
||||||
|
LEFT JOIN proposal_merge mer ON mer.proposalId = info.id
|
||||||
LEFT JOIN teacher_congress_session tcs on tcs.id = info.sessionId
|
LEFT JOIN teacher_congress_session tcs on tcs.id = info.sessionId
|
||||||
LEFT JOIN teacher_congress_delegation tcd on tcd.id = info.delegationId
|
LEFT JOIN teacher_congress_delegation tcd on tcd.id = info.delegationId
|
||||||
$condition
|
$condition
|
||||||
|
|||||||
+39
@@ -1,11 +1,16 @@
|
|||||||
package com.budwk.app.zhgh.democratic.proposal.controller.transact;
|
package com.budwk.app.zhgh.democratic.proposal.controller.transact;
|
||||||
|
|
||||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||||
|
import cn.hutool.core.lang.Dict;
|
||||||
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
import com.budwk.app.base.constant.RoleConstant;
|
import com.budwk.app.base.constant.RoleConstant;
|
||||||
import com.budwk.app.base.page.Pagination;
|
import com.budwk.app.base.page.Pagination;
|
||||||
import com.budwk.app.base.result.Result;
|
import com.budwk.app.base.result.Result;
|
||||||
import com.budwk.app.base.vo.LabelValueVO;
|
import com.budwk.app.base.vo.LabelValueVO;
|
||||||
|
import com.budwk.app.flow.constant.FlowConst;
|
||||||
|
import com.budwk.app.flow.entity.ProcessTask;
|
||||||
import com.budwk.app.flow.enums.ProcessTaskStateEnum;
|
import com.budwk.app.flow.enums.ProcessTaskStateEnum;
|
||||||
|
import com.budwk.app.flow.service.FlowCommonService;
|
||||||
import com.budwk.app.flow.service.ProcessTaskService;
|
import com.budwk.app.flow.service.ProcessTaskService;
|
||||||
import com.budwk.app.web.commons.auth.utils.AuthUtil;
|
import com.budwk.app.web.commons.auth.utils.AuthUtil;
|
||||||
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
|
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
|
||||||
@@ -21,8 +26,10 @@ import org.nutz.dao.Sqls;
|
|||||||
import org.nutz.dao.sql.Sql;
|
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.mvc.annotation.At;
|
import org.nutz.mvc.annotation.At;
|
||||||
import org.nutz.mvc.annotation.Ok;
|
import org.nutz.mvc.annotation.Ok;
|
||||||
|
import org.nutz.mvc.annotation.Param;
|
||||||
|
|
||||||
import javax.validation.Valid;
|
import javax.validation.Valid;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -42,6 +49,8 @@ public class ProposalSchoolLeaderApprovalController {
|
|||||||
private ProposalCommonService proposalCommonService;
|
private ProposalCommonService proposalCommonService;
|
||||||
@Inject
|
@Inject
|
||||||
private ProcessTaskService processTaskService;
|
private ProcessTaskService processTaskService;
|
||||||
|
@Inject
|
||||||
|
private FlowCommonService flowCommonService;
|
||||||
|
|
||||||
@At("")
|
@At("")
|
||||||
@Ok("beetl:/platform/zhgh/democratic/proposal/transact/schoolLeaderApproval/index.html")
|
@Ok("beetl:/platform/zhgh/democratic/proposal/transact/schoolLeaderApproval/index.html")
|
||||||
@@ -66,6 +75,7 @@ public class ProposalSchoolLeaderApprovalController {
|
|||||||
SELECT
|
SELECT
|
||||||
info.*,
|
info.*,
|
||||||
type.name AS typeName,
|
type.name AS typeName,
|
||||||
|
IF(mer.proposalId IS NOT NULL, 1, 0) AS merge,
|
||||||
tcs.fullName AS sessionName,
|
tcs.fullName AS sessionName,
|
||||||
tcd.`name` AS delegationName,
|
tcd.`name` AS delegationName,
|
||||||
ins.id AS instanceId,
|
ins.id AS instanceId,
|
||||||
@@ -92,6 +102,7 @@ public class ProposalSchoolLeaderApprovalController {
|
|||||||
LEFT JOIN wf_process_task rt ON rt.processInstanceId = ins.id AND rt.taskParentId = t.id AND rt.taskState = 10
|
LEFT JOIN wf_process_task rt ON rt.processInstanceId = ins.id AND rt.taskParentId = t.id AND rt.taskState = 10
|
||||||
LEFT JOIN proposal_info info ON info.id = ins.businessNo
|
LEFT JOIN proposal_info info ON info.id = ins.businessNo
|
||||||
LEFT JOIN proposal_type type on type.id = info.typeId
|
LEFT JOIN proposal_type type on type.id = info.typeId
|
||||||
|
LEFT JOIN proposal_merge mer ON mer.proposalId = info.id
|
||||||
LEFT JOIN teacher_congress_session tcs on tcs.id = info.sessionId
|
LEFT JOIN teacher_congress_session tcs on tcs.id = info.sessionId
|
||||||
LEFT JOIN teacher_congress_delegation tcd on tcd.id = info.delegationId
|
LEFT JOIN teacher_congress_delegation tcd on tcd.id = info.delegationId
|
||||||
$condition
|
$condition
|
||||||
@@ -125,4 +136,32 @@ public class ProposalSchoolLeaderApprovalController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@At
|
||||||
|
@SaCheckPermission("proposal.schoolLeaderApproval")
|
||||||
|
@ApiOperation("执行任务")
|
||||||
|
public Result executeTask(@Param("data") String data) {
|
||||||
|
Dict args = Json.fromJson(Dict.class, data);
|
||||||
|
String proposalId = args.getStr("proposalId");
|
||||||
|
|
||||||
|
// 单条审核
|
||||||
|
List<String> mergeProposalIds = proposalCommonService.mergeProposal(proposalId);
|
||||||
|
if (ObjectUtil.isEmpty(mergeProposalIds)) {
|
||||||
|
flowCommonService.executeTask(args);
|
||||||
|
return Result.success();
|
||||||
|
}
|
||||||
|
|
||||||
|
// 并案审核
|
||||||
|
ProcessTask thisTask = dao.fetch(ProcessTask.class, args.getLong(FlowConst.PROCESS_TASK_ID_KEY));
|
||||||
|
List<ProcessTask> mergeTasks = processTaskService.getDoingTaskByBizIdTaskName(mergeProposalIds, thisTask.getTaskName());
|
||||||
|
for (ProcessTask mergeTask : mergeTasks) {
|
||||||
|
Dict cloneArgs = args.clone();
|
||||||
|
cloneArgs.put(FlowConst.PROCESS_TASK_ID_KEY, mergeTask.getId());
|
||||||
|
flowCommonService.executeTask(cloneArgs);
|
||||||
|
}
|
||||||
|
return Result.success();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
+51
-2
@@ -1,9 +1,13 @@
|
|||||||
package com.budwk.app.zhgh.democratic.proposal.controller.transact;
|
package com.budwk.app.zhgh.democratic.proposal.controller.transact;
|
||||||
|
|
||||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||||
|
import cn.hutool.core.lang.Dict;
|
||||||
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
import com.budwk.app.base.constant.RoleConstant;
|
import com.budwk.app.base.constant.RoleConstant;
|
||||||
import com.budwk.app.base.page.Pagination;
|
import com.budwk.app.base.page.Pagination;
|
||||||
import com.budwk.app.base.result.Result;
|
import com.budwk.app.base.result.Result;
|
||||||
|
import com.budwk.app.flow.constant.FlowConst;
|
||||||
|
import com.budwk.app.flow.entity.ProcessTask;
|
||||||
import com.budwk.app.flow.enums.ProcessTaskStateEnum;
|
import com.budwk.app.flow.enums.ProcessTaskStateEnum;
|
||||||
import com.budwk.app.flow.service.FlowCommonService;
|
import com.budwk.app.flow.service.FlowCommonService;
|
||||||
import com.budwk.app.flow.service.ProcessTaskService;
|
import com.budwk.app.flow.service.ProcessTaskService;
|
||||||
@@ -20,12 +24,14 @@ import io.swagger.annotations.ApiOperation;
|
|||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.nutz.aop.interceptor.ioc.TransAop;
|
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.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.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;
|
||||||
|
import org.nutz.json.Json;
|
||||||
import org.nutz.lang.util.NutMap;
|
import org.nutz.lang.util.NutMap;
|
||||||
import org.nutz.mvc.annotation.At;
|
import org.nutz.mvc.annotation.At;
|
||||||
import org.nutz.mvc.annotation.Ok;
|
import org.nutz.mvc.annotation.Ok;
|
||||||
@@ -42,6 +48,8 @@ import java.util.stream.Stream;
|
|||||||
@Api(tags = "提案承办单位答复")
|
@Api(tags = "提案承办单位答复")
|
||||||
public class ProposalUnderTakeReplyController {
|
public class ProposalUnderTakeReplyController {
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
private Dao dao;
|
||||||
@Inject
|
@Inject
|
||||||
private ProposalCommonService proposalCommonService;
|
private ProposalCommonService proposalCommonService;
|
||||||
@Inject
|
@Inject
|
||||||
@@ -73,6 +81,7 @@ public class ProposalUnderTakeReplyController {
|
|||||||
SELECT
|
SELECT
|
||||||
info.*,
|
info.*,
|
||||||
type.name AS typeName,
|
type.name AS typeName,
|
||||||
|
IF(mer.proposalId IS NOT NULL, 1, 0) AS merge,
|
||||||
tcs.fullName AS sessionName,
|
tcs.fullName AS sessionName,
|
||||||
tcd.`name` AS delegationName,
|
tcd.`name` AS delegationName,
|
||||||
ins.id AS instanceId,
|
ins.id AS instanceId,
|
||||||
@@ -104,6 +113,7 @@ public class ProposalUnderTakeReplyController {
|
|||||||
LEFT JOIN wf_process_task rt ON rt.processInstanceId = ins.id AND rt.taskParentId = t.id
|
LEFT JOIN wf_process_task rt ON rt.processInstanceId = ins.id AND rt.taskParentId = t.id
|
||||||
LEFT JOIN proposal_info info ON info.id = ins.businessNo
|
LEFT JOIN proposal_info info ON info.id = ins.businessNo
|
||||||
LEFT JOIN proposal_type type on type.id = info.typeId
|
LEFT JOIN proposal_type type on type.id = info.typeId
|
||||||
|
LEFT JOIN proposal_merge mer ON mer.proposalId = info.id
|
||||||
LEFT JOIN teacher_congress_session tcs on tcs.id = info.sessionId
|
LEFT JOIN teacher_congress_session tcs on tcs.id = info.sessionId
|
||||||
LEFT JOIN teacher_congress_delegation tcd on tcd.id = info.delegationId
|
LEFT JOIN teacher_congress_delegation tcd on tcd.id = info.delegationId
|
||||||
LEFT JOIN sys_user transferUser on transferUser.id = t.variable->>'$.tf_transferUserId'
|
LEFT JOIN sys_user transferUser on transferUser.id = t.variable->>'$.tf_transferUserId'
|
||||||
@@ -143,6 +153,34 @@ public class ProposalUnderTakeReplyController {
|
|||||||
return Result.success(pagination);
|
return Result.success(pagination);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@At
|
||||||
|
@SaCheckPermission("proposal.unitReply")
|
||||||
|
@ApiOperation("执行任务")
|
||||||
|
public Result executeTask(@Param("data") String data) {
|
||||||
|
Dict args = Json.fromJson(Dict.class, data);
|
||||||
|
String proposalId = args.getStr("proposalId");
|
||||||
|
|
||||||
|
// 查询是否提案
|
||||||
|
|
||||||
|
// 单条审核
|
||||||
|
List<String> mergeProposalIds = proposalCommonService.mergeProposal(proposalId);
|
||||||
|
if (ObjectUtil.isEmpty(mergeProposalIds)) {
|
||||||
|
flowCommonService.executeTask(args);
|
||||||
|
return Result.success();
|
||||||
|
}
|
||||||
|
|
||||||
|
// 并案审核
|
||||||
|
ProcessTask thisTask = dao.fetch(ProcessTask.class, args.getLong(FlowConst.PROCESS_TASK_ID_KEY));
|
||||||
|
List<ProcessTask> mergeTasks = processTaskService.getDoingTaskByBizIdTaskName(mergeProposalIds, thisTask.getTaskName());
|
||||||
|
for (ProcessTask mergeTask : mergeTasks) {
|
||||||
|
Dict cloneArgs = args.clone();
|
||||||
|
cloneArgs.put(FlowConst.PROCESS_TASK_ID_KEY, mergeTask.getId());
|
||||||
|
flowCommonService.executeTask(cloneArgs);
|
||||||
|
}
|
||||||
|
return Result.success();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@At
|
@At
|
||||||
@SaCheckPermission("proposal.unitReply")
|
@SaCheckPermission("proposal.unitReply")
|
||||||
@ApiOperation("查询本单位可转办用户")
|
@ApiOperation("查询本单位可转办用户")
|
||||||
@@ -167,7 +205,7 @@ public class ProposalUnderTakeReplyController {
|
|||||||
@SaCheckPermission("proposal.unitReply")
|
@SaCheckPermission("proposal.unitReply")
|
||||||
@ApiOperation("转办")
|
@ApiOperation("转办")
|
||||||
@Aop(TransAop.READ_COMMITTED)
|
@Aop(TransAop.READ_COMMITTED)
|
||||||
public Result transfer(@Param("taskId") @Valid Long taskId, @Param("userId") @Valid String userId) {
|
public Result transfer(@Param("taskId") @Valid Long taskId, @Param("proposalId") String proposalId, @Param("userId") @Valid String userId) {
|
||||||
// 此处设置转办用户的角色即可
|
// 此处设置转办用户的角色即可
|
||||||
Sys_role proxyRole = sysRoleService.getByCode(RoleConstant.PROPOSAL_UNIT_PROXY);
|
Sys_role proxyRole = sysRoleService.getByCode(RoleConstant.PROPOSAL_UNIT_PROXY);
|
||||||
int count = sysRoleService.dao().count(Sys_user_role.class, Cnd.where(Sys_user_role::getUserId, "=", userId).and(Sys_user_role::getRoleId, "=", proxyRole.getId()));
|
int count = sysRoleService.dao().count(Sys_user_role.class, Cnd.where(Sys_user_role::getUserId, "=", userId).and(Sys_user_role::getRoleId, "=", proxyRole.getId()));
|
||||||
@@ -181,7 +219,18 @@ public class ProposalUnderTakeReplyController {
|
|||||||
sysRoleService.clearCache();
|
sysRoleService.clearCache();
|
||||||
}
|
}
|
||||||
|
|
||||||
processTaskService.transfer(taskId, userId);
|
// 查询是否并案
|
||||||
|
List<String> mergeProposalIds = proposalCommonService.mergeProposal(proposalId);
|
||||||
|
if (ObjectUtil.isEmpty(mergeProposalIds)) {
|
||||||
|
processTaskService.transfer(taskId, userId);
|
||||||
|
return Result.success();
|
||||||
|
}
|
||||||
|
|
||||||
|
ProcessTask thisTask = dao.fetch(ProcessTask.class, taskId);
|
||||||
|
List<ProcessTask> mergeTasks = processTaskService.getDoingTaskByBizIdTaskName(mergeProposalIds, thisTask.getTaskName());
|
||||||
|
for (ProcessTask mergeTask : mergeTasks) {
|
||||||
|
processTaskService.transfer(mergeTask.getId(), userId);
|
||||||
|
}
|
||||||
return Result.success();
|
return Result.success();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,31 @@
|
|||||||
|
package com.budwk.app.zhgh.democratic.proposal.models;
|
||||||
|
|
||||||
|
import com.budwk.app.base.model.BaseModel;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
|
import org.nutz.dao.entity.annotation.*;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
@Table("proposal_merge")
|
||||||
|
@TableMeta("{'mysql-charset':'utf8mb4'}")
|
||||||
|
@Comment("提案并案")
|
||||||
|
@TableIndexes(value = {
|
||||||
|
@Index(name = "INDEX_PROPOSAL_MERGE_PROPOSAL_ID", fields = "proposalId", unique = true)
|
||||||
|
})
|
||||||
|
public class ProposalMerge extends BaseModel {
|
||||||
|
|
||||||
|
@Id
|
||||||
|
@Comment("id")
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
@Column
|
||||||
|
@Comment("分组id")
|
||||||
|
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||||
|
private String groupId;
|
||||||
|
|
||||||
|
@Column
|
||||||
|
@Comment("提案id")
|
||||||
|
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||||
|
private String proposalId;
|
||||||
|
}
|
||||||
+4
@@ -30,6 +30,10 @@ public class ProposalQueryComprehensiveParam extends PageForm {
|
|||||||
private String caseFilingResult;
|
private String caseFilingResult;
|
||||||
@ApiModelProperty(name = "提案立案结果")
|
@ApiModelProperty(name = "提案立案结果")
|
||||||
private String[] caseFilingResults;
|
private String[] caseFilingResults;
|
||||||
|
@ApiModelProperty(name = "提案立案类型")
|
||||||
|
private String caseFilingType;
|
||||||
|
@ApiModelProperty(name = "提案立案类型")
|
||||||
|
private String[] caseFilingTypes;
|
||||||
@ApiModelProperty(name = "提案类型")
|
@ApiModelProperty(name = "提案类型")
|
||||||
private String type;
|
private String type;
|
||||||
@ApiModelProperty(name = "提案类型")
|
@ApiModelProperty(name = "提案类型")
|
||||||
|
|||||||
+9
@@ -1,5 +1,6 @@
|
|||||||
package com.budwk.app.zhgh.democratic.proposal.service;
|
package com.budwk.app.zhgh.democratic.proposal.service;
|
||||||
|
|
||||||
|
import com.budwk.app.base.param.ExportTableColumns;
|
||||||
import com.budwk.app.base.service.BaseService;
|
import com.budwk.app.base.service.BaseService;
|
||||||
import com.budwk.app.zhgh.democratic.proposal.models.ProposalInfo;
|
import com.budwk.app.zhgh.democratic.proposal.models.ProposalInfo;
|
||||||
import com.budwk.app.zhgh.democratic.proposal.param.ProposalQueryComprehensiveParam;
|
import com.budwk.app.zhgh.democratic.proposal.param.ProposalQueryComprehensiveParam;
|
||||||
@@ -72,4 +73,12 @@ public interface ProposalExportService extends BaseService<ProposalInfo> {
|
|||||||
* @param response
|
* @param response
|
||||||
*/
|
*/
|
||||||
void exportCollectZip(ProposalQueryComprehensiveParam pageForm, HttpServletResponse response);
|
void exportCollectZip(ProposalQueryComprehensiveParam pageForm, HttpServletResponse response);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 导出自定义表excel
|
||||||
|
* @param pageForm
|
||||||
|
* @param tableColumns
|
||||||
|
* @param response
|
||||||
|
*/
|
||||||
|
void exportCustomAsExcel(ProposalQueryComprehensiveParam pageForm, ExportTableColumns[] tableColumns, HttpServletResponse response);
|
||||||
}
|
}
|
||||||
|
|||||||
+17
-1
@@ -17,6 +17,7 @@ public interface ProposalCommonService extends BaseService<ProposalInfo> {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 导出word
|
* 导出word
|
||||||
|
*
|
||||||
* @param id
|
* @param id
|
||||||
* @param response
|
* @param response
|
||||||
*/
|
*/
|
||||||
@@ -32,14 +33,16 @@ public interface ProposalCommonService extends BaseService<ProposalInfo> {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 导出单个反馈表
|
* 导出单个反馈表
|
||||||
|
*
|
||||||
* @param id
|
* @param id
|
||||||
* @param byteArrayOutputStream
|
* @param byteArrayOutputStream
|
||||||
*/
|
*/
|
||||||
void exportProposalFeedBackAsDocx(String id,ByteArrayOutputStream byteArrayOutputStream);
|
void exportProposalFeedBackAsDocx(String id, ByteArrayOutputStream byteArrayOutputStream);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 导出征集表
|
* 导出征集表
|
||||||
|
*
|
||||||
* @param id
|
* @param id
|
||||||
* @param byteArrayOutputStream
|
* @param byteArrayOutputStream
|
||||||
*/
|
*/
|
||||||
@@ -71,6 +74,7 @@ public interface ProposalCommonService extends BaseService<ProposalInfo> {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取自管代表团
|
* 获取自管代表团
|
||||||
|
*
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
List<String> getSelfManageDelegationIds();
|
List<String> getSelfManageDelegationIds();
|
||||||
@@ -78,6 +82,7 @@ public interface ProposalCommonService extends BaseService<ProposalInfo> {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 根据提案id查询并案的提案
|
* 根据提案id查询并案的提案
|
||||||
|
*
|
||||||
* @param id
|
* @param id
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
@@ -85,8 +90,19 @@ public interface ProposalCommonService extends BaseService<ProposalInfo> {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 导出年度报告
|
* 导出年度报告
|
||||||
|
*
|
||||||
* @param sessionId
|
* @param sessionId
|
||||||
* @param response
|
* @param response
|
||||||
*/
|
*/
|
||||||
void exportYearReport(String sessionId, HttpServletResponse response);
|
void exportYearReport(String sessionId, HttpServletResponse response);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 合并提案
|
||||||
|
*
|
||||||
|
* @param id
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
List<String> mergeProposal(String id);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
+36
-1
@@ -27,6 +27,7 @@ import com.budwk.app.web.commons.auth.utils.SecurityUtil;
|
|||||||
import com.budwk.app.web.commons.base.Globals;
|
import com.budwk.app.web.commons.base.Globals;
|
||||||
import com.budwk.app.zhgh.democratic.proposal.models.ProposalConsolidation;
|
import com.budwk.app.zhgh.democratic.proposal.models.ProposalConsolidation;
|
||||||
import com.budwk.app.zhgh.democratic.proposal.models.ProposalInfo;
|
import com.budwk.app.zhgh.democratic.proposal.models.ProposalInfo;
|
||||||
|
import com.budwk.app.zhgh.democratic.proposal.models.ProposalMerge;
|
||||||
import com.budwk.app.zhgh.democratic.teachercongress.prepare.models.Teacher_congress_session;
|
import com.budwk.app.zhgh.democratic.teachercongress.prepare.models.Teacher_congress_session;
|
||||||
import com.deepoove.poi.XWPFTemplate;
|
import com.deepoove.poi.XWPFTemplate;
|
||||||
import com.deepoove.poi.config.Configure;
|
import com.deepoove.poi.config.Configure;
|
||||||
@@ -100,6 +101,30 @@ public class ProposalCommonServiceImpl extends BaseServiceImpl<ProposalInfo> imp
|
|||||||
if (StrUtil.isNotBlank(info.getString("suggestUnits"))) {
|
if (StrUtil.isNotBlank(info.getString("suggestUnits"))) {
|
||||||
info.put("suggestUnits", String.join(",", Json.fromJson(ArrayList.class, info.getString("suggestUnits"))));
|
info.put("suggestUnits", String.join(",", Json.fromJson(ArrayList.class, info.getString("suggestUnits"))));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 并案提案
|
||||||
|
List<String> mergedProposalIds = mergeProposal(id);
|
||||||
|
if (ObjectUtil.isNotEmpty(mergedProposalIds)) {
|
||||||
|
Sql mergeSql = Sqls.create("""
|
||||||
|
SELECT
|
||||||
|
info.id,
|
||||||
|
info.name,
|
||||||
|
info.code,
|
||||||
|
info.createUserName,
|
||||||
|
type.name AS typeName,
|
||||||
|
tcde.NAME AS delegationName
|
||||||
|
FROM
|
||||||
|
`proposal_info` info
|
||||||
|
LEFT JOIN proposal_type type on type.id = info.typeId
|
||||||
|
LEFT JOIN teacher_congress_delegate tcd ON tcd.userId = info.createUserId AND tcd.sessionId = info.sessionId
|
||||||
|
LEFT JOIN teacher_congress_delegation tcde ON tcde.id = tcd.delegationId
|
||||||
|
WHERE info.id in (@ids)
|
||||||
|
""");
|
||||||
|
mergeSql.setParam("ids", mergedProposalIds);
|
||||||
|
List<NutMap> mergeInfos = listMap(mergeSql);
|
||||||
|
info.put("merges", mergeInfos);
|
||||||
|
}
|
||||||
|
|
||||||
return info;
|
return info;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -238,7 +263,7 @@ public class ProposalCommonServiceImpl extends BaseServiceImpl<ProposalInfo> imp
|
|||||||
String implementState = FlowUtil.variableToDict(masterUnitReplyTask.getVariable()).getStr("tf_implementState");
|
String implementState = FlowUtil.variableToDict(masterUnitReplyTask.getVariable()).getStr("tf_implementState");
|
||||||
info.put(implementState, "√");
|
info.put(implementState, "√");
|
||||||
// 承办单位名称
|
// 承办单位名称
|
||||||
info.put("underTakeName",FlowUtil.variableToDict(masterUnitReplyTask.getVariable()).getStr("underTakeName"));
|
info.put("underTakeName", FlowUtil.variableToDict(masterUnitReplyTask.getVariable()).getStr("underTakeName"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -542,4 +567,14 @@ public class ProposalCommonServiceImpl extends BaseServiceImpl<ProposalInfo> imp
|
|||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<String> mergeProposal(String id) {
|
||||||
|
ProposalMerge merge = dao().fetch(ProposalMerge.class, Cnd.where(ProposalMerge::getProposalId, "=", id));
|
||||||
|
if (merge != null) {
|
||||||
|
List<ProposalMerge> merges = dao().query(ProposalMerge.class, Cnd.where(ProposalMerge::getGroupId, "=", merge.getGroupId()));
|
||||||
|
return merges.stream().map(ProposalMerge::getProposalId).toList();
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+104
-3
@@ -6,6 +6,7 @@ import cn.afterturn.easypoi.excel.entity.enmus.ExcelType;
|
|||||||
import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity;
|
import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity;
|
||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
import cn.hutool.http.HtmlUtil;
|
import cn.hutool.http.HtmlUtil;
|
||||||
|
import com.budwk.app.base.param.ExportTableColumns;
|
||||||
import com.budwk.app.base.service.impl.BaseServiceImpl;
|
import com.budwk.app.base.service.impl.BaseServiceImpl;
|
||||||
import com.budwk.app.base.utils.CommonDownloadUtil;
|
import com.budwk.app.base.utils.CommonDownloadUtil;
|
||||||
import com.budwk.app.base.utils.SysOfficeTemplateUtil;
|
import com.budwk.app.base.utils.SysOfficeTemplateUtil;
|
||||||
@@ -14,6 +15,8 @@ import com.budwk.app.flow.engine.util.FlowUtil;
|
|||||||
import com.budwk.app.flow.entity.ProcessInstance;
|
import com.budwk.app.flow.entity.ProcessInstance;
|
||||||
import com.budwk.app.flow.entity.ProcessTask;
|
import com.budwk.app.flow.entity.ProcessTask;
|
||||||
import com.budwk.app.flow.enums.ProcessTaskStateEnum;
|
import com.budwk.app.flow.enums.ProcessTaskStateEnum;
|
||||||
|
import com.budwk.app.sys.models.Sys_dict;
|
||||||
|
import com.budwk.app.sys.services.SysDictService;
|
||||||
import com.budwk.app.web.commons.base.Globals;
|
import com.budwk.app.web.commons.base.Globals;
|
||||||
import com.budwk.app.zhgh.democratic.proposal.models.ProposalInfo;
|
import com.budwk.app.zhgh.democratic.proposal.models.ProposalInfo;
|
||||||
import com.budwk.app.zhgh.democratic.proposal.param.ProposalQueryComprehensiveParam;
|
import com.budwk.app.zhgh.democratic.proposal.param.ProposalQueryComprehensiveParam;
|
||||||
@@ -41,6 +44,7 @@ import java.io.IOException;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
import java.util.zip.ZipEntry;
|
import java.util.zip.ZipEntry;
|
||||||
import java.util.zip.ZipOutputStream;
|
import java.util.zip.ZipOutputStream;
|
||||||
@@ -53,6 +57,8 @@ public class ProposalExportServiceImpl extends BaseServiceImpl<ProposalInfo> imp
|
|||||||
private ProposalCommonService proposalCommonService;
|
private ProposalCommonService proposalCommonService;
|
||||||
@Inject
|
@Inject
|
||||||
private SysOfficeTemplateUtil sysOfficeTemplateUtil;
|
private SysOfficeTemplateUtil sysOfficeTemplateUtil;
|
||||||
|
@Inject
|
||||||
|
private SysDictService sysDictService;
|
||||||
|
|
||||||
|
|
||||||
public ProposalExportServiceImpl(Dao dao) {
|
public ProposalExportServiceImpl(Dao dao) {
|
||||||
@@ -195,7 +201,7 @@ public class ProposalExportServiceImpl extends BaseServiceImpl<ProposalInfo> imp
|
|||||||
// 查询附议人信息
|
// 查询附议人信息
|
||||||
ProcessTask inviteTask = dao().fetch(ProcessTask.class,
|
ProcessTask inviteTask = dao().fetch(ProcessTask.class,
|
||||||
Cnd.where(ProcessTask::getProcessInstanceId, "=", instance.getId())
|
Cnd.where(ProcessTask::getProcessInstanceId, "=", instance.getId())
|
||||||
.and(ProcessTask::getTaskName, "=", "85b7b9bd-d706-48cb-99a1-ef1370fb1819")
|
.and(ProcessTask::getTaskName, "=", "invite")
|
||||||
.and(ProcessTask::getTaskState, "in",
|
.and(ProcessTask::getTaskState, "in",
|
||||||
List.of(ProcessTaskStateEnum.DOING.getCode(), ProcessTaskStateEnum.FINISHED.getCode()))
|
List.of(ProcessTaskStateEnum.DOING.getCode(), ProcessTaskStateEnum.FINISHED.getCode()))
|
||||||
.desc(ProcessTask::getCreatedAt));
|
.desc(ProcessTask::getCreatedAt));
|
||||||
@@ -416,7 +422,7 @@ public class ProposalExportServiceImpl extends BaseServiceImpl<ProposalInfo> imp
|
|||||||
info.put("measures", sysOfficeTemplateUtil.convertRichTextToDocText(info.getString("measures")));
|
info.put("measures", sysOfficeTemplateUtil.convertRichTextToDocText(info.getString("measures")));
|
||||||
|
|
||||||
// 处理建议承办单位
|
// 处理建议承办单位
|
||||||
if(StrUtil.isNotBlank(info.getString("suggestUnits"))){
|
if (StrUtil.isNotBlank(info.getString("suggestUnits"))) {
|
||||||
info.put("suggestUnits", String.join("、", Json.fromJsonAsList(String.class, info.getString("suggestUnits"))));
|
info.put("suggestUnits", String.join("、", Json.fromJsonAsList(String.class, info.getString("suggestUnits"))));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -439,10 +445,11 @@ public class ProposalExportServiceImpl extends BaseServiceImpl<ProposalInfo> imp
|
|||||||
NutMap variable = Json.fromJson(NutMap.class, inviteTask.getVariable());
|
NutMap variable = Json.fromJson(NutMap.class, inviteTask.getVariable());
|
||||||
if (variable != null) {
|
if (variable != null) {
|
||||||
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(seconders != null){
|
if (seconders != null) {
|
||||||
String secondersNames = seconders.stream().map(seconder -> seconder.getString("userName")).collect(Collectors.joining("、"));
|
String secondersNames = seconders.stream().map(seconder -> seconder.getString("userName")).collect(Collectors.joining("、"));
|
||||||
docData.put("secondersNames", secondersNames);
|
docData.put("secondersNames", secondersNames);
|
||||||
}
|
}
|
||||||
|
docData.put("seconders", seconders);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -521,4 +528,98 @@ public class ProposalExportServiceImpl extends BaseServiceImpl<ProposalInfo> imp
|
|||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void exportCustomAsExcel(ProposalQueryComprehensiveParam pageForm, ExportTableColumns[] tableColumns, HttpServletResponse response) {
|
||||||
|
// 基本信息查询
|
||||||
|
Sql sql = Sqls.create("""
|
||||||
|
SELECT
|
||||||
|
info.id,
|
||||||
|
info.name,
|
||||||
|
info.code,
|
||||||
|
info.researchFindings,
|
||||||
|
info.brief,
|
||||||
|
info.measures,
|
||||||
|
info.createUserName,
|
||||||
|
tcde.unitName,
|
||||||
|
tcde.mobile,
|
||||||
|
IF(mer.proposalId IS NOT NULL, '是', '') AS merge,
|
||||||
|
type.name AS typeName,
|
||||||
|
tcs.j,
|
||||||
|
tcs.c,
|
||||||
|
tcs.fullName AS sessionName,
|
||||||
|
tcd.`name` AS delegationName,
|
||||||
|
GROUP_CONCAT(DISTINCT CASE WHEN pru.isMaster = 1 THEN pru.unitName END) AS masterUnitName,
|
||||||
|
GROUP_CONCAT(DISTINCT CASE WHEN pru.isMaster = 0 THEN pru.unitName END) AS slaveUnitNames
|
||||||
|
FROM
|
||||||
|
proposal_info info
|
||||||
|
LEFT JOIN proposal_type type on type.id = info.typeId
|
||||||
|
LEFT JOIN proposal_merge mer ON mer.proposalId = info.id
|
||||||
|
LEFT JOIN teacher_congress_session tcs on tcs.id = info.sessionId
|
||||||
|
LEFT JOIN teacher_congress_delegation tcd on tcd.id = info.delegationId
|
||||||
|
LEFT JOIN teacher_congress_delegate tcde on tcde.loginName = info.createUserLoginName
|
||||||
|
LEFT JOIN proposal_reply_unit pru ON pru.proposalId = info.id
|
||||||
|
$condition
|
||||||
|
""");
|
||||||
|
Cnd cnd = Cnd.NEW();
|
||||||
|
ProposalQueryComprehensiveParam.buildSearch(cnd, pageForm);
|
||||||
|
cnd.groupBy("info.id");
|
||||||
|
sql.setCondition(cnd);
|
||||||
|
// 导出的数据
|
||||||
|
List<NutMap> list = listMap(sql);
|
||||||
|
// 添加序号,去除富文本,获取附议人
|
||||||
|
for (int i = 0; i < list.size(); i++) {
|
||||||
|
list.get(i).put("index", i + 1);
|
||||||
|
list.get(i).put("brief", HtmlUtil.cleanHtmlTag(list.get(i).getString("brief")));
|
||||||
|
list.get(i).put("measures", HtmlUtil.cleanHtmlTag(list.get(i).getString("measures")));
|
||||||
|
|
||||||
|
// 流程实例
|
||||||
|
// ProcessInstance instance = dao().fetch(ProcessInstance.class, Cnd.where(ProcessInstance::getBusinessNo, "=", list.get(i).getString("id")));
|
||||||
|
//
|
||||||
|
// // 查询附议人信息
|
||||||
|
// ProcessTask inviteTask = dao().fetch(ProcessTask.class,
|
||||||
|
// Cnd.where(ProcessTask::getProcessInstanceId, "=", instance.getId())
|
||||||
|
// .and(ProcessTask::getTaskName, "=", "invite")
|
||||||
|
// .and(ProcessTask::getTaskState, "in",
|
||||||
|
// List.of(ProcessTaskStateEnum.DOING.getCode(), ProcessTaskStateEnum.FINISHED.getCode()))
|
||||||
|
// .desc(ProcessTask::getCreatedAt));
|
||||||
|
//
|
||||||
|
// if (inviteTask != null) {
|
||||||
|
// NutMap variable = Json.fromJson(NutMap.class, inviteTask.getVariable());
|
||||||
|
// List<NutMap> seconders = variable.getAsList(FlowConst.TASK_FORM_DATA_PREFIX + "seconder", NutMap.class);
|
||||||
|
// list.get(i).put("secondedUserNames", seconders.stream().map(v -> v.getString("userName")).collect(Collectors.joining(",")));
|
||||||
|
// }
|
||||||
|
}
|
||||||
|
|
||||||
|
// 立案结果
|
||||||
|
List<Sys_dict> caseFilingResult = sysDictService.getSubListByCode("PROPOSAL_CASE_FILING_RESULT");
|
||||||
|
Map<String, String> caseFilingResultMap = caseFilingResult.stream().collect(Collectors.toMap(Sys_dict::getCode, Sys_dict::getName));
|
||||||
|
// 立案类型
|
||||||
|
List<Sys_dict> caseFilingType = sysDictService.getSubListByCode("PROPOSAL_CASE_FILING_TYPE");
|
||||||
|
Map<String, String> caseFilingTypeMap = caseFilingType.stream().collect(Collectors.toMap(Sys_dict::getCode, Sys_dict::getName));
|
||||||
|
// 流程状态
|
||||||
|
List<Sys_dict> processInstanceState = sysDictService.getSubListByCode("PROCESS_INSTANCE_STATE");
|
||||||
|
Map<String, String> processInstanceStateMap = processInstanceState.stream().collect(Collectors.toMap(Sys_dict::getCode, Sys_dict::getName));
|
||||||
|
|
||||||
|
for (NutMap row : list) {
|
||||||
|
row.put("caseFilingResult", caseFilingResultMap.get(row.getString("caseFilingResult")));
|
||||||
|
row.put("caseFilingType", caseFilingTypeMap.get(row.getString("caseFilingType")));
|
||||||
|
row.put("instanceState", processInstanceStateMap.get(row.getString("instanceState")));
|
||||||
|
}
|
||||||
|
|
||||||
|
List<ExcelExportEntity> exportEntities = new ArrayList<>();
|
||||||
|
|
||||||
|
for (ExportTableColumns column : tableColumns) {
|
||||||
|
exportEntities.add(new ExcelExportEntity(column.getLabel(), column.getProp(), 20));
|
||||||
|
}
|
||||||
|
|
||||||
|
Teacher_congress_session session = dao().fetch(Teacher_congress_session.class, pageForm.getSessionId());
|
||||||
|
String title = StrUtil.format("{}第{}{}教代会提案汇总表", Globals.AppName, session.getJ(), session.getC());
|
||||||
|
|
||||||
|
ExportParams exportParams = new ExportParams();
|
||||||
|
exportParams.setType(ExcelType.XSSF);
|
||||||
|
exportParams.setTitle(title);
|
||||||
|
Workbook workbook = ExcelExportUtil.exportExcel(exportParams, exportEntities, list);
|
||||||
|
CommonDownloadUtil.download(title + ".xlsx", workbook, response);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,7 +3,6 @@ package com.budwk.app.zhgh.mall.models.dto.goods;
|
|||||||
import cn.hutool.json.JSONObject;
|
import cn.hutool.json.JSONObject;
|
||||||
import io.swagger.annotations.ApiModelProperty;
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
import lombok.*;
|
import lombok.*;
|
||||||
import org.hibernate.validator.constraints.Length;
|
|
||||||
import org.nutz.lang.util.NutMap;
|
import org.nutz.lang.util.NutMap;
|
||||||
|
|
||||||
import javax.validation.Valid;
|
import javax.validation.Valid;
|
||||||
@@ -41,7 +40,6 @@ public class MallGoodsOperationDTO implements Serializable {
|
|||||||
|
|
||||||
@ApiModelProperty(value = "商品名称", required = true)
|
@ApiModelProperty(value = "商品名称", required = true)
|
||||||
@NotEmpty(message = "商品名称不能为空")
|
@NotEmpty(message = "商品名称不能为空")
|
||||||
@Length(max = 50, message = "商品名称不能超过50个字符")
|
|
||||||
private String goodsName;
|
private String goodsName;
|
||||||
|
|
||||||
@ApiModelProperty(value = "详情")
|
@ApiModelProperty(value = "详情")
|
||||||
|
|||||||
@@ -48,7 +48,7 @@
|
|||||||
<logger name="java" additivity="false" />
|
<logger name="java" additivity="false" />
|
||||||
<logger name="org.eclipse.jetty" level="INFO"/>
|
<logger name="org.eclipse.jetty" level="INFO"/>
|
||||||
<logger name="org.quartz" level="INFO"/>
|
<logger name="org.quartz" level="INFO"/>
|
||||||
<logger name="org.nutz" level="DEBUG"/>
|
<logger name="org.nutz" level="INFO"/>
|
||||||
|
|
||||||
<!-- 日志级别和appender的关联 -->
|
<!-- 日志级别和appender的关联 -->
|
||||||
<root level="DEBUG">
|
<root level="DEBUG">
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
@@ -1,188 +1,358 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="ele-table-tool">
|
<div class="ele-table-tool">
|
||||||
<div class="ele-table-tool-title">
|
<div class="ele-table-tool-title">
|
||||||
<div class="ele-table-tool-title-label">
|
<div class="ele-table-tool-title-label">
|
||||||
<slot v-if="$slots.label" name="label"></slot>
|
<slot v-if="$slots.label" name="label"></slot>
|
||||||
<span v-else>{{ label }}</span>
|
<span v-else>{{ label }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="ele-table-tool-title-content">
|
<div class="ele-table-tool-title-content">
|
||||||
<slot v-if="$slots.content" name="content"></slot>
|
<slot v-if="$slots.content" name="content"></slot>
|
||||||
<span v-else>{{ content }}</span>
|
<span v-else>{{ content }}</span>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="ele-tool">
|
||||||
|
<div class="ele-space">
|
||||||
|
<slot></slot>
|
||||||
|
</div>
|
||||||
|
<div class="ele-tool-item ele-action" v-if="columns && columns.length > 0">
|
||||||
|
<!--控制列-->
|
||||||
|
<i class="el-icon-menu" @click="openColumns" ></i>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<el-dialog title="列设置" :visible.sync="columnDialog" width="40%">
|
||||||
|
<div class="column-setting-container">
|
||||||
|
<div class="column-setting-header">
|
||||||
|
<el-checkbox
|
||||||
|
:indeterminate="isIndeterminate"
|
||||||
|
v-model="checkAll"
|
||||||
|
@change="handleCheckAllChange">
|
||||||
|
全选
|
||||||
|
</el-checkbox>
|
||||||
|
<span class="column-count">已选择 {{ checkedColumns.length }} / {{ tempColumns.length }} 列</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="ele-tool">
|
<el-table
|
||||||
<div class="ele-space">
|
:data="tempColumns"
|
||||||
<slot></slot>
|
ref="columnTableRef"
|
||||||
<!-- <el-radio-group v-if="show_audit" v-model="auditState" @change="auditStateChange" size="small">-->
|
@selection-change="handleSelectionChange"
|
||||||
<!--<!– <el-radio-button :label="null">全部</el-radio-button>–>-->
|
row-key="prop"
|
||||||
<!-- <el-radio-button :label="true">已审核</el-radio-button>-->
|
class="column-setting-table"
|
||||||
<!-- <el-radio-button :label="false">未审核</el-radio-button>-->
|
max-height="500px">
|
||||||
<!-- </el-radio-group>-->
|
<el-table-column type="selection" width="55" :selectable="isColumnSelectable"></el-table-column>
|
||||||
</div>
|
<el-table-column label="标题" prop="label" min-width="120"></el-table-column>
|
||||||
<!-- <div class="ele-tool-item ele-action"></div>-->
|
<!-- <el-table-column label="字段" prop="prop" min-width="100"></el-table-column>-->
|
||||||
</div>
|
<el-table-column label="宽度PX" prop="width" min-width="120">
|
||||||
</div>
|
<template slot-scope="{row}">
|
||||||
|
<el-input
|
||||||
|
v-model="row.width"
|
||||||
|
type="number"
|
||||||
|
size="mini"
|
||||||
|
placeholder="自动">
|
||||||
|
</el-input>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="固定" prop="fixed" min-width="120">
|
||||||
|
<template slot-scope="{row}">
|
||||||
|
<el-radio-group v-model="row.fixed" size="mini" boder>
|
||||||
|
<el-radio-button label="left">左侧</el-radio-button>
|
||||||
|
<el-radio-button label="">自动</el-radio-button>
|
||||||
|
<el-radio-button label="right">右侧</el-radio-button>
|
||||||
|
</el-radio-group>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
</el-table>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<span slot="footer" class="dialog-footer">
|
||||||
|
<el-button @click="columnDialog = false">取 消</el-button>
|
||||||
|
<el-button type="primary" @click="doColumns">确 定</el-button>
|
||||||
|
</span>
|
||||||
|
</el-dialog>
|
||||||
|
|
||||||
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
module.exports = {
|
module.exports = {
|
||||||
name: "index",
|
name: "index",
|
||||||
props: {
|
props: {
|
||||||
label: {
|
label: {
|
||||||
type: String,
|
type: String,
|
||||||
default: "表格数据"
|
default: "表格数据"
|
||||||
},
|
|
||||||
content: {
|
|
||||||
type: String,
|
|
||||||
default: ""
|
|
||||||
},
|
|
||||||
show_audit: {
|
|
||||||
type: Boolean,
|
|
||||||
default: false
|
|
||||||
},
|
|
||||||
audit_state: {
|
|
||||||
type: Boolean,
|
|
||||||
default: null
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
data() {
|
content: {
|
||||||
return {
|
type: String,
|
||||||
auditState: false
|
default: ""
|
||||||
}
|
|
||||||
},
|
},
|
||||||
methods: {
|
columns: {
|
||||||
auditStateChange(val) {
|
type: Array,
|
||||||
if (this.show_audit) {
|
default: function () {
|
||||||
this.$emit("update:audit_state", val)
|
return []
|
||||||
this.$emit("search", null)
|
}
|
||||||
|
},
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
columnDialog: false,
|
||||||
|
checkedColumns: [],
|
||||||
|
checkAll: false,
|
||||||
|
isIndeterminate: false,
|
||||||
|
sortable: null, // Sortable实例
|
||||||
|
tempColumns: [] // 临时存储列配置,避免直接修改props
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
// 打开列设置
|
||||||
|
openColumns() {
|
||||||
|
// 创建临时列配置的深拷贝,避免直接修改props
|
||||||
|
this.tempColumns = JSON.parse(JSON.stringify(this.columns))
|
||||||
|
this.columnDialog = true
|
||||||
|
this.initColumnSelection()
|
||||||
|
this.initSortable()
|
||||||
|
},
|
||||||
|
|
||||||
|
// 初始化拖拽排序
|
||||||
|
initSortable() {
|
||||||
|
this.$nextTick(() => {
|
||||||
|
if (this.$refs.columnTableRef && this.$refs.columnTableRef.$el) {
|
||||||
|
const tbody = this.$refs.columnTableRef.$el.querySelector('.el-table__body-wrapper tbody')
|
||||||
|
if (tbody && !this.sortable) {
|
||||||
|
this.sortable = new Sortable(tbody, {
|
||||||
|
animation: 150,
|
||||||
|
ghostClass: 'sortable-ghost',
|
||||||
|
chosenClass: 'sortable-chosen',
|
||||||
|
dragClass: 'sortable-drag',
|
||||||
|
onEnd: (evt) => {
|
||||||
|
const {oldIndex, newIndex} = evt
|
||||||
|
if (oldIndex !== newIndex) {
|
||||||
|
// 在tempColumns中重新排序
|
||||||
|
const movedItem = this.tempColumns.splice(oldIndex, 1)[0]
|
||||||
|
this.tempColumns.splice(newIndex, 0, movedItem)
|
||||||
|
|
||||||
|
// 重新初始化选择状态
|
||||||
|
this.$nextTick(() => {
|
||||||
|
this.initColumnSelection()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
|
||||||
|
// 初始化列选择状态
|
||||||
|
initColumnSelection() {
|
||||||
|
// 设置默认选中状态(默认全部显示,除非明确指定visible为false)
|
||||||
|
this.checkedColumns = this.tempColumns.filter(col => col.visible !== false)
|
||||||
|
|
||||||
|
// 更新全选状态
|
||||||
|
this.updateCheckAllStatus()
|
||||||
|
|
||||||
|
// 设置表格选中状态
|
||||||
|
this.$nextTick(() => {
|
||||||
|
if (this.$refs.columnTableRef) {
|
||||||
|
this.tempColumns.forEach(row => {
|
||||||
|
if (row.visible !== false) {
|
||||||
|
this.$refs.columnTableRef.toggleRowSelection(row, true)
|
||||||
}
|
}
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
})
|
||||||
},
|
},
|
||||||
watch: {
|
|
||||||
audit_state: {
|
// 处理列选择变化
|
||||||
handler: function (val) {
|
handleSelectionChange(selection) {
|
||||||
this.auditState = val === null ? false : val
|
this.checkedColumns = selection
|
||||||
},
|
this.updateCheckAllStatus()
|
||||||
immediate: true
|
},
|
||||||
|
|
||||||
|
// 更新全选状态
|
||||||
|
updateCheckAllStatus() {
|
||||||
|
const selectableColumns = this.tempColumns.filter(col => this.isColumnSelectable(col))
|
||||||
|
this.checkAll = this.checkedColumns.length === selectableColumns.length
|
||||||
|
this.isIndeterminate = this.checkedColumns.length > 0 && this.checkedColumns.length < selectableColumns.length
|
||||||
|
},
|
||||||
|
|
||||||
|
// 处理全选变化
|
||||||
|
handleCheckAllChange(val) {
|
||||||
|
const selectableColumns = this.tempColumns.filter(col => this.isColumnSelectable(col))
|
||||||
|
|
||||||
|
if (val) {
|
||||||
|
this.checkedColumns = [...selectableColumns]
|
||||||
|
selectableColumns.forEach(row => {
|
||||||
|
this.$refs.columnTableRef.toggleRowSelection(row, true)
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
this.checkedColumns = []
|
||||||
|
this.$refs.columnTableRef.clearSelection()
|
||||||
|
}
|
||||||
|
this.isIndeterminate = false
|
||||||
|
},
|
||||||
|
|
||||||
|
// 判断列是否可选择
|
||||||
|
isColumnSelectable(row) {
|
||||||
|
return row.required !== true && row.type !== 'selection' && row.type !== 'index'
|
||||||
|
},
|
||||||
|
|
||||||
|
// 确定保存列设置
|
||||||
|
doColumns() {
|
||||||
|
// 基于tempColumns创建新的列配置数组,保留用户修改的宽度和固定值
|
||||||
|
const updatedColumns = this.tempColumns.map(col => {
|
||||||
|
return {
|
||||||
|
...col,
|
||||||
|
visible: this.checkedColumns.map(cc => cc.prop).includes(col.prop)
|
||||||
}
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
this.$emit('update:columns', updatedColumns)
|
||||||
|
this.columnDialog = false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
watch: {
|
||||||
|
columns: {
|
||||||
|
handler() {
|
||||||
|
// 只有在对话框未打开时才初始化,避免覆盖用户正在编辑的tempColumns
|
||||||
|
if (!this.columnDialog) {
|
||||||
|
this.initColumnSelection()
|
||||||
|
}
|
||||||
|
},
|
||||||
|
immediate: true
|
||||||
},
|
},
|
||||||
created() {}
|
|
||||||
|
columnDialog(val) {
|
||||||
|
if (!val && this.sortable) {
|
||||||
|
this.sortable.destroy()
|
||||||
|
this.sortable = null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
created() {
|
||||||
|
},
|
||||||
|
beforeDestroy() {
|
||||||
|
if (this.sortable) {
|
||||||
|
this.sortable.destroy()
|
||||||
|
this.sortable = null
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped>
|
<style scoped>
|
||||||
.ele-table-tool:not(.ele-table-tool-default):not(.ele-table-tools-none) .ele-tool .ele-tool-item {
|
.ele-table-tool:not(.ele-table-tool-default):not(.ele-table-tools-none) .ele-tool .ele-tool-item {
|
||||||
padding: 6px;
|
padding: 6px;
|
||||||
line-height: 1;
|
line-height: 1;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
border: unset;
|
border: unset;
|
||||||
border-radius: unset;
|
border-radius: unset;
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
|
margin-left: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.ele-table-tool .ele-table-tool-title {
|
.ele-table-tool .ele-table-tool-title {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.ele-table-tool-title-label {
|
.ele-table-tool-title-label {
|
||||||
position: relative;
|
position: relative;
|
||||||
padding-left: 1em;
|
padding-left: 1em;
|
||||||
color: var(--color-primary);
|
color: var(--color-primary);
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
}
|
}
|
||||||
|
|
||||||
.ele-table-tool-title-label::before {
|
.ele-table-tool-title-label::before {
|
||||||
content: "";
|
content: "";
|
||||||
position: absolute;
|
position: absolute;
|
||||||
left: 0;
|
left: 0;
|
||||||
top: 50%;
|
top: 50%;
|
||||||
transform: translateY(-50%);
|
transform: translateY(-50%);
|
||||||
width: 5px;
|
width: 5px;
|
||||||
height: 1.3em;
|
height: 1.3em;
|
||||||
background-color: var(--color-primary);
|
background-color: var(--color-primary);
|
||||||
border-radius: 2px;
|
border-radius: 2px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.ele-table-tool {
|
.ele-table-tool {
|
||||||
-ms-flex-wrap: wrap;
|
-ms-flex-wrap: wrap;
|
||||||
flex-wrap: wrap;
|
flex-wrap: wrap;
|
||||||
-ms-flex-align: center;
|
-ms-flex-align: center;
|
||||||
margin-bottom: 10px;
|
margin-bottom: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.ele-table-tool,
|
.ele-table-tool,
|
||||||
.ele-table-tool .ele-table-tool-title {
|
.ele-table-tool .ele-table-tool-title {
|
||||||
display: -webkit-box;
|
display: -webkit-box;
|
||||||
display: -ms-flexbox;
|
display: -ms-flexbox;
|
||||||
display: flex;
|
display: flex;
|
||||||
-webkit-box-align: center;
|
-webkit-box-align: center;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
.ele-table-tool .ele-table-tool-title {
|
.ele-table-tool .ele-table-tool-title {
|
||||||
-webkit-box-flex: 1;
|
-webkit-box-flex: 1;
|
||||||
-ms-flex: auto;
|
-ms-flex: auto;
|
||||||
flex: auto;
|
flex: auto;
|
||||||
margin-top: 5px;
|
margin-top: 5px;
|
||||||
margin-bottom: 5px;
|
margin-bottom: 5px;
|
||||||
-ms-flex-align: center;
|
-ms-flex-align: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
.ele-table-tool .ele-table-tool-title > .ele-table-tool-title-label {
|
.ele-table-tool .ele-table-tool-title > .ele-table-tool-title-label {
|
||||||
margin-right: 8px;
|
margin-right: 8px;
|
||||||
-webkit-box-sizing: border-box;
|
-webkit-box-sizing: border-box;
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
}
|
}
|
||||||
|
|
||||||
.ele-table-tool .ele-table-tool-title > .ele-table-tool-title-content {
|
.ele-table-tool .ele-table-tool-title > .ele-table-tool-title-content {
|
||||||
-webkit-box-flex: 1;
|
-webkit-box-flex: 1;
|
||||||
-ms-flex: 1;
|
-ms-flex: 1;
|
||||||
flex: 1;
|
flex: 1;
|
||||||
-webkit-box-sizing: border-box;
|
-webkit-box-sizing: border-box;
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
}
|
}
|
||||||
|
|
||||||
.ele-table-tool .ele-tool {
|
.ele-table-tool .ele-tool {
|
||||||
margin: 5px 0 5px auto;
|
margin: 5px 0 5px auto;
|
||||||
display: -webkit-inline-box;
|
display: -webkit-inline-box;
|
||||||
display: -ms-inline-flexbox;
|
display: -ms-inline-flexbox;
|
||||||
display: inline-flex;
|
display: inline-flex;
|
||||||
-webkit-box-align: center;
|
-webkit-box-align: center;
|
||||||
-ms-flex-align: center;
|
-ms-flex-align: center;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
-ms-flex-wrap: wrap;
|
-ms-flex-wrap: wrap;
|
||||||
flex-wrap: wrap;
|
flex-wrap: wrap;
|
||||||
}
|
}
|
||||||
|
|
||||||
.ele-table-tool .ele-tool .ele-tool-item {
|
.ele-table-tool .ele-tool .ele-tool-item {
|
||||||
font-size: 18px;
|
font-size: 18px;
|
||||||
padding: 0 2px;
|
padding: 0 2px;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
|
|
||||||
.ele-table-tool .ele-tool .ele-tool-item .el-dropdown > i {
|
.ele-table-tool .ele-tool .ele-tool-item .el-dropdown > i {
|
||||||
font-size: 18px;
|
font-size: 18px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.ele-table-tool .ele-tool .ele-tool-item + .ele-tool-item {
|
.ele-table-tool .ele-tool .ele-tool-item + .ele-tool-item {
|
||||||
margin-left: 10px;
|
margin-left: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.ele-table-tool.ele-toolbar-form .ele-table-tool-title {
|
.ele-table-tool.ele-toolbar-form .ele-table-tool-title {
|
||||||
margin-top: 0;
|
margin-top: 0;
|
||||||
margin-bottom: 0;
|
margin-bottom: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.ele-table-tool.ele-toolbar-form .ele-table-tool-title .el-form-item,
|
.ele-table-tool.ele-toolbar-form .ele-table-tool-title .el-form-item,
|
||||||
.ele-table-tool.ele-toolbar-form .ele-table-tool-title .ele-form-actions {
|
.ele-table-tool.ele-toolbar-form .ele-table-tool-title .ele-form-actions {
|
||||||
margin-top: 5px;
|
margin-top: 5px;
|
||||||
margin-bottom: 5px;
|
margin-bottom: 5px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.ele-table-tool.ele-toolbar-actions .ele-table-tool-title {
|
.ele-table-tool.ele-toolbar-actions .ele-table-tool-title {
|
||||||
margin-top: 0;
|
margin-top: 0;
|
||||||
margin-bottom: 0;
|
margin-bottom: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.ele-table-tool.ele-toolbar-actions .ele-table-tool-title > .el-button,
|
.ele-table-tool.ele-toolbar-actions .ele-table-tool-title > .el-button,
|
||||||
@@ -190,105 +360,163 @@ module.exports = {
|
|||||||
.ele-table-tool.ele-toolbar-actions .ele-table-tool-title > .el-link,
|
.ele-table-tool.ele-toolbar-actions .ele-table-tool-title > .el-link,
|
||||||
.ele-table-tool.ele-toolbar-actions .ele-table-tool-title > .el-tag,
|
.ele-table-tool.ele-toolbar-actions .ele-table-tool-title > .el-tag,
|
||||||
.ele-table-tool.ele-toolbar-actions .ele-table-tool-title > .ele-action {
|
.ele-table-tool.ele-toolbar-actions .ele-table-tool-title > .ele-action {
|
||||||
margin-top: 5px;
|
margin-top: 5px;
|
||||||
margin-bottom: 5px;
|
margin-bottom: 5px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.ele-table-tool:not(.ele-table-tool-default):not(.ele-table-tools-none) .ele-tool .ele-tool-item {
|
.ele-table-tool:not(.ele-table-tool-default):not(.ele-table-tools-none) .ele-tool .ele-tool-item {
|
||||||
padding: 6px;
|
padding: 6px;
|
||||||
line-height: 1;
|
line-height: 1;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
border: 1px solid var(--border-color-base);
|
border: 1px solid var(--border-color-base);
|
||||||
border-radius: 50%;
|
border-radius: 50%;
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.ele-table-tool:not(.ele-table-tool-default):not(.ele-table-tools-none) .ele-tool .ele-tool-item .el-dropdown > i {
|
.ele-table-tool:not(.ele-table-tool-default):not(.ele-table-tools-none) .ele-tool .ele-tool-item .el-dropdown > i {
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.ele-table-tool:not(.ele-table-tool-default):not(.ele-table-tools-none) .ele-tool .ele-tool-item:hover {
|
.ele-table-tool:not(.ele-table-tool-default):not(.ele-table-tools-none) .ele-tool .ele-tool-item:hover {
|
||||||
color: var(--color-primary);
|
color: var(--color-primary);
|
||||||
border-color: var(--color-primary-3);
|
border-color: var(--color-primary-3);
|
||||||
background-color: var(--color-primary-1);
|
background-color: var(--color-primary-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
.ele-table-tool:not(.ele-table-tool-default):not(.ele-table-tools-none) .ele-tool .ele-tool-item:hover .el-dropdown > i {
|
.ele-table-tool:not(.ele-table-tool-default):not(.ele-table-tools-none) .ele-tool .ele-tool-item:hover .el-dropdown > i {
|
||||||
color: var(--color-primary);
|
color: var(--color-primary);
|
||||||
}
|
}
|
||||||
|
|
||||||
.ele-table-tool-default {
|
.ele-table-tool-default {
|
||||||
margin-bottom: 0;
|
margin-bottom: 0;
|
||||||
padding: 5px 15px;
|
padding: 5px 15px;
|
||||||
-webkit-box-sizing: border-box;
|
-webkit-box-sizing: border-box;
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
background: var(--table-header-background-color);
|
background: var(--table-header-background-color);
|
||||||
border-top: 1px solid var(--border-color-lighter);
|
border-top: 1px solid var(--border-color-lighter);
|
||||||
border-left: 1px solid var(--border-color-lighter);
|
border-left: 1px solid var(--border-color-lighter);
|
||||||
border-right: 1px solid var(--border-color-lighter);
|
border-right: 1px solid var(--border-color-lighter);
|
||||||
}
|
}
|
||||||
|
|
||||||
.ele-table-tool-default .ele-tool .ele-tool-item {
|
.ele-table-tool-default .ele-tool .ele-tool-item {
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
padding: 5px 6px;
|
padding: 5px 6px;
|
||||||
border-radius: 2px;
|
border-radius: 2px;
|
||||||
border: 1px solid var(--border-color-light);
|
border: 1px solid var(--border-color-light);
|
||||||
-webkit-box-sizing: border-box;
|
-webkit-box-sizing: border-box;
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
line-height: 1;
|
line-height: 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
.ele-table-tool-default .ele-tool .ele-tool-item .el-dropdown > i {
|
.ele-table-tool-default .ele-tool .ele-tool-item .el-dropdown > i {
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.ele-tab-tool {
|
.ele-tab-tool {
|
||||||
padding: 0 15px;
|
padding: 0 15px;
|
||||||
-ms-flex-negative: 0;
|
-ms-flex-negative: 0;
|
||||||
flex-shrink: 0;
|
flex-shrink: 0;
|
||||||
width: auto;
|
width: auto;
|
||||||
min-width: 40px;
|
min-width: 40px;
|
||||||
height: 40px;
|
height: 40px;
|
||||||
line-height: 40px;
|
line-height: 40px;
|
||||||
-webkit-transition:
|
-webkit-transition: background-color 0.3s,
|
||||||
background-color 0.3s,
|
color 0.3s;
|
||||||
color 0.3s;
|
transition: background-color 0.3s,
|
||||||
transition:
|
color 0.3s;
|
||||||
background-color 0.3s,
|
-webkit-box-sizing: border-box;
|
||||||
color 0.3s;
|
box-sizing: border-box;
|
||||||
-webkit-box-sizing: border-box;
|
text-align: center;
|
||||||
box-sizing: border-box;
|
position: relative;
|
||||||
text-align: center;
|
cursor: pointer;
|
||||||
position: relative;
|
|
||||||
cursor: pointer;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.ele-tab-tool .el-icon-house {
|
.ele-tab-tool .el-icon-house {
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
vertical-align: -1px;
|
vertical-align: -1px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.ele-tab-tool.is-tab:hover {
|
.ele-tab-tool.is-tab:hover {
|
||||||
color: var(--color-primary);
|
color: var(--color-primary);
|
||||||
background: var(--header-tool-hover-bg);
|
background: var(--header-tool-hover-bg);
|
||||||
}
|
}
|
||||||
|
|
||||||
.ele-tab-tool.is-tab:after {
|
.ele-tab-tool.is-tab:after {
|
||||||
content: "";
|
content: "";
|
||||||
width: 0;
|
width: 0;
|
||||||
height: 2px;
|
height: 2px;
|
||||||
background: var(--color-primary);
|
background: var(--color-primary);
|
||||||
position: absolute;
|
position: absolute;
|
||||||
bottom: 0;
|
bottom: 0;
|
||||||
left: 0;
|
left: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.ele-tab-tool.is-tab.is-active {
|
.ele-tab-tool.is-tab.is-active {
|
||||||
color: var(--color-primary);
|
color: var(--color-primary);
|
||||||
background: var(--color-primary-1);
|
background: var(--color-primary-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
.ele-tab-tool.is-tab.is-active:after {
|
.ele-tab-tool.is-tab.is-active:after {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.column-setting-container {
|
||||||
|
/*max-height: calc(100vh - 182px);
|
||||||
|
overflow-y: auto;*/
|
||||||
|
}
|
||||||
|
|
||||||
|
.column-setting-header {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
margin-bottom: 15px;
|
||||||
|
padding: 10px;
|
||||||
|
background-color: #f5f7fa;
|
||||||
|
border-radius: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.column-count {
|
||||||
|
font-size: 12px;
|
||||||
|
color: #909399;
|
||||||
|
}
|
||||||
|
|
||||||
|
.column-setting-table {
|
||||||
|
margin-top: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 拖拽排序样式 */
|
||||||
|
.sortable-ghost {
|
||||||
|
opacity: 0.5;
|
||||||
|
background-color: #f5f7fa;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sortable-chosen {
|
||||||
|
background-color: #e6f7ff;
|
||||||
|
border: 1px dashed #1890ff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sortable-drag {
|
||||||
|
opacity: 0.8;
|
||||||
|
transform: rotate(5deg);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 表格行拖拽提示 */
|
||||||
|
.column-setting-table .el-table__row {
|
||||||
|
cursor: move;
|
||||||
|
transition: all 0.3s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
.column-setting-table .el-table__row:hover {
|
||||||
|
background-color: #f5f7fa;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 拖拽提示文本 */
|
||||||
|
.column-setting-container::before {
|
||||||
|
content: "💡 提示:可以拖拽表格行来调整列的显示顺序";
|
||||||
|
display: block;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
padding: 8px;
|
||||||
|
background-color: #fafafa;
|
||||||
|
border-left: 3px solid var(--color-primary);
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -50,21 +50,20 @@ const PROPOSAL_INFO = {
|
|||||||
</el-descriptions>
|
</el-descriptions>
|
||||||
|
|
||||||
<!--并案信息-->
|
<!--并案信息-->
|
||||||
<template v-if="viewData.consolidationProposals">
|
<template v-if="viewData.merges">
|
||||||
<div class="process-title">
|
<div class="process-title">
|
||||||
并案信息
|
并案信息
|
||||||
</div>
|
</div>
|
||||||
<el-table :data="viewData.consolidationProposals">
|
<el-table :data="viewData.merges" size="small">
|
||||||
<el-table-column label="序号" type="index" width="100px"></el-table-column>
|
<el-table-column label="序号" type="index" width="100px"></el-table-column>
|
||||||
<el-table-column label="提案编号" prop="code" sortable></el-table-column>
|
<el-table-column label="提案编号" prop="code" sortable></el-table-column>
|
||||||
<el-table-column label="提案名称" prop="name" show-overflow-tooltip></el-table-column>
|
<el-table-column label="提案名称" prop="name" show-overflow-tooltip></el-table-column>
|
||||||
<el-table-column label="提案人" prop="createUserName"></el-table-column>
|
<el-table-column label="提案人" prop="createUserName"></el-table-column>
|
||||||
<el-table-column label="提案类别" prop="typeName"></el-table-column>
|
<el-table-column label="提案类别" prop="typeName"></el-table-column>
|
||||||
<el-table-column label="届次" prop="sessionName"></el-table-column>
|
|
||||||
<el-table-column label="代表团" prop="delegationName"></el-table-column>
|
<el-table-column label="代表团" prop="delegationName"></el-table-column>
|
||||||
<el-table-column label="操作" width="100px">
|
<el-table-column label="操作" width="100px">
|
||||||
<template slot-scope="{row}">
|
<template slot-scope="{row}">
|
||||||
<el-link type="primary" size="mini" @click="openView(row.id)">查看</el-link>
|
<el-link type="primary" size="mini" @click="openView(row)">查看</el-link>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
</el-table>
|
</el-table>
|
||||||
@@ -193,10 +192,10 @@ const PROPOSAL_INFO = {
|
|||||||
},
|
},
|
||||||
|
|
||||||
// 查看提案
|
// 查看提案
|
||||||
openView(id) {
|
openView(row) {
|
||||||
this.viewDialogVisible = true
|
this.viewDialogVisible = true
|
||||||
this.$nextTick(() => {
|
this.$nextTick(() => {
|
||||||
this.$refs.infoDialogRef.onOpen(id)
|
this.$refs.infoDialogRef.onOpen(row)
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|||||||
+52
-27
@@ -111,44 +111,45 @@ layout("/layouts/platform.html"){
|
|||||||
</div>
|
</div>
|
||||||
</el-card>
|
</el-card>
|
||||||
<el-card shadow="never">
|
<el-card shadow="never">
|
||||||
<table-tool>
|
<table-tool :columns.sync="tableColumns">
|
||||||
<el-button type="primary" size="small" @click="exportAllProposalAsZip">导出提案压缩包</el-button>
|
<el-button type="primary" size="small" @click="exportAllProposalAsZip">导出提案压缩包</el-button>
|
||||||
<el-button type="primary" size="small" @click="exportCollectZip">导出提案征集表压缩包</el-button>
|
<el-button type="primary" size="small" @click="exportCollectZip">导出提案征集表压缩包</el-button>
|
||||||
<el-button type="primary" size="small" @click="exportAllProposalFeedBackAsZip">导出反馈表压缩包</el-button>
|
<el-button type="primary" size="small" @click="exportAllProposalFeedBackAsZip">导出反馈表压缩包
|
||||||
<el-button type="primary" size="small" @click="exportSummaryAsExcel">导出汇总表</el-button>
|
|
||||||
<!-- <el-button type="primary" size="small" @click="exportProposalRegisterSummaryAsExcel">导出立案汇总表-->
|
|
||||||
</el-button>
|
</el-button>
|
||||||
|
<el-button type="primary" size="small" @click="exportSummaryAsExcel">导出汇总表</el-button>
|
||||||
|
<!-- <el-button type="primary" size="small" @click="exportProposalRegisterSummaryAsExcel">导出立案汇总表-->
|
||||||
|
<el-button type="primary" size="small" @click="exportCustomAsExcel">自定义导出</el-button>
|
||||||
</table-tool>
|
</table-tool>
|
||||||
<el-table :data="tableData" @sort-change="pageOrder" header-align="center" style="width: 100%" row-key="id">
|
<el-table :data="tableData" @sort-change="pageOrder" header-align="center" style="width: 100%" row-key="id">
|
||||||
<el-table-column label="序号" width="50" type="index" :index="indexMethod"></el-table-column>
|
<el-table-column label="序号" width="50" type="index" :index="indexMethod"
|
||||||
<el-table-column label="提案编号" prop="code" width="200px"></el-table-column>
|
fixed="left"></el-table-column>
|
||||||
<el-table-column label="提案名称" prop="name" show-overflow-tooltip></el-table-column>
|
<el-table-column
|
||||||
<el-table-column label="提案人" prop="createUserName"></el-table-column>
|
:label="column.label"
|
||||||
<el-table-column label="提案类别" prop="typeName"></el-table-column>
|
:prop="column.prop"
|
||||||
<el-table-column label="届次" prop="sessionName"></el-table-column>
|
:key="column.key"
|
||||||
<el-table-column label="代表团" prop="delegationName"></el-table-column>
|
:min-width="column.width"
|
||||||
<el-table-column label="立案结果" prop="caseFilingResult">
|
:fixed="column.fixed"
|
||||||
<template scope="{row}">
|
show-overflow-tooltip
|
||||||
|
v-for="column in tableColumns"
|
||||||
|
v-if="column.visible !== false"
|
||||||
|
>
|
||||||
|
<template v-if="column.prop === 'caseFilingResult'" scope="{row}">
|
||||||
<dict-tag :options="dict.type.PROPOSAL_CASE_FILING_RESULT"
|
<dict-tag :options="dict.type.PROPOSAL_CASE_FILING_RESULT"
|
||||||
:value="row.caseFilingResult"></dict-tag>
|
:value="row.caseFilingResult"></dict-tag>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
<template v-else-if="column.prop === 'caseFilingType'" scope="{row}">
|
||||||
<el-table-column label="是否并案" prop="isConsolidation">
|
<dict-tag :options="dict.type.PROPOSAL_CASE_FILING_TYPE"
|
||||||
<template scope="{row}">
|
:value="row.caseFilingType"></dict-tag>
|
||||||
<el-tag size="mini" v-if="row.isConsolidation" type="success">是</el-tag>
|
|
||||||
<el-tag size="mini" v-else type="danger">否</el-tag>
|
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
<template v-else-if="column.prop === 'merge'" scope="{row}">
|
||||||
<el-table-column label="主办单位" prop="masterUnitName" show-overflow-tooltip></el-table-column>
|
<el-tag v-if="row.merge" size="small">是</el-tag>
|
||||||
<el-table-column label="协办单位" prop="slaveUnitNames" show-overflow-tooltip></el-table-column>
|
</template>
|
||||||
<el-table-column prop="curTaskName" label="当前节点"></el-table-column>
|
<template v-else-if="column.prop === 'instanceState'" scope="{row}">
|
||||||
<el-table-column prop="instanceState" label="流程状态">
|
|
||||||
<template slot-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>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="操作" fixed="right" width="200px">
|
<el-table-column label="操作" fixed="right" min-width="200px">
|
||||||
<template scope="{row}">
|
<template scope="{row}">
|
||||||
<el-button size="mini" type="primary" @click="openView(row)">查看</el-button>
|
<el-button size="mini" type="primary" @click="openView(row)">查看</el-button>
|
||||||
<el-button size="mini" type="primary" @click="exportDocx(row.id)">导出</el-button>
|
<el-button size="mini" type="primary" @click="exportDocx(row.id)">导出</el-button>
|
||||||
@@ -168,7 +169,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: {
|
||||||
@@ -189,7 +190,24 @@ layout("/layouts/platform.html"){
|
|||||||
caseFilingResults: [],
|
caseFilingResults: [],
|
||||||
unionId: null,
|
unionId: null,
|
||||||
unitId: null
|
unitId: null
|
||||||
}
|
},
|
||||||
|
tableColumns: [
|
||||||
|
{label: "提案编号", prop: "code"},
|
||||||
|
{label: "提案名称", prop: "name"},
|
||||||
|
{label: "提案人", prop: "createUserName"},
|
||||||
|
{label: "提案类别", prop: "typeName"},
|
||||||
|
{label: "届次", prop: "sessionName"},
|
||||||
|
{label: "代表团", prop: "delegationName"},
|
||||||
|
{label: "立案结果", prop: "caseFilingResult"},
|
||||||
|
{label: "立案类型", prop: "caseFilingType"},
|
||||||
|
{label: "是否并案", prop: "merge"},
|
||||||
|
{label: "案由", prop: "brief", visible: false},
|
||||||
|
{label: "建议措施", prop: "measures", visible: false},
|
||||||
|
{label: "主办单位", prop: "masterUnitName"},
|
||||||
|
{label: "协办单位", prop: "slaveUnitNames"},
|
||||||
|
{label: "当前节点", prop: "curTaskName"},
|
||||||
|
{label: "流程状态", prop: "instanceState"}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
@@ -227,6 +245,13 @@ layout("/layouts/platform.html"){
|
|||||||
})
|
})
|
||||||
},
|
},
|
||||||
|
|
||||||
|
exportCustomAsExcel() {
|
||||||
|
this.$downLoad("/platform/proposal/export/comprehensive/exportCustomAsExcel", {
|
||||||
|
pageForm: JSON.stringify(this.pageForm),
|
||||||
|
tableColumns: JSON.stringify(this.tableColumns.filter(item => item.visible !== false))
|
||||||
|
})
|
||||||
|
},
|
||||||
|
|
||||||
tagToggle(key, val) {
|
tagToggle(key, val) {
|
||||||
if (this.pageForm[key].includes(val)) {
|
if (this.pageForm[key].includes(val)) {
|
||||||
this.pageForm[key].splice(this.pageForm[key].indexOf(val), 1)
|
this.pageForm[key].splice(this.pageForm[key].indexOf(val), 1)
|
||||||
|
|||||||
+68
-42
@@ -13,69 +13,75 @@ layout("/layouts/platform.html"){
|
|||||||
<el-card shadow="never">
|
<el-card shadow="never">
|
||||||
<search @search="doSearch">
|
<search @search="doSearch">
|
||||||
<search-item label="教代会">
|
<search-item label="教代会">
|
||||||
<el-select @change="meetingChange" clearable filterable placeholder="所属教代会" v-model="pageForm.sessionId">
|
<el-select @change="meetingChange" clearable filterable placeholder="所属教代会"
|
||||||
<el-option :key="item.id" :label="item.fullName" :value="item.id" v-for="item in sessionOptions"></el-option>
|
v-model="pageForm.sessionId">
|
||||||
|
<el-option :key="item.id" :label="item.fullName" :value="item.id"
|
||||||
|
v-for="item in sessionOptions"></el-option>
|
||||||
</el-select>
|
</el-select>
|
||||||
</search-item>
|
</search-item>
|
||||||
<search-item label="提案名称">
|
<search-item label="提案名称">
|
||||||
<el-input
|
<el-input
|
||||||
@keyup.enter.native="doSearch"
|
@keyup.enter.native="doSearch"
|
||||||
clearable
|
clearable
|
||||||
placeholder="请输入提案名称"
|
placeholder="请输入提案名称"
|
||||||
v-model="pageForm.name"
|
v-model="pageForm.name"
|
||||||
style="width: 100%"
|
style="width: 100%"
|
||||||
></el-input>
|
></el-input>
|
||||||
</search-item>
|
</search-item>
|
||||||
<search-item label="提案编码">
|
<search-item label="提案编码">
|
||||||
<el-input
|
<el-input
|
||||||
@keyup.enter.native="doSearch"
|
@keyup.enter.native="doSearch"
|
||||||
clearable
|
clearable
|
||||||
placeholder="请输入提案编码"
|
placeholder="请输入提案编码"
|
||||||
v-model="pageForm.code"
|
v-model="pageForm.code"
|
||||||
style="width: 100%"
|
style="width: 100%"
|
||||||
></el-input>
|
></el-input>
|
||||||
</search-item>
|
</search-item>
|
||||||
<search-item label="提案人姓名">
|
<search-item label="提案人姓名">
|
||||||
<el-input
|
<el-input
|
||||||
@keyup.enter.native="doSearch"
|
@keyup.enter.native="doSearch"
|
||||||
clearable
|
clearable
|
||||||
placeholder="请输入提案人姓名"
|
placeholder="请输入提案人姓名"
|
||||||
v-model="pageForm.createUserName"
|
v-model="pageForm.createUserName"
|
||||||
style="width: 100%"
|
style="width: 100%"
|
||||||
></el-input>
|
></el-input>
|
||||||
</search-item>
|
</search-item>
|
||||||
<search-item label="提案人工号">
|
<search-item label="提案人工号">
|
||||||
<el-input
|
<el-input
|
||||||
@keyup.enter.native="doSearch"
|
@keyup.enter.native="doSearch"
|
||||||
clearable
|
clearable
|
||||||
placeholder="请输入提案人工号"
|
placeholder="请输入提案人工号"
|
||||||
v-model="pageForm.createUserLoginName"
|
v-model="pageForm.createUserLoginName"
|
||||||
style="width: 100%"
|
style="width: 100%"
|
||||||
></el-input>
|
></el-input>
|
||||||
</search-item>
|
</search-item>
|
||||||
<search-item label="代表团">
|
<search-item label="代表团">
|
||||||
<el-select clearable filterable placeholder="所属代表团" v-model="pageForm.delegationId">
|
<el-select clearable filterable placeholder="所属代表团" v-model="pageForm.delegationId">
|
||||||
<el-option :key="item.id" :label="item.name" :value="item.id" v-for="item in delegationOptions"></el-option>
|
<el-option :key="item.id" :label="item.name" :value="item.id"
|
||||||
|
v-for="item in delegationOptions"></el-option>
|
||||||
</el-select>
|
</el-select>
|
||||||
</search-item>
|
</search-item>
|
||||||
<search-item label="提案分工会">
|
<search-item label="提案分工会">
|
||||||
<el-select clearable filterable placeholder="分工会" v-model="pageForm.unionId" @change="pageForm.unitId=null;listUnit();">
|
<el-select clearable filterable placeholder="分工会" v-model="pageForm.unionId"
|
||||||
<el-option :key="item.id" :label="item.name" :value="item.id" v-for="item in unionOptions"></el-option>
|
@change="pageForm.unitId=null;listUnit();">
|
||||||
|
<el-option :key="item.id" :label="item.name" :value="item.id"
|
||||||
|
v-for="item in unionOptions"></el-option>
|
||||||
</el-select>
|
</el-select>
|
||||||
</search-item>
|
</search-item>
|
||||||
<search-item label="提案单位">
|
<search-item label="提案单位">
|
||||||
<el-select clearable filterable placeholder="提案单位" v-model="pageForm.unitId">
|
<el-select clearable filterable placeholder="提案单位" v-model="pageForm.unitId">
|
||||||
<el-option :key="item.id" :label="item.name" :value="item.id" v-for="item in unitOptions"></el-option>
|
<el-option :key="item.id" :label="item.name" :value="item.id"
|
||||||
|
v-for="item in unitOptions"></el-option>
|
||||||
</el-select>
|
</el-select>
|
||||||
</search-item>
|
</search-item>
|
||||||
<!-- <search-item label="承办单位">-->
|
<!-- <search-item label="承办单位">-->
|
||||||
<!-- <el-select clearable filterable placeholder="承办单位" v-model="pageForm.undertakeUnitId">-->
|
<!-- <el-select clearable filterable placeholder="承办单位" v-model="pageForm.undertakeUnitId">-->
|
||||||
<!-- <el-option :key="item.code" :label="item.name" :value="item.id" v-for="item in underTakeOptions"></el-option>-->
|
<!-- <el-option :key="item.code" :label="item.name" :value="item.id" v-for="item in underTakeOptions"></el-option>-->
|
||||||
<!-- </el-select>-->
|
<!-- </el-select>-->
|
||||||
<!-- </search-item>-->
|
<!-- </search-item>-->
|
||||||
</search>
|
</search>
|
||||||
</el-card>
|
</el-card>
|
||||||
<el-card shadow="never">
|
<el-card shadow="never" :body-style="{'padding-top': '0','padding-bottom': '0'}">
|
||||||
<div style="display: flex; align-items: center; min-height: 70px; border-bottom: 1px dashed rgb(230, 230, 230)">
|
<div style="display: flex; align-items: center; min-height: 70px; border-bottom: 1px dashed rgb(230, 230, 230)">
|
||||||
<div style="width: 90px;margin-right: 10px">提案类别</div>
|
<div style="width: 90px;margin-right: 10px">提案类别</div>
|
||||||
<div style="flex: 1;display: flex;gap: 5px;">
|
<div style="flex: 1;display: flex;gap: 5px;">
|
||||||
@@ -89,7 +95,7 @@ layout("/layouts/platform.html"){
|
|||||||
</el-tag>
|
</el-tag>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div style="display: flex; align-items: center; min-height: 70px; border-bottom: 1px dashed rgb(230, 230, 230)">
|
<div style="display: flex; align-items: center; min-height: 70px;border-bottom: 1px dashed rgb(230, 230, 230)">
|
||||||
<div style="width: 90px;margin-right: 10px">立案结果</div>
|
<div style="width: 90px;margin-right: 10px">立案结果</div>
|
||||||
<div style="flex: 1;display: flex;gap: 5px;">
|
<div style="flex: 1;display: flex;gap: 5px;">
|
||||||
<el-tag
|
<el-tag
|
||||||
@@ -102,10 +108,23 @@ layout("/layouts/platform.html"){
|
|||||||
</el-tag>
|
</el-tag>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div style="display: flex; align-items: center; min-height: 70px;">
|
||||||
|
<div style="width: 90px;margin-right: 10px">立案类型</div>
|
||||||
|
<div style="flex: 1;display: flex;gap: 5px;">
|
||||||
|
<el-tag
|
||||||
|
v-for="item in dict.type.PROPOSAL_CASE_FILING_TYPE"
|
||||||
|
:key="item.code"
|
||||||
|
:effect="pageForm.caseFilingTypes && pageForm.caseFilingTypes.includes(item.code) ? 'dark':'plain'"
|
||||||
|
@click="tagToggle('caseFilingTypes',item.code)"
|
||||||
|
>
|
||||||
|
{{ item.label }}
|
||||||
|
</el-tag>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</el-card>
|
</el-card>
|
||||||
<el-card shadow="never">
|
<el-card shadow="never">
|
||||||
<table-tool></table-tool>
|
<table-tool></table-tool>
|
||||||
<el-table :data="tableData" @sort-change="pageOrder" header-align="center" style="width: 100%" row-key="id">
|
<el-table :data="tableData" @sort-change="pageOrder" header-align="center" ref="tableRef" style="width: 100%" row-key="id">
|
||||||
<el-table-column label="序号" width="50" type="index" :index="indexMethod"></el-table-column>
|
<el-table-column label="序号" width="50" type="index" :index="indexMethod"></el-table-column>
|
||||||
<el-table-column label="提案编号" prop="code" width="100px" show-overflow-tooltip></el-table-column>
|
<el-table-column label="提案编号" prop="code" width="100px" show-overflow-tooltip></el-table-column>
|
||||||
<el-table-column label="提案名称" prop="name" show-overflow-tooltip></el-table-column>
|
<el-table-column label="提案名称" prop="name" show-overflow-tooltip></el-table-column>
|
||||||
@@ -114,13 +133,19 @@ layout("/layouts/platform.html"){
|
|||||||
<el-table-column label="代表团" prop="delegationName"></el-table-column>
|
<el-table-column label="代表团" prop="delegationName"></el-table-column>
|
||||||
<el-table-column label="立案结果" prop="caseFilingResult">
|
<el-table-column label="立案结果" prop="caseFilingResult">
|
||||||
<template scope="{row}">
|
<template scope="{row}">
|
||||||
<dict-tag :options="dict.type.PROPOSAL_CASE_FILING_RESULT" :value="row.caseFilingResult"></dict-tag>
|
<dict-tag :options="dict.type.PROPOSAL_CASE_FILING_RESULT"
|
||||||
|
:value="row.caseFilingResult"></dict-tag>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="是否并案" prop="isConsolidation" width="100">
|
<el-table-column label="立案类型" prop="caseFilingType">
|
||||||
<template scope="{row}">
|
<template scope="{row}">
|
||||||
<el-tag size="mini" v-if="row.isConsolidation" type="success">是</el-tag>
|
<dict-tag :options="dict.type.PROPOSAL_CASE_FILING_TYPE"
|
||||||
<el-tag size="mini" v-else type="danger">否</el-tag>
|
:value="row.caseFilingType"></dict-tag>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="是否并案" prop="merge">
|
||||||
|
<template slot-scope="{row}">
|
||||||
|
<el-tag v-if="row.merge" size="small">是</el-tag>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="主办单位" prop="masterUnitName" show-overflow-tooltip></el-table-column>
|
<el-table-column label="主办单位" prop="masterUnitName" show-overflow-tooltip></el-table-column>
|
||||||
@@ -150,9 +175,9 @@ layout("/layouts/platform.html"){
|
|||||||
|
|
||||||
<script>
|
<script>
|
||||||
<!--#include("../../common/info.js"){}#-->
|
<!--#include("../../common/info.js"){}#-->
|
||||||
new Vue({
|
const 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: {
|
||||||
@@ -169,6 +194,7 @@ layout("/layouts/platform.html"){
|
|||||||
pageForm: {
|
pageForm: {
|
||||||
typeIds: [],
|
typeIds: [],
|
||||||
caseFilingResults: [],
|
caseFilingResults: [],
|
||||||
|
caseFilingTypes: [],
|
||||||
unionId: null,
|
unionId: null,
|
||||||
unitId: null
|
unitId: null
|
||||||
}
|
}
|
||||||
@@ -181,7 +207,7 @@ layout("/layouts/platform.html"){
|
|||||||
})
|
})
|
||||||
},
|
},
|
||||||
exportDocx(id) {
|
exportDocx(id) {
|
||||||
this.$downLoad("/platform/proposal/common/exportProposalAsDocx", { id })
|
this.$downLoad("/platform/proposal/common/exportProposalAsDocx", {id})
|
||||||
},
|
},
|
||||||
tagToggle(key, val) {
|
tagToggle(key, val) {
|
||||||
if (this.pageForm[key].includes(val)) {
|
if (this.pageForm[key].includes(val)) {
|
||||||
@@ -204,7 +230,7 @@ layout("/layouts/platform.html"){
|
|||||||
this.listDelegation()
|
this.listDelegation()
|
||||||
},
|
},
|
||||||
listDelegation() {
|
listDelegation() {
|
||||||
this.$axios.post("/platform/proposal/common/listDelegation", { sessionId: this.pageForm.sessionId }).then((res) => {
|
this.$axios.post("/platform/proposal/common/listDelegation", {sessionId: this.pageForm.sessionId}).then((res) => {
|
||||||
if (res.code === 0) {
|
if (res.code === 0) {
|
||||||
this.delegationOptions = res.data
|
this.delegationOptions = res.data
|
||||||
}
|
}
|
||||||
|
|||||||
+13
-14
@@ -13,36 +13,32 @@ layout("/layouts/platform.html"){
|
|||||||
</el-card>
|
</el-card>
|
||||||
|
|
||||||
<el-card shadow="never" class="mt10">
|
<el-card shadow="never" class="mt10">
|
||||||
<table-tool label="代表团列表"></table-tool>
|
<table-tool label="代表团列表" :columns.sync="tableColumns"></table-tool>
|
||||||
<el-table :data="tableData" ref="tableRef" header-align="center" style="width: 100%" row-key="id" show-summary>
|
<el-table :data="tableData" ref="tableRef" header-align="center" style="width: 100%" row-key="id" show-summary>
|
||||||
<el-table-column
|
<el-table-column
|
||||||
:index="indexMethod"
|
:index="indexMethod"
|
||||||
align="center"
|
|
||||||
header-align="center"
|
|
||||||
label="序号"
|
label="序号"
|
||||||
type="index"
|
type="index"
|
||||||
width="80px"
|
width="80px"
|
||||||
|
fixed="left"
|
||||||
></el-table-column>
|
></el-table-column>
|
||||||
<el-table-column
|
<el-table-column
|
||||||
:label="column.label"
|
:label="column.label"
|
||||||
:prop="column.prop"
|
:prop="column.prop"
|
||||||
:sortable="column.sortable"
|
:key="column.key"
|
||||||
:width="column.width"
|
:min-width="column.width"
|
||||||
header-align="center"
|
:fixed="column.fixed"
|
||||||
min-width="100px"
|
|
||||||
show-overflow-tooltip
|
show-overflow-tooltip
|
||||||
v-for="column in tableColumns"
|
v-for="column in tableColumns"
|
||||||
|
v-if="column.visible !== false"
|
||||||
>
|
>
|
||||||
<template scope="{row}" v-if="column.prop=='dbtName'">
|
<template scope="{row}" v-if="column.prop=='dbtName'">
|
||||||
<el-link @click="openView(row)" type="primary">{{row.dbtName}}</el-link>
|
<el-link @click="openView(row)" type="primary">{{row.dbtName}}</el-link>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
<template scope="{row}" v-else-if="column.prop=='caseRate'">
|
||||||
<el-table-column header-align="center" label="立案率" prop="caseRate">
|
<span v-if="!isNaN(row.CONFIRM_FILING) && !isNaN(row.TOTAL) && row.TOTAL > 0">
|
||||||
<template scope="{row}">
|
{{ ((row.CONFIRM_FILING / row.TOTAL) * 100).toFixed(2) }}%
|
||||||
<span v-if="row.SUBMIT_COUNT && !isNaN(row.CONFIRM_FILING) && !isNaN(row.SUBMIT_COUNT)">
|
|
||||||
{{ ((row.CONFIRM_FILING / row.SUBMIT_COUNT) * 100).toFixed(2) }}%
|
|
||||||
</span>
|
</span>
|
||||||
<span v-else>0.00%</span>
|
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
</el-table>
|
</el-table>
|
||||||
@@ -78,7 +74,6 @@ layout("/layouts/platform.html"){
|
|||||||
tableColumns: [
|
tableColumns: [
|
||||||
{ label: "代表团名称", prop: "dbtName" },
|
{ label: "代表团名称", prop: "dbtName" },
|
||||||
{ label: "提案总数", prop: "TOTAL" },
|
{ label: "提案总数", prop: "TOTAL" },
|
||||||
{ label: "已提交提案数", prop: "SUBMIT_COUNT" }
|
|
||||||
],
|
],
|
||||||
delegationId: "",
|
delegationId: "",
|
||||||
dialogTitle: "",
|
dialogTitle: "",
|
||||||
@@ -124,6 +119,10 @@ layout("/layouts/platform.html"){
|
|||||||
prop: item.code
|
prop: item.code
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
this.tableColumns.push({
|
||||||
|
label: "立案率",
|
||||||
|
prop: "caseRate"
|
||||||
|
})
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
pageData() {
|
pageData() {
|
||||||
|
|||||||
+23
-4
@@ -102,6 +102,19 @@ layout("/layouts/platform.html"){
|
|||||||
</el-tag>
|
</el-tag>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div style="display: flex; align-items: center; min-height: 70px;">
|
||||||
|
<div style="width: 90px;margin-right: 10px">立案类型</div>
|
||||||
|
<div style="flex: 1;display: flex;gap: 5px;">
|
||||||
|
<el-tag
|
||||||
|
v-for="item in dict.type.PROPOSAL_CASE_FILING_TYPE"
|
||||||
|
:key="item.code"
|
||||||
|
:effect="pageForm.caseFilingTypes && pageForm.caseFilingTypes.includes(item.code) ? 'dark':'plain'"
|
||||||
|
@click="tagToggle('caseFilingTypes',item.code)"
|
||||||
|
>
|
||||||
|
{{ item.label }}
|
||||||
|
</el-tag>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</el-card>
|
</el-card>
|
||||||
<el-card shadow="never">
|
<el-card shadow="never">
|
||||||
<table-tool></table-tool>
|
<table-tool></table-tool>
|
||||||
@@ -117,10 +130,15 @@ layout("/layouts/platform.html"){
|
|||||||
<dict-tag :options="dict.type.PROPOSAL_CASE_FILING_RESULT" :value="row.caseFilingResult"></dict-tag>
|
<dict-tag :options="dict.type.PROPOSAL_CASE_FILING_RESULT" :value="row.caseFilingResult"></dict-tag>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="是否并案" prop="isConsolidation" width="100px">
|
<el-table-column label="立案类型" prop="caseFilingType">
|
||||||
<template scope="{row}">
|
<template scope="{row}">
|
||||||
<el-tag size="mini" v-if="row.isConsolidation" type="success">是</el-tag>
|
<dict-tag :options="dict.type.PROPOSAL_CASE_FILING_TYPE"
|
||||||
<el-tag size="mini" v-else type="danger">否</el-tag>
|
:value="row.caseFilingType"></dict-tag>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="是否并案" prop="merge">
|
||||||
|
<template slot-scope="{row}">
|
||||||
|
<el-tag v-if="row.merge" size="small">是</el-tag>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="主办单位" prop="masterUnitName" show-overflow-tooltip></el-table-column>
|
<el-table-column label="主办单位" prop="masterUnitName" show-overflow-tooltip></el-table-column>
|
||||||
@@ -152,7 +170,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: {
|
||||||
@@ -169,6 +187,7 @@ layout("/layouts/platform.html"){
|
|||||||
pageForm: {
|
pageForm: {
|
||||||
typeIds: [],
|
typeIds: [],
|
||||||
caseFilingResults: [],
|
caseFilingResults: [],
|
||||||
|
caseFilingTypes: [],
|
||||||
unionId: null,
|
unionId: null,
|
||||||
unitId: null
|
unitId: null
|
||||||
}
|
}
|
||||||
|
|||||||
+35
-15
@@ -43,7 +43,7 @@ layout("/layouts/platform.html"){
|
|||||||
</el-card>
|
</el-card>
|
||||||
|
|
||||||
<el-card shadow="never">
|
<el-card shadow="never">
|
||||||
<table-tool>
|
<table-tool :columns.sync="tableColumns">
|
||||||
<el-button type="primary" icon="el-icon-plus" size="small" @click="openMerge">并案审核</el-button>
|
<el-button type="primary" icon="el-icon-plus" size="small" @click="openMerge">并案审核</el-button>
|
||||||
<el-radio-group v-model="pageForm.approval" size="small" @change="doSearch">
|
<el-radio-group v-model="pageForm.approval" size="small" @change="doSearch">
|
||||||
<el-radio-button :label="true">已审核</el-radio-button>
|
<el-radio-button :label="true">已审核</el-radio-button>
|
||||||
@@ -51,16 +51,24 @@ layout("/layouts/platform.html"){
|
|||||||
</el-radio-group>
|
</el-radio-group>
|
||||||
</table-tool>
|
</table-tool>
|
||||||
<el-table :data="tableData" @sort-change="pageOrder" ref="tableRef" row-key="id" style="width: 100%">
|
<el-table :data="tableData" @sort-change="pageOrder" ref="tableRef" row-key="id" style="width: 100%">
|
||||||
<el-table-column type="selection"></el-table-column>
|
<el-table-column
|
||||||
<el-table-column label="序号" width="50" type="index" :index="indexMethod"></el-table-column>
|
:label="column.label"
|
||||||
<el-table-column label="提案编号" prop="code"></el-table-column>
|
:prop="column.prop"
|
||||||
<el-table-column label="提案名称" prop="name" show-overflow-tooltip></el-table-column>
|
:key="column.key"
|
||||||
<el-table-column label="提案类别" prop="typeName"></el-table-column>
|
:min-width="column.width"
|
||||||
<el-table-column label="届次" prop="sessionName"></el-table-column>
|
:fixed="column.fixed"
|
||||||
<el-table-column label="代表团" prop="delegationName"></el-table-column>
|
show-overflow-tooltip
|
||||||
<el-table-column prop="curTaskName" label="当前节点"></el-table-column>
|
v-for="column in tableColumns"
|
||||||
<el-table-column prop="instanceState" label="流程状态">
|
v-if="column.visible !== false"
|
||||||
<template slot-scope="{row}">
|
>
|
||||||
|
<template v-if="column.prop === 'caseFilingResult'" scope="{row}">
|
||||||
|
<dict-tag :options="dict.type.PROPOSAL_CASE_FILING_RESULT"
|
||||||
|
:value="row.caseFilingResult"></dict-tag>
|
||||||
|
</template>
|
||||||
|
<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 === '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>
|
||||||
</template>
|
</template>
|
||||||
@@ -148,7 +156,7 @@ layout("/layouts/platform.html"){
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<template #public>
|
<template #public>
|
||||||
<merge ref="mergeRef"></merge>
|
<merge ref="mergeRef" @close="$refs.guava.index()"></merge>
|
||||||
</template>
|
</template>
|
||||||
</guava>
|
</guava>
|
||||||
</div>
|
</div>
|
||||||
@@ -168,6 +176,15 @@ layout("/layouts/platform.html"){
|
|||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
|
tableColumns: [
|
||||||
|
{label: "提案编号", prop: "code"},
|
||||||
|
{label: "提案名称", prop: "name"},
|
||||||
|
{label: "提案类别", prop: "typeName"},
|
||||||
|
{label: "届次", prop: "sessionName"},
|
||||||
|
{label: "代表团", prop: "delegationName"},
|
||||||
|
{label: "当前节点", prop: "curTaskName"},
|
||||||
|
{label: "流程状态", prop: "instanceState"}
|
||||||
|
],
|
||||||
pageForm: {
|
pageForm: {
|
||||||
approval: false
|
approval: false
|
||||||
},
|
},
|
||||||
@@ -231,17 +248,20 @@ layout("/layouts/platform.html"){
|
|||||||
// 打开并案审核
|
// 打开并案审核
|
||||||
openMerge() {
|
openMerge() {
|
||||||
const selection = this.$refs.tableRef.selection
|
const selection = this.$refs.tableRef.selection
|
||||||
console.log(selection)
|
|
||||||
if (selection.length < 2) {
|
if (selection.length < 2) {
|
||||||
this.$message.warning('请先勾选需要并案审核的提案,至少需要两条提案')
|
this.$message.warning('请先勾选需要并案审核的提案,至少需要两条提案')
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
this.$refs.guava.public(() => {
|
this.$refs.guava.public(() => {
|
||||||
this.$refs.mergeRef.onOpen(selection)
|
this.$refs.mergeRef.onOpen(selection, {
|
||||||
|
processTaskIds: selection.map(v => v.taskId),
|
||||||
|
taskName: selection[0].curTaskName,
|
||||||
|
tf_masterUnitId: null,
|
||||||
|
tf_slaveUnitIds: []
|
||||||
|
})
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
||||||
onRevoke(row) {
|
onRevoke(row) {
|
||||||
this.$confirm("您确定要撤回吗?", "提示", {
|
this.$confirm("您确定要撤回吗?", "提示", {
|
||||||
confirmButtonText: "确定",
|
confirmButtonText: "确定",
|
||||||
|
|||||||
+110
-2
@@ -17,16 +17,89 @@ const merge = {
|
|||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
</el-table>
|
</el-table>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<div class="process-title">
|
||||||
|
{{formData.taskName}}
|
||||||
|
</div>
|
||||||
|
<el-form :model="formData" ref="formRef" label-width="120px" :rules="formRules" label-suffix="">
|
||||||
|
<el-form-item label="立案结果" prop="tf_caseFilingResult"
|
||||||
|
:rules="[{required:true,message:'必填',trigger:['change','blur']}]">
|
||||||
|
<el-radio-group v-model="formData.tf_caseFilingResult" size="small">
|
||||||
|
<el-radio v-for="item in dict.type.PROPOSAL_CASE_FILING_RESULT" :label="item.code"
|
||||||
|
border>{{item.label}}
|
||||||
|
</el-radio>
|
||||||
|
</el-radio-group>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item v-if="['CONFIRM_FILING'].includes(formData.tf_caseFilingResult)" label="立案类型"
|
||||||
|
prop="tf_caseFilingType"
|
||||||
|
:rules="[{required:true,message:'必填',trigger:['change','blur']}]">
|
||||||
|
<el-radio-group v-model="formData.tf_caseFilingType" size="small">
|
||||||
|
<el-radio v-for="item in dict.type.PROPOSAL_CASE_FILING_TYPE" :label="item.code" border>
|
||||||
|
{{item.label}}
|
||||||
|
</el-radio>
|
||||||
|
</el-radio-group>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item
|
||||||
|
label="主办单位"
|
||||||
|
v-if="['CONFIRM_FILING','SUGGESTION'].includes(formData.tf_caseFilingResult)"
|
||||||
|
:rules="[{required:['CONFIRM_FILING','SUGGESTION'].includes(formData.tf_caseFilingResult),message:'必填',trigger:['change','blur']}]"
|
||||||
|
prop="tf_masterUnitId"
|
||||||
|
>
|
||||||
|
<el-select v-model="formData.tf_masterUnitId" filterable clearable style="width: 100%">
|
||||||
|
<el-option
|
||||||
|
v-for="item in underTakeOptions"
|
||||||
|
:label="item.name"
|
||||||
|
:value="item.id"
|
||||||
|
:key="item.id"
|
||||||
|
:disabled="formData && formData.tf_slaveUnitIds.includes(item.id)"
|
||||||
|
></el-option>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="协办单位"
|
||||||
|
v-if="['CONFIRM_FILING','SUGGESTION'].includes(formData.tf_caseFilingResult)"
|
||||||
|
prop="tf_slaveUnitIds"
|
||||||
|
>
|
||||||
|
<el-select v-model="formData.tf_slaveUnitIds" filterable clearable multiple
|
||||||
|
style="width: 100%">
|
||||||
|
<el-option
|
||||||
|
v-for="item in underTakeOptions"
|
||||||
|
:label="item.name"
|
||||||
|
:value="item.id"
|
||||||
|
:key="item.id"
|
||||||
|
:disabled="item.id===formData.tf_masterUnitId"
|
||||||
|
></el-option>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="审核意见" prop="approvalOpinion"
|
||||||
|
:rules="[{required:true,message:'必填',trigger:['change','blur']}]">
|
||||||
|
<user-opinion-textarea v-model="formData.approvalOpinion"></user-opinion-textarea>
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
<el-row type="flex" justify="end">
|
||||||
|
<el-button @click="$emit('close')" size="small">取消</el-button>
|
||||||
|
<el-button @click="handleTaskAction(6)" size="small" type="info">退回到提案人</el-button>
|
||||||
|
<el-button @click="handleTaskAction(1)" size="small" type="primary">提交</el-button>
|
||||||
|
</el-row>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
`,
|
`,
|
||||||
|
dicts: ["PROPOSAL_CASE_FILING_RESULT", "PROPOSAL_CASE_FILING_TYPE"],
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
selection: []
|
selection: [],
|
||||||
|
formData: {
|
||||||
|
tf_masterUnitId: null,
|
||||||
|
tf_slaveUnitIds: []
|
||||||
|
},
|
||||||
|
underTakeOptions: []
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
onOpen(selection) {
|
onOpen(selection, formData) {
|
||||||
this.selection = selection
|
this.selection = selection
|
||||||
|
this.formData = formData
|
||||||
|
this.listUnderTake()
|
||||||
},
|
},
|
||||||
// 移除
|
// 移除
|
||||||
onRemove(index) {
|
onRemove(index) {
|
||||||
@@ -35,6 +108,41 @@ const merge = {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
this.selection.splice(index, 1)
|
this.selection.splice(index, 1)
|
||||||
|
},
|
||||||
|
// 查询承办单位
|
||||||
|
listUnderTake() {
|
||||||
|
this.$axios.post("/platform/proposal/common/listUnderTake").then((res) => {
|
||||||
|
if (res.code === 0) {
|
||||||
|
this.underTakeOptions = res.data
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
handleTaskAction(val) {
|
||||||
|
this.$confirm("您确定要提交吗?", "提示", {
|
||||||
|
confirmButtonText: "确定",
|
||||||
|
cancelButtonText: "取消",
|
||||||
|
type: "warning"
|
||||||
|
}).then(() => {
|
||||||
|
const loading = createLoading('提交中')
|
||||||
|
this.$axios.post("/platform/proposal/committeeFiling/merge", {
|
||||||
|
data: JSON.stringify({
|
||||||
|
...this.formData,
|
||||||
|
proposalIds: this.selection.map(v => v.id),
|
||||||
|
submitType: val,
|
||||||
|
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_slaveUnitNameStr: this.formData.tf_slaveUnitIds.map(v => this.underTakeOptions.find(v2 => v2.id === v)?.name).join(','),
|
||||||
|
})
|
||||||
|
}).then((res) => {
|
||||||
|
if (res.code === 0) {
|
||||||
|
this.$emit('close')
|
||||||
|
this.$message.success(res.msg)
|
||||||
|
this.doSearch()
|
||||||
|
}
|
||||||
|
}).finally(() => {
|
||||||
|
loading.close()
|
||||||
|
})
|
||||||
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+28
-10
@@ -21,22 +21,31 @@ layout("/layouts/platform.html"){
|
|||||||
</el-card>
|
</el-card>
|
||||||
|
|
||||||
<el-card shadow="never">
|
<el-card shadow="never">
|
||||||
<table-tool>
|
<table-tool :columns.sync="tableColumns">
|
||||||
<el-radio-group v-model="pageForm.approval" size="small" @change="doSearch">
|
<el-radio-group v-model="pageForm.approval" size="small" @change="doSearch">
|
||||||
<el-radio-button :label="true">已审核</el-radio-button>
|
<el-radio-button :label="true">已审核</el-radio-button>
|
||||||
<el-radio-button :label="false">未审核</el-radio-button>
|
<el-radio-button :label="false">未审核</el-radio-button>
|
||||||
</el-radio-group>
|
</el-radio-group>
|
||||||
</table-tool>
|
</table-tool>
|
||||||
<el-table :data="tableData" @sort-change="pageOrder" style="width: 100%">
|
<el-table :data="tableData" @sort-change="pageOrder" style="width: 100%">
|
||||||
<el-table-column label="序号" width="50" type="index" :index="indexMethod"></el-table-column>
|
<el-table-column
|
||||||
<el-table-column label="提案编号" prop="code"></el-table-column>
|
:label="column.label"
|
||||||
<el-table-column label="提案名称" prop="name" show-overflow-tooltip></el-table-column>
|
:prop="column.prop"
|
||||||
<el-table-column label="提案类别" prop="typeName"></el-table-column>
|
:key="column.key"
|
||||||
<el-table-column label="届次" prop="sessionName"></el-table-column>
|
:min-width="column.width"
|
||||||
<el-table-column label="代表团" prop="delegationName"></el-table-column>
|
:fixed="column.fixed"
|
||||||
<el-table-column prop="curTaskName" label="当前节点"></el-table-column>
|
show-overflow-tooltip
|
||||||
<el-table-column prop="instanceState" label="流程状态">
|
v-for="column in tableColumns"
|
||||||
<template slot-scope="{row}">
|
v-if="column.visible !== false"
|
||||||
|
>
|
||||||
|
<template v-if="column.prop === 'caseFilingResult'" scope="{row}">
|
||||||
|
<dict-tag :options="dict.type.PROPOSAL_CASE_FILING_RESULT"
|
||||||
|
:value="row.caseFilingResult"></dict-tag>
|
||||||
|
</template>
|
||||||
|
<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 === '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>
|
||||||
</template>
|
</template>
|
||||||
@@ -91,6 +100,15 @@ layout("/layouts/platform.html"){
|
|||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
|
tableColumns: [
|
||||||
|
{label: "提案编号", prop: "code"},
|
||||||
|
{label: "提案名称", prop: "name"},
|
||||||
|
{label: "提案类别", prop: "typeName"},
|
||||||
|
{label: "届次", prop: "sessionName"},
|
||||||
|
{label: "代表团", prop: "delegationName"},
|
||||||
|
{label: "当前节点", prop: "curTaskName"},
|
||||||
|
{label: "流程状态", prop: "instanceState"}
|
||||||
|
],
|
||||||
pageForm: {
|
pageForm: {
|
||||||
approval: false
|
approval: false
|
||||||
},
|
},
|
||||||
|
|||||||
+8
-3
@@ -56,6 +56,11 @@ layout("/layouts/platform.html"){
|
|||||||
<el-table-column label="提案类别" prop="typeName"></el-table-column>
|
<el-table-column label="提案类别" prop="typeName"></el-table-column>
|
||||||
<el-table-column label="届次" prop="sessionName"></el-table-column>
|
<el-table-column label="届次" prop="sessionName"></el-table-column>
|
||||||
<el-table-column label="代表团" prop="delegationName"></el-table-column>
|
<el-table-column label="代表团" prop="delegationName"></el-table-column>
|
||||||
|
<el-table-column label="是否并案" prop="merge">
|
||||||
|
<template slot-scope="{row}">
|
||||||
|
<el-tag v-if="row.merge" size="small">是</el-tag>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
<el-table-column prop="curTaskName" label="当前节点"></el-table-column>
|
<el-table-column prop="curTaskName" label="当前节点"></el-table-column>
|
||||||
<el-table-column prop="instanceState" label="流程状态">
|
<el-table-column prop="instanceState" label="流程状态">
|
||||||
<template slot-scope="{row}">
|
<template slot-scope="{row}">
|
||||||
@@ -96,13 +101,13 @@ layout("/layouts/platform.html"){
|
|||||||
<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)">
|
<template v-if="['SATISFIED','FAIRLY_SATISFIED'].includes(formData.tf_feedback)">
|
||||||
<el-form-item label="通讯地址" prop="tf_address">
|
<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-input v-model="formData.tf_address" placeholder="请输入通讯地址" clearable></el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="联系电话" prop="tf_phone">
|
<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-input v-model="formData.tf_phone" placeholder="请输入联系电话" clearable></el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="邮政编码" prop="tf_postcode">
|
<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-input v-model="formData.tf_postcode" placeholder="请输入邮政编码" clearable></el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</template>
|
</template>
|
||||||
+31
-12
@@ -22,18 +22,27 @@ layout("/layouts/platform.html"){
|
|||||||
</search>
|
</search>
|
||||||
</el-card>
|
</el-card>
|
||||||
<el-card shadow="never">
|
<el-card shadow="never">
|
||||||
<table-tool></table-tool>
|
<table-tool :columns.sync="tableColumns"></table-tool>
|
||||||
<el-table :data="tableData" @sort-change="pageOrder" header-align="center" style="width: 100%" row-key="id">
|
<el-table :data="tableData" @sort-change="pageOrder" header-align="center" style="width: 100%" row-key="id">
|
||||||
<el-table-column label="序号" width="50" type="index" :index="indexMethod"></el-table-column>
|
<el-table-column label="序号" width="50" type="index" :index="indexMethod" fixed="left"></el-table-column>
|
||||||
<el-table-column label="提案编号" prop="code"></el-table-column>
|
<el-table-column
|
||||||
<el-table-column label="提案名称" prop="name" show-overflow-tooltip></el-table-column>
|
:label="column.label"
|
||||||
<el-table-column label="提案人" prop="createUserName"></el-table-column>
|
:prop="column.prop"
|
||||||
<el-table-column label="提案类别" prop="typeName"></el-table-column>
|
:key="column.key"
|
||||||
<el-table-column label="届次" prop="sessionName"></el-table-column>
|
:min-width="column.width"
|
||||||
<el-table-column label="代表团" prop="delegationName"></el-table-column>
|
:fixed="column.fixed"
|
||||||
<el-table-column prop="taskName" label="当前节点"></el-table-column>
|
show-overflow-tooltip
|
||||||
<el-table-column prop="instanceState" label="流程状态">
|
v-for="column in tableColumns"
|
||||||
<template slot-scope="{row}">
|
v-if="column.visible !== false"
|
||||||
|
>
|
||||||
|
<template v-if="column.prop === 'caseFilingResult'" scope="{row}">
|
||||||
|
<dict-tag :options="dict.type.PROPOSAL_CASE_FILING_RESULT"
|
||||||
|
:value="row.caseFilingResult"></dict-tag>
|
||||||
|
</template>
|
||||||
|
<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 === '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>
|
||||||
</template>
|
</template>
|
||||||
@@ -89,7 +98,17 @@ layout("/layouts/platform.html"){
|
|||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
sessionOptions: [],
|
sessionOptions: [],
|
||||||
businessNo: null
|
businessNo: null,
|
||||||
|
tableColumns: [
|
||||||
|
{label: "提案编号", prop: "code"},
|
||||||
|
{label: "提案名称", prop: "name"},
|
||||||
|
{label: "提案人", prop: "createUserName"},
|
||||||
|
{label: "提案类别", prop: "typeName"},
|
||||||
|
{label: "届次", prop: "sessionName"},
|
||||||
|
{label: "代表团", prop: "delegationName"},
|
||||||
|
{label: "当前节点", prop: "curTaskName"},
|
||||||
|
{label: "流程状态", prop: "instanceState"}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
|||||||
+28
-19
@@ -56,6 +56,11 @@ layout("/layouts/platform.html"){
|
|||||||
<el-table-column label="提案类别" prop="typeName"></el-table-column>
|
<el-table-column label="提案类别" prop="typeName"></el-table-column>
|
||||||
<el-table-column label="届次" prop="sessionName"></el-table-column>
|
<el-table-column label="届次" prop="sessionName"></el-table-column>
|
||||||
<el-table-column label="代表团" prop="delegationName"></el-table-column>
|
<el-table-column label="代表团" prop="delegationName"></el-table-column>
|
||||||
|
<el-table-column label="是否并案" prop="merge">
|
||||||
|
<template slot-scope="{row}">
|
||||||
|
<el-tag v-if="row.merge" size="small">是</el-tag>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
<el-table-column prop="curTaskName" label="当前节点"></el-table-column>
|
<el-table-column prop="curTaskName" label="当前节点"></el-table-column>
|
||||||
<el-table-column prop="instanceState" label="流程状态">
|
<el-table-column prop="instanceState" label="流程状态">
|
||||||
<template slot-scope="{row}">
|
<template slot-scope="{row}">
|
||||||
@@ -136,32 +141,37 @@ layout("/layouts/platform.html"){
|
|||||||
processTaskId: row.taskId,
|
processTaskId: row.taskId,
|
||||||
taskKey: row.taskKey,
|
taskKey: row.taskKey,
|
||||||
taskName: row.taskName,
|
taskName: row.taskName,
|
||||||
|
proposalId: row.id
|
||||||
}
|
}
|
||||||
this.$refs.proposalInfoRef.onOpen(row)
|
this.$refs.proposalInfoRef.onOpen(row)
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
|
|
||||||
handleTaskAction(val) {
|
handleTaskAction(val) {
|
||||||
this.$confirm("您确定要提交吗?", "提示", {
|
this.$refs.formRef.validate(valid => {
|
||||||
confirmButtonText: "确定",
|
if (!valid) return
|
||||||
cancelButtonText: "取消",
|
|
||||||
type: "warning"
|
|
||||||
}).then(() => {
|
|
||||||
const formData = {
|
|
||||||
...this.formData,
|
|
||||||
tf_approval: val
|
|
||||||
}
|
|
||||||
delete formData.taskKey
|
|
||||||
delete formData.taskName
|
|
||||||
|
|
||||||
this.$axios.post("/flow/common/executeTask", {
|
this.$confirm("您确定要提交吗?", "提示", {
|
||||||
data: JSON.stringify(formData)
|
confirmButtonText: "确定",
|
||||||
}).then((res) => {
|
cancelButtonText: "取消",
|
||||||
if (res.code === 0) {
|
type: "warning"
|
||||||
this.$refs.guava.index()
|
}).then(() => {
|
||||||
this.$message.success(res.msg)
|
const formData = {
|
||||||
this.doSearch()
|
...this.formData,
|
||||||
|
tf_approval: val
|
||||||
}
|
}
|
||||||
|
delete formData.taskKey
|
||||||
|
delete formData.taskName
|
||||||
|
|
||||||
|
this.$axios.post("/platform/proposal/schoolLeaderApproval/executeTask", {
|
||||||
|
data: JSON.stringify(formData)
|
||||||
|
}).then((res) => {
|
||||||
|
if (res.code === 0) {
|
||||||
|
this.$refs.guava.index()
|
||||||
|
this.$message.success(res.msg)
|
||||||
|
this.doSearch()
|
||||||
|
}
|
||||||
|
})
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
@@ -195,7 +205,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()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|||||||
+30
-11
@@ -21,23 +21,32 @@ layout("/layouts/platform.html"){
|
|||||||
</el-card>
|
</el-card>
|
||||||
|
|
||||||
<el-card shadow="never">
|
<el-card shadow="never">
|
||||||
<table-tool>
|
<table-tool :columns.sync="tableColumns">
|
||||||
<el-radio-group v-model="pageForm.approval" size="small" @change="doSearch">
|
<el-radio-group v-model="pageForm.approval" size="small" @change="doSearch">
|
||||||
<el-radio-button :label="true">已审核</el-radio-button>
|
<el-radio-button :label="true">已审核</el-radio-button>
|
||||||
<el-radio-button :label="false">未审核</el-radio-button>
|
<el-radio-button :label="false">未审核</el-radio-button>
|
||||||
</el-radio-group>
|
</el-radio-group>
|
||||||
</table-tool>
|
</table-tool>
|
||||||
<el-table :data="tableData" @sort-change="pageOrder" style="width: 100%">
|
<el-table :data="tableData" @sort-change="pageOrder" style="width: 100%">
|
||||||
<el-table-column label="序号" width="50" type="index" :index="indexMethod"></el-table-column>
|
<el-table-column label="序号" width="50" type="index" :index="indexMethod" fixed="left"></el-table-column>
|
||||||
<el-table-column label="提案编号" prop="code"></el-table-column>
|
<el-table-column
|
||||||
<el-table-column label="提案名称" prop="name" show-overflow-tooltip></el-table-column>
|
:label="column.label"
|
||||||
<el-table-column label="提案类别" prop="typeName"></el-table-column>
|
:prop="column.prop"
|
||||||
<el-table-column label="提案人" prop="createUserName"></el-table-column>
|
:key="column.key"
|
||||||
<el-table-column label="代表团" prop="delegationName"></el-table-column>
|
:min-width="column.width"
|
||||||
<el-table-column label="附议人" prop="taskActorName"></el-table-column>
|
:fixed="column.fixed"
|
||||||
<el-table-column prop="curTaskName" label="当前节点"></el-table-column>
|
show-overflow-tooltip
|
||||||
<el-table-column prop="instanceState" label="流程状态">
|
v-for="column in tableColumns"
|
||||||
<template slot-scope="{row}">
|
v-if="column.visible !== false"
|
||||||
|
>
|
||||||
|
<template v-if="column.prop === 'caseFilingResult'" scope="{row}">
|
||||||
|
<dict-tag :options="dict.type.PROPOSAL_CASE_FILING_RESULT"
|
||||||
|
:value="row.caseFilingResult"></dict-tag>
|
||||||
|
</template>
|
||||||
|
<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 === '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>
|
||||||
</template>
|
</template>
|
||||||
@@ -91,6 +100,16 @@ layout("/layouts/platform.html"){
|
|||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
|
tableColumns: [
|
||||||
|
{label: "提案编号", prop: "code"},
|
||||||
|
{label: "提案名称", prop: "name"},
|
||||||
|
{label: "提案人", prop: "createUserName"},
|
||||||
|
{label: "提案类别", prop: "typeName"},
|
||||||
|
{label: "代表团", prop: "delegationName"},
|
||||||
|
{label: "附议人", prop: "taskActorName"},
|
||||||
|
{label: "当前节点", prop: "curTaskName"},
|
||||||
|
{label: "流程状态", prop: "instanceState"}
|
||||||
|
],
|
||||||
pageForm: {
|
pageForm: {
|
||||||
approval: false
|
approval: false
|
||||||
},
|
},
|
||||||
|
|||||||
+53
-38
@@ -93,46 +93,45 @@ layout("/layouts/platform.html"){
|
|||||||
</el-card>
|
</el-card>
|
||||||
|
|
||||||
<el-card shadow="never">
|
<el-card shadow="never">
|
||||||
<table-tool>
|
<table-tool :columns.sync="tableColumns">
|
||||||
<el-radio-group v-model="pageForm.approval" size="small" @change="doSearch">
|
<el-radio-group v-model="pageForm.approval" size="small" @change="doSearch">
|
||||||
<el-radio-button :label="true">已审核</el-radio-button>
|
<el-radio-button :label="true">已审核</el-radio-button>
|
||||||
<el-radio-button :label="false">未审核</el-radio-button>
|
<el-radio-button :label="false">未审核</el-radio-button>
|
||||||
</el-radio-group>
|
</el-radio-group>
|
||||||
</table-tool>
|
</table-tool>
|
||||||
<el-table :data="tableData" @sort-change="pageOrder" style="width: 100%">
|
<el-table :data="tableData" @sort-change="pageOrder" style="width: 100%">
|
||||||
<el-table-column label="序号" width="50" type="index" :index="indexMethod"></el-table-column>
|
<el-table-column
|
||||||
<el-table-column label="提案编号" prop="code"></el-table-column>
|
:label="column.label"
|
||||||
<el-table-column label="提案名称" prop="name" show-overflow-tooltip></el-table-column>
|
:prop="column.prop"
|
||||||
<el-table-column label="提案类别" prop="typeName"></el-table-column>
|
:key="column.key"
|
||||||
<el-table-column label="代表团" prop="delegationName"></el-table-column>
|
:min-width="column.width"
|
||||||
<el-table-column label="立案结果" prop="caseFilingResult">
|
:fixed="column.fixed"
|
||||||
<template scope="{row}">
|
show-overflow-tooltip
|
||||||
|
v-for="column in tableColumns"
|
||||||
|
v-if="column.visible !== false"
|
||||||
|
>
|
||||||
|
<template v-if="column.prop === 'caseFilingResult'" scope="{row}">
|
||||||
<dict-tag :options="dict.type.PROPOSAL_CASE_FILING_RESULT"
|
<dict-tag :options="dict.type.PROPOSAL_CASE_FILING_RESULT"
|
||||||
:value="row.caseFilingResult"></dict-tag>
|
:value="row.caseFilingResult"></dict-tag>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
<template v-else-if="column.prop === 'merge'" scope="{row}">
|
||||||
<el-table-column label="当前节点" prop="curTaskName"></el-table-column>
|
<el-tag v-if="row.merge" size="small">是</el-tag>
|
||||||
<el-table-column label="承办单位" prop="underTakeName"></el-table-column>
|
</template>
|
||||||
<el-table-column label="承办类型" prop="underTakeIsMaster">
|
<template v-else-if="column.prop === 'underTakeIsMaster'" scope="{row}">
|
||||||
<template scope="{row}">
|
|
||||||
<el-tag v-if="row.underTakeIsMaster" size="small">主办</el-tag>
|
<el-tag v-if="row.underTakeIsMaster" size="small">主办</el-tag>
|
||||||
<el-tag v-else type="warning" size="small">协办</el-tag>
|
<el-tag v-else type="warning" size="small">协办</el-tag>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
<template v-else-if="column.prop === 'instanceState'" scope="{row}">
|
||||||
<el-table-column label="流程状态" prop="instanceState">
|
|
||||||
<template slot-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>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
|
|
||||||
<el-table-column label="转交" prop="transfer"
|
<el-table-column label="转交" prop="transfer"
|
||||||
v-if="pageForm.approval && $auth.hasRoleOr('SYSADMIN,PROPOSAL_UNIT_LEADER')">
|
v-if="pageForm.approval && $auth.hasRoleOr('SYSADMIN,PROPOSAL_UNIT_LEADER')">
|
||||||
<template slot-scope="{row}">
|
<template slot-scope="{row}">
|
||||||
{{row.transferUserName}}
|
{{row.transferUserName}}
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
|
|
||||||
<el-table-column label="操作" fixed="right" min-width="250px">
|
<el-table-column label="操作" fixed="right" min-width="250px">
|
||||||
<template slot-scope="{row}">
|
<template slot-scope="{row}">
|
||||||
<el-button @click="openView(row)" size="mini" type="primary">查看</el-button>
|
<el-button @click="openView(row)" size="mini" type="primary">查看</el-button>
|
||||||
@@ -247,6 +246,18 @@ layout("/layouts/platform.html"){
|
|||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
|
tableColumns: [
|
||||||
|
{label: "提案编号", prop: "code"},
|
||||||
|
{label: "提案名称", prop: "name"},
|
||||||
|
{label: "提案类别", prop: "typeName"},
|
||||||
|
{label: "代表团", prop: "delegationName"},
|
||||||
|
{label: "立案结果", prop: "caseFilingResult"},
|
||||||
|
{label: "是否并案", prop: "merge"},
|
||||||
|
{label: "承办单位", prop: "underTakeName"},
|
||||||
|
{label: "承办类型", prop: "underTakeIsMaster"},
|
||||||
|
{label: "当前节点", prop: "curTaskName"},
|
||||||
|
{label: "流程状态", prop: "instanceState"}
|
||||||
|
],
|
||||||
pageForm: {
|
pageForm: {
|
||||||
approval: false
|
approval: false
|
||||||
},
|
},
|
||||||
@@ -279,6 +290,7 @@ layout("/layouts/platform.html"){
|
|||||||
processTaskId: row.taskId,
|
processTaskId: row.taskId,
|
||||||
taskKey: row.taskKey,
|
taskKey: row.taskKey,
|
||||||
taskName: row.taskName,
|
taskName: row.taskName,
|
||||||
|
proposalId: row.id,
|
||||||
underTakeName: row.underTakeName,
|
underTakeName: row.underTakeName,
|
||||||
underTakeIsMaster: row.underTakeIsMaster
|
underTakeIsMaster: row.underTakeIsMaster
|
||||||
}
|
}
|
||||||
@@ -287,29 +299,32 @@ layout("/layouts/platform.html"){
|
|||||||
},
|
},
|
||||||
|
|
||||||
handleTaskAction(val) {
|
handleTaskAction(val) {
|
||||||
this.$confirm("您确定要提交吗?", "提示", {
|
this.$refs.formRef.validate(valid => {
|
||||||
confirmButtonText: "确定",
|
if (!valid) return
|
||||||
cancelButtonText: "取消",
|
this.$confirm("您确定要提交吗?", "提示", {
|
||||||
type: "warning"
|
confirmButtonText: "确定",
|
||||||
}).then(() => {
|
cancelButtonText: "取消",
|
||||||
const loading = createLoading('提交中')
|
type: "warning"
|
||||||
|
}).then(() => {
|
||||||
|
const loading = createLoading('提交中')
|
||||||
|
|
||||||
delete this.formData.underTakeIsMaster
|
delete this.formData.underTakeIsMaster
|
||||||
delete this.formData.underTakeName
|
delete this.formData.underTakeName
|
||||||
|
|
||||||
this.$axios.post("/flow/common/executeTask", {
|
this.$axios.post("/platform/proposal/unitReply/executeTask", {
|
||||||
data: JSON.stringify({
|
data: JSON.stringify({
|
||||||
...this.formData,
|
...this.formData,
|
||||||
submitType: val
|
submitType: val
|
||||||
|
})
|
||||||
|
}).then((res) => {
|
||||||
|
if (res.code === 0) {
|
||||||
|
this.$refs.guava.index()
|
||||||
|
this.$message.success(res.msg)
|
||||||
|
this.doSearch()
|
||||||
|
}
|
||||||
|
}).finally(() => {
|
||||||
|
loading.close()
|
||||||
})
|
})
|
||||||
}).then((res) => {
|
|
||||||
if (res.code === 0) {
|
|
||||||
this.$refs.guava.index()
|
|
||||||
this.$message.success(res.msg)
|
|
||||||
this.doSearch()
|
|
||||||
}
|
|
||||||
}).finally(() => {
|
|
||||||
loading.close()
|
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
|
|||||||
+32
-14
@@ -21,22 +21,31 @@ layout("/layouts/platform.html"){
|
|||||||
</el-card>
|
</el-card>
|
||||||
|
|
||||||
<el-card shadow="never">
|
<el-card shadow="never">
|
||||||
<table-tool>
|
<table-tool :columns.sync="tableColumns">
|
||||||
<!-- <el-radio-group v-model="pageForm.approval" size="small" @change="doSearch">-->
|
<!-- <el-radio-group v-model="pageForm.approval" size="small" @change="doSearch">-->
|
||||||
<!-- <el-radio-button :label="true">已审核</el-radio-button>-->
|
<!-- <el-radio-button :label="true">已审核</el-radio-button>-->
|
||||||
<!-- <el-radio-button :label="false">未审核</el-radio-button>-->
|
<!-- <el-radio-button :label="false">未审核</el-radio-button>-->
|
||||||
<!-- </el-radio-group>-->
|
<!-- </el-radio-group>-->
|
||||||
</table-tool>
|
</table-tool>
|
||||||
<el-table :data="tableData" @sort-change="pageOrder" style="width: 100%">
|
<el-table :data="tableData" @sort-change="pageOrder" style="width: 100%">
|
||||||
<el-table-column label="序号" width="50" type="index" :index="indexMethod"></el-table-column>
|
<el-table-column
|
||||||
<el-table-column label="提案编号" prop="code"></el-table-column>
|
:label="column.label"
|
||||||
<el-table-column label="提案名称" prop="name" show-overflow-tooltip></el-table-column>
|
:prop="column.prop"
|
||||||
<el-table-column label="提案类别" prop="typeName"></el-table-column>
|
:key="column.key"
|
||||||
<el-table-column label="届次" prop="sessionName"></el-table-column>
|
:min-width="column.width"
|
||||||
<el-table-column label="代表团" prop="delegationName"></el-table-column>
|
:fixed="column.fixed"
|
||||||
<el-table-column prop="taskName" label="当前节点"></el-table-column>
|
show-overflow-tooltip
|
||||||
<el-table-column prop="instanceState" label="流程状态">
|
v-for="column in tableColumns"
|
||||||
<template slot-scope="{row}">
|
v-if="column.visible !== false"
|
||||||
|
>
|
||||||
|
<template v-if="column.prop === 'caseFilingResult'" scope="{row}">
|
||||||
|
<dict-tag :options="dict.type.PROPOSAL_CASE_FILING_RESULT"
|
||||||
|
:value="row.caseFilingResult"></dict-tag>
|
||||||
|
</template>
|
||||||
|
<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 === '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>
|
||||||
</template>
|
</template>
|
||||||
@@ -68,6 +77,15 @@ layout("/layouts/platform.html"){
|
|||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
|
tableColumns: [
|
||||||
|
{label: "提案编号", prop: "code"},
|
||||||
|
{label: "提案名称", prop: "name"},
|
||||||
|
{label: "提案类别", prop: "typeName"},
|
||||||
|
{label: "届次", prop: "sessionName"},
|
||||||
|
{label: "代表团", prop: "delegationName"},
|
||||||
|
{label: "当前节点", prop: "curTaskName"},
|
||||||
|
{label: "流程状态", prop: "instanceState"}
|
||||||
|
],
|
||||||
pageForm: {
|
pageForm: {
|
||||||
approval: false
|
approval: false
|
||||||
},
|
},
|
||||||
|
|||||||
Reference in New Issue
Block a user