迁移
This commit is contained in:
		
							
								
								
									
										60
									
								
								project/biaopin/AppGeneralElection/AppGeneralElection.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										60
									
								
								project/biaopin/AppGeneralElection/AppGeneralElection.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,60 @@ | ||||
| <template> | ||||
|   <section class="AppGeneralElection"> | ||||
|     <keep-alive :include="['electionList']"> | ||||
|       <component ref="component" :is="component" :instance="instance" :params="params" :dict="dict" @change="onChange"/> | ||||
|     </keep-alive> | ||||
|   </section> | ||||
| </template> | ||||
|  | ||||
| <script> | ||||
| import electionList from "./components/electionList.vue"; | ||||
| import electionAdd from "./components/electionAdd.vue"; | ||||
| import Statistics from "./components/Statistics.vue"; | ||||
|  | ||||
| export default { | ||||
|   name: "AppGeneralElection", | ||||
|   label: "换届选举", | ||||
|   props: { | ||||
|     instance: Function, | ||||
|     dict: Object, | ||||
|   }, | ||||
|   components: {electionAdd, electionList,Statistics}, | ||||
|   data() { | ||||
|     return { | ||||
|       component: "electionList", | ||||
|       params: {}, | ||||
|       include: [], | ||||
|     } | ||||
|   }, | ||||
|   methods: { | ||||
|     onChange(data) { | ||||
|       if (data.type === "electionAdd") { | ||||
|         this.component = "electionAdd"; | ||||
|         this.params = data.params; | ||||
|       } | ||||
|  | ||||
|       if (data.type === "Statistics") { | ||||
|         this.component = "Statistics"; | ||||
|         this.params = data.params; | ||||
|       } | ||||
|  | ||||
|       if (data.type === "electionList") { | ||||
|         this.component = "electionList"; | ||||
|         this.params = data.params; | ||||
|  | ||||
|         this.$nextTick(() => { | ||||
|           if (data.isRefresh) { | ||||
|             this.$refs.component.getList(); | ||||
|           } | ||||
|         }); | ||||
|       } | ||||
|     }, | ||||
|   }, | ||||
| } | ||||
| </script> | ||||
|  | ||||
| <style lang="scss" scoped> | ||||
| .AppGeneralElection { | ||||
|   height: 100%; | ||||
| } | ||||
| </style> | ||||
							
								
								
									
										152
									
								
								project/biaopin/AppGeneralElection/components/Statistics.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										152
									
								
								project/biaopin/AppGeneralElection/components/Statistics.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,152 @@ | ||||
