This commit is contained in:
yanran200730
2022-11-17 08:53:36 +08:00
17 changed files with 252 additions and 93 deletions

View File

@@ -1,7 +1,7 @@
<template>
<section class="AppOnlineAnswer">
<div class="page" v-if="list.length">
<img src="./static/img/answer-bg.png" alt="" class="bg-img">
<img src="https://cdn.cunwuyun.cn/tengxun/miniapp/answer-bg.png" alt="" class="bg-img">
<div class="subject-content" v-if="!showAnwser">
<div class="btn" v-if="showTopBtn" @click="confirm()">{{ topBtnText }}</div>
<div class="bg-fff pad-b48">
@@ -18,8 +18,8 @@
<div v-if="list[index].type == 1">
<div class="item" v-for="(item, i) in list[index].items" :key="i" @click="itemClick(i)"
:class="{ 'item-click': clickIndex === i, 'item-success': showAnalysis && item.checked == 1, 'item-error': showAnalysis && clickIndex == i && item.checked == 0}">
<img src="./static/img/success-icon.png" alt="" v-if="showAnalysis && item.checked == 1">
<img src="./static/img/error-icon.png" alt=""
<img src="https://cdn.cunwuyun.cn/tengxun/miniapp/success-icon.png" alt="" v-if="showAnalysis && item.checked == 1">
<img src="https://cdn.cunwuyun.cn/tengxun/miniapp/error-icon.png" alt=""
v-if="showAnalysis && clickIndex == i && item.checked == 0">
{{ item.sort }} &nbsp;{{ item.content }}
</div>
@@ -28,16 +28,16 @@
<div v-if="list[index].type == 2">
<div class="item" v-for="(item, i) in list[index].items" :key="i" @click="itemClick(i)"
:class="{ 'item-click': item.isCheked, 'item-success': showAnalysis && item.checked == 1, 'item-error': showAnalysis && item.isCheked && item.checked == 0}">
<img src="./static/img/success-icon.png" alt="" v-if="showAnalysis && item.checked == 1">
<img src="./static/img/error-icon.png" alt=""
<img src="https://cdn.cunwuyun.cn/tengxun/miniapp/success-icon.png" alt="" v-if="showAnalysis && item.checked == 1">
<img src="https://cdn.cunwuyun.cn/tengxun/miniapp/error-icon.png" alt=""
v-if="showAnalysis && clickIndex == i && item.checked == 0">
{{ item.sort }} &nbsp;{{ item.content }}
</div>
</div>
<!-- <div class="item item-click">A. 吴起镇</div>
<div class="item item-success"> <img src="./static/img/success-icon.png" alt="">吴起镇</div>
<div class="item item-error"> <img src="./static/img/error-icon.png" alt="">吴起镇</div>
<div class="item item-success"> <img src="https://cdn.cunwuyun.cn/tengxun/miniapp/success-icon.png" alt="">吴起镇</div>
<div class="item item-error"> <img src="https://cdn.cunwuyun.cn/tengxun/miniapp/error-icon.png" alt="">吴起镇</div>
<div class="item">A. 吴起镇</div> -->
</div>
<div class="bg-fff mar-t32" v-if="showAnalysis">
@@ -54,7 +54,7 @@
</div>
<div class="subject-content" v-else>
<div class="bg-fff pad-b48">
<img src="./static/img/answer-head.png" alt="" class="head-img">
<img src="https://cdn.cunwuyun.cn/tengxun/miniapp/answer-head.png" alt="" class="head-img">
<div class="head-content">
<p>本次答对题目数</p>
<div>{{ resultInfo.right }}</div>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 92 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 136 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

View File

@@ -528,6 +528,8 @@ export default {
this.form.description = res.data.description || ''
this.form.arriveAreaId = res.data.arriveAreaId
this.form.arriveAreaName = res.data.arriveAreaName
this.form.startAddress = res.data.startAddress || ''
this.form.arriveAddress = res.data.arriveAddress || ''
}
})
},

View File

