Merge branch 'master' of http://120.76.84.145:10101/gitblit/r/H5/threeSide
| | |
| | | <view class="main"> |
| | | <view class="card flex a-center h-108 j-between"> |
| | | <text class="w-108 fs-27 font-bold mr-85">时间</text> |
| | | <input placeholder-style="color: rgba(0,0,0,0.3);font-size:27rpx;" class="uni-input flex1" |
| | | maxlength="10" placeholder="请选择问题发生的时间" /> |
| | | <view class=" flex a-center j-between flex1" @click="showDate=true"> |
| | | <input v-model="time" disabled placeholder-style="color: rgba(0,0,0,0.3);font-size:27rpx;" |
| | | class="uni-input flex1" maxlength="10" placeholder="请选择问题发生的时间" /> |
| | | <image src="/static/Appeal/left.png" class="w-19 h-19" mode=""></image> |
| | | </view> |
| | | </view> |
| | | <view class="card flex a-center h-108 j-between"> |
| | | <text class="w-108 fs-27 font-bold mr-85">问题类型</text> |
| | | <input placeholder-style="color: rgba(0,0,0,0.3);font-size:27rpx;" class="uni-input flex1" |
| | | maxlength="10" placeholder="请选择问题类型" /> |
| | | <view class=" flex a-center j-between flex1" @click="showList=true"> |
| | | <input v-model="problemType" disabled placeholder-style="color: rgba(0,0,0,0.3);font-size:27rpx;" |
| | | class="uni-input flex1" maxlength="10" placeholder="请选择问题类型" /> |
| | | <image src="/static/Appeal/left.png" class="w-19 h-19" mode=""></image> |
| | | </view> |
| | | </view> |
| | | <view class="card flex a-center h-108 j-between"> |
| | | <text class="w-108 fs-27 font-bold mr-85">群众</text> |
| | | <input placeholder-style="color: rgba(0,0,0,0.3);font-size:27rpx;" class="uni-input flex1" |
| | | maxlength="10" placeholder="请输入群众姓名" /> |
| | | <input v-model="name" placeholder-style="color: rgba(0,0,0,0.3);font-size:27rpx;" |
| | | class="uni-input flex1" placeholder="请输入群众姓名" /> |
| | | |
| | | </view> |
| | | <view class="card flex a-center h-108 j-between"> |
| | | <text class="w-108 fs-27 font-bold mr-85">联系电话</text> |
| | | <input placeholder-style="color: rgba(0,0,0,0.3);font-size:27rpx;" class="uni-input flex1" |
| | | maxlength="10" placeholder="请输入群众联系电话" /> |
| | | <input v-model="contactNumber" type="number" placeholder-style="color: rgba(0,0,0,0.3);font-size:27rpx;" |
| | | class="uni-input flex1" maxlength="11" placeholder="请输入群众联系电话" /> |
| | | |
| | | </view> |
| | | <view class="card flex a-center h-108 j-between" @click="goTopage"> |
| | | <text class="w-108 fs-27 font-bold mr-85">地点</text> |
| | | <input placeholder-style="color: rgba(0,0,0,0.3);font-size:27rpx;" class="uni-input flex1" |
| | | maxlength="10" placeholder="请选择问题发生具体地点" /> |
| | | <view class=" flex a-center j-between flex1"> |
| | | <input v-model="location" disabled placeholder-style="color: rgba(0,0,0,0.3);font-size:27rpx;" |
| | | class="uni-input flex1" placeholder="请选择问题发生具体地点" /> |
| | | <image src="/static/Appeal/left.png" class="w-19 h-19" mode=""></image> |
| | | |
| | | </view> |
| | | </view> |
| | | <view class="card flex a-center h-108 j-between"> |
| | | <text class="w-108 fs-27 font-bold mr-85">详细地址</text> |
| | | <input placeholder-style="color: rgba(0,0,0,0.3);font-size:27rpx;" class="uni-input flex1" |
| | | maxlength="10" placeholder="请输入详细地址描述" /> |
| | | <input v-model="detailedAddress" placeholder-style="color: rgba(0,0,0,0.3);font-size:27rpx;" |
| | | class="uni-input flex1" placeholder="请输入详细地址描述" /> |
| | | </view> |
| | | <view class="mt-35"> |
| | | <text class="w-108 fs-27 font-bold mr-85">问题描述</text> |
| | | <view class="bg mt-27 fs-27"> |
| | | <view class="h-94 " style="border-bottom: 2rpx solid rgba(0, 10, 26, 0.07);"> |
| | | <input placeholder-style="color: rgba(0,0,0,0.3);font-size:27rpx;" class="h-94 pl-31 flex1" |
| | | placeholder="请输入问题标题" /> |
| | | <input v-model="descriptionTitle" placeholder-style="color: rgba(0,0,0,0.3);font-size:27rpx;" |
| | | class="h-94 pl-31 flex1" placeholder="请输入问题标题" /> |
| | | </view> |
| | | <textarea name="" id="" cols="30" placeholder="请输入问题描述内容" |
| | | <textarea name="" v-model="descriptionContent" id="" cols="30" placeholder="请输入问题描述内容" |
| | | placeholder-style="color: rgba(0, 0, 0, 0.30);font-size:27rpx;" rows="10"></textarea> |
| | | </view> |
| | | </view> |
| | | <view class="mt-35"> |
| | | <text class="w-108 fs-27 font-bold mr-85">图片</text> |
| | | <view class="mt-27 flex a-center"> |
| | | <view class="img mr-15"> |
| | | <image src="/static/logo.png" class="w-140 h-140" mode=""></image> |
| | | <view class="img mr-15" v-for="item,index in images" :key="index"> |
| | | <image :src="item" class="w-140 h-140" mode=""></image> |
| | | <view class="img-icon"> |
| | | <image class="w-19 h-19" src="/static/Appeal/amplify.png" mode=""></image> |
| | | <image class="w-19 h-19 ml-35" src="/static/Appeal/trash.png" mode=""></image> |
| | | <image class="w-19 h-19" @click="previewImage(index)" src="/static/Appeal/amplify.png" |
| | | mode=""></image> |
| | | <image class="w-19 h-19 ml-35" @click="deletimg(item)" src="/static/Appeal/trash.png" mode=""> |
| | | </image> |
| | | </view> |
| | | </view> |
| | | <image src="/static/Appeal/add.png" class="w-140 h-140" mode=""></image> |
| | | <image src="/static/Appeal/add.png" class="w-140 h-140" mode="" @click="uploadImg"></image> |
| | | </view> |
| | | </view> |
| | | <view class="mt-35"> |
| | | <text class="w-108 fs-27 font-bold mr-85">视频</text> |
| | | <view class="mt-27 flex a-center"> |
| | | <view class="img mr-15"> |
| | | <image src="/static/logo.png" class="w-140 h-140" mode=""></image> |
| | | <view class="img mr-15" v-for="item,index in videos" :key="index"> |
| | | <video :controls="false" :show-center-play-btn="false" :src="item" class="w-140 h-140" mode=""></video> |
| | | <view class="img-icon"> |
| | | <image class="w-19 h-19" src="/static/Appeal/amplify.png" mode=""></image> |
| | | <image class="w-19 h-19 ml-35" src="/static/Appeal/trash.png" mode=""></image> |
| | | <image class="w-19 h-19" @click="gotoPage(item)" src="/static/Appeal/amplify.png" mode=""></image> |
| | | <image class="w-19 h-19 ml-35" @click="deletvideo(item)" src="/static/Appeal/trash.png" mode=""></image> |
| | | </view> |
| | | </view> |
| | | <image src="/static/Appeal/add.png" class="w-140 h-140" mode=""></image> |
| | | <image src="/static/Appeal/add.png" class="w-140 h-140" mode="" @click="uploadVideo"></image> |
| | | </view> |
| | | </view> |
| | | </view> |
| | | <view class="btn"> |
| | | <view class="btn" @click="submit"> |
| | | 保存 |
| | | </view> |
| | | <u-datetime-picker :show="showDate" v-model="value1" mode="date"></u-datetime-picker> |
| | | <u-picker :show="showList" :columns="columns" @confirm="confirm" @cancel="cancel"></u-picker> |
| | | <u-datetime-picker :show="showDate" v-model="value1" mode="date" :closeOnClickOverlay="true" |
| | | @confirm="confirmone" @close="close" @cancel="cancel"></u-datetime-picker> |
| | | <u-picker :show="showList" :columns="columns" @confirm="confirmtwo" :closeOnClickOverlay="true" @close="close" |
| | | @cancel="cancel"></u-picker> |
| | | </view> |
| | | </template> |
| | | |
| | | <script> |
| | | import dayjs from '@/uni_modules/uview-ui/libs/util/dayjs.js'; |
| | | import { |
| | | save, |
| | | getproblem |
| | | } from './service.js' |
| | | |
| | | export default { |
| | | data() { |
| | | return { |
| | | showList: false, |
| | | showDate: false, |
| | | value1: Number(new Date()), |
| | | columns: [['医疗','教育','就业','住房','养老']], |
| | | columns: [ |
| | | ['医疗', '教育', '就业', '住房', '养老'] |
| | | ], |
| | | time: '', |
| | | problemType: '', |
| | | name: '', |
| | | contactNumber: '', |
| | | location: '', |
| | | detailedAddress: '', |
| | | descriptionTitle: '', |
| | | descriptionContent: '', |
| | | latitude:'', |
| | | longitude:'', |
| | | images: [], |
| | | videos: [], |
| | | }; |
| | | }, |
| | | methods:{ |
| | | confirm(e){ |
| | | console.log(e,'eeee'); |
| | | onLoad() { |
| | | this.getproblem() |
| | | }, |
| | | cancel(e){ |
| | | methods: { |
| | | previewImage(index) { |
| | | uni.previewImage({ |
| | | urls: this.images, |
| | | current: this.images[index], |
| | | longPressActions: { |
| | | itemList: ['发送给朋友', '保存图片', '收藏'], |
| | | success: function(data) { |
| | | console.log('选中了第' + (data.tapIndex + 1) + '个按钮,第' + (data.index + 1) + '张图片'); |
| | | }, |
| | | fail: function(err) { |
| | | console.log(err.errMsg); |
| | | } |
| | | } |
| | | }); |
| | | }, |
| | | deletimg(e) { |
| | | this.images = this.images.filter(item => item != e) |
| | | |
| | | }, |
| | | deletvideo(e){ |
| | | this.videos = this.videos.filter(item => item != e) |
| | | }, |
| | | gotoPage(e){ |
| | | uni.navigateTo({ |
| | | url:`/pages/work-detail/maxVideo?url=${e}` |
| | | }) |
| | | }, |
| | | getproblem() { |
| | | getproblem().then((resp => { |
| | | console.log(resp, '问题类型') |
| | | this.columns =[resp.data.map(item=>{ |
| | | return item.name |
| | | })] |
| | | })) |
| | | }, |
| | | submit() { |
| | | const preciseRegex = /^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{8}$/; |
| | | if(!this.time){ |
| | | uni.showToast({ |
| | | title:'请选择时间', |
| | | icon:'none' |
| | | }) |
| | | |
| | | }else if(!this.problemType){ |
| | | uni.showToast({ |
| | | title:'请选择问题类型', |
| | | icon:'none' |
| | | }) |
| | | }else if(!this.name){ |
| | | uni.showToast({ |
| | | title:'请输入群众姓名', |
| | | icon:'none' |
| | | }) |
| | | }else if(!this.contactNumber){ |
| | | uni.showToast({ |
| | | title:'请输入联系电话', |
| | | icon:'none' |
| | | }) |
| | | }else if(!preciseRegex.test(this.contactNumber)){ |
| | | uni.showToast({ |
| | | title:'请输入正确的手机号', |
| | | icon:'none' |
| | | }) |
| | | }else if(!this.location){ |
| | | uni.showToast({ |
| | | title:'请选择地点', |
| | | icon:'none' |
| | | }) |
| | | }else if(!this.detailedAddress){ |
| | | uni.showToast({ |
| | | title:'请输入详细地址', |
| | | icon:'none' |
| | | }) |
| | | }else if(!this.descriptionTitle){ |
| | | uni.showToast({ |
| | | title:'请输入问题标题', |
| | | icon:'none' |
| | | }) |
| | | }else if(!this.descriptionContent){ |
| | | uni.showToast({ |
| | | title:'请输入问题描述', |
| | | icon:'none' |
| | | }) |
| | | }else if(this.images==0){ |
| | | uni.showToast({ |
| | | title:'请上传图片', |
| | | icon:'none' |
| | | }) |
| | | }else if(this.videos==0){ |
| | | uni.showToast({ |
| | | title:'请上传视频', |
| | | icon:'none' |
| | | }) |
| | | } |
| | | const data = { |
| | | time: this.time, |
| | | problemType: this.problemType, |
| | | name: this.name, |
| | | contactNumber: this.contactNumber, |
| | | location: this.location, |
| | | latitude:this.latitude, |
| | | longitude:this.longitude, |
| | | detailedAddress: this.detailedAddress, |
| | | descriptionTitle: this.descriptionTitle, |
| | | descriptionContent: this.descriptionContent, |
| | | images: this.images.join(','), |
| | | videos: this.videos.join(','), |
| | | } |
| | | save(data).then(resp => { |
| | | console.log(resp, '保存'); |
| | | if(resp.code==200){ |
| | | uni.showToast({ |
| | | title:'保存成功', |
| | | icon:'none' |
| | | }) |
| | | } |
| | | }) |
| | | }, |
| | | confirmone(e) { |
| | | console.log(e,'eeee'); |
| | | this.time = dayjs(e.value).format('YYYY-MM-DD') |
| | | this.showDate = false |
| | | }, |
| | | confirmtwo(e) { |
| | | console.log(e, 'eeee'); |
| | | this.problemType = e.value[0] |
| | | this.showList = false |
| | | }, |
| | | cancel() { |
| | | this.showDate = false |
| | | this.showList = false |
| | | }, |
| | | close(e) { |
| | | this.showDate = false |
| | | this.showList = false |
| | | }, |
| | | goTopage(){ |
| | | uni.navigateTo({ |
| | | url:'/pages/location/location' |
| | | }) |
| | | }, |
| | | uploadImg() { |
| | | uni.chooseImage({ |
| | | count: 1, //默认9 |
| | | sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有 |
| | | sourceType: ['album'], //从相册选择 |
| | | success: (res) => { |
| | | console.log(res, 'res'); |
| | | uni.showLoading() |
| | | uni.uploadFile({ |
| | | url: 'https://huacheng.psciio.com/api/huacheng-communitybackstage/communitypartybuilding/uploadimage', |
| | | filePath: res.tempFilePaths[0], |
| | | name: 'file', |
| | | header: { |
| | | 'Authorization': 'Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOjE2NzYwOTg3NzQ0OTk0NjMxNjgsInR5cGUiOjMsImV4cCI6MTc0MTY4NjQ0OSwiY3JlYXRlZCI6MTc0MDM5MDQ0OTYxN30.UpanrjmCLuKlxm32IbBldBOSJJNYL8ZDrbZQM9z_HCW8X9cL8Ox8jwgX0j4_2nq3ALjYD7aPQWbVmMb2vHIIdA' |
| | | }, |
| | | success: (uploadFileRes) => { |
| | | console.log(JSON.parse(uploadFileRes.data), 'uploadFileRes'); |
| | | this.images = [...this.images, JSON.parse(uploadFileRes.data).data] |
| | | uni.hideLoading() |
| | | }, |
| | | fail: () => { |
| | | uni.hideLoading() |
| | | uni.showToast({ |
| | | title: '上传失败', |
| | | icon: 'error' |
| | | }) |
| | | } |
| | | }) |
| | | } |
| | | }); |
| | | }, |
| | | uploadVideo() { |
| | | uni.chooseVideo({ |
| | | count: 1, //默认9 |
| | | sourceType: ['camera', 'album'], |
| | | success: (res) => { |
| | | console.log(res, 'res'); |
| | | uni.showLoading() |
| | | uni.uploadFile({ |
| | | url: 'https://huacheng.psciio.com/api/huacheng-communitybackstage/communitypartybuilding/uploadimage', |
| | | filePath: res.tempFilePath, |
| | | name: 'file', |
| | | header: { |
| | | 'Authorization': 'Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOjE2NzYwOTg3NzQ0OTk0NjMxNjgsInR5cGUiOjMsImV4cCI6MTc0MTY4NjQ0OSwiY3JlYXRlZCI6MTc0MDM5MDQ0OTYxN30.UpanrjmCLuKlxm32IbBldBOSJJNYL8ZDrbZQM9z_HCW8X9cL8Ox8jwgX0j4_2nq3ALjYD7aPQWbVmMb2vHIIdA' |
| | | }, |
| | | success: (uploadFileRes) => { |
| | | console.log(JSON.parse(uploadFileRes.data).data, 'uploadFileRes'); |
| | | this.videos = [...this.videos, JSON.parse(uploadFileRes.data).data] |
| | | uni.hideLoading() |
| | | }, |
| | | fail: () => { |
| | | uni.hideLoading() |
| | | uni.showToast({ |
| | | title: '上传失败', |
| | | icon: 'error' |
| | | }) |
| | | } |
| | | }) |
| | | } |
| | | }); |
| | | }, |
| | | } |
| | | } |
| | | </script> |
New file |
| | |
| | | import request from '@/utils/request.js' |
| | | |
| | | |
| | | export const save =(params)=>{ |
| | | return request.post(`/api/huacheng-sangeshenbian/applet/complaint/save`,params) |
| | | } |
| | | export const getproblem =(params)=>{ |
| | | return request.get(`/api/huacheng-sangeshenbian/applet/complaint/problem-type/list`,params) |
| | | } |
| | |
| | | 说明内容
|
| | | </view>
|
| | | <view class="mt-27 bgColor1 pt-25 pl-31 pr-31 pb-29 lh-38 fs-27">
|
| | | <view class="">
|
| | | 1、处理措施:记录为解决该问题所采取的具体措施,包括政策宣传、处理沟通、现场处理等方式。
|
| | | </view>
|
| | | <view class="">
|
| | | 2、处理时间:记录处理该问题的时间节点,包括开始处理时间、处理完成时间等。
|
| | | </view>
|
| | | <view class="">
|
| | | 3、参与人员:记录参与处理该问题的人员名单,包括走访人员、相关部门工作人员等。
|
| | | </view>
|
| | | <view class="">
|
| | | 4、结果概述:简要描述问题的处理结果,是否得到有效解决,是否达到走访对象的期望等。
|
| | | </view>
|
| | | <view class="">
|
| | | 5、后续跟进:如需进一步跟进或处理,记录后续跟进的计划、时间节点及责任人员。
|
| | | </view>
|
| | | </view>
|
| | | <view class="fs-27 font-bold mt-38">
|
| | | 图片
|
| | |
| | | 视频
|
| | | </view>
|
| | | <view class="flex a-center j-between mt-27 wrap">
|
| | | <image src="../../static/logo.png" mode="aspectFill" class="w-140 h-140 mr-15 shrink0 mb-10" v-for="item in 4" :key="item"></image>
|
| | | <view class="relative mr-15 shrink0 mb-10" v-for="item in 4" :key="item">
|
| | | <image src="../../static/logo.png" mode="aspectFill" class="w-140 h-140" ></image>
|
| | | <image src="../../static/detailImg/open.png" mode="aspectFill" class="w100 h100 absolute top0 left0"></image>
|
| | | </view>
|
| | | </view>
|
| | | </view>
|
| | | <view class="h-10 safe-b">
|
| | |
| | | |
| | | <view class="input-card"> |
| | | <view class="title mb-27"> |
| | | 上报说明 |
| | | 下派说明 |
| | | </view> |
| | | <u--textarea style="background-color:rgba(248, 248, 248, 1);border: unset;padding:25rpx 30.77rpx;" |
| | | height="365.38rpx" v-model="content" placeholder="请输入内容"></u--textarea> |
| | |
| | | <view class="popup-content"> |
| | | <view class="title-pop">请选择下派单位</view> |
| | | <view class="pop-label">社区:</view> |
| | | <uni-data-select v-model="value" :localdata="range" @change="change"></uni-data-select> |
| | | <uni-data-select :disabled="false" v-model="value" :localdata="range" |
| | | @change="change"></uni-data-select> |
| | | |
| | | <view class="botton-btn"> |
| | | <view class="cancle" @tap="close">取消</view> |
| | |
| | | }; |
| | | }, |
| | | onLoad(option) { |
| | | option.id = 1 |
| | | if (option.id) { |
| | | this.id = option.id |
| | | getDetail({ |
| | |
| | | this.range = res.data.map(item => { |
| | | item.text = item.name |
| | | item.value = item.id |
| | | item.disable = false |
| | | return item |
| | | }) |
| | | } |
| | | }) |
| | |
| | | <image class="h-32" src="/static/home/img5.png" mode=""></image> |
| | | </view> |
| | | <swiper class="swiper " :indicator-dots="false" :autoplay="true" :interval="3000"> |
| | | <swiper-item> |
| | | <image style="height: 270rpx;width: 688rpx;" src="/static/home/img2.png" mode=""></image> |
| | | <swiper-item v-for="item,index in bannerlist" :key="index"> |
| | | <image style="height: 270rpx;width: 688rpx;border-radius: 19rpx;" :src="item.url" mode=""> |
| | | </image> |
| | | </swiper-item> |
| | | <swiper-item> |
| | | <image style="height: 270rpx;width: 688rpx;" src="/static/home/img2.png" mode=""></image> |
| | | </swiper-item> |
| | | <swiper-item> |
| | | <image style="height: 270rpx;width: 688rpx;" src="/static/home/img2.png" mode=""></image> |
| | | </swiper-item> |
| | | |
| | | </swiper> |
| | | </view> |
| | | </view> |
| | |
| | | </view> |
| | | <view class=" mt-15"> |
| | | <view class="flex a-center"> |
| | | <view class="msg mr-19" @click="isactive=1" :class="isactive==1? 'active':''"> |
| | | <view class="msg mr-19" @click="changeActive(1)" :class="isactive==1? 'active':''"> |
| | | 消息 |
| | | <view class="tips"> |
| | | 6 |
| | | {{msgList.length}} |
| | | </view> |
| | | </view> |
| | | <view class="representative" @click="isactive=2" :class="isactive==2? 'active':''"> |
| | | <view class="representative" @click="changeActive(2)" :class="isactive==2? 'active':''"> |
| | | 待办 |
| | | <view class="tips"> |
| | | 6 |
| | | {{msgList.length}} |
| | | </view> |
| | | </view> |
| | | </view> |
| | | <view class="list mt-29"> |
| | | <view class="flex a-center mb-27" v-for="item in 5"> |
| | | <view class="flex a-center mb-27" v-for="item in msgList" :key="item.id"> |
| | | <view class="avater pb-33"> |
| | | <image class="w-85 h-85 br50" src="/static/home/img9.png" mode=""></image> |
| | | <view class="tips"> |
| | | <view class="tips" v-if="item.readStatus==2"> |
| | | |
| | | </view> |
| | | </view> |
| | | <view class="border-b flex1 ml-18 pb-33"> |
| | | <view class="fs-31 font-w500 flex flex1 j-between"> |
| | | <text>钟山淑</text> |
| | | <text class="fs-23 font-w400">16分钟前</text> |
| | | <text>{{item.title}}</text> |
| | | <text class="fs-23 font-w400">{{item.time}}分钟前</text> |
| | | |
| | | </view> |
| | | <view class="fs-27 flex j-between mt-8"> |
| | | <text>向你发来10份报告</text> |
| | | <view class="read">已读</view> |
| | | <view class="noread">未读</view> |
| | | <text></text> |
| | | <view class="read" v-if="item.readStatus==1">已读</view> |
| | | <view class="noread" v-else>未读</view> |
| | | |
| | | </view> |
| | | </view> |
| | |
| | | </template> |
| | | |
| | | <script> |
| | | import dayjs from '../../uni_modules/uview-ui/libs/util/dayjs' |
| | | import popupCertificate from '../components/certificate/certificate.vue' |
| | | import { |
| | | getBanner, |
| | |
| | | showData: false, |
| | | isClick: false, |
| | | pageNum:1, |
| | | bannerlist: [], |
| | | msgList: [], |
| | | msgListTotal: [], |
| | | } |
| | | }, |
| | | onLoad() { |
| | |
| | | getBanner() { |
| | | getBanner().then(resp => { |
| | | console.log(resp, '获取banner'); |
| | | this.bannerlist = resp.data |
| | | }) |
| | | }, |
| | | getMessagelist() { |
| | |
| | | } |
| | | getMessagelist(data).then(resp => { |
| | | console.log(resp, '获取消息列表'); |
| | | this.msgListTotal = resp.data.records.map(item => { |
| | | const timeDifference = new Date().getTime() - new Date(item.createTime).getTime() |
| | | // 使用 dayjs 的 duration 来处理时间差 |
| | | |
| | | |
| | | // 计算总秒数 |
| | | const totalSeconds = Math.floor(timeDifference / 1000); |
| | | // 计算天数 |
| | | const days = Math.floor(totalSeconds / (3600 * 24)); |
| | | // 计算剩余的秒数 |
| | | const remainingSecondsAfterDays = totalSeconds % (3600 * 24); |
| | | // 计算小时数 |
| | | const hours = Math.floor(remainingSecondsAfterDays / 3600); |
| | | // 计算剩余的秒数 |
| | | const remainingSecondsAfterHours = remainingSecondsAfterDays % 3600; |
| | | // 计算分钟数 |
| | | const minutes = Math.floor(remainingSecondsAfterHours / 60); |
| | | |
| | | item.time = days&&hours?`${days} 天 ${hours}小时 ${minutes} `:!days&&hours?`${hours}小时 ${minutes}`:`${minutes}` |
| | | |
| | | return item |
| | | }) |
| | | this.msgList = JSON.parse(JSON.stringify(this.msgListTotal)).filter(item => item.promptType == |
| | | 2) |
| | | console.log(this.msgListTotal, 'this.msgListTotal'); |
| | | }) |
| | | }, |
| | | changeActive(value) { |
| | | this.isactive = value |
| | | if (value == 1) { |
| | | this.msgList = JSON.parse(JSON.stringify(this.msgListTotal)).filter(item => item.promptType == 2) |
| | | } else { |
| | | |
| | | this.msgList = JSON.parse(JSON.stringify(this.msgListTotal)).filter(item => item.promptType == 1) |
| | | } |
| | | |
| | | }, |
| | | change() { |
| | | console.log('1111'); |
| | |
| | | |
| | | } |
| | | |
| | | // swiper-item{ |
| | | // border-radius: 19rpx; |
| | | // } |
| | | |
| | | .msg { |
| | | width: 173rpx; |
| | | height: 58rpx; |
| | |
| | | </view>
|
| | | </view>
|
| | | <view class="pl-31 pr-31">
|
| | | <view class="mt-31 br-19 bgColor3 shadow2 oh pb-31" v-for="(item,index) in 10" :key="index">
|
| | | <view class="mt-31 br-19 bgColor3 shadow2 oh pb-31" v-for="(item,index) in list" :key="item.id">
|
| | | <view class="pt-21 pl-27 pr-27 flex a-center j-between fs-27 font-bold">
|
| | | <view class="">
|
| | | 诉求号:7843523454
|
| | | 诉求号:{{ item.serialNumber || '' }}
|
| | | </view>
|
| | | <view class="color3">
|
| | | 上级驳回
|
| | | {{ statusObj[item.status] }}
|
| | | </view>
|
| | | </view>
|
| | | <view class="mt-40 fs-23 pl-40 pr-40">
|
| | | <view class="flex j-between a-center">
|
| | | <view class="color4">
|
| | | 上报人:<text class="color5">李雷</text>
|
| | | 上报人:<text class="color5">{{ item.reporter || '' }}</text>
|
| | | </view>
|
| | | <view class="color4">
|
| | | 所属部门:<text class="color5">部门AA</text>
|
| | | 所属部门:<text class="color5">{{ item.departmentName || '' }}</text>
|
| | | </view>
|
| | | </view>
|
| | | <view class="mt-15">
|
| | | <view class="color4">
|
| | | 提交时间:<text class="color5">2025-2-11 11:09:09</text>
|
| | | 提交时间:<text class="color5">{{ item.reportTime | formatTime }}</text>
|
| | | </view>
|
| | | </view>
|
| | | </view>
|
| | | <view class="mt-27 ml-40 mr-40 br-19 bgColor4 pt-34 pb-34 fs-27 pl-27 pr-27 flex a-center j-between">
|
| | | <text>江苏省常州市溧阳市牛顿大道172号</text>
|
| | | <text>{{ item.location || '' }}</text>
|
| | | <image src="../../static/location.png" mode="aspectFill" class="w-31 h-31 ml-10 shrink0"></image>
|
| | | </view>
|
| | | <view class="ml-40 mr-40 mt-31 flex j-between a-center fs-27 txt-center">
|
| | |
| | | 问题类型
|
| | | </view>
|
| | | <view class="tip">
|
| | | 教育
|
| | | {{ item.problemType || '' }}
|
| | | </view>
|
| | | </view>
|
| | | <view class="">
|
| | |
| | | 群众
|
| | | </view>
|
| | | <view class="mt-10">
|
| | | 沙振
|
| | | {{ item.name || '' }}
|
| | | </view>
|
| | | </view>
|
| | | <view class="">
|
| | |
| | | 联系电话
|
| | | </view>
|
| | | <view class="mt-10">
|
| | | 14225874426
|
| | | {{ item.contactNumber || '' }}
|
| | | </view>
|
| | | </view>
|
| | | </view>
|
| | |
| | | 问题描述
|
| | | </view>
|
| | | <view class="mt-10 lh-38">
|
| | | 说出来的是你想的,做出来的是你说的,交出来的是你做的
|
| | | {{ item.descriptionContent || '' }}
|
| | | </view>
|
| | | </view>
|
| | | <view class="fs-27 mt-31 ml-40">
|
| | |
| | | 描述图片
|
| | | </view>
|
| | | <view class="mt-19 flex wrap a-center">
|
| | | <image v-for="(item,index) in 4" :key="index" src="../../static/logo.png" class="br-19 w-142 h-154 mr-13 mb-10 shrink0" mode=""></image>
|
| | | <image v-for="(item1,index) in item.images" :key="index" :src="item1"
|
| | | class="br-19 w-142 h-154 mr-13 mb-10 shrink0" mode="aspectFill"></image>
|
| | | </view>
|
| | | </view>
|
| | | <view class="mt-31 border1">
|
| | | <view class="left"></view>
|
| | | <view class="right"></view>
|
| | | <view class="txt-center fs-23 mt-27 color6">
|
| | | 创建时间:2025-9-11 11:01:09
|
| | | 创建时间:{{ item.createTime | formatTime }}
|
| | | </view>
|
| | | <view class="flex a-center j-center fs-23 mt-29 txt-center">
|
| | | <view class="h-58 lh-58 bgColor5 w-192 br-29 color7">
|
| | |
| | | </template>
|
| | |
|
| | | <script>
|
| | | import dayjs from '@/uni_modules/uview-ui/libs/util/dayjs.js'
|
| | | import {
|
| | | getList
|
| | | } from './service.js'
|
| | | export default {
|
| | | data() {
|
| | | return {
|
| | | active: 1
|
| | | active: 1,
|
| | | searchParams: {
|
| | | pageNum: 1,
|
| | | pageSize: 10,
|
| | | type: 0
|
| | | },
|
| | | list:[],
|
| | | status: 'loadMore',
|
| | | statusObj: {
|
| | | // 0-正在办理 1-延期办理 2-超时办理 3-已办结 4-群众撤销 5-上报待审核 6-上级驳回
|
| | | '0': '正在办理',
|
| | | '1': '延期办理',
|
| | | '2': '超时办理',
|
| | | '3': '已办结',
|
| | | '4': '群众撤销',
|
| | | '5': '上报待审核',
|
| | | '6': '上级驳回'
|
| | | }
|
| | | }
|
| | | },
|
| | | methods: {
|
| | | onReachBottom() {
|
| | |
|
| | | },
|
| | | filters: {
|
| | | formatTime(val) {
|
| | | return dayjs(val).format('YYYY-MM-DD HH:mm:ss')
|
| | | }
|
| | | },
|
| | | onShow() {
|
| | | this.fetchList(this.searchParams,(e)=>{
|
| | | this.list = e.records || []
|
| | | if (this.list.length == e.total) {
|
| | | this.status = 'noMore'
|
| | | } else {
|
| | | this.status = 'loadMore'
|
| | | }
|
| | | })
|
| | | },
|
| | | methods: {
|
| | | fetchList(params,callback) {
|
| | | if (this.status == 'loading') return
|
| | | this.status = 'loading'
|
| | | getList(params).then(res=>{
|
| | | if (res.code == 200) {
|
| | | res.data.records.map(item=>{
|
| | | item.images = item.images.split(',')
|
| | | })
|
| | | callback(res.data)
|
| | | }
|
| | | })
|
| | | }
|
| | | }
|
| | | }
|
| | | </script>
|
| | |
| | | .border1 {
|
| | | border-top: 2rpx solid #EDEEEF;
|
| | | position: relative;
|
| | |
|
| | | .left {
|
| | | width: 40rpx;
|
| | | height: 40rpx;
|
| | |
| | | left: -20rpx;
|
| | | top: -20rpx;
|
| | | }
|
| | |
|
| | | .right {
|
| | | width: 40rpx;
|
| | | height: 40rpx;
|
New file |
| | |
| | | import request from '@/utils/request.js' |
| | | // 工单列表 |
| | | export const getList =(params)=>{ |
| | | return request.post(`/api/huacheng-sangeshenbian/applet/complaint/list`,params) |
| | | } |
| | |
| | | <template> |
| | | <view class="content"> |
| | | <u-navbar title="选择地点" bgColor="transparent" titleStyle="font-size: 35rpx;font-weight:bold;" placeholder> |
| | | <view slot="left"> |
| | | <view slot="left" @click="back"> |
| | | <image src="/static/location/back.png" class="w-19 h-35" mode=""></image> |
| | | </view> |
| | | </u-navbar> |
| | | <view class="" id="container"> |
| | | |
| | | </view> |
| | | <view class=""> |
| | | <view class="searchMain mb-35"> |
| | | <view class=" main"> |
| | | <view class="searchMain mb-35 mt-38"> |
| | | <view class="search fs-27 "> |
| | | <text class="mr-35 ml-50">成都市</text> |
| | | <image class="w-17 h-8 mr-35" src="/static/location/toleft.png" mode=""></image> |
| | | <image class="w-31 h-31 mr-13" src="/static/location/search.png" mode=""></image> |
| | | <input class="flex1" placeholder="搜索小区/写字楼等" placeholder-style="font-size:27rpx"></input> |
| | | <view class="sure"> |
| | | <input class="flex1" v-model="keyword" placeholder="搜索小区/写字楼等" |
| | | placeholder-style="font-size:27rpx"></input> |
| | | <view class="sure" @click="searchLocation"> |
| | | 确定 |
| | | </view> |
| | | </view> |
| | | |
| | | </view> |
| | | <view class="card" :class="" v-for="item in 5"> |
| | | <text>天府新谷九号楼二单元</text> |
| | | <text class="font-w500 fs-23 mt-25" style="color: rgba(0, 0, 0, 0.6);">四川省成都市高新区府城大道西段399号天</text> |
| | | <view class="card" @click="changeAdr(item.id,item)" :class="item.id ==uid ?'activecard':''" |
| | | v-for="item in locationList" :key="item.id"> |
| | | <text>{{item.address}}</text> |
| | | <text class="font-w500 fs-23 mt-25" style="color: rgba(0, 0, 0, 0.6);">{{item.address}}</text> |
| | | |
| | | </view> |
| | | </view> |
| | |
| | | return { |
| | | latitude: 39.909, |
| | | longitude: 116.39742, |
| | | map: null, |
| | | uid: 0, |
| | | keyword: '', |
| | | locationList: [], |
| | | }; |
| | | }, |
| | | mounted() { |
| | | methods: { |
| | | |
| | | back() { |
| | | uni.navigateBack() |
| | | }, |
| | | |
| | | changeAdr(value, addr) { |
| | | console.log(value, addr, 'asdasdada'); |
| | | this.uid = value |
| | | const pages = getCurrentPages() |
| | | let prevPage = pages[pages.length - 2]; |
| | | prevPage.location = addr.address |
| | | prevPage.latitude = addr.point.lat |
| | | prevPage.longitude = addr.point.lng |
| | | setTimeout(() => { |
| | | uni.navigateBack() |
| | | }, 200) |
| | | }, |
| | | // 搜索地点 |
| | | searchLocation() { |
| | | if (!this.keyword) return; |
| | | uni.request({ |
| | | url: `https://api.map.baidu.com/place/v2/search`, |
| | | method: 'GET', |
| | | data: { |
| | | query: this.keyword, |
| | | location: `${this.latitude},${this.longitude }`, |
| | | radius: 10000, // 搜索半径,单位:米 |
| | | output: 'json', |
| | | ak: '3mHKIXMArjgIkgADzOlTYp4XssNSNkwr' // 替换为你自己的 AK |
| | | }, |
| | | success: (res) => { |
| | | console.log(res, '-------'); |
| | | if (res.data.status === 0) { |
| | | this.searchResults = res.data.results; |
| | | this.latitude = res.data.results[0].location.lat |
| | | this.longitude = res.data.results[0].location.lng |
| | | this.locationList = res.data.results.map((result, index) => { |
| | | |
| | | result.id = index + 1 |
| | | |
| | | return result |
| | | }); |
| | | } |
| | | }, |
| | | fail: (err) => { |
| | | console.error('搜索失败:', err); |
| | | } |
| | | }); |
| | | }, |
| | | }, |
| | | onLoad() { |
| | | |
| | | }, |
| | | onReady() { |
| | | var map = new BMapGL.Map("container"); // 创建地图实例 |
| | | var point = new BMapGL.Point(116.404, 39.915); // 创建点坐标 |
| | | map.centerAndZoom(point, 15); |
| | | this.map = new BMapGL.Map("container"); // 创建地图实例 |
| | | |
| | | uni.getLocation({ |
| | | type: 'wgs84', |
| | | success: (res) => { |
| | | console.log(res, 'res'); |
| | | this.longitude = res.longitude; |
| | | this.latitude = res.latitude; |
| | | var point = new BMapGL.Point(res.longitude, res.latitude); // 创建点坐标 |
| | | this.map.enableScrollWheelZoom(true); |
| | | this.map.centerAndZoom(point, 12); |
| | | var marker = new BMapGL.Marker(point); |
| | | this.map.addOverlay(marker); |
| | | var myGeo = new BMapGL.Geocoder(); |
| | | // 根据坐标得到地址描述 |
| | | myGeo.getLocation(new BMapGL.Point(res.longitude, res.latitude), (result) => { |
| | | console.log(result, 'result'); |
| | | this.locationList = result.surroundingPois.map((item, index) => { |
| | | item.id = index + 1 |
| | | return item |
| | | }) |
| | | |
| | | }) |
| | | this.map.addEventListener('click', (e) => { |
| | | var mercator = this.map.lnglatToMercator(e.latlng.lng, e.latlng.lat); |
| | | this.latitude = e.latlng.lat |
| | | this.longitude = e.latlng.lng |
| | | var point = new BMapGL.Point(e.latlng.lng, e.latlng.lat); |
| | | this.map.centerAndZoom(point, 12); |
| | | var myGeo = new BMapGL.Geocoder(); |
| | | // 根据坐标得到地址描述 |
| | | myGeo.getLocation(new BMapGL.Point(e.latlng.lng, e.latlng.lat), (result) => { |
| | | console.log(result, 'result'); |
| | | this.locationList = result.surroundingPois.map((item, index) => { |
| | | item.id = index + 1 |
| | | return item |
| | | }) |
| | | |
| | | }) |
| | | var marker = new BMapGL.Marker(point); |
| | | this.map.addOverlay(marker); |
| | | }); |
| | | } |
| | | }); |
| | | |
| | | } |
| | | } |
| | | </script> |
| | |
| | | <style lang="scss" scoped> |
| | | #container { |
| | | width: 100vw; |
| | | height: 517rpx; |
| | | height: 534rpx; |
| | | } |
| | | |
| | | .content { |
| | | display: flex; |
| | | flex-direction: column; |
| | | align-items: center; |
| | | |
| | | .main { |
| | | background-color: #fff; |
| | | border-radius: 34rpx; |
| | | position: absolute; |
| | | top: 517rpx; |
| | | z-index: 100; |
| | | |
| | | .activecard { |
| | | background: #F2F2F2; |
| | | } |
| | | |
| | | } |
| | | |
| | | } |
| | | |
| | | |
| | | .searchMain { |
| | | padding-left: 40rpx; |
| | |
| | | font-size: 31rpx; |
| | | color: rgba(0, 0, 0, 0.8); |
| | | padding: 34rpx 38rpx 33rpx 38rpx; |
| | | background: #F2F2F2; |
| | | background: #fff; |
| | | border-bottom: 2rpx solid rgba(0, 10, 26, 0.07); |
| | | } |
| | | </style> |
| | |
| | | 提交后会由上级部门进行审核,请留意审核结果 |
| | | </view> |
| | | |
| | | <view class="btn">提交至上级部门</view> |
| | | <view class="btn" @tap="problemReports">提交至上级部门</view> |
| | | |
| | | </view> |
| | | </template> |
| | |
| | | }; |
| | | }, |
| | | onLoad(option) { |
| | | option.id = 1 |
| | | if (option.id) { |
| | | this.id = option.id |
| | | getDetail({ |
| | |
| | | icon: 'none', |
| | | title: '上报成功' |
| | | }) |
| | | |
| | | setTimeout(() => { |
| | | uni.navigateBack() |
| | | }, 1500) |
| | | } |
| | | }) |
| | | }, |
| | |
| | | export const getDetail = (params) => { |
| | | return request.get(`/api/huacheng-sangeshenbian/applet/complaint/detail`, params) |
| | | } |
| | | export const problemReport = (params) => { |
| | | return request.get(`/api/huacheng-sangeshenbian/applet/complaint/report`, params) |
| | | export const problemReport = (data) => { |
| | | return request.post(`/api/huacheng-sangeshenbian/applet/complaint/report`, data) |
| | | } |
| | |
| | | </view> |
| | | |
| | | <!-- 详情/办理进度 --正在办理-延期-超时 显示--> |
| | | <view class="progress" v-if="['0','1','2'].includes(orderInfo.status)"> |
| | | <view class="progress" v-if="[0,1,2].includes(orderInfo.status) &&progressesList.length>0"> |
| | | <view class="title">当前办理进度</view> |
| | | <view class="proCard"> |
| | | <view class="proItem" v-for="(item,index) in progressesList"> |
| | |
| | | </view> |
| | | |
| | | <!-- 详情/诉求流转 --正在办理显示--> |
| | | <view class="careRequire" v-if="orderInfo.status==0"> |
| | | <view class="careRequire" v-if="orderInfo.status==0 &&flowsList.length>0"> |
| | | <view class="title">诉求流转</view> |
| | | <view class="proCard"> |
| | | <view class="proItem" v-for="(item,index) in flowsList"> |
| | |
| | | </view> |
| | | |
| | | <!-- 上级显示 --> |
| | | <view class="btnButtom" v-if="['0','1','2'].includes(orderInfo.status)"> |
| | | <view class="btnButtom" v-if="[0,1,2].includes(orderInfo.status)"> |
| | | <view class="btnDown" @click.stop="toUp">问题上报</view> |
| | | <view class="btnDown" @click.stop="toDown">诉求下派</view> |
| | | <view class="btnAdd">添加办理进度</view> |
| | | <view class="btnAdd">办理结果录入</view> |
| | | <view class="btnAdd" @click="addProgress">添加办理进度</view> |
| | | <view class="btnAdd" @click="resultEntery">办理结果录入</view> |
| | | </view> |
| | | <view class="btnButtom" v-if="orderInfo.status==5"> |
| | | <view class="cancel" @click.stop="showPop=true">驳回</view> |
| | |
| | | <!-- 上级显示 --> |
| | | |
| | | <!-- 党员显示 --> |
| | | <view class="btnButtom" v-if="['0','1','2'].includes(orderInfo.status)"> |
| | | <view class="btnButtom" v-if="[0,1,2].includes(orderInfo.status)"> |
| | | <view class="btnDown partyUp" @click.stop="toUp">问题上报</view> |
| | | <view class="btnAdd partyDown">添加办理进度</view> |
| | | <view class="btnAdd partyDown">办理结果录入</view> |
| | | <view class="btnAdd partyDown" @click="addProgress">添加办理进度</view> |
| | | <view class="btnAdd partyDown" @click="resultEntery">办理结果录入</view> |
| | | </view> |
| | | <!-- 党员显示 --> |
| | | |
| | |
| | | export default { |
| | | data() { |
| | | return { |
| | | id: "", //工单详情ID |
| | | id: "1", //工单详情ID |
| | | orderInfo: {}, //工单详情 |
| | | problemVideos: [], //描述视频 |
| | | problemImg: [], //描述图片 |
| | |
| | | }).then(res => { |
| | | |
| | | }) |
| | | this.getDetailInfo() |
| | | }, |
| | | methods: { |
| | | open() {}, |
| | |
| | | this.resultVideos = res.data.completionVideos.split(',') |
| | | } |
| | | // 办理进度 |
| | | if (res.data.complaintProgresses.length > 0) { |
| | | if (res.data.complaintProgresses && res.data.complaintProgresses.length > 0) { |
| | | this.progressesList = res.data.complaintProgresses.map((item) => { |
| | | return { |
| | | ...item, |
| | |
| | | }) |
| | | } |
| | | // 诉求流转记录 |
| | | if (res.data.complaintFlows.length > 0) { |
| | | if (res.data.complaintFlows && res.data.complaintFlows.length > 0) { |
| | | this.flowsList = res.data.complaintFlows |
| | | } |
| | | |
| | |
| | | url: `/pages/dispatchWorkOrder/dispatchWorkOrder?id=${this.id}` |
| | | }) |
| | | }, |
| | | addProgress() { |
| | | uni.navigateTo({ |
| | | url: `/pages/add-progress/index?id=${this.id}` |
| | | }) |
| | | }, |
| | | resultEntery() { |
| | | uni.navigateTo({ |
| | | url: `/pages/result-entry/index?id=${this.id}` |
| | | }) |
| | | } |
| | | } |
| | | } |
| | | </script> |