| <template> | ||||
|   <section> | ||||
|     <ai-detail class="Statistics"> | ||||
|       <template slot="title"> | ||||
|         <ai-title title="投票实况" isShowBack isShowBottomBorder @onBackClick="cancel(false)"></ai-title> | ||||
|       </template> | ||||
|       <template slot="content"> | ||||
|         <ai-title title="本届任职" isShowBottomBorder></ai-title> | ||||
|         <div class="basicinfo-box"> | ||||
|           <div><span>已投人数:</span><span>{{ data.alreadyCount || 0 }}</span></div> | ||||
|           <div><span>未投人数:</span><span>{{ data.notYetCount || 0 }}</span></div> | ||||
|           <div><span>日期:</span><span>{{ data.dateTime || '' }}</span></div> | ||||
|         </div> | ||||
|  | ||||
|         <ai-title title="候选人选票统计" isShowBottomBorder></ai-title> | ||||
|  | ||||
|         <div class="echarts-box"> | ||||
|           <div id="echarts-bar"></div> | ||||
|           <!-- <ai-empty class="empty"></ai-empty> --> | ||||
|         </div> | ||||
|       </template> | ||||
|     </ai-detail> | ||||
|   </section> | ||||
| </template> | ||||
|  | ||||
| <script> | ||||
| import * as echarts from 'echarts'; | ||||
| export default { | ||||
|   name: "Statistics", | ||||
|   props: { | ||||
|     instance: Function, | ||||
|     dict: Object, | ||||
|     params: Object, | ||||
|   }, | ||||
|   data() { | ||||
|     return { | ||||
|       data: {}, | ||||
|       myChart: null, | ||||
|     } | ||||
|   }, | ||||
|   created() { | ||||
|     this.getStatistics() | ||||
|   }, | ||||
|   mounted() { | ||||
|     this.getStaBar() | ||||
|   }, | ||||
|   methods: { | ||||
|     cancel (isRefresh) { | ||||
|       this.$emit('change', { | ||||
|         type: 'electionList', | ||||
|         isRefresh: !!isRefresh | ||||
|       }) | ||||
|     }, | ||||
|     getStatistics() { | ||||
|       this.instance.post(`/app/appgeneralelectioninfo/statistics?id=${this.params.id}`).then(res=> { | ||||
|         if(res?.data) { | ||||
|           this.data = res.data | ||||
|           this.statistics = res.data.statistics | ||||
|           let xData = res.data.statistics.map(e=> e.candidate_user_name) | ||||
|           let yData1 = res.data.statistics.map(e=> e.c1) | ||||
|           let yData2 = res.data.statistics.map(e=> e.c2) | ||||
|           let yData3 = res.data.statistics.map(e=> e.c3) | ||||
|           this.getStaBar(xData,yData1,yData2,yData3) | ||||
|         } | ||||
|       }) | ||||
|     }, | ||||
|     getStaBar(xData,yData1,yData2,yData3) { | ||||
|       let chartDom = document.getElementById('echarts-bar') | ||||
|       this.myChart = echarts.init(chartDom); | ||||
|       this.myChart.setOption({ | ||||
|         dataZoom: [ | ||||
|           { | ||||
|             type: "slider", | ||||
|             xAxisIndex: [0], | ||||
|             filterMode: "filter", | ||||
|           }, | ||||
|         ], | ||||
|         legend: { | ||||
|           data: ['支持', '反对', '弃票'] | ||||
|         }, | ||||
|         xAxis: { | ||||
|           type: 'category', | ||||
|           data: xData, | ||||
|         }, | ||||
|         yAxis: { | ||||
|           type: 'value', | ||||
|           alignTicks: true, | ||||
|         }, | ||||
|         series: [    // 支持、反对、弃票 | ||||
|           { | ||||
|             name: '支持', | ||||
|             data: yData1, | ||||
|             type: 'bar', | ||||
|              | ||||
|             showBackground: true, | ||||
|             backgroundStyle: { | ||||
|               color: 'rgba(180, 180, 180, 0.2)' | ||||
|             }, | ||||
|             barWidth: 22, | ||||
|             barGap: '20%', | ||||
|           }, | ||||
|           { | ||||
|             name: '反对', | ||||
|             data: yData2, | ||||
|             type: 'bar', | ||||
|              | ||||
|             showBackground: true, | ||||
|             backgroundStyle: { | ||||
|               color: 'rgba(180, 180, 180, 0.2)' | ||||
|             }, | ||||
|             barWidth: 22, | ||||
|             barGap: '20%', | ||||
|           }, | ||||
|           { | ||||
|             name: '弃票', | ||||
|             data: yData3, | ||||
|             type: 'bar', | ||||
|              | ||||
|             showBackground: true, | ||||
|             backgroundStyle: { | ||||
|               color: 'rgba(180, 180, 180, 0.2)' | ||||
|             }, | ||||
|             barWidth: 22, | ||||
|             barGap: '20%', | ||||
|           } | ||||
|         ] | ||||
|       }) | ||||
|     } | ||||
|   }, | ||||
|  | ||||
| } | ||||
| </script> | ||||
|  | ||||
| <style lang="scss" scoped> | ||||
| .Statistics { | ||||
|   .basicinfo-box { | ||||
|     display: flex; | ||||
|     margin: 20px 0; | ||||
|     div { | ||||
|       flex: 1; | ||||
|     } | ||||
|   } | ||||
|   .echarts-box { | ||||
|     // width: 100%; | ||||
|  | ||||
|     #echarts-bar { | ||||
|       width: 1200px; | ||||
|       height: 400px; | ||||
|     } | ||||
|   } | ||||
| } | ||||
| </style> | ||||
							
								
								
									
										284
									
								
								project/biaopin/AppGeneralElection/components/electionAdd.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										284
									
								
								project/biaopin/AppGeneralElection/components/electionAdd.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,284 @@ | ||||
