commit
This commit is contained in:
@@ -13,6 +13,8 @@
|
||||
|
||||
<link rel="stylesheet" href="${base!}/assets/mobile/css/theme.css">
|
||||
<link rel="stylesheet" href="${base!}/assets/mobile/css/main.css">
|
||||
<link rel="stylesheet" href="${base!}/assets/mobile/css/universal-info.css">
|
||||
<link rel="stylesheet" href="${base!}/assets/mobile/css/list-card.css">
|
||||
|
||||
<link rel="stylesheet" href="${base!}/assets/mobile/css/pdfh5.css">
|
||||
|
||||
|
||||
@@ -0,0 +1,152 @@
|
||||
<!--#
|
||||
layout("/mobile/platform.html"){
|
||||
#-->
|
||||
<div id="app" v-cloak>
|
||||
<van-nav-bar title="校领导审批" fixed placeholder :left-arrow="leftArrow" safe-area-inset-top
|
||||
@click-left="pjaxReplace('/mobile/proposal/branchLeaderSuffixAudit')"></van-nav-bar>
|
||||
<proposal-info :proposal_id="proposalId" title="校领导审批" :handle="handle" ref="info">
|
||||
<template #handle>
|
||||
<div class="info-section-title">分管校领导审批</div>
|
||||
<van-form class="info-cell-form">
|
||||
<div class="info-row" v-if="underTakeNames">
|
||||
<span class="info-label">承办单位</span>
|
||||
<span class="info-value is-long">{{underTakeNames}}</span>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<span class="info-label">审核人</span>
|
||||
<span class="info-value">{{formData.username}}</span>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<span class="info-label">审核时间</span>
|
||||
<span class="info-value">{{formData.auditTime}}</span>
|
||||
</div>
|
||||
|
||||
<div class="info-textarea-field">
|
||||
<div class="info-textarea-label info-required-label">审批意见</div>
|
||||
<van-field
|
||||
v-model="formData.opinion"
|
||||
rows="4"
|
||||
autosize
|
||||
type="textarea"
|
||||
maxlength="1000"
|
||||
placeholder="请填写您的审批意见"
|
||||
show-word-limit
|
||||
></van-field>
|
||||
</div>
|
||||
|
||||
<van-row class="info-footer-actions" type="flex" gutter="10">
|
||||
<van-col span="12">
|
||||
<van-button block class="info-ghost-button" :loading="formLoading"
|
||||
@click="pjaxReplace('/mobile/proposal/branchLeaderSuffixAudit')">
|
||||
取消
|
||||
</van-button>
|
||||
</van-col>
|
||||
<van-col span="12">
|
||||
<van-button :color="themeColor" block class="info-primary-button" :loading="formLoading"
|
||||
@click="doAudit">
|
||||
提交
|
||||
</van-button>
|
||||
</van-col>
|
||||
</van-row>
|
||||
</van-form>
|
||||
</template>
|
||||
</proposal-info>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [mobileMixins],
|
||||
data() {
|
||||
return {
|
||||
leftArrow: false,
|
||||
handle: false,
|
||||
proposalId: GetQueryString('proposal_id'),
|
||||
pblsaId: GetQueryString('pblsaId'),
|
||||
underTakeId: '',
|
||||
underTakeNames: '',
|
||||
formLoading: false,
|
||||
formData: {
|
||||
username: "${@shiro.getPrincipalProperty('username')}",
|
||||
loginName: "${@shiro.getPrincipalProperty('loginname')}",
|
||||
auditTime: moment().format('YYYY-MM-DD'),
|
||||
opinion: '同意办结',
|
||||
sign: '',
|
||||
proposalId: GetQueryString('proposal_id')
|
||||
}
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'proposal-info': httpVueLoader('/components/proposal/mobile/ProposalInfo.vue?v=' + new Date().getTime()),
|
||||
},
|
||||
methods: {
|
||||
loadAuditInfo() {
|
||||
$.get('/mobile/proposal/branchLeaderSuffixAudit/getAuditInfo', {
|
||||
pblsaId: this.pblsaId
|
||||
}).then((res) => {
|
||||
const data = res.data || {}
|
||||
this.$set(this, 'underTakeId', data.underTakeId || '')
|
||||
this.$set(this, 'underTakeNames', data.underTakeNames || '')
|
||||
this.handle = data.stateCode === 700 && data.isAudit !== true
|
||||
})
|
||||
},
|
||||
validateForm() {
|
||||
if (!this.pblsaId) {
|
||||
vant.Toast('审批记录不存在')
|
||||
return false
|
||||
}
|
||||
if (!this.formData.opinion) {
|
||||
vant.Toast('请填写审批意见')
|
||||
return false
|
||||
}
|
||||
return true
|
||||
},
|
||||
doAudit() {
|
||||
if (!this.validateForm() || this.formLoading) {
|
||||
return
|
||||
}
|
||||
vant.Dialog.confirm({
|
||||
title: '提示',
|
||||
message: '您确定要提交审批意见吗?',
|
||||
}).then(() => {
|
||||
this.formLoading = true
|
||||
$.post('/mobile/proposal/branchLeaderSuffixAudit/doAudit', {
|
||||
audit: JSON.stringify(this.formData),
|
||||
pblsaId: this.pblsaId,
|
||||
sign: this.formData.sign
|
||||
}).then((res) => {
|
||||
if (res.code === 0) {
|
||||
this.$toast.success('提交成功')
|
||||
this.handle = false
|
||||
this.$refs.info.openView(this.proposalId)
|
||||
} else {
|
||||
this.$toast.fail(res.msg || '提交失败,请联系管理员')
|
||||
}
|
||||
}).always(() => {
|
||||
this.formLoading = false
|
||||
})
|
||||
})
|
||||
}
|
||||
},
|
||||
created() {
|
||||
if (GetQueryString('mobile')) {
|
||||
this.leftArrow = true
|
||||
}
|
||||
const proposalId = GetQueryString('proposal_id')
|
||||
const bizKey = GetQueryString('biz_key')
|
||||
if (proposalId === '' || bizKey === '') {
|
||||
vant.Dialog.alert({
|
||||
title: '提示',
|
||||
message: '非法参数',
|
||||
showConfirmButton: false
|
||||
})
|
||||
return
|
||||
}
|
||||
this.loadAuditInfo()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,196 @@
|
||||
<!--#
|
||||
layout("/mobile/platform.html"){
|
||||
#-->
|
||||
<div id="app" v-cloak>
|
||||
<m-page-loading v-if="mLoading"></m-page-loading>
|
||||
<van-nav-bar
|
||||
title="校领导审批"
|
||||
left-arrow
|
||||
placeholder
|
||||
fixed
|
||||
@click-left="pjaxReplace('/mobile/index')"
|
||||
></van-nav-bar>
|
||||
|
||||
<div class="search-fixed">
|
||||
<van-search
|
||||
v-model="pageForm.searchKeyWord"
|
||||
shape="round"
|
||||
maxlength="10"
|
||||
@search="doSearch"
|
||||
placeholder="请输入提案名称或者提案编号进行查询"
|
||||
></van-search>
|
||||
|
||||
<van-dropdown-menu>
|
||||
<van-dropdown-item v-model="pageForm.meetingId" :options="sessionList"
|
||||
@change="doSearch"></van-dropdown-item>
|
||||
<van-dropdown-item v-model="pageForm.proposalTypeId" :options="proposalTypeList"
|
||||
@change="doSearch"></van-dropdown-item>
|
||||
<van-dropdown-item v-model="pageForm.proposalResultCode" :options="resultList"
|
||||
@change="doSearch"></van-dropdown-item>
|
||||
</van-dropdown-menu>
|
||||
|
||||
<van-tabs v-model="pageForm.isAudit" @change="doSearch">
|
||||
<van-tab title="全部" name=""></van-tab>
|
||||
<van-tab title="已审批" name="true"></van-tab>
|
||||
<van-tab title="待审批" name="false"></van-tab>
|
||||
</van-tabs>
|
||||
</div>
|
||||
|
||||
<div style="margin: 170px auto 0">
|
||||
<van-list
|
||||
v-if="pageForm.meetingId"
|
||||
v-model="mLoading"
|
||||
:immediate-check="false"
|
||||
:finished="finished"
|
||||
:finished-text="tableData.length>0?'没有更多了':''"
|
||||
@load="onLoad">
|
||||
<div v-for="o in tableData" class="list-card" :style="{'--card-accent': o.stateColor || '#2563eb'}"
|
||||
@click="openView(o)">
|
||||
<div class="card-header">
|
||||
<div class="card-title">
|
||||
{{o.proposalName}}
|
||||
</div>
|
||||
<span class="badge" :class="o.isAudit ? 'badge-blue' : 'badge-draft'">
|
||||
{{o.isAudit ? '已审批' : '待审批'}}
|
||||
</span>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div class="card-item">
|
||||
<span class="card-label">提案编号:</span>
|
||||
<span class="card-value">{{o.proposalCode}}</span>
|
||||
</div>
|
||||
<div class="card-item">
|
||||
<span class="card-label">提案类型:</span>
|
||||
<span class="card-value">{{o.typeName}}</span>
|
||||
</div>
|
||||
<div class="card-item">
|
||||
<span class="card-label">代表团:</span>
|
||||
<span class="card-value">{{o.delegationName}}</span>
|
||||
</div>
|
||||
<div class="card-item">
|
||||
<span class="card-label">提案届次:</span>
|
||||
<span class="card-value">{{o.meetingName}}</span>
|
||||
</div>
|
||||
<div class="card-item">
|
||||
<span class="card-label">提案状态:</span>
|
||||
<span class="card-value">{{o.stateName}}</span>
|
||||
</div>
|
||||
<div class="card-item">
|
||||
<span class="card-label">承办单位:</span>
|
||||
<span class="card-value">{{o.underTakeNames}}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-footer" v-if="o.resultName">
|
||||
<span class="card-label">立案结果:</span>
|
||||
<span class="card-value">{{o.resultName}}</span>
|
||||
</div>
|
||||
</div>
|
||||
</van-list>
|
||||
<van-empty
|
||||
v-if="mLoading==false&&tableData.length==0"
|
||||
class="custom-image"
|
||||
image="/none.svg"
|
||||
description="暂无数据"
|
||||
></van-empty>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [mobileMixins],
|
||||
data() {
|
||||
return {
|
||||
pageForm: {
|
||||
isAudit: 'false'
|
||||
},
|
||||
sessionList: [],
|
||||
proposalTypeList: [],
|
||||
resultList: [],
|
||||
listLoading: false
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
doSearch() {
|
||||
this.$set(this.pageForm, 'pageNumber', 1)
|
||||
this.tableData = []
|
||||
this.finished = false
|
||||
this.onLoad()
|
||||
},
|
||||
onLoad() {
|
||||
if (this.listLoading || this.finished) {
|
||||
return
|
||||
}
|
||||
this.listLoading = true
|
||||
this.mLoading = true
|
||||
$.post(loc() + '/pageData', this.pageForm)
|
||||
.then((res) => {
|
||||
if (res.code === 0) {
|
||||
this.tableData = this.tableData.concat(res.data.list)
|
||||
if (this.tableData.length >= res.data.totalCount) {
|
||||
this.finished = true
|
||||
} else {
|
||||
this.$set(this.pageForm, 'pageNumber', this.pageForm.pageNumber + 1)
|
||||
}
|
||||
}
|
||||
})
|
||||
.always(() => {
|
||||
this.listLoading = false
|
||||
this.mLoading = false
|
||||
})
|
||||
},
|
||||
openView(row) {
|
||||
window.location.href = '/mobile/proposal/branchLeaderSuffixAudit/view?biz_key=' + row.id
|
||||
+ '&proposal_id=' + row.id
|
||||
+ '&pblsaId=' + row.pblsaId
|
||||
+ '&mobile=' + true
|
||||
},
|
||||
loadOptions() {
|
||||
$.get('/mobile/proposal/common/getAllSession')
|
||||
.then((res) => {
|
||||
this.sessionList = res.data
|
||||
if (this.sessionList && this.sessionList.length > 0) {
|
||||
this.$set(this.pageForm, 'meetingId', this.sessionList[0].value)
|
||||
}
|
||||
})
|
||||
.then(() => $.get('/mobile/proposal/common/getProposalType'))
|
||||
.then((res) => {
|
||||
this.proposalTypeList = res.data
|
||||
if (this.proposalTypeList && this.proposalTypeList.length > 0) {
|
||||
this.$set(this.pageForm, 'proposalTypeId', this.proposalTypeList[0].value)
|
||||
}
|
||||
})
|
||||
.then(() => $.get('/mobile/proposal/common/getProposalDict'))
|
||||
.then((res) => {
|
||||
this.resultList = res.data
|
||||
if (this.resultList && this.resultList.length > 0) {
|
||||
this.$set(this.pageForm, 'proposalResultCode', this.resultList[0].value)
|
||||
}
|
||||
this.onLoad()
|
||||
})
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.$set(this.pageForm, 'pageNumber', 1)
|
||||
this.$set(this.pageForm, 'pageSize', 5)
|
||||
this.$set(this.pageForm, 'totalCount', 0)
|
||||
this.loadOptions()
|
||||
}
|
||||
})
|
||||
|
||||
window.addEventListener('pageshow', (e) => {
|
||||
if (e.persisted || (window.performance && window.performance.navigation.type === 2)) {
|
||||
vue.$set(vue.pageForm, 'pageNumber', 1)
|
||||
vue.$set(vue.pageForm, 'meetingId', null)
|
||||
vue.tableData = []
|
||||
vue.finished = false
|
||||
vue.loadOptions()
|
||||
}
|
||||
})
|
||||
|
||||
</script>
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,511 @@
|
||||
<!--#
|
||||
layout("/mobile/platform.html"){
|
||||
#-->
|
||||
<div id="app" v-cloak>
|
||||
<van-nav-bar title="提案工作组预立案" fixed placeholder :left-arrow="leftArrow" safe-area-inset-top
|
||||
@click-left="pjaxReplace('/mobile/proposal/case')"></van-nav-bar>
|
||||
<proposal-info :proposal_id="proposalId" title="提案工作组预立案" :handle="handle" ref="info">
|
||||
<template #handle>
|
||||
<div class="info-section-title">预立案审核</div>
|
||||
<van-form class="info-cell-form">
|
||||
<div class="info-row">
|
||||
<span class="info-label">审核人</span>
|
||||
<span class="info-value">{{formData.username}}</span>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<span class="info-label">审核时间</span>
|
||||
<span class="info-value">{{formData.auditTime}}</span>
|
||||
</div>
|
||||
|
||||
<div class="info-picker-card">
|
||||
<van-field
|
||||
:value="resultCodeName"
|
||||
clickable
|
||||
input-align="right"
|
||||
label="立案结果"
|
||||
label-class="info-picker-label"
|
||||
name="resultCode"
|
||||
placeholder="请选择立案结果"
|
||||
required
|
||||
readonly
|
||||
right-icon="arrow"
|
||||
@click="showResultCodePicker = true"
|
||||
></van-field>
|
||||
</div>
|
||||
<van-popup position="bottom" round v-model="showResultCodePicker">
|
||||
<van-picker
|
||||
:columns="resultPickerOptions"
|
||||
@cancel="showResultCodePicker = false"
|
||||
@confirm="onResultCodeConfirm"
|
||||
show-toolbar
|
||||
></van-picker>
|
||||
</van-popup>
|
||||
|
||||
<div class="info-picker-card">
|
||||
<van-field
|
||||
:value="typeName"
|
||||
clickable
|
||||
input-align="right"
|
||||
label="提案类型"
|
||||
label-class="info-picker-label"
|
||||
name="typeId"
|
||||
placeholder="请选择提案类型"
|
||||
required
|
||||
readonly
|
||||
right-icon="arrow"
|
||||
@click="showTypePicker = true"
|
||||
></van-field>
|
||||
</div>
|
||||
<van-popup position="bottom" round v-model="showTypePicker">
|
||||
<van-picker
|
||||
:columns="typePickerOptions"
|
||||
@cancel="showTypePicker = false"
|
||||
@confirm="onTypeConfirm"
|
||||
show-toolbar
|
||||
></van-picker>
|
||||
</van-popup>
|
||||
|
||||
<div class="info-picker-card" v-if="formData.resultCode=='notGive'">
|
||||
<van-field
|
||||
:value="formData.noFilingReason"
|
||||
clickable
|
||||
input-align="right"
|
||||
label="理由列表"
|
||||
label-class="info-picker-label"
|
||||
name="noFilingReason"
|
||||
placeholder="请选择理由列表"
|
||||
readonly
|
||||
right-icon="arrow"
|
||||
@click="showNoFilingReasonPicker = true"
|
||||
></van-field>
|
||||
</div>
|
||||
<van-popup position="bottom" round v-model="showNoFilingReasonPicker">
|
||||
<van-picker
|
||||
:columns="noFilingReason"
|
||||
@cancel="showNoFilingReasonPicker = false"
|
||||
@confirm="onNoFilingReasonConfirm"
|
||||
show-toolbar
|
||||
></van-picker>
|
||||
</van-popup>
|
||||
|
||||
<template v-if="formData.resultCode!='notGive'">
|
||||
<div class="info-picker-card">
|
||||
<van-field
|
||||
:value="hostUnitName"
|
||||
clickable
|
||||
input-align="right"
|
||||
label="主办单位"
|
||||
label-class="info-picker-label"
|
||||
name="hostUnit"
|
||||
placeholder="请选择主办单位"
|
||||
:required="formData.resultCode !== 'notGive'"
|
||||
readonly
|
||||
right-icon="arrow"
|
||||
@click="openHostUnitPicker"
|
||||
></van-field>
|
||||
</div>
|
||||
<van-popup position="bottom" round v-model="showHostUnitPicker">
|
||||
<div class="unit-select-toolbar">
|
||||
<button class="unit-select-cancel" type="button" @click="onHostUnitCancel">取消</button>
|
||||
<div class="unit-select-title">主办单位</div>
|
||||
<button class="unit-select-confirm" type="button" @click="onHostUnitConfirm">确定</button>
|
||||
</div>
|
||||
<van-search
|
||||
placeholder="请输入单位名称搜索"
|
||||
v-model="hostUnitSearchKey"
|
||||
></van-search>
|
||||
<van-picker
|
||||
:columns="hostUnitPickerOptions"
|
||||
@change="onHostUnitPickerChange"
|
||||
></van-picker>
|
||||
<van-empty description="暂无匹配单位" v-if="hostUnitPickerOptions.length === 0"></van-empty>
|
||||
</van-popup>
|
||||
<div class="info-row" v-if="formData.hostUnit">
|
||||
<span class="info-label">主办领导</span>
|
||||
<span class="info-value is-long">{{hostUnitLeader}}</span>
|
||||
</div>
|
||||
|
||||
<div class="info-picker-card">
|
||||
<van-field
|
||||
class="info-multi-value-field"
|
||||
clickable
|
||||
input-align="right"
|
||||
label="协办单位"
|
||||
label-class="info-picker-label"
|
||||
name="helpUnit"
|
||||
placeholder="请选择协办单位"
|
||||
readonly
|
||||
right-icon="arrow"
|
||||
@click="openHelpUnitPicker"
|
||||
>
|
||||
<template #input>
|
||||
<div class="info-multi-value" v-if="helpUnitName">{{helpUnitName}}</div>
|
||||
<div class="info-multi-value info-multi-placeholder" v-else>请选择协办单位</div>
|
||||
</template>
|
||||
</van-field>
|
||||
</div>
|
||||
<van-popup position="bottom" round v-model="showHelpUnitPicker">
|
||||
<div class="unit-select-toolbar">
|
||||
<button class="unit-select-cancel" type="button" @click="onHelpUnitCancel">取消</button>
|
||||
<div class="unit-select-title">协办单位</div>
|
||||
<button class="unit-select-confirm" type="button" @click="onHelpUnitConfirm">确定</button>
|
||||
</div>
|
||||
<van-search
|
||||
placeholder="请输入单位名称搜索"
|
||||
v-model="helpUnitSearchKey"
|
||||
></van-search>
|
||||
<div class="unit-select-list">
|
||||
<van-checkbox-group v-model="checkedHelpUnit" direction="vertical">
|
||||
<van-checkbox
|
||||
v-for="item in filterHelpUnitOptions"
|
||||
:key="item.id"
|
||||
:name="item.id"
|
||||
style="margin: 10px 0"
|
||||
>
|
||||
{{item.unitName}}
|
||||
</van-checkbox>
|
||||
</van-checkbox-group>
|
||||
<van-empty description="暂无匹配单位" v-if="filterHelpUnitOptions.length === 0"></van-empty>
|
||||
</div>
|
||||
</van-popup>
|
||||
<div class="info-row" v-if="formData.helpUnit && formData.helpUnit.length>0">
|
||||
<span class="info-label">协办领导</span>
|
||||
<span class="info-value is-long">{{helpUnitLeader}}</span>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<div class="info-textarea-field">
|
||||
<div class="info-textarea-label info-required-label">审核意见</div>
|
||||
<van-field
|
||||
v-model="formData.opinion"
|
||||
rows="4"
|
||||
autosize
|
||||
type="textarea"
|
||||
maxlength="500"
|
||||
placeholder="请填写您的审核意见"
|
||||
show-word-limit
|
||||
></van-field>
|
||||
</div>
|
||||
|
||||
<van-row class="info-footer-actions" type="flex" gutter="10">
|
||||
<van-col span="12">
|
||||
<van-button block class="info-ghost-button" :loading="formLoading" @click="doAudit(2)">
|
||||
退回修改
|
||||
</van-button>
|
||||
</van-col>
|
||||
<van-col span="12">
|
||||
<van-button :color="themeColor" block class="info-primary-button" :loading="formLoading"
|
||||
@click="doAudit(1)">
|
||||
提交
|
||||
</van-button>
|
||||
</van-col>
|
||||
</van-row>
|
||||
</van-form>
|
||||
</template>
|
||||
</proposal-info>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [mobileMixins],
|
||||
data() {
|
||||
return {
|
||||
leftArrow: false,
|
||||
handle: false,
|
||||
proposalId: GetQueryString('proposal_id'),
|
||||
formLoading: false,
|
||||
showResultCodePicker: false,
|
||||
showTypePicker: false,
|
||||
showNoFilingReasonPicker: false,
|
||||
showHostUnitPicker: false,
|
||||
showHelpUnitPicker: false,
|
||||
hostUnitSearchKey: '',
|
||||
helpUnitSearchKey: '',
|
||||
checkedHostUnit: '',
|
||||
checkedHelpUnit: [],
|
||||
resultOptions: [],
|
||||
typeOptions: [],
|
||||
unitOptions: [],
|
||||
noFilingReason: [],
|
||||
proposalStateCode: null,
|
||||
formData: {
|
||||
username: "${@shiro.getPrincipalProperty('username')}",
|
||||
loginName: "${@shiro.getPrincipalProperty('loginname')}",
|
||||
auditTime: moment().format('YYYY-MM-DD'),
|
||||
resultCode: '',
|
||||
hostUnit: '',
|
||||
helpUnit: [],
|
||||
opinion: '经提案工作组审理,该提案返回修改。',
|
||||
noFilingReason: '',
|
||||
sign: '',
|
||||
typeId: '',
|
||||
determineTypeCode: '',
|
||||
proposalId: GetQueryString('proposal_id')
|
||||
}
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
// 将接口返回的不同字段统一成 Picker 的 text/value 结构,text 用于展示,value 回写原表单提交字段。
|
||||
resultPickerOptions() {
|
||||
return this.resultOptions.map(v => {
|
||||
return {
|
||||
text: v.name,
|
||||
value: v.code
|
||||
}
|
||||
})
|
||||
},
|
||||
typePickerOptions() {
|
||||
return this.typeOptions.map(v => {
|
||||
return {
|
||||
text: v.typeName,
|
||||
value: v.id
|
||||
}
|
||||
})
|
||||
},
|
||||
unitPickerOptions() {
|
||||
return this.unitOptions.map(v => {
|
||||
return {
|
||||
text: v.unitName,
|
||||
value: v.id
|
||||
}
|
||||
})
|
||||
},
|
||||
hostUnitPickerOptions() {
|
||||
const key = this.hostUnitSearchKey ? this.hostUnitSearchKey.trim() : ''
|
||||
return this.unitOptions.filter(v => {
|
||||
return !key || v.unitName.includes(key)
|
||||
}).map(v => {
|
||||
return {
|
||||
text: v.unitName,
|
||||
value: v.id
|
||||
}
|
||||
})
|
||||
},
|
||||
filterHelpUnitOptions() {
|
||||
const key = this.helpUnitSearchKey ? this.helpUnitSearchKey.trim() : ''
|
||||
return this.unitOptions.filter(v => {
|
||||
return !key || v.unitName.includes(key)
|
||||
})
|
||||
},
|
||||
resultCodeName() {
|
||||
const result = this.resultOptions.find(v => v.code === this.formData.resultCode)
|
||||
return result ? result.name : ''
|
||||
},
|
||||
typeName() {
|
||||
const type = this.typeOptions.find(v => v.id === this.formData.typeId)
|
||||
return type ? type.typeName : ''
|
||||
},
|
||||
hostUnitName() {
|
||||
const hostUnit = this.unitOptions.find(v => v.id === this.formData.hostUnit)
|
||||
return hostUnit ? hostUnit.unitName : ''
|
||||
},
|
||||
helpUnitName() {
|
||||
const helpUnits = this.unitOptions.filter(v => this.formData.helpUnit.includes(v.id)).map(v => v.unitName)
|
||||
return helpUnits && helpUnits.length > 0 ? helpUnits.toString() : ''
|
||||
},
|
||||
hostUnitLeader() {
|
||||
const hostUnit = this.unitOptions.find(v => v.id === this.formData.hostUnit)
|
||||
return hostUnit && hostUnit.leader ? hostUnit.leader : '无'
|
||||
},
|
||||
helpUnitLeader() {
|
||||
const helpUnits = this.unitOptions.filter(v => this.formData.helpUnit.includes(v.id)).map(v => {
|
||||
return v.leader ? v.leader : '无'
|
||||
})
|
||||
return helpUnits && helpUnits.length > 0 ? helpUnits.toString() : '无'
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'proposal-info': httpVueLoader('/components/proposal/mobile/ProposalInfo.vue?v=' + new Date().getTime()),
|
||||
},
|
||||
methods: {
|
||||
initHandleState() {
|
||||
$.post('/platform/proposal/common/getProposalStateCode', {
|
||||
proposal_id: this.proposalId
|
||||
}).then((res) => {
|
||||
this.proposalStateCode = res.data
|
||||
this.handle = this.proposalStateCode === 300
|
||||
})
|
||||
},
|
||||
loadProposalInfo() {
|
||||
getProposalInfo(this.proposalId).then((data) => {
|
||||
if (data && data.typeId) {
|
||||
this.$set(this.formData, 'typeId', data.typeId)
|
||||
}
|
||||
})
|
||||
},
|
||||
loadOptions() {
|
||||
$.get('/platform/proposal/common/getDictByCode', {
|
||||
code: 'proposal_result'
|
||||
}).then((res) => {
|
||||
this.resultOptions = res.data
|
||||
}).then(() => $.get('/mobile/proposal/case/getUnderTakeAndLeader'))
|
||||
.then((res) => {
|
||||
this.unitOptions = res.data
|
||||
})
|
||||
.then(() => $.get('/platform/proposal/common/getProposalConfig'))
|
||||
.then((res) => {
|
||||
this.noFilingReason = res.data.noFilingReason
|
||||
})
|
||||
.then(() => $.get('/platform/proposal/common/getProposalType'))
|
||||
.then((res) => {
|
||||
this.typeOptions = res.data
|
||||
})
|
||||
},
|
||||
// 选择立案结果后同步原 resultCode 字段,并复用原有联动逻辑清理承办单位和刷新审核意见。
|
||||
onResultCodeConfirm(value) {
|
||||
this.$set(this.formData, 'resultCode', value.value)
|
||||
this.resultCodeChange(value.value)
|
||||
this.showResultCodePicker = false
|
||||
},
|
||||
// 选择提案类型后只回写 typeId,提交时继续使用后端原有参数结构。
|
||||
onTypeConfirm(value) {
|
||||
this.$set(this.formData, 'typeId', value.value)
|
||||
this.showTypePicker = false
|
||||
},
|
||||
onNoFilingReasonConfirm(value) {
|
||||
this.$set(this.formData, 'noFilingReason', value)
|
||||
this.$set(this.formData, 'opinion', '经提案工作组审理,该提案不予立案。' + value)
|
||||
this.showNoFilingReasonPicker = false
|
||||
},
|
||||
// 打开主办单位弹框时先暂存当前值,搜索和滚动选择不会立即影响原表单。
|
||||
openHostUnitPicker() {
|
||||
this.hostUnitSearchKey = ''
|
||||
this.checkedHostUnit = this.formData.hostUnit || (this.hostUnitPickerOptions[0] ? this.hostUnitPickerOptions[0].value : '')
|
||||
this.showHostUnitPicker = true
|
||||
},
|
||||
onHostUnitCancel() {
|
||||
this.showHostUnitPicker = false
|
||||
},
|
||||
onHostUnitPickerChange(picker, value) {
|
||||
this.checkedHostUnit = value && value.value ? value.value : ''
|
||||
},
|
||||
// 确认主办单位后回写 hostUnit,主办领导展示通过 computed 自动从 unitOptions 中匹配。
|
||||
onHostUnitConfirm() {
|
||||
if (!this.checkedHostUnit) {
|
||||
return
|
||||
}
|
||||
this.$set(this.formData, 'hostUnit', this.checkedHostUnit)
|
||||
this.showHostUnitPicker = false
|
||||
},
|
||||
// 打开协办单位弹框时先复制当前值,取消选择时不会影响原表单,确定后再统一回写。
|
||||
openHelpUnitPicker() {
|
||||
this.checkedHelpUnit = this.formData.helpUnit.concat()
|
||||
this.helpUnitSearchKey = ''
|
||||
this.showHelpUnitPicker = true
|
||||
},
|
||||
onHelpUnitCancel() {
|
||||
this.checkedHelpUnit = this.formData.helpUnit.concat()
|
||||
this.showHelpUnitPicker = false
|
||||
},
|
||||
onHelpUnitConfirm() {
|
||||
this.$set(this.formData, 'helpUnit', this.checkedHelpUnit.concat())
|
||||
this.showHelpUnitPicker = false
|
||||
},
|
||||
resultCodeChange(code) {
|
||||
this.$set(this.formData, 'hostUnit', '')
|
||||
this.$set(this.formData, 'helpUnit', [])
|
||||
this.$set(this.formData, 'noFilingReason', '')
|
||||
this.checkedHelpUnit = []
|
||||
if (code === 'opinion') {
|
||||
this.$set(this.formData, 'opinion', '经提案工作组审理,该提案作为意见建议。')
|
||||
} else if (code === 'notGive') {
|
||||
this.$set(this.formData, 'opinion', '经提案工作组审理,该提案不予立案。')
|
||||
} else if (code) {
|
||||
this.$set(this.formData, 'opinion', '经提案工作组审理,该提案确定立案。')
|
||||
} else {
|
||||
this.$set(this.formData, 'opinion', '经提案工作组审理,该提案返回修改。')
|
||||
}
|
||||
},
|
||||
validateForm(flag) {
|
||||
if (!this.formData.typeId) {
|
||||
vant.Toast('请选择提案类型')
|
||||
return false
|
||||
}
|
||||
if (flag === 1 && !this.formData.resultCode) {
|
||||
vant.Toast('请选择立案结果')
|
||||
return false
|
||||
}
|
||||
if (flag === 1 && this.formData.resultCode !== 'notGive' && !this.formData.hostUnit) {
|
||||
vant.Toast('请选择主办单位')
|
||||
return false
|
||||
}
|
||||
if (this.formData.helpUnit.find(v => v === this.formData.hostUnit)) {
|
||||
vant.Toast('协办单位中不能包含主办单位')
|
||||
return false
|
||||
}
|
||||
if (!this.formData.opinion) {
|
||||
vant.Toast('请填写审核意见')
|
||||
return false
|
||||
}
|
||||
return true
|
||||
},
|
||||
doAudit(flag) {
|
||||
if (!this.validateForm(flag) || this.formLoading) {
|
||||
return
|
||||
}
|
||||
const msg = flag === 2 ? '请确认是否退回到团长?' : this.formData.resultCode === 'notGive' ? '该提案不予立案,提交后将完结,请确认!' : '请确认是否提交该提案?'
|
||||
vant.Dialog.confirm({
|
||||
title: '提示',
|
||||
message: msg,
|
||||
}).then(() => {
|
||||
this.formLoading = true
|
||||
$.post('/mobile/proposal/case/audit', {
|
||||
audit: JSON.stringify(this.formData),
|
||||
resultCode: this.formData.resultCode,
|
||||
typeId: this.formData.typeId,
|
||||
hostUnit: this.formData.hostUnit,
|
||||
helpUnit: JSON.stringify(this.formData.helpUnit),
|
||||
sign: this.formData.sign,
|
||||
determineTypeCode: this.formData.determineTypeCode,
|
||||
proposalIds: JSON.stringify([this.proposalId]),
|
||||
auditType: 'one',
|
||||
flag: flag
|
||||
}).then((res) => {
|
||||
if (res.code === 0) {
|
||||
this.$toast.success('提交成功')
|
||||
this.handle = false
|
||||
this.$refs.info.openView(this.proposalId)
|
||||
} else {
|
||||
this.$toast.fail(res.msg || '提交失败,请联系管理员')
|
||||
}
|
||||
}).always(() => {
|
||||
this.formLoading = false
|
||||
})
|
||||
})
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
hostUnitPickerOptions(value) {
|
||||
if (!this.showHostUnitPicker) {
|
||||
return
|
||||
}
|
||||
if (!value.some(v => v.value === this.checkedHostUnit)) {
|
||||
this.checkedHostUnit = value[0] ? value[0].value : ''
|
||||
}
|
||||
}
|
||||
},
|
||||
created() {
|
||||
if (GetQueryString('mobile')) {
|
||||
this.leftArrow = true
|
||||
}
|
||||
const proposalId = GetQueryString('proposal_id')
|
||||
const bizKey = GetQueryString('biz_key')
|
||||
if (proposalId === '' || bizKey === '') {
|
||||
vant.Dialog.alert({
|
||||
title: '提示',
|
||||
message: '非法参数',
|
||||
showConfirmButton: false
|
||||
})
|
||||
return
|
||||
}
|
||||
this.loadOptions()
|
||||
this.loadProposalInfo()
|
||||
this.initHandleState()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,193 @@
|
||||
<!--#
|
||||
layout("/mobile/platform.html"){
|
||||
#-->
|
||||
<div id="app" v-cloak>
|
||||
<m-page-loading v-if="mLoading"></m-page-loading>
|
||||
<van-nav-bar
|
||||
title="提案工作组预立案"
|
||||
left-arrow
|
||||
placeholder
|
||||
fixed
|
||||
@click-left="pjaxReplace('/mobile/index')"
|
||||
></van-nav-bar>
|
||||
|
||||
<div class="search-fixed">
|
||||
<van-search
|
||||
v-model="pageForm.searchKeyWord"
|
||||
shape="round"
|
||||
maxlength="10"
|
||||
@search="doSearch"
|
||||
placeholder="请输入提案名称或者提案编号进行查询"
|
||||
></van-search>
|
||||
|
||||
<van-dropdown-menu>
|
||||
<van-dropdown-item v-model="pageForm.meetingId" :options="sessionList"
|
||||
@change="doSearch"></van-dropdown-item>
|
||||
<van-dropdown-item v-model="pageForm.proposalTypeId" :options="proposalTypeList"
|
||||
@change="doSearch"></van-dropdown-item>
|
||||
<van-dropdown-item v-model="pageForm.proposalResultCode" :options="resultList"
|
||||
@change="doSearch"></van-dropdown-item>
|
||||
</van-dropdown-menu>
|
||||
|
||||
<van-tabs v-model="pageForm.isAudit" @change="doSearch">
|
||||
<van-tab title="全部" name=""></van-tab>
|
||||
<van-tab title="已审核" name="true"></van-tab>
|
||||
<van-tab title="待审核" name="false"></van-tab>
|
||||
</van-tabs>
|
||||
</div>
|
||||
|
||||
<div style="margin: 170px auto 0">
|
||||
<van-list
|
||||
v-if="pageForm.meetingId"
|
||||
v-model="mLoading"
|
||||
:immediate-check="false"
|
||||
:finished="finished"
|
||||
:finished-text="tableData.length>0?'没有更多了':''"
|
||||
@load="onLoad">
|
||||
<div v-for="o in tableData" class="list-card" :style="{'--card-accent': o.stateColor || '#2563eb'}"
|
||||
@click="openView(o)">
|
||||
<div class="card-header">
|
||||
<div class="card-title">
|
||||
{{o.proposalName}}
|
||||
</div>
|
||||
<span class="badge" :class="o.stateCode === 300 ? 'badge-draft' : 'badge-blue'">
|
||||
{{o.stateCode === 300 ? '待审核' : '已审核'}}
|
||||
</span>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div class="card-item">
|
||||
<span class="card-label">提案编号:</span>
|
||||
<span class="card-value">{{o.proposalCode}}</span>
|
||||
</div>
|
||||
<div class="card-item">
|
||||
<span class="card-label">提案类型:</span>
|
||||
<span class="card-value">{{o.typeName}}</span>
|
||||
</div>
|
||||
<div class="card-item">
|
||||
<span class="card-label">代表团:</span>
|
||||
<span class="card-value">{{o.delegationName}}</span>
|
||||
</div>
|
||||
<div class="card-item">
|
||||
<span class="card-label">提案届次:</span>
|
||||
<span class="card-value">{{o.meetingName}}</span>
|
||||
</div>
|
||||
<div class="card-item">
|
||||
<span class="card-label">提案状态:</span>
|
||||
<span class="card-value">{{o.stateName}}</span>
|
||||
</div>
|
||||
<div class="card-item">
|
||||
<span class="card-label">是否并案:</span>
|
||||
<span class="card-value">{{o.stateCode === 300 ? '暂无' : o.isConjoin === 1 ? '是' : '否'}}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-footer" v-if="o.resultName">
|
||||
<span class="card-label">立案结果:</span>
|
||||
<span class="card-value">{{o.resultName}}</span>
|
||||
</div>
|
||||
</div>
|
||||
</van-list>
|
||||
<van-empty
|
||||
v-if="mLoading==false&&tableData.length==0"
|
||||
class="custom-image"
|
||||
image="/none.svg"
|
||||
description="暂无数据"
|
||||
></van-empty>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [mobileMixins],
|
||||
data() {
|
||||
return {
|
||||
pageForm: {
|
||||
isAudit: 'false'
|
||||
},
|
||||
sessionList: [],
|
||||
proposalTypeList: [],
|
||||
resultList: [],
|
||||
listLoading: false
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
doSearch() {
|
||||
this.$set(this.pageForm, 'pageNumber', 1)
|
||||
this.tableData = []
|
||||
this.finished = false
|
||||
this.onLoad()
|
||||
},
|
||||
onLoad() {
|
||||
if (this.listLoading || this.finished) {
|
||||
return
|
||||
}
|
||||
this.listLoading = true
|
||||
this.mLoading = true
|
||||
$.post(loc() + '/pageData', this.pageForm)
|
||||
.then((res) => {
|
||||
if (res.code === 0) {
|
||||
this.tableData = this.tableData.concat(res.data.list)
|
||||
if (this.tableData.length >= res.data.totalCount) {
|
||||
this.finished = true
|
||||
} else {
|
||||
this.$set(this.pageForm, 'pageNumber', this.pageForm.pageNumber + 1)
|
||||
}
|
||||
}
|
||||
})
|
||||
.always(() => {
|
||||
this.listLoading = false
|
||||
this.mLoading = false
|
||||
})
|
||||
},
|
||||
openView(row) {
|
||||
window.location.href = '/mobile/proposal/case/view?biz_key=' + row.id + '&proposal_id=' + row.id + '&stateCode=' + row.stateCode + '&mobile=' + true
|
||||
},
|
||||
loadOptions() {
|
||||
$.get('/mobile/proposal/common/getAllSession')
|
||||
.then((res) => {
|
||||
this.sessionList = res.data
|
||||
if (this.sessionList && this.sessionList.length > 0) {
|
||||
this.$set(this.pageForm, 'meetingId', this.sessionList[0].value)
|
||||
}
|
||||
})
|
||||
.then(() => $.get('/mobile/proposal/common/getProposalType'))
|
||||
.then((res) => {
|
||||
this.proposalTypeList = res.data
|
||||
if (this.proposalTypeList && this.proposalTypeList.length > 0) {
|
||||
this.$set(this.pageForm, 'proposalTypeId', this.proposalTypeList[0].value)
|
||||
}
|
||||
})
|
||||
.then(() => $.get('/mobile/proposal/common/getProposalDict'))
|
||||
.then((res) => {
|
||||
this.resultList = res.data
|
||||
if (this.resultList && this.resultList.length > 0) {
|
||||
this.$set(this.pageForm, 'proposalResultCode', this.resultList[0].value)
|
||||
}
|
||||
this.onLoad()
|
||||
})
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.$set(this.pageForm, 'pageNumber', 1)
|
||||
this.$set(this.pageForm, 'pageSize', 5)
|
||||
this.$set(this.pageForm, 'totalCount', 0)
|
||||
this.loadOptions()
|
||||
}
|
||||
})
|
||||
|
||||
window.addEventListener('pageshow', (e) => {
|
||||
if (e.persisted || (window.performance && window.performance.navigation.type === 2)) {
|
||||
vue.$set(vue.pageForm, 'pageNumber', 1)
|
||||
vue.$set(vue.pageForm, 'meetingId', null)
|
||||
vue.tableData = []
|
||||
vue.finished = false
|
||||
vue.loadOptions()
|
||||
}
|
||||
})
|
||||
|
||||
</script>
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,147 @@
|
||||
<!--#
|
||||
layout("/mobile/platform.html"){
|
||||
#-->
|
||||
<div id="app" v-cloak>
|
||||
<van-nav-bar title="提案工作组意见" fixed placeholder :left-arrow="leftArrow" safe-area-inset-top
|
||||
@click-left="pjaxReplace('/mobile/proposal/caseRead')"></van-nav-bar>
|
||||
<proposal-info :proposal_id="proposalId" title="提案工作组意见" :handle="handle" ref="info">
|
||||
<template #handle>
|
||||
<div class="van-cell-group__title" style="padding: 5px 0 0 0 !important;">
|
||||
<div class="van-sidebar-item van-sidebar-item--select">
|
||||
成员意见
|
||||
</div>
|
||||
</div>
|
||||
<van-form>
|
||||
<van-cell-group class="info">
|
||||
<van-cell title="审核人" :value="formData.username"></van-cell>
|
||||
<van-cell title="审核时间" :value="formData.auditTime"></van-cell>
|
||||
<van-field name="other" label="立案意见">
|
||||
<template #input>
|
||||
<van-radio-group v-model="formData.other" direction="vertical">
|
||||
<van-radio v-for="item in resultOptions" :name="item.code" style="margin: 8px 0">
|
||||
{{item.name}}
|
||||
</van-radio>
|
||||
</van-radio-group>
|
||||
</template>
|
||||
</van-field>
|
||||
<van-field
|
||||
input-align="right"
|
||||
v-model="formData.opinion"
|
||||
rows="3"
|
||||
autosize
|
||||
label="审核意见"
|
||||
type="textarea"
|
||||
maxlength="1000"
|
||||
placeholder="请填写您的意见"
|
||||
show-word-limit
|
||||
></van-field>
|
||||
</van-cell-group>
|
||||
|
||||
<van-row type="flex" style="padding: 20px 10px">
|
||||
<van-button :color="themeColor" block size="large" :loading="formLoading" @click="doAudit">提交
|
||||
</van-button>
|
||||
</van-row>
|
||||
|
||||
</van-form>
|
||||
</template>
|
||||
</proposal-info>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [mobileMixins],
|
||||
data() {
|
||||
return {
|
||||
leftArrow: false,
|
||||
handle: false,
|
||||
proposalId: GetQueryString('proposal_id'),
|
||||
formLoading: false,
|
||||
resultOptions: [],
|
||||
proposalStateCode: null,
|
||||
formData: {
|
||||
username: "${@shiro.getPrincipalProperty('username')}",
|
||||
loginName: "${@shiro.getPrincipalProperty('loginname')}",
|
||||
auditTime: moment().format('YYYY-MM-DD'),
|
||||
opinion: '',
|
||||
sign: '',
|
||||
other: 'determine',
|
||||
determineTypeCode: 'ordinary',
|
||||
proposalId: GetQueryString('proposal_id')
|
||||
}
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'proposal-info': httpVueLoader('/components/proposal/mobile/ProposalInfo.vue?v=' + new Date().getTime()),
|
||||
},
|
||||
methods: {
|
||||
initHandleState() {
|
||||
$.post('/platform/proposal/common/getProposalStateCode', {
|
||||
proposal_id: this.proposalId
|
||||
}).then((res) => {
|
||||
const isOpinion = GetQueryString('isOpinion')
|
||||
this.proposalStateCode = res.data
|
||||
this.handle = this.proposalStateCode === 300 && isOpinion !== 'true' && isOpinion !== '1'
|
||||
})
|
||||
},
|
||||
loadResultOptions() {
|
||||
$.get('/platform/proposal/common/getDictByCode', {
|
||||
code: 'proposal_result'
|
||||
}).then((res) => {
|
||||
this.resultOptions = res.data
|
||||
})
|
||||
},
|
||||
doAudit() {
|
||||
if (!this.formData.other) {
|
||||
vant.Toast('请选择立案意见')
|
||||
return
|
||||
}
|
||||
if (this.formLoading) {
|
||||
return
|
||||
}
|
||||
vant.Dialog.confirm({
|
||||
title: '提示',
|
||||
message: '您确定提交该提案的成员意见吗?',
|
||||
}).then(() => {
|
||||
this.formLoading = true
|
||||
$.post('/mobile/proposal/caseRead/putSuggestion', {
|
||||
audit: JSON.stringify(this.formData),
|
||||
sign: this.formData.sign,
|
||||
proposalId: this.proposalId
|
||||
}).then((res) => {
|
||||
if (res.code === 0) {
|
||||
this.$toast.success('提交成功')
|
||||
this.handle = false
|
||||
this.$refs.info.openView(this.proposalId)
|
||||
} else {
|
||||
this.$toast.fail(res.msg || '提交失败,请联系管理员')
|
||||
}
|
||||
}).always(() => {
|
||||
this.formLoading = false
|
||||
})
|
||||
})
|
||||
}
|
||||
},
|
||||
created() {
|
||||
if (GetQueryString('mobile')) {
|
||||
this.leftArrow = true
|
||||
}
|
||||
const proposalId = GetQueryString('proposal_id')
|
||||
const bizKey = GetQueryString('biz_key')
|
||||
if (proposalId === '' || bizKey === '') {
|
||||
vant.Dialog.alert({
|
||||
title: '提示',
|
||||
message: '非法参数',
|
||||
showConfirmButton: false
|
||||
})
|
||||
return
|
||||
}
|
||||
this.loadResultOptions()
|
||||
this.initHandleState()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,184 @@
|
||||
<!--#
|
||||
layout("/mobile/platform.html"){
|
||||
#-->
|
||||
<div id="app" v-cloak>
|
||||
<m-page-loading v-if="mLoading"></m-page-loading>
|
||||
<van-nav-bar
|
||||
title="提案工作组意见"
|
||||
left-arrow
|
||||
placeholder
|
||||
fixed
|
||||
@click-left="pjaxReplace('/mobile/index')"
|
||||
></van-nav-bar>
|
||||
|
||||
<div class="search-fixed">
|
||||
<van-search
|
||||
v-model="pageForm.searchKeyWord"
|
||||
shape="round"
|
||||
maxlength="10"
|
||||
@search="doSearch"
|
||||
placeholder="请输入提案名称或者提案编号进行查询"
|
||||
></van-search>
|
||||
|
||||
<van-dropdown-menu>
|
||||
<van-dropdown-item v-model="pageForm.meetingId" :options="sessionList"
|
||||
@change="doSearch"></van-dropdown-item>
|
||||
<van-dropdown-item v-model="pageForm.proposalTypeId" :options="proposalTypeList"
|
||||
@change="doSearch"></van-dropdown-item>
|
||||
<van-dropdown-item v-model="pageForm.proposalResultCode" :options="resultList"
|
||||
@change="doSearch"></van-dropdown-item>
|
||||
</van-dropdown-menu>
|
||||
|
||||
<van-tabs v-model="pageForm.isAudit" @change="doSearch">
|
||||
<van-tab title="全部" name=""></van-tab>
|
||||
<van-tab title="已建议" name="true"></van-tab>
|
||||
<van-tab title="未建议" name="false"></van-tab>
|
||||
</van-tabs>
|
||||
</div>
|
||||
|
||||
<div style="margin: 170px auto 0">
|
||||
<van-list
|
||||
v-if="pageForm.meetingId"
|
||||
v-model="mLoading"
|
||||
:immediate-check="false"
|
||||
:finished="finished"
|
||||
:finished-text="tableData.length>0?'没有更多了':''"
|
||||
@load="onLoad">
|
||||
<div v-for="o in tableData" class="list-card" :style="{'--card-accent': o.stateColor || '#2563eb'}" @click="openView(o)">
|
||||
<div class="card-header">
|
||||
<div class="card-title">
|
||||
{{o.proposalName}}
|
||||
</div>
|
||||
<span class="badge badge-blue">
|
||||
{{o.stateName}}
|
||||
</span>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div class="card-item">
|
||||
<span class="card-label">提案编号:</span>
|
||||
<span class="card-value">{{o.proposalCode}}</span>
|
||||
</div>
|
||||
<div class="card-item">
|
||||
<span class="card-label">提案类型:</span>
|
||||
<span class="card-value">{{o.typeName}}</span>
|
||||
</div>
|
||||
<div class="card-item">
|
||||
<span class="card-label">代表团:</span>
|
||||
<span class="card-value">{{o.delegationName}}</span>
|
||||
</div>
|
||||
<div class="card-item">
|
||||
<span class="card-label">提案届次:</span>
|
||||
<span class="card-value">{{o.meetingName}}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-footer" v-if="o.resultName">
|
||||
<span class="card-label">立案结果:</span>
|
||||
<span class="card-value">{{o.resultName}}</span>
|
||||
</div>
|
||||
</div>
|
||||
</van-list>
|
||||
<van-empty
|
||||
v-if="mLoading==false&&tableData.length==0"
|
||||
class="custom-image"
|
||||
image="/none.svg"
|
||||
description="暂无数据"
|
||||
></van-empty>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [mobileMixins],
|
||||
data() {
|
||||
return {
|
||||
pageForm: {
|
||||
isAudit: 'false'
|
||||
},
|
||||
sessionList: [],
|
||||
proposalTypeList: [],
|
||||
resultList: [],
|
||||
listLoading: false
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
doSearch() {
|
||||
this.$set(this.pageForm, 'pageNumber', 1)
|
||||
this.tableData = []
|
||||
this.finished = false
|
||||
this.onLoad()
|
||||
},
|
||||
onLoad() {
|
||||
if (this.listLoading || this.finished) {
|
||||
return
|
||||
}
|
||||
this.listLoading = true
|
||||
this.mLoading = true
|
||||
$.post(loc() + '/pageData', this.pageForm)
|
||||
.then((res) => {
|
||||
if (res.code === 0) {
|
||||
this.tableData = this.tableData.concat(res.data.list)
|
||||
if (this.tableData.length >= res.data.totalCount) {
|
||||
this.finished = true
|
||||
} else {
|
||||
this.$set(this.pageForm, 'pageNumber', this.pageForm.pageNumber + 1)
|
||||
}
|
||||
}
|
||||
})
|
||||
.always(() => {
|
||||
this.listLoading = false
|
||||
this.mLoading = false
|
||||
})
|
||||
},
|
||||
openView(row) {
|
||||
window.location.href = '/mobile/proposal/caseRead/view?biz_key=' + row.id + '&proposal_id=' + row.id + '&isOpinion=' + row.isOpinion + '&mobile=' + true
|
||||
},
|
||||
loadOptions() {
|
||||
$.get('/mobile/proposal/common/getAllSession')
|
||||
.then((res) => {
|
||||
this.sessionList = res.data
|
||||
if (this.sessionList && this.sessionList.length > 0) {
|
||||
this.$set(this.pageForm, 'meetingId', this.sessionList[0].value)
|
||||
}
|
||||
})
|
||||
.then(() => $.get('/mobile/proposal/common/getProposalType'))
|
||||
.then((res) => {
|
||||
this.proposalTypeList = res.data
|
||||
if (this.proposalTypeList && this.proposalTypeList.length > 0) {
|
||||
this.$set(this.pageForm, 'proposalTypeId', this.proposalTypeList[0].value)
|
||||
}
|
||||
})
|
||||
.then(() => $.get('/mobile/proposal/common/getProposalDict'))
|
||||
.then((res) => {
|
||||
this.resultList = res.data
|
||||
if (this.resultList && this.resultList.length > 0) {
|
||||
this.$set(this.pageForm, 'proposalResultCode', this.resultList[0].value)
|
||||
}
|
||||
this.onLoad()
|
||||
})
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.$set(this.pageForm, 'pageNumber', 1)
|
||||
this.$set(this.pageForm, 'pageSize', 5)
|
||||
this.$set(this.pageForm, 'totalCount', 0)
|
||||
this.loadOptions()
|
||||
}
|
||||
})
|
||||
|
||||
window.addEventListener('pageshow', (e) => {
|
||||
if (e.persisted || (window.performance && window.performance.navigation.type === 2)) {
|
||||
vue.$set(vue.pageForm, 'pageNumber', 1)
|
||||
vue.$set(vue.pageForm, 'meetingId', null)
|
||||
vue.tableData = []
|
||||
vue.finished = false
|
||||
vue.loadOptions()
|
||||
}
|
||||
})
|
||||
|
||||
</script>
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,515 @@
|
||||
<!--#
|
||||
layout("/mobile/platform.html"){
|
||||
#-->
|
||||
<div id="app" v-cloak>
|
||||
<van-nav-bar title="提案工作组正式立案" fixed placeholder :left-arrow="leftArrow" safe-area-inset-top
|
||||
@click-left="pjaxReplace('/mobile/proposal/caseUnit')"></van-nav-bar>
|
||||
<proposal-info :proposal_id="proposalId" title="提案工作组正式立案" :handle="handle" ref="info">
|
||||
<template #handle>
|
||||
<div class="info-section-title">正式立案审核</div>
|
||||
<van-form class="info-cell-form">
|
||||
<div class="info-row">
|
||||
<span class="info-label">审核人</span>
|
||||
<span class="info-value">{{formData.username}}</span>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<span class="info-label">审核时间</span>
|
||||
<span class="info-value">{{formData.auditTime}}</span>
|
||||
</div>
|
||||
|
||||
<div class="info-picker-card">
|
||||
<van-field
|
||||
:value="resultCodeName"
|
||||
clickable
|
||||
input-align="right"
|
||||
label="立案结果"
|
||||
label-class="info-picker-label"
|
||||
name="resultCode"
|
||||
placeholder="请选择立案结果"
|
||||
required
|
||||
readonly
|
||||
right-icon="arrow"
|
||||
@click="showResultCodePicker = true"
|
||||
></van-field>
|
||||
</div>
|
||||
<van-popup position="bottom" round v-model="showResultCodePicker">
|
||||
<van-picker
|
||||
:columns="resultPickerOptions"
|
||||
@cancel="showResultCodePicker = false"
|
||||
@confirm="onResultCodeConfirm"
|
||||
show-toolbar
|
||||
></van-picker>
|
||||
</van-popup>
|
||||
|
||||
<div class="info-picker-card">
|
||||
<van-field
|
||||
:value="typeName"
|
||||
clickable
|
||||
input-align="right"
|
||||
label="提案类型"
|
||||
label-class="info-picker-label"
|
||||
name="typeId"
|
||||
placeholder="请选择提案类型"
|
||||
required
|
||||
readonly
|
||||
right-icon="arrow"
|
||||
@click="showTypePicker = true"
|
||||
></van-field>
|
||||
</div>
|
||||
<van-popup position="bottom" round v-model="showTypePicker">
|
||||
<van-picker
|
||||
:columns="typePickerOptions"
|
||||
@cancel="showTypePicker = false"
|
||||
@confirm="onTypeConfirm"
|
||||
show-toolbar
|
||||
></van-picker>
|
||||
</van-popup>
|
||||
|
||||
<template v-if="formData.resultCode!='notGive'">
|
||||
<div class="info-picker-card">
|
||||
<van-field
|
||||
:value="hostUnitName"
|
||||
clickable
|
||||
input-align="right"
|
||||
label="主办单位"
|
||||
label-class="info-picker-label"
|
||||
name="hostUnit"
|
||||
placeholder="请选择主办单位"
|
||||
:required="formData.resultCode !== 'notGive'"
|
||||
readonly
|
||||
right-icon="arrow"
|
||||
@click="openHostUnitPicker"
|
||||
></van-field>
|
||||
</div>
|
||||
<van-popup position="bottom" round v-model="showHostUnitPicker">
|
||||
<div class="unit-select-toolbar">
|
||||
<button class="unit-select-cancel" type="button" @click="onHostUnitCancel">取消</button>
|
||||
<div class="unit-select-title">主办单位</div>
|
||||
<button class="unit-select-confirm" type="button" @click="onHostUnitConfirm">确定</button>
|
||||
</div>
|
||||
<van-search
|
||||
placeholder="请输入单位名称搜索"
|
||||
v-model="hostUnitSearchKey"
|
||||
></van-search>
|
||||
<van-picker
|
||||
:columns="hostUnitPickerOptions"
|
||||
@change="onHostUnitPickerChange"
|
||||
></van-picker>
|
||||
<van-empty description="暂无匹配单位" v-if="hostUnitPickerOptions.length === 0"></van-empty>
|
||||
</van-popup>
|
||||
<div class="info-row" v-if="formData.hostUnit">
|
||||
<span class="info-label">主办领导</span>
|
||||
<span class="info-value is-long">{{hostUnitLeader}}</span>
|
||||
</div>
|
||||
|
||||
<div class="info-picker-card">
|
||||
<van-field
|
||||
class="info-multi-value-field"
|
||||
clickable
|
||||
input-align="right"
|
||||
label="协办单位"
|
||||
label-class="info-picker-label"
|
||||
name="helpUnit"
|
||||
placeholder="请选择协办单位"
|
||||
readonly
|
||||
right-icon="arrow"
|
||||
@click="openHelpUnitPicker"
|
||||
>
|
||||
<template #input>
|
||||
<div class="info-multi-value" v-if="helpUnitName">{{helpUnitName}}</div>
|
||||
<div class="info-multi-value info-multi-placeholder" v-else>请选择协办单位</div>
|
||||
</template>
|
||||
</van-field>
|
||||
</div>
|
||||
<van-popup position="bottom" round v-model="showHelpUnitPicker">
|
||||
<div class="unit-select-toolbar">
|
||||
<button class="unit-select-cancel" type="button" @click="onHelpUnitCancel">取消</button>
|
||||
<div class="unit-select-title">协办单位</div>
|
||||
<button class="unit-select-confirm" type="button" @click="onHelpUnitConfirm">确定</button>
|
||||
</div>
|
||||
<van-search
|
||||
placeholder="请输入单位名称搜索"
|
||||
v-model="helpUnitSearchKey"
|
||||
></van-search>
|
||||
<div class="unit-select-list">
|
||||
<van-checkbox-group v-model="checkedHelpUnit" direction="vertical">
|
||||
<van-checkbox
|
||||
v-for="item in filterHelpUnitOptions"
|
||||
:key="item.id"
|
||||
:name="item.id"
|
||||
style="margin: 10px 0"
|
||||
>
|
||||
{{item.unitName}}
|
||||
</van-checkbox>
|
||||
</van-checkbox-group>
|
||||
<van-empty description="暂无匹配单位" v-if="filterHelpUnitOptions.length === 0"></van-empty>
|
||||
</div>
|
||||
</van-popup>
|
||||
<div class="info-row" v-if="formData.helpUnit && formData.helpUnit.length>0">
|
||||
<span class="info-label">协办领导</span>
|
||||
<span class="info-value is-long">{{helpUnitLeader}}</span>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<div class="info-textarea-field">
|
||||
<div class="info-textarea-label info-required-label">审核意见</div>
|
||||
<van-field
|
||||
v-model="formData.opinion"
|
||||
rows="4"
|
||||
autosize
|
||||
type="textarea"
|
||||
maxlength="500"
|
||||
placeholder="请填写工作会的审核意见"
|
||||
show-word-limit
|
||||
></van-field>
|
||||
</div>
|
||||
|
||||
<van-row class="info-footer-actions" type="flex" gutter="10">
|
||||
<van-col span="12">
|
||||
<van-button block class="info-ghost-button" :loading="formLoading"
|
||||
@click="pjaxReplace('/mobile/proposal/caseUnit')">
|
||||
取消
|
||||
</van-button>
|
||||
</van-col>
|
||||
<van-col span="12">
|
||||
<van-button :color="themeColor" block class="info-primary-button" :loading="formLoading"
|
||||
@click="doAudit">
|
||||
提交
|
||||
</van-button>
|
||||
</van-col>
|
||||
</van-row>
|
||||
</van-form>
|
||||
</template>
|
||||
</proposal-info>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [mobileMixins],
|
||||
data() {
|
||||
return {
|
||||
leftArrow: false,
|
||||
handle: false,
|
||||
proposalId: GetQueryString('proposal_id'),
|
||||
formLoading: false,
|
||||
showResultCodePicker: false,
|
||||
showTypePicker: false,
|
||||
showHostUnitPicker: false,
|
||||
showHelpUnitPicker: false,
|
||||
hostUnitSearchKey: '',
|
||||
helpUnitSearchKey: '',
|
||||
checkedHostUnit: '',
|
||||
checkedHelpUnit: [],
|
||||
resultOptions: [],
|
||||
typeOptions: [],
|
||||
unitOptions: [],
|
||||
proposalStateCode: null,
|
||||
proposalIds: [GetQueryString('proposal_id')],
|
||||
formData: {
|
||||
username: "${@shiro.getPrincipalProperty('username')}",
|
||||
loginName: "${@shiro.getPrincipalProperty('loginname')}",
|
||||
auditTime: moment().format('YYYY-MM-DD'),
|
||||
resultCode: 'determine',
|
||||
hostUnit: '',
|
||||
helpUnit: [],
|
||||
opinion: '经提案委员会审理,该提案确定立案。',
|
||||
sign: '',
|
||||
typeId: '',
|
||||
determineTypeCode: '',
|
||||
proposalId: GetQueryString('proposal_id')
|
||||
}
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
// 将字典和实体列表统一成 Picker 的 text/value 结构,确认时回写原提交字段。
|
||||
resultPickerOptions() {
|
||||
return this.resultOptions.map(v => {
|
||||
return {
|
||||
text: v.name,
|
||||
value: v.code
|
||||
}
|
||||
})
|
||||
},
|
||||
typePickerOptions() {
|
||||
return this.typeOptions.map(v => {
|
||||
return {
|
||||
text: v.typeName,
|
||||
value: v.id
|
||||
}
|
||||
})
|
||||
},
|
||||
hostUnitPickerOptions() {
|
||||
const key = this.hostUnitSearchKey ? this.hostUnitSearchKey.trim() : ''
|
||||
return this.unitOptions.filter(v => {
|
||||
return !key || v.unitName.includes(key)
|
||||
}).map(v => {
|
||||
return {
|
||||
text: v.unitName,
|
||||
value: v.id
|
||||
}
|
||||
})
|
||||
},
|
||||
filterHelpUnitOptions() {
|
||||
const key = this.helpUnitSearchKey ? this.helpUnitSearchKey.trim() : ''
|
||||
return this.unitOptions.filter(v => {
|
||||
return !key || v.unitName.includes(key)
|
||||
})
|
||||
},
|
||||
resultCodeName() {
|
||||
const result = this.resultOptions.find(v => v.code === this.formData.resultCode)
|
||||
return result ? result.name : ''
|
||||
},
|
||||
typeName() {
|
||||
const type = this.typeOptions.find(v => v.id === this.formData.typeId)
|
||||
return type ? type.typeName : ''
|
||||
},
|
||||
hostUnitName() {
|
||||
const hostUnit = this.unitOptions.find(v => v.id === this.formData.hostUnit)
|
||||
return hostUnit ? hostUnit.unitName : ''
|
||||
},
|
||||
helpUnitName() {
|
||||
const helpUnits = this.unitOptions.filter(v => this.formData.helpUnit.includes(v.id)).map(v => v.unitName)
|
||||
return helpUnits && helpUnits.length > 0 ? helpUnits.toString() : ''
|
||||
},
|
||||
hostUnitLeader() {
|
||||
const hostUnit = this.unitOptions.find(v => v.id === this.formData.hostUnit)
|
||||
return hostUnit && hostUnit.leader ? hostUnit.leader : '无'
|
||||
},
|
||||
helpUnitLeader() {
|
||||
const helpUnits = this.unitOptions.filter(v => this.formData.helpUnit.includes(v.id)).map(v => {
|
||||
return v.leader ? v.leader : '无'
|
||||
})
|
||||
return helpUnits && helpUnits.length > 0 ? helpUnits.toString() : '无'
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'proposal-info': httpVueLoader('/components/proposal/mobile/ProposalInfo.vue?v=' + new Date().getTime()),
|
||||
},
|
||||
methods: {
|
||||
initHandleState() {
|
||||
$.post('/platform/proposal/common/getProposalStateCode', {
|
||||
proposal_id: this.proposalId
|
||||
}).then((res) => {
|
||||
this.proposalStateCode = res.data
|
||||
this.handle = this.proposalStateCode === 400
|
||||
})
|
||||
},
|
||||
loadProposalInfo() {
|
||||
getProposalInfo(this.proposalId).then((data) => {
|
||||
if (data && data.typeId) {
|
||||
this.$set(this.formData, 'typeId', data.typeId)
|
||||
}
|
||||
if (data && data.resultCode) {
|
||||
this.$set(this.formData, 'resultCode', data.resultCode)
|
||||
this.setOpinionByResultCode(data.resultCode)
|
||||
}
|
||||
if (data && data.determineTypeCode) {
|
||||
this.$set(this.formData, 'determineTypeCode', data.determineTypeCode)
|
||||
}
|
||||
})
|
||||
},
|
||||
loadUnderTake() {
|
||||
$.get('/mobile/proposal/caseUnit/queryUnderTakeByProposalId', {
|
||||
proposalId: this.proposalId
|
||||
}).then((res) => {
|
||||
const underTakes = res.data || []
|
||||
const hostUnit = underTakes.find(v => v.undertakeType === 1)
|
||||
if (hostUnit) {
|
||||
this.$set(this.formData, 'hostUnit', hostUnit.replyUnitId)
|
||||
}
|
||||
this.$set(this.formData, 'helpUnit', underTakes.filter(v => v.undertakeType === 2).map(v => v.replyUnitId))
|
||||
})
|
||||
},
|
||||
loadConjoinProposal() {
|
||||
$.get('/platform/proposal/common/findConjoinProposal', {
|
||||
proposalId: this.proposalId
|
||||
}).then((res) => {
|
||||
const proposals = res.data || []
|
||||
if (proposals.length > 0) {
|
||||
this.proposalIds = proposals.map(v => v.id)
|
||||
}
|
||||
})
|
||||
},
|
||||
loadOptions() {
|
||||
$.get('/platform/proposal/common/getDictByCode', {
|
||||
code: 'proposal_result'
|
||||
}).then((res) => {
|
||||
this.resultOptions = res.data
|
||||
}).then(() => $.get('/mobile/proposal/caseUnit/getUnderTakeAndLeader'))
|
||||
.then((res) => {
|
||||
this.unitOptions = res.data
|
||||
})
|
||||
.then(() => $.get('/platform/proposal/common/getProposalType'))
|
||||
.then((res) => {
|
||||
this.typeOptions = res.data
|
||||
})
|
||||
.then(() => {
|
||||
this.loadUnderTake()
|
||||
})
|
||||
},
|
||||
onResultCodeConfirm(value) {
|
||||
this.$set(this.formData, 'resultCode', value.value)
|
||||
this.resultCodeChange(value.value)
|
||||
this.showResultCodePicker = false
|
||||
},
|
||||
onTypeConfirm(value) {
|
||||
this.$set(this.formData, 'typeId', value.value)
|
||||
this.showTypePicker = false
|
||||
},
|
||||
openHostUnitPicker() {
|
||||
this.hostUnitSearchKey = ''
|
||||
this.checkedHostUnit = this.formData.hostUnit || (this.hostUnitPickerOptions[0] ? this.hostUnitPickerOptions[0].value : '')
|
||||
this.showHostUnitPicker = true
|
||||
},
|
||||
onHostUnitCancel() {
|
||||
this.showHostUnitPicker = false
|
||||
},
|
||||
onHostUnitPickerChange(picker, value) {
|
||||
this.checkedHostUnit = value && value.value ? value.value : ''
|
||||
},
|
||||
onHostUnitConfirm() {
|
||||
if (!this.checkedHostUnit) {
|
||||
return
|
||||
}
|
||||
this.$set(this.formData, 'hostUnit', this.checkedHostUnit)
|
||||
this.showHostUnitPicker = false
|
||||
},
|
||||
openHelpUnitPicker() {
|
||||
this.checkedHelpUnit = this.formData.helpUnit.concat()
|
||||
this.helpUnitSearchKey = ''
|
||||
this.showHelpUnitPicker = true
|
||||
},
|
||||
onHelpUnitCancel() {
|
||||
this.checkedHelpUnit = this.formData.helpUnit.concat()
|
||||
this.showHelpUnitPicker = false
|
||||
},
|
||||
onHelpUnitConfirm() {
|
||||
this.$set(this.formData, 'helpUnit', this.checkedHelpUnit.concat())
|
||||
this.showHelpUnitPicker = false
|
||||
},
|
||||
resultCodeChange(code) {
|
||||
this.$set(this.formData, 'hostUnit', '')
|
||||
this.$set(this.formData, 'helpUnit', [])
|
||||
this.checkedHelpUnit = []
|
||||
this.setOpinionByResultCode(code)
|
||||
},
|
||||
setOpinionByResultCode(code) {
|
||||
if (code === 'opinion') {
|
||||
this.$set(this.formData, 'opinion', '经提案委员会审理,该提案作为意见建议。')
|
||||
} else if (code === 'notGive') {
|
||||
this.$set(this.formData, 'opinion', '经提案委员会审理,该提案不予立案。')
|
||||
} else {
|
||||
this.$set(this.formData, 'opinion', '经提案委员会审理,该提案确定立案。')
|
||||
}
|
||||
},
|
||||
validateForm() {
|
||||
if (!this.formData.typeId) {
|
||||
vant.Toast('请选择提案类型')
|
||||
return false
|
||||
}
|
||||
if (!this.formData.resultCode) {
|
||||
vant.Toast('请选择立案结果')
|
||||
return false
|
||||
}
|
||||
if (this.formData.resultCode !== 'notGive' && !this.formData.hostUnit) {
|
||||
vant.Toast('请选择主办单位')
|
||||
return false
|
||||
}
|
||||
if (this.formData.helpUnit.find(v => v === this.formData.hostUnit)) {
|
||||
vant.Toast('协办单位中不能包含主办单位')
|
||||
return false
|
||||
}
|
||||
if (!this.formData.opinion) {
|
||||
vant.Toast('请填写审核意见')
|
||||
return false
|
||||
}
|
||||
return true
|
||||
},
|
||||
doAudit() {
|
||||
if (!this.validateForm() || this.formLoading) {
|
||||
return
|
||||
}
|
||||
const submitAudit = () => {
|
||||
vant.Dialog.confirm({
|
||||
title: '提示',
|
||||
message: '最终确定立案和承办单位,不可撤回请确认!',
|
||||
}).then(() => {
|
||||
this.formLoading = true
|
||||
$.post('/mobile/proposal/caseUnit/audit', {
|
||||
audit: JSON.stringify(this.formData),
|
||||
resultCode: this.formData.resultCode,
|
||||
typeId: this.formData.typeId,
|
||||
hostUnit: this.formData.hostUnit,
|
||||
helpUnit: JSON.stringify(this.formData.helpUnit),
|
||||
sign: this.formData.sign,
|
||||
determineTypeCode: this.formData.determineTypeCode,
|
||||
proposalIds: JSON.stringify(this.proposalIds)
|
||||
}).then((res) => {
|
||||
if (res.code === 0) {
|
||||
this.$toast.success('提交成功')
|
||||
this.handle = false
|
||||
this.$refs.info.openView(this.proposalId)
|
||||
} else {
|
||||
this.$toast.fail(res.msg || '提交失败,请联系管理员')
|
||||
}
|
||||
}).always(() => {
|
||||
this.formLoading = false
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
if (this.formData.resultCode === 'notGive') {
|
||||
submitAudit()
|
||||
return
|
||||
}
|
||||
|
||||
$.get('/mobile/proposal/caseUnit/checkUnderTakeUser', {
|
||||
hostUnit: this.formData.hostUnit
|
||||
}).then((res) => {
|
||||
if (res.data) {
|
||||
submitAudit()
|
||||
} else {
|
||||
vant.Dialog.alert({
|
||||
title: '提示',
|
||||
message: '请先设置主办单位分管校领导或答复人后再进行提交!'
|
||||
})
|
||||
}
|
||||
})
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
hostUnitPickerOptions(value) {
|
||||
if (!this.showHostUnitPicker) {
|
||||
return
|
||||
}
|
||||
if (!value.some(v => v.value === this.checkedHostUnit)) {
|
||||
this.checkedHostUnit = value[0] ? value[0].value : ''
|
||||
}
|
||||
}
|
||||
},
|
||||
created() {
|
||||
if (GetQueryString('mobile')) {
|
||||
this.leftArrow = true
|
||||
}
|
||||
const proposalId = GetQueryString('proposal_id')
|
||||
const bizKey = GetQueryString('biz_key')
|
||||
if (proposalId === '' || bizKey === '') {
|
||||
vant.Dialog.alert({
|
||||
title: '提示',
|
||||
message: '非法参数',
|
||||
showConfirmButton: false
|
||||
})
|
||||
return
|
||||
}
|
||||
this.loadOptions()
|
||||
this.loadProposalInfo()
|
||||
this.loadConjoinProposal()
|
||||
this.initHandleState()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,193 @@
|
||||
<!--#
|
||||
layout("/mobile/platform.html"){
|
||||
#-->
|
||||
<div id="app" v-cloak>
|
||||
<m-page-loading v-if="mLoading"></m-page-loading>
|
||||
<van-nav-bar
|
||||
title="提案工作组正式立案"
|
||||
left-arrow
|
||||
placeholder
|
||||
fixed
|
||||
@click-left="pjaxReplace('/mobile/index')"
|
||||
></van-nav-bar>
|
||||
|
||||
<div class="search-fixed">
|
||||
<van-search
|
||||
v-model="pageForm.searchKeyWord"
|
||||
shape="round"
|
||||
maxlength="10"
|
||||
@search="doSearch"
|
||||
placeholder="请输入提案名称或者提案编号进行查询"
|
||||
></van-search>
|
||||
|
||||
<van-dropdown-menu>
|
||||
<van-dropdown-item v-model="pageForm.meetingId" :options="sessionList"
|
||||
@change="doSearch"></van-dropdown-item>
|
||||
<van-dropdown-item v-model="pageForm.proposalTypeId" :options="proposalTypeList"
|
||||
@change="doSearch"></van-dropdown-item>
|
||||
<van-dropdown-item v-model="pageForm.proposalResultCode" :options="resultList"
|
||||
@change="doSearch"></van-dropdown-item>
|
||||
</van-dropdown-menu>
|
||||
|
||||
<van-tabs v-model="pageForm.isAudit" @change="doSearch">
|
||||
<van-tab title="全部" name=""></van-tab>
|
||||
<van-tab title="已审核" name="true"></van-tab>
|
||||
<van-tab title="待审核" name="false"></van-tab>
|
||||
</van-tabs>
|
||||
</div>
|
||||
|
||||
<div style="margin: 170px auto 0">
|
||||
<van-list
|
||||
v-if="pageForm.meetingId"
|
||||
v-model="mLoading"
|
||||
:immediate-check="false"
|
||||
:finished="finished"
|
||||
:finished-text="tableData.length>0?'没有更多了':''"
|
||||
@load="onLoad">
|
||||
<div v-for="o in tableData" class="list-card" :style="{'--card-accent': o.stateColor || '#2563eb'}"
|
||||
@click="openView(o)">
|
||||
<div class="card-header">
|
||||
<div class="card-title">
|
||||
{{o.proposalName}}
|
||||
</div>
|
||||
<span class="badge" :class="o.stateCode === 400 ? 'badge-draft' : 'badge-blue'">
|
||||
{{o.stateCode === 400 ? '待审核' : '已审核'}}
|
||||
</span>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div class="card-item">
|
||||
<span class="card-label">提案编号:</span>
|
||||
<span class="card-value">{{o.proposalCode}}</span>
|
||||
</div>
|
||||
<div class="card-item">
|
||||
<span class="card-label">提案类型:</span>
|
||||
<span class="card-value">{{o.typeName}}</span>
|
||||
</div>
|
||||
<div class="card-item">
|
||||
<span class="card-label">代表团:</span>
|
||||
<span class="card-value">{{o.delegationName}}</span>
|
||||
</div>
|
||||
<div class="card-item">
|
||||
<span class="card-label">提案届次:</span>
|
||||
<span class="card-value">{{o.meetingName}}</span>
|
||||
</div>
|
||||
<div class="card-item">
|
||||
<span class="card-label">提案状态:</span>
|
||||
<span class="card-value">{{o.stateName}}</span>
|
||||
</div>
|
||||
<div class="card-item">
|
||||
<span class="card-label">是否并案:</span>
|
||||
<span class="card-value">{{o.isConjoin === 1 ? '是' : '否'}}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-footer" v-if="o.resultName">
|
||||
<span class="card-label">立案结果:</span>
|
||||
<span class="card-value">{{o.resultName}}</span>
|
||||
</div>
|
||||
</div>
|
||||
</van-list>
|
||||
<van-empty
|
||||
v-if="mLoading==false&&tableData.length==0"
|
||||
class="custom-image"
|
||||
image="/none.svg"
|
||||
description="暂无数据"
|
||||
></van-empty>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [mobileMixins],
|
||||
data() {
|
||||
return {
|
||||
pageForm: {
|
||||
isAudit: 'false'
|
||||
},
|
||||
sessionList: [],
|
||||
proposalTypeList: [],
|
||||
resultList: [],
|
||||
listLoading: false
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
doSearch() {
|
||||
this.$set(this.pageForm, 'pageNumber', 1)
|
||||
this.tableData = []
|
||||
this.finished = false
|
||||
this.onLoad()
|
||||
},
|
||||
onLoad() {
|
||||
if (this.listLoading || this.finished) {
|
||||
return
|
||||
}
|
||||
this.listLoading = true
|
||||
this.mLoading = true
|
||||
$.post(loc() + '/pageData', this.pageForm)
|
||||
.then((res) => {
|
||||
if (res.code === 0) {
|
||||
this.tableData = this.tableData.concat(res.data.list)
|
||||
if (this.tableData.length >= res.data.totalCount) {
|
||||
this.finished = true
|
||||
} else {
|
||||
this.$set(this.pageForm, 'pageNumber', this.pageForm.pageNumber + 1)
|
||||
}
|
||||
}
|
||||
})
|
||||
.always(() => {
|
||||
this.listLoading = false
|
||||
this.mLoading = false
|
||||
})
|
||||
},
|
||||
openView(row) {
|
||||
window.location.href = '/mobile/proposal/caseUnit/view?biz_key=' + row.id + '&proposal_id=' + row.id + '&stateCode=' + row.stateCode + '&mobile=' + true
|
||||
},
|
||||
loadOptions() {
|
||||
$.get('/mobile/proposal/common/getAllSession')
|
||||
.then((res) => {
|
||||
this.sessionList = res.data
|
||||
if (this.sessionList && this.sessionList.length > 0) {
|
||||
this.$set(this.pageForm, 'meetingId', this.sessionList[0].value)
|
||||
}
|
||||
})
|
||||
.then(() => $.get('/mobile/proposal/common/getProposalType'))
|
||||
.then((res) => {
|
||||
this.proposalTypeList = res.data
|
||||
if (this.proposalTypeList && this.proposalTypeList.length > 0) {
|
||||
this.$set(this.pageForm, 'proposalTypeId', this.proposalTypeList[0].value)
|
||||
}
|
||||
})
|
||||
.then(() => $.get('/mobile/proposal/common/getProposalDict'))
|
||||
.then((res) => {
|
||||
this.resultList = res.data
|
||||
if (this.resultList && this.resultList.length > 0) {
|
||||
this.$set(this.pageForm, 'proposalResultCode', this.resultList[0].value)
|
||||
}
|
||||
this.onLoad()
|
||||
})
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.$set(this.pageForm, 'pageNumber', 1)
|
||||
this.$set(this.pageForm, 'pageSize', 5)
|
||||
this.$set(this.pageForm, 'totalCount', 0)
|
||||
this.loadOptions()
|
||||
}
|
||||
})
|
||||
|
||||
window.addEventListener('pageshow', (e) => {
|
||||
if (e.persisted || (window.performance && window.performance.navigation.type === 2)) {
|
||||
vue.$set(vue.pageForm, 'pageNumber', 1)
|
||||
vue.$set(vue.pageForm, 'meetingId', null)
|
||||
vue.tableData = []
|
||||
vue.finished = false
|
||||
vue.loadOptions()
|
||||
}
|
||||
})
|
||||
|
||||
</script>
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -1,47 +1,61 @@
|
||||
<!--#
|
||||
layout("/mobile/platform.html"){
|
||||
#-->
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<van-nav-bar title="团长审核" fixed placeholder safe-area-inset-top @click-left="pjaxReplace('/mobile/index')"
|
||||
<van-nav-bar title="团长审核" fixed placeholder safe-area-inset-top @click-left="pjaxReplace('/mobile/proposal/delegation')"
|
||||
:left-arrow="leftArrow"></van-nav-bar>
|
||||
<proposal-info :proposal_id="proposalId" title="团长审核" :handle="handle" ref="info">
|
||||
<template #handle>
|
||||
<div class="van-cell-group__title" style="padding: 5px 0 0 0 !important;">
|
||||
<div class="van-sidebar-item van-sidebar-item--select">
|
||||
团长审核
|
||||
<div class="info-section-title">团长审核</div>
|
||||
<van-form class="info-cell-form">
|
||||
<div class="info-row">
|
||||
<span class="info-label">审核人</span>
|
||||
<span class="info-value">{{formData.username}}</span>
|
||||
</div>
|
||||
</div>
|
||||
<van-form>
|
||||
<van-cell-group class="info">
|
||||
<van-cell title="审核时间" :value="formData.auditTime"></van-cell>
|
||||
<div class="info-row">
|
||||
<span class="info-label">审核时间</span>
|
||||
<span class="info-value">{{formData.auditTime}}</span>
|
||||
</div>
|
||||
|
||||
<div class="info-textarea-field">
|
||||
<div class="info-textarea-label info-required-label">审核意见</div>
|
||||
<van-field
|
||||
input-align="right"
|
||||
v-model="formData.opinion"
|
||||
rows="2"
|
||||
rows="4"
|
||||
autosize
|
||||
label="审核意见"
|
||||
type="textarea"
|
||||
maxlength="1000"
|
||||
placeholder="请输入审核意见"
|
||||
placeholder="请填写审核意见"
|
||||
show-word-limit
|
||||
></van-field>
|
||||
</van-cell-group>
|
||||
</div>
|
||||
|
||||
<van-row type="flex" :gutter="20" style="padding: 20px 0px">
|
||||
<van-col span="12" style="padding: 0 10px">
|
||||
<van-button plain size="large" @click="doAudit(0)">退回</van-button>
|
||||
<div class="info-long-block" v-if="isSign">
|
||||
<div class="info-long-title info-required-label">签字</div>
|
||||
<mobile-sign ref="signature" :my_sign.sync="formData.sign"></mobile-sign>
|
||||
</div>
|
||||
|
||||
<van-row class="info-footer-actions" type="flex" gutter="10">
|
||||
<van-col span="8">
|
||||
<van-button block class="info-ghost-button" :loading="formLoading" @click="doAudit(2)">
|
||||
建议撤销
|
||||
</van-button>
|
||||
</van-col>
|
||||
<van-col span="12" style="padding: 0 10px">
|
||||
<van-button :color="themeColor" block size="large" @click="doAudit(1)">通过</van-button>
|
||||
<van-col span="8">
|
||||
<van-button block class="info-ghost-button" :loading="formLoading" @click="doAudit(0)">
|
||||
返回修改
|
||||
</van-button>
|
||||
</van-col>
|
||||
<van-col span="8">
|
||||
<van-button :color="themeColor" block class="info-primary-button" :loading="formLoading"
|
||||
@click="doAudit(1)">
|
||||
通过
|
||||
</van-button>
|
||||
</van-col>
|
||||
</van-row>
|
||||
|
||||
</van-form>
|
||||
</template>
|
||||
</proposal-info>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
<script>
|
||||
@@ -51,13 +65,16 @@ layout("/mobile/platform.html"){
|
||||
data() {
|
||||
return {
|
||||
leftArrow: false,
|
||||
handle: true,
|
||||
handle: false,
|
||||
proposalId: GetQueryString('proposal_id'),
|
||||
formLoading: false,
|
||||
isSign: false,
|
||||
formData: {
|
||||
username: "${@shiro.getPrincipalProperty('username')}",
|
||||
loginName: "${@shiro.getPrincipalProperty('loginname')}",
|
||||
auditTime: moment().format('YYYY-MM-DD'),
|
||||
opinion: '',
|
||||
auditTime: moment().format('YYYY-MM-DD HH:mm:ss'),
|
||||
opinion: '同意该提案!',
|
||||
sign: '',
|
||||
proposalId: GetQueryString('proposal_id')
|
||||
}
|
||||
}
|
||||
@@ -66,72 +83,101 @@ layout("/mobile/platform.html"){
|
||||
'proposal-info': httpVueLoader('/components/proposal/mobile/ProposalInfo.vue?v=' + new Date().getTime()),
|
||||
},
|
||||
methods: {
|
||||
async doAudit(flag) {
|
||||
if (this.formData.opinion === '') {
|
||||
vant.Toast('请输入审核意见');
|
||||
loadHandleState() {
|
||||
$.post('/platform/proposal/common/getProposalStateCode', {
|
||||
proposal_id: this.proposalId
|
||||
}).then((res) => {
|
||||
this.handle = res.data === 200
|
||||
})
|
||||
},
|
||||
loadSignState() {
|
||||
$.get('/platform/proposal/common/getProposalNeedSignStateCode')
|
||||
.then((res) => {
|
||||
const signStates = res.data || []
|
||||
this.isSign = signStates.map(v => v.stateCode).includes(200)
|
||||
})
|
||||
},
|
||||
validateForm() {
|
||||
if (!this.proposalId) {
|
||||
vant.Toast('提案信息不存在')
|
||||
return false
|
||||
}
|
||||
if (!this.formData.opinion) {
|
||||
vant.Toast('请输入审核意见')
|
||||
return false
|
||||
}
|
||||
if (this.isSign && !this.formData.sign) {
|
||||
vant.Toast('请签字')
|
||||
return false
|
||||
}
|
||||
return true
|
||||
},
|
||||
setDefaultOpinion(flag) {
|
||||
if (flag !== 1 && this.formData.opinion === '同意该提案!') {
|
||||
if (flag === 2) {
|
||||
this.$set(this.formData, 'opinion', '建议撤销该提案!')
|
||||
} else {
|
||||
this.$set(this.formData, 'opinion', '返回修改该提案!')
|
||||
}
|
||||
}
|
||||
},
|
||||
getConfirmMessage(flag) {
|
||||
if (flag === 1) {
|
||||
return '您是否要通过该提案?'
|
||||
}
|
||||
if (flag === 2) {
|
||||
return '您确定要建议撤销该提案吗?'
|
||||
}
|
||||
return '该提案将返回至撰写人,修改后需重新邀请附议,请确认是否返回修改?'
|
||||
},
|
||||
doAudit(flag) {
|
||||
if (!this.validateForm() || this.formLoading) {
|
||||
return
|
||||
}
|
||||
|
||||
const res = flag === 1 ? '通过' : '退回'
|
||||
|
||||
vant.Dialog.confirm({
|
||||
title: '提示',
|
||||
message: '您确定' + res + '该提案吗?',
|
||||
}).then(async () => {
|
||||
const loading = this.$toast({
|
||||
duration: 0,
|
||||
message: '提交中...',
|
||||
forbidClick: true,
|
||||
loadingType: 'spinner',
|
||||
type: 'loading',
|
||||
overlay: true
|
||||
});
|
||||
|
||||
const resp = await $.post("/platform/proposal/transact/audit/doAudit", {
|
||||
message: this.getConfirmMessage(flag),
|
||||
}).then(() => {
|
||||
this.setDefaultOpinion(flag)
|
||||
this.formLoading = true
|
||||
$.post('/platform/proposal/transact/audit/doAudit', {
|
||||
audit: JSON.stringify(this.formData),
|
||||
sign: this.formData.sign,
|
||||
flag: flag
|
||||
})
|
||||
|
||||
if (resp.code === 0) {
|
||||
setTimeout(async () => {
|
||||
loading.type = 'success'
|
||||
loading.message = '提交成功'
|
||||
loading.close()
|
||||
this.handle = await mProposal.GetProposalStateCode(this.proposalId) === 200
|
||||
}).then((res) => {
|
||||
if (res.code === 0) {
|
||||
this.$toast.success('提交成功')
|
||||
this.handle = false
|
||||
this.$refs.info.openView(this.proposalId)
|
||||
}, 1200)
|
||||
} else {
|
||||
loading.type = 'fail'
|
||||
loading.message = '提交失败,请联系管理员'
|
||||
}
|
||||
} else {
|
||||
this.$toast.fail(res.msg || '提交失败,请联系管理员')
|
||||
}
|
||||
}).always(() => {
|
||||
this.formLoading = false
|
||||
})
|
||||
})
|
||||
|
||||
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
if (GetQueryString("mobile")) this.leftArrow = true
|
||||
const proposal_id = GetQueryString("proposal_id")
|
||||
const biz_key = GetQueryString("biz_key")
|
||||
if (proposal_id === '' || biz_key === '') {
|
||||
created() {
|
||||
if (GetQueryString('mobile')) {
|
||||
this.leftArrow = true
|
||||
}
|
||||
const proposalId = GetQueryString('proposal_id')
|
||||
const bizKey = GetQueryString('biz_key')
|
||||
if (proposalId === '' || bizKey === '') {
|
||||
vant.Dialog.alert({
|
||||
title: '提示',
|
||||
message: '非法参数',
|
||||
showConfirmButton: false
|
||||
}).then(() => {
|
||||
})
|
||||
return
|
||||
}
|
||||
this.handle = await mProposal.GetProposalStateCode(this.proposalId) === 200
|
||||
const lastIndex = window.location.href.lastIndexOf('&')
|
||||
if (window.location.href.substr(lastIndex + 1, 6) === 'ticket') {
|
||||
window.document.location.replace(window.location.href.substring(0, lastIndex))
|
||||
}
|
||||
this.loadHandleState()
|
||||
this.loadSignState()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
|
||||
@@ -1,45 +1,10 @@
|
||||
<!--#
|
||||
layout("/mobile/platform.html"){
|
||||
#-->
|
||||
<style>
|
||||
.van-doc-card {
|
||||
margin: 14px;
|
||||
padding: 12px 12px 12px 12px;
|
||||
background-color: #fff;
|
||||
border-radius: 10px;
|
||||
box-shadow: 0 8px 12px #ebedf0;
|
||||
line-height: 20px;
|
||||
font-size: 12px;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.van-divider {
|
||||
margin: 12px 0 12px 0px;
|
||||
border-color: lightgray;
|
||||
}
|
||||
|
||||
.van-button--small {
|
||||
border-top-right-radius: 16px;
|
||||
border-bottom-left-radius: 16px;
|
||||
height: 26px;
|
||||
}
|
||||
|
||||
.van-col {
|
||||
line-height: 25px;
|
||||
}
|
||||
|
||||
.title_span {
|
||||
font-size: 16px;
|
||||
font-weight: bold;
|
||||
position: absolute;
|
||||
left: -1px;
|
||||
top: 11px;
|
||||
}
|
||||
</style>
|
||||
<div id="app" v-cloak>
|
||||
<m-page-loading v-if="mLoading"></m-page-loading>
|
||||
<van-nav-bar
|
||||
title="团长审议"
|
||||
title="团长审核"
|
||||
left-arrow
|
||||
placeholder
|
||||
fixed
|
||||
@@ -50,13 +15,10 @@ layout("/mobile/platform.html"){
|
||||
<van-search
|
||||
v-model="pageForm.searchKeyWord"
|
||||
shape="round"
|
||||
maxlength="10"
|
||||
maxlength="20"
|
||||
@search="doSearch"
|
||||
placeholder="请输入提案名称或者提案编号进行查询"
|
||||
>
|
||||
|
||||
</van-search>
|
||||
|
||||
></van-search>
|
||||
|
||||
<van-dropdown-menu>
|
||||
<van-dropdown-item v-model="pageForm.meetingId" :options="sessionList"
|
||||
@@ -67,51 +29,61 @@ layout("/mobile/platform.html"){
|
||||
@change="doSearch"></van-dropdown-item>
|
||||
</van-dropdown-menu>
|
||||
|
||||
<van-tabs v-model="pageForm.isAudit" @click="doSearch">
|
||||
<van-tab title="未审核" :name="false"></van-tab>
|
||||
<van-tab title="已审核" :name="true"></van-tab>
|
||||
<van-tabs v-model="pageForm.isAudit" @change="doSearch">
|
||||
<van-tab title="全部" name=""></van-tab>
|
||||
<van-tab title="已审核" name="true"></van-tab>
|
||||
<van-tab title="待审核" name="false"></van-tab>
|
||||
</van-tabs>
|
||||
</div>
|
||||
|
||||
<div style="margin: 170px auto 0">
|
||||
<van-list
|
||||
v-if="pageForm.meetingId"
|
||||
v-model="mLoading"
|
||||
:immediate-check="false"
|
||||
:finished="finished"
|
||||
:finished-text="tableData.length>0?'没有更多了':''"
|
||||
@load="onLoad">
|
||||
<div v-for="o in tableData" class="van-doc-card" @click="openView(o.id)">
|
||||
<div @click="openView(o.id)">
|
||||
<div>
|
||||
<div class="van-ellipsis"
|
||||
style="font-size: 13px;font-weight: bold;flex: 1;width:80%;overflow: hidden;white-space: nowrap">
|
||||
<span class="title_span" :style="'color:'+o.stateColor">|</span>提案名称:{{o.proposalName}}
|
||||
</div>
|
||||
<div style="position: absolute; right: 14px;top: 12.3px;text-align: right">
|
||||
<van-tag :style="'color:'+o.stateColor" size="medium" plain round type="primary">{{
|
||||
o.stateName }}
|
||||
</van-tag>
|
||||
</div>
|
||||
<div v-for="o in tableData" class="list-card" :style="{'--card-accent': o.stateColor || '#2563eb'}"
|
||||
@click="openView(o)">
|
||||
<div class="card-header">
|
||||
<div class="card-title">
|
||||
{{o.proposalName}}
|
||||
</div>
|
||||
<van-divider></van-divider>
|
||||
<div>
|
||||
<van-row>
|
||||
<van-col span="12"><span style="color: grey">提案编号:</span>{{o.proposalCode}}</van-col>
|
||||
<van-col span="12"><span style="color: grey">提案类型:</span>{{o.typeName}}</van-col>
|
||||
</van-row>
|
||||
<van-row>
|
||||
<van-col span="12" style="overflow: hidden;white-space: nowrap;text-overflow: ellipsis;">
|
||||
<span style="color: grey">代 表 团:</span>{{o.delegationName}}
|
||||
</van-col>
|
||||
<van-col span="12"><span style="color: grey">提案届次:</span>{{o.meetingName}}</van-col>
|
||||
</van-row>
|
||||
<van-divider></van-divider>
|
||||
<span class="badge" :class="o.stateCode === 200 ? 'badge-draft' : 'badge-blue'">
|
||||
{{o.stateCode === 200 ? '待审核' : '已审核'}}
|
||||
</span>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div class="card-item">
|
||||
<span class="card-label">提案编号:</span>
|
||||
<span class="card-value">{{o.proposalCode}}</span>
|
||||
</div>
|
||||
<div class="train-title" style="margin-top: 11px">
|
||||
<span style="color: grey">立案结果:</span>{{o.resultName ? o.resultName : '暂无'}}
|
||||
|
||||
<div class="card-item">
|
||||
<span class="card-label">提案类型:</span>
|
||||
<span class="card-value">{{o.typeName}}</span>
|
||||
</div>
|
||||
<div class="card-item">
|
||||
<span class="card-label">代表团:</span>
|
||||
<span class="card-value">{{o.delegationName}}</span>
|
||||
</div>
|
||||
<div class="card-item">
|
||||
<span class="card-label">提案届次:</span>
|
||||
<span class="card-value">{{o.meetingName}}</span>
|
||||
</div>
|
||||
<div class="card-item">
|
||||
<span class="card-label">提案状态:</span>
|
||||
<span class="card-value">{{o.stateName}}</span>
|
||||
</div>
|
||||
<div class="card-item">
|
||||
<span class="card-label">审核状态:</span>
|
||||
<span class="card-value">{{o.stateCode === 200 ? '待审核' : '已审核'}}</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card-footer" v-if="o.resultName">
|
||||
<span class="card-label">立案结果:</span>
|
||||
<span class="card-value">{{o.resultName}}</span>
|
||||
</div>
|
||||
</div>
|
||||
</van-list>
|
||||
<van-empty
|
||||
@@ -125,107 +97,94 @@ layout("/mobile/platform.html"){
|
||||
</div>
|
||||
|
||||
<script>
|
||||
let vue = new Vue({
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [mobileMixins],
|
||||
data() {
|
||||
return {
|
||||
pageForm: {
|
||||
isAudit: false
|
||||
isAudit: 'false'
|
||||
},
|
||||
list: [],
|
||||
state: '0',
|
||||
loading: false,
|
||||
finished: false,
|
||||
refreshing: false,
|
||||
sessionList: [],
|
||||
delegationList: [],
|
||||
proposalTypeList: [],
|
||||
resultList: []
|
||||
resultList: [],
|
||||
listLoading: false
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
doSearch() {
|
||||
this.pageForm.pageNumber = 1
|
||||
this.$set(this.pageForm, 'pageNumber', 1)
|
||||
this.tableData = []
|
||||
this.finished = false
|
||||
this.onLoad()
|
||||
},
|
||||
async onLoad() {
|
||||
this.mLoading = true
|
||||
$.post(loc() + '/pageData', this.pageForm).then(res => {
|
||||
if (res.code === 0) {
|
||||
this.tableData = this.tableData.concat(res.data.list)
|
||||
if (this.tableData.length === res.data.totalCount) {
|
||||
this.finished = true
|
||||
} else {
|
||||
this.pageForm.pageNumber++
|
||||
}
|
||||
}
|
||||
this.mLoading = false
|
||||
})
|
||||
},
|
||||
openAudit(id) {
|
||||
this.formData = {
|
||||
proposalId: id,
|
||||
username: "${@shiro.getPrincipalProperty('username')}",
|
||||
loginName: "${@shiro.getPrincipalProperty('loginname')}",
|
||||
auditTime: moment().format('YYYY-MM-DD'),
|
||||
opinion: '',
|
||||
sign: '',
|
||||
onLoad() {
|
||||
if (this.listLoading || this.finished) {
|
||||
return
|
||||
}
|
||||
this.state = '0'
|
||||
this.show = true
|
||||
},
|
||||
validateForm(action, done) {
|
||||
done(false)
|
||||
},
|
||||
async doHandle() {
|
||||
this.$refs['handleForm'].validate().then(valid => {
|
||||
$.post('/platform/proposal/transact/audit/doAudit', {
|
||||
audit: JSON.stringify(this.formData),
|
||||
flag: this.state === 0
|
||||
}).then((res) => {
|
||||
console.log(res)
|
||||
this.listLoading = true
|
||||
this.mLoading = true
|
||||
$.post(loc() + '/pageData', this.pageForm)
|
||||
.then((res) => {
|
||||
if (res.code === 0) {
|
||||
this.show = false
|
||||
this.pageForm = {
|
||||
pageNumber: 1,
|
||||
pageSize: 5,
|
||||
totalCount: 0
|
||||
this.tableData = this.tableData.concat(res.data.list)
|
||||
if (this.tableData.length >= res.data.totalCount) {
|
||||
this.finished = true
|
||||
} else {
|
||||
this.$set(this.pageForm, 'pageNumber', this.pageForm.pageNumber + 1)
|
||||
}
|
||||
this.tableData = []
|
||||
this.onLoad()
|
||||
vant.Toast.success('审核成功!')
|
||||
} else {
|
||||
vant.Toast.error('审核失败!')
|
||||
}
|
||||
})
|
||||
})
|
||||
.always(() => {
|
||||
this.listLoading = false
|
||||
this.mLoading = false
|
||||
})
|
||||
},
|
||||
openView(id) {
|
||||
window.location.href = '/mobile/proposal/delegation/view?biz_key=' + id + '&proposal_id=' + id + '&mobile=' + true
|
||||
openView(row) {
|
||||
window.location.href = '/mobile/proposal/delegation/view?biz_key=' + row.id
|
||||
+ '&proposal_id=' + row.id
|
||||
+ '&mobile=' + true
|
||||
},
|
||||
loadOptions() {
|
||||
$.get('/mobile/proposal/common/getAllSession')
|
||||
.then((res) => {
|
||||
this.sessionList = res.data
|
||||
if (this.sessionList && this.sessionList.length > 0) {
|
||||
this.$set(this.pageForm, 'meetingId', this.sessionList[0].value)
|
||||
}
|
||||
})
|
||||
.then(() => $.get('/mobile/proposal/common/getProposalType'))
|
||||
.then((res) => {
|
||||
this.proposalTypeList = res.data
|
||||
if (this.proposalTypeList && this.proposalTypeList.length > 0) {
|
||||
this.$set(this.pageForm, 'proposalTypeId', this.proposalTypeList[0].value)
|
||||
}
|
||||
})
|
||||
.then(() => $.get('/mobile/proposal/common/getProposalDict'))
|
||||
.then((res) => {
|
||||
this.resultList = res.data
|
||||
if (this.resultList && this.resultList.length > 0) {
|
||||
this.$set(this.pageForm, 'proposalResultCode', this.resultList[0].value)
|
||||
}
|
||||
this.onLoad()
|
||||
})
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
this.sessionList = await mProposal.getAllSession()
|
||||
this.proposalTypeList = await mProposal.getProposalType()
|
||||
this.resultList = await mProposal.getProposalDict()
|
||||
if (this.sessionList && this.sessionList.length > 0) {
|
||||
this.$set(this.pageForm, "meetingId", this.sessionList[0].value)
|
||||
}
|
||||
if (this.proposalTypeList && this.proposalTypeList.length > 0) {
|
||||
this.$set(this.pageForm, "proposalTypeId", this.proposalTypeList[0].value)
|
||||
}
|
||||
if (this.resultList && this.resultList.length > 0) {
|
||||
this.$set(this.pageForm, "proposalResultCode", this.resultList[0].value)
|
||||
}
|
||||
created() {
|
||||
this.$set(this.pageForm, 'pageNumber', 1)
|
||||
this.$set(this.pageForm, 'pageSize', 5)
|
||||
this.$set(this.pageForm, 'totalCount', 0)
|
||||
this.loadOptions()
|
||||
}
|
||||
})
|
||||
|
||||
window.addEventListener('pageshow', e => {
|
||||
window.addEventListener('pageshow', (e) => {
|
||||
if (e.persisted || (window.performance && window.performance.navigation.type === 2)) {
|
||||
vue.onLoad()
|
||||
vue.$set(vue.pageForm, 'pageNumber', 1)
|
||||
vue.$set(vue.pageForm, 'meetingId', null)
|
||||
vue.tableData = []
|
||||
vue.finished = false
|
||||
vue.loadOptions()
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
@@ -0,0 +1,189 @@
|
||||
<!--#
|
||||
layout("/mobile/platform.html"){
|
||||
#-->
|
||||
<div id="app" v-cloak>
|
||||
<van-nav-bar title="反馈评价" fixed placeholder :left-arrow="leftArrow" safe-area-inset-top
|
||||
@click-left="pjaxReplace('/mobile/proposal/feedback')"></van-nav-bar>
|
||||
<proposal-info :proposal_id="proposalId" title="反馈评价" :handle="handle" ref="info">
|
||||
<template #handle>
|
||||
<div class="info-section-title">反馈评价</div>
|
||||
<van-form class="info-cell-form">
|
||||
<div class="info-row">
|
||||
<span class="info-label">反馈人</span>
|
||||
<span class="info-value">{{formData.username}}</span>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<span class="info-label">反馈时间</span>
|
||||
<span class="info-value">{{formData.feedbackTime}}</span>
|
||||
</div>
|
||||
|
||||
<div class="info-long-block">
|
||||
<div class="info-long-title info-required-label">办理结果评价</div>
|
||||
<van-radio-group v-model="formData.feedbackCode" direction="vertical">
|
||||
<van-radio
|
||||
v-for="item in feedbackOptions"
|
||||
:key="item.code"
|
||||
:name="item.code"
|
||||
style="margin: 12px 0">
|
||||
{{item.name}}
|
||||
</van-radio>
|
||||
</van-radio-group>
|
||||
<div class="info-long-content" style="color: #1989fa">
|
||||
提示:如果您选择不满意则需要主办单位二次答复
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="info-textarea-field">
|
||||
<div class="info-textarea-label info-required-label">反馈意见</div>
|
||||
<van-field
|
||||
v-model="formData.feedbackOpinion"
|
||||
rows="4"
|
||||
autosize
|
||||
type="textarea"
|
||||
maxlength="1000"
|
||||
placeholder="请填写反馈意见"
|
||||
show-word-limit
|
||||
></van-field>
|
||||
</div>
|
||||
|
||||
<div class="info-long-block" v-if="isSign">
|
||||
<div class="info-long-title info-required-label">签字</div>
|
||||
<mobile-sign ref="signature" :my_sign.sync="formData.scoreSign"></mobile-sign>
|
||||
</div>
|
||||
|
||||
<van-row class="info-footer-actions" type="flex" gutter="10">
|
||||
<van-col span="12">
|
||||
<van-button block class="info-ghost-button" :loading="formLoading"
|
||||
@click="pjaxReplace('/mobile/proposal/feedback')">
|
||||
取消
|
||||
</van-button>
|
||||
</van-col>
|
||||
<van-col span="12">
|
||||
<van-button :color="themeColor" block class="info-primary-button" :loading="formLoading"
|
||||
@click="doFeedback">
|
||||
提交
|
||||
</van-button>
|
||||
</van-col>
|
||||
</van-row>
|
||||
</van-form>
|
||||
</template>
|
||||
</proposal-info>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [mobileMixins],
|
||||
data() {
|
||||
return {
|
||||
leftArrow: false,
|
||||
handle: false,
|
||||
proposalId: GetQueryString('proposal_id'),
|
||||
formLoading: false,
|
||||
feedbackOptions: [],
|
||||
isSign: false,
|
||||
formData: {
|
||||
username: "${@shiro.getPrincipalProperty('username')}",
|
||||
feedbackTime: moment().format('YYYY-MM-DD'),
|
||||
feedbackCode: 'satisfied',
|
||||
feedbackCodeByUnderTake: '很好',
|
||||
feedbackOpinion: '同意办结',
|
||||
scoreSign: '',
|
||||
proposalId: GetQueryString('proposal_id')
|
||||
}
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'proposal-info': httpVueLoader('/components/proposal/mobile/ProposalInfo.vue?v=' + new Date().getTime()),
|
||||
},
|
||||
methods: {
|
||||
loadFeedbackInfo() {
|
||||
$.get('/mobile/proposal/feedback/getFeedbackInfo', {
|
||||
proposalId: this.proposalId
|
||||
}).then((res) => {
|
||||
const data = res.data || {}
|
||||
this.handle = data.handle === true
|
||||
})
|
||||
},
|
||||
loadOptions() {
|
||||
$.get('/platform/proposal/common/getDictByCode', {
|
||||
code: 'proposal_feedback'
|
||||
}).then((res) => {
|
||||
this.feedbackOptions = res.data || []
|
||||
if (this.feedbackOptions.length > 0 && !this.formData.feedbackCode) {
|
||||
this.$set(this.formData, 'feedbackCode', this.feedbackOptions[0].code)
|
||||
}
|
||||
}).then(() => $.get('/platform/proposal/common/getProposalNeedSignStateCode'))
|
||||
.then((res) => {
|
||||
const signStates = res.data || []
|
||||
this.isSign = signStates.map(v => v.stateCode).includes(700)
|
||||
})
|
||||
},
|
||||
validateForm() {
|
||||
if (!this.proposalId) {
|
||||
vant.Toast('提案信息不存在')
|
||||
return false
|
||||
}
|
||||
if (!this.formData.feedbackCode) {
|
||||
vant.Toast('请选择办理结果评价')
|
||||
return false
|
||||
}
|
||||
if (!this.formData.feedbackOpinion) {
|
||||
vant.Toast('请填写反馈意见')
|
||||
return false
|
||||
}
|
||||
if (this.isSign && !this.formData.scoreSign) {
|
||||
vant.Toast('请签字')
|
||||
return false
|
||||
}
|
||||
return true
|
||||
},
|
||||
doFeedback() {
|
||||
if (!this.validateForm() || this.formLoading) {
|
||||
return
|
||||
}
|
||||
vant.Dialog.confirm({
|
||||
title: '提示',
|
||||
message: '您确定要提交反馈评价吗?',
|
||||
}).then(() => {
|
||||
this.formLoading = true
|
||||
$.post('/mobile/proposal/feedback/doFeedback', {
|
||||
feedBack: JSON.stringify(this.formData),
|
||||
scoreSign: this.formData.scoreSign
|
||||
}).then((res) => {
|
||||
if (res.code === 0) {
|
||||
this.$toast.success('提交成功')
|
||||
this.handle = false
|
||||
this.$refs.info.openView(this.proposalId)
|
||||
} else {
|
||||
this.$toast.fail(res.msg || '提交失败,请联系管理员')
|
||||
}
|
||||
}).always(() => {
|
||||
this.formLoading = false
|
||||
})
|
||||
})
|
||||
}
|
||||
},
|
||||
created() {
|
||||
if (GetQueryString('mobile')) {
|
||||
this.leftArrow = true
|
||||
}
|
||||
const proposalId = GetQueryString('proposal_id')
|
||||
const bizKey = GetQueryString('biz_key')
|
||||
if (proposalId === '' || bizKey === '') {
|
||||
vant.Dialog.alert({
|
||||
title: '提示',
|
||||
message: '非法参数',
|
||||
showConfirmButton: false
|
||||
})
|
||||
return
|
||||
}
|
||||
this.loadOptions()
|
||||
this.loadFeedbackInfo()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,195 @@
|
||||
<!--#
|
||||
layout("/mobile/platform.html"){
|
||||
#-->
|
||||
<div id="app" v-cloak>
|
||||
<m-page-loading v-if="mLoading"></m-page-loading>
|
||||
<van-nav-bar
|
||||
title="反馈评价"
|
||||
left-arrow
|
||||
placeholder
|
||||
fixed
|
||||
@click-left="pjaxReplace('/mobile/index')"
|
||||
></van-nav-bar>
|
||||
|
||||
<div class="search-fixed">
|
||||
<van-search
|
||||
v-model="pageForm.searchKeyWord"
|
||||
shape="round"
|
||||
maxlength="20"
|
||||
@search="doSearch"
|
||||
placeholder="请输入提案名称或者提案编号进行查询"
|
||||
></van-search>
|
||||
|
||||
<van-dropdown-menu>
|
||||
<van-dropdown-item v-model="pageForm.meetingId" :options="sessionList"
|
||||
@change="doSearch"></van-dropdown-item>
|
||||
<van-dropdown-item v-model="pageForm.proposalTypeId" :options="proposalTypeList"
|
||||
@change="doSearch"></van-dropdown-item>
|
||||
<van-dropdown-item v-model="pageForm.proposalResultCode" :options="resultList"
|
||||
@change="doSearch"></van-dropdown-item>
|
||||
</van-dropdown-menu>
|
||||
|
||||
<van-tabs v-model="pageForm.isAudit" @change="doSearch">
|
||||
<van-tab title="全部" name=""></van-tab>
|
||||
<van-tab title="已反馈" name="true"></van-tab>
|
||||
<van-tab title="待反馈" name="false"></van-tab>
|
||||
</van-tabs>
|
||||
</div>
|
||||
|
||||
<div style="margin: 170px auto 0">
|
||||
<van-list
|
||||
v-if="pageForm.meetingId"
|
||||
v-model="mLoading"
|
||||
:immediate-check="false"
|
||||
:finished="finished"
|
||||
:finished-text="tableData.length>0?'没有更多了':''"
|
||||
@load="onLoad">
|
||||
<div v-for="o in tableData" class="list-card" :style="{'--card-accent': o.stateColor || '#2563eb'}"
|
||||
@click="openView(o)">
|
||||
<div class="card-header">
|
||||
<div class="card-title">
|
||||
{{o.proposalName}}
|
||||
</div>
|
||||
<span class="badge" :class="o.isFeedback ? 'badge-blue' : 'badge-draft'">
|
||||
{{o.isFeedback ? '已反馈' : '待反馈'}}
|
||||
</span>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div class="card-item">
|
||||
<span class="card-label">提案编号:</span>
|
||||
<span class="card-value">{{o.proposalCode}}</span>
|
||||
</div>
|
||||
<div class="card-item">
|
||||
<span class="card-label">提案类型:</span>
|
||||
<span class="card-value">{{o.typeName}}</span>
|
||||
</div>
|
||||
<div class="card-item">
|
||||
<span class="card-label">代表团:</span>
|
||||
<span class="card-value">{{o.delegationName}}</span>
|
||||
</div>
|
||||
<div class="card-item">
|
||||
<span class="card-label">提案届次:</span>
|
||||
<span class="card-value">{{o.meetingName}}</span>
|
||||
</div>
|
||||
<div class="card-item">
|
||||
<span class="card-label">提案状态:</span>
|
||||
<span class="card-value">{{o.stateName}}</span>
|
||||
</div>
|
||||
<div class="card-item">
|
||||
<span class="card-label">是否并案:</span>
|
||||
<span class="card-value">{{o.isConjoin ? '是' : '否'}}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-footer" v-if="o.resultName">
|
||||
<span class="card-label">立案结果:</span>
|
||||
<span class="card-value">{{o.resultName}}</span>
|
||||
</div>
|
||||
</div>
|
||||
</van-list>
|
||||
<van-empty
|
||||
v-if="mLoading==false&&tableData.length==0"
|
||||
class="custom-image"
|
||||
image="/none.svg"
|
||||
description="暂无数据"
|
||||
></van-empty>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [mobileMixins],
|
||||
data() {
|
||||
return {
|
||||
pageForm: {
|
||||
isAudit: 'false'
|
||||
},
|
||||
sessionList: [],
|
||||
proposalTypeList: [],
|
||||
resultList: [],
|
||||
listLoading: false
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
doSearch() {
|
||||
this.$set(this.pageForm, 'pageNumber', 1)
|
||||
this.tableData = []
|
||||
this.finished = false
|
||||
this.onLoad()
|
||||
},
|
||||
onLoad() {
|
||||
if (this.listLoading || this.finished) {
|
||||
return
|
||||
}
|
||||
this.listLoading = true
|
||||
this.mLoading = true
|
||||
$.post(loc() + '/pageData', this.pageForm)
|
||||
.then((res) => {
|
||||
if (res.code === 0) {
|
||||
this.tableData = this.tableData.concat(res.data.list)
|
||||
if (this.tableData.length >= res.data.totalCount) {
|
||||
this.finished = true
|
||||
} else {
|
||||
this.$set(this.pageForm, 'pageNumber', this.pageForm.pageNumber + 1)
|
||||
}
|
||||
}
|
||||
})
|
||||
.always(() => {
|
||||
this.listLoading = false
|
||||
this.mLoading = false
|
||||
})
|
||||
},
|
||||
openView(row) {
|
||||
window.location.href = '/mobile/proposal/feedback/view?biz_key=' + row.id
|
||||
+ '&proposal_id=' + row.id
|
||||
+ '&mobile=' + true
|
||||
},
|
||||
loadOptions() {
|
||||
$.get('/mobile/proposal/common/getAllSession')
|
||||
.then((res) => {
|
||||
this.sessionList = res.data
|
||||
if (this.sessionList && this.sessionList.length > 0) {
|
||||
this.$set(this.pageForm, 'meetingId', this.sessionList[0].value)
|
||||
}
|
||||
})
|
||||
.then(() => $.get('/mobile/proposal/common/getProposalType'))
|
||||
.then((res) => {
|
||||
this.proposalTypeList = res.data
|
||||
if (this.proposalTypeList && this.proposalTypeList.length > 0) {
|
||||
this.$set(this.pageForm, 'proposalTypeId', this.proposalTypeList[0].value)
|
||||
}
|
||||
})
|
||||
.then(() => $.get('/mobile/proposal/common/getProposalDict'))
|
||||
.then((res) => {
|
||||
this.resultList = res.data
|
||||
if (this.resultList && this.resultList.length > 0) {
|
||||
this.$set(this.pageForm, 'proposalResultCode', this.resultList[0].value)
|
||||
}
|
||||
this.onLoad()
|
||||
})
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.$set(this.pageForm, 'pageNumber', 1)
|
||||
this.$set(this.pageForm, 'pageSize', 5)
|
||||
this.$set(this.pageForm, 'totalCount', 0)
|
||||
this.loadOptions()
|
||||
}
|
||||
})
|
||||
|
||||
window.addEventListener('pageshow', (e) => {
|
||||
if (e.persisted || (window.performance && window.performance.navigation.type === 2)) {
|
||||
vue.$set(vue.pageForm, 'pageNumber', 1)
|
||||
vue.$set(vue.pageForm, 'meetingId', null)
|
||||
vue.tableData = []
|
||||
vue.finished = false
|
||||
vue.loadOptions()
|
||||
}
|
||||
})
|
||||
|
||||
</script>
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -1,22 +1,55 @@
|
||||
<!--#
|
||||
layout("/mobile/platform.html"){
|
||||
#-->
|
||||
<div id="app" v-cloak>
|
||||
<style>
|
||||
.seconded-audit-page {
|
||||
padding-bottom: 86px;
|
||||
}
|
||||
|
||||
.seconded-audit-page .seconded-audit-actions {
|
||||
position: fixed;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
z-index: 99;
|
||||
display: flex;
|
||||
gap: 10px;
|
||||
box-sizing: border-box;
|
||||
padding: 10px 16px calc(10px + env(safe-area-inset-bottom));
|
||||
background: #ffffff;
|
||||
box-shadow: 0 -4px 16px rgba(15, 23, 42, 0.08);
|
||||
}
|
||||
|
||||
.seconded-audit-page .seconded-audit-actions .van-button {
|
||||
flex: 1;
|
||||
height: 44px;
|
||||
border-radius: 8px;
|
||||
font-size: 15px;
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
.seconded-audit-page .seconded-audit-actions .info-ghost-button {
|
||||
border: 1px solid #dcdfe6;
|
||||
background: #ffffff;
|
||||
color: #606266;
|
||||
}
|
||||
|
||||
.seconded-audit-page .seconded-audit-actions .info-primary-button {
|
||||
border: 1px solid #006d75;
|
||||
background: #006d75;
|
||||
color: #ffffff;
|
||||
}
|
||||
</style>
|
||||
<div id="app" class="seconded-audit-page" v-cloak>
|
||||
<van-nav-bar title="附议提案" fixed placeholder :left-arrow="leftArrow" safe-area-inset-top
|
||||
@click-left="pjaxReplace('/mobile/proposal/seconded')"></van-nav-bar>
|
||||
<proposal-info :proposal_id="proposalId" ref="pi"></proposal-info>
|
||||
|
||||
<van-row v-if="secondedInfo.isAgree==null">
|
||||
<div class="van-cell-group__title" style="padding: 5px 0 0 0 !important;">
|
||||
<div class="van-sidebar-item van-sidebar-item--select">
|
||||
附议提案
|
||||
</div>
|
||||
</div>
|
||||
<div style="display: flex;justify-content: space-around;padding: 5px 0 20px 0;">
|
||||
<van-button :color="themeColor" plain style="flex: 1;margin: 0 10px 0 10px" @click="openDialog(false)">拒绝
|
||||
</van-button>
|
||||
<van-button :color="themeColor" style="flex: 1;margin: 0 10px 0 10px" @click="openDialog(true)">同意
|
||||
</van-button>
|
||||
<van-row v-if="secondedInfo.isAgree==null" class="info-section">
|
||||
<div class="info-section-title">附议提案</div>
|
||||
<div class="info-footer-actions seconded-audit-actions">
|
||||
<van-button block class="info-ghost-button" :loading="formLoading" @click="openDialog(false)">拒绝</van-button>
|
||||
<van-button block class="info-primary-button" :loading="formLoading" @click="openDialog(true)">同意</van-button>
|
||||
</div>
|
||||
</van-row>
|
||||
|
||||
@@ -31,6 +64,7 @@ layout("/mobile/platform.html"){
|
||||
return {
|
||||
leftArrow: false,
|
||||
proposalId: GetQueryString('proposal_id'),
|
||||
formLoading: false,
|
||||
secondedInfo: {
|
||||
isAgree: false
|
||||
}
|
||||
@@ -41,36 +75,28 @@ layout("/mobile/platform.html"){
|
||||
},
|
||||
methods: {
|
||||
openDialog(flag) {
|
||||
if (this.formLoading) return
|
||||
const res = flag === true ? '通过' : '拒绝'
|
||||
vant.Dialog.confirm({
|
||||
title: '提示',
|
||||
message: '您确定' + res + '附议该提案吗?',
|
||||
}).then(async () => {
|
||||
const loading = this.$toast({
|
||||
duration: 0,
|
||||
message: '提交中...',
|
||||
forbidClick: true,
|
||||
loadingType: 'spinner',
|
||||
type: 'loading',
|
||||
overlay: true
|
||||
});
|
||||
const resp = await $.post("/platform/proposal/transact/seconded/doAudit", {
|
||||
}).then(() => {
|
||||
this.formLoading = true
|
||||
$.post("/platform/proposal/transact/seconded/doAudit", {
|
||||
secondedId: this.secondedInfo.id,
|
||||
proposalId: this.proposalId,
|
||||
flag: flag
|
||||
})
|
||||
if (resp.code === 0) {
|
||||
setTimeout(async () => {
|
||||
loading.close()
|
||||
}).then((resp) => {
|
||||
if (resp.code === 0) {
|
||||
this.$refs.pi.openView(this.proposalId)
|
||||
this.getSecondedCount()
|
||||
this.$toast.success("操作成功")
|
||||
}, 1200)
|
||||
} else {
|
||||
loading.close()
|
||||
this.$toast.fail("操作失败,请及时联系管理员")
|
||||
}
|
||||
|
||||
} else {
|
||||
this.$toast.fail(resp.msg || "操作失败,请及时联系管理员")
|
||||
}
|
||||
}).always(() => {
|
||||
this.formLoading = false
|
||||
})
|
||||
})
|
||||
},
|
||||
getSecondedCount() {
|
||||
@@ -78,12 +104,12 @@ layout("/mobile/platform.html"){
|
||||
$.post("/mobile/proposal/seconded/getSecondedCount", {
|
||||
proposalId: this.proposalId,
|
||||
id: biz_key
|
||||
}).then(res => {
|
||||
}).then((res) => {
|
||||
this.secondedInfo = res.data
|
||||
})
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
created() {
|
||||
if (GetQueryString("mobile")) this.leftArrow = true
|
||||
const proposal_id = GetQueryString("proposal_id")
|
||||
const biz_key = GetQueryString("biz_key")
|
||||
|
||||
@@ -1,41 +1,6 @@
|
||||
<!--#
|
||||
layout("/mobile/platform.html"){
|
||||
#-->
|
||||
<style>
|
||||
.van-doc-card {
|
||||
margin: 14px;
|
||||
padding: 12px 12px 12px 12px;
|
||||
background-color: #fff;
|
||||
border-radius: 10px;
|
||||
box-shadow: 0 8px 12px #ebedf0;
|
||||
line-height: 20px;
|
||||
font-size: 12px;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.van-divider {
|
||||
margin: 12px 0 12px 0px;
|
||||
border-color: lightgray;
|
||||
}
|
||||
|
||||
.van-button--small {
|
||||
border-top-right-radius: 16px;
|
||||
border-bottom-left-radius: 16px;
|
||||
height: 26px;
|
||||
}
|
||||
|
||||
.van-col {
|
||||
line-height: 25px;
|
||||
}
|
||||
|
||||
.title_span {
|
||||
font-size: 16px;
|
||||
font-weight: bold;
|
||||
position: absolute;
|
||||
left: -1px;
|
||||
top: 11px;
|
||||
}
|
||||
</style>
|
||||
<div id="app" v-cloak>
|
||||
<m-page-loading v-if="mLoading"></m-page-loading>
|
||||
<van-nav-bar
|
||||
@@ -50,79 +15,72 @@ layout("/mobile/platform.html"){
|
||||
<van-search
|
||||
v-model="pageForm.searchKeyWord"
|
||||
shape="round"
|
||||
maxlength="10"
|
||||
maxlength="20"
|
||||
@search="doSearch"
|
||||
placeholder="请输入提案名称或者提案编号进行查询"
|
||||
>
|
||||
</van-search>
|
||||
|
||||
></van-search>
|
||||
|
||||
<van-dropdown-menu>
|
||||
<van-dropdown-item v-model="pageForm.meetingId" :options="sessionList"
|
||||
@change="doSearch"></van-dropdown-item>
|
||||
<van-dropdown-item v-model="pageForm.proposalTypeId" :options="proposalTypeList"
|
||||
@change="doSearch"></van-dropdown-item>
|
||||
<!-- <van-dropdown-item v-model="pageForm.proposalResultCode" :options="resultList"
|
||||
@change="doSearch"></van-dropdown-item>-->
|
||||
</van-dropdown-menu>
|
||||
|
||||
|
||||
<van-tabs v-model="pageForm.isAudit" @change="doSearch()">
|
||||
<van-tab title="未附议" :name="false"></van-tab>
|
||||
<van-tab title="已附议" :name="true"></van-tab>
|
||||
<van-tabs v-model="pageForm.isAudit" @change="doSearch">
|
||||
<van-tab title="待附议" name="false"></van-tab>
|
||||
<van-tab title="已附议" name="true"></van-tab>
|
||||
</van-tabs>
|
||||
</div>
|
||||
|
||||
<div style="margin: 170px auto 0">
|
||||
<van-list
|
||||
v-model="mLoading" :immediate-check="false"
|
||||
v-if="pageForm.meetingId"
|
||||
v-model="mLoading"
|
||||
:immediate-check="false"
|
||||
:finished="finished"
|
||||
:finished-text="tableData.length>0?'没有更多了':''"
|
||||
@load="onLoad">
|
||||
<div v-for="o in tableData" class="van-doc-card">
|
||||
<div @click="openView(o.id,o.secondedId)">
|
||||
<div>
|
||||
<div class="van-ellipsis"
|
||||
style="font-size: 13px;font-weight: bold;flex: 1;width:80%;overflow: hidden;white-space: nowrap">
|
||||
<span class="title_span" :style="'color:'+o.stateColor">|</span>提案名称:{{o.proposalName}}
|
||||
</div>
|
||||
<div style="position: absolute; right: 14px;top: 12.3px;text-align: right" v-if="!o.isAgree">
|
||||
<van-tag :style="'color:'+o.stateColor" size="medium" plain round type="primary">附议
|
||||
</van-tag>
|
||||
</div>
|
||||
<div v-for="o in tableData" class="list-card" :style="{'--card-accent': o.stateColor || '#2563eb'}"
|
||||
@click="openView(o)">
|
||||
<div class="card-header">
|
||||
<div class="card-title">
|
||||
{{o.proposalName}}
|
||||
</div>
|
||||
<van-divider></van-divider>
|
||||
<div>
|
||||
<van-row>
|
||||
<van-col span="12"><span style="color: grey">提案编号:</span>{{o.proposalCode}}</van-col>
|
||||
<van-col span="12"><span style="color: grey">提案类型:</span>{{o.typeName}}</van-col>
|
||||
</van-row>
|
||||
<van-row>
|
||||
<van-col span="12" style="overflow: hidden;white-space: nowrap;text-overflow: ellipsis;">
|
||||
<span style="color: grey">代 表 团:</span>{{o.delegationName}}
|
||||
</van-col>
|
||||
<van-col span="12"><span style="color: grey">提案届次:</span>{{o.meetingName}}</van-col>
|
||||
</van-row>
|
||||
<van-divider></van-divider>
|
||||
<span class="badge" :class="getAgreeBadgeClass(o)">
|
||||
{{getAgreeText(o)}}
|
||||
</span>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div class="card-item">
|
||||
<span class="card-label">提案编号:</span>
|
||||
<span class="card-value">{{o.proposalCode}}</span>
|
||||
</div>
|
||||
<div class="train-title" style="margin-top: 11px">
|
||||
<span style="color: grey">立案结果:</span>{{o.resultName ? o.resultName : '暂无'}}
|
||||
<span style="color: grey;margin-left: 24%;">附 议 人:</span>{{o.secondedUserName}}
|
||||
|
||||
<div class="card-item">
|
||||
<span class="card-label">提案类型:</span>
|
||||
<span class="card-value">{{o.typeName}}</span>
|
||||
</div>
|
||||
<div class="card-item">
|
||||
<span class="card-label">代表团:</span>
|
||||
<span class="card-value">{{o.delegationName}}</span>
|
||||
</div>
|
||||
<div class="card-item">
|
||||
<span class="card-label">提案届次:</span>
|
||||
<span class="card-value">{{o.meetingName}}</span>
|
||||
</div>
|
||||
<div class="card-item">
|
||||
<span class="card-label">提案状态:</span>
|
||||
<span class="card-value">{{o.stateName}}</span>
|
||||
</div>
|
||||
<div class="card-item">
|
||||
<span class="card-label">附议人:</span>
|
||||
<span class="card-value">{{o.secondedUserName}}</span>
|
||||
</div>
|
||||
</div>
|
||||
<!-- <van-cell-group inset>
|
||||
<van-cell title="提案名称" :border="false">
|
||||
<div style="display: flex;align-items: center">
|
||||
<span :style="{color:themeColor}" style="font-size: 16px" class="van-ellipsis">{{o.proposalName}}</span>
|
||||
</div>
|
||||
</van-cell>
|
||||
<van-cell :border="false" title="提案编号">{{o.proposalCode}}</van-cell>
|
||||
<van-cell :border="false" title="附  议  人">{{o.secondedUserName}}</van-cell>
|
||||
<van-cell :border="false" title="提案类型">{{o.typeName}}</van-cell>
|
||||
<van-cell :border="false" title="提案状态">
|
||||
<span :style="'color:'+o.stateColor">{{ o.stateName }}</span>
|
||||
</van-cell>
|
||||
</van-cell-group>-->
|
||||
<div class="card-footer">
|
||||
<span class="card-label">立案结果:</span>
|
||||
<span class="card-value">{{o.resultName ? o.resultName : '暂无'}}</span>
|
||||
</div>
|
||||
</div>
|
||||
</van-list>
|
||||
<van-empty
|
||||
@@ -142,95 +100,98 @@ layout("/mobile/platform.html"){
|
||||
data() {
|
||||
return {
|
||||
pageForm: {
|
||||
isAudit: false
|
||||
isAudit: 'false'
|
||||
},
|
||||
list: [],
|
||||
state: '0',
|
||||
loading: false,
|
||||
finished: false,
|
||||
refreshing: false,
|
||||
sessionList: [],
|
||||
delegationList: [],
|
||||
proposalTypeList: [],
|
||||
resultList: [],
|
||||
auditList: [
|
||||
{text: '未附议', value: false},
|
||||
{text: '已附议', value: true},
|
||||
]
|
||||
listLoading: false
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
getAgreeText(row) {
|
||||
if (row.isAgree === true || row.isAgree === 1) {
|
||||
return '已同意'
|
||||
}
|
||||
if (row.isAgree === false || row.isAgree === 0) {
|
||||
return '已拒绝'
|
||||
}
|
||||
return '待附议'
|
||||
},
|
||||
getAgreeBadgeClass(row) {
|
||||
if (row.isAgree === true || row.isAgree === 1) {
|
||||
return 'badge-green'
|
||||
}
|
||||
if (row.isAgree === false || row.isAgree === 0) {
|
||||
return 'badge-red'
|
||||
}
|
||||
return 'badge-draft'
|
||||
},
|
||||
doSearch() {
|
||||
this.pageForm.pageNumber = 1
|
||||
this.$set(this.pageForm, 'pageNumber', 1)
|
||||
this.tableData = []
|
||||
this.finished = false
|
||||
this.onLoad()
|
||||
},
|
||||
async onLoad() {
|
||||
onLoad() {
|
||||
if (this.listLoading || this.finished) {
|
||||
return
|
||||
}
|
||||
this.listLoading = true
|
||||
this.mLoading = true
|
||||
$.post(loc() + '/pageData', this.pageForm).then(res => {
|
||||
if (res.code === 0) {
|
||||
this.tableData = this.tableData.concat(res.data.list)
|
||||
if (this.tableData.length >= res.data.totalCount) {
|
||||
this.finished = true
|
||||
} else {
|
||||
this.pageForm.pageNumber++
|
||||
}
|
||||
}
|
||||
this.mLoading = false
|
||||
})
|
||||
},
|
||||
doAudit(flag, row) {
|
||||
const {id, secondedId} = row
|
||||
let res = flag === true ? '通过' : '拒绝'
|
||||
|
||||
vant.Dialog.confirm({
|
||||
title: '提示',
|
||||
message: '您确定' + res + '吗?',
|
||||
}).then(() => {
|
||||
$.post('/platform/proposal/transact/seconded/doAudit', {
|
||||
secondedId: secondedId,
|
||||
proposalId: id,
|
||||
flag: flag
|
||||
}).then(res => {
|
||||
$.post(loc() + '/pageData', this.pageForm)
|
||||
.then((res) => {
|
||||
if (res.code === 0) {
|
||||
this.pageForm = {
|
||||
pageNumber: 1,
|
||||
pageSize: 5,
|
||||
totalCount: 0
|
||||
this.tableData = this.tableData.concat(res.data.list)
|
||||
if (this.tableData.length >= res.data.totalCount) {
|
||||
this.finished = true
|
||||
} else {
|
||||
this.$set(this.pageForm, 'pageNumber', this.pageForm.pageNumber + 1)
|
||||
}
|
||||
this.tableData = []
|
||||
this.onLoad()
|
||||
vant.Toast.success('提交成功!')
|
||||
}
|
||||
})
|
||||
}).catch(() => {
|
||||
})
|
||||
.always(() => {
|
||||
this.listLoading = false
|
||||
this.mLoading = false
|
||||
})
|
||||
},
|
||||
|
||||
openView(id, secondedId) {
|
||||
window.location.href = '/mobile/proposal/seconded/view?biz_key=' + secondedId + '&proposal_id=' + id + '&mobile=' + true
|
||||
openView(row) {
|
||||
window.location.href = '/mobile/proposal/seconded/view?biz_key=' + row.secondedId
|
||||
+ '&proposal_id=' + row.id
|
||||
+ '&mobile=' + true
|
||||
},
|
||||
loadOptions() {
|
||||
$.get('/mobile/proposal/common/getAllSession')
|
||||
.then((res) => {
|
||||
this.sessionList = res.data
|
||||
if (this.sessionList && this.sessionList.length > 0) {
|
||||
this.$set(this.pageForm, 'meetingId', this.sessionList[0].value)
|
||||
}
|
||||
})
|
||||
.then(() => $.get('/mobile/proposal/common/getProposalType'))
|
||||
.then((res) => {
|
||||
this.proposalTypeList = res.data
|
||||
if (this.proposalTypeList && this.proposalTypeList.length > 0) {
|
||||
this.$set(this.pageForm, 'proposalTypeId', this.proposalTypeList[0].value)
|
||||
}
|
||||
this.onLoad()
|
||||
})
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
this.sessionList = await mProposal.getAllSession()
|
||||
this.proposalTypeList = await mProposal.getProposalType()
|
||||
this.resultList = await mProposal.getProposalDict()
|
||||
if (this.sessionList && this.sessionList.length > 0) {
|
||||
this.$set(this.pageForm, "meetingId", this.sessionList[0].value)
|
||||
}
|
||||
if (this.proposalTypeList && this.proposalTypeList.length > 0) {
|
||||
this.$set(this.pageForm, "proposalTypeId", this.proposalTypeList[0].value)
|
||||
}
|
||||
if (this.resultList && this.resultList.length > 0) {
|
||||
this.$set(this.pageForm, "proposalResultCode", this.resultList[0].value)
|
||||
}
|
||||
this.onLoad()
|
||||
created() {
|
||||
this.$set(this.pageForm, 'pageNumber', 1)
|
||||
this.$set(this.pageForm, 'pageSize', 5)
|
||||
this.$set(this.pageForm, 'totalCount', 0)
|
||||
this.loadOptions()
|
||||
},
|
||||
})
|
||||
window.addEventListener('pageshow', e => {
|
||||
|
||||
window.addEventListener('pageshow', (e) => {
|
||||
if (e.persisted || (window.performance && window.performance.navigation.type === 2)) {
|
||||
vue.onLoad()
|
||||
vue.$set(vue.pageForm, 'pageNumber', 1)
|
||||
vue.$set(vue.pageForm, 'meetingId', null)
|
||||
vue.tableData = []
|
||||
vue.finished = false
|
||||
vue.loadOptions()
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
@@ -231,6 +231,20 @@ layout("/layouts/platform.html"){
|
||||
v-loading="formLoading">
|
||||
<vi-title title="福利项目信息"></vi-title>
|
||||
|
||||
<el-form-item label="沿用项目" v-if="!formData.id">
|
||||
<el-select @change="reuseProjectChange"
|
||||
clearable
|
||||
filterable
|
||||
placeholder="请选择需要沿用的历史福利项目"
|
||||
style="width: 100%"
|
||||
v-model="reuseProjectId">
|
||||
<el-option :key="item.value"
|
||||
:label="item.label"
|
||||
:value="item.value"
|
||||
v-for="item in reuseProjectOptions"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="项目名称" prop="name">
|
||||
<el-input maxlength="100" placeholder="项目名称" v-model="formData.name"></el-input>
|
||||
</el-form-item>
|
||||
@@ -310,7 +324,8 @@ layout("/layouts/platform.html"){
|
||||
</el-switch>
|
||||
</el-form-item>
|
||||
</el-col>-->
|
||||
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col span="4" v-if="formData.isRoutine">
|
||||
<el-form-item label="是否多选" prop="isCheckBox">
|
||||
<el-switch
|
||||
@@ -338,7 +353,6 @@ layout("/layouts/platform.html"){
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</template>
|
||||
|
||||
</el-row>
|
||||
|
||||
<el-form-item label="人员核对名单" prop="taskId" v-if="formData.isYearBirthday">
|
||||
@@ -458,24 +472,24 @@ layout("/layouts/platform.html"){
|
||||
>
|
||||
<el-form :model="formData" label-width="80px" ref="sendForm">
|
||||
|
||||
<!-- <el-form-item
|
||||
:rules="[{required: true, message: '请选择发送方式', trigger: ['blur', 'change']}]"
|
||||
label="发送方式"
|
||||
prop="sendTypes">
|
||||
<el-checkbox-group size="medium" v-model="formData.sendTypes">
|
||||
<el-checkbox border label="SMS">短信发送</el-checkbox>
|
||||
<el-checkbox border label="WeChat">微信发送</el-checkbox>
|
||||
</el-checkbox-group>
|
||||
</el-form-item>
|
||||
-->
|
||||
<!-- <el-form-item
|
||||
:rules="[{required: true, message: '请选择发送方式', trigger: ['blur', 'change']}]"
|
||||
label="发送方式"
|
||||
prop="sendTypes">
|
||||
<el-checkbox-group size="medium" v-model="formData.sendTypes">
|
||||
<el-checkbox border label="SMS">短信发送</el-checkbox>
|
||||
<el-checkbox border label="WeChat">微信发送</el-checkbox>
|
||||
</el-checkbox-group>
|
||||
</el-form-item>
|
||||
-->
|
||||
<el-form-item
|
||||
:rules="[{required: true, message: '请输入发送标题', trigger: ['blur', 'change']}]"
|
||||
label="发送标题"
|
||||
prop="title">
|
||||
:rules="[{required: true, message: '请输入发送标题', trigger: ['blur', 'change']}]"
|
||||
label="发送标题"
|
||||
prop="title">
|
||||
<el-input
|
||||
:rows="6"
|
||||
placeholder="请输入发送标题"
|
||||
v-model="formData.title">
|
||||
:rows="6"
|
||||
placeholder="请输入发送标题"
|
||||
v-model="formData.title">
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
|
||||
@@ -563,6 +577,8 @@ layout("/layouts/platform.html"){
|
||||
sendMsgDialogVisible: false,
|
||||
|
||||
memberCheckTaskOptions: [],
|
||||
reuseProjectId: null,
|
||||
reuseProjectOptions: [],
|
||||
}
|
||||
},
|
||||
components: {
|
||||
@@ -573,6 +589,95 @@ layout("/layouts/platform.html"){
|
||||
'send-msg': httpVueLoader('/components/plugins/SendMsgByGroupId.vue'),
|
||||
},
|
||||
methods: {
|
||||
getReuseProjectOptions(projectOptions) {
|
||||
let options = []
|
||||
projectOptions.forEach(yearItem => {
|
||||
if (yearItem.children && yearItem.children.length > 0) {
|
||||
yearItem.children.forEach(project => {
|
||||
options.push({
|
||||
label: yearItem.label + " - " + project.label,
|
||||
value: project.value
|
||||
})
|
||||
})
|
||||
}
|
||||
})
|
||||
return options
|
||||
},
|
||||
resetReuseProjectIds(project) {
|
||||
if (project.welfareProjectSubjects && project.welfareProjectSubjects.length > 0) {
|
||||
project.welfareProjectSubjects.forEach(subject => {
|
||||
subject.id = null
|
||||
subject.projectId = null
|
||||
if (subject.options && subject.options.length > 0) {
|
||||
subject.options.forEach(option => {
|
||||
option.id = null
|
||||
option.subjectId = null
|
||||
option.selectCount = null
|
||||
option.rank = null
|
||||
if (!option.optionNameId) {
|
||||
option.optionNameId = ""
|
||||
}
|
||||
})
|
||||
}
|
||||
})
|
||||
}
|
||||
},
|
||||
resetReuseConditionStructure(project) {
|
||||
project.conditionStructureId = null
|
||||
if (project.conditionStructure) {
|
||||
project.conditionStructure.id = null
|
||||
if (project.conditionStructure.conditions && project.conditionStructure.conditions.length > 0) {
|
||||
project.conditionStructure.conditions.forEach(condition => {
|
||||
condition.id = null
|
||||
condition.structureId = null
|
||||
})
|
||||
}
|
||||
}
|
||||
},
|
||||
reuseProjectChange(projectId) {
|
||||
if (!projectId) {
|
||||
return
|
||||
}
|
||||
this.formLoading = true
|
||||
$.get(loc() + "/findOne", {id: projectId})
|
||||
.then((resp) => {
|
||||
if (resp.code === 0) {
|
||||
const data = clone(resp.data)
|
||||
data.id = null
|
||||
data.taskId = null
|
||||
data.year = null
|
||||
data.created = null
|
||||
data.choiceTimeStart = ""
|
||||
data.choiceTimeEnd = ""
|
||||
data.provideTimeStart = ""
|
||||
data.provideTimeEnd = ""
|
||||
data.overdueChoiceTimeEnd = ""
|
||||
data.choiceTime = []
|
||||
data.provideTime = []
|
||||
this.resetReuseConditionStructure(data)
|
||||
data.flexibleGifts = data.flexibleGifts || [{}]
|
||||
const idx = data.flexibleGifts.findIndex(v => v.isDefault)
|
||||
data.defaultFlexibleGifts = idx < 0 ? 0 : idx
|
||||
if (!data.welfareProjectSubjects || data.welfareProjectSubjects.length === 0) {
|
||||
data.welfareProjectSubjects = []
|
||||
} else {
|
||||
this.resetReuseProjectIds(data)
|
||||
}
|
||||
this.formData = data
|
||||
this.$nextTick(() => {
|
||||
if (this.$refs.form) {
|
||||
this.$refs.form.clearValidate()
|
||||
}
|
||||
})
|
||||
this.$message.success("已沿用所选项目配置,请确认项目名称、时间和发放范围")
|
||||
} else {
|
||||
this.$message.warning(resp.msg)
|
||||
}
|
||||
})
|
||||
.always(() => {
|
||||
this.formLoading = false
|
||||
})
|
||||
},
|
||||
async getMemberCheckTaskOptions() {
|
||||
const resp = await $.get('/platform/welfareMember/check/task/getAllTask', {year: this.pageForm.year})
|
||||
this.memberCheckTaskOptions = resp.data.filter(item => item.welfareCheckFilterMode === 2)
|
||||
@@ -631,7 +736,7 @@ layout("/layouts/platform.html"){
|
||||
},
|
||||
isCheckBoxChange() {
|
||||
if (this.formData.welfareProjectSubjects && this.formData.welfareProjectSubjects.length > 0) {
|
||||
this.formData.welfareProjectSubjects.forEach(v=> {
|
||||
this.formData.welfareProjectSubjects.forEach(v => {
|
||||
v.subjectType = this.formData.isCheckBox ? this.formData.isCheckBox : 'radio'
|
||||
})
|
||||
} else {
|
||||
@@ -772,6 +877,7 @@ layout("/layouts/platform.html"){
|
||||
welfareProjectSubjects: [],
|
||||
flexibleGifts: [{}]
|
||||
}
|
||||
this.reuseProjectId = null
|
||||
this.$refs.guava.edit()
|
||||
if (this.$refs.form)
|
||||
this.$refs.form.resetFields();
|
||||
@@ -946,6 +1052,9 @@ layout("/layouts/platform.html"){
|
||||
const personType = await getDictOptions("PERSON_TYPE")
|
||||
const userState = await getDictOptions("USER_STATE")
|
||||
this.getMemberCheckTaskOptions();
|
||||
getWelfareProjects().then((options) => {
|
||||
this.reuseProjectOptions = this.getReuseProjectOptions(options)
|
||||
})
|
||||
this.fields = this.fields.concat([{
|
||||
label: '人员类型',
|
||||
value: 'personType',
|
||||
|
||||
Reference in New Issue
Block a user