Merge remote-tracking branch 'origin/build' into build
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
VUE_APP_SCOPE=fengdu
|
||||
#VUE_APP_API=https://web.fdfengshou.cn/
|
||||
VUE_APP_API=http://192.168.1.87:9000/
|
||||
#VUE_APP_API=http://192.168.1.87:9000/
|
||||
VUE_APP_API=http://test87web.cunwuyun.cn/
|
||||
|
||||
@@ -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