@@ -27,7 +27,7 @@
<div class="approve">
<img class="icon" src="./authentication-img.png" alt="">
<div class="flex">
<span class="cert" v-if="isApprove" v-text="approveLabel" @click="$linkTo('/mods/AppAuth/AppAuth')"/>
<span class="cert" v-if="isApprove" v-text="approveLabel" @click="$linkTo('/mods/AppPartyAuth/AppPartyAuth')"/>
<u-icon v-else name="arrow-right" color="#E7F2FF" size="28"
:label="approveLabel" label-color="#E7F2FF" label-pos="left" @click="approve"/>
</div>
@@ -53,7 +53,7 @@
import {mapActions, mapState} from "vuex";
export default {
name: "AppMine",
name: "AppPcMine",
appName: "我的",
customNavigation: true,
computed: {

View File

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 22 KiB

View File

Before

Width:  |  Height:  |  Size: 993 B

After

Width:  |  Height:  |  Size: 993 B

View File

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

@@ -3,9 +3,8 @@
<div class="photo-list__wrapper">
<div class="photo-item" v-for="(item, index) in list" :key="index">
<u-swipe-action @content-click="$linkTo('./PhotoDetail?id=' + item.id)" :index="item.id"
:options="itemOptions" @click="handleDelete">
<div class="photo-item__top">
<u-swipe-action :index="item.id" :options="itemOptions" @click="handleDelete(item.id)">
<div class="photo-item__top" @click="$linkTo('./PhotoDetail?id=' + item.id)">
<h2>{{ item.content }}</h2>
<div class="photo-item__top--info">
<div class="photo-item__top--info-item">
@@ -13,27 +12,27 @@
<span>{{ item.groupName }}</span>
</div>
<div class="photo-item__top--info-item">
<label>所属网格</label>
<span>{{ item.girdName }}</span>
<label>所属地区</label>
<span>{{ item.areaName }}</span>
</div>
</div>
</div>
<div class="photo-item__bottom flex">
<div class="flex fill">
<i :class="'status-' + item.eventStatus"></i>
<span :class="'status-' + item.eventStatus">{{ item.statusName }}</span>
<span :class="'status-' + item.eventStatus">{{ $dict.getLabel('clapEventStatus',item.eventStatus) }}</span>
</div>
<div v-if="item.eventStatus>1">
<div class="itemBtn" @click="toEvaluate" v-show="!item.evaluation">去评价</div>
<div slot="finish" class="finish" v-show="item.evaluation">已评价</div>
</div>
<AiEvaluation :bid="item.id" v-if="item.eventStatus>1">
<div class="itemBtn">去评价</div>
<div slot="finish" class="finish">已评价</div>
</AiEvaluation>
</div>
</u-swipe-action>
</div>
<AiEmpty v-if="!list.length"/>
</div>
<div class="btn-wrapper">
<div class="btn" @click="toReport" hover-class="text-hover">我要上报</div>
<div class="btn" @click="toReport" hover-class="text-hover">新增微心愿</div>
</div>
</div>
</template>
@@ -66,11 +65,12 @@ export default {
this.$dict.load(['clapEventStatus']).then(() => {
this.getList()
})
uni.setNavigationBarTitle({
title: '微心愿'
})
uni.$on('update', () => {
this.current = 1
this.isMore = false
this.getList()
})
},
@@ -80,43 +80,23 @@ export default {
this.$linkTo('./PhotoForm')
},
toEvaluate() {
this.$linkTo('./evaluate')
},
getList() {
if (this.isMore) return
this.$instance.post(`/app/appclapeventinfo/listByWxApplet`, null, {
this.$instance.post(`/app/appclapeventinfopingchang/listByWxApplet`, null, {
params: {
current: this.current,
size: 15
size: 15,
}
}).then(res => {
if (res.code == 0) {
this.total = res.data.total
if (this.current > 1) {
this.list = [...this.list, ...res.data.records].map(v => {
return {
...v,
statusName: this.$dict.getLabel('clapEventStatus', v.eventStatus)
}
})
} else {
this.list = res.data.records.map(v => {
return {
...v,
statusName: this.$dict.getLabel('clapEventStatus', v.eventStatus)
}
})
}
this.list = this.current == 1? res.data.records : [...this.list, ...res.data.records]
uni.hideLoading()
this.pageShow = true
if (res.data.records.length < 15) {
this.isMore = true
return false
}
this.current = this.current + 1
} else {
uni.hideLoading()
}
}).catch(() => {
uni.hideLoading()
@@ -124,7 +104,7 @@ export default {
},
handleDelete(ids) {
this.$dialog.confirm({content: "是否要进行删除?"}).then(() => {
this.$instance.post("/app/appclapeventinfo/delete", null, {
this.$instance.post("/app/appclapeventinfopingchang/delete", null, {
params: {ids}
}).then(res => {
if (res?.code == 0) {
@@ -139,6 +119,7 @@ export default {
},
onReachBottom() {
this.current++
this.getList()
}
}

View File

@@ -2,26 +2,30 @@
<div class="photo-detail" v-if="pageShow">
<AiGroup noBorder>
<h2>{{ info.content }}</h2>
<div class="status-name" :class="detailStatus.cls" v-text="detailStatus.label"/>
<div class="status-name" :class="detailStatus.cls">{{ $dict.getLabel('clapEventStatus',info.eventStatus) }}</div>
</AiGroup>
<AiGroup description noBorder labelColor="#999">
<AiItem label="姓名" :value="info.name"/>
<AiItem label="联系方式" :value="info.phone"/>
<AiItem label="事件类型" :value="info.groupName"/>
<AiItem label="所属网格" :value="info.girdName"/>
<AiItem label="上报时间" :value="info.createTime"/>
<AiItem label="照片" top-label>
<image v-for="(item, index) in info.files" @click="preview(item.url)" :key="index" :src="item.url"/>
<AiItem label="上报位置" :value="info.address"/>
<AiItem label="所属地区" :value="info.areaName"/>
<AiItem label="现场照片" top-label>
<image v-for="(item, index) in info.files" @click="previewImg(item.url,info.files)" :key="index" :src="item.url"/>
<span v-if="!info.files.length">暂无照片</span>
</AiItem>
</AiGroup>
<u-gap height="24"/>
<AiGroup title="处理详情" v-if="info.eventStatus > 1" description noBorder labelColor="#999">
<!-- <AiGroup title="处理详情" v-if="info.eventStatus > 1" description noBorder labelColor="#999">
<AiItem label="处理结果" top-label :value="result.doExplain"/>
<AiItem label="照片" top-label>
<image v-for="(item, index) in result.files" @click="preview(item.url)" :key="index" :src="item.url"/>
<AiUploader v-model="result.files" disabled></AiUploader>
<span v-if="!result.files.length">暂无照片</span>
</AiItem>
</AiGroup>
<u-gap height="24"/>
<u-gap height="24"/> -->
<u-tabs :list="[{name:'办理进度'},{name:'我的评价'}]" :current="currentTab" @change="v=>currentTab=v"/>
<u-gap height="24"/>
<AiGroup noBorder v-if="currentTab=='0'">
@@ -31,19 +35,38 @@
<div class="color-999 mar-r32 stepTime" v-text="item.doTime"/>
</div>
<div v-if="item.doExplain" class="stepContent mar-t8" v-text="item.doExplain"/>
<image class="content_img" :src="e.accessUrl" v-for="(e, indexs) in item.files" :key="indexs" @click="previewImg(e.accessUrl,item.files)"/>
<u-gap height="48"/>
</AiStep>
<div class="bottomBtn" v-show="info.eventStatus > 1 && !info.evaluation" @click="$linkTo(`./evaluate?id=${info.id}`)">去评价</div>
</AiGroup>
<AiEvaluation v-if="currentTab=='1'" :bid="info.id" type="show"/>
<AiEvaluation v-if="info.eventStatus > 1" v-model="evaluation" class="fixed-bottom bg-fff" :bid="info.id">
<div class="bottomBtn">去评价</div>
</AiEvaluation>
<div v-if="currentTab=='1'">
<div v-if="info.evaluation" class="evaluation">
<div class="rate">
<span class="title">心愿评价</span>
<span><u-rate active-color="#F8B425" v-model="info.evaluation.evaluationScore"
inactive-color="#b2b2b2" gutter="20" disabled></u-rate></span>
</div>
<div class="detail">
<div class="titles">评价详情</div>
<div>{{ info.evaluation.evaluationDetail }}</div>
</div>
<div class="photo">
<div class="titles">照片</div>
<div>
<!-- <AiUploader v-model="info.evaluation.files" disabled></AiUploader> -->
<image class="content_img" :src="v.accessUrl" v-for="(v, ind) in info.evaluation.files" :key="ind" @click="previewImg(v.accessUrl,info.evaluation.files)"/>
</div>
</div>
</div>
<AiEmpty :description="`暂无数据`" class="emptyWrap" v-else/>
</div>
</div>
</template>
<script>
export default {
appName: "随手拍详情",
appName: "微心愿详情",
data() {
return {
pageShow: false,
@@ -58,7 +81,7 @@ export default {
const status = !v.evaluation.id ? v.info.eventStatus : 'evaluation'
return {
cls: 'status-' + status,
label: !v.evaluation.id ? v.$dict.getLabel('clapEventStatus', v.info.eventStatus) : "已评价"
// label: !v.evaluation.id ? v.$dict.getLabel('clapEventStatus', v.info.eventStatus) : "已评价"
}
},
process() {
@@ -81,7 +104,7 @@ export default {
},
methods: {
getInfo(id) {
this.$instance.post(`/app/appclapeventinfo/queryDetailById?id=${id}`).then(res => {
this.$instance.post(`/app/appclapeventinfopingchang/queryDetailById?id=${id}`).then(res => {
if (res.code === 0) {
this.info = res.data
if (res.data.eventStatus > 1) {
@@ -93,27 +116,25 @@ export default {
}
}).finally(() => this.$hideLoading())
},
previewResult(url) {
previewImg(url,imgList) {
let imgs = imgList.map(v => v.url)
uni.previewImage({
urls: this.result.files.map(v => v.url),
urls: imgs,
current: url
})
},
preview(url) {
uni.previewImage({
urls: this.info.files.map(v => v.url),
current: url
})
}
}
}
</script>
<style lang="scss">
::v-deep .itemContent image {
width: 220px;
height: 220px;
margin-right: 8px;
}
.photo-detail {
padding: 32px 0 160px;
padding: 32px 0 50px;
margin-bottom: 60px;
background: #fff;
@@ -164,4 +185,43 @@ export default {
}
}
}
.evaluation {
padding: 0 32px;
box-sizing: border-box;
.rate {
display: flex;
padding-bottom: 24px;
box-sizing: border-box;
justify-content: space-between;
border-bottom: 1px solid #DDDDDD;
}
.detail,
.photo {
padding: 24px 0;
}
.detail {
border-bottom: 1px solid #DDDDDD;
}
}
.title,
.titles {
color: #999999;
}
.titles {
margin-bottom: 15px;
}
.content_img {
width: 200px;
height: 200px;
margin-right: 8px;
}
.bottomBtn {
margin: 16px 32px 16px 0;
}
</style>

View File

@@ -1,5 +1,5 @@
<template>
<div class="album">
<div class="PhotoForm">
<div class="form-item__group">
<div class="form-item">
<div class="form-item__wrapper">
@@ -46,10 +46,13 @@
<h2>所属地区</h2>
</div>
<div class="form-item__right">
<!-- <AiPagePicker type="gird" v-model="form.girdId" :params="{formType:2}" @select="handleSelectGrid" nodeKey="id">
<AiMore v-model="form.girdName"/>
</AiPagePicker> -->
<AiAreaPicker class="ai-area" v-model="form.areaId" :fullName.sync="form.areaName" @input="areaSelect">
<div class="ai-area__wrapper">
<span class="label" v-if="form.areaName">{{ form.areaName }}</span>
<span v-else>请选择</span>
<u-icon name="arrow-right" style="display: inline-block;" color="#ddd"/>
</div>
</AiAreaPicker>
</div>
</div>
</div>
@@ -100,7 +103,6 @@
import {mapState} from 'vuex'
export default {
appName: "上报随手拍",
data() {
return {
form: {
@@ -114,10 +116,12 @@ export default {
groupName: '',
girdName: '',
girdId: '',
files: []
files: [],
areaId: '',
areaName: '',
},
dictList: [],
flag: false
flag: false,
}
},
@@ -129,6 +133,9 @@ export default {
this.getDict()
this.form.phone = this.user.phone
this.form.name = this.user.realName || ''
uni.setNavigationBarTitle({
title: '微心愿'
})
},
methods: {
@@ -166,7 +173,7 @@ export default {
},
getDict() {
this.$instance.post(`/app/appclapeventgroup/list?current=1&size=100000`).then(res => {
if (res.code == 0) {
if (res?.code == 0) {
this.dictList = res.data.records.map(v => {
return {
value: v.id,
@@ -176,6 +183,9 @@ export default {
}
})
},
areaSelect(v) {
console.log(v);
},
submit() {
if (!this.form.groupId) {
return this.$toast('请选择事件类型')
@@ -195,18 +205,20 @@ export default {
if (!this.form.phone) {
return this.$toast('请输入上报人联系方式')
}
if (!this.form.girdId) {
return this.$toast('请选择所属网格')
if (this.form.areaId.substr(this.form.areaId.length - 3, 3) === '000') {
return this.$toast('所属地区必须选到村或社区')
}
if (this.flag) return
this.flag = true
this.$loading()
this.$instance.post(`/app/appclapeventinfo/addOrUpdate`, {
this.$instance.post(`/app/appclapeventinfopingchang/addOrUpdate`, {
...this.form,
openid: this.user.openid,
portrait: this.user.avatarUrl,
files: this.form.files,
// portrait: this.user.avatarUrl,
// files: this.form.files,
groupName: this.dictList.filter(v => v.value === this.form.groupId)[0].label
}).then(res => {
this.$hideLoading()
@@ -229,8 +241,8 @@ export default {
}
</script>
<style lang="scss">
.album {
<style lang="scss" scoped>
.PhotoForm {
padding-bottom: 140px;
.form-item__group {

View File

@@ -0,0 +1,101 @@
<template>
<div class="evaluate">
<div class="card">
<div class="title"><span class="red">*</span><span>心愿评价</span></div>
<u-rate active-color="#F8B425" v-model="form.evaluationScore" inactive-color="#b2b2b2" size="70" gutter="70"></u-rate>
</div>
<div class="card">
<div class="title"><span class="red">*</span><span>评价详情</span></div>
<div class="textarea">
<u-input v-model="form.evaluationDetail" type="textarea" height="200" :clearable="false" placeholder="请简要描述…"
placeholder-style="font-size: 16px" maxlength="500" />
<div class="tips">{{ form.evaluationDetail.length }}/500</div>
</div>
</div>
<div class="card">
<div class="title"><span style="width: 8px;"></span><span>图片上传</span><span class="nine">(最多9张)</span></div>
<AiUploader v-model="form.files" :limit="9"></AiUploader>
</div>
<div class="btn-wrapper">
<div class="btn" hover-class="text-hover" @click="submit">提交</div>
</div>
</div>
</template>
<script>
export default {
name: "evaluate",
appName: "心愿评价",
data() {
return {
images: [],
form: {
eventId: '',
evaluationScore: '',
evaluationDetail: '',
files: [],
}
}
},
methods: {
submit() {
if(!this.form.evaluationScore) {
return this.$toast('请选择心愿评价')
}
if(!this.form.evaluationDetail) {
return this.$toast('请输入评价详情')
}
this.$instance.post(`/app/appclapeventinfopingchang/addEvaluation`,{
...this.form
}).then(res => {
if(res?.code == 0) {
this.$u.toast("评价成功")
uni.redirectTo({url: './AppPhotoReport'})
}
})
}
},
onLoad(o) {
this.form.eventId = o.id
uni.setNavigationBarTitle({title: "心愿评价"})
}
}
</script>
<style lang="scss" scoped>
.evaluate {
padding-bottom: 120px;
box-sizing: border-box;
.card {
padding: 32px;
box-sizing: border-box;
background: #FFF;
margin-bottom: 24px;
}
.title {
font-size: 34px;
// color: #666666;
font-weight: 500;
margin-bottom: 24px;
.red {
color: #FF4466;
}
}
.textarea {
padding: 0 15px;
box-sizing: border-box;
}
.tips {
text-align: right;
color: #666666;
}
.nine {
font-size: 30px;
color: #666666;
}
}
</style>

View File

@@ -435,6 +435,9 @@ export default {
this.startAreaName = res.data.records?.[0]?.startAreaName
this.form.arriveAreaId = res.data.records?.[0]?.arriveAreaId
this.form.arriveAreaName = res.data.records?.[0]?.arriveAreaName
this.form.startAddress = res.data.records?.[0]?.startAddress || ''
this.form.arriveAddress = res.data.records?.[0]?.arriveAddress || ''
this.form.description = res.data.records?.[0]?.description || ''
}
})
},