Merge remote-tracking branch 'origin/dev' into build
This commit is contained in:
		| @@ -25,8 +25,8 @@ | ||||
|         </div> | ||||
|       </div> | ||||
|       <div class="bar_Box"> | ||||
|         <div id="chartDom" style="height: 230px; width: 100%;"></div> | ||||
|         <ai-empty v-if="false" style="height: 200px; width: 100%;"></ai-empty> | ||||
|         <div id="chartDom" style="height: 230px; width: 100%;" v-show="xData.length && yData.length"></div> | ||||
|         <ai-empty style="height: 200px; width: 100%;" v-show="!xData.length && !yData.length"></ai-empty> | ||||
|       </div> | ||||
|     </el-row> | ||||
|     <ai-card> | ||||
| @@ -45,7 +45,7 @@ | ||||
|           </template> | ||||
|         </ai-search-bar> | ||||
|         <ai-table :tableData="tableData" :total="search.total" :current.sync="search.current" :size.sync="search.size" | ||||
|                   @getList="getTableData" :col-configs="colConfigs" :dict="dict"> | ||||
|                   @getList="getIntegralChange" :col-configs="colConfigs" :dict="dict"> | ||||
|  | ||||
|           <el-table-column slot="eventDesc" label="事件" align="center"> | ||||
|             <template slot-scope="{ row }"> | ||||
| @@ -79,6 +79,8 @@ export default { | ||||
|       data: {}, | ||||
|       startTime: '', | ||||
|       endTime: '', | ||||
|       xData: [], | ||||
|       yData: [], | ||||
|     } | ||||
|   }, | ||||
|   props: { | ||||
| @@ -104,6 +106,7 @@ export default { | ||||
|     this.$dict.load('integralType') | ||||
|     this.getDetail() | ||||
|     this.getIntegralChange() | ||||
|     this.getEventSummary() | ||||
|   }, | ||||
|   methods: { | ||||
|     // 详情 | ||||
| @@ -120,7 +123,21 @@ export default { | ||||
|     }, | ||||
|  | ||||
|     // 事件汇总 暂定 | ||||
|  | ||||
|     getEventSummary() { | ||||
|       this.instance.post(`/app/appintegraluser/eventSummary`,null,{ | ||||
|         params: { | ||||
|           id: this.$route.query.id, | ||||
|           startTime: this.startTime, | ||||
|           endTime: this.endTime,  | ||||
|         } | ||||
|       }).then(res=>{ | ||||
|         if(res?.data) { | ||||
|           this.xData = res.data.map(x=> x.eventName) | ||||
|           this.yData = res.data.map(y=> y.totalIntegral) | ||||
|           this.getColEcherts(this.xData, this.yData) | ||||
|         } | ||||
|       }) | ||||
|     }, | ||||
|  | ||||
|     // 余额变动明细 | ||||
|     getIntegralChange() { | ||||
| @@ -143,7 +160,7 @@ export default { | ||||
|       } | ||||
|     }, | ||||
|  | ||||
|     getColEcherts() { | ||||
|     getColEcherts(xData, yData) { | ||||
|       let chartDom = document.getElementById('chartDom'); | ||||
|       chartDom.style.width = window.innerWidth - 335 + "px"; | ||||
|       this.myChart = echarts.init(chartDom); | ||||
| @@ -164,14 +181,14 @@ export default { | ||||
|         }, | ||||
|         xAxis: { | ||||
|           type: 'category', | ||||
|           data: ['每日签到', '事件上报', '特殊人员跟进', '群发任务', '邀请居民进群'] | ||||
|           data: xData, | ||||
|         }, | ||||
|         yAxis: { | ||||
|           type: 'value' | ||||
|         }, | ||||
|         series: [ | ||||
|           { | ||||
|             data: [120, 200, 150, 80, 70,], | ||||
|             data: yData, | ||||
|             type: 'bar', | ||||
|             showBackground: true, | ||||
|             backgroundStyle: { | ||||
|   | ||||
| @@ -7,10 +7,8 @@ | ||||
|         <ai-search-bar> | ||||
|           <template #left> | ||||
|             <el-button type="primary" icon="iconfont iconAdd" @click="dialog=true">添加</el-button> | ||||
|           </template> | ||||
|           <template slot="right"> | ||||
|             <el-cascader size="small" v-model="search.eventType" placeholder="请选择事件/类型" clearable | ||||
|                          :props="{...etOps,checkStrictly:true}" @change="handleTypeSearch" ref="eventTypeSearch" /> | ||||
|             <el-cascader size="small" v-model="search.eventType" :options="rulesOps" placeholder="请选择事件/类型" clearable | ||||
|                          :props="rulesProps" @change="handleTypeSearch" ref="eventTypeSearch" /> | ||||
|             <ai-select | ||||
|                 v-model="search.status" | ||||
|                 @change="page.current = 1, getList()" | ||||
| @@ -52,14 +50,23 @@ | ||||
|       </template> | ||||
|     </ai-list> | ||||
|     <!-- <ai-empty v-else>暂无应用权限</ai-empty> --> | ||||
|     <ai-dialog :title="dialogTitle" :visible.sync="dialog" @onConfirm="onConfirm" @closed="form={ladderRule: []}" width="700px"> | ||||
|     <ai-dialog :title="dialogTitle" :visible.sync="dialog" @onConfirm="onConfirm" @closed="form={ladderRule: []}" width="900px" > | ||||
|       <div class="form_div"> | ||||
|         <el-form ref="DialogForm" :model="form" :rules="formRules" size="small" label-suffix=":" label-width="100px"> | ||||
|           <el-form-item label="事件/类型" prop="eventType"> | ||||
|             <el-cascader v-model="form.eventType" :props="etOps" clearable placeholder="请选择" @change="handleTypeForm" | ||||
|                          :options="cacheOps"/> | ||||
|         <el-form ref="DialogForm" :model="form" :rules="formRules" size="small" label-suffix=":" label-width="150px"> | ||||
|           <el-form-item label="事件类型" prop="systemRuleId"> | ||||
|             <el-cascader v-model="form.systemRuleId" :props="etOps" clearable placeholder="请选择" @change="handleTypeForm" | ||||
|                          :options="rulesOps"/> | ||||
|           </el-form-item> | ||||
|           <el-form-item label="规则" prop="ruleType" v-if="form.ruleType>-1" required> | ||||
|  | ||||
|           <el-form-item label="自定义事件"> | ||||
|             <el-input placeholder="请输入,周期范围内,不填写表示不限制" v-model="form.ruleName" clearable/> | ||||
|           </el-form-item> | ||||
|  | ||||
|           <el-form-item label="规则"> | ||||
|             <div>常规</div> | ||||
|           </el-form-item> | ||||
|  | ||||
|           <!-- <el-form-item label="规则" prop="ruleType" v-if="form.ruleType>-1" required> | ||||
|             <el-row type="flex" justify="space-between"> | ||||
|               <div v-text="$dict.getLabel('integralRuleRuleType',form.ruleType)"/> | ||||
|               <el-button v-if="form.ruleType==1" type="text" icon="iconfont iconAdd" | ||||
| @@ -84,20 +91,52 @@ | ||||
|                 </template> | ||||
|               </el-table-column> | ||||
|             </el-table> | ||||
|           </el-form-item> | ||||
|           </el-form-item> --> | ||||
|  | ||||
|           <el-form-item label="周期范围" prop="scoringCycle"> | ||||
|             <ai-select v-model="form.scoringCycle" :selectList="$dict.getDict('integralRuleScoringCycle')"/> | ||||
|           </el-form-item> | ||||
|           <template v-if="form.ruleType==0"> | ||||
|             <el-form-item label="奖励次数" prop="numberLimit"> | ||||
|               <el-input placeholder="请输入,周期范围内,不填写表示不限制" v-model.number="form.numberLimit" clearable/> | ||||
|             </el-form-item> | ||||
|             <el-form-item label="积分分值" prop="integral"> | ||||
|               <el-input placeholder="请输入" v-model="form.integral" clearable/> | ||||
|             </el-form-item> | ||||
|           </template> | ||||
|  | ||||
|           <el-form-item label="奖励次数"> | ||||
|             <el-input placeholder="请输入,周期范围内,不填写表示不限制" v-model.number="form.numberLimit" clearable/> | ||||
|           </el-form-item> | ||||
|  | ||||
|           <el-form-item label="积分分值" prop="integral"> | ||||
|             <el-input placeholder="请输入" v-model="form.integral" clearable/> | ||||
|           </el-form-item> | ||||
|  | ||||
|           <el-form-item label="有效范围" prop="validRangeType" required> | ||||
|             <el-radio-group v-model="form.validRangeType"> | ||||
|               <el-radio label="0">全局</el-radio> | ||||
|               <el-radio label="1">指定网格</el-radio> | ||||
|             </el-radio-group> | ||||
|           </el-form-item> | ||||
|  | ||||
|           <!-- <el-form-item label="生效网格" prop="ruleType" required> | ||||
|             <el-button type="text" @click="showGrid = true,beforeSelectTree()">请选择</el-button> | ||||
|           </el-form-item> --> | ||||
|  | ||||
|         </el-form> | ||||
|       </div> | ||||
|       <ai-dialog title="选择网格" :visible.sync="showGrid" :customFooter="true" :destroyOnClose="true" border width="720px" append-to-body> | ||||
|           <div class="grid"> | ||||
|             <el-tree | ||||
|                 :data="treeObj.treeList" | ||||
|                 :props="treeObj.defaultProps" | ||||
|                 node-key="id" | ||||
|                 ref="tree" | ||||
|                 :check-strictly="true" | ||||
|                 show-checkbox | ||||
|                 default-expand-all | ||||
|                 :default-checked-keys="currCheckedKeys" | ||||
|                 @check="onCheckChange"> | ||||
|             </el-tree> | ||||
|           </div> | ||||
|           <div class="dialog-footer" slot="footer"> | ||||
|             <el-button size="medium" @click="showGrid=false">取消</el-button> | ||||
|             <el-button type="primary" size="medium" @click="getCheckedTree()">确认</el-button> | ||||
|           </div> | ||||
|         </ai-dialog> | ||||
|     </ai-dialog> | ||||
|   </section> | ||||
| </template> | ||||
| @@ -127,19 +166,47 @@ export default { | ||||
|       ], | ||||
|       tableData: [], | ||||
|       dialog: false, | ||||
|       form: {ladderRule: []}, | ||||
|       formRules: { | ||||
|         eventType: [{required: true, message: "请选择事件/类型", trigger: "change"}], | ||||
|         scoringCycle: [{required: true, message: "请选择周期范围", trigger: "change"}], | ||||
|         integral: [{required: true, pattern: /^\d*[.\d]\d?$/, message: "请输入积分分值,最多保留一位小数"}], | ||||
|         numberLimit: [{pattern: /^\d*$/, message: "请输入正整数"}] | ||||
|       form: { | ||||
|         systemRuleId: '', | ||||
|         ruleName: '', | ||||
|         scoringCycle: '', | ||||
|         numberLimit: '', | ||||
|         integral: '', | ||||
|         validRangeType: '0', | ||||
|         validRangeData: '' | ||||
|       }, | ||||
|       cacheOps: [] | ||||
|       formRules: { | ||||
|         systemRuleId: [{required: true, message: "请选择事件/类型", trigger: "change"}], | ||||
|         scoringCycle: [{required: true, message: "请选择周期范围", trigger: "change"}], | ||||
|         // numberLimit: [{pattern: /^\d*$/, message: "请输入正整数"}], | ||||
|         integral: [{required: true, pattern: /^\d*[.\d]\d?$/, message: "请输入积分分值,最多保留一位小数"}], | ||||
|         validRangeType: [{required: true, message: "请选择事件有效范围", trigger: "change"}], | ||||
|       }, | ||||
|       rulesOps: [], | ||||
|       rulesProps: { | ||||
|         label: "ruleName", | ||||
|         value: "id", | ||||
|         checkStrictly:true, | ||||
|       }, | ||||
|       radio: 0, | ||||
|       showGrid: false, | ||||
|       treeObj: { | ||||
|         treeList: [], | ||||
|         defaultProps: { | ||||
|           label: "girdName", | ||||
|           value: "id", | ||||
|         }, | ||||
|         checkedKeys: [], | ||||
|       }, | ||||
|       girdInfoList: [], | ||||
|       currCheckedKeys: [] | ||||
|     }; | ||||
|   }, | ||||
|   created() { | ||||
|     this.$dict.load("integralRuleStatus", "integralRuleRuleType", 'integralRuleScoringCycle', 'integralRuleEvent', 'integralRuleEventType').then(() => { | ||||
|       this.getList(); | ||||
|       this.getList() | ||||
|       this.getRulesList() | ||||
|       this.beforeSelectTree() | ||||
|     }); | ||||
|   }, | ||||
|   methods: { | ||||
| @@ -231,9 +298,11 @@ export default { | ||||
|     }, | ||||
|     handleTypeForm(v) { | ||||
|       if (this.dialog) { | ||||
|         this.form.event = v?.[0] | ||||
|         this.form.type = v?.[1] | ||||
|         this.form.ruleType = !this.form.event ? null : this.form.event == 3 ? 1 : 0 | ||||
|         console.log(v); | ||||
|         // this.form.event = v?.[0] | ||||
|         this.form.systemRuleId = v?.[v.length - 1] | ||||
|         console.log(this.form.systemRuleId); | ||||
|         // this.form.ruleType = !this.form.event ? null : this.form.event == 3 ? 1 : 0 | ||||
|       } | ||||
|     }, | ||||
|     handleDelete(i) { | ||||
| @@ -243,7 +312,86 @@ export default { | ||||
|     }, | ||||
|     checkIntegral(v) { | ||||
|       return /\.\d{2,}$/.test(v) ? Math.abs(v).toFixed(1) : Math.abs(v) | ||||
|     } | ||||
|     }, | ||||
|     getRulesList() { | ||||
|       this.instance.post(`/app/appintegralsystemrule/list?current=1&sizes=3000`).then(res=> { | ||||
|         if(res?.data) { | ||||
|           this.rulesOps = this.toTree(res.data.records) | ||||
|         } | ||||
|       }) | ||||
|     }, | ||||
|     // 转树形结构 | ||||
|     toTree(data) { | ||||
|       let result = []; | ||||
|       if (!Array.isArray(data)) { | ||||
|         return result | ||||
|       } | ||||
|       let map = {}; | ||||
|       data.forEach(item => { | ||||
|         map[item.id] = item; | ||||
|       }); | ||||
|       data.forEach(item => { | ||||
|         let parent = map[item.parentRuleId]; | ||||
|         if (parent) { | ||||
|           (parent.children || (parent.children = [])).push(item); | ||||
|         } else { | ||||
|           result.push(item); | ||||
|         } | ||||
|       }); | ||||
|       return result; | ||||
|     }, | ||||
|  | ||||
|     girdToTree(data) { | ||||
|       let result = []; | ||||
|       if (!Array.isArray(data)) { | ||||
|         return result | ||||
|       } | ||||
|       let map = {}; | ||||
|       data.forEach(item => { | ||||
|         map[item.id] = item; | ||||
|       }); | ||||
|       data.forEach(item => { | ||||
|         let parent = map[item.parentGirdId]; | ||||
|         if (parent) { | ||||
|           (parent.children || (parent.children = [])).push(item); | ||||
|         } else { | ||||
|           result.push(item); | ||||
|         } | ||||
|       }); | ||||
|       return result; | ||||
|     }, | ||||
|  | ||||
|     getCheckedTree() { | ||||
|       if (!this.$refs.tree.getCheckedNodes().length) { | ||||
|         return this.$message.error('请选择网格') | ||||
|       } | ||||
|  | ||||
|       this.$set(this.girdInfoList, this.currIndex, { | ||||
|         ...this.$refs.tree.getCheckedNodes(), | ||||
|         checkType: true | ||||
|       }) | ||||
|  | ||||
|       // this.girdInfoList = this.$refs.tree.getCheckedNodes() | ||||
|  | ||||
|       this.showGrid = false; | ||||
|     }, | ||||
|      | ||||
|     beforeSelectTree() { | ||||
|       this.treeObj.checkedKeys = []; | ||||
|       this.instance.post(`/app/appgirdinfo/listAll3`, null, null).then((res) => { | ||||
|         if (res.code == 0) { | ||||
|           this.treeObj.treeList = this.girdToTree(res.data) | ||||
|           this.girdInfoList.map((e) => { | ||||
|             this.treeObj.checkedKeys.push(e.id); | ||||
|           }); | ||||
|         } | ||||
|       }); | ||||
|     }, | ||||
|      | ||||
|     onCheckChange(e) { | ||||
|       this.$refs.tree.setChecked(e.id, true) | ||||
|     }, | ||||
|  | ||||
|   }, | ||||
|   computed: { | ||||
|     isEdit() { | ||||
| @@ -254,21 +402,16 @@ export default { | ||||
|     }, | ||||
|     etOps() { | ||||
|       return { | ||||
|         lazy: true, | ||||
|         value: "dictValue", | ||||
|         label: "dictName", | ||||
|         lazyLoad: (node, resolve) => { | ||||
|           if (node.level == 0) resolve(this.$dict.getDict('integralRuleEvent')) | ||||
|           else if (node.level == 1) { | ||||
|             let dict = 'integralRuleEvent' + node.value | ||||
|             this.$dict.load(dict).then(() => { | ||||
|               let nodes = this.$dict.getDict(dict).map(e => ({...e, leaf: true})) | ||||
|               resolve(nodes) | ||||
|             }) | ||||
|           } | ||||
|         } | ||||
|         value: "id", | ||||
|         label: "ruleName", | ||||
|       } | ||||
|     }, | ||||
|     // currCheckedKeys() { | ||||
|     //   if (this.girdInfoList && this.girdInfoList[this.currIndex] && this.girdInfoList[this.currIndex].id) { | ||||
|     //     return [this.girdInfoList[this.currIndex].id] | ||||
|     //   } | ||||
|     //   return [] | ||||
|     // }, | ||||
|   }, | ||||
|    | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user