| <template> | ||||
|   <section class="electionAdd"> | ||||
|     <ai-detail v-show="id && !isEdit"> | ||||
|       <template slot="title"> | ||||
|         <ai-title title="换届选举详情" isShowBack isShowBottomBorder @onBackClick="cancel(false)"></ai-title> | ||||
|       </template> | ||||
|       <template slot="content"> | ||||
|         <ai-card :title="info.title"> | ||||
|           <template #right> | ||||
|             <span style="color:#2266FF;cursor: pointer;font-size: 12px;" class="iconfont iconEdit" v-if="isEdit==false && info.status==0" @click="update">修改</span> | ||||
|           </template> | ||||
|           <template #content v-if="isEdit == false"> | ||||
|             <ai-wrapper> | ||||
|               <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-wrapper> | ||||
|           </template> | ||||
|         </ai-card> | ||||
|         <ai-card title="参会人员信息"> | ||||
|           <template #content v-if="isEdit == false"> | ||||
|             <ai-wrapper> | ||||
|               <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> | ||||
|                 <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 v-show="!id || isEdit==true"> | ||||
|       <ai-title slot="title" :title="id? '编辑换届选举':'添加换届选举'" isShowBottomBorder isShowBack @onBackClick="cancel(true)"/> | ||||
|       <template slot="content"> | ||||
|         <ai-card title="基本信息"> | ||||
|           <template #content> | ||||
|             <div class="tips" v-if="!id"><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="标题" prop="title"> | ||||
|                   <el-input v-model="form.title" placeholder="请输入" show-word-limit maxlength="100"></el-input> | ||||
|                 </el-form-item> | ||||
|  | ||||
|                 <el-form-item label="投票说明"> | ||||
|                   <el-input type="textarea" :rows="5" v-model="form.votingInstructions" placeholder="请输入" show-word-limit maxlength="500"></el-input> | ||||
|                 </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.partyOrgId" @origin="handlePartyOrgSelect"/> | ||||
|                     </template> | ||||
|                   </el-input> | ||||
|                 </el-form-item> | ||||
|  | ||||
|                 <el-form-item label="选举方式" prop="electionMethod"> | ||||
|                   <el-tooltip class="item" effect="dark" content="差额选举:候选人数多于应选人数的选举方式; | ||||
|                    等额选举:候选人数与应选人数相等的选举方式。" placement="top"> | ||||
|                     <i class="el-icon-info" style="margin-right: 8px"></i> | ||||
|                   </el-tooltip> | ||||
|  | ||||
|                   <el-radio v-model="form.electionMethod" label="0">等额</el-radio> | ||||
|                   <el-radio v-model="form.electionMethod" label="1">差额</el-radio> | ||||
|                 </el-form-item> | ||||
|  | ||||
|                 <el-row type="flex"> | ||||
|                   <el-col :span="20"> | ||||
|                     <el-form-item label="应选人数" prop="chooseNumber"> | ||||
|                       <el-input type="number" v-model="form.chooseNumber" placeholder="请输入"></el-input> | ||||
|                     </el-form-item> | ||||
|                   </el-col> | ||||
|                   <el-col :span="20"> | ||||
|                     <el-form-item label="投票日期" prop="votingDate"> | ||||
|                       <el-date-picker v-model="form.votingDate" value-format="yyyy-MM-dd HH:mm:ss" type="date" placeholder="选择日期" style="width:338px"> | ||||
|                       </el-date-picker> | ||||
|                     </el-form-item> | ||||
|                   </el-col> | ||||
|                 </el-row> | ||||
|  | ||||
|                 <el-form-item label="候选人" prop="candidateUsers"> | ||||
|                   <ai-person-select :instance="instance" :customClicker="true" :chooseUserList="chooseCandidateList" | ||||
|                       :url="`/app/appparty/list?partyOrgId=${form.partyOrgId}`" headerTitle="党员列表" | ||||
|                       :isMultiple="true" dialogTitle="选择" @selectPerson="selectCandidate" class="aipersonselect"> | ||||
|                     <template name="option" v-slot:option="{ item }"> | ||||
|                       <span class="iconfont iconProlife">{{ item.name }}</span> | ||||
|                       <span>{{ item.phone }}</span> | ||||
|                       <span>{{ item}}</span> | ||||
|                     </template> | ||||
|                   </ai-person-select> | ||||
|                 </el-form-item> | ||||
|  | ||||
|                 <el-form-item label="投票人" prop="voteUsers"> | ||||
|                   <ai-person-select :instance="instance" :customClicker="true" :chooseUserList="chooseVoteList" | ||||
|                       :url="`/app/appparty/list?partyOrgId=${form.partyOrgId}`" headerTitle="党员列表" | ||||
|                       :isMultiple="true" dialogTitle="选择" @selectPerson="selectVote" class="aipersonselect"> | ||||
|                     <template name="option" v-slot:option="{ item }"> | ||||
|                       <span class="iconfont iconProlife">{{ item.name }}</span> | ||||
|                       <ai-id mode="show" :show-eyes="false" :value="item.idNumber"/> | ||||
|                     </template> | ||||
|                   </ai-person-select> | ||||
|                 </el-form-item> | ||||
|               </el-form> | ||||
|             </div> | ||||
|           </template> | ||||
|         </ai-card> | ||||
|       </template> | ||||
|       <template #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> | ||||
| export default { | ||||
|   name: "electionAdd", | ||||
|   props: { | ||||
|     instance: Function, | ||||
|     dict: Object, | ||||
|     params: Object, | ||||
|   }, | ||||
|  | ||||
|   data() { | ||||
|     let validCandidate = (rule, value, callback) => { | ||||
|       if (!value.length) { | ||||
|         return callback(new Error('请选择候选人')); | ||||
|       } else { | ||||
|         callback(); | ||||
|       } | ||||
|     }; | ||||
|     let validVote = (rule, value, callback) => { | ||||
|       if (!value.length) { | ||||
|         return callback(new Error('请选择投票人')); | ||||
|       } else { | ||||
|         callback(); | ||||
|       } | ||||
|     }; | ||||
|     return { | ||||
|       form: { | ||||
|         title: '', | ||||
|         votingInstructions: '', | ||||
|         organizationName: '', | ||||
|         electionMethod: '', | ||||
|         chooseNumber: '', | ||||
|         votingDate: '', | ||||
|         candidateUsers: [], | ||||
|         voteUsers: [], | ||||
|         partyOrganizations: [], | ||||
|         partyOrgId: '' | ||||
|       }, | ||||
|       formRules: { | ||||
|         title: [{required: true, message: "请输入标题", trigger: "blur"}], | ||||
|         organizationName: [{required: true, message: "请选择党组织", trigger: "blur"}], | ||||
|         electionMethod: [{required: true, message: "请选择选举方式", trigger: "blur"}], | ||||
|         chooseNumber: [{required: true, message: "请输入应选人数", trigger: "blur"}], | ||||
|         votingDate: [{required: true, message: "请选择投票日期", trigger: "blur"}], | ||||
|         candidateUsers: [{required: true,validator: validCandidate, trigger: "blur"}], | ||||
|         voteUsers: [{required: true,validator: validVote, trigger: "blur"}], | ||||
|       }, | ||||
|       id: '', | ||||
|       isEdit: false, | ||||
|       info: {}, | ||||
|       candidateUsersList: '', | ||||
|       voteUsersList: '', | ||||
|       chooseCandidateList: [], | ||||
|       chooseVoteList: [], | ||||
|     } | ||||
|   }, | ||||
|   created() { | ||||
|     if(this.params && this.params.id) { | ||||
|       this.id = this.params.id | ||||
|       this.getDetail() | ||||
|     } | ||||
|   }, | ||||
|   methods: { | ||||
|     cancel (isRefresh) { | ||||
|       this.$emit('change', { | ||||
|         type: 'electionList', | ||||
|         isRefresh: !!isRefresh | ||||
|       }) | ||||
|     }, | ||||
|     update() { | ||||
|       this.isEdit = true | ||||
|       this.getDetail() | ||||
|     }, | ||||
|     getDetail() { | ||||
|       this.instance.post(`/app/appgeneralelectioninfo/queryDetailById`,null, { | ||||
|         params: {id:this.id} | ||||
|       }).then((res) => { | ||||
|         if(res?.data) { | ||||
|           this.form = res.data | ||||
|           this.form.organizationName = res.data.partyOrganizations[0].name | ||||
|           this.info = res.data | ||||
|           this.candidateUsersList = res.data.candidateUsers.map(v=> v.name) | ||||
|           this.voteUsersList = res.data.voteUsers.map(v=> v.name) | ||||
|           this.chooseCandidateList = res.data.candidateUsers | ||||
|           this.chooseVoteList = res.data.voteUsers | ||||
|         } | ||||
|       }) | ||||
|     }, | ||||
|     selectCandidate(v) { | ||||
|       this.form.candidateUsers = v | ||||
|     }, | ||||
|     selectVote(e) { | ||||
|       this.form.voteUsers = e | ||||
|     }, | ||||
|     handlePartyOrgSelect(v) { | ||||
|       if(v) { | ||||
|         this.form.organizationName = v[0]?.name | ||||
|         this.form.partyOrganizations = [v[0]] | ||||
|         this.form.partyOrgId = v[0]?.id | ||||
|       } else { | ||||
|         this.form.organizationName = this.chooseUserList[0]?.name | ||||
|         this.form.partyOrganizations = this.chooseUserList | ||||
|       } | ||||
|     }, | ||||
|     confirm() { | ||||
|       this.$refs.form.validate((valid) => { | ||||
|           if (valid) { | ||||
|             if(this.form.electionMethod == 0) { | ||||
|               if(this.form.chooseNumber != this.form.candidateUsers.length) { | ||||
|                 return this.$message.error('候选人数与应选人数应相等') | ||||
|               } | ||||
|             } else if(this.form.electionMethod == 1) { | ||||
|               if(this.form.chooseNumber >= this.form.candidateUsers.length) { | ||||
|                 return this.$message.error('候选人数应多于应选人数') | ||||
|               } | ||||
|             } | ||||
|             this.instance.post(`/app/appgeneralelectioninfo/addOrUpdate`,{ | ||||
|               ...this.form | ||||
|             }).then(res => { | ||||
|               if(res.code == 0) { | ||||
|                 this.$message.success(this.id ? '编辑成功' : '新增成功') | ||||
|                 this.cancel(true) | ||||
|               } | ||||
|             }).catch((err) => { | ||||
|               console.log(err); | ||||
|             }) | ||||
|           } | ||||
|       }) | ||||
|     }, | ||||
|   }, | ||||
| } | ||||
| </script> | ||||
|  | ||||
| <style lang="scss" scope> | ||||
| .electionAdd { | ||||
|   height: 100%; | ||||
|  | ||||
|   :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> | ||||
							
								
								
									
										148
									
								
								project/biaopin/AppGeneralElection/components/electionList.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										148
									
								
								project/biaopin/AppGeneralElection/components/electionList.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,148 @@ | ||||
| <template> | ||||
|   <section class="electionList"> | ||||
|     <ai-list> | ||||
|       <ai-title slot="title" title="换届选举" isShowBottomBorder /> | ||||
|       <template #content> | ||||
|         <ai-search-bar> | ||||
|           <template #left> | ||||
|             <el-button size="small" type="primary" icon="iconfont iconAdd" @click="toAdd('')" >添加</el-button> | ||||
|             <ai-select v-model="search.status" @change=";(page.current = 1), getList()" placeholder="请选择状态" :selectList="dict.getDict('electionStatus')"></ai-select> | ||||
|           </template> | ||||
|           <template #right> | ||||
|             <el-input v-model="search.title" class="search-input" size="small" v-throttle="() => {(page.current = 1), getList()} " placeholder="标题" clearable @change="getList" @clear="page.current = 1, (search.title = ''), getList()" suffix-icon="iconfont iconSearch"> | ||||
|             </el-input> | ||||
|           </template> | ||||
|         </ai-search-bar> | ||||
|         <ai-table :tableData="tableData" :total="page.total" :current.sync="page.current" :size.sync="page.size" @getList="getList" :col-configs="colConfigs" :dict="dict"> | ||||
|           <el-table-column slot="options" label="操作" fixed="right" align="center"> | ||||
|             <template slot-scope="{ row }"> | ||||
|               <el-button type="text" @click.native="toAdd(row.id)">详情</el-button> | ||||
|               <el-button type="text" v-show="row.status!=2" :disabled="row.status==2" @click.native="startEnd(row.id, row.status)">{{row.status == 0? '开启':'结束'}}</el-button> | ||||
|               <el-button type="text" v-show="row.status != 0" @click.native="toStatistics(row.id)">统计</el-button> | ||||
|               <el-button type="text" @click.native="handleDelete(row.id)">删除</el-button> | ||||
|             </template> | ||||
|           </el-table-column> | ||||
|         </ai-table> | ||||
|       </template> | ||||
|     </ai-list> | ||||
|   </section> | ||||
| </template> | ||||
|  | ||||
| <script> | ||||
| export default { | ||||
|   name: 'electionList', | ||||
|   props: { | ||||
|     instance: Function, | ||||
|     dict: Object | ||||
|   }, | ||||
|   data () { | ||||
|     return { | ||||
|       search: { | ||||
|         status: '',  // 0、未开始;1、进行中;2、已结束 | ||||
|         title: '', | ||||
|       }, | ||||
|       page: { | ||||
|         current: 1, | ||||
|         size: 10, | ||||
|         total: 0, | ||||
|       }, | ||||
|       tableData: [], | ||||
|     } | ||||
|   }, | ||||
|   created () { | ||||
|     this.$dict.load('electionStatus', 'electionMethod').then(()=> { | ||||
|       this.getList() | ||||
|     }) | ||||
|   }, | ||||
|   computed: { | ||||
|     colConfigs() { | ||||
|       return [ | ||||
|         {prop: "title", label: "标题", align: "left", showOverflowTooltip: true}, | ||||
|         {prop: "organizationName", label: "所属支部", align: "center"}, | ||||
|         {prop: "electionMethod", label: "选举方式", align: "center",dict:"electionMethod"}, | ||||
|         {prop: "chooseNumber", label: "应选人数", align: "center"}, | ||||
|         {prop: "status", label: "状态", align: "center",width: "180px", dict: "electionStatus"}, | ||||
|         { slot: "options", }, | ||||
|       ] | ||||
|     } | ||||
|   }, | ||||
|   methods: { | ||||
|     getList() { | ||||
|       this.instance.post(`/app/appgeneralelectioninfo/list`,null,{ | ||||
|         params: { | ||||
|           ...this.page, | ||||
|           ...this.search, | ||||
|         } | ||||
|       }).then(res=> { | ||||
|         if(res?.data) { | ||||
|           this.tableData = res.data.records | ||||
|           this.page.total = res.data.total | ||||
|         } | ||||
|       }) | ||||
|     }, | ||||
|     toAdd(id) { | ||||
|       this.$emit('change', { | ||||
|         type: 'electionAdd', | ||||
|         params: { | ||||
|           id: id || '', | ||||
|         } | ||||
|       }) | ||||
|     }, | ||||
|     handleDelete(id) { | ||||
|       this.$confirm('确定删除该数据?').then(() => { | ||||
|         this.instance.post(`/app/appgeneralelectioninfo/delete?ids=${id}`).then(res=>{ | ||||
|           if(res.code == 0) { | ||||
|             this.$message.success('删除成功!') | ||||
|             this.getList() | ||||
|           } | ||||
|         }) | ||||
|       }) | ||||
|     }, | ||||
|     reset() { | ||||
|       this.search = { | ||||
|         status: '', | ||||
|         title: '', | ||||
|       } | ||||
|       this.getList() | ||||
|     }, | ||||
|     // 开启、结束 | ||||
|     startEnd(id, status) { | ||||
|       let title = '' | ||||
|       let bool = null | ||||
|       let tips = '' | ||||
|       if(status == 0) { | ||||
|         title = '未到投票开始时间,确定要提前开始吗?' | ||||
|         bool = true | ||||
|         tips = '开启成功' | ||||
|       } else if(status == 1) { | ||||
|         title = '投票正在进行中,确定要提前结束吗?' | ||||
|         bool = false | ||||
|         tips = '结束成功' | ||||
|       } | ||||
|       this.$confirm(title).then(() => { | ||||
|         this.instance.post(`/app/appgeneralelectioninfo/start-end?id=${id}&start=${bool}`).then(res=>{ | ||||
|           if(res.code == 0) { | ||||
|             this.$message.success(tips) | ||||
|             this.getList() | ||||
|           } | ||||
|         }) | ||||
|       }) | ||||
|     }, | ||||
|     // 统计 | ||||
|     toStatistics(id) { | ||||
|       this.$emit('change', { | ||||
|         type: 'Statistics', | ||||
|         params: { | ||||
|           id: id || '', | ||||
|         } | ||||
|       }) | ||||
|     }, | ||||
|   } | ||||
| } | ||||
| </script> | ||||
|  | ||||
| <style lang="scss" scoped> | ||||
| .electionList { | ||||
|   height: 100%; | ||||
| } | ||||
| </style> | ||||
		Reference in New Issue
	
	Block a user