Merge branch 'dev' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into dev
This commit is contained in:
		
							
								
								
									
										76
									
								
								packages/conv/creditScore/AppScoreManage/AppScoreManage.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										76
									
								
								packages/conv/creditScore/AppScoreManage/AppScoreManage.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,76 @@ | |||||||
|  | <template> | ||||||
|  |   <ai-list> | ||||||
|  |     <template slot="title"> | ||||||
|  |       <ai-title title="积分维护" :isShowBottomBorder="false" :instance="instance" :isShowArea="true" v-model="areaId" | ||||||
|  |                 @change="changeArea"></ai-title> | ||||||
|  |     </template> | ||||||
|  |     <template slot="tabs"> | ||||||
|  |       <el-tabs v-model="currIndex"> | ||||||
|  |         <el-tab-pane v-for="(tab,i) in tabs" :key="i" :label="tab.label"> | ||||||
|  |           <component :is="tab.comp" v-if="currIndex === String(i)" :ref="tab.name" | ||||||
|  |                      :areaId="areaId" :instance="instance" :dict="dict" :permissions="permissions"/> | ||||||
|  |         </el-tab-pane> | ||||||
|  |       </el-tabs> | ||||||
|  |     </template> | ||||||
|  |   </ai-list> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script> | ||||||
|  | import pointsDeclaration from "./pointsDeclaration.vue" | ||||||
|  | import pointsDetails from "./pointsDetails.vue" | ||||||
|  | import pointsAppeal from './pointsAppeal' | ||||||
|  | import {mapState} from 'vuex' | ||||||
|  | import scoreChange from "./scoreChange"; | ||||||
|  |  | ||||||
|  | export default { | ||||||
|  |   name: 'AppScoreManage', | ||||||
|  |   label: "积分维护", | ||||||
|  |   components: {pointsDeclaration, pointsDetails, pointsAppeal, scoreChange}, | ||||||
|  |   props: { | ||||||
|  |     instance: Function, | ||||||
|  |     dict: Object, | ||||||
|  |     permissions: Function | ||||||
|  |   }, | ||||||
|  |  | ||||||
|  |   computed: { | ||||||
|  |     ...mapState(['user']), | ||||||
|  |     tabs() { | ||||||
|  |       return [ | ||||||
|  |         { | ||||||
|  |           label: "积分明细", | ||||||
|  |           name: "pointsDetails", | ||||||
|  |           comp: pointsDetails, | ||||||
|  |           permission: "app_apppartyfee_statistics", | ||||||
|  |         }, | ||||||
|  |         { | ||||||
|  |           label: "积分调整", | ||||||
|  |           name: "scoreChange", | ||||||
|  |           comp: scoreChange, | ||||||
|  |           permission: "", | ||||||
|  |         }, | ||||||
|  |       ] | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |   created() { | ||||||
|  |     this.areaId = this.user.info.areaId | ||||||
|  |     this.dict.load("integralCalcType") | ||||||
|  |   }, | ||||||
|  |   methods: { | ||||||
|  |     changeArea() { | ||||||
|  |       this.$nextTick(() => { | ||||||
|  |         this.$refs[this.tabs[Number(this.currIndex)].name][0].getList() | ||||||
|  |       }) | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |   data() { | ||||||
|  |     return { | ||||||
|  |       activeName: "pointsDeclaration", | ||||||
|  |       currIndex: '0', | ||||||
|  |       areaId: '' | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | </script> | ||||||
|  |  | ||||||
|  | <style lang="scss" scoped> | ||||||
|  | </style> | ||||||
							
								
								
									
										219
									
								
								packages/conv/creditScore/AppScoreManage/pointsDetails.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										219
									
								
								packages/conv/creditScore/AppScoreManage/pointsDetails.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,219 @@ | |||||||
|  | <template> | ||||||
|  |   <section class="pointsDetails"> | ||||||
|  |     <ai-list isTabs> | ||||||
|  |       <template slot="content"> | ||||||
|  |         <ai-search-bar bottomBorder> | ||||||
|  |           <template slot="left"> | ||||||
|  |             <el-date-picker size="small" v-model="searchDotime" type="daterange" range-separator="至" @change="timeChange" | ||||||
|  |                             start-placeholder="开始日期" end-placeholder="结束日期" value-format="yyyy-MM-dd HH:mm:ss" format="yyyy-MM-dd"></el-date-picker> | ||||||
|  |           </template> | ||||||
|  |           <template slot="right"> | ||||||
|  |             <el-input | ||||||
|  |                 v-model="search.familyName" | ||||||
|  |                 class="search-input" | ||||||
|  |                 size="small" | ||||||
|  |                 placeholder="对象、户主、事件类型" | ||||||
|  |                 clearable | ||||||
|  |                 v-throttle="() => {search.current = 1, getList()}" | ||||||
|  |                 @clear="search.current = 1, getList()" | ||||||
|  |                 suffix-icon="iconfont iconSearch"/> | ||||||
|  |           </template> | ||||||
|  |         </ai-search-bar> | ||||||
|  |         <ai-table | ||||||
|  |             :tableData="tableData" | ||||||
|  |             :col-configs="colConfigs" | ||||||
|  |             :total="total" :dict="dict" | ||||||
|  |             :current.sync="search.current" | ||||||
|  |             :size.sync="search.size" | ||||||
|  |             @getList="getList"> | ||||||
|  |           <el-table-column slot="changeIntegral" label="积分" align="center"> | ||||||
|  |             <template slot-scope="{ row }"> | ||||||
|  |               <span>{{ row.changeIntegral > 0 ? '+' : '' }}{{ row.changeIntegral }}</span> | ||||||
|  |             </template> | ||||||
|  |           </el-table-column> | ||||||
|  |           <el-table-column slot="options" label="操作" align="center" fixed="right" width="120"> | ||||||
|  |             <template slot-scope="{ row }"> | ||||||
|  |               <el-button | ||||||
|  |                   type="text" | ||||||
|  |                   title="详情" | ||||||
|  |                   :disabled="!$permissions('app_appvillagerintegraldetail_detail')" | ||||||
|  |                   @click="viewItem(row)"> | ||||||
|  |                 详情 | ||||||
|  |               </el-button> | ||||||
|  |             </template> | ||||||
|  |           </el-table-column> | ||||||
|  |         </ai-table> | ||||||
|  |       </template> | ||||||
|  |     </ai-list> | ||||||
|  |     <ai-dialog title="详情" :visible.sync="dialog" :customFooter="true" :destroyOnClose="true" width="720px"> | ||||||
|  |       <ai-wrapper> | ||||||
|  |         <ai-info-item label="户主:" :value="dialogInfo.familyName"/> | ||||||
|  |         <ai-info-item label="对象:" :value="dialogInfo.residentName"/> | ||||||
|  |         <ai-info-item label="事件:" :value="dialogInfo.eventDesc" isLine/> | ||||||
|  |         <ai-info-item label="时间:" :value="dialogInfo.doTime" isLine/> | ||||||
|  |         <ai-info-item label="积分:"> | ||||||
|  |           {{ dialogInfo.changeIntegral >= 0 ? '增加' : '减少' }} | ||||||
|  |           <span style="color:#26f" v-text="Math.abs(dialogInfo.changeIntegral)"/>分 | ||||||
|  |         </ai-info-item> | ||||||
|  |         <ai-info-item label="积分余额:" :value="dialogInfo.nowIntegral"/> | ||||||
|  |       </ai-wrapper> | ||||||
|  |       <div class="dialog-footer" slot="footer"> | ||||||
|  |         <el-button @click="dialog=false">关闭</el-button> | ||||||
|  |       </div> | ||||||
|  |     </ai-dialog> | ||||||
|  |   </section> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script> | ||||||
|  | export default { | ||||||
|  |   name: "pointsDeclaration", | ||||||
|  |  | ||||||
|  |   props: { | ||||||
|  |     instance: Function, | ||||||
|  |     dict: Object, | ||||||
|  |     areaId: String | ||||||
|  |   }, | ||||||
|  |  | ||||||
|  |   data() { | ||||||
|  |     return { | ||||||
|  |       searchDotime: [], | ||||||
|  |       search: { | ||||||
|  |         current: 1, | ||||||
|  |         size: 10, | ||||||
|  |         familyName: '', | ||||||
|  |         doTimeStart: null, | ||||||
|  |         doTimeEnd: null | ||||||
|  |       }, | ||||||
|  |       total: 10, | ||||||
|  |       colConfigs: [ | ||||||
|  |         {prop: "residentName", label: "对象", width: 160}, | ||||||
|  |         {prop: "familyName", label: "户主", align: "center", width: 160}, | ||||||
|  |         {prop: "eventDesc", label: "事件", "show-overflow-tooltip": true, width: 420}, | ||||||
|  |         {prop: "doTime", label: "时间", width: 200}, | ||||||
|  |         {prop: "type", label: "类型", width: 100, dict: "integralDetailType"}, | ||||||
|  |         {slot: "changeIntegral", label: "积分", width: 100}, | ||||||
|  |         {slot: "options", label: "操作", align: "center"}, | ||||||
|  |       ], | ||||||
|  |       tableData: [], | ||||||
|  |       dialog: false, | ||||||
|  |       dialogInfo: {}, | ||||||
|  |     }; | ||||||
|  |   }, | ||||||
|  |  | ||||||
|  |   mounted() { | ||||||
|  |     this.$dict | ||||||
|  |     .load([ | ||||||
|  |       "integralDeclareDoType", | ||||||
|  |       "integralDetailType", | ||||||
|  |     ]) | ||||||
|  |     .then(() => { | ||||||
|  |       this.getList(); | ||||||
|  |     }); | ||||||
|  |   }, | ||||||
|  |  | ||||||
|  |   methods: { | ||||||
|  |     getList() { | ||||||
|  |       this.instance.post(`/app/appvillagerintegraldetail/list`, null, { | ||||||
|  |         params: { | ||||||
|  |           ...this.search, | ||||||
|  |           areaId: this.areaId, | ||||||
|  |         }, | ||||||
|  |       }) | ||||||
|  |       .then((res) => { | ||||||
|  |         if (res.code == 0) { | ||||||
|  |           this.tableData = res.data.records; | ||||||
|  |           this.total = res.data.total; | ||||||
|  |         } | ||||||
|  |       }); | ||||||
|  |     }, | ||||||
|  |  | ||||||
|  |     timeChange() { | ||||||
|  |       if (this.searchDotime) { | ||||||
|  |         this.search.doTimeStart = this.searchDotime[0] | ||||||
|  |         this.search.doTimeEnd = this.searchDotime[1] | ||||||
|  |       } else { | ||||||
|  |         this.search.doTimeStart = null | ||||||
|  |         this.search.doTimeEnd = null | ||||||
|  |       } | ||||||
|  |       this.search.current = 1 | ||||||
|  |       this.getList() | ||||||
|  |     }, | ||||||
|  |  | ||||||
|  |     viewItem(row) { | ||||||
|  |       this.dialog = true | ||||||
|  |       this.instance.post(`/app/appvillagerintegraldetail/queryDetailById?id=${row.id}`, null, {}).then((res) => { | ||||||
|  |         if (res?.data) { | ||||||
|  |           this.dialogInfo = res.data | ||||||
|  |         } | ||||||
|  |       }); | ||||||
|  |     }, | ||||||
|  |  | ||||||
|  |     onReset() { | ||||||
|  |       this.search.current = 1 | ||||||
|  |       this.search.doTimeStart = null | ||||||
|  |       this.search.doTimeEnd = null | ||||||
|  |       this.search.familyName = '' | ||||||
|  |       this.searchDotime = [] | ||||||
|  |       this.getList(); | ||||||
|  |     }, | ||||||
|  |   }, | ||||||
|  | }; | ||||||
|  | </script> | ||||||
|  |  | ||||||
|  | <style lang="scss"> | ||||||
|  | .pointsDetails { | ||||||
|  |   height: 100%; | ||||||
|  |   background: #f3f6f9; | ||||||
|  |   overflow: auto; | ||||||
|  |  | ||||||
|  |   .form_content { | ||||||
|  |     .form_flex { | ||||||
|  |       display: flex; | ||||||
|  |  | ||||||
|  |       div { | ||||||
|  |         flex: 1; | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     .form_info { | ||||||
|  |       margin-bottom: 8px; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     .form_label { | ||||||
|  |       display: inline-block; | ||||||
|  |       color: #999; | ||||||
|  |       vertical-align: top; | ||||||
|  |       width: 70px; | ||||||
|  |       text-align: right; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     .form_value { | ||||||
|  |       display: inline-block; | ||||||
|  |       color: #333; | ||||||
|  |       width: calc(100% - 70px); | ||||||
|  |       // img { | ||||||
|  |       //   width: 100px; | ||||||
|  |       //   height: 100px; | ||||||
|  |       //   margin: 0 8px 8px 0; | ||||||
|  |       // } | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   .form_div { | ||||||
|  |     padding-top: 24px; | ||||||
|  |     border-top: 1px solid #eee; | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   .status-0 { | ||||||
|  |     color: #FF4466; | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   .status-1 { | ||||||
|  |     color: #2EA222; | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   .status-2 { | ||||||
|  |     color: #999999; | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | </style> | ||||||
| @@ -14,7 +14,7 @@ | |||||||
|         <ai-table |         <ai-table | ||||||
|             :tableData="tableData" |             :tableData="tableData" | ||||||
|             :col-configs="colConfigs" |             :col-configs="colConfigs" | ||||||
|             :total="page.total" |             :total="page.total" :dict="dict" | ||||||
|             :current.sync="page.current" |             :current.sync="page.current" | ||||||
|             :size.sync="page.size" |             :size.sync="page.size" | ||||||
|             @getList="getList"> |             @getList="getList"> | ||||||
| @@ -40,14 +40,11 @@ | |||||||
|           </ai-person-select> |           </ai-person-select> | ||||||
|         </el-form-item> |         </el-form-item> | ||||||
|         <el-form-item label="调整说明" prop="description"> |         <el-form-item label="调整说明" prop="description"> | ||||||
|           <el-input v-model.trim="form.description" placeholder="请输入..." type="textarea" :rows="4" show-word-limit |           <el-input v-model.trim="form.eventDesc" placeholder="请输入..." type="textarea" :rows="4" show-word-limit | ||||||
|                     maxlength="100"></el-input> |                     maxlength="100"></el-input> | ||||||
|         </el-form-item> |         </el-form-item> | ||||||
|         <el-form-item label="类型" prop="doType"> |         <el-form-item label="类型" prop="integralCalcType"> | ||||||
|           <el-radio-group v-model="form.doType"> |           <ai-select v-model="form.integralCalcType" :selectList="dict.getDict('integralCalcType')"/> | ||||||
|             <el-radio label="0">加分</el-radio> |  | ||||||
|             <el-radio label="1">减分</el-radio> |  | ||||||
|           </el-radio-group> |  | ||||||
|         </el-form-item> |         </el-form-item> | ||||||
|         <el-form-item label="积分" prop="changeIntegral"> |         <el-form-item label="积分" prop="changeIntegral"> | ||||||
|           <el-input v-model.trim.num="form.changeIntegral" placeholder="请输入正整数" size="small"></el-input> |           <el-input v-model.trim.num="form.changeIntegral" placeholder="请输入正整数" size="small"></el-input> | ||||||
| @@ -86,38 +83,19 @@ export default { | |||||||
|     rules() { |     rules() { | ||||||
|       return { |       return { | ||||||
|         residentId: [{required: true, message: '请选择人员', trigger: 'blur'},], |         residentId: [{required: true, message: '请选择人员', trigger: 'blur'},], | ||||||
|         description: [{required: true, message: '请输入调整说明', trigger: 'blur'},], |         eventDesc: [{required: true, message: '请输入调整说明', trigger: 'blur'},], | ||||||
|         doType: [{required: true, message: '请输入调整说明', trigger: 'change'},], |         integralCalcType: [{required: true, message: '请输入调整说明', trigger: 'change'},], | ||||||
|         changeIntegral: [ |         changeIntegral: [{required: true, validator: (r, v, cb) => v > 0 ? cb() : cb("请输入正数")}], | ||||||
|           { |  | ||||||
|             required: true, validator: (rule, value, callback) => { |  | ||||||
|               if (!/^[1-9]\d*$/.test(value)) { |  | ||||||
|                 callback(new Error('请输入正整数')) |  | ||||||
|               } else { |  | ||||||
|                 callback(); |  | ||||||
|               } |  | ||||||
|             }, trigger: 'blur' |  | ||||||
|           },], |  | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|     colConfigs() { |     colConfigs() { | ||||||
|       return [ |       return [ | ||||||
|         {prop: "residentName", label: "姓名"}, |         {prop: "residentName", label: "姓名"}, | ||||||
|         {prop: "description", label: "调整说明"}, |         {prop: "eventDesc", label: "调整说明"}, | ||||||
|         { |         {prop: "integralCalcType", label: "类型", dict: "integralCalcType", align: 'center'}, | ||||||
|           prop: "changeIntegral", label: "类型", align: "center", |         {prop: "changeIntegral", label: "积分", align: "center", render: (h, {row}) => h('p', `${row.integralCalcType > 0 ? '+' : '-'}${row.changeIntegral}`)}, | ||||||
|           render: (h, {row}) => [< span> {+row.changeIntegral > 0 ? "加分" : '减分' |  | ||||||
|           } < /span>] |  | ||||||
|         }, |  | ||||||
|         { |  | ||||||
|           prop: "changeIntegral", |  | ||||||
|           label: "积分", |  | ||||||
|           align: "center", |  | ||||||
|           render: (h, {row}) => [ |  | ||||||
|             <span>{row.changeIntegral > 0 ? `+${row.changeIntegral}` : `${row.changeIntegral}`}</span>] |  | ||||||
|         }, |  | ||||||
|         {prop: "doTime", label: "操作时间"}, |         {prop: "doTime", label: "操作时间"}, | ||||||
|         {prop: "declareObjName", label: "操作人", align: "center"}, |         {prop: "createUserName", label: "操作人", align: "center"}, | ||||||
|       ] |       ] | ||||||
|     } |     } | ||||||
|   }, |   }, | ||||||
| @@ -134,10 +112,7 @@ export default { | |||||||
|     onConfirm() { |     onConfirm() { | ||||||
|       this.$refs['form'].validate(valid => { |       this.$refs['form'].validate(valid => { | ||||||
|         if (valid) { |         if (valid) { | ||||||
|           this.instance.post(`/app/appvillagerintegraldetail/changeIntegral`, { |           this.instance.post(`/app/appvillagerintegraldetail/changeIntegral`, this.form).then(res => { | ||||||
|             ...this.form, |  | ||||||
|             changeIntegral: this.form.doType == 0 ? `+${this.form.changeIntegral}` : `-${this.form.changeIntegral}` |  | ||||||
|           }).then(res => { |  | ||||||
|             if (res.code == 0) { |             if (res.code == 0) { | ||||||
|               this.$message.success("添加成功") |               this.$message.success("添加成功") | ||||||
|               this.dialog = false |               this.dialog = false | ||||||
| @@ -149,11 +124,7 @@ export default { | |||||||
|     }, |     }, | ||||||
|     getList() { |     getList() { | ||||||
|       this.instance.post(`/app/appvillagerintegraldetail/list`, null, { |       this.instance.post(`/app/appvillagerintegraldetail/list`, null, { | ||||||
|         params: { |         params: {...this.page, areaId: this.areaId, type: 0} | ||||||
|           ...this.page, |  | ||||||
|           areaId: this.areaId, |  | ||||||
|           doType: 2 |  | ||||||
|         } |  | ||||||
|       }).then(res => { |       }).then(res => { | ||||||
|         if (res?.data) { |         if (res?.data) { | ||||||
|           this.tableData = res.data.records |           this.tableData = res.data.records | ||||||
| @@ -28,31 +28,20 @@ | |||||||
|               :instance="instance" |               :instance="instance" | ||||||
|               url="/app/appvillagerintegraldetail/export" |               url="/app/appvillagerintegraldetail/export" | ||||||
|               :disabled="!Boolean(tableData.length)" |               :disabled="!Boolean(tableData.length)" | ||||||
|               :params="{familyId:detailInfo.id,bizType:doType}" |               :params="{familyId:detailInfo.id,type}" | ||||||
|               fileName="余额变动明细"> |               fileName="余额变动明细"> | ||||||
|             <span class="iconfont iconExported">导出</span> |             <el-button type="text" icon="iconfont iconExported">导出</el-button> | ||||||
|           </ai-download> |           </ai-download> | ||||||
|         </template> |         </template> | ||||||
|         <template #content> |         <template #content> | ||||||
|           <el-select v-model="doType" placeholder="请选择类型" size='small' clearable @change="page.current=1,getList()"> |           <ai-search-bar> | ||||||
|             <el-option |             <template #left> | ||||||
|                 v-for="(item,i) in dict.getDict('integralDetailType')" |               <ai-select v-model="type" placeholder="请选择类型" @change="page.current=1,getList()" | ||||||
|                 :label="item.dictName" |                          :selectList="dict.getDict('integralDetailType')"/> | ||||||
|                 :key="i" |             </template> | ||||||
|                 :value="item.dictValue"> |           </ai-search-bar> | ||||||
|             </el-option> |           <ai-table :tableData="tableData" :col-configs="colConfigs" | ||||||
|           </el-select> |                     :total="page.total" border :dict="dict" :current.sync="page.current" :size.sync="page.size" @getList="getList"/> | ||||||
|           <ai-table |  | ||||||
|               style="margin-top: 16px;" |  | ||||||
|               :tableData="tableData" |  | ||||||
|               :col-configs="colConfigs" |  | ||||||
|               :total="page.total" |  | ||||||
|               :border="true" |  | ||||||
|               :stripe="false" |  | ||||||
|               :current.sync="page.current" |  | ||||||
|               :size.sync="page.size" |  | ||||||
|               @getList="getList"> |  | ||||||
|           </ai-table> |  | ||||||
|         </template> |         </template> | ||||||
|       </ai-card> |       </ai-card> | ||||||
|     </template> |     </template> | ||||||
| @@ -62,7 +51,6 @@ | |||||||
| <script> | <script> | ||||||
| export default { | export default { | ||||||
|   name: 'balance', |   name: 'balance', | ||||||
|  |  | ||||||
|   props: { |   props: { | ||||||
|     detailInfo: { |     detailInfo: { | ||||||
|       type: Object, |       type: Object, | ||||||
| @@ -79,61 +67,31 @@ export default { | |||||||
|         size: 10, |         size: 10, | ||||||
|         total: 0 |         total: 0 | ||||||
|       }, |       }, | ||||||
|       doType: '', |       type: "", | ||||||
|       tableData: [] |       tableData: [] | ||||||
|     } |     } | ||||||
|   }, |   }, | ||||||
|  |  | ||||||
|   created() { |   created() { | ||||||
|     this.dict.load('integralDetailType') |     this.dict.load('integralDetailType') | ||||||
|     this.getList() |     this.getList() | ||||||
|   }, |   }, | ||||||
|  |  | ||||||
|   computed: { |   computed: { | ||||||
|     colConfigs() { |     colConfigs() { | ||||||
|       const _this = this |  | ||||||
|       return [ |       return [ | ||||||
|         { |         {prop: 'doTime', label: '时间', width: 200}, | ||||||
|           prop: 'doTime', |         {prop: "type", label: "类型", dict: "integralDetailType", align: 'center'}, | ||||||
|           label: '时间' |         {prop: 'changeIntegral', align: 'center', label: '变动积分', formart: v => v > 0 ? `+${v}` : `-${v}`}, | ||||||
|         }, |         {prop: 'nowIntegral', align: 'center', label: '剩余积分'}, | ||||||
|         { |         {prop: 'eventDesc', label: '事件', width: 500} | ||||||
|           prop: 'bizType', |  | ||||||
|           align: 'center', |  | ||||||
|           label: '类型', |  | ||||||
|           render(h, {row}) { |  | ||||||
|             return h('span', {}, _this.dict.getLabel('integralDetailType', row.bizType)) |  | ||||||
|           } |  | ||||||
|         }, |  | ||||||
|         { |  | ||||||
|           prop: 'changeIntegral', |  | ||||||
|           align: 'center', |  | ||||||
|           label: '变动积分', |  | ||||||
|           formart: v => v > 0 ? `+${v}` : v |  | ||||||
|         }, |  | ||||||
|         { |  | ||||||
|           prop: 'nowIntegral', |  | ||||||
|           align: 'center', |  | ||||||
|           label: '剩余积分' |  | ||||||
|         }, |  | ||||||
|         { |  | ||||||
|           prop: 'description', |  | ||||||
|           label: '事件类型', |  | ||||||
|         } |  | ||||||
|       ] |       ] | ||||||
|     } |     } | ||||||
|   }, |   }, | ||||||
|  |  | ||||||
|   methods: { |   methods: { | ||||||
|     getList() { |     getList() { | ||||||
|       this.instance.post('/app/appvillagerintegraldetail/list', null, { |       this.instance.post('/app/appvillagerintegraldetail/list', null, { | ||||||
|         params: { |         params: {...this.page, familyId: this.detailInfo.id} | ||||||
|           ...this.page, |  | ||||||
|           familyId: this.detailInfo.id, |  | ||||||
|           bizType: this.doType |  | ||||||
|         } |  | ||||||
|       }).then(res => { |       }).then(res => { | ||||||
|         if (res.code === 0) { |         if (res?.data) { | ||||||
|           this.tableData = res.data.records |           this.tableData = res.data.records | ||||||
|           this.page.total = res.data.total |           this.page.total = res.data.total | ||||||
|         } |         } | ||||||
| @@ -148,11 +106,6 @@ export default { | |||||||
|   height: 100%; |   height: 100%; | ||||||
|   background-color: #fff; |   background-color: #fff; | ||||||
|  |  | ||||||
|   ::v-deep .ai-card__body { |  | ||||||
|     padding: 12px 16px 20px !important; |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|  |  | ||||||
|   .detail-info { |   .detail-info { | ||||||
|     display: flex; |     display: flex; | ||||||
|     align-items: center; |     align-items: center; | ||||||
| @@ -187,25 +140,5 @@ export default { | |||||||
|       } |       } | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   .iconExported { |  | ||||||
|     color: #5088FF; |  | ||||||
|     font-size: 12px; |  | ||||||
|     cursor: pointer; |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   .info { |  | ||||||
|     padding: 16px 0 16px 0; |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   .do_type { |  | ||||||
|     height: 56px; |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   .fs-14 { |  | ||||||
|     ::v-deep .el-table--small { |  | ||||||
|       font-size: 14px !important; |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
| } | } | ||||||
| </style> | </style> | ||||||
|   | |||||||
| @@ -1,84 +0,0 @@ | |||||||
| <template> |  | ||||||
|   <ai-list> |  | ||||||
|     <template slot="title"> |  | ||||||
|       <ai-title title="积分管理" :isShowBottomBorder="false" :instance="instance" :isShowArea="true" v-model="areaId" |  | ||||||
|                 @change="changeArea"></ai-title> |  | ||||||
|     </template> |  | ||||||
|     <template slot="tabs"> |  | ||||||
|       <el-tabs v-model="currIndex"> |  | ||||||
|         <el-tab-pane v-for="(tab,i) in tabs" :key="i" :label="tab.label"> |  | ||||||
|           <component :is="tab.comp" v-if="currIndex === String(i)" :bizType="tab.bizType" :ref="tab.name" |  | ||||||
|                      :areaId="areaId" :instance="instance" :dict="dict" :permissions="permissions"/> |  | ||||||
|         </el-tab-pane> |  | ||||||
|       </el-tabs> |  | ||||||
|     </template> |  | ||||||
|   </ai-list> |  | ||||||
| </template> |  | ||||||
|  |  | ||||||
| <script> |  | ||||||
| import pointsDeclaration from "./pointsDeclaration.vue" |  | ||||||
| import pointsDetails from "./pointsDetails.vue" |  | ||||||
| import pointsAppeal from './pointsAppeal' |  | ||||||
| import {mapState} from 'vuex' |  | ||||||
| import scoreChange from "./scoreChange"; |  | ||||||
|  |  | ||||||
| export default { |  | ||||||
|     name: 'AppScoreManage', |  | ||||||
|     label: "积分管理", |  | ||||||
|     components: {pointsDeclaration, pointsDetails, pointsAppeal, scoreChange}, |  | ||||||
|     props: { |  | ||||||
|       instance: Function, |  | ||||||
|       dict: Object, |  | ||||||
|       permissions: Function |  | ||||||
|     }, |  | ||||||
|  |  | ||||||
|     computed: { |  | ||||||
|       ...mapState(['user']), |  | ||||||
|       tabs() { |  | ||||||
|         return [ |  | ||||||
|           // { |  | ||||||
|           //   label: "积分申报", |  | ||||||
|           //   name: "pointsDeclaration", |  | ||||||
|           //   comp: pointsDeclaration, |  | ||||||
|           //   permission: "app_apppartyfee_record", |  | ||||||
|           //   bizType: '0' |  | ||||||
|           // }, |  | ||||||
|           // { label: "积分申诉", name: "pointsAppeal", comp: pointsAppeal, permission: "app_apppartyfee_config", bizType: '1'}, |  | ||||||
|           { |  | ||||||
|             label: "积分明细", |  | ||||||
|             name: "pointsDetails", |  | ||||||
|             comp: pointsDetails, |  | ||||||
|             permission: "app_apppartyfee_statistics", |  | ||||||
|             bizType: '2' |  | ||||||
|           }, |  | ||||||
|           { |  | ||||||
|             label: "积分调整", |  | ||||||
|             name: "scoreChange", |  | ||||||
|             comp: scoreChange, |  | ||||||
|             permission: "", |  | ||||||
|           }, |  | ||||||
|         ] |  | ||||||
|       } |  | ||||||
|     }, |  | ||||||
|     created() { |  | ||||||
|       this.areaId = this.user.info.areaId |  | ||||||
|     }, |  | ||||||
|     methods: { |  | ||||||
|       changeArea() { |  | ||||||
|         this.$nextTick(() => { |  | ||||||
|           this.$refs[this.tabs[Number(this.currIndex)].name][0].getList() |  | ||||||
|         }) |  | ||||||
|       } |  | ||||||
|     }, |  | ||||||
|     data() { |  | ||||||
|       return { |  | ||||||
|         activeName: "pointsDeclaration", |  | ||||||
|         currIndex: '0', |  | ||||||
|         areaId: '' |  | ||||||
|       } |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
| </script> |  | ||||||
|  |  | ||||||
| <style lang="scss" scoped> |  | ||||||
| </style> |  | ||||||
| @@ -1,265 +0,0 @@ | |||||||
| <template> |  | ||||||
|   <section class="pointsDetails"> |  | ||||||
|     <ai-list isTabs> |  | ||||||
|       <template slot="content"> |  | ||||||
|         <ai-search-bar bottomBorder> |  | ||||||
|           <template slot="left"> |  | ||||||
|             <el-date-picker size="small" v-model="searchDotime" type="daterange"  range-separator="至" @change="timeChange" |  | ||||||
|               start-placeholder="开始日期" end-placeholder="结束日期" value-format="yyyy-MM-dd HH:mm:ss" format="yyyy-MM-dd"></el-date-picker> |  | ||||||
|           </template> |  | ||||||
|           <template slot="right"> |  | ||||||
|             <el-input |  | ||||||
|               v-model="search.familyName" |  | ||||||
|               class="search-input" |  | ||||||
|               size="small" |  | ||||||
|               placeholder="对象、户主、事件类型" |  | ||||||
|               clearable |  | ||||||
|               v-throttle="() => {search.current = 1, getList()}" |  | ||||||
|               @clear="search.current = 1, getList()" |  | ||||||
|               suffix-icon="iconfont iconSearch" /> |  | ||||||
|           </template> |  | ||||||
|         </ai-search-bar> |  | ||||||
|         <ai-table |  | ||||||
|           :tableData="tableData" |  | ||||||
|           :col-configs="colConfigs" |  | ||||||
|           :total="total" |  | ||||||
|           ref="aitableex" |  | ||||||
|           :current.sync="search.current" |  | ||||||
|           :size.sync="search.size" |  | ||||||
|           @getList="getList"> |  | ||||||
|           <el-table-column slot="changeIntegral" label="积分" align= "center"> |  | ||||||
|             <template slot-scope="{ row }"> |  | ||||||
|               <span>{{row.changeIntegral > 0 ? '+' : ''}}{{row.changeIntegral}}</span> |  | ||||||
|             </template> |  | ||||||
|           </el-table-column> |  | ||||||
|           <el-table-column slot="doType" label="类型" align= "center"> |  | ||||||
|             <template slot-scope="{ row }"> |  | ||||||
|               <span>{{ dict.getLabel('integralDetailType', row.bizType) }}</span> |  | ||||||
|             </template> |  | ||||||
|           </el-table-column> |  | ||||||
|           <el-table-column slot="options" label="操作" align="center" fixed="right" width="120"> |  | ||||||
|             <template slot-scope="{ row }"> |  | ||||||
|               <el-button |  | ||||||
|                 type="text" |  | ||||||
|                 title="详情" |  | ||||||
|                 :disabled="!$permissions('app_appvillagerintegraldetail_detail')" |  | ||||||
|                 @click="viewItem(row)"> |  | ||||||
|                 详情 |  | ||||||
|               </el-button> |  | ||||||
|             </template> |  | ||||||
|           </el-table-column> |  | ||||||
|         </ai-table> |  | ||||||
|       </template> |  | ||||||
|     </ai-list> |  | ||||||
|     <ai-dialog |  | ||||||
|       title="详情" |  | ||||||
|       :visible.sync="dialog.visible" |  | ||||||
|       :customFooter="true" |  | ||||||
|       :destroyOnClose="true" |  | ||||||
|       width="720px" |  | ||||||
|     > |  | ||||||
|       <div class="form_content"> |  | ||||||
|         <div class="form_info"> |  | ||||||
|           <span class="form_label">户主:</span> |  | ||||||
|           <span class="form_value">{{dialogInfo.familyName}}</span> |  | ||||||
|         </div> |  | ||||||
|         <div class="form_info"> |  | ||||||
|           <span class="form_label">事项:</span> |  | ||||||
|           <span class="form_value">{{dialogInfo.ruleName}}</span> |  | ||||||
|         </div> |  | ||||||
|         <div class="form_flex form_info"> |  | ||||||
|           <div> |  | ||||||
|             <span class="form_label">积分:</span> |  | ||||||
|             <span class="form_value">{{dialogInfo.changeIntegral >= 0 ? '增加' : '减少'}}<span style="color:#2266FF">{{Math.abs(dialogInfo.changeIntegral)}}</span>分</span> |  | ||||||
|           </div> |  | ||||||
|         </div> |  | ||||||
|       </div> |  | ||||||
|       <div class="dialog-footer" slot="footer"> |  | ||||||
|         <el-button @click="dialog.visible=false" size="medium">关闭</el-button> |  | ||||||
|       </div> |  | ||||||
|     </ai-dialog> |  | ||||||
|   </section> |  | ||||||
| </template> |  | ||||||
|  |  | ||||||
| <script> |  | ||||||
| export default { |  | ||||||
|   name: "pointsDeclaration", |  | ||||||
|  |  | ||||||
|   props: { |  | ||||||
|     instance: Function, |  | ||||||
|     dict: Object, |  | ||||||
|     areaId:String |  | ||||||
|   }, |  | ||||||
|  |  | ||||||
|   data() { |  | ||||||
|     return { |  | ||||||
|       searchDotime: [], |  | ||||||
|       search: { |  | ||||||
|         current: 1, |  | ||||||
|         size: 10, |  | ||||||
|         familyName: '', |  | ||||||
|         doTimeStart: null, |  | ||||||
|         doTimeEnd: null |  | ||||||
|       }, |  | ||||||
|       total: 10, |  | ||||||
|       colConfigs: [ |  | ||||||
|         { prop: "residentName", label: "对象", width:160 }, |  | ||||||
|         { prop: "familyName", label: "户主", align: "center", width:160 }, |  | ||||||
|         { |  | ||||||
|           prop: "ruleName", |  | ||||||
|           label: "事件类型", |  | ||||||
|           "show-overflow-tooltip": true, |  | ||||||
|           width:420 |  | ||||||
|         }, |  | ||||||
|         { |  | ||||||
|           prop: "doTime", |  | ||||||
|           label: "时间", |  | ||||||
|           width:200 |  | ||||||
|         }, |  | ||||||
|         // { |  | ||||||
|         //   prop: "doType", |  | ||||||
|         //   label: "类型", |  | ||||||
|         //   align: "center", |  | ||||||
|         //   width: 100, |  | ||||||
|         //   render: (h, params) => { |  | ||||||
|         //     return h( |  | ||||||
|         //       "span", |  | ||||||
|         //       { |  | ||||||
|         //         class: "status-" + params.row.doType, |  | ||||||
|         //       }, |  | ||||||
|         //       this.$dict.getLabel("integralIntegralType", params.row.doType) |  | ||||||
|         //     ); |  | ||||||
|         //   }, |  | ||||||
|         // }, |  | ||||||
|         { slot: "doType", label: "类型", width: 100}, |  | ||||||
|         { slot: "changeIntegral", label: "积分", width: 100}, |  | ||||||
|         // { |  | ||||||
|         //   prop: "bizType", |  | ||||||
|         //   label: "途径", |  | ||||||
|         //   align: "center", |  | ||||||
|         //   width: 100, |  | ||||||
|         //   formart: (bizType) => |  | ||||||
|         //   this.$dict.getLabel("integralDetailBizType", bizType) || '-', |  | ||||||
|         // }, |  | ||||||
|         { slot: "options", label: "操作", align: "center" }, |  | ||||||
|       ], |  | ||||||
|       tableData: [], |  | ||||||
|       dialog: { |  | ||||||
|         visible: false, |  | ||||||
|       }, |  | ||||||
|       dialogInfo: {}, |  | ||||||
|     }; |  | ||||||
|   }, |  | ||||||
|  |  | ||||||
|   mounted() { |  | ||||||
|     this.$dict |  | ||||||
|       .load([ |  | ||||||
|         "integralDeclareDoType", |  | ||||||
|         "integralDetailType", |  | ||||||
|       ]) |  | ||||||
|       .then(() => { |  | ||||||
|         this.getList(); |  | ||||||
|       }); |  | ||||||
|   }, |  | ||||||
|  |  | ||||||
|   methods: { |  | ||||||
|     getList() { |  | ||||||
|       this.instance |  | ||||||
|         .post(`/app/appvillagerintegraldetail/list`, null, { |  | ||||||
|           params: { |  | ||||||
|             ...this.search, |  | ||||||
|             areaId: this.areaId, |  | ||||||
|           }, |  | ||||||
|         }) |  | ||||||
|         .then((res) => { |  | ||||||
|           if (res.code == 0) { |  | ||||||
|             this.tableData = res.data.records; |  | ||||||
|             this.total = res.data.total; |  | ||||||
|           } |  | ||||||
|         }); |  | ||||||
|     }, |  | ||||||
|  |  | ||||||
|     timeChange() { |  | ||||||
|       if(this.searchDotime) { |  | ||||||
|         this.search.doTimeStart =  this.searchDotime[0] |  | ||||||
|         this.search.doTimeEnd = this.searchDotime[1] |  | ||||||
|       }else { |  | ||||||
|         this.search.doTimeStart =  null |  | ||||||
|         this.search.doTimeEnd = null |  | ||||||
|       } |  | ||||||
|       this.search.current = 1 |  | ||||||
|       this.getList() |  | ||||||
|     }, |  | ||||||
|  |  | ||||||
|     viewItem(row) { |  | ||||||
|       this.dialog.visible = true |  | ||||||
|       this.instance.post(`/app/appvillagerintegraldetail/queryDetailById?id=${row.id}`, null, {}).then((res) => { |  | ||||||
|           if (res.code == 0) { |  | ||||||
|             this.dialogInfo = res.data |  | ||||||
|             console.log(this.dialogInfo) |  | ||||||
|           } |  | ||||||
|         }); |  | ||||||
|     }, |  | ||||||
|  |  | ||||||
|     onReset() { |  | ||||||
|       this.search.current = 1 |  | ||||||
|       this.search.doTimeStart =  null |  | ||||||
|       this.search.doTimeEnd = null |  | ||||||
|       this.search.familyName = '' |  | ||||||
|       this.searchDotime = [] |  | ||||||
|       this.getList(); |  | ||||||
|     }, |  | ||||||
|   }, |  | ||||||
| }; |  | ||||||
| </script> |  | ||||||
|  |  | ||||||
| <style lang="scss"> |  | ||||||
| .pointsDetails { |  | ||||||
|   height: 100%; |  | ||||||
|   background: #f3f6f9; |  | ||||||
|   overflow: auto; |  | ||||||
|   .form_content { |  | ||||||
|     .form_flex { |  | ||||||
|       display: flex; |  | ||||||
|       div { |  | ||||||
|         flex: 1; |  | ||||||
|       } |  | ||||||
|     } |  | ||||||
|     .form_info { |  | ||||||
|       margin-bottom: 8px; |  | ||||||
|     } |  | ||||||
|     .form_label { |  | ||||||
|       display: inline-block; |  | ||||||
|       color: #999; |  | ||||||
|       vertical-align: top; |  | ||||||
|       width: 70px; |  | ||||||
|       text-align: right; |  | ||||||
|     } |  | ||||||
|     .form_value { |  | ||||||
|       display: inline-block; |  | ||||||
|       color: #333; |  | ||||||
|       width: calc(100% - 70px); |  | ||||||
|       // img { |  | ||||||
|       //   width: 100px; |  | ||||||
|       //   height: 100px; |  | ||||||
|       //   margin: 0 8px 8px 0; |  | ||||||
|       // } |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
|   .form_div { |  | ||||||
|     padding-top: 24px; |  | ||||||
|     border-top: 1px solid #eee; |  | ||||||
|   } |  | ||||||
|   .status-0 { |  | ||||||
|     color: #FF4466; |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   .status-1 { |  | ||||||
|     color: #2EA222; |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   .status-2 { |  | ||||||
|     color: #999999; |  | ||||||
|   } |  | ||||||
| } |  | ||||||
| </style> |  | ||||||
| @@ -1,176 +0,0 @@ | |||||||
| <template> |  | ||||||
|   <div class="scoreChange"> |  | ||||||
|     <ai-list isTabs> |  | ||||||
|       <template slot="content"> |  | ||||||
|         <ai-search-bar bottomBorder> |  | ||||||
|           <template slot="left"> |  | ||||||
|             <el-button type="primary" icon="iconfont iconAdd" @click="dialog=true" |  | ||||||
|                        :disabled="!permissions('app_appvillagerintegraldetail_change')">添加 |  | ||||||
|             </el-button> |  | ||||||
|             <ai-import :instance="instance" :dict="dict" name="积分调整" type="appvillagerintegraldetail" |  | ||||||
|                        v-if="permissions('app_appvillagerintegraldetail_change')" @success="getList"/> |  | ||||||
|           </template> |  | ||||||
|         </ai-search-bar> |  | ||||||
|         <ai-table |  | ||||||
|             :tableData="tableData" |  | ||||||
|             :col-configs="colConfigs" |  | ||||||
|             :total="page.total" |  | ||||||
|             :current.sync="page.current" |  | ||||||
|             :size.sync="page.size" |  | ||||||
|             @getList="getList"> |  | ||||||
|         </ai-table> |  | ||||||
|       </template> |  | ||||||
|     </ai-list> |  | ||||||
|     <ai-dialog |  | ||||||
|         title="添加积分调整" |  | ||||||
|         :visible.sync="dialog" |  | ||||||
|         :destroyOnClose="true" |  | ||||||
|         width="720px" |  | ||||||
|         @onConfirm="onConfirm" |  | ||||||
|         @closed="form={}"> |  | ||||||
|       <el-form ref="form" :model="form" :rules="rules" label-width="80px"> |  | ||||||
|         <el-form-item label="选择人员" prop="residentId"> |  | ||||||
|           <ai-person-select :instance="instance" :customClicker="true" |  | ||||||
|                             :url="'/app/appresident/list?auditType=1areaId=' + user.info.areaId" |  | ||||||
|                             :isMultiple="false" dialogTitle="选择" @selectPerson="selectPerson"> |  | ||||||
|             <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-item label="调整说明" prop="description"> |  | ||||||
|           <el-input v-model.trim="form.description" placeholder="请输入..." type="textarea" :rows="4" show-word-limit |  | ||||||
|                     maxlength="100"></el-input> |  | ||||||
|         </el-form-item> |  | ||||||
|         <el-form-item label="类型" prop="doType"> |  | ||||||
|           <el-radio-group v-model="form.doType"> |  | ||||||
|             <el-radio label="0">加分</el-radio> |  | ||||||
|             <el-radio label="1">减分</el-radio> |  | ||||||
|           </el-radio-group> |  | ||||||
|         </el-form-item> |  | ||||||
|         <el-form-item label="积分" prop="changeIntegral"> |  | ||||||
|           <el-input v-model.trim.num="form.changeIntegral" placeholder="请输入正整数" size="small"></el-input> |  | ||||||
|         </el-form-item> |  | ||||||
|       </el-form> |  | ||||||
|     </ai-dialog> |  | ||||||
|   </div> |  | ||||||
| </template> |  | ||||||
|  |  | ||||||
| <script> |  | ||||||
| import {mapState} from "vuex" |  | ||||||
|  |  | ||||||
| export default { |  | ||||||
|   name: "scoreChange", |  | ||||||
|   props: { |  | ||||||
|     instance: Function, |  | ||||||
|     dict: Object, |  | ||||||
|     permissions: Function, |  | ||||||
|     areaId: String |  | ||||||
|   }, |  | ||||||
|   data() { |  | ||||||
|     return { |  | ||||||
|       tableData: [], |  | ||||||
|       page: { |  | ||||||
|         current: 1, |  | ||||||
|         size: 10, |  | ||||||
|         total: 10 |  | ||||||
|       }, |  | ||||||
|       form: {}, |  | ||||||
|       dialog: false, |  | ||||||
|       personList: [], |  | ||||||
|     } |  | ||||||
|   }, |  | ||||||
|   computed: { |  | ||||||
|     ...mapState(["user"]), |  | ||||||
|     rules() { |  | ||||||
|       return { |  | ||||||
|         residentId: [{required: true, message: '请选择人员', trigger: 'blur'},], |  | ||||||
|         description: [{required: true, message: '请输入调整说明', trigger: 'blur'},], |  | ||||||
|         doType: [{required: true, message: '请输入调整说明', trigger: 'change'},], |  | ||||||
|         changeIntegral: [ |  | ||||||
|           { |  | ||||||
|             required: true, validator: (rule, value, callback) => { |  | ||||||
|               if (!/^[1-9]\d*$/.test(value)) { |  | ||||||
|                 callback(new Error('请输入正整数')) |  | ||||||
|               } else { |  | ||||||
|                 callback(); |  | ||||||
|               } |  | ||||||
|             }, trigger: 'blur' |  | ||||||
|           },], |  | ||||||
|       } |  | ||||||
|     }, |  | ||||||
|     colConfigs() { |  | ||||||
|       return [ |  | ||||||
|         {prop: "residentName", label: "姓名"}, |  | ||||||
|         {prop: "description", label: "调整说明"}, |  | ||||||
|         { |  | ||||||
|           prop: "changeIntegral", label: "类型", align: "center", |  | ||||||
|           render: (h, {row}) => [< span> {+row.changeIntegral > 0 ? "加分" : '减分' |  | ||||||
|           } < /span>] |  | ||||||
|         }, |  | ||||||
|         { |  | ||||||
|           prop: "changeIntegral", |  | ||||||
|           label: "积分", |  | ||||||
|           align: "center", |  | ||||||
|           render: (h, {row}) => [ |  | ||||||
|             <span>{row.changeIntegral > 0 ? `+${row.changeIntegral}` : `${row.changeIntegral}`}</span>] |  | ||||||
|         }, |  | ||||||
|         {prop: "doTime", label: "操作时间"}, |  | ||||||
|         {prop: "declareObjName", label: "操作人", align: "center"}, |  | ||||||
|       ] |  | ||||||
|     } |  | ||||||
|   }, |  | ||||||
|   methods: { |  | ||||||
|     selectPerson(val) { |  | ||||||
|       if (val) { |  | ||||||
|         this.form.residentId = val.id |  | ||||||
|         this.personList = [{...val}] |  | ||||||
|       } else { |  | ||||||
|         this.form.residentId = "" |  | ||||||
|         this.personList = [] |  | ||||||
|       } |  | ||||||
|     }, |  | ||||||
|     onConfirm() { |  | ||||||
|       this.$refs['form'].validate(valid => { |  | ||||||
|         if (valid) { |  | ||||||
|           this.instance.post(`/app/appvillagerintegraldetail/changeIntegral`, { |  | ||||||
|             ...this.form, |  | ||||||
|             changeIntegral: this.form.doType == 0 ? `+${this.form.changeIntegral}` : `-${this.form.changeIntegral}` |  | ||||||
|           }).then(res => { |  | ||||||
|             if (res.code == 0) { |  | ||||||
|               this.$message.success("添加成功") |  | ||||||
|               this.dialog = false |  | ||||||
|               this.getList() |  | ||||||
|             } |  | ||||||
|           }) |  | ||||||
|         } |  | ||||||
|       }) |  | ||||||
|     }, |  | ||||||
|     getList() { |  | ||||||
|       this.instance.post(`/app/appvillagerintegraldetail/list`, null, { |  | ||||||
|         params: { |  | ||||||
|           ...this.page, |  | ||||||
|           areaId: this.areaId, |  | ||||||
|           doType: 2 |  | ||||||
|         } |  | ||||||
|       }).then(res => { |  | ||||||
|         if (res?.data) { |  | ||||||
|           this.tableData = res.data.records |  | ||||||
|           this.page.total = res.data.total |  | ||||||
|         } |  | ||||||
|       }) |  | ||||||
|     } |  | ||||||
|   }, |  | ||||||
|   created() { |  | ||||||
|     this.getList() |  | ||||||
|   } |  | ||||||
| } |  | ||||||
| </script> |  | ||||||
|  |  | ||||||
| <style lang="scss" scoped> |  | ||||||
| .scoreChange { |  | ||||||
|   height: 100%; |  | ||||||
|   overflow: auto; |  | ||||||
| } |  | ||||||
| </style> |  | ||||||
| @@ -1,7 +1,7 @@ | |||||||
| <template> | <template> | ||||||
|   <ai-detail class="family_detail"> |   <ai-detail class="family_detail"> | ||||||
|     <template slot="title"> |     <template slot="title"> | ||||||
|       <ai-title title="个人积分明细" :isShowBack="true" :isShowBottomBorder="true" @onBackClick="$emit('goBack')" ></ai-title> |       <ai-title title="个人积分明细" :isShowBack="true" :isShowBottomBorder="true" @onBackClick="$emit('goBack')"></ai-title> | ||||||
|     </template> |     </template> | ||||||
|     <template slot="content"> |     <template slot="content"> | ||||||
|       <div class="detail-info"> |       <div class="detail-info"> | ||||||
| @@ -19,37 +19,15 @@ | |||||||
|         </div> |         </div> | ||||||
|       </div> |       </div> | ||||||
|       <ai-card title="余额变动明细"> |       <ai-card title="余额变动明细"> | ||||||
|         <template slot="right"> |  | ||||||
|           <!-- <ai-download |  | ||||||
|             :instance="instance" |  | ||||||
|             url="/app/appvillagerintegraldetail/export" |  | ||||||
|             :disabled="!Boolean(tableData.length)" |  | ||||||
|             :params="{familyName:detailInfo.name,doType:doType}" |  | ||||||
|             fileName="余额变动明细"> |  | ||||||
|             <span class="iconfont iconExported">导出</span> |  | ||||||
|           </ai-download> --> |  | ||||||
|         </template> |  | ||||||
|         <template #content> |         <template #content> | ||||||
|           <el-select v-model="doType" placeholder="请选择类型" size='small' clearable  @change="page.current=1,getList()"> |           <ai-search-bar> | ||||||
|             <el-option |             <template #left> | ||||||
|               v-for="(item,i) in dict.getDict('integralDetailType')" |               <ai-select v-model="type" placeholder="请选择类型" @change="page.current=1,getList()" | ||||||
|               :label="item.dictName" |                          :selectList="dict.getDict('integralDetailType')"/> | ||||||
|               :key="i" |             </template> | ||||||
|               :value="item.dictValue"> |           </ai-search-bar> | ||||||
|             </el-option> |           <ai-table :tableData="tableData" :col-configs="colConfigs" | ||||||
|           </el-select> |                     :total="page.total" border :dict="dict" :current.sync="page.current" :size.sync="page.size" @getList="getList"/> | ||||||
|           <ai-table class="fs-14" |  | ||||||
|             style="margin-top: 16px;" |  | ||||||
|             :tableData="tableData" |  | ||||||
|             :col-configs="colConfigs" |  | ||||||
|             :total="page.total" |  | ||||||
|             :current.sync="page.current" |  | ||||||
|             :size.sync="page.size" |  | ||||||
|             :isShowPagination="false" |  | ||||||
|             tableSize="small" |  | ||||||
|             :border="true" |  | ||||||
|             @getList="getList"> |  | ||||||
|           </ai-table> |  | ||||||
|         </template> |         </template> | ||||||
|       </ai-card> |       </ai-card> | ||||||
|     </template> |     </template> | ||||||
| @@ -57,151 +35,124 @@ | |||||||
| </template> | </template> | ||||||
|  |  | ||||||
| <script> | <script> | ||||||
|   export default { | export default { | ||||||
|     name: 'balance', |   name: 'balance', | ||||||
|  |  | ||||||
|     props: { |   props: { | ||||||
|       detailInfo: { |     detailInfo: { | ||||||
|         type: Object, |       type: Object, | ||||||
|         require: true |       require: true | ||||||
|  |     }, | ||||||
|  |     instance: Function, | ||||||
|  |     dict: Object | ||||||
|  |   }, | ||||||
|  |  | ||||||
|  |   data() { | ||||||
|  |     return { | ||||||
|  |       page: { | ||||||
|  |         current: 1, | ||||||
|  |         size: 10, | ||||||
|  |         total: 0 | ||||||
|       }, |       }, | ||||||
|       instance: Function, |       info: {}, | ||||||
|       dict: Object |       type: '', | ||||||
|     }, |       tableData: [] | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |  | ||||||
|     data () { |   created() { | ||||||
|       return { |     this.dict.load('integralDetailType') | ||||||
|         page: { |     this.getList() | ||||||
|           current: 1, |   }, | ||||||
|           size: 10, |   computed: { | ||||||
|           total: 0 |     colConfigs() { | ||||||
|         }, |       return [ | ||||||
|         info: {}, |         {prop: 'doTime', label: '时间', width: 200}, | ||||||
|         doType: '', |         {prop: "type", label: "类型", dict: "integralDetailType", align: 'center'}, | ||||||
|         tableData: [] |         {prop: 'changeIntegral', align: 'center', label: '变动积分', formart: v => v > 0 ? `+${v}` : `-${v}`}, | ||||||
|       } |         {prop: 'nowIntegral', align: 'center', label: '剩余积分'}, | ||||||
|     }, |         {prop: 'eventDesc', label: '事件', width: 500} | ||||||
|  |       ] | ||||||
|     created () { |     } | ||||||
|       this.dict.load('integralDetailType') |   }, | ||||||
|       this.getList() |   methods: { | ||||||
|     }, |     getList() { | ||||||
|  |       this.instance.post(`/app/appresident/detail?id=${this.detailInfo.id}`).then(res => { | ||||||
|     computed: { |         if (res?.data) { | ||||||
|       colConfigs () { |           this.info = res.data.resident | ||||||
|         const _this = this |           let {type, info: {id: residentId}} = this | ||||||
|         return [ |           this.instance.post(`/app/appvillagerintegraldetail/IntegralList`, null, { | ||||||
|           { |             params: {...this.page, queryType: 1, type, residentId} | ||||||
|             prop: 'doTime', |           }).then(res => { | ||||||
|             align: 'center', |             if (res?.data) { | ||||||
|             label: '时间', |               this.tableData = res.data.records | ||||||
|             align:'left' |  | ||||||
|           }, |  | ||||||
|           { |  | ||||||
|             prop: 'doType', |  | ||||||
|             align: 'center', |  | ||||||
|             label: '类型', |  | ||||||
|             render (h, {row}) { |  | ||||||
|               return h('span',{}, _this.dict.getLabel('integralDetailType', row.bizType)) |  | ||||||
|             } |             } | ||||||
|           }, |           }) | ||||||
|           { |         } | ||||||
|             prop: 'changeIntegral', |       }) | ||||||
|             align: 'center', |  | ||||||
|             label: '变动积分' |  | ||||||
|           }, |  | ||||||
|           { |  | ||||||
|             prop: 'nowIntegral', |  | ||||||
|             align: 'center', |  | ||||||
|             label: '剩余积分' |  | ||||||
|           }, |  | ||||||
|           { |  | ||||||
|             prop: 'description', |  | ||||||
|             align: 'center', |  | ||||||
|             label: '事件类型', |  | ||||||
|             align:'left' |  | ||||||
|           } |  | ||||||
|         ] |  | ||||||
|       } |  | ||||||
|     }, |  | ||||||
|  |  | ||||||
|     methods: { |  | ||||||
|       getList () { |  | ||||||
|         this.instance.post(`/app/appresident/detail?id=${this.detailInfo.id}`).then(res => { |  | ||||||
|           if (res.code === 0) { |  | ||||||
|             this.info = res.data.resident |  | ||||||
|             this.instance.post(`/app/appvillagerintegraldetail/IntegralList?bizType=${this.doType}&type=1&residentId=${res.data.resident.id}`, null, { |  | ||||||
|               params: this.page |  | ||||||
|             }).then(res => { |  | ||||||
|               if (res.code === 0) { |  | ||||||
|                 this.tableData = res.data.records |  | ||||||
|               } |  | ||||||
|             }) |  | ||||||
|           } |  | ||||||
|         }) |  | ||||||
|       } |  | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
|  | } | ||||||
| </script> | </script> | ||||||
|  |  | ||||||
| <style lang="scss" scoped> | <style lang="scss" scoped> | ||||||
|   .family_detail{ | .family_detail { | ||||||
|     height: 100%; |   height: 100%; | ||||||
|     background-color: #fff; |   background-color: #fff; | ||||||
|  |  | ||||||
|     ::v-deep .ai-card__body { |   .detail-info { | ||||||
|       padding: 12px 16px 20px!important; |     display: flex; | ||||||
|     } |     align-items: center; | ||||||
|  |     margin-bottom: 20px; | ||||||
|  |  | ||||||
|     .detail-info { |     .detail-info__item { | ||||||
|       display: flex; |       flex: 1; | ||||||
|       align-items: center; |       height: 96px; | ||||||
|       margin-bottom: 20px; |       margin-right: 20px; | ||||||
|  |       padding: 16px 24px; | ||||||
|  |       background: #FFFFFF; | ||||||
|  |       box-shadow: 0px 4px 6px -2px rgba(15, 15, 21, 0.15); | ||||||
|  |       border-radius: 4px; | ||||||
|  |  | ||||||
|       .detail-info__item { |       &:last-child { | ||||||
|         flex: 1; |         margin-right: 0; | ||||||
|         height: 96px; |  | ||||||
|         margin-right: 20px; |  | ||||||
|         padding: 16px 24px; |  | ||||||
|         background: #FFFFFF; |  | ||||||
|         box-shadow: 0px 4px 6px -2px rgba(15, 15, 21, 0.15); |  | ||||||
|         border-radius: 4px; |  | ||||||
|  |  | ||||||
|         &:last-child { |  | ||||||
|           margin-right: 0; |  | ||||||
|         } |  | ||||||
|  |  | ||||||
|         h2 { |  | ||||||
|           margin-bottom: 8px; |  | ||||||
|           color: #888888; |  | ||||||
|           font-size: 16px; |  | ||||||
|           font-weight: bold; |  | ||||||
|         } |  | ||||||
|  |  | ||||||
|         span { |  | ||||||
|           display: block; |  | ||||||
|           line-height: 32px; |  | ||||||
|           font-size: 24px; |  | ||||||
|           font-weight: bold; |  | ||||||
|           color: #222; |  | ||||||
|         } |  | ||||||
|       } |       } | ||||||
|     } |  | ||||||
|     .iconExported{ |       h2 { | ||||||
|       color:#5088FF; |         margin-bottom: 8px; | ||||||
|       font-size: 12px; |         color: #888888; | ||||||
|       cursor: pointer; |         font-size: 16px; | ||||||
|     } |         font-weight: bold; | ||||||
|     .info{ |       } | ||||||
|       padding: 16px 0 16px 0; |  | ||||||
|     } |       span { | ||||||
|     .do_type{ |         display: block; | ||||||
|       height: 56px; |         line-height: 32px; | ||||||
|     } |         font-size: 24px; | ||||||
|     .fs-14{ |         font-weight: bold; | ||||||
|       ::v-deep .el-table--small{ |         color: #222; | ||||||
|         font-size: 14px!important; |  | ||||||
|       } |       } | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
| </style> |  | ||||||
|  |   .iconExported { | ||||||
|  |     color: #5088FF; | ||||||
|  |     font-size: 12px; | ||||||
|  |     cursor: pointer; | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   .info { | ||||||
|  |     padding: 16px 0 16px 0; | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   .do_type { | ||||||
|  |     height: 56px; | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   .fs-14 { | ||||||
|  |     ::v-deep .el-table--small { | ||||||
|  |       font-size: 14px !important; | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | </style> | ||||||
|   | |||||||
| @@ -1,84 +0,0 @@ | |||||||
| <template> |  | ||||||
|   <ai-list> |  | ||||||
|     <template slot="title"> |  | ||||||
|       <ai-title title="积分维护" :isShowBottomBorder="false" :instance="instance" :isShowArea="true" v-model="areaId" |  | ||||||
|                 @change="changeArea"></ai-title> |  | ||||||
|     </template> |  | ||||||
|     <template slot="tabs"> |  | ||||||
|       <el-tabs v-model="currIndex"> |  | ||||||
|         <el-tab-pane v-for="(tab,i) in tabs" :key="i" :label="tab.label"> |  | ||||||
|           <component :is="tab.comp" v-if="currIndex === String(i)" :bizType="tab.bizType" :ref="tab.name" |  | ||||||
|                      :areaId="areaId" :instance="instance" :dict="dict" :permissions="permissions"/> |  | ||||||
|         </el-tab-pane> |  | ||||||
|       </el-tabs> |  | ||||||
|     </template> |  | ||||||
|   </ai-list> |  | ||||||
| </template> |  | ||||||
|  |  | ||||||
| <script> |  | ||||||
| import pointsDeclaration from "./pointsDeclaration.vue" |  | ||||||
| import pointsDetails from "./pointsDetails.vue" |  | ||||||
| import pointsAppeal from './pointsAppeal' |  | ||||||
| import {mapState} from 'vuex' |  | ||||||
| import scoreChange from "./scoreChange"; |  | ||||||
|  |  | ||||||
| export default { |  | ||||||
|     name: 'AppScoreManage', |  | ||||||
|     label: "积分维护", |  | ||||||
|     components: {pointsDeclaration, pointsDetails, pointsAppeal, scoreChange}, |  | ||||||
|     props: { |  | ||||||
|       instance: Function, |  | ||||||
|       dict: Object, |  | ||||||
|       permissions: Function |  | ||||||
|     }, |  | ||||||
|  |  | ||||||
|     computed: { |  | ||||||
|       ...mapState(['user']), |  | ||||||
|       tabs() { |  | ||||||
|         return [ |  | ||||||
|           // { |  | ||||||
|           //   label: "积分申报", |  | ||||||
|           //   name: "pointsDeclaration", |  | ||||||
|           //   comp: pointsDeclaration, |  | ||||||
|           //   permission: "app_apppartyfee_record", |  | ||||||
|           //   bizType: '0' |  | ||||||
|           // }, |  | ||||||
|           // { label: "积分申诉", name: "pointsAppeal", comp: pointsAppeal, permission: "app_apppartyfee_config", bizType: '1'}, |  | ||||||
|           { |  | ||||||
|             label: "积分明细", |  | ||||||
|             name: "pointsDetails", |  | ||||||
|             comp: pointsDetails, |  | ||||||
|             permission: "app_apppartyfee_statistics", |  | ||||||
|             bizType: '2' |  | ||||||
|           }, |  | ||||||
|           { |  | ||||||
|             label: "积分调整", |  | ||||||
|             name: "scoreChange", |  | ||||||
|             comp: scoreChange, |  | ||||||
|             permission: "", |  | ||||||
|           }, |  | ||||||
|         ] |  | ||||||
|       } |  | ||||||
|     }, |  | ||||||
|     created() { |  | ||||||
|       this.areaId = this.user.info.areaId |  | ||||||
|     }, |  | ||||||
|     methods: { |  | ||||||
|       changeArea() { |  | ||||||
|         this.$nextTick(() => { |  | ||||||
|           this.$refs[this.tabs[Number(this.currIndex)].name][0].getList() |  | ||||||
|         }) |  | ||||||
|       } |  | ||||||
|     }, |  | ||||||
|     data() { |  | ||||||
|       return { |  | ||||||
|         activeName: "pointsDeclaration", |  | ||||||
|         currIndex: '0', |  | ||||||
|         areaId: '' |  | ||||||
|       } |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
| </script> |  | ||||||
|  |  | ||||||
| <style lang="scss" scoped> |  | ||||||
| </style> |  | ||||||
| @@ -1,611 +0,0 @@ | |||||||
| <template> |  | ||||||
|   <section class="pointsDeclaration"> |  | ||||||
|     <ai-list isTabs> |  | ||||||
|       <template slot="content"> |  | ||||||
|         <ai-search-bar bottomBorder> |  | ||||||
|           <template slot="left"> |  | ||||||
|             <el-button type="primary" icon="iconfont iconAdd" @click="onAdd" v-if="$permissions('app_appvillagerintegraldeclare_edit')">代申诉</el-button> |  | ||||||
|             <el-button icon="iconfont iconEdit" @click="batchAduit()" :disabled="!Boolean(selectionList.length)" v-if="$permissions('app_appvillagerintegraldeclare_edit')">批量审核</el-button> |  | ||||||
|             <ai-select |  | ||||||
|               v-model="search.status" |  | ||||||
|               @change="page.current = 1, getList()" |  | ||||||
|               placeholder="发布状态" |  | ||||||
|               :selectList="dict.getDict('integralDeclareStatus')"> |  | ||||||
|             </ai-select> |  | ||||||
|             <div class="times_div"> |  | ||||||
|               <p class="times">申诉时间</p> |  | ||||||
|               <el-date-picker |  | ||||||
|                 v-model="search.declareTimeStart" |  | ||||||
|                 type="date" |  | ||||||
|                 size="small" |  | ||||||
|                 @change="page.current = 1,getList()" |  | ||||||
|                 value-format="yyyy-MM-dd HH:mm:ss" |  | ||||||
|                 placeholder="开始日期"> |  | ||||||
|               </el-date-picker> |  | ||||||
|               <el-date-picker |  | ||||||
|                 v-model="search.declareTimeEnd" |  | ||||||
|                 type="date" |  | ||||||
|                 size="small" |  | ||||||
|                 @change="page.current = 1,getList()" |  | ||||||
|                 value-format="yyyy-MM-dd HH:mm:ss" |  | ||||||
|                 placeholder="结束日期"> |  | ||||||
|               </el-date-picker> |  | ||||||
|             </div> |  | ||||||
|           </template> |  | ||||||
|           <template slot="right"> |  | ||||||
|             <el-input |  | ||||||
|               v-model="search.familyName" |  | ||||||
|               class="search-input" |  | ||||||
|               size="mini" |  | ||||||
|               placeholder="申诉人/申诉对象/..." |  | ||||||
|               clearable |  | ||||||
|               v-throttle="() => {page.current = 1, getList()}" |  | ||||||
|               @clear="page.current = 1, getList()" |  | ||||||
|               suffix-icon="iconfont iconSearch" /> |  | ||||||
|           </template> |  | ||||||
|         </ai-search-bar> |  | ||||||
|         <ai-table |  | ||||||
|           :tableData="tableData" |  | ||||||
|           :col-configs="colConfigs" |  | ||||||
|           :total="page.total" |  | ||||||
|           :current.sync="page.current" |  | ||||||
|           :size.sync="page.size" |  | ||||||
|           @getList="getList" |  | ||||||
|           @selection-change="handleSelectionChange" |  | ||||||
|         > |  | ||||||
|           <el-table-column slot="selection" type="selection" width="55" :selectable="(row, index)=>{ |  | ||||||
|               if(row.status==0){ |  | ||||||
|                 return true |  | ||||||
|               }else{ |  | ||||||
|                 return false |  | ||||||
|               }                   |  | ||||||
|           }"></el-table-column> |  | ||||||
|           <el-table-column slot="options" label="操作" align="center"> |  | ||||||
|             <template slot-scope="{ row }"> |  | ||||||
|               <span |  | ||||||
|                 class="iconfont iconEdit icon-color89B" |  | ||||||
|                 v-if="row.status === '0'&&$permissions('app_appvillagerintegraldeclare_edit')" |  | ||||||
|                 title="编辑" |  | ||||||
|                 @click="toEdit(row)" |  | ||||||
|               ></span> |  | ||||||
|               <span |  | ||||||
|                 class="iconfont iconShow icon-color89B" |  | ||||||
|                 v-if="row.status !== '0'&&$permissions('app_appvillagerintegraldeclare_detail')" |  | ||||||
|                 title="详情" |  | ||||||
|                 @click="toEdit(row)" |  | ||||||
|               ></span> |  | ||||||
|               <!-- <span |  | ||||||
|                 class="iconfont iconDelete icon-color89B" |  | ||||||
|                 v-if="$permissions('app_appofficialdocumentinfo_del')" |  | ||||||
|                 title="删除" |  | ||||||
|                 @click="remove(row.id)" |  | ||||||
|               ></span> --> |  | ||||||
|             </template> |  | ||||||
|           </el-table-column> |  | ||||||
|         </ai-table> |  | ||||||
|       </template> |  | ||||||
|     </ai-list> |  | ||||||
|     <ai-dialog |  | ||||||
|       title="积分代申诉" |  | ||||||
|       :visible.sync="dialog.visibleAdd" |  | ||||||
|       :customFooter="true" |  | ||||||
|       :destroyOnClose="true" |  | ||||||
|       width="720px" |  | ||||||
|       @close="init('ruleForm')" |  | ||||||
|     > |  | ||||||
|       <div class="form_div"> |  | ||||||
|         <el-form |  | ||||||
|           ref="ruleForm" |  | ||||||
|           :model="dialogInfo" |  | ||||||
|           :rules="formRules" |  | ||||||
|           size="small" |  | ||||||
|           label-suffix=":" |  | ||||||
|           label-width="140px" |  | ||||||
|         > |  | ||||||
|           <el-form-item label="代申诉家庭" prop="users">             |  | ||||||
|               <ai-person-select :customClicker="true" :isMultiple="true" :chooseUserList.sync="dialogInfo.users" :instance="instance" url="/app/appvillagerintegralfamilymember/list" > |  | ||||||
|                     <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-item label="代申诉说明" prop="declareDescription"> |  | ||||||
|             <el-input type="textarea" :rows="3" placeholder="请输入…" maxlength="100" show-word-limit v-model="dialogInfo.declareDescription"></el-input> |  | ||||||
|           </el-form-item> |  | ||||||
|           <el-form-item label="照片" prop="fileList"> |  | ||||||
|             <div class="upload"> |  | ||||||
|               <ai-uploader :instance="instance" v-model="dialogInfo.fileList" :limit="9" ></ai-uploader> |  | ||||||
|             </div> |  | ||||||
|           </el-form-item> |  | ||||||
|         </el-form> |  | ||||||
|       </div> |  | ||||||
|       <div class="dialog-footer" slot="footer"> |  | ||||||
|         <el-button @click="dialog.visibleAdd=false" size="medium">取消</el-button> |  | ||||||
|         <el-button @click="declare('ruleForm')" type="primary" size="medium">提交</el-button> |  | ||||||
|       </div> |  | ||||||
|     </ai-dialog> |  | ||||||
|     <ai-dialog |  | ||||||
|       title="申诉审核" |  | ||||||
|       :visible.sync="dialog.visibleDetail" |  | ||||||
|       :customFooter="true" |  | ||||||
|       :destroyOnClose="true" |  | ||||||
|       width="720px" |  | ||||||
|       @close="init('rules')" |  | ||||||
|     > |  | ||||||
|       <div class="form_content" v-if="!isBatch"> |  | ||||||
|         <div class="form_flex form_info"> |  | ||||||
|           <div> |  | ||||||
|             <span class="form_label">申诉人:</span> |  | ||||||
|             <span class="form_value">{{rowInfo.declareName}}</span> |  | ||||||
|           </div> |  | ||||||
|           <div> |  | ||||||
|             <span class="form_label">申诉对象:</span> |  | ||||||
|             <span class="form_value">{{rowInfo.declareObjName}}</span> |  | ||||||
|           </div> |  | ||||||
|           <div> |  | ||||||
|             <span class="form_label">户主:</span> |  | ||||||
|             <span class="form_value">{{rowInfo.familyName}}</span> |  | ||||||
|           </div> |  | ||||||
|         </div> |  | ||||||
|         <div class="form_info"> |  | ||||||
|           <span class="form_label">申诉说明:</span> |  | ||||||
|           <span class="form_value">{{rowInfo.declareDescription}}</span> |  | ||||||
|         </div> |  | ||||||
|         <div class="form_info"> |  | ||||||
|           <span class="form_label">申诉时间:</span> |  | ||||||
|           <span class="form_value">{{rowInfo.declareTime}}</span> |  | ||||||
|         </div> |  | ||||||
|         <div class="form_info"> |  | ||||||
|           <span class="form_label">照片:</span> |  | ||||||
|           <span class="form_value"> |  | ||||||
|               <ai-uploader  :disabled="true" :instance="instance" v-model="rowInfo.fileList" :limit="9" ></ai-uploader> |  | ||||||
|           </span> |  | ||||||
|         </div> |  | ||||||
|       </div> |  | ||||||
|       <div class="form_div"> |  | ||||||
|         <el-form |  | ||||||
|           ref="rules" |  | ||||||
|           :model="dialogDetail" |  | ||||||
|           :rules="formRules" |  | ||||||
|           size="small" |  | ||||||
|           label-suffix=":" |  | ||||||
|           v-show="rowInfo.status==0" |  | ||||||
|           label-width="90px" |  | ||||||
|         > |  | ||||||
|           <el-form-item label="类型" prop="doType"> |  | ||||||
|             <el-radio-group v-model="dialogDetail.doType" @change="changeDoType"> |  | ||||||
|               <el-radio label="1">加分</el-radio> |  | ||||||
|               <el-radio label="0">扣分</el-radio> |  | ||||||
|               <el-radio label="2">拒绝</el-radio> |  | ||||||
|             </el-radio-group> |  | ||||||
|           </el-form-item> |  | ||||||
|           <el-form-item label="事项" prop="ruleId" v-if='dialogDetail.doType!=2'> |  | ||||||
|             <el-select v-model="dialogDetail.ruleId" placeholder="请选择..." @change="ruleChange"> |  | ||||||
|                   <el-option |  | ||||||
|                       v-for="(item,i) in rulesList" |  | ||||||
|                       :key="i" |  | ||||||
|                       :label="item.ruleName" |  | ||||||
|                       :value="item.id" |  | ||||||
|                   ></el-option> |  | ||||||
|             </el-select> |  | ||||||
|           </el-form-item> |  | ||||||
|           <el-form-item label="积分" prop="doIntegral" v-if='dialogDetail.doType!=2'> |  | ||||||
|             <el-col :span="1.5" style="margin-right: 8px;">{{dialogDetail.doType==0? '减少' :'增加'}}</el-col> |  | ||||||
|             <el-col :span="6" style="margin-right: 8px;width:120px;"><el-input type="number" v-model="dialogDetail.doIntegral" :placeholder="placeholder" :disabled="integralEdit"></el-input></el-col> |  | ||||||
|             <el-col :span="1" style="margin-right: 8px;">分</el-col>             |  | ||||||
|           </el-form-item> |  | ||||||
|           <el-form-item label="备注说明"> |  | ||||||
|             <el-input type="textarea" :rows="3" maxlength="100" placeholder="请输入…" show-word-limit v-model="dialogDetail.remark"></el-input> |  | ||||||
|           </el-form-item> |  | ||||||
|         </el-form> |  | ||||||
|         <ai-wrapper |  | ||||||
|             label-width="70px" |  | ||||||
|             v-if="rowInfo.status!=0" |  | ||||||
|             :columnsNumber="1"> |  | ||||||
|             <ai-info-item label="类型:"><span  :style="{color:colorList[rowInfo.status]}" >{{dict.getLabel('integralDeclareStatus', rowInfo.status)}}</span></ai-info-item> |  | ||||||
|             <ai-info-item label="事项:" v-if='rowInfo.doType!=2'><span >{{rowInfo.ruleName}}</span></ai-info-item> |  | ||||||
|             <ai-info-item label="积分:" v-if='rowInfo.doType!=2'>{{rowInfo.doType==0? '减少' :'增加'}}<span style="color:#2266FF">{{Math.abs(rowInfo.doIntegral)}}</span>分</ai-info-item> |  | ||||||
|             <ai-info-item label="备注说明:"><span>{{rowInfo.remark||'-'}}</span></ai-info-item> |  | ||||||
|         </ai-wrapper> |  | ||||||
|       </div> |  | ||||||
|       <div class="dialog-footer" slot="footer" v-if="rowInfo.status==0"> |  | ||||||
|         <el-button @click="dialog.visibleDetail=false" size="medium">取消</el-button> |  | ||||||
|         <el-button @click="onConfirm('rules')" type="primary" size="medium">提交</el-button> |  | ||||||
|       </div> |  | ||||||
|     </ai-dialog> |  | ||||||
|   </section> |  | ||||||
| </template> |  | ||||||
|  |  | ||||||
| <script> |  | ||||||
| import {mapState} from 'vuex'; |  | ||||||
| export default { |  | ||||||
|   name: "pointsAppeal", |  | ||||||
|  |  | ||||||
|   props: { |  | ||||||
|     instance: Function, |  | ||||||
|     dict: Object, |  | ||||||
|     bizType:String, |  | ||||||
|     areaId:String |  | ||||||
|   }, |  | ||||||
|  |  | ||||||
|   data() { |  | ||||||
|      var integral = (rule, value, callback) => { |  | ||||||
|       if (value) { |  | ||||||
|         if (/^[1-9]\d*$/.test(value)) { |  | ||||||
|           if(!this.integralEdit){ |  | ||||||
|               if(Number(value)>=this.sectionNum.min&&Number(value)<=this.sectionNum.max){ |  | ||||||
|                   callback(); |  | ||||||
|               }else{ |  | ||||||
|                   callback(new Error(`请输入${this.sectionNum.min}至${this.sectionNum.max}之间的正整数积分`)); |  | ||||||
|               } |  | ||||||
|           }else{ |  | ||||||
|             callback(); |  | ||||||
|           } |  | ||||||
|            |  | ||||||
|         } else { |  | ||||||
|           callback(new Error('请输入正整数')); |  | ||||||
|         } |  | ||||||
|       } else { |  | ||||||
|           callback(new Error('请输入正整数')); |  | ||||||
|       } |  | ||||||
|     }; |  | ||||||
|     return { |  | ||||||
|       search: { |  | ||||||
|           status:'', |  | ||||||
|           familyName:'', |  | ||||||
|           declareTimeStart:null, |  | ||||||
|           declareTimeEnd:null |  | ||||||
|       }, |  | ||||||
|       page:{ |  | ||||||
|         current: 1, |  | ||||||
|         size: 10, |  | ||||||
|         total:0 |  | ||||||
|       }, |  | ||||||
|       colConfigs: [ |  | ||||||
|         { slot: "selection", label: "", align: "center" }, |  | ||||||
|         { prop: "declareName", label: "申诉人", align: "center" }, |  | ||||||
|         { prop: "declareObjName", label: "申诉对象", align: "center",hide:this.bizType==1 }, |  | ||||||
|         { |  | ||||||
|           prop: "familyName", |  | ||||||
|           label: "户主", |  | ||||||
|         }, |  | ||||||
|         { |  | ||||||
|           prop: "declareDescription", |  | ||||||
|           label: "申诉说明", |  | ||||||
|           align: "left", |  | ||||||
|           width:300 |  | ||||||
|         }, |  | ||||||
|         { |  | ||||||
|           prop: "declareTime", |  | ||||||
|           label: "申诉时间", |  | ||||||
|           align: "left", |  | ||||||
|           width:150 |  | ||||||
|         }, |  | ||||||
|         { |  | ||||||
|           prop: "declareName", |  | ||||||
|           label: "操作人", |  | ||||||
|           align: "center", |  | ||||||
|         }, |  | ||||||
|         { |  | ||||||
|           prop: "status", |  | ||||||
|           label: "状态", |  | ||||||
|           align: "center", |  | ||||||
|           render: (h, {row}) => { |  | ||||||
|               return h('span', {style: {color: this.dict.getColor('integralDeclareStatus', row.status)}}, this.dict.getLabel('integralDeclareStatus', row.status)) |  | ||||||
|           }, |  | ||||||
|         }, |  | ||||||
|         { slot: "options", label: "操作", align: "center" }, |  | ||||||
|       ], |  | ||||||
|       tableData: [], |  | ||||||
|       dialog: { |  | ||||||
|         visibleAdd: false, |  | ||||||
|         visibleDetail: false, |  | ||||||
|         title:'积分代申诉' |  | ||||||
|       }, |  | ||||||
|       dialogInfo: { |  | ||||||
|         users: [], |  | ||||||
|         reportIds:[], |  | ||||||
|         declareDescription: "", |  | ||||||
|         fileList: [], |  | ||||||
|       }, |  | ||||||
|       dialogDetail: { |  | ||||||
|         doType: '1', |  | ||||||
|         ruleId: '', |  | ||||||
|         doIntegral: '', |  | ||||||
|         remark: '', |  | ||||||
|         aduitIds:[], |  | ||||||
|         ruleName:'' |  | ||||||
|       }, |  | ||||||
|       isBatch:false, |  | ||||||
|       rulesList:[], |  | ||||||
|       rowInfo:{}, |  | ||||||
|       formRules: { |  | ||||||
|         users: [{ required: true, message: "请选择人员", trigger: "change" },], |  | ||||||
|         declareDescription: [{ required: true, message: "代申诉说明", trigger: "blur" }], |  | ||||||
|         // fileList: [{ required: true, message: "请上传照片", trigger: "blur" },], |  | ||||||
|         ruleId: [{ required: true, message: "请选择事项", trigger: "blur" }], |  | ||||||
|         doIntegral: [{ required: true, validator: integral, trigger: "blur" }], |  | ||||||
|         doType:[{ required: true, message: "请选择类型", trigger: "change" }] |  | ||||||
|       }, |  | ||||||
|       selectionList:[], |  | ||||||
|       integralEdit:false, |  | ||||||
|       sectionNum:{ |  | ||||||
|         min:null, |  | ||||||
|         max:null |  | ||||||
|       }, |  | ||||||
|       placeholder:'请输入...' |  | ||||||
|     }; |  | ||||||
|   }, |  | ||||||
|   computed:{ |  | ||||||
|       colorList(){ |  | ||||||
|           return { |  | ||||||
|               '0':'#FF8822', |  | ||||||
|               '1':'#2EA222', |  | ||||||
|               '2':'#FF4466' |  | ||||||
|           } |  | ||||||
|       } |  | ||||||
|   }, |  | ||||||
|   created() { |  | ||||||
|     this.dict |  | ||||||
|       .load([ |  | ||||||
|         'integralDeclareStatus', |  | ||||||
|         'integralDeclareDoType' |  | ||||||
|       ]).then(() => { |  | ||||||
|         this.getList(); |  | ||||||
|       }); |  | ||||||
|   }, |  | ||||||
|  |  | ||||||
|   methods: { |  | ||||||
|     getList() { |  | ||||||
|       this.instance.post(`/app/appvillagerintegraldeclare/list`, null, { |  | ||||||
|           params: { |  | ||||||
|             ...this.search, |  | ||||||
|             ...this.page, |  | ||||||
|              bizType:this.bizType, |  | ||||||
|              areaId:this.areaId |  | ||||||
|           }, |  | ||||||
|         }) |  | ||||||
|         .then((res) => { |  | ||||||
|           if (res.code == 0) { |  | ||||||
|             this.tableData = res.data.records; |  | ||||||
|             this.page.total = res.data.total; |  | ||||||
|           } |  | ||||||
|         }); |  | ||||||
|     }, |  | ||||||
|     handleSelectionChange(val){ |  | ||||||
|       this.selectionList=val |  | ||||||
|       this.dialogDetail.aduitIds=[]; |  | ||||||
|         val.forEach(e=>{ |  | ||||||
|             this.dialogDetail.aduitIds.push(e.id); |  | ||||||
|         }) |  | ||||||
|     }, |  | ||||||
|     // getSelect(val){ |  | ||||||
|     //     for(let e of val){ |  | ||||||
|     //         this.dialogInfo.reportIds.push(e.id) |  | ||||||
|     //     } |  | ||||||
|     // }, |  | ||||||
|     getColor(status){ |  | ||||||
|         return this.dict.getColor('integralDeclareStatus', status) |  | ||||||
|     }, |  | ||||||
|     onChange(val){ |  | ||||||
|  |  | ||||||
|     }, |  | ||||||
|     declare(formName){ |  | ||||||
|         this.dialogInfo.reportIds=[]; |  | ||||||
|         for(let e of this.dialogInfo.users){ |  | ||||||
|             this.dialogInfo.reportIds.push(e.id) |  | ||||||
|         }; |  | ||||||
|         this.$refs[formName].validate((valid) => { |  | ||||||
|             if (valid) { |  | ||||||
|                   this.instance.post("/app/appvillagerintegraldeclare/addOrUpdate", { |  | ||||||
|                         ...this.dialogInfo, |  | ||||||
|                          bizType:this.bizType |  | ||||||
|                     }, null).then(res => { |  | ||||||
|                         if (res.code==0) { |  | ||||||
|                             this.dialog.visibleAdd=false; |  | ||||||
|                             this.getList(); |  | ||||||
|                         } |  | ||||||
|                     }) |  | ||||||
|             } else { |  | ||||||
|                 return false; |  | ||||||
|             } |  | ||||||
|         }); |  | ||||||
|     }, |  | ||||||
|     init(formName){ |  | ||||||
|         this.$refs[formName].clearValidate(); |  | ||||||
|         this.dialogDetail = { |  | ||||||
|                             doType: '1', |  | ||||||
|                             ruleId: '', |  | ||||||
|                             doIntegral: '', |  | ||||||
|                             remark: '', |  | ||||||
|                             aduitIds:[], |  | ||||||
|                             ruleName:'' |  | ||||||
|                           } |  | ||||||
|           this.dialogInfo=  { |  | ||||||
|             users: [], |  | ||||||
|             reportIds:[], |  | ||||||
|             declareDescription: "", |  | ||||||
|             fileList: [], |  | ||||||
|           }; |  | ||||||
|           this.rulesList = []; |  | ||||||
|     }, |  | ||||||
|     //批量审核 |  | ||||||
|     batchAduit(){ |  | ||||||
|         this.isBatch=true; |  | ||||||
|         this.rowInfo.status=0; |  | ||||||
|         this.dialog.visibleDetail = true; |  | ||||||
|         this.getRules('1') |  | ||||||
|     }, |  | ||||||
|     getRowDetail(row){ |  | ||||||
|          this.instance.post(`/app/appvillagerintegraldeclare/queryDetailById`, null, { |  | ||||||
|           params: { |  | ||||||
|               id:row.id |  | ||||||
|           }, |  | ||||||
|         }).then((res) => { |  | ||||||
|           if (res.code == 0) { |  | ||||||
|               this.rowInfo = {...res.data} |  | ||||||
|               this.dialog.visibleDetail = true; |  | ||||||
|               this.dialogDetail.aduitIds=[]; |  | ||||||
|               this.dialogDetail.aduitIds.push(row.id); |  | ||||||
|  |  | ||||||
|           } |  | ||||||
|         }); |  | ||||||
|     }, |  | ||||||
|     toEdit(row) { |  | ||||||
|         this.isBatch=false; |  | ||||||
|         this.getRowDetail(row); |  | ||||||
|         this.getRules('1') |  | ||||||
|     }, |  | ||||||
|     changeDoType(val){ |  | ||||||
|         this.dialogDetail.ruleId=""; |  | ||||||
|         this.dialogDetail.ruleName = ""; |  | ||||||
|         this.dialogDetail.doIntegral = ""; |  | ||||||
|         this.placeholder = '请输入...'; |  | ||||||
|         this.$refs.rules.clearValidate(); |  | ||||||
|         this.getRules(val) |  | ||||||
|     }, |  | ||||||
|     ruleChange(val){ |  | ||||||
|         let item = this.rulesList.find(e => e.id == val); |  | ||||||
|         this.dialogDetail.doIntegral=''; |  | ||||||
|         this.$refs.rules.clearValidate(); |  | ||||||
|         if(item){ |  | ||||||
|           //固定区间 |  | ||||||
|             this.dialogDetail.ruleName = item.ruleName; |  | ||||||
|             if(item.integralValueType==0){ |  | ||||||
|                 this.dialogDetail.doIntegral = Math.abs(item.integral); |  | ||||||
|                 this.integralEdit = true; |  | ||||||
|             }else{ |  | ||||||
|                 this.integralEdit = false; |  | ||||||
|                 if(Math.abs(item.integralEnd)>Math.abs(item.integralStart)){ |  | ||||||
|                     this.sectionNum.min = Math.abs(item.integralStart); |  | ||||||
|                     this.sectionNum.max = Math.abs(item.integralEnd); |  | ||||||
|                 }else{ |  | ||||||
|                     this.sectionNum.max = Math.abs(item.integralStart); |  | ||||||
|                     this.sectionNum.min = Math.abs(item.integralEnd); |  | ||||||
|                 } |  | ||||||
|                 this.placeholder = `${this.sectionNum.min}~${this.sectionNum.max}` |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
|     }, |  | ||||||
|     //事项查询 |  | ||||||
|     getRules(integralType){ |  | ||||||
|         this.instance.post(`/app/appvillagerintegralrule/list`, null, { |  | ||||||
|           params: { |  | ||||||
|               integralType, |  | ||||||
|               size:10000000 |  | ||||||
|           }, |  | ||||||
|         }).then((res) => { |  | ||||||
|           if (res.code == 0) { |  | ||||||
|               this.rulesList = res.data.records.filter(e=> e.ruleStatus == 1); |  | ||||||
|           } |  | ||||||
|         }); |  | ||||||
|     }, |  | ||||||
|     remove(id) { |  | ||||||
|       this.$confirm("确定删除该公文及其相关的流转信息?").then(() => { |  | ||||||
|         this.instance |  | ||||||
|           .post(`/app/appofficialdocumentinfo/delete?ids=${id}`) |  | ||||||
|           .then((res) => { |  | ||||||
|             if (res.code == 0) { |  | ||||||
|               this.$message.success("删除成功!"); |  | ||||||
|               this.getList(); |  | ||||||
|             } |  | ||||||
|           }); |  | ||||||
|       }); |  | ||||||
|     }, |  | ||||||
|     onReset() { |  | ||||||
|       Object.keys(this.search).forEach(e => { |  | ||||||
|           this.search[e] = ""; |  | ||||||
|       }); |  | ||||||
|       this.search.declareTimeStart = null; |  | ||||||
|       this.search.declareTimeEnd = null; |  | ||||||
|       this.getList(); |  | ||||||
|     }, |  | ||||||
|  |  | ||||||
|     onAdd() { |  | ||||||
|       this.dialog.visibleAdd = true; |  | ||||||
|     }, |  | ||||||
|  |  | ||||||
|     onConfirm(formName) { |  | ||||||
|       this.$refs[formName].validate(v =>{ |  | ||||||
|          if(v){ |  | ||||||
|             this.instance.post("/app/appvillagerintegraldeclare/aduit", { |  | ||||||
|                         ...this.dialogDetail, |  | ||||||
|                 }, null).then(res => { |  | ||||||
|                   if (res.code==0) { |  | ||||||
|                       this.dialog.visibleDetail=false; |  | ||||||
|                       this.$message.success("提交成功!"); |  | ||||||
|                       this.dialogDetail.aduitIds=[]; |  | ||||||
|                       this.getList(); |  | ||||||
|                   } |  | ||||||
|             }) |  | ||||||
|          }else{ |  | ||||||
|             return false |  | ||||||
|          } |  | ||||||
|       }) |  | ||||||
|     }, |  | ||||||
|  |  | ||||||
|  |  | ||||||
|   }, |  | ||||||
| }; |  | ||||||
| </script> |  | ||||||
|  |  | ||||||
| <style lang="scss"> |  | ||||||
| .pointsDeclaration { |  | ||||||
|   height: 100%; |  | ||||||
|   overflow: auto; |  | ||||||
|   background: #f3f6f9; |  | ||||||
|   .times_div{ |  | ||||||
|     display: flex; |  | ||||||
|     align-items: center; |  | ||||||
|     .times{ |  | ||||||
|       display: block; |  | ||||||
|       width: 72px; |  | ||||||
|       height: 30px; |  | ||||||
|       line-height: 30px; |  | ||||||
|       text-align: center; |  | ||||||
|       background: #F5F5F5; |  | ||||||
|       border-radius: 2px 0px 0px 2px; |  | ||||||
|       border: 1px solid #D0D4DC; |  | ||||||
|       font-size: 14px; |  | ||||||
|       color:#666666; |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
|   .form_content{ |  | ||||||
|     border-bottom:1px solid #eee; |  | ||||||
|     .form_flex{ |  | ||||||
|       display: flex; |  | ||||||
|       div{ |  | ||||||
|         flex: 1; |  | ||||||
|       } |  | ||||||
|     } |  | ||||||
|     .form_info{ |  | ||||||
|       margin-bottom: 8px; |  | ||||||
|     } |  | ||||||
|     .form_label{ |  | ||||||
|       display: inline-block; |  | ||||||
|       color: #999; |  | ||||||
|       vertical-align: top; |  | ||||||
|     } |  | ||||||
|     .form_value{ |  | ||||||
|       display: inline-block; |  | ||||||
|       color: #333; |  | ||||||
|       width: calc(100% - 80px); |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
|   .form_div{ |  | ||||||
|     padding-top:24px; |  | ||||||
|   } |  | ||||||
|   .status-0 { |  | ||||||
|     color: #ff8822; |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   .status-1 { |  | ||||||
|     color: #2266ff; |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   .status-2 { |  | ||||||
|     color: #999999; |  | ||||||
|   } |  | ||||||
| } |  | ||||||
| </style> |  | ||||||
| @@ -1,603 +0,0 @@ | |||||||
| <template> |  | ||||||
|   <section class="pointsDeclaration"> |  | ||||||
|     <ai-list isTabs> |  | ||||||
|       <template slot="content"> |  | ||||||
|         <ai-search-bar bottomBorder> |  | ||||||
|           <template slot="left"> |  | ||||||
|             <el-button type="primary" icon="iconfont iconAdd" @click="onAdd" v-if="$permissions('app_appvillagerintegraldeclare_edit')">代申报</el-button> |  | ||||||
|             <el-button icon="iconfont iconEdit" @click="batchAduit()" :disabled="!Boolean(selectionList.length)"v-if="$permissions('app_appvillagerintegraldeclare_edit')">批量审核</el-button> |  | ||||||
|             <ai-select |  | ||||||
|               v-model="search.status" |  | ||||||
|               @change="page.current = 1, getList()" |  | ||||||
|               placeholder="发布状态" |  | ||||||
|               :selectList="dict.getDict('integralDeclareStatus')"> |  | ||||||
|             </ai-select> |  | ||||||
|             <div class="times_div"> |  | ||||||
|               <p class="times">申报时间</p> |  | ||||||
|               <el-date-picker |  | ||||||
|                 v-model="search.declareTimeStart" |  | ||||||
|                 type="date" |  | ||||||
|                 size="small" |  | ||||||
|                 @change="page.current = 1,getList()" |  | ||||||
|                 value-format="yyyy-MM-dd HH:mm:ss" |  | ||||||
|                 placeholder="开始日期"> |  | ||||||
|               </el-date-picker> |  | ||||||
|               <el-date-picker |  | ||||||
|                 v-model="search.declareTimeEnd" |  | ||||||
|                 type="date" |  | ||||||
|                 size="small" |  | ||||||
|                 @change="page.current = 1,getList()" |  | ||||||
|                 value-format="yyyy-MM-dd HH:mm:ss" |  | ||||||
|                 placeholder="结束日期"> |  | ||||||
|               </el-date-picker> |  | ||||||
|             </div> |  | ||||||
|           </template> |  | ||||||
|           <template slot="right"> |  | ||||||
|             <el-input |  | ||||||
|               v-model="search.familyName" |  | ||||||
|               class="search-input" |  | ||||||
|               size="mini" |  | ||||||
|               placeholder="申诉人/申诉对象/..." |  | ||||||
|               clearable |  | ||||||
|               v-throttle="() => {page.current = 1, getList()}" |  | ||||||
|               @clear="page.current = 1, getList()" |  | ||||||
|               suffix-icon="iconfont iconSearch" /> |  | ||||||
|           </template> |  | ||||||
|         </ai-search-bar> |  | ||||||
|         <ai-table |  | ||||||
|           :tableData="tableData" |  | ||||||
|           :col-configs="colConfigs" |  | ||||||
|           :total="page.total" |  | ||||||
|           :current.sync="page.current" |  | ||||||
|           :size.sync="page.size" |  | ||||||
|           @getList="getList" |  | ||||||
|           @selection-change="handleSelectionChange"> |  | ||||||
|           <el-table-column slot="selection" type="selection" width="55" :selectable="(row, index)=>{ |  | ||||||
|               if(row.status==0){ |  | ||||||
|                 return true |  | ||||||
|               }else{ |  | ||||||
|                 return false |  | ||||||
|               }                   |  | ||||||
|           }"></el-table-column> |  | ||||||
|           <el-table-column slot="options" label="操作" align="center"> |  | ||||||
|             <template slot-scope="{ row }"> |  | ||||||
|               <div class="table-options"> |  | ||||||
|                 <el-button |  | ||||||
|                   type="text" |  | ||||||
|                   :disabled="row.status === '0' || $permissions('app_appvillagerintegraldeclare_edit')" |  | ||||||
|                   title="编辑" |  | ||||||
|                   @click="toEdit(row)"> |  | ||||||
|                   编辑 |  | ||||||
|                 </el-button> |  | ||||||
|                 <el-button |  | ||||||
|                   type="text" |  | ||||||
|                   :disabled="$permissions('app_appvillagerintegraldeclare_detail')" |  | ||||||
|                   title="详情" |  | ||||||
|                   @click="toEdit(row)"> |  | ||||||
|                   详情 |  | ||||||
|                 </el-button> |  | ||||||
|               </div> |  | ||||||
|             </template> |  | ||||||
|           </el-table-column> |  | ||||||
|         </ai-table> |  | ||||||
|       </template> |  | ||||||
|     </ai-list> |  | ||||||
|     <ai-dialog |  | ||||||
|       title="积分代申报" |  | ||||||
|       :visible.sync="dialog.visibleAdd" |  | ||||||
|       :customFooter="true" |  | ||||||
|       :destroyOnClose="true" |  | ||||||
|       width="720px" |  | ||||||
|       @close="init('ruleForm')"> |  | ||||||
|       <div class="form_div"> |  | ||||||
|         <el-form |  | ||||||
|           ref="ruleForm" |  | ||||||
|           :model="dialogInfo" |  | ||||||
|           :rules="formRules" |  | ||||||
|           size="small" |  | ||||||
|           label-suffix=":" |  | ||||||
|           label-width="140px"> |  | ||||||
|           <el-form-item label="代申报家庭" prop="users">             |  | ||||||
|             <ai-person-select :customClicker="true" :isMultiple="true" :chooseUserList.sync="dialogInfo.users" :instance="instance" url="/app/appvillagerintegralfamilymember/list" > |  | ||||||
|               <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-item label="代申报说明" prop="declareDescription"> |  | ||||||
|             <el-input type="textarea" :rows="3" placeholder="请输入…" maxlength="100" show-word-limit v-model="dialogInfo.declareDescription"></el-input> |  | ||||||
|           </el-form-item> |  | ||||||
|           <el-form-item label="照片" prop="fileList"> |  | ||||||
|             <div class="upload"> |  | ||||||
|               <ai-uploader :instance="instance" v-model="dialogInfo.fileList" :limit="9" ></ai-uploader> |  | ||||||
|             </div> |  | ||||||
|           </el-form-item> |  | ||||||
|         </el-form> |  | ||||||
|       </div> |  | ||||||
|       <div class="dialog-footer" slot="footer"> |  | ||||||
|         <el-button @click="dialog.visibleAdd=false" size="medium">取消</el-button> |  | ||||||
|         <el-button @click="declare('ruleForm')" type="primary" size="medium">提交</el-button> |  | ||||||
|       </div> |  | ||||||
|     </ai-dialog> |  | ||||||
|     <ai-dialog |  | ||||||
|       title="申报审核" |  | ||||||
|       :visible.sync="dialog.visibleDetail" |  | ||||||
|       :customFooter="true" |  | ||||||
|       :destroyOnClose="true" |  | ||||||
|       width="720px" |  | ||||||
|       @close="init('rules')"> |  | ||||||
|       <div class="form_content" v-if="!isBatch"> |  | ||||||
|         <div class="form_flex form_info"> |  | ||||||
|           <div> |  | ||||||
|             <span class="form_label">申报人:</span> |  | ||||||
|             <span class="form_value">{{rowInfo.declareName}}</span> |  | ||||||
|           </div> |  | ||||||
|           <div> |  | ||||||
|             <span class="form_label">申报对象:</span> |  | ||||||
|             <span class="form_value">{{rowInfo.declareObjName}}</span> |  | ||||||
|           </div> |  | ||||||
|           <div> |  | ||||||
|             <span class="form_label">户主:</span> |  | ||||||
|             <span class="form_value">{{rowInfo.familyName}}</span> |  | ||||||
|           </div> |  | ||||||
|         </div> |  | ||||||
|         <div class="form_info"> |  | ||||||
|           <span class="form_label">申报说明:</span> |  | ||||||
|           <span class="form_value">{{rowInfo.declareDescription}}</span> |  | ||||||
|         </div> |  | ||||||
|         <div class="form_info"> |  | ||||||
|           <span class="form_label">申报时间:</span> |  | ||||||
|           <span class="form_value">{{rowInfo.declareTime}}</span> |  | ||||||
|         </div> |  | ||||||
|         <div class="form_info"> |  | ||||||
|           <span class="form_label">照片:</span> |  | ||||||
|           <span class="form_value"> |  | ||||||
|               <ai-uploader  :disabled="true" :instance="instance" v-model="rowInfo.fileList" :limit="9" ></ai-uploader> |  | ||||||
|           </span> |  | ||||||
|         </div> |  | ||||||
|       </div> |  | ||||||
|       <div class="form_div"> |  | ||||||
|         <el-form |  | ||||||
|           ref="rules" |  | ||||||
|           :model="dialogDetail" |  | ||||||
|           :rules="formRules" |  | ||||||
|           size="small" |  | ||||||
|           label-suffix=":" |  | ||||||
|           v-show="rowInfo.status==0" |  | ||||||
|           label-width="90px" |  | ||||||
|         > |  | ||||||
|           <el-form-item label="类型" prop="doType"> |  | ||||||
|             <el-radio-group v-model="dialogDetail.doType" @change="changeDoType"> |  | ||||||
|               <el-radio label="1">加分</el-radio> |  | ||||||
|               <el-radio label="0">扣分</el-radio> |  | ||||||
|               <el-radio label="2">拒绝</el-radio> |  | ||||||
|             </el-radio-group> |  | ||||||
|           </el-form-item> |  | ||||||
|           <el-form-item label="事项" prop="ruleId" v-if='dialogDetail.doType!=2'> |  | ||||||
|             <el-select v-model="dialogDetail.ruleId" placeholder="请选择..." @change="ruleChange"> |  | ||||||
|                   <el-option |  | ||||||
|                       v-for="(item,i) in rulesList" |  | ||||||
|                       :key="i" |  | ||||||
|                       :label="item.ruleName" |  | ||||||
|                       :value="item.id" |  | ||||||
|                   ></el-option> |  | ||||||
|             </el-select> |  | ||||||
|           </el-form-item> |  | ||||||
|           <el-form-item label="积分" prop="doIntegral" v-if='dialogDetail.doType!=2'> |  | ||||||
|             <el-col :span="1.5" style="margin-right: 8px;">{{dialogDetail.doType==0? '减少' :'增加'}}</el-col> |  | ||||||
|             <el-col :span="6" style="margin-right: 8px;width:120px;"><el-input type="number" v-model="dialogDetail.doIntegral" :placeholder="placeholder" :disabled="integralEdit"></el-input></el-col> |  | ||||||
|             <el-col :span="1" style="margin-right: 8px;">分</el-col>             |  | ||||||
|           </el-form-item> |  | ||||||
|           <el-form-item label="备注说明"> |  | ||||||
|             <el-input type="textarea" :rows="3" maxlength="100" placeholder="请输入…" show-word-limit v-model="dialogDetail.remark"></el-input> |  | ||||||
|           </el-form-item> |  | ||||||
|         </el-form> |  | ||||||
|         <ai-wrapper |  | ||||||
|             label-width="70px" |  | ||||||
|             v-if="rowInfo.status!=0" |  | ||||||
|             :columnsNumber="1"> |  | ||||||
|             <ai-info-item label="类型:"><span  :style="{color:colorList[rowInfo.status]}" >{{dict.getLabel('integralDeclareStatus', rowInfo.status)}}</span></ai-info-item> |  | ||||||
|             <ai-info-item label="事项:" v-if='rowInfo.doType!=2'><span >{{rowInfo.ruleName}}</span></ai-info-item> |  | ||||||
|             <ai-info-item label="积分:" v-if='rowInfo.doType!=2'>{{rowInfo.doType==0? '减少' :'增加'}}<span style="color:#2266FF">{{Math.abs(rowInfo.doIntegral)}}</span>分</ai-info-item> |  | ||||||
|             <ai-info-item label="备注说明:"><span>{{rowInfo.remark||'-'}}</span></ai-info-item> |  | ||||||
|         </ai-wrapper> |  | ||||||
|       </div> |  | ||||||
|       <div class="dialog-footer" slot="footer" v-if="rowInfo.status==0"> |  | ||||||
|         <el-button @click="dialog.visibleDetail=false" size="medium">取消</el-button> |  | ||||||
|         <el-button @click="onConfirm('rules')" type="primary" size="medium">提交</el-button> |  | ||||||
|       </div> |  | ||||||
|     </ai-dialog> |  | ||||||
|   </section> |  | ||||||
| </template> |  | ||||||
|  |  | ||||||
| <script> |  | ||||||
| import {mapState} from 'vuex'; |  | ||||||
| export default { |  | ||||||
|   name: "pointsDeclaration", |  | ||||||
|  |  | ||||||
|   props: { |  | ||||||
|     instance: Function, |  | ||||||
|     dict: Object, |  | ||||||
|     bizType:String, |  | ||||||
|     areaId:String |  | ||||||
|   }, |  | ||||||
|  |  | ||||||
|   data() { |  | ||||||
|      var integral = (rule, value, callback) => { |  | ||||||
|       if (value) { |  | ||||||
|         if (/^[1-9]\d*$/.test(value)) { |  | ||||||
|           if(!this.integralEdit){ |  | ||||||
|               if(Number(value)>=this.sectionNum.min&&Number(value)<=this.sectionNum.max){ |  | ||||||
|                   callback(); |  | ||||||
|               }else{ |  | ||||||
|                   callback(new Error(`请输入${this.sectionNum.min}至${this.sectionNum.max}之间的正整数积分`)); |  | ||||||
|               } |  | ||||||
|           }else{ |  | ||||||
|             callback(); |  | ||||||
|           } |  | ||||||
|            |  | ||||||
|         } else { |  | ||||||
|           callback(new Error('请输入正整数')); |  | ||||||
|         } |  | ||||||
|       } else { |  | ||||||
|           callback(new Error('请输入正整数')); |  | ||||||
|       } |  | ||||||
|     }; |  | ||||||
|     return { |  | ||||||
|       search: { |  | ||||||
|           status:'', |  | ||||||
|           familyName:'', |  | ||||||
|           declareTimeStart:null, |  | ||||||
|           declareTimeEnd:null |  | ||||||
|       }, |  | ||||||
|       page:{ |  | ||||||
|         current: 1, |  | ||||||
|         size: 10, |  | ||||||
|         total:0 |  | ||||||
|       }, |  | ||||||
|       colConfigs: [ |  | ||||||
|         { slot: "selection", label: "" }, |  | ||||||
|         { prop: "declareName", label: "申报人", align: "center" }, |  | ||||||
|         { prop: "declareObjName", label: "申报对象", align: "center",hide:this.bizType==1 }, |  | ||||||
|         { |  | ||||||
|           prop: "familyName", |  | ||||||
|           label: "户主", |  | ||||||
|         }, |  | ||||||
|         { |  | ||||||
|           prop: "declareDescription", |  | ||||||
|           label: "申诉说明", |  | ||||||
|           align: "left", |  | ||||||
|           width:300 |  | ||||||
|         }, |  | ||||||
|         { |  | ||||||
|           prop: "declareTime", |  | ||||||
|           label: "申报时间", |  | ||||||
|           align: "left", |  | ||||||
|           width:150 |  | ||||||
|         }, |  | ||||||
|         { |  | ||||||
|           prop: "declareName", |  | ||||||
|           label: "操作人", |  | ||||||
|           align: "center", |  | ||||||
|         }, |  | ||||||
|         { |  | ||||||
|           prop: "status", |  | ||||||
|           label: "状态", |  | ||||||
|           align: "center", |  | ||||||
|           render: (h, {row}) => { |  | ||||||
|               return h('span', {style: {color: this.dict.getColor('integralDeclareStatus', row.status)}}, this.dict.getLabel('integralDeclareStatus', row.status)) |  | ||||||
|           }, |  | ||||||
|         }, |  | ||||||
|         { slot: "options", label: "操作", align: "center" }, |  | ||||||
|       ], |  | ||||||
|       tableData: [], |  | ||||||
|       dialog: { |  | ||||||
|         visibleAdd: false, |  | ||||||
|         visibleDetail: false, |  | ||||||
|         title:'积分代申报' |  | ||||||
|       }, |  | ||||||
|       dialogInfo: { |  | ||||||
|         users: [], |  | ||||||
|         reportIds:[], |  | ||||||
|         declareDescription: "", |  | ||||||
|         fileList: [], |  | ||||||
|       }, |  | ||||||
|       dialogDetail: { |  | ||||||
|         doType: '1', |  | ||||||
|         ruleId: '', |  | ||||||
|         doIntegral: '', |  | ||||||
|         remark: '', |  | ||||||
|         aduitIds:[], |  | ||||||
|         ruleName:'' |  | ||||||
|       }, |  | ||||||
|       isBatch:false, |  | ||||||
|       rulesList:[], |  | ||||||
|       rowInfo:{}, |  | ||||||
|       formRules: { |  | ||||||
|         users: [{ required: true, message: "请选择人员", trigger: "change" },], |  | ||||||
|         declareDescription: [{ required: true, message: "代申报说明", trigger: "blur" }], |  | ||||||
|         // fileList: [{ required: true, message: "请上传照片", trigger: "blur" },], |  | ||||||
|         ruleId: [{ required: true, message: "请选择事项", trigger: "blur" }], |  | ||||||
|         doIntegral: [{ required: true, validator: integral, trigger: "blur" }], |  | ||||||
|         doType:[{ required: true, message: "请选择类型", trigger: "change" }] |  | ||||||
|       }, |  | ||||||
|       selectionList:[], |  | ||||||
|       integralEdit:false, |  | ||||||
|       sectionNum:{ |  | ||||||
|         min:null, |  | ||||||
|         max:null |  | ||||||
|       }, |  | ||||||
|       placeholder:'请输入...' |  | ||||||
|     }; |  | ||||||
|   }, |  | ||||||
|   computed:{ |  | ||||||
|       colorList(){ |  | ||||||
|           return { |  | ||||||
|               '0':'#FF8822', |  | ||||||
|               '1':'#2EA222', |  | ||||||
|               '2':'#FF4466' |  | ||||||
|           } |  | ||||||
|       } |  | ||||||
|   }, |  | ||||||
|   created() { |  | ||||||
|     this.dict |  | ||||||
|       .load([ |  | ||||||
|         'integralDeclareStatus', |  | ||||||
|         'integralDeclareDoType' |  | ||||||
|       ]).then(() => { |  | ||||||
|         this.getList(); |  | ||||||
|       }); |  | ||||||
|   }, |  | ||||||
|  |  | ||||||
|   methods: { |  | ||||||
|     getList() { |  | ||||||
|       this.instance.post(`/app/appvillagerintegraldeclare/list`, null, { |  | ||||||
|           params: { |  | ||||||
|             ...this.search, |  | ||||||
|             ...this.page, |  | ||||||
|              bizType:this.bizType, |  | ||||||
|              areaId:this.areaId |  | ||||||
|           }, |  | ||||||
|         }) |  | ||||||
|         .then((res) => { |  | ||||||
|           if (res.code == 0) { |  | ||||||
|             this.tableData = res.data.records; |  | ||||||
|             this.page.total = res.data.total; |  | ||||||
|           } |  | ||||||
|         }); |  | ||||||
|     }, |  | ||||||
|     handleSelectionChange(val){ |  | ||||||
|       this.selectionList=val |  | ||||||
|       this.dialogDetail.aduitIds=[]; |  | ||||||
|         val.forEach(e=>{ |  | ||||||
|             this.dialogDetail.aduitIds.push(e.id); |  | ||||||
|         }) |  | ||||||
|     }, |  | ||||||
|     // getSelect(val){ |  | ||||||
|     //     for(let e of val){ |  | ||||||
|     //         this.dialogInfo.reportIds.push(e.id) |  | ||||||
|     //     } |  | ||||||
|     // }, |  | ||||||
|     getColor(status){ |  | ||||||
|         return this.dict.getColor('integralDeclareStatus', status) |  | ||||||
|     }, |  | ||||||
|     onChange(val){ |  | ||||||
|  |  | ||||||
|     }, |  | ||||||
|     declare(formName){ |  | ||||||
|         this.dialogInfo.reportIds=[]; |  | ||||||
|         for(let e of this.dialogInfo.users){ |  | ||||||
|             this.dialogInfo.reportIds.push(e.id) |  | ||||||
|         }; |  | ||||||
|         this.$refs[formName].validate((valid) => { |  | ||||||
|             if (valid) { |  | ||||||
|                   this.instance.post("/app/appvillagerintegraldeclare/addOrUpdate", { |  | ||||||
|                         ...this.dialogInfo, |  | ||||||
|                          bizType:this.bizType |  | ||||||
|                     }, null).then(res => { |  | ||||||
|                         if (res.code==0) { |  | ||||||
|                             this.dialog.visibleAdd=false; |  | ||||||
|                             this.getList(); |  | ||||||
|                         } |  | ||||||
|                     }) |  | ||||||
|             } else { |  | ||||||
|                 return false; |  | ||||||
|             } |  | ||||||
|         }); |  | ||||||
|     }, |  | ||||||
|     init(formName){ |  | ||||||
|         this.$refs[formName].clearValidate(); |  | ||||||
|         this.dialogDetail = { |  | ||||||
|                             doType: '1', |  | ||||||
|                             ruleId: '', |  | ||||||
|                             doIntegral: '', |  | ||||||
|                             remark: '', |  | ||||||
|                             aduitIds:[], |  | ||||||
|                             ruleName:'' |  | ||||||
|                           } |  | ||||||
|           this.dialogInfo=  { |  | ||||||
|             users: [], |  | ||||||
|             reportIds:[], |  | ||||||
|             declareDescription: "", |  | ||||||
|             fileList: [], |  | ||||||
|           }; |  | ||||||
|           this.rulesList = []; |  | ||||||
|     }, |  | ||||||
|     //批量审核 |  | ||||||
|     batchAduit(){ |  | ||||||
|         this.isBatch=true; |  | ||||||
|         this.rowInfo.status=0; |  | ||||||
|         this.dialog.visibleDetail = true; |  | ||||||
|         this.getRules('1') |  | ||||||
|     }, |  | ||||||
|     getRowDetail(row){ |  | ||||||
|          this.instance.post(`/app/appvillagerintegraldeclare/queryDetailById`, null, { |  | ||||||
|           params: { |  | ||||||
|               id:row.id |  | ||||||
|           }, |  | ||||||
|         }).then((res) => { |  | ||||||
|           if (res.code == 0) { |  | ||||||
|               this.rowInfo = {...res.data} |  | ||||||
|               this.dialog.visibleDetail = true; |  | ||||||
|               this.dialogDetail.aduitIds=[]; |  | ||||||
|               this.dialogDetail.aduitIds.push(row.id); |  | ||||||
|  |  | ||||||
|           } |  | ||||||
|         }); |  | ||||||
|     }, |  | ||||||
|     toEdit(row) { |  | ||||||
|         this.isBatch=false; |  | ||||||
|         this.getRowDetail(row); |  | ||||||
|         this.getRules('1') |  | ||||||
|     }, |  | ||||||
|     changeDoType(val){ |  | ||||||
|         this.dialogDetail.ruleId=""; |  | ||||||
|         this.dialogDetail.ruleName = ""; |  | ||||||
|         this.dialogDetail.doIntegral = ""; |  | ||||||
|         this.placeholder = '请输入...'; |  | ||||||
|         this.$refs.rules.clearValidate(); |  | ||||||
|         this.getRules(val) |  | ||||||
|     }, |  | ||||||
|     ruleChange(val){ |  | ||||||
|         let item = this.rulesList.find(e => e.id == val); |  | ||||||
|         this.dialogDetail.doIntegral=''; |  | ||||||
|         this.$refs.rules.clearValidate(); |  | ||||||
|         if(item){ |  | ||||||
|           //固定区间 |  | ||||||
|             this.dialogDetail.ruleName = item.ruleName; |  | ||||||
|             if(item.integralValueType==0){ |  | ||||||
|                 this.dialogDetail.doIntegral = Math.abs(item.integral); |  | ||||||
|                 this.integralEdit = true; |  | ||||||
|             }else{ |  | ||||||
|                 this.integralEdit = false; |  | ||||||
|                 if(Math.abs(item.integralEnd)>Math.abs(item.integralStart)){ |  | ||||||
|                     this.sectionNum.min = Math.abs(item.integralStart); |  | ||||||
|                     this.sectionNum.max = Math.abs(item.integralEnd); |  | ||||||
|                 }else{ |  | ||||||
|                     this.sectionNum.max = Math.abs(item.integralStart); |  | ||||||
|                     this.sectionNum.min = Math.abs(item.integralEnd); |  | ||||||
|                 } |  | ||||||
|                 this.placeholder = `${this.sectionNum.min}~${this.sectionNum.max}` |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
|     }, |  | ||||||
|     //事项查询 |  | ||||||
|     getRules(integralType){ |  | ||||||
|         this.instance.post(`/app/appvillagerintegralrule/list`, null, { |  | ||||||
|           params: { |  | ||||||
|               integralType, |  | ||||||
|               size:10000000 |  | ||||||
|           }, |  | ||||||
|         }).then((res) => { |  | ||||||
|           if (res.code == 0) { |  | ||||||
|               this.rulesList = res.data.records.filter(e=> e.ruleStatus == 1); |  | ||||||
|           } |  | ||||||
|         }); |  | ||||||
|     }, |  | ||||||
|     remove(id) { |  | ||||||
|       this.$confirm("确定删除该公文及其相关的流转信息?").then(() => { |  | ||||||
|         this.instance |  | ||||||
|           .post(`/app/appofficialdocumentinfo/delete?ids=${id}`) |  | ||||||
|           .then((res) => { |  | ||||||
|             if (res.code == 0) { |  | ||||||
|               this.$message.success("删除成功!"); |  | ||||||
|               this.getList(); |  | ||||||
|             } |  | ||||||
|           }); |  | ||||||
|       }); |  | ||||||
|     }, |  | ||||||
|     onReset() { |  | ||||||
|       Object.keys(this.search).forEach(e => { |  | ||||||
|           this.search[e] = ""; |  | ||||||
|       }); |  | ||||||
|       this.search.declareTimeStart = null; |  | ||||||
|       this.search.declareTimeEnd = null; |  | ||||||
|       this.getList(); |  | ||||||
|     }, |  | ||||||
|  |  | ||||||
|     onAdd() { |  | ||||||
|       this.dialog.visibleAdd = true; |  | ||||||
|     }, |  | ||||||
|  |  | ||||||
|     onConfirm(formName) { |  | ||||||
|       this.$refs[formName].validate(v =>{ |  | ||||||
|          if(v){ |  | ||||||
|             this.instance.post("/app/appvillagerintegraldeclare/aduit", { |  | ||||||
|                         ...this.dialogDetail, |  | ||||||
|                 }, null).then(res => { |  | ||||||
|                   if (res.code==0) { |  | ||||||
|                       this.dialog.visibleDetail=false; |  | ||||||
|                       this.$message.success("提交成功!"); |  | ||||||
|                       this.dialogDetail.aduitIds=[]; |  | ||||||
|                       this.getList(); |  | ||||||
|                   } |  | ||||||
|             }) |  | ||||||
|          }else{ |  | ||||||
|             return false |  | ||||||
|          } |  | ||||||
|       }) |  | ||||||
|     }, |  | ||||||
|  |  | ||||||
|  |  | ||||||
|   }, |  | ||||||
| }; |  | ||||||
| </script> |  | ||||||
|  |  | ||||||
| <style lang="scss"> |  | ||||||
| .pointsDeclaration { |  | ||||||
|   height: 100%; |  | ||||||
|   overflow: auto; |  | ||||||
|   background: #f3f6f9; |  | ||||||
|   .times_div{ |  | ||||||
|         .times{ |  | ||||||
|             display: block; |  | ||||||
|             width: 72px; |  | ||||||
|             height: 30px; |  | ||||||
|             line-height: 30px; |  | ||||||
|             text-align: center; |  | ||||||
|             background: #F5F5F5; |  | ||||||
|             border-radius: 2px 0px 0px 2px; |  | ||||||
|             border: 1px solid #D0D4DC; |  | ||||||
|             font-size: 14px; |  | ||||||
|             color:#666666; |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
|   .form_content{ |  | ||||||
|     border-bottom:1px solid #eee; |  | ||||||
|     .form_flex{ |  | ||||||
|       display: flex; |  | ||||||
|       div{ |  | ||||||
|         flex: 1; |  | ||||||
|       } |  | ||||||
|     } |  | ||||||
|     .form_info{ |  | ||||||
|       margin-bottom: 8px; |  | ||||||
|     } |  | ||||||
|     .form_label{ |  | ||||||
|       display: inline-block; |  | ||||||
|       color: #999; |  | ||||||
|       vertical-align: top; |  | ||||||
|     } |  | ||||||
|     .form_value{ |  | ||||||
|       display: inline-block; |  | ||||||
|       color: #333; |  | ||||||
|       width: calc(100% - 80px); |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
|   .form_div{ |  | ||||||
|     padding-top:24px; |  | ||||||
|   } |  | ||||||
|   .status-0 { |  | ||||||
|     color: #ff8822; |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   .status-1 { |  | ||||||
|     color: #2266ff; |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   .status-2 { |  | ||||||
|     color: #999999; |  | ||||||
|   } |  | ||||||
| } |  | ||||||
| </style> |  | ||||||
| @@ -1,265 +0,0 @@ | |||||||
| <template> |  | ||||||
|   <section class="pointsDetails"> |  | ||||||
|     <ai-list isTabs> |  | ||||||
|       <template slot="content"> |  | ||||||
|         <ai-search-bar bottomBorder> |  | ||||||
|           <template slot="left"> |  | ||||||
|             <el-date-picker size="small" v-model="searchDotime" type="daterange"  range-separator="至" @change="timeChange" |  | ||||||
|               start-placeholder="开始日期" end-placeholder="结束日期" value-format="yyyy-MM-dd HH:mm:ss" format="yyyy-MM-dd"></el-date-picker> |  | ||||||
|           </template> |  | ||||||
|           <template slot="right"> |  | ||||||
|             <el-input |  | ||||||
|               v-model="search.familyName" |  | ||||||
|               class="search-input" |  | ||||||
|               size="small" |  | ||||||
|               placeholder="对象、户主、事件类型" |  | ||||||
|               clearable |  | ||||||
|               v-throttle="() => {search.current = 1, getList()}" |  | ||||||
|               @clear="search.current = 1, getList()" |  | ||||||
|               suffix-icon="iconfont iconSearch" /> |  | ||||||
|           </template> |  | ||||||
|         </ai-search-bar> |  | ||||||
|         <ai-table |  | ||||||
|           :tableData="tableData" |  | ||||||
|           :col-configs="colConfigs" |  | ||||||
|           :total="total" |  | ||||||
|           ref="aitableex" |  | ||||||
|           :current.sync="search.current" |  | ||||||
|           :size.sync="search.size" |  | ||||||
|           @getList="getList"> |  | ||||||
|           <el-table-column slot="changeIntegral" label="积分" align= "center"> |  | ||||||
|             <template slot-scope="{ row }"> |  | ||||||
|               <span>{{row.changeIntegral > 0 ? '+' : ''}}{{row.changeIntegral}}</span> |  | ||||||
|             </template> |  | ||||||
|           </el-table-column> |  | ||||||
|           <el-table-column slot="doType" label="类型" align= "center"> |  | ||||||
|             <template slot-scope="{ row }"> |  | ||||||
|               <span>{{ dict.getLabel('integralDetailType', row.bizType) }}</span> |  | ||||||
|             </template> |  | ||||||
|           </el-table-column> |  | ||||||
|           <el-table-column slot="options" label="操作" align="center" fixed="right" width="120"> |  | ||||||
|             <template slot-scope="{ row }"> |  | ||||||
|               <el-button |  | ||||||
|                 type="text" |  | ||||||
|                 title="详情" |  | ||||||
|                 :disabled="!$permissions('app_appvillagerintegraldetail_detail')" |  | ||||||
|                 @click="viewItem(row)"> |  | ||||||
|                 详情 |  | ||||||
|               </el-button> |  | ||||||
|             </template> |  | ||||||
|           </el-table-column> |  | ||||||
|         </ai-table> |  | ||||||
|       </template> |  | ||||||
|     </ai-list> |  | ||||||
|     <ai-dialog |  | ||||||
|       title="详情" |  | ||||||
|       :visible.sync="dialog.visible" |  | ||||||
|       :customFooter="true" |  | ||||||
|       :destroyOnClose="true" |  | ||||||
|       width="720px" |  | ||||||
|     > |  | ||||||
|       <div class="form_content"> |  | ||||||
|         <div class="form_info"> |  | ||||||
|           <span class="form_label">户主:</span> |  | ||||||
|           <span class="form_value">{{dialogInfo.familyName}}</span> |  | ||||||
|         </div> |  | ||||||
|         <div class="form_info"> |  | ||||||
|           <span class="form_label">事项:</span> |  | ||||||
|           <span class="form_value">{{dialogInfo.ruleName}}</span> |  | ||||||
|         </div> |  | ||||||
|         <div class="form_flex form_info"> |  | ||||||
|           <div> |  | ||||||
|             <span class="form_label">积分:</span> |  | ||||||
|             <span class="form_value">{{dialogInfo.changeIntegral >= 0 ? '增加' : '减少'}}<span style="color:#2266FF">{{Math.abs(dialogInfo.changeIntegral)}}</span>分</span> |  | ||||||
|           </div> |  | ||||||
|         </div> |  | ||||||
|       </div> |  | ||||||
|       <div class="dialog-footer" slot="footer"> |  | ||||||
|         <el-button @click="dialog.visible=false" size="medium">关闭</el-button> |  | ||||||
|       </div> |  | ||||||
|     </ai-dialog> |  | ||||||
|   </section> |  | ||||||
| </template> |  | ||||||
|  |  | ||||||
| <script> |  | ||||||
| export default { |  | ||||||
|   name: "pointsDeclaration", |  | ||||||
|  |  | ||||||
|   props: { |  | ||||||
|     instance: Function, |  | ||||||
|     dict: Object, |  | ||||||
|     areaId:String |  | ||||||
|   }, |  | ||||||
|  |  | ||||||
|   data() { |  | ||||||
|     return { |  | ||||||
|       searchDotime: [], |  | ||||||
|       search: { |  | ||||||
|         current: 1, |  | ||||||
|         size: 10, |  | ||||||
|         familyName: '', |  | ||||||
|         doTimeStart: null, |  | ||||||
|         doTimeEnd: null |  | ||||||
|       }, |  | ||||||
|       total: 10, |  | ||||||
|       colConfigs: [ |  | ||||||
|         { prop: "residentName", label: "对象", width:160 }, |  | ||||||
|         { prop: "familyName", label: "户主", align: "center", width:160 }, |  | ||||||
|         { |  | ||||||
|           prop: "ruleName", |  | ||||||
|           label: "事件类型", |  | ||||||
|           "show-overflow-tooltip": true, |  | ||||||
|           width:420 |  | ||||||
|         }, |  | ||||||
|         { |  | ||||||
|           prop: "doTime", |  | ||||||
|           label: "时间", |  | ||||||
|           width:200 |  | ||||||
|         }, |  | ||||||
|         // { |  | ||||||
|         //   prop: "doType", |  | ||||||
|         //   label: "类型", |  | ||||||
|         //   align: "center", |  | ||||||
|         //   width: 100, |  | ||||||
|         //   render: (h, params) => { |  | ||||||
|         //     return h( |  | ||||||
|         //       "span", |  | ||||||
|         //       { |  | ||||||
|         //         class: "status-" + params.row.doType, |  | ||||||
|         //       }, |  | ||||||
|         //       this.$dict.getLabel("integralIntegralType", params.row.doType) |  | ||||||
|         //     ); |  | ||||||
|         //   }, |  | ||||||
|         // }, |  | ||||||
|         { slot: "doType", label: "类型", width: 100}, |  | ||||||
|         { slot: "changeIntegral", label: "积分", width: 100}, |  | ||||||
|         // { |  | ||||||
|         //   prop: "bizType", |  | ||||||
|         //   label: "途径", |  | ||||||
|         //   align: "center", |  | ||||||
|         //   width: 100, |  | ||||||
|         //   formart: (bizType) => |  | ||||||
|         //   this.$dict.getLabel("integralDetailBizType", bizType) || '-', |  | ||||||
|         // }, |  | ||||||
|         { slot: "options", label: "操作", align: "center" }, |  | ||||||
|       ], |  | ||||||
|       tableData: [], |  | ||||||
|       dialog: { |  | ||||||
|         visible: false, |  | ||||||
|       }, |  | ||||||
|       dialogInfo: {}, |  | ||||||
|     }; |  | ||||||
|   }, |  | ||||||
|  |  | ||||||
|   mounted() { |  | ||||||
|     this.$dict |  | ||||||
|       .load([ |  | ||||||
|         "integralDeclareDoType", |  | ||||||
|         "integralDetailType", |  | ||||||
|       ]) |  | ||||||
|       .then(() => { |  | ||||||
|         this.getList(); |  | ||||||
|       }); |  | ||||||
|   }, |  | ||||||
|  |  | ||||||
|   methods: { |  | ||||||
|     getList() { |  | ||||||
|       this.instance |  | ||||||
|         .post(`/app/appvillagerintegraldetail/list`, null, { |  | ||||||
|           params: { |  | ||||||
|             ...this.search, |  | ||||||
|             areaId: this.areaId, |  | ||||||
|           }, |  | ||||||
|         }) |  | ||||||
|         .then((res) => { |  | ||||||
|           if (res.code == 0) { |  | ||||||
|             this.tableData = res.data.records; |  | ||||||
|             this.total = res.data.total; |  | ||||||
|           } |  | ||||||
|         }); |  | ||||||
|     }, |  | ||||||
|  |  | ||||||
|     timeChange() { |  | ||||||
|       if(this.searchDotime) { |  | ||||||
|         this.search.doTimeStart =  this.searchDotime[0] |  | ||||||
|         this.search.doTimeEnd = this.searchDotime[1] |  | ||||||
|       }else { |  | ||||||
|         this.search.doTimeStart =  null |  | ||||||
|         this.search.doTimeEnd = null |  | ||||||
|       } |  | ||||||
|       this.search.current = 1 |  | ||||||
|       this.getList() |  | ||||||
|     }, |  | ||||||
|  |  | ||||||
|     viewItem(row) { |  | ||||||
|       this.dialog.visible = true |  | ||||||
|       this.instance.post(`/app/appvillagerintegraldetail/queryDetailById?id=${row.id}`, null, {}).then((res) => { |  | ||||||
|           if (res.code == 0) { |  | ||||||
|             this.dialogInfo = res.data |  | ||||||
|             console.log(this.dialogInfo) |  | ||||||
|           } |  | ||||||
|         }); |  | ||||||
|     }, |  | ||||||
|  |  | ||||||
|     onReset() { |  | ||||||
|       this.search.current = 1 |  | ||||||
|       this.search.doTimeStart =  null |  | ||||||
|       this.search.doTimeEnd = null |  | ||||||
|       this.search.familyName = '' |  | ||||||
|       this.searchDotime = [] |  | ||||||
|       this.getList(); |  | ||||||
|     }, |  | ||||||
|   }, |  | ||||||
| }; |  | ||||||
| </script> |  | ||||||
|  |  | ||||||
| <style lang="scss"> |  | ||||||
| .pointsDetails { |  | ||||||
|   height: 100%; |  | ||||||
|   background: #f3f6f9; |  | ||||||
|   overflow: auto; |  | ||||||
|   .form_content { |  | ||||||
|     .form_flex { |  | ||||||
|       display: flex; |  | ||||||
|       div { |  | ||||||
|         flex: 1; |  | ||||||
|       } |  | ||||||
|     } |  | ||||||
|     .form_info { |  | ||||||
|       margin-bottom: 8px; |  | ||||||
|     } |  | ||||||
|     .form_label { |  | ||||||
|       display: inline-block; |  | ||||||
|       color: #999; |  | ||||||
|       vertical-align: top; |  | ||||||
|       width: 70px; |  | ||||||
|       text-align: right; |  | ||||||
|     } |  | ||||||
|     .form_value { |  | ||||||
|       display: inline-block; |  | ||||||
|       color: #333; |  | ||||||
|       width: calc(100% - 70px); |  | ||||||
|       // img { |  | ||||||
|       //   width: 100px; |  | ||||||
|       //   height: 100px; |  | ||||||
|       //   margin: 0 8px 8px 0; |  | ||||||
|       // } |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
|   .form_div { |  | ||||||
|     padding-top: 24px; |  | ||||||
|     border-top: 1px solid #eee; |  | ||||||
|   } |  | ||||||
|   .status-0 { |  | ||||||
|     color: #FF4466; |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   .status-1 { |  | ||||||
|     color: #2EA222; |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   .status-2 { |  | ||||||
|     color: #999999; |  | ||||||
|   } |  | ||||||
| } |  | ||||||
| </style> |  | ||||||
		Reference in New Issue
	
	Block a user