This commit is contained in:
liuye
2022-10-19 13:38:32 +08:00
10 changed files with 459 additions and 217 deletions

View File

@@ -12,31 +12,34 @@
</template>
<template #content>
<div class="detail-content__wrapper">
<ai-card class="detail-content__wrapper--left" title="基础信息">
<template #content>
<ai-wrapper>
<ai-info-item label="上报人员" :value="detail.name"></ai-info-item>
<ai-info-item label="当前状态" :value="dict.getLabel('clapEventStatus', detail.eventStatus)"></ai-info-item>
<ai-info-item label="联系方式">{{ detail.phone }}</ai-info-item>
<ai-info-item label="上报时间">{{ detail.createTime }}</ai-info-item>
<ai-info-item label="事件类型">{{ detail.groupName }}</ai-info-item>
<ai-info-item label="事件描述" isLine>{{ detail.content }}</ai-info-item>
<ai-info-item label="现场照片" isLine>
<ai-uploader :instance="instance" disabled v-model="detail.files"></ai-uploader>
</ai-info-item>
<ai-info-item label="所属网格">{{ detail.girdName }}</ai-info-item>
<ai-info-item label="事件位置" isLine>
<div id="map" style="width: 500px; height: 280px;"></div>
</ai-info-item>
</ai-wrapper>
</template>
</ai-card>
<div class="detail-content__wrapper--left">
<ai-card title="基础信息">
<template #content>
<ai-wrapper>
<ai-info-item label="上报人员" :value="detail.name"></ai-info-item>
<ai-info-item label="当前状态" :value="dict.getLabel('clapEventStatus', detail.eventStatus)"></ai-info-item>
<ai-info-item label="联系方式">{{ detail.phone }}</ai-info-item>
<ai-info-item label="上报时间">{{ detail.createTime }}</ai-info-item>
<ai-info-item label="事件类型">{{ detail.groupName }}</ai-info-item>
<ai-info-item label="事件描述" isLine>{{ detail.content }}</ai-info-item>
<ai-info-item label="现场照片" isLine>
<ai-uploader :instance="instance" disabled v-model="detail.files"></ai-uploader>
</ai-info-item>
<ai-info-item label="所属网格">{{ detail.girdName }}</ai-info-item>
<ai-info-item label="事件位置" isLine>
<div id="map" style="width: 500px; height: 280px;"></div>
</ai-info-item>
</ai-wrapper>
</template>
</ai-card>
<ai-evaluation :bid="form.id" :info.sync="evaluation"/>
</div>
<div class="rightZone">
<ai-card title="办理进度">
<template #content>
<el-steps direction="vertical" :active="1">
<el-step
v-for="(item, i) in processList"
v-for="(item, i) in process"
:key="i"
:title="item.systemExplain"
:description="item.doTime">
@@ -190,12 +193,18 @@ export default {
groupName: '',
content: [],
eventStatus: '2'
}
},
evaluation: {}
}
},
computed: {
...mapState(['user'])
...mapState(['user']),
process: v => [v.processList, v.evaluation.id ? {
systemExplain: `${v.evaluation.createUserName}完成评价 (${v.evaluation.score}星评价)`,
doTime: v.evaluation.createTime,
doExplain: v.evaluation.rateText
} : null].flat().filter(Boolean)
},
created() {
@@ -501,6 +510,7 @@ export default {
.detail-content__wrapper {
display: flex;
width: 100%;
flex-wrap: wrap;
.detail-content__wrapper--left {
flex: 1;

View File

@@ -86,28 +86,31 @@
</ai-wrapper>
</template>
</ai-card>
<ai-card title="处理意见">
<ai-card title="卡口处置意见">
<template #content>
<ai-wrapper
style="margin-bottom: 20px;"
v-for="item in info.riskDisposalList"
:key="item.id"
label-width="120px">
<ai-info-item label="处人员" :value="info.createUserName"></ai-info-item>
<ai-info-item label="联系电话" :value="info.createUserPhone"></ai-info-item>
<ai-info-item label="处意见" :value="dict.getLabel('EP_handleType', item.handleType)"></ai-info-item>
<ai-info-item label="处人员" :value="item.createUserName"></ai-info-item>
<ai-info-item label="联系电话" :value="item.createUserPhone"></ai-info-item>
<ai-info-item label="处意见" :value="dict.getLabel('EP_handleType', item.handleType)"></ai-info-item>
<ai-info-item v-if="item.handleType === '2'" label="集中隔离地" :value="dict.getLabel('EP_quarantineAddress', item.quarantineAddress)"></ai-info-item>
<ai-info-item v-if="item.handleType === '6'" label="移交对象" :value="dict.getLabel('EP_handoverObject', item.handoverObject)"></ai-info-item>
<ai-info-item v-if="item.handleType === '6'" label="移交方式" :value="dict.getLabel('EP_handoverMethod', item.handoverMethod)"></ai-info-item>
<ai-info-item v-if="item.handleType === '6'" label="交接人员姓名" :value="info.handoverPersonName"></ai-info-item>
<ai-info-item v-if="item.handleType === '6'" label="手机号" :value="info.handoverPersonPhone"></ai-info-item>
<ai-info-item label="居家状态" v-if="item.handleType === '3' && item.homeStatus" :value="dict.getLabel('EP_homeStatus', item.homeStatus)"></ai-info-item>
<ai-info-item
v-if="['2'].includes(item.handleType)"
v-if="['2', '3'].includes(item.handleType) && item.homeStatus"
label="隔离时间"
:value="item.quarantineBeginTime ? item.quarantineBeginTime + '至' + item.quarantineEndTime : ''">
</ai-info-item>
<ai-info-item v-if="['2'].includes(item.handleType)" label="隔离策略" :value="dict.getLabel('EP_quarantineStrategy', item.quarantineStrategy)"></ai-info-item>
<ai-info-item label="图片" isLine v-if="['3', '6'].includes(item.handleType)">
<ai-info-item label="隔离策略" v-if="['2', '3'].includes(item.handleType) && item.homeStatus" :value="dict.getLabel('EP_quarantineStrategy', item.quarantineStrategy)"></ai-info-item>
<ai-info-item label="管控方式" isLine v-if="['3'].includes(item.handleType) && item.homeStatus" :value="dict.getLabel('EP_controlMethod', item.controlMethod)"></ai-info-item>
<ai-info-item v-if="['2', '3', '6'].includes(item.handleType) && item.handoverPersonName" label="移交对象" :value="dict.getLabel('EP_handoverObject', item.handoverObject)"></ai-info-item>
<ai-info-item v-if="['2', '3', '6'].includes(item.handleType) && item.handoverPersonName" label="移交方式" :value="dict.getLabel('EP_handoverMethod', item.handoverMethod)"></ai-info-item>
<ai-info-item v-if="['2', '3', '6'].includes(item.handleType) && item.handoverPersonName" label="交接人员姓名" :value="item.handoverPersonName"></ai-info-item>
<ai-info-item v-if="['2', '3', '6'].includes(item.handleType) && item.handoverPersonName" label="手机号" :value="item.handoverPersonPhone"></ai-info-item>
<ai-info-item label="交接图片" isLine v-if="['3', '2', '6'].includes(item.handleType) && item.handoverPersonName">
<ai-uploader
:instance="instance"
:value="item.fileList"
@@ -119,6 +122,31 @@
<ai-empty style="margin-bottom: 60px;" v-if="info.riskDisposalList && !info.riskDisposalList.length"></ai-empty>
</template>
</ai-card>
<ai-card title="社区处置意见">
<template #content>
<ai-wrapper
style="margin-bottom: 20px;"
v-if="communityInfo.communityHandleType"
label-width="120px">
<ai-info-item label="处置人员" :value="communityInfo.createUserName"></ai-info-item>
<ai-info-item label="联系电话" :value="communityInfo.createUserPhone"></ai-info-item>
<ai-info-item label="处置意见" :value="dict.getLabel('EP_handleType', communityInfo.handleType)"></ai-info-item>
<ai-info-item label="居家状态" :value="dict.getLabel('EP_homeStatus', communityInfo.homeStatus)"></ai-info-item>
<ai-info-item label="隔离时间" :value="communityInfo.quarantineBeginTime ? communityInfo.quarantineBeginTime + '至' + communityInfo.quarantineEndTime : ''"></ai-info-item>
<ai-info-item label="隔离策略" :value="dict.getLabel('EP_quarantineStrategy', communityInfo.quarantineStrategy)"></ai-info-item>
<ai-info-item label="管控方式" :value="dict.getLabel('EP_controlMethod', communityInfo.controlMethod)"></ai-info-item>
<ai-info-item label="图片" isLine>
<ai-uploader
:instance="instance"
:value="communityInfo.fileList"
disabled
:limit="9">
</ai-uploader>
</ai-info-item>
</ai-wrapper>
<ai-empty style="margin-bottom: 60px;" v-if="!communityInfo.communityHandleType"></ai-empty>
</template>
</ai-card>
</div>
</template>
</ai-detail>
@@ -141,6 +169,7 @@
currIndex: 0,
isLoading: false,
tableData: [],
communityInfo: {},
colConfigs: [
{prop: 'name', label: '姓名', align: 'center' },
{prop: 'phone', label: '手机号', align: 'center'}
@@ -153,8 +182,7 @@
this.isLoading = true
if (this.params && this.params.id) {
this.id = this.params.id
this.$dict.load(['EP_riskLevel', 'EP_handleType', 'EP_registerPersonType', 'EP_highRiskIndustries', 'EP_travelType', 'yesOrNo', 'EP_handoverObject',
'EP_handleType', 'EP_quarantineAddress', 'EP_homeStatus', 'EP_quarantineStrategy', 'EP_controlMethod', 'EP_handoverMethod', 'EP_abnormalType']).then(() => {
this.$dict.load(['EP_handleType', 'EP_registerPersonType', 'EP_highRiskIndustries', 'EP_travelType', 'yesOrNo', 'EP_handoverObject', 'EP_quarantineAddress', 'EP_homeStatus', 'EP_quarantineStrategy', 'EP_controlMethod', 'EP_handoverMethod', 'EP_abnormalType']).then(() => {
this.getInfo(this.params.id)
})
}
@@ -165,8 +193,9 @@
this.instance.post(`/app/appepidemicpreventionregisterinfo/queryDetailById?id=${id}`).then(res => {
if (res.code === 0) {
this.info = res.data
this.info.checkPhoto = res.data.checkPhoto ? JSON.parse(res.data.checkPhoto) : []
this.communityInfo = res.data.riskDisposalList.filter(v => !!v.communityHandleType).length ? res.data.riskDisposalList.filter(v => !!v.communityHandleType)[0] : {}
this.info.riskDisposalList = res.data.riskDisposalList.filter(v => !v.communityHandleType)
this.info.travelTypeNames = res.data.travelType.split(',').map(v => {
return this.dict.getLabel('EP_travelType', v)
}).join('')

View File

@@ -46,7 +46,7 @@
placeholder="选择结束日期"
@change="search.current = 1, getList()">
</el-date-picker>
<ai-download :instance="instance" url="/app/appepidemicpreventionregisterinfo/export" :params="search" fileName="卡口登记" :disabled="tableData.length == 0">
<ai-download :instance="instance" url="/app/appepidemicpreventionregisterinfo/export" :params="params" fileName="卡口登记" :disabled="tableData.length == 0">
<el-button icon="iconfont iconExported" :disabled="tableData.length == 0">导出</el-button>
</ai-download>
</template>
@@ -139,7 +139,16 @@
},
computed: {
...mapState(['user'])
...mapState(['user']),
params () {
return {
...this.search,
arriveAreaId: this.search.arriveAreaId,
queryBeginTime: this.search.queryBeginTime ? this.search.queryBeginTime + ' 00:00:00' : '',
queryEndTime: this.search.queryEndTime ? this.search.queryEndTime + ' 23:59:59' : ''
}
}
},
created () {

View File

@@ -33,7 +33,7 @@
<ai-import :instance="instance" :dict="dict" type="appepidemicpreventiondatamatch" name="数据比对" @success="getList()">
<el-button icon="iconfont iconImport" type="primary">导入</el-button>
</ai-import>
<ai-download :instance="instance" url="/app/appepidemicpreventiondatamatch/export" :params="search" fileName="数据比对" :disabled="tableData.length == 0">
<ai-download :instance="instance" url="/app/appepidemicpreventiondatamatch/export" :params="params" fileName="数据比对" :disabled="tableData.length == 0">
<el-button icon="iconfont iconExported" :disabled="tableData.length == 0">导出</el-button>
</ai-download>
</template>
@@ -50,6 +50,7 @@
<el-table-column slot="nucleicAcidSamplingProve" label="核酸结果" align="center">
<template slot-scope="{ row }">
<ai-uploader
v-if="row.nucleicAcidSamplingProve"
:instance="instance"
:value="[{url: row.nucleicAcidSamplingProve}]"
disabled
@@ -130,6 +131,17 @@
}
},
computed: {
params () {
return {
...this.search,
arriveAreaId: this.search.arriveAreaId,
queryBeginTime: this.search.queryBeginTime ? this.search.queryBeginTime + ' 00:00:00' : '',
queryEndTime: this.search.queryEndTime ? this.search.queryEndTime + ' 23:59:59' : ''
}
}
},
created () {
this.loading = true

View File

@@ -16,6 +16,10 @@
<ai-info-item label="单位名称" :value="info.organizationName"></ai-info-item>
<ai-info-item label="选举方式">
{{ info.electionMethod==0? '等额':'差额'}}
<el-tooltip class="item" effect="dark" content="差额选举:候选人数多于应选人数的选举方式;
等额选举:候选人数与应选人数相等的选举方式。" placement="top">
<i class="el-icon-info" style="margin-right: 8px"></i>
</el-tooltip>
</ai-info-item>
<ai-info-item label="应选人数" :value="info.candidatesNumber"></ai-info-item>
<ai-info-item label="投票日期" :value="info.votingDate"></ai-info-item>

View File

@@ -9,6 +9,7 @@
<script>
import addChange from "./components/addChange.vue";
import List from "./components/List.vue";
import organizationSetting from "./components/organizationSetting.vue";
export default {
name: "AppOrganizationChange",
@@ -17,7 +18,11 @@ export default {
instance: Function,
dict: Object,
},
components: {List, addChange},
components: {
List,
addChange,
organizationSetting,
},
data() {
return {
component: "List",
@@ -33,6 +38,11 @@ export default {
this.params = data.params;
}
if (data.type === "organizationSetting") {
this.component = "organizationSetting";
this.params = data.params;
}
if (data.type === "addChange") {
this.component = "addChange";
this.params = data.params;

View File

@@ -3,28 +3,27 @@
<template slot="title">
<ai-title title="组织换届" isShowBottomBorder>
<template slot="rightBtn">
<el-button size="small" type="primary" icon="iconfont iconAdd" @click="toAdd('')" >换届设置</el-button>
<el-button size="small" type="primary" icon="iconfont iconAdd" @click="toSetting('')" >换届设置</el-button>
</template>
</ai-title>
</template>
<template #left>
<ai-tree-menu title="组织目录" searchPlaceholder="请输入组织名称" @search="onSearch">
<ai-party-tree
:filter-node-method="filterNode"
ref="tree"
:instance="instance"
:root="user.info.organizationId"
:current-node-key="selected.id"
@select="onTreeChange"/>
:filter-node-method="filterNode"
ref="tree"
:instance="instance"
:root="user.info.organizationId"
:current-node-key="selected.id"
@select="onTreeChange"/>
</ai-tree-menu>
</template>
<template slot="content" class="content">
<el-tabs v-model="currIndex" >
<el-tab-pane v-for="(tab,i) in tabs" :key="i" :label="tab.label">
<component :ref="String(i)" v-if="currIndex == i" :is="tab.comp" lazy :instance="instance"
<component :ref="tab.name" v-if="currIndex == String(i)" :is="tab.comp" lazy :instance="instance" :selected="selected"
:dict="dict" :permissions="permissions" v-on="$listeners"/>
</el-tab-pane>
</el-tabs>
<div class="add_btn">
<el-button size="small" type="primary" icon="iconfont iconAdd" @click="toAdd('')" >新增换届</el-button>
@@ -34,7 +33,7 @@
</template>
<script>
import {mapState} from 'vuex'
import { mapState } from 'vuex'
import moment from './moment.vue'
import history from './history.vue'
@@ -48,34 +47,11 @@ export default {
},
data() {
return {
search: {
current: 1,
size: 10,
con: '',
age: [],
sex: '',
nation: '',
partyStatus: '',
flowStatus: '',
education: '',
partyPosition: '',
birthStart: '',
birthEnd: '',
turnPositiveStart: '',
turnPositiveEnd: '',
joinPartyStart: '',
joinPartyEnd: ''
},
orgName: '',
loading: false,
total: 0,
tableData: [],
ids: '',
tabs: [
{label: '当前届次', name: 'moment', comp: moment, permission: ''},
{label: '历史届次', name: 'history', comp: history, permission: ''}
],
currIndex: '0'
currIndex: '0',
}
},
components: {
@@ -88,78 +64,25 @@ export default {
orgTree() {
return this.$refs.tree?.$refs?.partyTree
},
// exportQuery() {
// let {id: partyOrgId} = this.selected
// return {
// ids: this.ids ? this.ids.split(',') : [],
// ...this.search, partyOrgId
// }
// },
// isShowAddBtn() {
// return this.selected.isLeaf == 1
// }
},
created() {
// this.dict.load('disciplinary', 'partyType', 'sex', 'nation', 'education', 'partyStatus', 'partyPosition', 'flowStatus', 'auditStatus')
// this.getList()
console.log(this.user);
},
methods: {
showNeighbourSetting(id) {
this.$router.push({query: {id}, hash: "#ns"})
},
onTreeChange(e) {
this.$emit("update:selected", e)
this.getList(e.id)
this.$refs[this.tabs[Number(this.currIndex)].name][0].getList(e.id)
},
onSearch(v) {
this.orgTree.filter(v)
},
getList(partyOrgId) {
if (!this.user.info.organizationId) return
this.loading = true
partyOrgId = partyOrgId || this.selected.id
this.instance.post(`/app/appparty/list`, null, {
params: {partyOrgId, ...this.search, age: this.search.age?.join(',')}
}).then(res => {
this.loading = false
if (res?.data) {
this.tableData = res.data.records
this.total = res.data.total
}
}).catch(() => {
this.loading = false
})
},
removeAll() {
if (!this.ids) {
return this.$message.error('请选择党员')
}
this.remove(this.ids)
},
handleSelectionChange(e) {
this.ids = e.map(v => v.id).join(',')
},
filterNode(value, data) {
if (!value) return true
return data.name.indexOf(value) !== -1
},
remove(id) {
this.$confirm('确定删除该数据?').then(() => {
this.instance.post(`/app/appparty/delete?ids=${id}`).then(res => {
if (res.code == 0) {
this.$message.success('删除成功!')
this.getList()
}
})
})
},
toDetail(id) {
this.$router.push({query: {id}})
},
toAdd(id) {
this.$emit('change', {
type: 'addChange',
@@ -167,6 +90,14 @@ export default {
id: id || ''
}
})
},
toSetting(id) {
this.$emit('change', {
type: 'organizationSetting',
params: {
id: id || ''
}
})
}
}
}

View File

@@ -1,71 +1,80 @@
<template>
<ai-list class="addChange">
<template #title>
<ai-title title="基本信息" isShowBottomBorder isShowBack @onBackClick="cancel(false)" />
</template>
<template #content>
<div class="Form" style="padding: 0 200px;">
<el-form ref="form" :model="form" label-width="100px" label-position="right">
<ai-bar title="基本信息"></ai-bar>
<section class="addChange">
<ai-detail>
<ai-title slot="title" title="新增换届" isShowBottomBorder isShowBack @onBackClick="cancel(false)" />
<template #content>
<ai-card title="基本信息">
<template #content>
<div class="Form">
<el-form ref="form" :model="form" :rules="rules" label-width="100px" label-position="right">
<el-row type="flex">
<el-col :span="12">
<el-form-item label="换届时间" prop="data" :rules="[{ required: true, message: '请选择换届时间', trigger: 'blur' }]">
<el-input size="small" :maxlength="30" placeholder="请输入大屏项目名称" v-model="form.name"></el-input>
<el-form-item label="换届时间" prop="changeTime">
<el-date-picker v-model="form.changeTime" value-format="yyyy-MM-dd" type="date" placeholder="选择日期" style="width:338px">
</el-date-picker>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="届次" prop="noun" :rules="[{ required: true, message: '请输入届次', trigger: 'blur' }]">
<el-input size="small" :maxlength="30" placeholder="请输入届次" v-model="form.name"></el-input>
<el-form-item label="届次" prop="sessionTime">
<el-input size="small" :maxlength="30" placeholder="请输入届次" v-model="form.sessionTime"></el-input>
</el-form-item>
</el-col>
</el-row>
</el-form>
<ai-bar title="本届任职(必填)">
<template slot="right">
<el-button size="small" type="text" icon="iconfont iconAdd" @click="toEdit('')" >添加任职人员</el-button>
</template>
</ai-bar>
<ai-table
class="detail-table__table"
:tableData="tableDataJob"
:col-configs="colConfigsJob"
:total="job.total"
:current.sync="job.current"
:size.sync="job.size"
>
<!-- @getList="getJobList" -->
<el-table-column slot="options" label="操作" align="center">
<template slot-scope="{ row }">
<el-button type="text" @click="jobEdit(row.id)">编辑</el-button>
<el-button type="text" @click="jobDelete(row.id)">删除</el-button>
<ai-bar title="本届任职(必填)">
<template slot="right">
<el-button size="small" type="text" icon="iconfont iconAdd" @click="form.serveList.push({name:null,position:null,type:0})" >添加任职人员</el-button>
</template>
</el-table-column>
</ai-table>
</ai-bar>
<el-table :data="form.serveList" size="mini" border stripe>
<el-table-column label="职位" align="center">
<template slot-scope="{row}">
<el-input class="tableInput" v-model="row.position" clearable placeholder="请输入职位"/>
</template>
</el-table-column>
<el-table-column label="姓名" align="center">
<template slot-scope="{row}">
<el-input class="tableInput" v-model="row.name" clearable placeholder="请输入姓名" />
</template>
</el-table-column>
<el-table-column label="操作" align="center">
<template slot-scope="{$index}">
<el-button type="text" @click="handleDelete($index, 'serveList')">删除</el-button>
</template>
</el-table-column>
</el-table>
</el-form>
<ai-bar title="本届候选人">
<template slot="right">
<el-button size="small" type="text" icon="iconfont iconAdd" @click="toEdit('')" >添加候选人</el-button>
<el-button size="small" type="text" icon="iconfont iconAdd" @click="form.candidateList.push({name:null,position:null,type: 1})" >添加候选人</el-button>
</template>
</ai-bar>
<ai-table
class="detail-table__table"
:tableData="tableDataPerson"
:col-configs="colConfigsPerson"
:total="person.total"
:current.sync="person.current"
:size.sync="person.size"
>
<!-- @getList="getJobList" -->
<el-table-column slot="options" label="操作" align="center">
<template slot-scope="{ row }">
<el-button type="text" @click="jobEdit(row.id)">编辑</el-button>
<el-button type="text" @click="jobDelete(row.id)">删除</el-button>
<el-table :data="form.candidateList" size="mini" border stripe>
<el-table-column label="职位" align="center">
<template slot-scope="{row}">
<el-input class="tableInput" v-model="row.position" clearable placeholder="请输入职位"/>
</template>
</el-table-column>
</ai-table>
<el-table-column label="候选人" align="center">
<template slot-scope="{row}">
<el-input class="tableInput" v-model="row.name" clearable placeholder="请输入姓名" />
</template>
</el-table-column>
<el-table-column label="操作" align="center">
<template slot-scope="{$index}">
<el-button type="text" @click="handleDelete($index, 'candidateList')">删除</el-button>
</template>
</el-table-column>
</el-table>
</div>
</template>
</ai-list>
</template>
</ai-card>
</template>
<template slot="footer" class="footer">
<el-button class="delete-btn footer-btn" @click="cancel(false)">取消</el-button>
<el-button class="footer-btn" type="primary" @click="confirm()">保存</el-button>
</template>
</ai-detail>
</section>
</template>
<script>
@@ -79,42 +88,16 @@ export default {
data() {
return {
form: {
addOrMakeup: true,
changeTime: '',
sessionTime: '',
serveList: [], // 任职人员列表
candidateList: [], // 候选人员列表
},
tableDataJob: [],
tableDataPerson: [],
totalJob: '',
job: {
total: 0,
current: 1,
size: 10,
rules: {
changeTime: [{ required: true, message: '请选择换届时间', trigger: 'blur' }],
sessionTime: [{ required: true, message: '请输入届次', trigger: 'blur' }],
},
person: {
total: 0,
current: 1,
size: 10,
}
}
},
computed: {
colConfigsJob() {
return [
{prop: 'content', label: '职位'},
{prop: 'content', label: '姓名'},
{slot: 'options'},
]
},
colConfigsPerson() {
return [
{prop: 'content', label: '职位'},
{prop: 'content', label: '候选人'},
{slot: 'options'},
]
},
formRules() {
return {
// corpId: [{required: true, message: "请输入CorpId"}],
}
}
},
methods: {
@@ -123,11 +106,36 @@ export default {
type: 'List',
isRefresh: !!isRefresh
})
}
},
handleDelete(i, type) {
this.$confirm("确定要删除该数据?").then(() => {
if(type == 'candidateList') {
this.form.candidateList.splice(i, 1)
} else if(type == 'serveList') {
this.form.serveList.splice(i, 1)
}
}).catch(() => 0)
},
confirm() {
this.$refs.form.validate((valid) => {
if(valid) {
this.instance.post(`/app/apporganizationgeneralelection/add`, {
...this.form
}).then(res=>{
if(res.code == 0) {
this.$message.success('提交成功')
this.cancel(true)
}
})
}
})
},
}
}
</script>
<style lang="scss" scope>
.addChange {}
.addChange {
height: 100%;
}
</style>

View File

@@ -86,7 +86,7 @@ export default {
instance: Function,
permissions: Function,
dict: Object,
selected: Object
selected: Object,
},
data() {
return {
@@ -128,6 +128,9 @@ export default {
}
}
},
mounted() {
this.getList(this.selected.id)
},
methods: {
jobEdit() {},
jobDelete() {},
@@ -140,6 +143,13 @@ export default {
}
})
},
getList(id) {
this.instance.post(`/app/apporganizationgeneralelection/queryDetailByOrganizationId?organizationId=${id}`).then(res=>{
if(res?.data) {
console.log(res,'111');
}
})
},
handleJobForm() {},
handleCandForm() {},
}

View File

@@ -0,0 +1,219 @@
<template>
<section class="organizationSetting">
<!-- <ai-detail class="add" v-if="id && !isEdit">
<template slot="title">
<ai-title title="换届选举详情" isShowBack isShowBottomBorder @onBackClick="cancel(false)"></ai-title>
</template>
<template slot="content">
<ai-card title="基本信息">
<template #right>
<span style="color:#2266FF;cursor: pointer;font-size: 12px;" class="iconfont iconEdit" v-if="isEdit==false" @click="isEdit = true">修改</span>
</template>
<template #content v-if="isEdit == false">
<ai-wrapper>
<ai-info-item label="标题" :value="info.title"></ai-info-item>
<ai-info-item label="投票说明" :value="info.votingInstructions"></ai-info-item>
<ai-info-item label="单位名称" :value="info.organizationName"></ai-info-item>
<ai-info-item label="选举方式">
{{ info.electionMethod==0? '等额':'差额'}}
<el-tooltip class="item" effect="dark" content="差额选举:候选人数多于应选人数的选举方式;
等额选举:候选人数与应选人数相等的选举方式。" placement="top">
<i class="el-icon-info" style="margin-right: 8px"></i>
</el-tooltip>
</ai-info-item>
<ai-info-item label="应选人数" :value="info.candidatesNumber"></ai-info-item>
<ai-info-item label="投票日期" :value="info.votingDate"></ai-info-item>
<ai-info-item label="候选人" isLine>
<span v-for="(item,index) in candidateUsersList" :key="index">
{{ item }}
<span v-if="index < candidateUsersList.length - 1"></span>
</span>
</ai-info-item>
<ai-info-item label="投票人" isLine :value="info.voteUsers">
<span v-for="(item,index) in voteUsersList" :key="index">
{{ item }}
<span v-if="index < voteUsersList.length - 1"></span>
</span>
</ai-info-item>
</ai-wrapper>
</template>
</ai-card>
</template>
</ai-detail> -->
<ai-detail>
<ai-title slot="title" title="换届设置" isShowBottomBorder isShowBack @onBackClick="cancel(true)"/>
<template slot="content">
<ai-card title="基本信息">
<template #content>
<div class="tips">
<i class="el-icon-warning"></i>
系统将在下次换届时间开始前换届提醒人进行提醒提醒方式包括平台消息推送短信提醒
</div>
<div class="add-form">
<el-form ref="form" :model="form" :rules="formRules" size="small" label-width="150px">
<el-form-item label="单位名称">
<div>{{ user.info.organizationName }}</div>
</el-form-item>
<el-form-item label="成立时间">
<div>{{ createTime }}</div>
</el-form-item>
<el-form-item label="换届类型" prop="type">
<el-radio v-model="form.type" label="0">三年换届</el-radio>
<el-radio v-model="form.type" label="1">五年换届</el-radio>
</el-form-item>
<el-form-item label="单位名称" prop="organizationName">
<el-input size="small" disabled placeholder="请选择所属党组织" v-model="form.organizationName">
<template slot="append">
<ai-party :instance="instance" size="small" :value="form.organizationId" @origin="handlePartyOrgSelect"/>
</template>
</el-input>
</el-form-item>
<el-form-item label="换届提醒人" prop="userList">
<ai-person-select :instance="instance" :customClicker="true" :chooseUserList="chooseUserList"
:url="`/app/appparty/list?partyOrgId=${form.organizationId}`" headerTitle="党员列表"
:isMultiple="true" dialogTitle="选择抄送人" @selectPerson="selectUser" class="aipersonselect">
<template name="option" v-slot:option="{ item }">
<span class="iconfont iconProlife">{{ item.name }}</span>
</template>
</ai-person-select>
</el-form-item>
</el-form>
</div>
</template>
</ai-card>
</template>
<template slot="footer" class="footer">
<el-button class="delete-btn footer-btn" @click="cancel(false)">取消</el-button>
<el-button class="footer-btn" type="primary" @click="confirm()">保存</el-button>
</template>
</ai-detail>
</section>
</template>
<script>
import { mapState } from 'vuex'
export default {
name: "organizationSetting",
props: {
instance: Function,
dict: Object,
params: Object,
},
data() {
let validUser = (rule, value, callback) => {
if (!value.length) {
return callback(new Error('请选择换届提醒人'));
} else {
callback();
}
};
return {
form: {
addOrMakeup: true,
organizationId: '',
organizationName: '',
type: '0',
userList: [],
},
formRules: {
type: [{required: true, message: "请选择选举方式", trigger: "blur"}],
organizationName: [{required: true, message: "请选择党组织", trigger: "blur"}],
userList: [{required: true,validator: validUser, trigger: "blur"}],
},
chooseUserList: [],
createTime: '',
}
},
computed: {
...mapState(['user'])
},
created() {
this.getDetail()
this.getOrganization()
},
methods: {
cancel (isRefresh) {
this.$emit('change', {
type: 'List',
isRefresh: !!isRefresh
})
},
// 查询组织关系
getOrganization() {
this.instance.post(`/app/partyOrganization/queryPartyOrganizationServiceList`).then(res=>{
if(res?.data) {
let data = res.data.filter(item=>item.id == this.user.info.organizationId)
this.createTime = data[0].createTime
}
})
},
getDetail() {
this.instance.post(`/app/apporganizationchangeconfig/queryDetailByOrganizationId?organizationId=${this.user.info.organizationId}`).then((res) => {
if(res?.data) {
// this.chooseCandidateList = res.data.candidateUsers
// this.chooseVoteList = res.data.voteUsers
console.log(res);
}
})
},
selectUser(v) {
this.form.userList = v
},
selectVote(e) {
this.form.voteUsers = e
},
handlePartyOrgSelect(v) {
if(v) {
this.form.organizationId = v[0]?.id
this.form.organizationName = v[0]?.name
}
},
confirm() {
// 换届设置
this.$refs.form.validate((valid) => {
if (valid) {
this.instance.post(`/app/apporganizationchangeconfig/update`,{
...this.form
}).then(res => {
if(res.code == 0) {
this.$message.success('提交成功')
this.cancel(true)
}
}).catch((err) => {
console.log(err);
})
}
})
},
},
}
</script>
<style lang="scss" scope>
.organizationSetting {
height: 100%;
::v-deep .el-date-editor .el-input {
width: 100%;
}
.tips {
width: 100%;
border: 1px solid #f82;
background-color: #fff3e9;
color: #f82;
padding: 8px 16px;
box-sizing: border-box;
border-radius: 4px;
margin-bottom: 32px;
font-size: 13px;
}
}
</style>