Przeglądaj źródła

初步完成问题上报

gcz 2 lat temu
rodzic
commit
b545b8878d

+ 18 - 0
common/apiurl.js

@@ -13,6 +13,22 @@ const apiurl = {
 	getRoadAllListUrl:'/roadspace/getRoadAllList',
 	//问题上报接口
 	reportUrl:'/deviceexcptionprocess/addOtherExcption',
+	//其他问题上报历史记录列表
+	selectOtherExcptionList:'/deviceexcptionprocess/selectOtherExcptionList',
+	//查看上报问题详情
+	reportDetail:'/deviceexcptionprocess/getById',
+	//应急处置列表
+	emergencyReportList:'/deviceexcptionprocess/selectHandleExcptionList',
+	//问题上报接口
+	reportEmergency:'/deviceexcptionprocess/addHandleExcption',
+	//收费员问题类型数据接口
+	payeeExceptionType:'/roadspace/type/payee_exception_type',
+	//收费员问题列表
+	payeeReportList:'/payeeexcption',
+	//收费员问题上报
+	payeeReport:'/payeeexcption',
+	//收费员问题详情
+	payeeReportDetail:'/payeeexcption/getById',
 	//查询巡检员打卡路段信息
 	punchInfoUrl:'/officerpunch/punchInfo/',
 	//巡检员打卡签到
@@ -53,6 +69,8 @@ const apiurl = {
 	getUnreadMsgTotalUrl:'/inspecmsg/selectNoRedNum',
 	//车位锁挡板状态数据接口
 	deviceLockStatusUrl:'/roadspace/type/device_lock_status',
+	//收费员列表
+	payeeList:'/payeeexcption/selectPayeeInfo',
 }
 
 export {

+ 1 - 0
common/config.js

@@ -7,6 +7,7 @@ if (node_dev) {
  baseUrl = process.env.H_BASE_URL;
  upFileUrl = process.env.H_UP_FILE_URL
 }
+console.log('baseUrl',baseUrl);
 const config = {
 	// wxAppid:'wxbe90cc7c5233dd84',// 测试wxAppid 
 	

+ 19 - 1
common/http.api.js

@@ -12,6 +12,14 @@ const install = (Vue, vm) => {
 	let getLoginOut = (params = {}) => vm.$u.get(apiurl.getLoginOutUrl,params);
 	let getRoadAllList = (params = {}) => vm.$u.get(apiurl.getRoadAllListUrl,params);
 	let report = (params = {}) => vm.$u.post(apiurl.reportUrl, params);
+	let selectOtherExcptionList = (params = {}) => vm.$u.get(apiurl.selectOtherExcptionList,params);
+	let reportDetail = (params = {}) => vm.$u.get(apiurl.reportDetail,params);
+	let emergencyReportList = (params = {}) => vm.$u.get(apiurl.emergencyReportList,params);
+	let reportEmergency = (params = {}) => vm.$u.post(apiurl.reportEmergency, params);
+	let payeeReportList = (params = {}) => vm.$u.get(apiurl.payeeReportList,params);
+	let payeeReportDetail = (params = {}) => vm.$u.get(apiurl.payeeReportDetail,params);
+	let payeeReport = (params = {}) => vm.$u.post(apiurl.payeeReport, params);
+	let payeeExceptionType = (params = {}) => vm.$u.get(apiurl.payeeExceptionType,params);
 	let punchInfo = (params = {}) => vm.$u.get(apiurl.punchInfoUrl+params.roadNo);
 	let punchIn = (params = {}) => vm.$u.post(apiurl.punchInUrl, params);
 	let getDeviceList = (params = {}) => vm.$u.get(apiurl.getDeviceListUrl,params);
@@ -32,6 +40,7 @@ const install = (Vue, vm) => {
 	let updateInspecMsgStatus = (params = {}) => vm.$u.put(apiurl.updateInspecMsgStatusUrl,params);
 	let getUnreadMsgTotal = (params = {}) => vm.$u.get(apiurl.getUnreadMsgTotalUrl,params);
 	let deviceLockStatus = (params = {}) => vm.$u.get(apiurl.deviceLockStatusUrl,params);
+	let payeeList = (params = {}) => vm.$u.get(apiurl.payeeList,params);
 	
 	// 将各个定义的接口名称,统一放进对象挂载到vm.$u.api(因为vm就是this,也即this.$u.api)下
 	vm.$u.api = {
@@ -43,6 +52,14 @@ const install = (Vue, vm) => {
 		getLoginOut,
 		getRoadAllList,
 		report,
+		selectOtherExcptionList,
+		reportDetail,
+		emergencyReportList,
+		reportEmergency,
+		payeeReport,
+		payeeReportDetail,
+		payeeReportList,
+		payeeExceptionType,
 		punchInfo,
 		punchIn,
 		getDeviceList,
@@ -62,7 +79,8 @@ const install = (Vue, vm) => {
 		inspecmsgDetails,
 		updateInspecMsgStatus,
 		getUnreadMsgTotal,
-		deviceLockStatus
+		deviceLockStatus,
+		payeeList
 	};
 }
 

+ 70 - 0
pages.json

@@ -62,6 +62,76 @@
 				"navigationBarTitleText": "问题上报"
 			}
 		},
+		{
+			"path": "pages/report/otherReport/otherReportList",
+			"style": {
+				"navigationStyle":"custom",// 隐藏系统导航栏
+				"navigationBarTitleText": "其他问题"
+			}
+		},
+		{
+			"path": "pages/report/otherReport/details",
+			"style": {
+				"navigationStyle":"custom",// 隐藏系统导航栏
+				"navigationBarTitleText": "其他问题"
+			}
+		},
+		{
+			"path": "pages/report/otherReport/report",
+			"style": {
+				"navigationStyle":"custom",// 隐藏系统导航栏
+				"navigationBarTitleText": "其他问题"
+			}
+		},
+		{
+			"path": "pages/report/payeeReport/payeeReportList",
+			"style": {
+				"navigationStyle":"custom",// 隐藏系统导航栏
+				"navigationBarTitleText": "收费员问题"
+			}
+		},
+		{
+			"path": "pages/report/payeeReport/report",
+			"style": {
+				"navigationStyle":"custom",// 隐藏系统导航栏
+				"navigationBarTitleText": "收费员问题"
+			}
+		},
+		{
+			"path": "pages/report/payeeReport/details",
+			"style": {
+				"navigationStyle":"custom",// 隐藏系统导航栏
+				"navigationBarTitleText": "收费员问题"
+			}
+		},
+		{
+			"path": "pages/report/emergencyReport/emergencyReportList",
+			"style": {
+				"navigationStyle":"custom",// 隐藏系统导航栏
+				"navigationBarTitleText": "应急处置登记"
+			}
+		},
+		{
+			"path": "pages/report/emergencyReport/report",
+			"style": {
+				"navigationStyle":"custom",// 隐藏系统导航栏
+				"navigationBarTitleText": "应急处置登记"
+			}
+		},
+		{
+			"path": "pages/report/emergencyReport/details",
+			"style": {
+				"navigationStyle":"custom",// 隐藏系统导航栏
+				"navigationBarTitleText": "应急处置登记"
+			}
+		},
+		{
+			"path": "pages/payee/payee",
+			"style": {
+				"navigationStyle":"custom",// 隐藏系统导航栏
+				"navigationBarTitleText": "选择收费员"
+			}
+		},
 		{
 			"path": "pages/center/resetPass/resetPass",
 			"style": {

+ 18 - 5
pages/index/index.vue

@@ -68,13 +68,23 @@
 				</view>
 			</view>
 		</view>
-		<view class="list-block">
+		<view class="list-block report">
 			<view class="list-block-til  u-font-18">问题上报</view>
-			<view class="list-block-con u-flex u-flex-wrap u-row-left">
+			<view class="list-block-con u-flex u-flex-wrap u-row-between">
+				<view class="list-block-item"
+				 @click="openPage('pages/report/payeeReport/payeeReportList')">
+					<image class="img" src="../../static/img/report-payee.png" mode="widthFix"></image>
+					<view class="txt">收费员问题</view>
+				</view>
 				<view class="list-block-item"
-				 @click="openPage('pages/report/report')">
-					<image class="img" src="../../static/img/report.png" mode="widthFix"></image>
-					<view class="txt">问题上报</view>
+				 @click="openPage('pages/report/otherReport/otherReportList')">
+					<image class="img" src="../../static/img/report-other.png" mode="widthFix"></image>
+					<view class="txt">其他问题</view>
+				</view>
+				<view class="list-block-item"
+				 @click="openPage('pages/report/emergencyReport/emergencyReportList')">
+					<image class="img" src="../../static/img/report-emergency.png" mode="widthFix"></image>
+					<view class="txt">应急处置登记</view>
 				</view>
 			</view>
 		</view>
@@ -234,4 +244,7 @@
 		padding: 0 30rpx;
 		background-color: #fff;
 	}
+	.list-block.report{
+		.list-block-item{width: 30%;}
+	}
 </style>

+ 143 - 0
pages/payee/payee.vue

@@ -0,0 +1,143 @@
+<template>
+	<view>
+		<u-navbar
+		 title="选择收费员" 
+		 title-color="#fff" 
+		 :border-bottom="false" 
+		 :custom-back="customBack" 
+		 back-icon-color="#CCE8FF" 
+		 :background="{background: '#4D68DC' }">
+		 </u-navbar>
+		<u-search placeholder="搜索收费员姓名" v-model="keyword"  @search="search" @custom="search"></u-search>
+		<mescroll-uni ref="mescrollRef" @init="mescrollInit" :top="config.platform=='h5'?220:300" @down="downCallback" :up="upOption" @up="upCallback" @emptyclick="emptyClick">
+			<view class="">
+				<u-radio-group  v-model="selected" @change="radioGroupChange" width="50%">
+					<u-radio 
+						@change="radioChange(item)" 
+						v-for="(item, index) in dataList" :key="item.id" 
+						:name="item.id"
+						:disabled="item.disabled"
+					>
+						{{item.payeeName}}
+					</u-radio>
+				</u-radio-group>
+			</view>
+		</mescroll-uni>
+	</view>
+</template>
+
+<script>
+	import MescrollMixin from "@/uni_modules/mescroll-uni/components/mescroll-uni/mescroll-mixins.js";
+	export default{
+		mixins: [MescrollMixin], // 使用mixin (在main.js注册全局组件)
+		data(){
+			return{
+				keyword:'',
+				selected:'',
+				upOption:{
+					page: {
+						size: 150 // 每页数据的数量
+					},
+					// auto:false,
+					// use:false,
+					noMoreSize: 4, //如果列表已无数据,可设置列表的总数量要大于半页才显示无更多数据;避免列表数据过少(比如只有一条数据),显示无更多数据会不好看; 默认5
+					empty:{
+						tip: '~ 暂无数据 ~', // 提示
+						// btnText: '去看看'
+					}
+				},
+				dataList:[],
+			}
+		},
+		onLoad(){
+			
+		},
+		onShow(){
+		},
+		watch:{
+			// keyword:{
+			//   handler(val, oldVal){
+			// 	this.dataList.map((item)=>{
+			// 		if(item.payeeName.indexOf(val)!=-1){
+			// 			this.dataList.push(item);
+			// 		}
+			// 	})
+			//   },
+			// },
+		},
+		methods:{
+			customBack(){
+				uni.navigateBack();
+			},
+			/*上拉加载的回调: 其中page.num:当前页 从1开始, page.size:每页数据条数,默认10 */
+			upCallback(page) {
+				// console.log('vuex_user',this.vuex_user);
+				// console.log('page',page)
+				//联网加载数据
+				// let keyword = this.tabs[this.tabIndex]?.text;
+				let params ={
+					pageNum:page.num,
+					pageSize:page.size,
+					payeeName:this.keyword,
+					// roadNo:''
+				} 
+				this.$u.api.payeeList(params).then(curPageData=>{
+					console.log('curPageData',curPageData)
+					//联网成功的回调,隐藏下拉刷新和上拉加载的状态;
+					this.mescroll.endSuccess(curPageData.data.length);
+					// this.mescroll.endBySize(curPageData.rows.length, curPageData.total);
+					//设置列表数据
+					if(page.num == 1) this.dataList = []; //如果是第一页需手动制空列表
+					// curPageData.rows.map((item)=>{
+					// 	if(item.userId==this.vuex_user.userId){
+					// 		item.disabled = true
+					// 	}else{
+					// 		item.disabled = false
+					// 	}
+					// });
+					this.dataList=this.dataList.concat(curPageData.data); //追加新数据
+				}).catch((err)=>{
+					uni.showToast({
+						title:'链接失败'
+					});
+					console.log('err',err)
+					//联网失败, 结束加载
+					this.mescroll.endErr();
+				})
+			},
+			//点击空布局按钮的回调
+			emptyClick(){
+				
+			},
+			radioChange(item){
+				// console.log('radioChange',e);
+				// console.log('item',item);
+				this.$u.vuex('vuex_selected_payee.name',item.payeeName)
+			},
+			radioGroupChange(e){
+				// console.log('radioGroupChange',e);
+				this.selected = e;
+				this.$u.vuex('vuex_selected_payee.id',e)
+				console.log('radioGroupChange');
+				uni.navigateBack();
+			},
+			search(){
+				this.dataList = [];
+				this.mescroll.resetUpScroll();
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+.u-search{
+	margin: 24rpx!important;
+}
+.u-radio-group{
+	display: flex;
+	margin: 24rpx;
+	.u-radio{
+		margin-bottom: 24rpx;
+	}
+}
+</style>

+ 89 - 0
pages/report/emergencyReport/details.vue

@@ -0,0 +1,89 @@
+<template>
+	<view>
+		<u-navbar
+		 :title="title" 
+		 title-color="#fff" 
+		 :custom-back="customBack" 
+		 :border-bottom="false" 
+		 back-icon-color="#CCE8FF" 
+		 :background="{background: 'linear-gradient(99deg, #7A4398 0%, #5A5DB9 100%)' }"></u-navbar>
+		<view class="base-info">
+			<view class="base-info-item u-flex u-row-between">
+				<view class=""><b>路段/停车场:</b>{{pageData.roadName}}</view>
+			</view>
+			<view class="base-info-item">
+				<view class=""><b>问题描述:</b>{{pageData.exceprionDes}}</view>
+			</view>
+			<view class="base-info-item">
+				<view class=""><b>处理过程:</b>{{pageData.processDes}}</view>
+			</view>
+			<view class="base-info-item">
+				<view class="">
+					<b>图片:</b>
+					<view class="img-list">
+						<image class="img" v-for="(item,index) in pageData.imgList" @click="previewImage(index)" :src="item" mode="widthFix" :key="index"></image>
+					</view>
+				</view>
+			</view>
+		</view>
+
+		</view>
+	</view>
+</template>
+
+<script>
+	export default{
+		data(){
+			return{
+				title:'应急处置登记',
+				pageData:[],
+				id:'',
+				dataList:[],
+			}
+		},
+		onLoad(page){
+			this.id = page.id;
+		},
+		onShow(){
+			this.getReportDetail();
+		},
+		mounted() {
+		},
+		onReady() {
+			// this.$refs.uForm.setRules(this.rules);
+		},
+		methods:{
+			customBack(){
+				uni.navigateBack()
+			},
+			getReportDetail(){
+				this.$u.api.reportDetail({id:this.id}).then(res=>{
+					if(res.code==200){
+						this.pageData = res.data;
+						// console.log('reportDetail',res);
+					}else{
+						uni.showToast({
+							icon:'none',
+							title:res.msg
+						})
+					}
+					console.log('res',res);
+				}).catch(err=>{
+					console.log('err',err);
+				})
+			},
+			previewImage(index){
+				uni.previewImage({
+					current: index,
+					urls: this.pageData.imgList
+				});
+			}
+		}
+	}
+</script>
+<style>
+	page{background: #F3F3F3;}
+</style>
+<style lang="scss" scoped>
+@import  '../report.scss'
+</style>

+ 139 - 0
pages/report/emergencyReport/emergencyReportList.vue

@@ -0,0 +1,139 @@
+<template>
+	<view>
+		<u-navbar
+		 :title="title" 
+		 title-color="#fff" 
+		 :is-back="true"
+		 :custom-back="customBack" 
+		 :border-bottom="false" 
+		 back-icon-color="#CCE8FF" 
+		 :background="{background: 'linear-gradient(99deg, #7A4398 0%, #5A5DB9 100%)' }">
+			 <view class="navbar-right" slot="right" @click="handleReport">
+				<text>登记</text>
+			</view>
+		 </u-navbar>
+		<mescroll-uni ref="mescrollRef01" @init="mescrollInit" :top="config.platform=='h5'?100:180" :down="downOption" @down="downCallback" :up="upOption" @up="upCallback" @emptyclick="emptyClick">
+			<view class="report-list">
+				<view class="report-list-item" :class="{'arrearage':item.vehicleNoStatus}" v-for="item in dataList" :key="item.id"
+				@click="goDetails(item.id)">
+					<view class="u-flex u-row-between u-m-b-20">
+						<text>路段/停车场{{item.roadName}}</text>
+						<text class="u-tips-color">{{$u.timeFormat(item.createTime, 'mm月dd日hh:MM')}}</text>
+					</view>
+					<view class="u-flex u-row-between u-m-b-20">
+						<text class="u-line-1">处理员:{{item.processBy}}</text>
+						<u-icon name="arrow-right" color="#ddd" size="28"></u-icon>
+					</view>
+					<view class="u-flex u-row-between">
+						<text class="u-line-1">处理过程:{{item.processDes}}</text>
+					</view>
+				</view>
+			</view>
+		</mescroll-uni>
+	</view>
+</template>
+
+<script>
+	import MescrollMixin from "@/uni_modules/mescroll-uni/components/mescroll-uni/mescroll-mixins.js";
+	export default{
+		mixins: [MescrollMixin], // 使用mixin (在main.js注册全局组件)
+		components:{
+			
+		},
+		data(){
+			return{
+				title:"应急处置登记",
+				downOption:{
+					auto:false // 不自动加载 (mixin已处理第一个tab触发downCallback)
+				},
+				upOption:{
+					page: {
+						size: 10 // 每页数据的数量
+					},
+					auto:true,
+					// use:false,
+					noMoreSize: 4, //如果列表已无数据,可设置列表的总数量要大于半页才显示无更多数据;避免列表数据过少(比如只有一条数据),显示无更多数据会不好看; 默认5
+					empty:{
+						tip: '~ 暂无数据 ~', // 提示
+						// btnText: '去看看'
+					}
+				},
+				dataList:[],
+			}
+		},
+		onLoad(page){
+			console.log('page',page);
+		},
+		onShow(){
+		},
+		methods:{
+			customBack(){
+				this.$u.route({
+				  url: 'pages/index/index',
+				  type:'switchTab'
+				})
+			},
+			openPage(path,id) {
+			  this.$u.route({
+			    url: path,
+				params:{
+					id:id
+				}
+			  })
+			},
+			goDetails(id){
+				this.$u.route({
+				  url: 'pages/report/emergencyReport/details',
+					params:{
+						id:id
+					}
+				})
+			},
+			/*上拉加载的回调: 其中page.num:当前页 从1开始, page.size:每页数据条数,默认10 */
+			upCallback(page) {
+				// console.log('page',page);
+				let params ={
+					pageNum:page.num,
+					pageSize:page.size
+				};
+				this.$u.api.emergencyReportList(params).then(curPageData=>{
+					// console.log('word',word);
+					 console.log('curPageData',curPageData);
+					//联网成功的回调,隐藏下拉刷新和上拉加载的状态;
+					this.mescroll.endSuccess(curPageData.data.total);
+					this.mescroll.endBySize(curPageData.data.rows.length, curPageData.data.total);
+					//设置列表数据
+					if(page.num == 1) this.dataList = []; //如果是第一页需手动制空列表
+					this.dataList=this.dataList.concat(curPageData.data.rows); //追加新数据
+					console.log('this.dataList',this.dataList);
+				}).catch(()=>{
+					console.log('catch');
+					//联网失败, 结束加载
+					this.mescroll.endErr();
+				})
+			},
+			//点击空布局按钮的回调
+			emptyClick(){
+				uni.showToast({
+					title:'点击了按钮,具体逻辑自行实现'
+				})
+			},
+			refresh(){
+				this.mescroll.resetUpScroll( );
+			},
+			handleReport(){
+				// console.log('handleReport');
+				this.$u.route({
+				  url: 'pages/report/emergencyReport/report',
+				  // type:'redirect',
+				})
+			}
+		}
+	}
+</script>
+<style>
+	page{background-color: #F3F3F3;}
+</style>
+<style lang="scss" scoped>
+@import  '../report.scss'
+</style>

+ 166 - 0
pages/report/emergencyReport/report.vue

@@ -0,0 +1,166 @@
+<template>
+	<view class="f-padding">
+		<u-navbar
+		 :title="title" 
+		 title-color="#fff"
+		 :border-bottom="false"
+		 :custom-back="customBack"
+		 back-icon-color="#CCE8FF" 
+		 :background="{background: 'linear-gradient(99deg, #7A4398 0%, #5A5DB9 100%)' }"></u-navbar>
+		<u-form :model="form" ref="uForm">
+			<u-form-item label="路段/停车场:" prop="roadName" required :label-width="labelWidth">
+				<u-input v-model="form.roadName" type="select" :border="true" placeholder="请选择" @click="selectShow = true" />
+				<u-select v-model="selectShow" :list="roadList" value-name="roadNo" label-name="roadName" @confirm="selectConfirm"></u-select>
+			</u-form-item>
+			<u-form-item label="问题描述" prop="exceprionDes" required :label-width="labelWidth">
+				<u-input type="textarea" :border="true" maxlength="200" v-model="form.exceprionDes" />
+			</u-form-item>
+			<u-form-item label="图片说明" :label-width="labelWidth" :border-bottom="false">
+				<u-upload ref="uploadRef" :action="action" max-count="3"></u-upload>
+			</u-form-item>
+			<u-form-item label="处理员" prop="processBy" required :label-width="labelWidth">
+				<u-input type="text" :border="true" maxlength="200" v-model="form.processBy" />
+			</u-form-item>
+			<u-form-item label="处理过程" prop="processDes" required :label-width="labelWidth">
+				<u-input type="textarea" :border="true" maxlength="500" v-model="form.processDes" />
+			</u-form-item>
+		</u-form>
+		<u-button type="primary" @click="submit" style="margin-top: 20vh;">提交</u-button>
+	</view>
+</template>
+
+<script>
+	export default{
+		data(){
+			return{
+				title:'应急处置登记',
+				labelWidth:190,
+				action:this.config.upFileUrl,
+				selectShow:false,
+				selectList:[],
+				roadList:[],
+				form:{
+					roadName:'',
+					roadNo:'',
+					exceprionDes:'',
+					imgList:[]
+				},
+				rules:{
+					roadName: [
+						{ 
+							required: true, 
+							message: '请选择路段', 
+							trigger: ['change','blur'],
+						}
+					],
+					exceprionDes: [
+						{ 
+							required: true, 
+							message: '请输入内容', 
+							trigger: ['change','blur'],
+						}
+					],
+					processBy: [
+						{ 
+							required: true, 
+							message: '请输入处理员', 
+							trigger: ['change','blur'],
+						}
+					],
+					processDes: [
+						{ 
+							required: true, 
+							message: '请输入处理过程', 
+							trigger: ['change','blur'],
+						}
+					],
+				}
+			}
+		},
+		onLoad(){
+			
+		},
+		onShow(){
+			this.getRoadAllList();
+		},
+		onReady() {
+			this.$refs.uForm.setRules(this.rules);
+		},
+		methods:{
+			customBack(){
+				// uni.reLaunch({
+				//     url: '/pages/index/index'
+				// });
+				uni.navigateBack()
+			},
+			getRoadAllList(){
+				this.$u.api.getRoadAllList().then(res=>{
+					if(res.code==200){
+						this.roadList = res.data;
+						// console.log('getDeviceStatis',res);
+					}else{
+						uni.showToast({
+							icon:'none',
+							title:res.msg
+						})
+					}
+					console.log('res',res);
+				}).catch(err=>{
+					console.log('err',err);
+				})
+			},
+			selectConfirm(e){
+				// console.log('e',e);
+				this.form.roadNo = e[0].value;
+				this.form.roadName = e[0].label;
+				// console.log('this.form',this.form);
+			},
+			submit(){
+				let that = this;
+				this.$refs.uForm.validate(valid => {
+					if (valid) {
+						console.log('验证通过');
+						// delete this.dealForm.selectedUserList;
+						let files = [];
+						// 通过filter,筛选出上传进度为100的文件(因为某些上传失败的文件,进度值不为100,这个是可选的操作)
+						files = this.$refs.uploadRef.lists.filter(val => {
+							return val.progress == 100;
+						})
+						console.log('files',files);
+						// 如果您不需要进行太多的处理,直接如下即可
+						// files = this.$refs.uUpload.lists;
+						files.forEach(function(item){
+							if(item.response.data){that.form.imgList.push(item.response.data.url)}
+						});
+						this.$u.api.reportEmergency(this.form).then(res=>{
+							console.log('res',res);
+							// this.form = {};
+							uni.showToast({
+								icon:'none',
+								title:res.msg,
+								duration:1500,
+							});
+							setTimeout(()=>{
+								uni.switchTab({
+									url: '/pages/index/index',
+								})
+							},1500)
+						}).catch(err=>{
+							uni.showToast({
+								icon:'none',
+								title:err.msg
+							})
+							console.log('err',err);
+						})
+					} else {
+						console.log('验证失败');
+					}
+				});
+			},
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	// @import  './report.scss'
+</style>

+ 86 - 0
pages/report/otherReport/details.vue

@@ -0,0 +1,86 @@
+<template>
+	<view>
+		<u-navbar
+		 :title="title" 
+		 title-color="#fff" 
+		 :custom-back="customBack" 
+		 :border-bottom="false" 
+		 back-icon-color="#CCE8FF" 
+		 :background="{background: 'linear-gradient(99deg, #7A4398 0%, #5A5DB9 100%)' }"></u-navbar>
+		<view class="base-info">
+			<view class="base-info-item u-flex u-row-between">
+				<view class=""><b>路段/停车场:</b>{{pageData.roadName}}</view>
+			</view>
+			<view class="base-info-item">
+				<view class=""><b>问题描述:</b>{{pageData.exceprionDes}}</view>
+			</view>
+			<view class="base-info-item">
+				<view class="">
+					<b>图片:</b>
+					<view class="img-list">
+						<image class="img" v-for="(item,index) in pageData.imgList" @click="previewImage(index)" :src="item" mode="widthFix" :key="index"></image>
+					</view>
+				</view>
+			</view>
+		</view>
+
+		</view>
+	</view>
+</template>
+
+<script>
+	export default{
+		data(){
+			return{
+				title:'其他问题',
+				pageData:[],
+				id:'',
+				dataList:[],
+			}
+		},
+		onLoad(page){
+			this.id = page.id;
+		},
+		onShow(){
+			this.getReportDetail();
+		},
+		mounted() {
+		},
+		onReady() {
+			// this.$refs.uForm.setRules(this.rules);
+		},
+		methods:{
+			customBack(){
+				uni.navigateBack()
+			},
+			getReportDetail(){
+				this.$u.api.reportDetail({id:this.id}).then(res=>{
+					if(res.code==200){
+						this.pageData = res.data;
+						// console.log('reportDetail',res);
+					}else{
+						uni.showToast({
+							icon:'none',
+							title:res.msg
+						})
+					}
+					console.log('res',res);
+				}).catch(err=>{
+					console.log('err',err);
+				})
+			},
+			previewImage(index){
+				uni.previewImage({
+					current: index,
+					urls: this.pageData.imgList
+				});
+			}
+		}
+	}
+</script>
+<style>
+	page{background: #F3F3F3;}
+</style>
+<style lang="scss" scoped>
+@import  '../report.scss'
+</style>

+ 136 - 0
pages/report/otherReport/otherReportList.vue

@@ -0,0 +1,136 @@
+<template>
+	<view>
+		<u-navbar
+		 :title="title" 
+		 title-color="#fff" 
+		 :is-back="true"
+		 :custom-back="customBack" 
+		 :border-bottom="false" 
+		 back-icon-color="#CCE8FF" 
+		 :background="{background: 'linear-gradient(99deg, #7A4398 0%, #5A5DB9 100%)' }">
+			 <view class="navbar-right" slot="right" @click="handleReport">
+				<text>登记</text>
+			</view>
+		 </u-navbar>
+		<mescroll-uni ref="mescrollRef01" @init="mescrollInit" :top="config.platform=='h5'?100:180" :down="downOption" @down="downCallback" :up="upOption" @up="upCallback" @emptyclick="emptyClick">
+			<view class="report-list">
+				<view class="report-list-item" :class="{'arrearage':item.vehicleNoStatus}" v-for="item in dataList" :key="item.id"
+				@click="goDetails(item.id)">
+					<view class="u-flex u-row-between u-m-b-20">
+						<text>路段/停车场{{item.roadName}}</text>
+						<text class="u-tips-color">{{$u.timeFormat(item.createTime, 'mm月dd日hh:MM')}}</text>
+					</view>
+					<view class="u-flex u-row-between">
+						<text class="u-line-1">问题描述:{{item.exceprionDes}}</text>
+						<u-icon name="arrow-right" color="#ddd" size="28"></u-icon>
+					</view>
+				</view>
+			</view>
+		</mescroll-uni>
+	</view>
+</template>
+
+<script>
+	import MescrollMixin from "@/uni_modules/mescroll-uni/components/mescroll-uni/mescroll-mixins.js";
+	export default{
+		mixins: [MescrollMixin], // 使用mixin (在main.js注册全局组件)
+		components:{
+			
+		},
+		data(){
+			return{
+				title:"其他问题",
+				downOption:{
+					auto:false // 不自动加载 (mixin已处理第一个tab触发downCallback)
+				},
+				upOption:{
+					page: {
+						size: 10 // 每页数据的数量
+					},
+					auto:true,
+					// use:false,
+					noMoreSize: 4, //如果列表已无数据,可设置列表的总数量要大于半页才显示无更多数据;避免列表数据过少(比如只有一条数据),显示无更多数据会不好看; 默认5
+					empty:{
+						tip: '~ 暂无数据 ~', // 提示
+						// btnText: '去看看'
+					}
+				},
+				dataList:[],
+			}
+		},
+		onLoad(page){
+			console.log('page',page);
+		},
+		onShow(){
+		},
+		methods:{
+			customBack(){
+				this.$u.route({
+				  url: 'pages/index/index',
+				  type:'switchTab'
+				})
+			},
+			openPage(path,id) {
+			  this.$u.route({
+			    url: path,
+				params:{
+					id:id
+				}
+			  })
+			},
+			goDetails(id){
+				this.$u.route({
+				  url: 'pages/report/otherReport/details',
+					params:{
+						id:id
+					}
+				})
+			},
+			/*上拉加载的回调: 其中page.num:当前页 从1开始, page.size:每页数据条数,默认10 */
+			upCallback(page) {
+				// console.log('page',page);
+				let params ={
+					pageNum:page.num,
+					pageSize:page.size
+				};
+				this.$u.api.selectOtherExcptionList(params).then(curPageData=>{
+					// console.log('word',word);
+					 console.log('curPageData',curPageData);
+					//联网成功的回调,隐藏下拉刷新和上拉加载的状态;
+					this.mescroll.endSuccess(curPageData.data.total);
+					this.mescroll.endBySize(curPageData.data.rows.length, curPageData.data.total);
+					//设置列表数据
+					if(page.num == 1) this.dataList = []; //如果是第一页需手动制空列表
+					this.dataList=this.dataList.concat(curPageData.data.rows); //追加新数据
+					console.log('this.dataList',this.dataList);
+				}).catch(()=>{
+					console.log('catch');
+					//联网失败, 结束加载
+					this.mescroll.endErr();
+				})
+			},
+			//点击空布局按钮的回调
+			emptyClick(){
+				uni.showToast({
+					title:'点击了按钮,具体逻辑自行实现'
+				})
+			},
+			refresh(){
+				this.mescroll.resetUpScroll( );
+			},
+			handleReport(){
+				console.log('handleReport');
+				this.$u.route({
+				  url: 'pages/report/otherReport/report',
+				  // type:'redirect',
+				})
+			}
+		}
+	}
+</script>
+<style>
+	page{background-color: #F3F3F3;}
+</style>
+<style lang="scss" scoped>
+@import  '../report.scss'
+</style>

+ 146 - 0
pages/report/otherReport/report.vue

@@ -0,0 +1,146 @@
+<template>
+	<view class="f-padding">
+		<u-navbar
+		 :title="title" 
+		 title-color="#fff"
+		 :border-bottom="false"
+		 :custom-back="customBack"
+		 back-icon-color="#CCE8FF" 
+		 :background="{background: 'linear-gradient(99deg, #7A4398 0%, #5A5DB9 100%)' }"></u-navbar>
+		<u-form :model="form" ref="uForm">
+			<u-form-item label="路段/停车场:" prop="roadName" required :label-width="labelWidth">
+				<u-input v-model="form.roadName" type="select" :border="true" placeholder="请选择" @click="selectShow = true" />
+				<u-select v-model="selectShow" :list="roadList" value-name="roadNo" label-name="roadName" @confirm="selectConfirm"></u-select>
+			</u-form-item>
+			<u-form-item label="问题描述" prop="exceprionDes" required :label-width="labelWidth">
+				<u-input type="textarea" :border="true" maxlength="200" v-model="form.exceprionDes" />
+			</u-form-item>
+			<u-form-item label="图片说明" :label-width="labelWidth" :border-bottom="false">
+				<u-upload ref="uploadRef" :action="action" max-count="3"></u-upload>
+			</u-form-item>
+		</u-form>
+		<u-button type="primary" @click="submit" style="margin-top: 20vh;">提交</u-button>
+	</view>
+</template>
+
+<script>
+	export default{
+		data(){
+			return{
+				title:'问题上报',
+				labelWidth:190,
+				action:this.config.upFileUrl,
+				selectShow:false,
+				selectList:[],
+				roadList:[],
+				form:{
+					roadName:'',
+					roadNo:'',
+					exceprionDes:'',
+					imgList:[]
+				},
+				rules:{
+					roadName: [
+						{ 
+							required: true, 
+							message: '请选择路段', 
+							trigger: ['change','blur'],
+						}
+					],
+					exceprionDes: [
+						{ 
+							required: true, 
+							message: '请输入内容', 
+							trigger: ['change','blur'],
+						}
+					],
+				}
+			}
+		},
+		onLoad(){
+			
+		},
+		onShow(){
+			this.getRoadAllList();
+		},
+		onReady() {
+			this.$refs.uForm.setRules(this.rules);
+		},
+		methods:{
+			customBack(){
+				// uni.reLaunch({
+				//     url: '/pages/index/index'
+				// });
+				uni.navigateBack()
+			},
+			getRoadAllList(){
+				this.$u.api.getRoadAllList().then(res=>{
+					if(res.code==200){
+						this.roadList = res.data;
+						// console.log('getDeviceStatis',res);
+					}else{
+						uni.showToast({
+							icon:'none',
+							title:res.msg
+						})
+					}
+					console.log('res',res);
+				}).catch(err=>{
+					console.log('err',err);
+				})
+			},
+			selectConfirm(e){
+				// console.log('e',e);
+				this.form.roadNo = e[0].value;
+				this.form.roadName = e[0].label;
+				// console.log('this.form',this.form);
+			},
+			submit(){
+				let that = this;
+				this.$refs.uForm.validate(valid => {
+					if (valid) {
+						console.log('验证通过');
+						// delete this.dealForm.selectedUserList;
+						let files = [];
+						// 通过filter,筛选出上传进度为100的文件(因为某些上传失败的文件,进度值不为100,这个是可选的操作)
+						files = this.$refs.uploadRef.lists.filter(val => {
+							return val.progress == 100;
+						})
+						console.log('files',files);
+						// 如果您不需要进行太多的处理,直接如下即可
+						// files = this.$refs.uUpload.lists;
+						files.forEach(function(item){
+							if(item.response.data){that.form.imgList.push(item.response.data.url)}
+						});
+						this.$u.api.report(this.form).then(res=>{
+							console.log('res',res);
+							// this.form = {};
+							uni.showToast({
+								icon:'none',
+								title:res.msg,
+								duration:1500,
+							});
+							setTimeout(()=>{
+								uni.switchTab({
+									url: '/pages/index/index',
+								})
+							},1500)
+						}).catch(err=>{
+							uni.showToast({
+								icon:'none',
+								title:err.msg
+							})
+							console.log('err',err);
+						})
+					} else {
+						console.log('验证失败');
+					}
+				});
+			},
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	// @import  './report.scss'
+</style>

+ 95 - 0
pages/report/payeeReport/details.vue

@@ -0,0 +1,95 @@
+<template>
+	<view>
+		<u-navbar
+		 :title="title" 
+		 title-color="#fff" 
+		 :custom-back="customBack" 
+		 :border-bottom="false" 
+		 back-icon-color="#CCE8FF" 
+		 :background="{background: 'linear-gradient(99deg, #7A4398 0%, #5A5DB9 100%)' }"></u-navbar>
+		<view class="base-info">
+			<view class="base-info-item u-flex u-row-between">
+				<view class=""><b>路段/停车场:</b>{{pageData.roadName}}</view>
+			</view>
+			<view class="base-info-item">
+				<view class=""><b>上报员:</b>{{pageData.createBy}}</view>
+			</view>
+			<view class="base-info-item">
+				<view class=""><b>收费员:</b>{{pageData.payeeName}}</view>
+			</view>
+			<view class="base-info-item">
+				<view class=""><b>问题类型:</b>{{pageData.payeeExceptionTypeName}}</view>
+			</view>
+			<view class="base-info-item">
+				<view class=""><b>补充说明:</b>{{pageData.exceprionDes}}</view>
+			</view>
+			<view class="base-info-item">
+				<view class="">
+					<b>图片:</b>
+					<view class="img-list">
+						<image class="img" @click="previewImage(index)" v-for="(item,index) in pageData.imgList" :src="item" mode="widthFix" :key="index"></image>
+					</view>
+				</view>
+			</view>
+		</view>
+
+		</view>
+	</view>
+</template>
+
+<script>
+	export default{
+		data(){
+			return{
+				title:'收费员问题',
+				pageData:[],
+				id:'',
+				dataList:[],
+			}
+		},
+		onLoad(page){
+			this.id = page.id;
+		},
+		onShow(){
+			this.getReportDetail();
+		},
+		mounted() {
+		},
+		onReady() {
+			// this.$refs.uForm.setRules(this.rules);
+		},
+		methods:{
+			customBack(){
+				uni.navigateBack()
+			},
+			getReportDetail(){
+				this.$u.api.payeeReportDetail({id:this.id}).then(res=>{
+					if(res.code==200){
+						this.pageData = res.data;
+						// console.log('payeeReportDetail',res);
+					}else{
+						uni.showToast({
+							icon:'none',
+							title:res.msg
+						})
+					}
+					console.log('res',res);
+				}).catch(err=>{
+					console.log('err',err);
+				})
+			},
+			previewImage(index){
+				uni.previewImage({
+					current: index,
+					urls: this.pageData.imgList
+				});
+			}
+		}
+	}
+</script>
+<style>
+	page{background: #F3F3F3;}
+</style>
+<style lang="scss" scoped>
+@import  '../report.scss'
+</style>

+ 139 - 0
pages/report/payeeReport/payeeReportList.vue

@@ -0,0 +1,139 @@
+<template>
+	<view>
+		<u-navbar
+		 :title="title" 
+		 title-color="#fff" 
+		 :is-back="true"
+		 :custom-back="customBack" 
+		 :border-bottom="false" 
+		 back-icon-color="#CCE8FF" 
+		 :background="{background: 'linear-gradient(99deg, #7A4398 0%, #5A5DB9 100%)' }">
+			 <view class="navbar-right" slot="right" @click="handleReport">
+				<text>登记</text>
+			</view>
+		 </u-navbar>
+		<mescroll-uni ref="mescrollRef01" @init="mescrollInit" :top="config.platform=='h5'?100:180" :down="downOption" @down="downCallback" :up="upOption" @up="upCallback" @emptyclick="emptyClick">
+			<view class="report-list">
+				<view class="report-list-item" :class="{'arrearage':item.vehicleNoStatus}" v-for="item in dataList" :key="item.id"
+				@click="goDetails(item.id)">
+					<view class="u-flex u-row-between u-m-b-20">
+						<text>路段/停车场{{item.roadName}}</text>
+						<text class="u-tips-color">{{$u.timeFormat(item.createTime, 'mm月dd日hh:MM')}}</text>
+					</view>
+					<view class="u-flex u-row-between u-m-b-20">
+						<text class="u-line-1">收费员:{{item.payeeName}}</text>
+						<u-icon name="arrow-right" color="#ddd" size="28"></u-icon>
+					</view>
+					<view class="u-flex u-row-between">
+						<text class="u-line-1">问题类型:{{item.payeeExceptionTypeName}}</text>
+					</view>
+				</view>
+			</view>
+		</mescroll-uni>
+	</view>
+</template>
+
+<script>
+	import MescrollMixin from "@/uni_modules/mescroll-uni/components/mescroll-uni/mescroll-mixins.js";
+	export default{
+		mixins: [MescrollMixin], // 使用mixin (在main.js注册全局组件)
+		components:{
+			
+		},
+		data(){
+			return{
+				title:"收费员问题",
+				downOption:{
+					auto:false // 不自动加载 (mixin已处理第一个tab触发downCallback)
+				},
+				upOption:{
+					page: {
+						size: 10 // 每页数据的数量
+					},
+					auto:true,
+					// use:false,
+					noMoreSize: 4, //如果列表已无数据,可设置列表的总数量要大于半页才显示无更多数据;避免列表数据过少(比如只有一条数据),显示无更多数据会不好看; 默认5
+					empty:{
+						tip: '~ 暂无数据 ~', // 提示
+						// btnText: '去看看'
+					}
+				},
+				dataList:[],
+			}
+		},
+		onLoad(page){
+			console.log('page',page);
+		},
+		onShow(){
+		},
+		methods:{
+			customBack(){
+				this.$u.route({
+				  url: 'pages/index/index',
+				  type:'switchTab'
+				})
+			},
+			openPage(path,id) {
+			  this.$u.route({
+			    url: path,
+				params:{
+					id:id
+				}
+			  })
+			},
+			goDetails(id){
+				this.$u.route({
+				  url: 'pages/report/payeeReport/details',
+					params:{
+						id:id
+					}
+				})
+			},
+			/*上拉加载的回调: 其中page.num:当前页 从1开始, page.size:每页数据条数,默认10 */
+			upCallback(page) {
+				// console.log('page',page);
+				let params ={
+					pageNum:page.num,
+					pageSize:page.size
+				};
+				this.$u.api.payeeReportList(params).then(curPageData=>{
+					// console.log('word',word);
+					 console.log('curPageData',curPageData);
+					//联网成功的回调,隐藏下拉刷新和上拉加载的状态;
+					this.mescroll.endSuccess(curPageData.data.total);
+					this.mescroll.endBySize(curPageData.data.rows.length, curPageData.data.total);
+					//设置列表数据
+					if(page.num == 1) this.dataList = []; //如果是第一页需手动制空列表
+					this.dataList=this.dataList.concat(curPageData.data.rows); //追加新数据
+					console.log('this.dataList',this.dataList);
+				}).catch(()=>{
+					console.log('catch');
+					//联网失败, 结束加载
+					this.mescroll.endErr();
+				})
+			},
+			//点击空布局按钮的回调
+			emptyClick(){
+				uni.showToast({
+					title:'点击了按钮,具体逻辑自行实现'
+				})
+			},
+			refresh(){
+				this.mescroll.resetUpScroll( );
+			},
+			handleReport(){
+				console.log('handleReport');
+				this.$u.route({
+				  url: 'pages/report/payeeReport/report',
+				  // type:'redirect',
+				})
+			}
+		}
+	}
+</script>
+<style>
+	page{background-color: #F3F3F3;}
+</style>
+<style lang="scss" scoped>
+@import  '../report.scss'
+</style>

+ 245 - 0
pages/report/payeeReport/report.vue

@@ -0,0 +1,245 @@
+<template>
+	<view class="f-padding">
+		<u-navbar
+		 :title="title" 
+		 title-color="#fff"
+		 :border-bottom="false"
+		 :custom-back="customBack"
+		 back-icon-color="#CCE8FF" 
+		 :background="{background: 'linear-gradient(99deg, #7A4398 0%, #5A5DB9 100%)' }"></u-navbar>
+		<u-form :model="form" ref="uForm">
+			<u-form-item label="路段/停车场:" prop="roadName" required :label-width="labelWidth">
+				<u-input v-model="form.roadName" type="select" :border="true" placeholder="请选择" @click="selectShow = true" />
+				<u-select v-model="selectShow" :list="roadList" value-name="roadNo" label-name="roadName" @confirm="selectConfirm"></u-select>
+			</u-form-item>
+			<u-form-item label="收费员" prop="payeeName" required :label-width="labelWidth">
+				<u-input type="text" :border="true" maxlength="200" @click="$u.route('/pages/payee/payee')" v-model="form.payeeName" disabled />
+			<!-- 	<u-input v-model="form.payeeName" type="select" :border="true" placeholder="请选择" @click="selectPayeeShow = true" />
+				<u-select v-model="selectPayeeShow" :list="payeeList" value-name="roadNo" label-name="roadName" @confirm="selectPayeeConfirm"></u-select> -->
+			</u-form-item>
+			<u-form-item label="问题类型:"  required :label-width="labelWidth">
+				<!-- <u-input v-model="form.payeeExceptionType" type="select" :border="true" placeholder="请选择" @click="problemShow = true" />
+				<u-select v-model="problemShow" :list="payeeExceptionTypeList" value-name="dictValue" label-name="dictLabel" @confirm="problemConfirm"></u-select> -->
+				<u-checkbox-group @change="checkboxGroupChange"  width="50%">
+					<u-checkbox 
+					size="24"
+						@change="checkboxChange" 
+						v-model="item.checked"
+						:disabled="item.disabled"
+						v-for="(item, index) in payeeExceptionTypeList" :key="item.dictValue" 
+						:name="item.dictValue"
+						>{{item.dictLabel}}
+					</u-checkbox>
+				</u-checkbox-group>
+			</u-form-item>
+			<u-form-item label="补充说明" prop="exceprionDes" required :label-width="labelWidth">
+				<u-input type="textarea" :border="true" maxlength="200" v-model="form.exceprionDes" />
+			</u-form-item>
+			<u-form-item label="图片说明" :label-width="labelWidth" :border-bottom="false">
+				<u-upload ref="uploadRef" :action="action" max-count="3"></u-upload>
+			</u-form-item>
+		</u-form>
+		<u-button type="primary" @click="submit" style="margin-top: 20vh;">提交</u-button>
+	</view>
+</template>
+
+<script>
+	export default{
+		data(){
+			return{
+				title:'问题上报',
+				labelWidth:190,
+				action:this.config.upFileUrl,
+				selectShow:false,
+				problemShow:false,
+				selectPayeeShow:false,
+				selectList:[],
+				roadList:[],
+				payeeList:[],
+				payeeExceptionTypeList:[],
+				form:{
+					roadName:'',
+					roadNo:'',
+					exceprionDes:'',
+					imgList:[],
+					payeeExceptionType:'',
+				},
+				rules:{
+					roadName: [
+						{ 
+							required: true, 
+							message: '请选择路段', 
+							trigger: ['change','blur'],
+						}
+					],
+					payeeName: [
+						{ 
+							required: true, 
+							message: '请选择收费员', 
+							trigger: ['change','blur'],
+						}
+					],
+					payeeExceptionType: [
+						{ 
+							required: true, 
+							message: '请选择问题类型', 
+							trigger: ['change','blur'],
+						}
+					],
+					exceprionDes: [
+						{ 
+							required: true, 
+							message: '请输入内容', 
+							trigger: ['change','blur'],
+						}
+					],
+				}
+			}
+		},
+		onLoad(){
+			
+		},
+		onShow(){
+			this.getRoadAllList();
+			this.getPayeeExceptionType();
+			this.form.payeeExceptionType = '';
+			// this.getPayeeList();
+			this.form.payeeName = this.vuex_selected_payee.name;
+			this.form.payeeId = this.vuex_selected_payee.id;
+		},
+		onReady() {
+			this.$refs.uForm.setRules(this.rules);
+		},
+		methods:{
+			customBack(){
+				// uni.reLaunch({
+				//     url: '/pages/index/index'
+				// });
+				uni.navigateBack()
+			},
+			getRoadAllList(){
+				this.$u.api.getRoadAllList().then(res=>{
+					if(res.code==200){
+						this.roadList = res.data;
+						// console.log('getDeviceStatis',res);
+					}else{
+						uni.showToast({
+							icon:'none',
+							title:res.msg
+						})
+					}
+					console.log('res',res);
+				}).catch(err=>{
+					console.log('err',err);
+				})
+			},
+			getPayeeExceptionType(){
+				this.$u.api.payeeExceptionType().then(res=>{
+					if(res.code==200){
+						this.payeeExceptionTypeList = res.data.data;
+						// this.payeeExceptionType.forEach((item)=>{
+						// 	item.disabled = false
+						// 	item.checked = false;
+						// });
+						console.log('this.payeeExceptionTypeList',this.payeeExceptionTypeList);
+					}else{
+						uni.showToast({
+							icon:'none',
+							title:res.msg
+						})
+					}
+					console.log('res',res);
+				}).catch(err=>{
+					console.log('err',err);
+				})
+			},
+			// getPayeeList(){
+			// 	this.$u.api.payeeList().then(res=>{
+			// 		if(res.code==200){
+			// 			this.payeeList = res.data.data;
+			// 			// console.log('getDeviceStatis',res);
+			// 		}else{
+			// 			uni.showToast({
+			// 				icon:'none',
+			// 				title:res.msg
+			// 			})
+			// 		}
+			// 		console.log('res',res);
+			// 	}).catch(err=>{
+			// 		console.log('err',err);
+			// 	})
+			// },
+			selectConfirm(e){
+				// console.log('e',e);
+				this.form.roadNo = e[0].value;
+				this.form.roadName = e[0].label;
+				// console.log('this.form',this.form);
+			},
+			selectPayeeConfirm(e){
+				console.log('e',e);				
+			},
+			checkboxChange(e){
+				console.log('checkboxChange',e);
+			},
+			checkboxGroupChange(e){
+				console.log('checkboxGroupChange',e);
+				this.form.payeeExceptionType = e.toString();
+			},
+			submit(){
+				console.log('this.form',this.form);
+				if(this.form.payeeExceptionType.length<1){
+					uni.showToast({
+						icon:'error',
+						title:'请选择问题类型'
+					})					
+					return
+				}
+				
+				let that = this;
+				this.$refs.uForm.validate(valid => {
+					if (valid) {
+						console.log('验证通过');
+						// delete this.dealForm.selectedUserList;
+						let files = [];
+						// 通过filter,筛选出上传进度为100的文件(因为某些上传失败的文件,进度值不为100,这个是可选的操作)
+						files = this.$refs.uploadRef.lists.filter(val => {
+							return val.progress == 100;
+						})
+						console.log('files',files);
+						// 如果您不需要进行太多的处理,直接如下即可
+						// files = this.$refs.uUpload.lists;
+						files.forEach(function(item){
+							if(item.response.data){that.form.imgList.push(item.response.data.url)}
+						});
+						this.$u.api.payeeReport(this.form).then(res=>{
+							console.log('res',res);
+							// this.form = {};
+							uni.showToast({
+								icon:'none',
+								title:res.msg,
+								duration:1500,
+							});
+							setTimeout(()=>{
+								uni.switchTab({
+									url: '/pages/index/index',
+								})
+							},1500)
+						}).catch(err=>{
+							uni.showToast({
+								icon:'none',
+								title:err.msg
+							})
+							console.log('err',err);
+						})
+					} else {
+						console.log('验证失败');
+					}
+				});
+			},
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	// @import  './report.scss'
+</style>

+ 35 - 0
pages/report/report.scss

@@ -0,0 +1,35 @@
+.navbar-right{
+	color: #fff;
+	margin-right: 24rpx;
+}
+.report-list{
+	.report-list-item{
+		background: #fff;
+		padding: 24rpx;
+		margin: 24rpx;
+		border-radius: 10rpx;
+	}
+}
+
+
+// 详情
+.base-info{
+	background-color: #fff;
+	margin: 24rpx;
+	border-radius: 10rpx;
+	padding: 30rpx 30rpx 40rpx;
+	.base-info-item{
+		font-size: 28rpx;
+		font-weight: 400;
+		color: #6E6E6E;
+		line-height: 40rpx;
+		letter-spacing: 1rpx;
+		margin-bottom: 26rpx;
+	}
+	.img-list{
+		.img{
+			width: 30%;
+			margin-right: 3.3%;
+		}
+	}
+}

BIN
static/img/report-emergency.png


BIN
static/img/report-other.png


BIN
static/img/report-payee.png


+ 1 - 0
store/index.js

@@ -36,6 +36,7 @@ const store = new Vuex.Store({
 		vuex_hasLogin:lifeData.vuex_hasLogin?lifeData.vuex_hasLogin:false,
 		vuex_token: lifeData.vuex_token ? lifeData.vuex_token : '',
 		// 如果vuex_version无需保存到本地永久存储,无需lifeData.vuex_version方式
+		vuex_selected_payee:{},
 		vuex_version: '1.0.1',
 		back_url: ''
 	},