This commit is contained in:
=
2026-05-25 20:18:45 +08:00
parent a0e5993dc0
commit 304b1004ec
8 changed files with 640 additions and 41 deletions
@@ -1,6 +1,7 @@
package com.budwk.app.zhgh.democratic.proposal.controller.common;
import cn.dev33.satoken.annotation.SaCheckLogin;
import cn.dev33.satoken.annotation.SaMode;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.hutool.core.util.StrUtil;
import com.budwk.app.base.result.Result;
@@ -33,7 +34,7 @@ public class ProposalCommonController {
private ProposalCommonService proposalCommonService;
@At
@SaCheckPermission("proposal")
@SaCheckPermission(value = {"proposal", "h5.proposal"}, mode = SaMode.OR)
@ApiOperation("提案详情")
public Result proposalInfo(@Valid String id) {
return Result.success(proposalCommonService.info(id));
@@ -2,6 +2,7 @@ package com.budwk.app.zhgh.democratic.proposal.controller.transact;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.dev33.satoken.annotation.SaMode;
import cn.hutool.core.lang.Dict;
import com.budwk.app.base.annotation.SLog;
import com.budwk.app.base.constant.RoleConstant;
@@ -57,13 +58,13 @@ public class ProposalCommissionerController {
@At("/h5")
@Ok("beetl:/platform/zhghh5/democratic/proposal/transact/commissioner/index.html")
@SaCheckPermission("proposal.commissioner")
@SaCheckPermission("h5.proposal.commissioner")
public void h5Index() {
}
@At
@SaCheckPermission("proposal.commissioner")
@SaCheckPermission(value = {"proposal.commissioner", "h5.proposal.commissioner"}, mode = SaMode.OR)
public Result pageData(@Valid ProposalSearchParam pageForm, boolean approval) {
Sql sql = Sqls.create("""
SELECT
@@ -124,7 +125,7 @@ public class ProposalCommissionerController {
}
@At
@SaCheckPermission("proposal.commissioner")
@SaCheckPermission(value = {"proposal.commissioner", "h5.proposal.commissioner"}, mode = SaMode.OR)
@SLog(tag = "提案委员会委员意见", msg = "")
@Aop(TransAop.READ_COMMITTED)
public Result doApproval(Long processTaskId, String proposalId, String opinion, String caseFilingResult, String caseFilingType) {
@@ -1,6 +1,7 @@
package com.budwk.app.zhgh.democratic.proposal.controller.transact;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.dev33.satoken.annotation.SaMode;
import cn.hutool.core.lang.Dict;
import com.budwk.app.base.constant.RoleConstant;
import com.budwk.app.base.page.Pagination;
@@ -56,8 +57,14 @@ public class ProposalCommitteeFilingController {
public void index() {
}
@At("/h5")
@Ok("beetl:/platform/zhghh5/democratic/proposal/transact/committeeFiling/index.html")
@SaCheckPermission("h5.proposal.committeeFiling")
public void h5Index() {
}
@At
@SaCheckPermission("proposal.committeeFiling")
@SaCheckPermission(value = {"proposal.committeeFiling", "h5.proposal.committeeFiling"}, mode = SaMode.OR)
@ApiOperation("分页列表")
public Result pageData(@Valid ProposalSearchParam pageForm, boolean approval) {
Sql sql = Sqls.create("""
@@ -122,14 +129,14 @@ public class ProposalCommitteeFilingController {
}
@At
@SaCheckPermission("proposal.committeeFiling")
@SaCheckPermission(value = {"proposal.committeeFiling", "h5.proposal.committeeFiling"}, mode = SaMode.OR)
@ApiOperation("查询提案分管校领导")
public Result listBranchSchoolLeader(String keyword) {
return Result.success(proposalCommitteeFilingService.listBranchSchoolLeader(keyword));
}
@At
@SaCheckPermission("proposal.committeeFiling")
@SaCheckPermission(value = {"proposal.committeeFiling", "h5.proposal.committeeFiling"}, mode = SaMode.OR)
@ApiOperation("并案审核")
@Aop(TransAop.READ_COMMITTED)
public Result merge(@Param("data") String data) {
@@ -191,7 +191,7 @@ public class ProposalPositiveSecondedController {
}
@At
@SaCheckPermission(value = {"proposal.seconded", "h5.proposal.seconded", "proposal.schoolLeaderApproval", "h5.proposal.schoolLeaderApproval"}, mode = SaMode.OR)
@SaCheckPermission(value = {"proposal.seconded", "h5.proposal.seconded", "proposal.commissioner", "h5.proposal.commissioner", "proposal.committeeFiling", "h5.proposal.committeeFiling", "proposal.schoolLeaderApproval", "h5.proposal.schoolLeaderApproval"}, mode = SaMode.OR)
public Result listPositiveSeconded(String bizId) {
List<ProposalSecond> list = dao.query(ProposalSecond.class, Cnd.where(ProposalSecond::getProposalId, "=", bizId).and(ProposalSecond::getMode, "=", false));
return Result.success(list);
@@ -1,6 +1,7 @@
package com.budwk.app.zhgh.democratic.proposal.controller.transact;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.dev33.satoken.annotation.SaMode;
import cn.hutool.core.lang.Dict;
import com.budwk.app.base.constant.RoleConstant;
import com.budwk.app.base.page.Pagination;
@@ -53,13 +54,13 @@ public class ProposalSchoolLeaderApprovalController {
@At("/h5")
@Ok("beetl:/platform/zhghh5/democratic/proposal/transact/schoolLeaderApproval/index.html")
@SaCheckPermission("proposal.schoolLeaderApproval")
@SaCheckPermission("h5.proposal.schoolLeaderApproval")
public void h5Index() {
}
@At
@SaCheckPermission("proposal.schoolLeaderApproval")
@SaCheckPermission(value = {"proposal.schoolLeaderApproval", "h5.proposal.schoolLeaderApproval"}, mode = SaMode.OR)
@ApiOperation("分页列表")
public Result pageData(@Valid ProposalSearchParam pageForm, boolean approval) {
// List<LabelValueVO> vos = processTaskService.jumpAbleTaskNameList(280L);
@@ -127,7 +128,7 @@ public class ProposalSchoolLeaderApprovalController {
}
@At
@SaCheckPermission("proposal.schoolLeaderApproval")
@SaCheckPermission(value = {"proposal.schoolLeaderApproval", "h5.proposal.schoolLeaderApproval"}, mode = SaMode.OR)
@ApiOperation("获取主办单位")
public Result getHostUnitId(){
@@ -137,7 +138,7 @@ public class ProposalSchoolLeaderApprovalController {
@At
@SaCheckPermission("proposal.schoolLeaderApproval")
@SaCheckPermission(value = {"proposal.schoolLeaderApproval", "h5.proposal.schoolLeaderApproval"}, mode = SaMode.OR)
@ApiOperation("执行任务")
public Result executeTask(@Param("data") String data) {
Dict args = Json.fromJson(Dict.class, data);
+89 -9
View File
@@ -1,17 +1,85 @@
<?xml version="1.0" encoding="UTF-8" ?>
<configuration scan="false" scanPeriod="60000" debug="false">
<!-- 定义日志文件的存储路径 -->
<!-- 日志存储路径 -->
<property name="LOG_HOME" value="./logs"/>
<!-- 控制台输出配置 -->
<!-- 控制台输出 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<!-- INFO级别日志文件配置 -->
<!--
#################################################################################
# #
# 全文输出日志(一个文件存储)start #
# #
#################################################################################
-->
<!-- 所有级别日志写入同一个文件 -->
<appender name="ALL_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_HOME}/app.log</file>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_HOME}/app-%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>300</maxHistory>
</rollingPolicy>
</appender>
<!-- 框架日志级别(按需调整) -->
<logger name="org.eclipse.jetty" level="INFO"/>
<logger name="org.quartz" level="INFO"/>
<logger name="org.nutz" level="DEBUG"/>
<!-- root loggerDEBUG 级别,输出到控制台和全量文件 -->
<root level="DEBUG">
<appender-ref ref="STDOUT"/>
<appender-ref ref="ALL_FILE"/>
</root>
<!--
#################################################################################
# #
# 全文输出日志(一个文件存储)end #
# #
#################################################################################
-->
<!--
#################################################################################
# #
# debug、info、error分文件输出 start #
# #
#################################################################################
-->
<!-- DEBUG级别日志文件配置 -->
<!--<appender name="DEBUG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_HOME}/debug.log</file>
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>DEBUG</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_HOME}/debug-%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>300</maxHistory>
</rollingPolicy>
</appender>
&lt;!&ndash; INFO级别日志文件配置 &ndash;&gt;
<appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_HOME}/info.log</file>
<encoder>
@@ -24,11 +92,11 @@
</filter>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_HOME}/info-%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>30</maxHistory>
<maxHistory>300</maxHistory>
</rollingPolicy>
</appender>
<!-- ERROR级别日志文件配置 -->
&lt;!&ndash; ERROR级别日志文件配置 &ndash;&gt;
<appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_HOME}/error.log</file>
<encoder>
@@ -41,19 +109,31 @@
</filter>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_HOME}/error-%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>30</maxHistory>
<maxHistory>300</maxHistory>
</rollingPolicy>
</appender>
<logger name="java" additivity="false" />
&lt;!&ndash; 框架日志级别 &ndash;&gt;
&lt;!&ndash; <logger name="java" additivity="false" />&ndash;&gt;
<logger name="org.eclipse.jetty" level="INFO"/>
<logger name="org.quartz" level="INFO"/>
<logger name="org.nutz" level="DEBUG"/>
<!-- 日志级别和appender的关联 -->
&lt;!&ndash; 日志级别和appender的关联 &ndash;&gt;
<root level="DEBUG">
<appender-ref ref="STDOUT"/>
<appender-ref ref="DEBUG_FILE"/>
<appender-ref ref="INFO_FILE"/>
<appender-ref ref="ERROR_FILE"/>
</root>
</root>-->
<!--
#################################################################################
# #
# debug、info、error分文件输出 end #
# #
#################################################################################
-->
</configuration>
@@ -2,7 +2,7 @@
layout("/layouts/platform_h5.html"){
#-->
<div id="app" v-cloak>
<van-nav-bar @click-left="historyBack" left-arrow left-text="返回" title="委员会成员意见" placeholder
<van-nav-bar @click-left="historyBack" left-arrow left-text="返回" title="提案委委员审议" placeholder
fixed></van-nav-bar>
<van-sticky offset-top="46px">
<van-search
@@ -18,7 +18,7 @@ layout("/layouts/platform_h5.html"){
@change="doSearch"></van-dropdown-item>
</van-dropdown-menu>
<van-tabs v-model="pageForm.approvalText"
@change="(val)=>{this.pageForm.approval = val==='1';this.doSearch();}">
@change="approvalTabChange">
<van-tab title="已审核" name="1"></van-tab>
<van-tab title="未审核" name="0"></van-tab>
</van-tabs>
@@ -53,7 +53,7 @@ layout("/layouts/platform_h5.html"){
<proposal-info ref="proposalInfoRef">
<div v-if="showApprovalForm">
<div class="process-title">提案委员会成员意见</div>
<div class="process-title">提案委委员审议</div>
<van-form ref="formRef">
<van-field
v-model="formData.caseFilingResultName"
@@ -63,14 +63,14 @@ layout("/layouts/platform_h5.html"){
:rules="[{ required: true, message: '请选择立案结果' }]"
required
is-link
@click="showCaseFilingResultPicker = true"
@click="openCaseFilingResultPicker"
></van-field>
<van-popup v-model="showCaseFilingResultPicker" position="bottom">
<van-picker
show-toolbar
:columns="dict.type.PROPOSAL_CASE_FILING_RESULT.map(item => ({text: item.label, value: item.code}))"
:columns="caseFilingResultColumns"
@confirm="onCaseFilingResultConfirm"
@cancel="showCaseFilingResultPicker = false"
@cancel="hideCaseFilingResultPicker"
></van-picker>
</van-popup>
@@ -78,19 +78,19 @@ layout("/layouts/platform_h5.html"){
<van-field
v-model="formData.caseFilingTypeName"
name="caseFilingTypeName"
label="立案结果"
label="立案类型"
placeholder="请选择立案类型"
:rules="[{ required: true, message: '请选择立案类型' }]"
required
is-link
@click="showCaseFilingTypePicker = true"
@click="openCaseFilingTypePicker"
></van-field>
<van-popup v-model="showCaseFilingTypePicker" position="bottom">
<van-picker
show-toolbar
:columns="dict.type.PROPOSAL_CASE_FILING_TYPE.map(item => ({text: item.label, value: item.code}))"
:columns="caseFilingTypeColumns"
@confirm="onCaseFilingTypeConfirm"
@cancel="showCaseFilingTypePicker = false"
@cancel="hideCaseFilingTypePicker"
></van-picker>
</van-popup>
</template>
@@ -144,21 +144,39 @@ layout("/layouts/platform_h5.html"){
components: {
"proposal-info": PROPOSAL_INFO
},
computed: {
caseFilingResultColumns() {
return this.dict.type.PROPOSAL_CASE_FILING_RESULT.map(function (item) {
return {text: item.label, value: item.code}
})
},
caseFilingTypeColumns() {
return this.dict.type.PROPOSAL_CASE_FILING_TYPE.map(function (item) {
return {text: item.label, value: item.code}
})
}
},
methods: {
onReady() {
this.listSession()
},
approvalTabChange(val) {
this.$set(this.pageForm, "approval", val === "1")
this.doSearch()
},
listSession() {
this.$axios.post("/platform/proposal/common/listSession").then((res) => {
if (res.code === 0) {
this.sessionOptions = [
this.$set(this, "sessionOptions", [
{
text: "全部届次",
value: null
}
].concat(res.data.map((v) => ({text: v.fullName, value: v.id})))
].concat(res.data.map(function (v) {
return {text: v.fullName, value: v.id}
})))
if (this.sessionOptions.length > 0) {
this.pageForm.sessionId = this.sessionOptions[0].value
this.$set(this.pageForm, "sessionId", this.sessionOptions[0].value)
this.doSearch()
}
}
@@ -166,26 +184,39 @@ layout("/layouts/platform_h5.html"){
},
onView(row) {
this.showApprovalForm = false
this.$set(this, "showApprovalForm", false)
this.$refs.proposalInfoRef.onOpen(row)
},
// 确定立案类型
openCaseFilingResultPicker() {
this.$set(this, "showCaseFilingResultPicker", true)
},
hideCaseFilingResultPicker() {
this.$set(this, "showCaseFilingResultPicker", false)
},
openCaseFilingTypePicker() {
this.$set(this, "showCaseFilingTypePicker", true)
},
hideCaseFilingTypePicker() {
this.$set(this, "showCaseFilingTypePicker", false)
},
// 确定立案结果
onCaseFilingResultConfirm(value) {
this.$set(this.formData, "caseFilingResultName", value.text)
this.$set(this.formData, "caseFilingResult", value.value)
this.showCaseFilingResultPicker = false
this.$set(this, "showCaseFilingResultPicker", false)
},
// 确定立案类型
onCaseFilingTypeConfirm(value) {
this.$set(this.formData, "caseFilingTypeName", value.text)
this.$set(this.formData, "caseFilingType", value.value)
this.showCaseFilingTypePicker = false
this.$set(this, "showCaseFilingTypePicker", false)
},
onApproval(row) {
this.showApprovalForm = true
this.$set(this, "showApprovalForm", true)
this.$refs.proposalInfoRef.onOpen(row)
this.$set(this, "formData", {
processTaskId: row.taskId,
@@ -220,8 +251,8 @@ layout("/layouts/platform_h5.html"){
doSearch() {
this.$nextTick(() => {
this.pageForm.pageNumber = 1
this.pageForm.totalCount = 0
this.$set(this.pageForm, "pageNumber", 1)
this.$set(this.pageForm, "totalCount", 0)
this.$refs.tableListRef.doSearch()
})
},
@@ -0,0 +1,478 @@
<!--#
layout("/layouts/platform_h5.html"){
#-->
<div id="app" v-cloak>
<van-nav-bar @click-left="historyBack" left-arrow left-text="返回" title="提案委主任审批" placeholder fixed></van-nav-bar>
<van-sticky offset-top="46px">
<van-search
v-model="pageForm.name"
:show-action="false"
:reverse-color="false"
input-align="left"
placeholder="请输入提案名称搜索"
@search="doSearch"
></van-search>
<van-dropdown-menu :close-on-click-outside="false" :close-on-click-overlay="false">
<van-dropdown-item v-model="pageForm.sessionId" :options="sessionOptions" :multiple="false"
@change="doSearch"></van-dropdown-item>
</van-dropdown-menu>
<van-tabs v-model="pageForm.approvalText"
@change="approvalTabChange">
<van-tab title="已审核" name="1"></van-tab>
<van-tab title="未审核" name="0"></van-tab>
</van-tabs>
</van-sticky>
<table-list api="/platform/proposal/committeeFiling/pageData" :page_form.sync="pageForm" @ready="onReady"
ref="tableListRef"
title="name">
<template v-slot="{index,row}">
<table-column label="提案编号">{{row.code}}</table-column>
<table-column label="提案类别">{{row.typeName}}</table-column>
<table-column label="提案人">{{row.createUserName}}</table-column>
<table-column label="代表团">{{row.delegationName}}</table-column>
<table-column label="附议同意数">{{row.agreeCount}}</table-column>
<table-column label="当前节点">{{row.curTaskName}}</table-column>
</template>
<template #actions="{index,row}">
<div class="action-btn" @click="onView(row)">
<i class="fa fa-eye"></i>
<span>查看</span>
</div>
<div class="action-btn" v-if="row.taskState === 10" @click="onApproval(row)">
<i class="fa fa-edit"></i>
<span>审核</span>
</div>
<div class="action-btn delete" v-if="row.canRevoke" @click="onRevoke(row)">
<i class="fa fa-reply"></i>
<span>撤回</span>
</div>
</template>
</table-list>
<proposal-info ref="proposalInfoRef">
<div v-if="showApprovalForm">
<div class="process-title">{{formData.taskName}}</div>
<van-form ref="formRef">
<van-field
v-if="isCommitteeTask()"
v-model="formData.tf_caseFilingResultName"
name="tf_caseFilingResultName"
label="立案结果"
placeholder="请选择立案结果"
:rules="[{ required: true, message: '请选择立案结果' }]"
required
is-link
@click="openCaseFilingResultPicker"
></van-field>
<van-popup v-model="showCaseFilingResultPicker" position="bottom">
<van-picker
show-toolbar
:columns="caseFilingResultColumns"
@confirm="onCaseFilingResultConfirm"
@cancel="hideCaseFilingResultPicker"
></van-picker>
</van-popup>
<van-field
v-if="isCommitteeTask() && formData.tf_caseFilingResult === 'CONFIRM_FILING'"
v-model="formData.tf_caseFilingTypeName"
name="tf_caseFilingTypeName"
label="立案类型"
placeholder="请选择立案类型"
:rules="[{ required: true, message: '请选择立案类型' }]"
required
is-link
@click="openCaseFilingTypePicker"
></van-field>
<van-popup v-model="showCaseFilingTypePicker" position="bottom">
<van-picker
show-toolbar
:columns="caseFilingTypeColumns"
@confirm="onCaseFilingTypeConfirm"
@cancel="hideCaseFilingTypePicker"
></van-picker>
</van-popup>
<van-field
v-if="isCommitteeTask() && isUnitRequired()"
v-model="formData.tf_masterUnitName"
name="tf_masterUnitName"
label="主办单位"
placeholder="请选择主办单位"
:rules="[{ required: true, message: '请选择主办单位' }]"
required
is-link
@click="openMasterUnitPicker"
></van-field>
<van-popup v-model="showMasterUnitPicker" position="bottom">
<van-picker
show-toolbar
:columns="underTakeColumns"
@confirm="onMasterUnitConfirm"
@cancel="hideMasterUnitPicker"
></van-picker>
</van-popup>
<van-field
v-if="isCommitteeTask() && isUnitRequired()"
v-model="formData.tf_slaveUnitNameStr"
name="tf_slaveUnitNameStr"
label="协办单位"
placeholder="请选择协办单位"
readonly
is-link
@click="openSlaveUnitPicker"
></van-field>
<van-popup v-model="showSlaveUnitPicker" position="bottom">
<div style="padding: 12px 16px; display: flex; justify-content: space-between; align-items: center;">
<van-button size="small" @click="hideSlaveUnitPicker">取消</van-button>
<span>选择协办单位</span>
<van-button size="small" type="primary" @click="onSlaveUnitConfirm">确定</van-button>
</div>
<van-checkbox-group v-model="slaveUnitTempIds" style="max-height: 320px; overflow-y: auto;">
<van-cell-group>
<van-cell
v-for="item in underTakeOptions"
:key="item.id"
:title="item.name"
clickable
@click="toggleSlaveUnit(item)"
>
<van-checkbox
slot="right-icon"
:name="item.id"
:disabled="item.id === formData.tf_masterUnitId"
ref="slaveUnitCheckboxes"
></van-checkbox>
</van-cell>
</van-cell-group>
</van-checkbox-group>
</van-popup>
<van-field
v-if="isBranchSchoolLeaderRequired()"
v-model="formData.userName"
name="userName"
label="分管校领导"
placeholder="请选择分管校领导"
required
is-link
@click="openBranchSchoolLeaderPicker"
></van-field>
<van-popup v-model="showBranchSchoolLeaderPicker" position="bottom">
<van-picker
show-toolbar
:columns="branchSchoolLeaderColumns"
@confirm="onBranchSchoolLeaderConfirm"
@cancel="hideBranchSchoolLeaderPicker"
></van-picker>
</van-popup>
<van-field
v-model="formData.approvalOpinion"
name="approvalOpinion"
label="审核意见"
placeholder="请输入审核意见"
:rules="[{ required: true, message: '请填写审核意见' }]"
required
maxlength="100"
show-word-limit
></van-field>
</van-form>
<div style="display: flex; justify-content: space-between; column-gap: 10px; padding: 10px">
<van-button type="danger" block :loading="submitLoading" @click="handleTaskAction(6)">退回到提案人</van-button>
<van-button type="primary" block :loading="submitLoading" @click="handleTaskAction(1)">提交</van-button>
</div>
</div>
</proposal-info>
</div>
<script nonce="${cspNonce!}">
<!--#include("../../common/info.js"){}#-->
const vue = new Vue({
el: "#app",
store,
dicts: ["PROPOSAL_CASE_FILING_RESULT", "PROPOSAL_CASE_FILING_TYPE"],
data() {
return {
pageForm: {
pageNumber: 1,
pageSize: 10,
totalCount: 0,
name: null,
sessionId: null,
approvalText: "0",
approval: false
},
sessionOptions: [],
underTakeOptions: [],
branchSchoolLeaderOptions: [],
slaveUnitTempIds: [],
formData: {},
showApprovalForm: false,
submitLoading: false,
showCaseFilingResultPicker: false,
showCaseFilingTypePicker: false,
showMasterUnitPicker: false,
showSlaveUnitPicker: false,
showBranchSchoolLeaderPicker: false
}
},
components: {
"proposal-info": PROPOSAL_INFO
},
computed: {
caseFilingResultColumns() {
return this.dict.type.PROPOSAL_CASE_FILING_RESULT.map(function (item) {
return {text: item.label, value: item.code}
})
},
caseFilingTypeColumns() {
return this.dict.type.PROPOSAL_CASE_FILING_TYPE.map(function (item) {
return {text: item.label, value: item.code}
})
},
underTakeColumns() {
return this.underTakeOptions.map(function (item) {
return {text: item.name, value: item.id}
})
},
branchSchoolLeaderColumns() {
return this.branchSchoolLeaderOptions.map(function (item) {
return {text: item.label, value: item.id}
})
}
},
methods: {
onReady() {
this.listSession()
this.listUnderTake()
this.listBranchSchoolLeader()
},
approvalTabChange(val) {
this.$set(this.pageForm, "approval", val === "1")
this.doSearch()
},
listSession() {
this.$axios.post("/platform/proposal/common/listSession").then((res) => {
if (res.code === 0) {
this.$set(this, "sessionOptions", [{
text: "全部届次",
value: null
}].concat(res.data.map(function (v) {
return {text: v.fullName, value: v.id}
})))
if (this.sessionOptions.length > 0) {
this.$set(this.pageForm, "sessionId", this.sessionOptions[0].value)
this.doSearch()
}
}
})
},
listUnderTake() {
this.$axios.post("/platform/proposal/common/listUnderTake").then((res) => {
if (res.code === 0) {
this.$set(this, "underTakeOptions", res.data)
}
})
},
listBranchSchoolLeader() {
this.$axios.post("/platform/proposal/committeeFiling/listBranchSchoolLeader", {keyword: ""}).then((res) => {
if (res.code === 0) {
this.$set(this, "branchSchoolLeaderOptions", res.data)
}
})
},
onView(row) {
this.$set(this, "showApprovalForm", false)
this.$refs.proposalInfoRef.onOpen(row)
},
onApproval(row) {
this.$set(this, "showApprovalForm", true)
this.$set(this, "formData", {
processTaskId: row.taskId,
taskKey: row.taskKey,
taskName: row.curTaskName,
userId: null,
userName: null,
tf_caseFilingResult: null,
tf_caseFilingResultName: null,
tf_caseFilingType: null,
tf_caseFilingTypeName: null,
tf_masterUnitId: null,
tf_masterUnitName: null,
tf_slaveUnitIds: [],
tf_slaveUnitNames: [],
tf_slaveUnitNameStr: null,
approvalOpinion: null
})
this.$refs.proposalInfoRef.onOpen(row)
},
isCommitteeTask() {
return this.formData.taskKey === "committee"
},
isCommitteeDirectorOpinionTask() {
return this.formData.taskKey === "committee_director_opinion"
},
isUnitRequired() {
return ["CONFIRM_FILING", "SUGGESTION"].includes(this.formData.tf_caseFilingResult)
},
isBranchSchoolLeaderRequired() {
return this.isCommitteeDirectorOpinionTask() || (this.isCommitteeTask() && this.formData.tf_caseFilingResult === "CONFIRM_FILING")
},
openCaseFilingResultPicker() {
this.$set(this, "showCaseFilingResultPicker", true)
},
hideCaseFilingResultPicker() {
this.$set(this, "showCaseFilingResultPicker", false)
},
openCaseFilingTypePicker() {
this.$set(this, "showCaseFilingTypePicker", true)
},
hideCaseFilingTypePicker() {
this.$set(this, "showCaseFilingTypePicker", false)
},
openMasterUnitPicker() {
this.$set(this, "showMasterUnitPicker", true)
},
hideMasterUnitPicker() {
this.$set(this, "showMasterUnitPicker", false)
},
hideSlaveUnitPicker() {
this.$set(this, "showSlaveUnitPicker", false)
},
openBranchSchoolLeaderPicker() {
this.$set(this, "showBranchSchoolLeaderPicker", true)
},
hideBranchSchoolLeaderPicker() {
this.$set(this, "showBranchSchoolLeaderPicker", false)
},
onCaseFilingResultConfirm(value) {
this.$set(this.formData, "tf_caseFilingResultName", value.text)
this.$set(this.formData, "tf_caseFilingResult", value.value)
this.$set(this.formData, "tf_caseFilingType", null)
this.$set(this.formData, "tf_caseFilingTypeName", null)
if (!this.isUnitRequired()) {
this.clearUnits()
}
this.$set(this, "showCaseFilingResultPicker", false)
},
onCaseFilingTypeConfirm(value) {
this.$set(this.formData, "tf_caseFilingTypeName", value.text)
this.$set(this.formData, "tf_caseFilingType", value.value)
this.$set(this, "showCaseFilingTypePicker", false)
},
onMasterUnitConfirm(value) {
this.$set(this.formData, "tf_masterUnitName", value.text)
this.$set(this.formData, "tf_masterUnitId", value.value)
var slaveIds = this.formData.tf_slaveUnitIds.filter(function (id) {
return id !== value.value
})
this.setSlaveUnits(slaveIds)
this.$set(this, "showMasterUnitPicker", false)
},
openSlaveUnitPicker() {
this.$set(this, "slaveUnitTempIds", this.formData.tf_slaveUnitIds.slice())
this.$set(this, "showSlaveUnitPicker", true)
},
toggleSlaveUnit(item) {
if (item.id === this.formData.tf_masterUnitId) {
return
}
var index = this.slaveUnitTempIds.indexOf(item.id)
var nextIds = this.slaveUnitTempIds.slice()
if (index >= 0) {
nextIds.splice(index, 1)
} else {
nextIds.push(item.id)
}
this.$set(this, "slaveUnitTempIds", nextIds)
},
onSlaveUnitConfirm() {
this.setSlaveUnits(this.slaveUnitTempIds)
this.$set(this, "showSlaveUnitPicker", false)
},
setSlaveUnits(ids) {
var names = this.underTakeOptions.filter(function (item) {
return ids.includes(item.id)
}).map(function (item) {
return item.name
})
this.$set(this.formData, "tf_slaveUnitIds", ids)
this.$set(this.formData, "tf_slaveUnitNames", names)
this.$set(this.formData, "tf_slaveUnitNameStr", names.join(","))
},
clearUnits() {
this.$set(this.formData, "tf_masterUnitId", null)
this.$set(this.formData, "tf_masterUnitName", null)
this.setSlaveUnits([])
},
onBranchSchoolLeaderConfirm(value) {
this.$set(this.formData, "userName", value.text)
this.$set(this.formData, "userId", value.value)
this.$set(this, "showBranchSchoolLeaderPicker", false)
},
async handleTaskAction(val) {
if (this.submitLoading) {
return
}
try {
await this.$refs.formRef.validate()
if (val === 1 && this.isBranchSchoolLeaderRequired() && !this.formData.userId) {
this.$toast("请选择分管校领导")
return
}
this.$dialog.confirm({
title: "提示",
message: "您确定要提交吗?"
}).then(() => {
var data = Object.assign({}, this.formData)
data.submitType = val
data.tf_helpunitreply = this.formData.tf_slaveUnitIds.length > 0 ? "HAS_HELP_UNIT" : "NO_HELP_UNIT"
this.$set(this, "submitLoading", true)
this.$axios.post("/flow/common/executeTask", {
data: JSON.stringify(data)
}).then((res) => {
if (res.code === 0) {
this.$refs.proposalInfoRef.onClose()
this.$toast.success(res.msg)
this.doSearch()
}
}).finally(() => {
this.$set(this, "submitLoading", false)
})
}).catch(() => {
})
} catch (error) {
}
},
onRevoke(row) {
this.$dialog.confirm({
title: "提示",
message: "您确定要撤回吗?"
}).then(() => {
this.$axios.post("/flow/common/revokeTask", {taskId: row.taskId}).then((res) => {
if (res.code === 0) {
this.$toast.success(res.msg)
this.doSearch()
}
})
})
},
doSearch() {
this.$nextTick(() => {
this.$set(this.pageForm, "pageNumber", 1)
this.$set(this.pageForm, "totalCount", 0)
this.$refs.tableListRef.doSearch()
})
}
}
})
</script>
<!--#
}
#-->