Merge remote-tracking branch 'origin/build' into build
This commit is contained in:
		| @@ -91,7 +91,6 @@ | ||||
|               </el-form-item> | ||||
|               <el-form-item label="门店住址:" style="width: 100%;" prop="areaId"> | ||||
|                 <ai-area-select :instance="instance" clearable always-show | ||||
|                                 :disabled-level="$store.state.user.info.areaList.length" | ||||
|                                 @name="v=>form.areaName=v" v-model="form.areaId"/> | ||||
|               </el-form-item> | ||||
|               <el-form-item label="" style="width:100%" prop="address"> | ||||
| @@ -191,20 +190,21 @@ export default { | ||||
|           } else { | ||||
|             callback(new Error("身份证号格式错误")); | ||||
|           } | ||||
|         } else { | ||||
|           callback(new Error("请输入身份证号")); | ||||
|         } | ||||
|         // else { | ||||
|         //   callback(new Error("请输入身份证号")); | ||||
|         // } | ||||
|       }; | ||||
|       return { | ||||
|         name: [{required: true, message: '请输入经营者姓名', trigger: 'blur'}], | ||||
|         idNumber: [{required: true, validator: IdNumberPass, trigger: 'change'}], | ||||
|         sex: [{required: true, message: '请选择性别', trigger: 'change'}], | ||||
|         idNumber: [{required: false, validator: IdNumberPass, trigger: 'change'}], | ||||
|         sex: [{required: false, message: '请选择性别', trigger: 'change'}], | ||||
|         phone: [{required: true, message: '请输入手机号', trigger: 'blur'}], | ||||
|         shopName: [{required: true, message: '请输入门店名称', trigger: 'blur'}], | ||||
|         operatorType: [{required: true, message: '请选择经营者类型', trigger: 'change'}], | ||||
|         girdCode: [{required: true, message: '请选择所属片区', trigger: 'change'}], | ||||
|         fileUrl: [{required: true, message: '请选择门店照片', trigger: 'change'}], | ||||
|         areaId: [{required: true, message: '请选择门店住址', trigger: 'change'}], | ||||
|         fileUrl: [{required: false, message: '请选择门店照片', trigger: 'change'}], | ||||
|         areaId: [{required: false, message: '请选择门店住址', trigger: 'change'}], | ||||
|       } | ||||
|     } | ||||
|   }, | ||||
|   | ||||
| @@ -68,12 +68,12 @@ | ||||
|             <el-button icon="iconfont iconDelete" :disabled="!ids.length" @click="handleDelBatch">删除</el-button> | ||||
|           </template> | ||||
|           <template #right> | ||||
|             <ai-import :instance="instance"  url="" | ||||
|                        importUrl="" name="门店档案" title="门店档案" | ||||
|             <ai-import :instance="instance"  url="/app/appshoparchives/downloadTemplate" | ||||
|                        importUrl="/app/appshoparchives/import" name="门店档案" title="门店档案" | ||||
|                        @success="getList()"> | ||||
|               <el-button icon="iconfont iconImport">导入</el-button> | ||||
|             </ai-import> | ||||
|             <ai-download :instance="instance" url="" :params="search" | ||||
|             <ai-download :instance="instance" url="/app/appshoparchives/export" :params="search" | ||||
|                          fileName="门店档案" | ||||
|                          :disabled="tableData.length == 0"> | ||||
|             </ai-download> | ||||
| @@ -94,6 +94,7 @@ | ||||
|               align="left"> | ||||
|             <template v-slot="{ row }"> | ||||
|               <img class="preview-img" v-if="row.fileUrl" :src="row.fileUrl" alt="" v-viewer> | ||||
|               <img class="preview-img" v-else src="../img/shop.png" alt="" v-viewer> | ||||
|             </template> | ||||
|           </el-table-column> | ||||
|  | ||||
| @@ -387,10 +388,6 @@ export default { | ||||
|  | ||||
| <style lang="scss" scoped> | ||||
| .app-archives-list { | ||||
|   .qr-img { | ||||
|     width: 100%; | ||||
|     height: 100%; | ||||
|   } | ||||
|  | ||||
|   .preview-img{ | ||||
|     width: 120px; | ||||
| @@ -404,5 +401,10 @@ export default { | ||||
|   display: flex; | ||||
|   align-items: center; | ||||
|   justify-content: center; | ||||
|  | ||||
|   .qr-img { | ||||
|     width: 450px; | ||||
|     height: 450px; | ||||
|   } | ||||
| } | ||||
| </style> | ||||
|   | ||||
							
								
								
									
										
											BIN
										
									
								
								project/fengdu/AppOutSource/AppArchives/img/shop.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								project/fengdu/AppOutSource/AppArchives/img/shop.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 21 KiB | 
| @@ -15,10 +15,10 @@ | ||||
|             <ai-info-item label="评价人电话" :value="info.evaluatorPhone"></ai-info-item> | ||||
|             <ai-info-item label="评价时间" :value="info.evaluationTime"></ai-info-item> | ||||
|             <ai-info-item label="评价人类型" :value="$dict.getLabel('evaluatorType',info.evaluatorType)"></ai-info-item> | ||||
|             <ai-info-item label="评价类型" isLine :value="info.assessType"></ai-info-item> | ||||
|             <ai-info-item label="评价类型" isLine :value="$dict.getLabel('evaluationType',info.assessType)"></ai-info-item> | ||||
|             <ai-info-item label="评语" isLine :value="info.remark"></ai-info-item> | ||||
|             <ai-info-item label="现场图片" isLine> | ||||
|               <div class="files"> | ||||
|               <div class="files" v-if="info.pictureUrl"> | ||||
|                 <ai-uploader | ||||
|                     :instance="instance" | ||||
|                     fileType="img" | ||||
| @@ -85,9 +85,8 @@ export default { | ||||
|   }, | ||||
|  | ||||
|   created() { | ||||
|     this.$dict.load('evaluatorType').then(() => { | ||||
|     this.$dict.load('evaluatorType','evaluationType').then(() => { | ||||
|       this.getDetail() | ||||
|       this.getList() | ||||
|     }) | ||||
|   }, | ||||
|  | ||||
| @@ -97,7 +96,8 @@ export default { | ||||
|         const {code, data: {records}} = await this.instance.post('/app/appscoredetails/list', null, { | ||||
|           params: { | ||||
|             shopId: this.params.shopId, | ||||
|             pages: 1000 | ||||
|             openId:this.info.openId, | ||||
|             size: 1000 | ||||
|           } | ||||
|         }) | ||||
|         if (code === 0 && records) { | ||||
| @@ -113,7 +113,7 @@ export default { | ||||
|       try { | ||||
|         const {code, data} = await this.instance.post('/app/appshopassess/queryDetailById', null, { | ||||
|           params: { | ||||
|             id: this.params.id | ||||
|             id: this.params.id, | ||||
|           } | ||||
|         }) | ||||
|         if (code === 0) { | ||||
| @@ -123,6 +123,7 @@ export default { | ||||
|               url: item | ||||
|             } | ||||
|           }) | ||||
|           await this.getList() | ||||
|         } | ||||
|       } catch (e) { | ||||
|         console.error(e) | ||||
|   | ||||
| @@ -31,16 +31,16 @@ | ||||
|             </el-date-picker> | ||||
|           </ai-search> | ||||
|           <ai-select | ||||
|               v-model="search.status" | ||||
|               v-model="search.scoreInterval" | ||||
|               @change="(search.current = 1), getList()" | ||||
|               placeholder="分数区间" | ||||
|               :selectList="$dict.getDict('appIntegralApplyEventStatus')"> | ||||
|               :selectList="$dict.getDict('scoreInterval')"> | ||||
|           </ai-select> | ||||
|           <ai-select | ||||
|               v-model="search.status" | ||||
|               v-model="search.assessType" | ||||
|               @change="(search.current = 1), getList()" | ||||
|               placeholder="评价类型" | ||||
|               :selectList="$dict.getDict('appIntegralApplyEventStatus')"> | ||||
|               :selectList="$dict.getDict('evaluationType')"> | ||||
|           </ai-select> | ||||
|         </template> | ||||
|         <template #right> | ||||
| @@ -61,7 +61,7 @@ | ||||
|           <el-button icon="iconfont iconDelete" @click="handleDeleteBach" :disabled="!ids.length">删除</el-button> | ||||
|         </template> | ||||
|         <template #right> | ||||
|           <ai-download :instance="instance" url="/app/appintegraluser/girdIntegralExport" :params="search" fileName="门店评价" | ||||
|           <ai-download :instance="instance" url="/app/appshopassess/export" :params="search" fileName="门店评价" | ||||
|                        :disabled="tableData.length == 0"> | ||||
|           </ai-download> | ||||
|         </template> | ||||
| @@ -113,12 +113,15 @@ export default { | ||||
|         { prop: 'shopName',  label: '门店名称', align: 'center' }, | ||||
|         { prop: 'evaluator',  label: '评价人', align: 'center' }, | ||||
|         { prop: 'evaluationTime',  label: '评价时间', align: 'center' }, | ||||
|         { prop: 'phone',  label: '联系电话', align: 'center' }, | ||||
|         { prop: 'evaluatorPhone',  label: '联系电话', align: 'center' }, | ||||
|         { prop: 'evaluatorType',  label: '评价人类型', align: 'center',render: (h, {row}) => { | ||||
|             return h('span', { | ||||
|             }, this.dict.getLabel('evaluatorType', row.evaluatorType)) | ||||
|           }}, | ||||
|         { prop: 'assessType',  label: '评价类型', align: 'center' }, | ||||
|         { prop: 'assessType',  label: '评价类型', align: 'center',render: (h, {row}) => { | ||||
|             return h('span', { | ||||
|             }, this.dict.getLabel('evaluationType', row.assessType)) | ||||
|           } }, | ||||
|         { prop: 'address',  label: '门店地址', align: 'center' }, | ||||
|         { prop: 'score',  label: '分数', align: 'center' }, | ||||
|       ], | ||||
| @@ -128,7 +131,7 @@ export default { | ||||
|   }, | ||||
|  | ||||
|   created () { | ||||
|     this.$dict.load('evaluatorType').then(() => { | ||||
|     this.$dict.load('evaluatorType','evaluationType','scoreInterval').then(() => { | ||||
|       this.getList() | ||||
|     }) | ||||
|   }, | ||||
|   | ||||
| @@ -33,7 +33,8 @@ | ||||
|           </div> | ||||
|           <div class="right-row flex-col"> | ||||
|             <ai-title title="网格五星门店数量排名"></ai-title> | ||||
|             <div class="bar-chart" ref="chartRef"></div> | ||||
|             <div class="bar-chart" v-show="chartList && chartList.length > 0" ref="chartRef"></div> | ||||
|             <div v-show="chartList && chartList.length === 0" class="no-data" style="width:386px;height:160px;"/> | ||||
|           </div> | ||||
|         </div> | ||||
|         <ai-title title="统计列表"></ai-title> | ||||
| @@ -41,13 +42,13 @@ | ||||
|           <template #left> | ||||
|             <ai-select | ||||
|                 v-model="form.operatorType" | ||||
|                 @change="(form.current = 1), getList1()" | ||||
|                 @change="(form.current = 1), getList2()" | ||||
|                 placeholder="经营类型" | ||||
|                 :selectList="$dict.getDict('operatorType')"> | ||||
|             </ai-select> | ||||
|             <ai-select | ||||
|                 v-model="form.girdCode" | ||||
|                 @change="(form.current = 1), getList1()" | ||||
|                 @change="(form.current = 1), getList2()" | ||||
|                 placeholder="所属网格" | ||||
|                 :selectList="gridList"> | ||||
|             </ai-select> | ||||
| @@ -56,27 +57,28 @@ | ||||
|             <el-input | ||||
|                 v-model="form.shopName" | ||||
|                 size="small" | ||||
|                 v-throttle="() => {form.current = 1, getList1()}" | ||||
|                 v-throttle="() => {form.current = 1, getList2()}" | ||||
|                 placeholder="请输入门店名称" | ||||
|                 clearable | ||||
|                 @clear="form.current = 1, form.shopName = '', getList1()" | ||||
|                 @clear="form.current = 1, form.shopName = '', getList2()" | ||||
|                 suffix-icon="iconfont iconSearch"> | ||||
|             </el-input> | ||||
|           </template> | ||||
|         </ai-search-bar> | ||||
|         <ai-table | ||||
|             :tableData="colConfigs1" | ||||
|             :tableData="tableData1" | ||||
|             :col-configs="colConfigs1" | ||||
|             :total="total" | ||||
|             :current.sync="search.current" | ||||
|             :size.sync="search.size" | ||||
|             @getList="getList"> | ||||
|             :current.sync="form.current" | ||||
|             :size.sync="form.size" | ||||
|             @getList="getList2"> | ||||
|           <el-table-column | ||||
|               label="门店照片" | ||||
|               slot="pic" | ||||
|               align="left"> | ||||
|             <template v-slot="{ row }"> | ||||
|               <img :src="row.fileUrl" alt="" v-viewer> | ||||
|               <img class="shop-img" :src="row.fileUrl" v-if="row.fileUrl" alt="" v-viewer> | ||||
|               <img class="shop-img" src="./img/shop.png" v-else alt="" v-viewer> | ||||
|             </template> | ||||
|           </el-table-column> | ||||
|  | ||||
| @@ -107,7 +109,7 @@ export default { | ||||
|       data: {}, | ||||
|       form: { | ||||
|         current:1, | ||||
|         pages:10, | ||||
|         size:10, | ||||
|         operatorType:'', | ||||
|         girdCode:'', | ||||
|         shopName:'', | ||||
| @@ -116,7 +118,8 @@ export default { | ||||
|         girdCode:'', | ||||
|         fiveStartTime:new Date().getMonth().toString(), | ||||
|         storeLevel:'5', | ||||
|         pages:1000 | ||||
|         current:1, | ||||
|         size:1000 | ||||
|       }, | ||||
|       cardList: [ | ||||
|         { | ||||
| @@ -170,6 +173,7 @@ export default { | ||||
|       this.girdList() | ||||
|       this.queryShopDetail() | ||||
|       this.getList() | ||||
|       this.getList2() | ||||
|       this.countByFiveStars() | ||||
|     }) | ||||
|   }, | ||||
| @@ -178,11 +182,14 @@ export default { | ||||
|     async countByFiveStars(){ | ||||
|       try { | ||||
|         const {code, data:{records}} = await this.instance.post('/app/appShopStatistics/countByFiveStars',null,{ | ||||
|           pages:1000 | ||||
|           current:1, | ||||
|           size:1000 | ||||
|         }) | ||||
|         if (code === 0) { | ||||
|           this.chartList = records?.reverse() || [] | ||||
|           this.initChart() | ||||
|           this.$nextTick(()=>{ | ||||
|             this.initChart() | ||||
|           }) | ||||
|         } | ||||
|       } catch (e) { | ||||
|         console.log(e) | ||||
| @@ -192,7 +199,7 @@ export default { | ||||
|     async girdList() { | ||||
|       try { | ||||
|         const {code, data:{records}} = await this.instance.post('/app/appShopStatistics/girdList',null,{ | ||||
|           pages:1000 | ||||
|           size:1000 | ||||
|         }) | ||||
|         if (code === 0) { | ||||
|           this.gridList = records?.map(item=>{ | ||||
| @@ -409,5 +416,10 @@ export default { | ||||
|     width: 100%; | ||||
|     flex: 1; | ||||
|   } | ||||
|  | ||||
|   .shop-img{ | ||||
|     width: 120px; | ||||
|     height: 120px; | ||||
|   } | ||||
| } | ||||
| </style> | ||||
|   | ||||
							
								
								
									
										
											BIN
										
									
								
								project/fengdu/AppOutSource/AppMarkStatic/img/shop.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								project/fengdu/AppOutSource/AppMarkStatic/img/shop.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 21 KiB | 
| @@ -7,7 +7,7 @@ | ||||
|             <el-button type="primary" icon="iconfont iconAdd" @click="handleAdd">评选任务</el-button> | ||||
|             <ai-search label="开始时间"> | ||||
|               <el-date-picker | ||||
|                   v-model="search.startTime" | ||||
|                   v-model="search.startTimeStr" | ||||
|                   type="date" | ||||
|                   size="small" | ||||
|                   value-format="yyyy-MM-dd" | ||||
| @@ -17,7 +17,7 @@ | ||||
|             </ai-search> | ||||
|             <ai-search label="结束时间"> | ||||
|               <el-date-picker | ||||
|                   v-model="search.endTime" | ||||
|                   v-model="search.endTimeStr" | ||||
|                   type="date" | ||||
|                   size="small" | ||||
|                   value-format="yyyy-MM-dd" | ||||
| @@ -72,6 +72,7 @@ | ||||
|               clearable | ||||
|               style="width: 100%" | ||||
|               value-format="yyyy-MM-dd" | ||||
|               @change="startChange" | ||||
|               placeholder="选择开始日期"> | ||||
|           </el-date-picker> | ||||
|         </el-form-item> | ||||
| @@ -82,6 +83,7 @@ | ||||
|               size="small" | ||||
|               style="width: 100%" | ||||
|               clearable | ||||
|               @change="endChange" | ||||
|               value-format="yyyy-MM-dd" | ||||
|               placeholder="选择开始日期"> | ||||
|           </el-date-picker> | ||||
| @@ -96,6 +98,7 @@ | ||||
| </template> | ||||
|  | ||||
| <script> | ||||
| import dayjs from 'dayjs' | ||||
| import {mapState} from 'vuex' | ||||
| export default { | ||||
|   name: "AppraiseTask", | ||||
| @@ -108,8 +111,8 @@ export default { | ||||
|     return { | ||||
|       search:{ | ||||
|         taskName:'', | ||||
|         startTime:'', | ||||
|         endTime:'', | ||||
|         startTimeStr:'', | ||||
|         endTimeStr:'', | ||||
|         current: 1, | ||||
|         size: 10, | ||||
|       }, | ||||
| @@ -146,6 +149,28 @@ export default { | ||||
|   }, | ||||
|  | ||||
|   methods: { | ||||
|     startChange(e){ | ||||
|       if(e){ | ||||
|         const time = new Date(e).getTime(); | ||||
|         const now = new Date(dayjs(Date.now()).format("YYYY-MM-DD")).getTime() | ||||
|         if(time < now){ | ||||
|           this.$set(this.form,'startTime','') | ||||
|           this.$message.error('开始时间不能小于当前时间') | ||||
|         } | ||||
|       } | ||||
|     }, | ||||
|  | ||||
|     endChange(e){ | ||||
|       if(e){ | ||||
|         const endTime = new Date(e).getTime(); | ||||
|         const startTime = new Date(this.form.startTime).getTime() | ||||
|         if(endTime < startTime){ | ||||
|           this.$set(this.form,'endTime','') | ||||
|           this.$message.error('结束时间不能小于开始时间') | ||||
|         } | ||||
|       } | ||||
|     }, | ||||
|  | ||||
|     onConfirm(){ | ||||
|       this.$refs['formRef'].validate(async valid=>{ | ||||
|         if(valid){ | ||||
| @@ -153,7 +178,7 @@ export default { | ||||
|             const {code} = await this.instance.post('/app/apptaskmanage/addOrUpdate',{ | ||||
|               ...this.form, | ||||
|               startTime:`${this.form.startTime} 00:00:00`, | ||||
|               endTime:`${this.form.startTime} 23:59:59`, | ||||
|               endTime:`${this.form.endTime} 23:59:59`, | ||||
|             }) | ||||
|             if(code===0){ | ||||
|               this.$message.success('保存成功') | ||||
| @@ -196,8 +221,10 @@ export default { | ||||
|  | ||||
|     async getList(){ | ||||
|       try { | ||||
|         const {code,data} = await this.instance.post('/app/apptaskmanage/list',{ | ||||
|           ...this.search | ||||
|         const {code,data} = await this.instance.post('/app/apptaskmanage/list',null,{ | ||||
|           params:{ | ||||
|             ...this.search | ||||
|           } | ||||
|         }) | ||||
|         if(code===0){ | ||||
|           this.tableData = data.records | ||||
|   | ||||
| @@ -13,13 +13,13 @@ | ||||
|           <template #left> | ||||
|             <el-button type="primary" icon="iconfont iconAdd" @click="handleAdd">添加</el-button> | ||||
|             <ai-select | ||||
|                 v-model="search.genre" | ||||
|                 v-model="search.type" | ||||
|                 @change="onChange" | ||||
|                 placeholder="请选择事件类型" | ||||
|                 :selectList="$dict.getDict('shopScoreType')"> | ||||
|             </ai-select> | ||||
|             <ai-select | ||||
|                 v-model="search.type" | ||||
|                 v-model="search.listType" | ||||
|                 @change="(search.current = 1), getList()" | ||||
|                 placeholder="请选择自定义事件" | ||||
|                 :selectList="dictList"> | ||||
| @@ -171,7 +171,7 @@ export default { | ||||
|       if(e){ | ||||
|         this.queryListTypeByType(e) | ||||
|       }else { | ||||
|         this.search.type = '' | ||||
|         this.search.listType = '' | ||||
|        this.dictList = [] | ||||
|        this.search.current = 1 | ||||
|        this.getList() | ||||
| @@ -189,7 +189,7 @@ export default { | ||||
|           this.dictList = data?.map(item=>{ | ||||
|             return { | ||||
|               dictName:item.listType, | ||||
|               dictValue:item.id | ||||
|               dictValue:item.listType | ||||
|             } | ||||
|           }) | ||||
|         } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user