Procházet zdrojové kódy

城管端所有页面和api修改了路由

luosixu před 2 roky
rodič
revize
6df098226e

+ 21 - 0
api/city/car.js

@@ -0,0 +1,21 @@
+import request from '@/utils/request'
+
+// 车辆审批列表
+export function carList(data) {
+	return request({
+		'url': '/app/truck/list?pageNum=1&pageSize=1000',
+		'method': 'get',
+	})
+}
+
+// 车辆确认审核
+// auditType  状态
+// auditContent  驳回内容
+// id
+export function editState(data) {
+	return request({
+		'url': '/app/truck',
+		'method': 'put',
+		'data': data
+	})
+}

+ 26 - 0
api/city/city.js

@@ -0,0 +1,26 @@
+import request from '@/utils/request'
+
+// 获取城管信息
+export function cityInfo(id) {
+	return request({
+		'url': `/system/user/${id}`,
+		'method': 'get'
+	})
+}
+
+// 获取部门树
+export function tree() {
+	return request({
+		'url': '/system/dept/list?ancestors=111',
+		'method': 'get'
+	})
+}
+
+// 修改信息
+export function editCity(data) {
+	return request({
+		'url': '/system/user',
+		'method': 'put',
+		'data': data
+	})
+}

+ 10 - 0
api/city/company.js

@@ -0,0 +1,10 @@
+import request from '@/utils/request'
+
+
+// 企业信息列表
+export function companyInfoList() {
+	return request({
+		'url': '/app/company/list?pageNum=1&pageSize=1000',
+		'method': 'get',
+	})
+}

+ 18 - 0
api/city/path.js

@@ -0,0 +1,18 @@
+import request from '@/utils/request'
+
+// 企业信息列表
+export function pathList(data) {
+	return request({
+		'url': '/app/route/checkList?pageNum=1&pageSize=1000',
+		'method': 'get',
+	})
+}
+
+// 路线审核授权
+export function checkRoute(data) {
+	return request({
+		'url': '/app/route/checkRoute',
+		'method': 'put',
+		'data': data
+	})
+}

+ 34 - 0
api/city/record.js

@@ -0,0 +1,34 @@
+import request from '@/utils/request'
+
+// 运输记录列表
+export function recordList() {
+	return request({
+		'url': '/app/transportProcess/list?pageNum=1&pageSize=1000',
+		'method': 'get'
+	})
+}
+
+// 运输记录详情
+export function recordDetail(id) {
+	return request({
+		'url': `/app/transportProcess/${id}`,
+		'method': 'get'
+	})
+}
+
+// 运输记录审批
+export function recordCheck(data) {
+	return request({
+		'url': '/app/transportProcess/check',
+		'method': 'put',
+		'data': data
+	})
+}
+
+// 车辆异常状态字典接口
+export function errorState() {
+	return request({
+		'url': '/system/dict/data/type/transport_error_state',
+		'method': 'get',
+	})
+}

+ 18 - 0
api/city/transport.js

@@ -0,0 +1,18 @@
+import request from '@/utils/request'
+
+// 运输路线列表
+export function transportList() {
+	return request({
+		'url': '/app/transportApply/checkList?pageNum=1&pageSize=1000',
+		'method': 'get'
+	})
+}
+
+// 运输审核授权
+export function checkTransport(data) {
+	return request({
+		'url': '/app/transportApply/check',
+		'method': 'put',
+		'data': data
+	})
+}

+ 247 - 0
components/tki-tree/style.css

@@ -0,0 +1,247 @@
+.tki-tree-mask {
+	position: fixed;
+	top: 0rpx;
+	right: 0rpx;
+	bottom: 0rpx;
+	left: 0rpx;
+	z-index: 9998;
+	background-color: rgba(0, 0, 0, 0.6);
+	opacity: 0;
+	transition: all 0.3s ease;
+	visibility: hidden;
+}
+
+.tki-tree-mask.show {
+	visibility: visible;
+	opacity: 1;
+}
+
+.tki-tree-cnt {
+	position: fixed;
+	top: 0rpx;
+	right: 0rpx;
+	bottom: 0rpx;
+	left: 0rpx;
+	z-index: 9999;
+	top: 1044rpx;
+	transition: all 0.3s ease;
+	transform: translateY(100%);
+}
+
+.tki-tree-cnt.show {
+	transform: translateY(0);
+}
+
+.tki-tree-bar {
+	background-color: #fff;
+	height: 72rpx;
+	padding-left: 20rpx;
+	padding-right: 20rpx;
+	display: flex;
+	justify-content: space-between;
+	align-items: center;
+	box-sizing: border-box;
+	border-bottom-width: 1rpx !important;
+	border-bottom-style: solid;
+	border-bottom-color: #f5f5f5;
+	font-size: 32rpx;
+	color: #757575;
+	line-height: 1;
+}
+
+.tki-tree-bar-confirm {
+	color: #07bb07;
+}
+
+.tki-tree-view {
+	position: absolute;
+	top: 0rpx;
+	right: 0rpx;
+	bottom: 0rpx;
+	left: 0rpx;
+	top: 72rpx;
+	background-color: rgba(255, 255, 255, 0.7);
+	padding-top: 20rpx;
+	padding-right: 20rpx;
+	padding-bottom: 20rpx;
+	padding-left: 20rpx;
+}
+
+.tki-tree-view-sc {
+	height: 100%;
+	overflow: hidden;
+}
+
+.tki-tree-item {
+	display: flex;
+	justify-content: space-between;
+	align-items: center;
+	font-size: 26rpx;
+	color: #333333;
+	line-height: 1;
+	height: 0;
+	opacity: 0;
+	transition: 0.2s;
+	position: relative;
+	overflow: hidden;
+	/* font-weight: bold; */
+}
+
+.tki-tree-item.show {
+	height: 80rpx;
+	opacity: 1;
+}
+
+.tki-tree-item.showchild:before {
+	transform: rotate(90deg);
+}
+
+.tki-tree-item.last:before {
+	opacity: 0;
+}
+
+.tki-tree-icon {
+	width: 26rpx;
+	height: 26rpx;
+	margin-right: 8rpx;
+}
+
+.tki-tree-label {
+	flex: 1;
+	display: flex;
+	align-items: center;
+	height: 100%;
+	line-height: 1.2;
+}
+
+.tki-tree-check {
+	width: 40px;
+	height: 40px;
+	display: flex;
+	justify-content: center;
+	align-items: center;
+}
+
+.tki-tree-check-yes,
+.tki-tree-check-no {
+	width: 35rpx;
+	height: 35rpx;
+	border-top-left-radius: 20%;
+	border-top-right-radius: 20%;
+	border-bottom-right-radius: 20%;
+	border-bottom-left-radius: 20%;
+	border-top-width: 1rpx;
+	border-left-width: 1rpx;
+	border-bottom-width: 1rpx;
+	border-right-width: 1rpx;
+	border-style: solid;
+	border-color: #7FB5FF;
+	display: flex;
+	justify-content: center;
+	align-items: center;
+	box-sizing: border-box;
+}
+
+.tki-tree-check-yes-b {
+	width: 20rpx;
+	height: 20rpx;
+	border-top-left-radius: 20%;
+	border-top-right-radius: 20%;
+	border-bottom-right-radius: 20%;
+	border-bottom-left-radius: 20%;
+	background-color: #E4A439;
+}
+
+.tki-tree-check .radio {
+	border-top-left-radius: 50%;
+	border-top-right-radius: 50%;
+	border-bottom-right-radius: 50%;
+	border-bottom-left-radius: 50%;
+}
+
+.tki-tree-check .radio .tki-tree-check-yes-b {
+	border-top-left-radius: 50%;
+	border-top-right-radius: 50%;
+	border-bottom-right-radius: 50%;
+	border-bottom-left-radius: 50%;
+}
+
+.hover-c {
+	opacity: 0.6;
+}
+
+.custom-style {
+	box-shadow: 0px 2rpx 13rpx 0rpx rgba(27, 43, 95, 0.25);
+	border-radius: 23rpx;
+	font-size: 28rpx;
+	font-weight: bold;
+	color: #FFFFFF;
+	margin: 33rpx 0 44rpx;
+}
+
+.timeBtn {
+	width: 99rpx;
+	height: 45rpx;
+	font-size: 24rpx !important;
+	background: linear-gradient(0deg, #F59A02 0%, #FFD334 100%);
+	border: none;
+	margin: 0 29rpx;
+}
+
+.time-top {
+	height: 72rpx;
+	background: #7FB5FF;
+	border-radius: 33rpx 33rpx 0px 0px;
+	display: flex;
+	justify-content: space-between;
+	align-items: center;
+	/* 
+	uni-image {
+		margin-right: 37rpx;
+	} */
+}
+
+.time-top>uni-text {
+	margin-left: 37rpx !important;
+	font-size: 28rpx !important;
+	font-weight: bold !important;
+	color: #FFFFFF !important;
+}
+
+.text-box {
+	width: 90%;
+	height: 80rpx;
+	line-height: 80rpx;
+	border-radius: 28rpx;
+}
+
+.text-box span {
+	margin-left: 20rpx !important;
+}
+
+.ml20 {
+	margin-left: 20rpx;
+}
+
+.text-active {
+	font-weight: bold;
+	background-color: #7FB5FF;
+
+}
+
+.circle-no-active {
+	border-radius: 50%;
+	width: 35rpx;
+	height: 35rpx;
+	border: 2rpx solid #7FB5FF;
+	display: flex;
+	align-items: center;
+	justify-content: center;
+}
+
+.circle-active {
+	border-radius: 50%;
+	width: 20rpx;
+	height: 20rpx;
+	background-color: #E4A439;
+}

Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 326 - 0
components/tki-tree/tki-tree.vue


+ 95 - 5
pages.json

@@ -234,19 +234,110 @@
 			"style": {
 				"navigationStyle": "custom" // 隐藏系统导航栏
 			}
-		},{
+		}, {
 			"path": "pages/driverLookTransport/index",
 			"style": {
 				"navigationStyle": "custom" // 隐藏系统导航栏
 			}
-		}
-		,{
+		}, {
 			"path": "pages/driverEditInfo/index",
 			"style": {
 				"navigationStyle": "custom" // 隐藏系统导航栏
 			}
+		},
+		// 城管端
+		{
+			"path": "pages/cityHome/index",
+			"style": {
+				"navigationStyle": "custom" // 隐藏系统导航栏
+				// "navigationBarTextStyle": "white" // 状态栏字体为白色,只能为 white-白色,black-黑色 二选一
+			}
+		},
+		{
+			"path": "pages/cityEditInfo/index",
+			"style": {
+				"navigationStyle": "custom" // 隐藏系统导航栏
+				// "navigationBarTextStyle": "white" // 状态栏字体为白色,只能为 white-白色,black-黑色 二选一
+			}
+		},
+		{
+			"path": "pages/cityCompanyDetail/index",
+			"style": {
+				"navigationStyle": "custom" // 隐藏系统导航栏
+				// "navigationBarTextStyle": "white" // 状态栏字体为白色,只能为 white-白色,black-黑色 二选一
+			}
+		},
+		{
+			"path": "pages/cityCar/index",
+			"style": {
+				"navigationStyle": "custom" // 隐藏系统导航栏
+				// "navigationBarTextStyle": "white" // 状态栏字体为白色,只能为 white-白色,black-黑色 二选一
+			}
+		},
+		{
+			"path": "pages/cityCarDetail/index",
+			"style": {
+				"navigationStyle": "custom" // 隐藏系统导航栏
+				// "navigationBarTextStyle": "white" // 状态栏字体为白色,只能为 white-白色,black-黑色 二选一
+			}
+		},
+		{
+			"path": "pages/cityPath/index",
+			"style": {
+				"navigationStyle": "custom" // 隐藏系统导航栏
+				// "navigationBarTextStyle": "white" // 状态栏字体为白色,只能为 white-白色,black-黑色 二选一
+			}
+		},
+		{
+			"path": "pages/cityPathDetail/index",
+			"style": {
+				"navigationStyle": "custom" // 隐藏系统导航栏
+				// "navigationBarTextStyle": "white" // 状态栏字体为白色,只能为 white-白色,black-黑色 二选一
+			}
+		},
+		{
+			"path": "pages/cityAddPath/index",
+			"style": {
+				"navigationStyle": "custom" // 隐藏系统导航栏
+				// "navigationBarTextStyle": "white" // 状态栏字体为白色,只能为 white-白色,black-黑色 二选一
+			}
+		},
+		{
+			"path": "pages/cityTransport/index",
+			"style": {
+				"navigationStyle": "custom" // 隐藏系统导航栏
+				// "navigationBarTextStyle": "white" // 状态栏字体为白色,只能为 white-白色,black-黑色 二选一
+			}
+		},
+		{
+			"path": "pages/cityTransportDetail/index",
+			"style": {
+				"navigationStyle": "custom" // 隐藏系统导航栏
+				// "navigationBarTextStyle": "white" // 状态栏字体为白色,只能为 white-白色,black-黑色 二选一
+			}
+		},
+		{
+			"path": "pages/cityRecord/index",
+			"style": {
+				"navigationStyle": "custom" // 隐藏系统导航栏
+				// "navigationBarTextStyle": "white" // 状态栏字体为白色,只能为 white-白色,black-黑色 二选一
+			}
+		},
+		{
+			"path": "pages/cityRecordDetail/index",
+			"style": {
+				"navigationStyle": "custom" // 隐藏系统导航栏
+				// "navigationBarTextStyle": "white" // 状态栏字体为白色,只能为 white-白色,black-黑色 二选一
+			}
+		},
+		{
+			"path": "pages/cityDotPath/index",
+			"style": {
+				"navigationStyle": "custom" // 隐藏系统导航栏
+				// "navigationBarTextStyle": "white" // 状态栏字体为白色,只能为 white-白色,black-黑色 二选一
+			}
 		}
-		
+
 	],
 	// "tabBar": {
 	// 	// "color": "#000000",
@@ -283,4 +374,3 @@
 	},
 	"uniIdRouter": {}
 }
-

+ 358 - 0
pages/cityAddPath/index.vue

@@ -0,0 +1,358 @@
+<template>
+	<view class="container">
+		<uni-navbar :title="form.id?'路线修改':'新增路线'" path="/pages/cityHome/index"></uni-navbar>
+		<view class="box">
+			<view class="reject-box2 commonRedBj commonMt" v-if="form.id">
+				<view class="reject-box-top">
+					<image src="../../static/images/car/yunshu.png" mode="widthFix"></image>
+					<text class="listTitle">审批状态</text>
+				</view>
+				<view class="reject-box-bottom">
+					<view class="state-icon">
+						<view class="state-icon-left">
+							<view class="red-circle mCircle">
+							</view>
+							<text>审批状态:</text>
+						</view>
+						<view class="state-icon-right">
+							<u-icon color="#FB5637" name="close-circle-fill"></u-icon>
+							<text>驳回</text>
+						</view>
+					</view>
+					<view class="state-icon">
+						<view class="state-icon-left">
+							<view class="red-circle mCircle">
+							</view>
+							<text>驳回原因:</text>
+						</view>
+						<view class="state-icon-right">
+							<text>{{form.auditContent}}</text>
+						</view>
+					</view>
+				</view>
+			</view>
+			<view class="reject-box commonBj commonMt">
+				<view class="reject-box-top">
+					<view class="top-left">
+						<image src="../../static/images/path/location.png" mode="widthFix"></image>
+						<text class="listTitle">运输路线</text>
+					</view>
+					<view class="top-right">
+						<u-button class="buttonDd" @click="dot">
+							<view class="dwImg"></view>
+							<!-- <image src="../../static/images/path/location2.png" mode="widthFix"></image> -->
+							打点
+						</u-button>
+					</view>
+				</view>
+				<u--form :model="form" ref="uForm" :rules="rules" labelWidth="0" class="formStyle firstItem">
+					<u-form-item prop="endPoint">
+						<view class="redCircle" style="margin-top: 30rpx;"></view>
+						<text class="itemText" style="margin-top: 23rpx;">打点坐标</text>
+						<view class="map" @click="dot">
+							<mapImg :startPoint='form.startPoint' :endPoint='form.endPoint'
+								:mtRoutePointList='form.mtRoutePointList'></mapImg>
+							<!-- 							<mapNew height="355rpx">
+								
+							</mapNew> -->
+						</view>
+					</u-form-item>
+					<u-form-item prop="startName">
+						<view class="redCircle"></view>
+						<text class="itemText">开始地址</text>
+						<u-input class="inputStyle" v-model="form.startName" placeholder="请输入开始地址" />
+					</u-form-item>
+					<u-form-item prop="endName">
+						<view class="redCircle"></view>
+						<text class="itemText">结束地址</text>
+						<u-input class="inputStyle" v-model="form.endName" placeholder="请输入结束地址" />
+					</u-form-item>
+
+					<u-form-item v-if="form.id">
+						<view class="redCircle"></view>
+						<text class="itemText">发起部门</text>
+						<u-input disabled disabledColor="rgba(73,91,147,0.2)" class="inputStyle"
+							suffixIconStyle="color: #495B93" v-model="form.startDept" />
+					</u-form-item>
+				</u--form>
+			</view>
+			<view class="reject-box commonBj commonMt" v-if="!form.id">
+				<view class="reject-box-top">
+					<view class="top-left">
+						<image src="../../static/images/path/initiator.png" mode="widthFix"></image>
+						<text class="listTitle">发布信息</text>
+					</view>
+				</view>
+				<u--form labelWidth="0" class="formStyle">
+
+					<u-form-item>
+						<view class="redCircle"></view>
+						<text class="itemText">发起部门</text>
+						<u-input disabled disabledColor="rgba(73,91,147,0.2)" class="inputStyle"
+							suffixIconStyle="color: #495B93" v-model="form.startDept" />
+					</u-form-item>
+				</u--form>
+			</view>
+			<u-button @click="submit" class="buttonLang commonMb" shape="circle"
+				color="linear-gradient(to top, #F59A02, #FFD334)">{{form.id?'确定修改':'确认新增'}}</u-button>
+		</view>
+	</view>
+</template>
+
+<script>
+	import {
+		routePost,
+		routeAdd,
+		routeInfo,
+		routeUpadate
+	} from "@/api/company/path.js"
+	export default {
+		data() {
+			return {
+				form: {
+					id: null,
+					endPoint: '',
+					startName: '',
+					endName: '',
+					companyName: '',
+					startDept: '',
+					// 企业id
+					// companyId: '1023271044427829248',
+					endPoint: '',
+					startPoint: '',
+					auditContent: '',
+					mtRoutePointList: [],
+				},
+				id: '',
+				rules: {
+					endPoint: [{
+						required: true,
+						message: '请进行打点',
+						trigger: ['blur', 'change']
+					}, ],
+					startName: [{
+						required: true,
+						message: '请输入开始地址',
+						trigger: ['blur', 'change']
+					}, ],
+					endName: [{
+						required: true,
+						message: '请输入结束地址',
+						trigger: ['blur', 'change']
+					}, ],
+				},
+			}
+		},
+		methods: {
+			submit() {
+				this.$refs.uForm.validate().then(res => {
+					if (this.form.id) {
+						this.routeUpadate();
+					} else {
+						this.routeAdd();
+					}
+				}).catch(errors => {})
+
+			},
+			// routeAdd,routeInfo,routeUpadate
+			routeAdd() {
+				routeAdd(this.form).then(res => {
+					console.log('增加路线成功', res);
+					this.$tab.navigateTo('/pages/cityPath/index')
+				})
+			},
+			routeUpadate() {
+				routeUpadate(this.form).then(res => {
+					this.$tab.navigateTo('/pages/cityPath/index')
+				})
+			},
+			routeInfo(id) {
+				routeInfo(id).then(res => {
+					this.form = res.data;
+				})
+			},
+			dot() {
+				this.$tab.navigateTo('/pages/cityDotPath/index?id=' + this.id)
+			},
+			routePost(data) {
+				console.log(data, '参数');
+				routePost(data).then(res => {
+					this.form.mtRoutePointList = res.data.map(items => {
+						return {
+							pointCoordinate: items[0] + ',' + items[1]
+						}
+					})
+				})
+			},
+
+		},
+		onLoad: function(option) {
+			this.form.companyId = this.$store.state.user.companyId;
+			this.form.companyName = this.$store.state.user.companyName;
+			this.form.startDept = this.$store.state.user.rolesName;
+			// console.log(this.form, 'this.form');
+			console.log(option, 'option');
+			// console.log(this.$store.state.user, 'this.$store.state.user');
+			if (option.id) {
+				this.routeInfo(option.id);
+				this.form.id = option.id;
+			}
+			//涉及到修改返回
+			if (option.startName) {
+				console.log(JSON.stringify(option));
+				this.form.startName = option.startName;
+				this.form.startPoint = option.startPoint;
+				this.form.endName = option.endName;
+				this.form.endPoint = option.endPoint;
+				let addres = {
+					"startPoint": option.startPoint,
+					"endPoint": option.endPoint
+				}
+				this.routePost(addres);
+
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.reject-box {
+		margin-bottom: 28rpx;
+
+		.reject-box-top {
+			width: 100%;
+			height: 69rpx;
+			background: #7FB5FF;
+			border-radius: 26rpx 26rpx 0px 0px;
+			display: flex;
+			justify-content: space-between;
+
+			.top-right {
+				display: flex;
+				justify-content: start;
+				align-items: center;
+				margin-right: 36rpx;
+			}
+
+			uni-image {
+				width: 50rpx;
+				margin-left: 32rpx;
+				vertical-align: middle;
+			}
+		}
+
+	}
+
+	.buttonDd {
+		width: 134rpx;
+		height: 45rpx;
+		background: linear-gradient(0deg, #FFD334 0%, #F59A02 100%);
+		box-shadow: 0px 2rpx 13rpx 0px rgba(27, 43, 95, 0.25);
+		border-radius: 23rpx;
+		border: 0;
+		font-size: 26rpx;
+		font-weight: bold;
+		color: #FFFFFF;
+		padding: 0;
+		text-align: center;
+	}
+
+	.map {
+		width: 429rpx;
+		height: 355rpx;
+		background: #FFFFFF;
+		border: 2rpx solid #495B93;
+		border-radius: 15rpx;
+	}
+
+	.formStyle {
+		margin: 32rpx 36rpx 57rpx 32rpx;
+	}
+
+	.reject-box2 {
+		// width: 88%;
+		// height: 290rpx;
+		margin-left: auto;
+		margin-right: auto;
+		margin-bottom: 28rpx;
+
+		.reject-box-top {
+			width: 100%;
+			height: 69rpx;
+			background: #FB5637;
+			border-radius: 26rpx 26rpx 0px 0px;
+
+			uni-image {
+				width: 50rpx;
+				margin-left: 32rpx;
+				vertical-align: middle;
+			}
+
+		}
+	}
+
+	.reject-box-bottom {
+		.state-icon {
+			display: flex;
+			margin: 40rpx;
+
+			&:nth-child(2) {
+				margin-bottom: 40rpx !important;
+			}
+
+			.state-icon-left {
+				display: flex;
+
+				// align-items: center;
+				.red-circle {
+					width: 15rpx;
+					height: 15rpx;
+					background: #FB5637;
+					border-radius: 50%;
+					margin-right: 16rpx;
+				}
+
+				uni-text {
+					font-size: 26rpx;
+					font-weight: bold;
+					color: #495B93;
+				}
+			}
+
+			.state-icon-right {
+				display: flex;
+				// align-items: center;
+				width: 70%;
+
+				uni-text {
+					font-size: 26rpx;
+					font-weight: bold;
+					color: #FB5637;
+					margin-left: 14rpx;
+				}
+			}
+		}
+
+		.border-style {
+			border-top: 1rpx dashed #FB5637;
+			width: 90%;
+			margin: 0 auto;
+		}
+	}
+
+	.dwImg {
+		width: 50rpx;
+		height: 50rpx;
+		background: url(../../static/images/path/location2.png);
+		background-size: 100% 100%;
+		display: inline-block;
+
+	}
+
+	// /deep/ .u-form-item__body__right__content__slot
+
+	.firstItem /deep/ .u-form-item:first-child .u-form-item__body__right__content .u-form-item__body__right__content__slot {
+		align-items: flex-start;
+		// background-color: #FB5637;
+	}
+</style>

+ 184 - 0
pages/cityCar/index.vue

@@ -0,0 +1,184 @@
+<template>
+	<view class="container">
+		<uni-navbar title="车辆审批" path="/pages/cityHome/index"></uni-navbar>
+		<view class="box">
+			<view class="commonMb commonMt">
+				<view class="car-content" v-for="item in carList" :key="item.id">
+					<view class="car-info commonBj">
+						<view class="person-top">
+							<view class="imgName">
+								<image style="width: 60rpx;height: 60rpx;" src="../../static/images/city/gongsi.png"
+									mode="widthFix"></image>
+								<text>{{item.companyName}}</text>
+							</view>
+							<view class="shenpiButton" @tap="gotoCar(item.id)">
+								审 批
+							</view>
+						</view>
+						<view class="person-bottom" style="margin-top: 38rpx;">
+							<view class="carinfo-bottom listText">
+								<image style="width: 22rpx;height: 22rpx;" src="../../static/images/car/lb_01.png"
+									mode="widthFix"></image>
+								<text class="width100">车牌号: {{item.carNumber}}</text>
+							</view>
+							<view class="carinfo-bottom listText" style="margin-left: 60rpx;">
+								<image style="width: 22rpx;height: 22rpx;" src="../../static/images/car/lb_01.png"
+									mode="widthFix"></image>
+								<text>车&nbsp;&nbsp;&nbsp;型: {{item.carType}}</text>
+							</view>
+						</view>
+						<view class="person-bottom" style="margin-top: 0rpx;">
+							<view class="carinfo-bottom listText">
+								<image style="width: 22rpx;height: 22rpx;" src="../../static/images/car/lb_03.png"
+									mode="widthFix"></image>
+								<text class="width100">载重量: {{item.carCarry}}</text>
+							</view>
+							<view class="carinfo-bottom listText" style="margin-left: 60rpx;">
+								<image style="width: 22rpx;height: 22rpx;" src="../../static/images/car/lb_02.png"
+									mode="widthFix"></image>
+								<text>车&nbsp;&nbsp;&nbsp;系: {{item.carSeries}}</text>
+							</view>
+						</view>
+					</view>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import {
+		carList
+	} from "@/api/city/car.js"
+	export default {
+		data() {
+			return {
+				carList: []
+			}
+		},
+		methods: {
+			async getCarList() {
+				const res = await carList()
+				console.log('车辆列表', res);
+				this.carList = res.rows.filter(item => {
+					return item.auditType === 0
+				})
+				console.log(this.carList);
+			},
+			gotoCar(id) {
+				this.$tab.navigateTo(`/pages/cityCarDetail/index?id=${id}`)
+			}
+		},
+		onLoad() {
+			this.getCarList()
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.width100 {
+		width: 228rpx;
+	}
+
+	.person-bottom {
+		display: flex;
+		justify-content: start;
+		align-items: center;
+		flex-wrap: wrap;
+	}
+
+	.person-top {
+		display: flex;
+		align-items: center;
+		justify-content: space-between;
+
+		uni-text {
+			font-size: 28rpx;
+			font-weight: bold;
+			color: #333333;
+			margin-left: 25rpx;
+		}
+	}
+
+	.imgName {
+		display: flex;
+		align-items: center;
+	}
+
+	.shenpiButton {
+		width: 103rpx;
+		height: 45rpx;
+		background: linear-gradient(90deg, #FF2D04 0%, #FFA53E 100%);
+		box-shadow: 0px 2rpx 13rpx 0px rgba(27, 43, 95, 0.25);
+		border-radius: 23rpx;
+		font-size: 26rpx;
+		font-weight: bold;
+		color: #FFFFFF;
+		text-align: center;
+		line-height: 45rpx;
+	}
+
+	.car-content {
+		display: flex;
+		flex-direction: column;
+		margin-top: 20rpx;
+		margin-bottom: 30rpx;
+	}
+
+	.car-info {
+		padding: 18rpx 30rpx;
+		box-sizing: border-box;
+		// margin-top: 24rpx;
+
+		.carInfo-top {
+			display: flex;
+			align-items: center;
+			justify-content: space-between;
+			// margin-bottom: 17rpx; 
+
+			.top-left {
+				display: flex;
+				align-items: center;
+
+				uni-text {
+					font-size: 28rpx;
+					font-weight: bold;
+					color: #333333;
+					margin-left: 25rpx;
+				}
+			}
+
+			.top-right {
+				display: flex;
+				align-items: center;
+
+				uni-text {
+					// font-size: 24rpx;
+					// font-weight: 400;
+					// color: #485B93;
+					margin-left: 19rpx;
+				}
+			}
+		}
+	}
+
+	.car-info:nth-child(1) {
+		margin-top: 0rpx !important;
+	}
+
+	.carinfo-bottom::before {
+		content: '';
+		display: table;
+	}
+
+	.carinfo-bottom {
+		display: flex;
+		align-items: center;
+		margin-bottom: 14rpx;
+
+		uni-text {
+			margin-left: 19rpx;
+		}
+
+	}
+</style>

+ 505 - 0
pages/cityCarDetail/index.vue

@@ -0,0 +1,505 @@
+<template>
+	<view class="container">
+		<uni-navbar title="车辆信息" path="/pages/cityCar/index"></uni-navbar>
+		<view class="box">
+			<view class="reject-box commonBj commonMt">
+				<view class="reject-box-top">
+					<view class="top-left">
+						<image src="../../static/images/car/yunshu.png" mode="widthFix"></image>
+						<text class="listTitle">车辆信息</text>
+					</view>
+
+				</view>
+				<view class="reject-box-bottom infoHeight">
+					<view class="state-icon">
+						<view class="flexAlignCenter">
+							<view class="greenCircle">
+							</view>
+							<text class="itemText">企业名称:</text>
+						</view>
+						<view class="flexAlignCenter">
+							<text class="infoText">{{carInfo.companyName}}</text>
+						</view>
+					</view>
+					<!-- <view class="border-style"></view> -->
+					<view class="state-icon">
+						<view class="flexAlignCenter">
+							<view class="greenCircle">
+							</view>
+							<text class="itemText">车牌号码:</text>
+						</view>
+						<view class="flexAlignCenter">
+							<text class="infoText">{{carInfo.carNumber}}</text>
+						</view>
+					</view>
+					<!-- <view class="border-style"></view> -->
+					<view class="state-icon">
+						<view class="flexAlignCenter">
+							<view class="greenCircle">
+							</view>
+							<text class="itemText">车&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;型:</text>
+						</view>
+						<view class="flexAlignCenter">
+							<text class="infoText">{{carInfo.carType}}</text>
+						</view>
+					</view>
+					<!-- <view class="border-style"></view> -->
+					<view class="state-icon">
+						<view class="flexAlignCenter">
+							<view class="greenCircle">
+							</view>
+							<text class="itemText">车&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;系:</text>
+						</view>
+						<view class="flexAlignCenter">
+							<text class="infoText">{{carInfo.carSeries}}</text>
+						</view>
+					</view>
+					<!-- <view class="border-style"></view> -->
+					<view class="state-icon">
+						<view class="flexAlignCenter">
+							<view class="greenCircle">
+							</view>
+							<text class="itemText">载重标准:</text>
+						</view>
+						<view class="flexAlignCenter">
+							<text class="infoText">{{carInfo.carCarry}}</text>
+						</view>
+					</view>
+					<!-- <view class="border-style"></view> -->
+					<view class="state-icon block">
+						<view class="flexAlignCenter">
+							<view class="greenCircle">
+							</view>
+							<text class="itemText">车辆行驶证件</text>
+						</view>
+						<view class="uploadBox flexAlignCenter block  mt30 ">
+							<!-- <xfx-image-upload class="radius15" :remove="false" :add=false :chooseNum="1"
+								v-model="drivingLicense" mediaType="image"></xfx-image-upload> -->
+							<u--image radius="15rpx" :showLoading="true" :src="drivingLicense" width="599rpx"
+								height="270rpx" @tap="previewImg(drivingLicense)">
+							</u--image>
+						</view>
+					</view>
+					<view class="state-icon mb0 block">
+						<view class="flexAlignCenter">
+							<view class="greenCircle">
+							</view>
+							<text class="itemText">车辆状态</text>
+						</view>
+						<view class="mt30 zhanwei">
+							<view class="state-box-size border radius15 ">
+								<xfx-image-upload class="state-box-size radius15" :max="1" :remove="false" :add="false"
+									v-model="vedioList" mediaType="video"></xfx-image-upload>
+							</view>
+							<u--image class="border radius15" radius="15rpx" :key="index"
+								v-for="(item,index) in imgList" :showLoading="true" :src="item.url" width="180rpx"
+								height="180rpx" @tap="previewImg(item.url)">
+							</u--image>
+						</view>
+					</view>
+				</view>
+			</view>
+			<reaee-video-cover-extractor :path="tempFilePath" @success='success' @error='error' />
+			<!-- 审批状态 -->
+			<view class="reject-box mt28 commonMb commonBj">
+				<view class="reject-box-top just-content-start bg-color-green">
+					<image src="../../static/images/car/yunshu.png" mode="widthFix"></image>
+					<text class="listTitle">审批状态</text>
+				</view>
+				<view class="reject-box-bottom pb0">
+					<view class="state-icon">
+						<view class="flexAlignCenter center">
+							<view class="redCircle">
+							</view>
+							<text class="itemText">审批状态:</text>
+							<view class="normal" :class="auditType===1?'success':''" @tap="successClick">
+								<image style="width: 33rpx;height: 33rpx;margin-right: 12rpx;"
+									src="../../static/images/cityCar/state2.png" mode="widthFix"></image>
+								<text>通过</text>
+							</view>
+							<view class="normal ml19" :class="auditType===-1?'fail':''" @tap="failClick">
+								<image style="width: 33rpx;height: 33rpx;margin-right: 12rpx;"
+									src="../../static/images/cityCar/state1.png" mode="widthFix"></image>
+								<text>驳回</text>
+							</view>
+						</view>
+					</view>
+					<!-- <view :class="isPass?'border-style mb':'border-style2'"></view> -->
+					<view class="state-icon" v-if="auditType === -1">
+						<view class="flexAlignCenter center">
+							<view class="redCircle">
+							</view>
+							<text class="itemText">驳回原因:</text>
+						</view>
+					</view>
+					<u--textarea confirmType="done" v-if="auditType === -1" class="textareaStyle" height="198rpx"
+						v-model="auditContent" placeholder="请输入驳回原因">
+					</u--textarea>
+					<!-- <view v-if="!isPass" class="border-style2 mb"></view> -->
+				</view>
+			</view>
+			<u-button @click="submit" class="add-button commonMb" shape="circle"
+				color="linear-gradient(to top, #F59A02, #FFD334)">确认审批</u-button>
+		</view>
+	</view>
+</template>
+
+<script>
+	import {
+		carDetail,
+	} from "@/api/company/car.js"
+	import {
+		editState
+	} from "@/api/city/car.js"
+	export default {
+		data() {
+			return {
+				// 驳回原因
+
+				auditContent: null,
+				// 通过样式开关
+				auditType: 1,
+				// 驳回样式开关
+				isFail: false,
+				// 详情数据列表
+				carInfo: {},
+				// 行驶证列表
+				drivingLicense: '',
+				// 视频列表
+				vedioList: [],
+				// 车辆状态图片列表
+				imgList: [],
+				// 接收的id
+				id: null,
+				tempFilePath: '',
+				srcVideo: '',
+			}
+		},
+		methods: {
+			async submit() {
+				let obj = {}
+				obj.id = this.carInfo.id
+				obj.auditType = this.auditType
+				obj.auditContent = this.auditContent
+				const res = await editState(obj)
+				console.log('提交', res);
+				this.auditContent = null
+				this.$tab.navigateTo('/pages/cityCar/index')
+			},
+			// 切换按钮事件
+			successClick() {
+				if (this.auditType === 1) {
+					return
+				} else {
+					this.auditType = 1
+				}
+			},
+			failClick() {
+				if (this.isFail === -1) {
+					return
+				} else {
+					this.auditType = -1
+				}
+			},
+			select() {
+				this.tempFilePath = this.srcVideo;
+			},
+			success(o) {
+				console.log('成功了', o);
+				this.vedioList = [{
+					cover: o,
+					url: this.srcVideo
+				}]
+			},
+
+			// 视频封面提取失败
+			error(e) {
+				console.log('error', e);
+			},
+			previewImg(urls) {
+				uni.previewImage({
+					urls: [urls],
+					current: urls
+				})
+			},
+			// previewImg(current) {
+			// 	const urls = this.list.map(item => {
+			// 		return item
+			// 	})
+			// 	uni.previewImage({
+			// 		current,
+			// 		urls
+			// 	})
+			// },
+			// 获取详情
+			getDetail() {
+				// console.log(this.id, '详情');
+				carDetail(this.id).then((result) => {
+					console.log(result, '详情');
+					this.carInfo = result.data
+					this.drivingLicense = result.data.drivingLicense[0].url;
+					// this.tempFilePath =result.data.carVideo[0].url;
+					this.srcVideo = result.data.carVideo[0].url;
+					// this.changVideo(result.data.carVideo[0].url);
+					// let videourl='https://vd3.bdstatic.com/mda-ke6p5rankhca6xbv/v1-cae/hd/mda-ke6p5rankhca6xbv.mp4'
+					// this.vedioList.push(result.data.carVideo[0].url)
+					// this.vedioList.push(videourl)
+					// let data=this.getVideoBase64(result.data.carVideo[0].url)
+					// console.log(data,'data');
+					this.imgList = result.data.imgList;
+					this.select();
+					// result.data.imgList.forEach(item => {
+					// 	this.imgList.push(item.url)
+					// })
+				}).catch(err => {
+					console.log('请求失败rr');
+				})
+			},
+		},
+		onLoad: function(option) {
+			if (option.id) {
+				this.companyName = this.$store.state.user.companyName
+				// console.log('接收过来的id', option.id);
+				this.id = option.id
+				// console.log(this.id); 
+				this.getDetail()
+				// this.getUserCompanyInfo()
+			}
+		},
+	}
+</script>
+
+<style lang="scss" scoped>
+	// 底部按钮样式
+	.add-button {
+		height: 85rpx;
+		// background: linear-gradient(0deg, #FFD334 0%, #F59A02 100%);
+		// box-shadow: 0rpx 2rpx 13rpx 0rpx rgba(27, 43, 95, 0.25);
+		// border-radius: 28rpx;
+		font-size: 30rpx;
+		font-weight: bold;
+		color: #FFFFFF;
+		border: 0;
+		margin-top: 27rpx;
+	}
+
+	// 审批状态按钮样式
+	.normal {
+		width: 205rpx;
+		height: 72rpx;
+		background: rgba(126, 142, 193, 0.6);
+		border: 2rpx solid #7E8EC1;
+		border-radius: 36rpx;
+		display: flex;
+		justify-content: center;
+		align-items: center;
+		font-size: 28rpx;
+		font-weight: bold;
+		color: #FFFFFF;
+	}
+
+	.success {
+		background: linear-gradient(90deg, #3FC377 0%, #83D992 100%);
+		box-shadow: 0px 2rpx 13rpx 0px rgba(27, 43, 95, 0.25);
+	}
+
+	.fail {
+		background: linear-gradient(90deg, #FF2D04 0%, #FFA53E 100%);
+		box-shadow: 0px 2rpx 13rpx 0px rgba(27, 43, 95, 0.25);
+	}
+
+	.ml19 {
+		margin-left: 19rpx;
+	}
+
+	.center {
+		justify-content: center;
+		align-items: center;
+	}
+
+	.textareaStyle {
+		margin-bottom: 56rpx;
+		background: rgba(255, 255, 255, 0.1);
+		border: 2rpx solid #495B93 !important;
+		border-radius: 15rpx;
+
+		/deep/ .input-placeholder {
+			color: #7E8EC1 !important;
+			font-size: 26rpx;
+		}
+	}
+
+	// 上传组件样式
+	.uploadBox {
+
+		// width: 599rpx;
+		// height: 250rpx;
+		// /deep/ .u-image__loading{
+		// 	width: 100%;
+		// 	height: 250rpx;
+		// }
+		/deep/ .u-image {
+			border: 1rpx solid #495B93;
+		}
+	}
+
+	/deep/.xfx-image-upload-Item {
+		uni-image {
+			width: 180rpx;
+			height: 180rpx;
+		}
+
+		.xfx-image-upload-Item-video-fixed {
+			width: 180rpx;
+			height: 180rpx;
+		}
+	}
+
+	.zhanwei {
+		display: flex;
+	}
+
+	.zhanwei uni-view:not(:first-child) {
+		width: 180rpx !important;
+	}
+
+	.zhanwei uni-view:not(:last-child) {
+		margin-right: 29rpx;
+	}
+
+	.reject-box {
+
+		.reject-box-top {
+			width: 100%;
+			height: 69rpx;
+			background: #7FB5FF;
+			border-radius: 26rpx 26rpx 0px 0px;
+			display: flex;
+			justify-content: space-between;
+
+			.top-right {
+				display: flex;
+				justify-content: start;
+				align-items: center;
+				margin-right: 36rpx;
+
+				uni-image {
+					width: 28rpx;
+					margin-left: 32rpx;
+					vertical-align: middle;
+				}
+
+				.state-text {
+
+					margin-left: 13rpx;
+					line-height: 69rpx;
+				}
+			}
+
+			uni-image {
+				width: 50rpx;
+				margin-left: 32rpx;
+				vertical-align: middle;
+			}
+		}
+
+		.reject-box-bottom {
+			padding: 40rpx;
+
+			.state-icon {
+				display: flex;
+				margin: 40rpx 0;
+			}
+
+			.state-icon:nth-child(1) {
+				margin: 0 0 40rpx;
+			}
+
+			.border-style {
+				border-top: 1rpx dashed #F98803;
+				width: 90%;
+				margin: 0 auto;
+			}
+
+			.border-style2 {
+				border-top: 1rpx dashed #FB5637;
+				width: 90%;
+				margin: 0 auto;
+			}
+		}
+	}
+
+	.reject-box-bottom:nth-child(2) {
+		padding: 40rpx 40rx 20rpx !important;
+	}
+
+	.block {
+		display: block !important;
+	}
+
+	.border {
+		border: 1rpx solid #495B93;
+	}
+
+	.box-size {
+		width: 598rpx;
+		height: 198rpx;
+	}
+
+	.mt30 {
+		margin-top: 30rpx;
+	}
+
+	.radius15 {
+		border-radius: 15rpx;
+	}
+
+	.state-box-size {
+		width: 180rpx;
+		height: 180rpx;
+	}
+
+	.state-box-size-video {
+		width: 175rpx !important;
+		height: 175rpx !important;
+	}
+
+	.space-between {
+		justify-content: space-between;
+	}
+
+	.just-content-start {
+		justify-content: flex-start !important;
+		align-items: center;
+	}
+
+	.bg-color-green {
+		background: #7FB5FF !important;
+	}
+
+	.bg-color-red {
+		background: #FB5637 !important;
+	}
+
+	.fontTongGuo {
+		font-size: 28rpx !important;
+		font-weight: bold !important;
+		color: #007C3C !important;
+	}
+
+	.mb {
+		margin-bottom: 53rpx !important;
+	}
+
+	.pb0 {
+		padding-bottom: 0 !important;
+	}
+
+	.mt28 {
+		margin-top: 28rpx;
+	}
+
+	.mb0 {
+		margin-bottom: 0rpx !important;
+	}
+</style>

+ 132 - 0
pages/cityCompanyDetail/index.vue

@@ -0,0 +1,132 @@
+<template>
+	<view class="container avstarBack">
+		<uni-navbar title="企业信息"></uni-navbar>
+		<view class="box commonMt relative">
+			<view class="absolute">
+				<view class="choose-line-bottom commonBj">
+					<view class="state-icon">
+						<view class="flexAlignCenter">
+							<view class="greenCircle">
+							</view>
+							<text class="itemText">企业名称:</text>
+						</view>
+						<view class="flexAlignCenter">
+							<text class="infoText">{{form.companyName}}</text>
+						</view>
+					</view>
+					<view class="state-icon">
+						<view class="flexAlignCenter">
+							<view class="greenCircle">
+							</view>
+							<text class="itemText">企业简称:</text>
+						</view>
+						<view class="flexAlignCenter">
+							<text class="infoText">{{form.companyAbbreviation}}</text>
+						</view>
+					</view>
+					<view class="state-icon">
+						<view class="flexAlignCenter">
+							<view class="greenCircle">
+							</view>
+							<text class="itemText">信用代码:</text>
+						</view>
+						<view class="flexAlignCenter">
+							<text class="infoText">{{form.companyCode}}</text>
+						</view>
+					</view>
+					<view class="state-icon">
+						<view class="flexAlignCenter">
+							<view class="greenCircle">
+							</view>
+							<text class="itemText">企业法人:</text>
+						</view>
+						<view class="flexAlignCenter">
+							<text class="infoText">{{form.legalPerson}}</text>
+						</view>
+					</view>
+					<view class="state-icon">
+						<view class="flexAlignCenter">
+							<view class="greenCircle">
+							</view>
+							<text class="itemText">联系电话:</text>
+						</view>
+						<view class="flexAlignCenter">
+							<text class="infoText">{{form.phoneNumber}}</text>
+						</view>
+					</view>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import {
+		getCompanyDetail
+	} from "@/api/company/company.js"
+	export default {
+		data() {
+			return {
+				form: {
+					companyName: null,
+					companyAbbreviation: null,
+					companyCode: null,
+					legalPerson: null,
+					phoneNumber: null
+				},
+				// 企业id
+				id: null
+			}
+		},
+		methods: {
+			async companyDetail(id) {
+				const res = await getCompanyDetail(id)
+				console.log('详情', res);
+				this.form = res.data
+			}
+		},
+		onLoad(option) {
+			this.companyDetail(option.id)
+		}
+	}
+</script>
+
+<style scoped lang="scss">
+	.avstarBack {
+		background-image: url(@/static/images/editInfo/editInfo.png);
+	}
+
+	.relative {
+		position: relative;
+	}
+
+	.absolute {
+		position: absolute;
+		bottom: 46rpx;
+		width: 100%;
+	}
+
+	.choose-line-bottom {
+		overflow: hidden;
+		padding: 41rpx 54rpx;
+		box-sizing: border-box;
+
+	}
+
+	.mt33 {
+		margin-top: 33rpx;
+	}
+
+	.state-icon {
+		display: flex;
+		margin: 84rpx 0;
+	}
+
+	.state-icon:nth-child(1) {
+		margin: 52rpx 0 40rpx;
+	}
+
+	.state-icon:nth-last-child(1) {
+		margin: 84rpx 0 52rpx;
+	}
+</style>

+ 323 - 0
pages/cityDotPath/index.vue

@@ -0,0 +1,323 @@
+<template>
+	<view class="container">
+		<uni-navbar title="新增路线"></uni-navbar>
+		<view class="box commonMt">
+			<view class="map">
+				<mapNew height="713rpx" @isChange='isChange=false' @clearMarkers='clearMarkers' @getAddres='getAddres'
+					:starAddres="starAddres" :getLocation="getLocation" :isShow='false' :isStar="isStar" :isEnd="isEnd">
+				</mapNew>
+				<!-- <map id="map" ref="map" style="height: 713rpx;width: 100%;" @tap="tapMap">
+				</map> -->
+			</view>
+			<view class="reject-box commonBj ">
+				<view class="reject-box-top">
+					<view class="top-left">
+						<image src="../../static/images/path/location.png" mode="widthFix"></image>
+						<text class="listTitle">附近地址</text>
+
+					</view>
+					<view class="top-right">
+						<u-button class="buttonDd" @click="dot" :disabled="activeIndex||activeIndex=='0'?false:true">
+							确认</u-button>
+					</view>
+				</view>
+				<view class="reject-box-bottom">
+					<view class="boxMr">
+						<view :class="'adrBox ' +(activeIndex===index?'active':'')" v-for="(item,index) in addresData"
+							@click="changeAddres(index,item)">
+							<view class="ml">{{item.name}}</view>
+							<view class="activeImg" v-if="activeIndex===index"></view>
+						</view>
+					</view>
+				</view>
+			</view>
+
+			<!-- <u-toast ref="uToast"></u-toast> -->
+			<u-button @click="submit" shape="circle" color="linear-gradient(to top, #F59A02, #FFD334 )"
+				:disabled="starAddresData&&endAddresData?false:true" class="buttonLang commonMb">确认选择</u-button>
+		</view>
+	</view>
+</template>
+
+<script>
+	import config from '@/config'
+	export default {
+		data() {
+			return {
+				activeIndex: null,
+				starAddres: null,
+				isStar: false,
+				isEnd: false,
+				addresData: [],
+				getLocation: null,
+				isChange: false,
+				starAddresData: null,
+				endAddresData: null,
+				id: '',
+			}
+		},
+		onLoad: function(option) {
+
+			if (option.id) {
+				this.routeInfo(option.id);
+				this.id = option.id;
+			}
+		},
+		onShow() {
+			uni.getLocation({
+				// type: 'gcj02',
+				success: (res) => {
+					console.log('当前位置的经度:' + res.longitude);
+					console.log('当前位置的纬度:' + res.latitude);
+					this.getLocation = res;
+
+				}
+			});
+		},
+		methods: {
+			clearMarkers() {
+				this.isStar = false;
+				this.isEnd = false;
+				this.starAddres = null;
+				this.starAddresData = null;
+				this.endAddresData = null;
+				// this.activeIndex=null;
+				console.log('我执行了清楚')
+			},
+			getAddres(addres) {
+				// this.addres=addres;
+				this.activeIndex = null;
+				console.log(addres, 'addres');
+				//高德地图web服务端key
+				let key = config.key;
+				//搜索范围半径
+				let radius = 200;
+				// 查询POI类型
+				// 汽车服务          010000
+				// 汽车销售           020000
+				// 汽车维修           030000
+				// 摩托车服务          040000
+				// 餐饮服务            050000
+				// 购物服务            060000
+				// 生活服务            070000
+				// 体育休闲服务         080000
+				// 医疗保健服务         090000
+				// 住宿服务             100000
+				// 风景名胜             110000
+				// 商务住宅             120000
+				// 政府机构及社会团体    130000
+				// 科教文化服务         140000
+				// 交通设施服务         150000
+				// 金融保险服务         160000
+				// 公司企业             170000
+				// 道路附属设施          180000
+				// 地名地址信息          190000
+				// 公共设施              200000
+				// 事件活动              220000
+				// 室内设施              970000
+				//  通行设施             990000
+				// let types='050000|070000|100000|120000'
+				let types =
+					'010000|020000|030000|040000|050000|060000|070000|080000|090000|100000|110000|120000|130000|140000|150000|160000|170000'
+				uni.request({
+					// http://restapi.amap.com/v3/place/around?key=401c5604ca1d2597b9906a1a30f29c44&location=116.473168,39.993015&radius=100
+					url: `http://restapi.amap.com/v3/place/around?key=${key}&location=${addres}&radius=${radius}`,
+					method: 'GET',
+					success: (res) => {
+						console.log(res, 'res');
+						if (res.data.info === 'OK') {
+							this.addresData = res.data.pois;
+							console.log(this.addresData, 'this.addresData');
+						}
+					},
+					fail: (err) => {}
+				})
+
+			},
+			changeAddres(index, item) {
+				if (this.isChange) {
+					return
+				}
+				this.activeIndex = index;
+				this.starAddres = item;
+			},
+			submit() {
+				// console.log(this.starAddresData,'starAddresData');
+				// console.log(this.endAddresData,'endAddresData');
+				// let address={
+				// 	starAddres:this.starAddresData,
+				// 	endAddres:this.endAddresData,
+				// }
+				// location
+				// address
+				this.$tab.navigateTo('/pages/cityAddPath/index?startName=' +
+					this.starAddresData.address +
+					'&endName=' + this.endAddresData.address +
+					'&startPoint=' + this.WGS84ToMercator(this.starAddresData.location) +
+					'&endPoint=' + this.WGS84ToMercator(this.endAddresData.location) +
+					'&id=' + this.id
+				)
+				// this.$tab.navigateBack()
+				// this.showToast();
+			},
+			// 4326转3857
+			WGS84ToMercator(data) {
+				console.log(data, 'data');
+				let list = data.split(',');
+				let lonlat = {
+					lng: list[0],
+					lat: list[1]
+				};
+				const coord = {
+					lat: 0,
+					lng: 0
+				};
+				const earthRad = 6378137.0; //地球半径
+				coord.lat = lonlat.lng * Math.PI / 180 * earthRad;
+				const param = lonlat.lat * Math.PI / 180;
+				coord.lng = earthRad / 2 * Math.log((1.0 + Math.sin(param)) / (1.0 - Math.sin(param)));
+				return coord.lat + ',' + coord.lng;
+			},
+			showToast() {
+
+				// this.$refs.uToast.show({
+				// 	type: 'error',
+				// 	icon: false,
+				// 	title: '失败主题',
+				// 	message: "请选择起点和终点坐标",
+				// 	iconUrl: 'https://cdn.uviewui.com/uview/demo/toast/error.png'
+				// })
+			},
+			dot() {
+				if (this.isStar) {
+					this.isEnd = true;
+					this.endAddresData = this.addresData[this.activeIndex];
+					console.log('结束地址存在')
+				} else {
+					this.isStar = true;
+					this.starAddresData = this.addresData[this.activeIndex];
+					console.log('开始地址存在', this.starAddresData)
+				}
+				this.isChange = true;
+				// this.starAddresData=this.addresData[this.activeIndex];
+				// this.endAddresData=this.addresData[this.activeIndex];
+				// this.activeIndex=null;
+				// this.addresData=[];
+			},
+			tapMap(e) {
+				var that = this;
+				var id = e.currentTarget.id;
+				var maps = uni.createMapContext(id, this).$getAppMap();
+				maps.onclick = function(point) {
+					console.log(point);
+					// point.iconPath = '/static/btn_loc0.png';
+					// that.markers = that.markers.concat(point); uni.showToast({ 
+					//     title: '添加成功',
+					//     icon: 'none'
+					// });
+				};
+			}
+		}
+
+	}
+</script>
+<style lang="scss" scoped>
+	.reject-box {
+		margin-bottom: 28rpx;
+		margin-top: 28rpx;
+
+		.reject-box-top {
+			width: 100%;
+			height: 69rpx;
+			background: #7FB5FF;
+			border-radius: 26rpx 26rpx 0px 0px;
+			display: flex;
+			justify-content: space-between;
+
+			.top-right {
+				display: flex;
+				justify-content: start;
+				align-items: center;
+				margin-right: 36rpx;
+			}
+
+			uni-image {
+				width: 50rpx;
+				margin-left: 32rpx;
+				vertical-align: middle;
+			}
+
+		}
+
+	}
+
+	.buttonDd {
+		width: 134rpx;
+		height: 45rpx;
+		background: linear-gradient(0deg, #FFD334 0%, #F59A02 100%);
+		box-shadow: 0px 2rpx 13rpx 0px rgba(27, 43, 95, 0.25);
+		border-radius: 23rpx;
+		border: 0;
+		font-size: 26rpx;
+		font-weight: bold;
+		color: #FFFFFF;
+		padding: 0;
+		text-align: center;
+	}
+
+	.map {
+		height: 713rpx;
+		background: #FFFFFF;
+		border: 2rpx solid #77A8FF;
+		box-shadow: 0px 2rpx 13rpx 0px rgba(27, 43, 95, 0.25), 0px 0px 24rpx 6rpx rgba(109, 160, 251, 0.6);
+		border-radius: 28rpx;
+	}
+
+	.reject-box-bottom {
+		height: 30vh;
+		// height: calc(100vh - 44px - 22px - 713rpx - 45rpx - 44rpx - 50rpx - 188rpx);
+		// height: 540rpx;
+		overflow-y: auto;
+	}
+
+	.boxMr {
+		margin-left: 32rpx;
+		margin-right: 36rpx;
+		padding-top: 39rpx;
+		padding-bottom: 39rpx;
+	}
+
+	.adrBox {
+		display: flex;
+		justify-content: space-between;
+		align-items: center;
+		height: 86rpx;
+		font-size: 28rpx;
+		font-weight: 400;
+		color: #666666;
+	}
+
+	.active {
+		background: rgba(73, 91, 147, 0.3);
+		border-radius: 28rpx;
+		font-size: 30rpx;
+		font-weight: bold;
+		color: #333333;
+	}
+
+	.activeImg {
+		background: url(../../static/images/path/active.png);
+		background-size: 100% 100%;
+		width: 44rpx;
+		height: 44rpx;
+		margin-right: 21rpx;
+	}
+
+	.ml {
+		margin-left: 29rpx;
+	}
+
+	/deep/ .u-transition {
+		margin-top: 300rpx;
+	}
+</style>

+ 265 - 0
pages/cityEditInfo/index.vue

@@ -0,0 +1,265 @@
+<template>
+	<view class="container avstarBack">
+		<uni-navbar title="修改信息"></uni-navbar>
+		<view class="box commonMt relative">
+			<view class="absolute">
+				<view class="choose-line-bottom commonBj">
+					<u--form :model="form" ref="formRef" :rules="rules" labelWidth="0" class="formStyle">
+						<u-form-item prop="nickName" ref="form1">
+							<view class="redCircle"></view>
+							<text
+								class="itemText">姓&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;名</text>
+							<u-input class="inputStyle" v-model="form.nickName" placeholder="请输入账号所属联系人姓名">
+							</u-input>
+						</u-form-item>
+						<u-form-item prop="phonenumber">
+							<view class="redCircle"></view>
+							<text class="itemText">手&nbsp;&nbsp;&nbsp;&nbsp;机&nbsp;&nbsp;&nbsp;&nbsp;号</text>
+							<u-input class="inputStyle" v-model="form.phonenumber" placeholder="请输入联系人手机号">
+							</u-input>
+						</u-form-item>
+						<u-form-item @tap="showIt">
+							<view class="redCircle"></view>
+							<text
+								class="itemText">部&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;门</text>
+							<u-input disabled disabledColor="rgba(0,0,0,0)" type="default" suffixIcon="arrow-right"
+								suffixIconStyle="color: #495B93" class="inputStyle" v-model="deptName"
+								placeholder="请选择所属部门">
+							</u-input>
+							<!-- </fy-tree-select> -->
+						</u-form-item>
+					</u--form>
+					<tki-tree currentIcon="../../static/images/cityEditInfo/active.png"
+						defaultIcon="../../static/images/cityEditInfo/defalut.png" :selectParent="true"
+						@confirm="onConfirm" idKey="deptId" ref="tkitree" :range="list" rangeKey="deptName" />
+				</view>
+				<u-button @click="submit" shape="circle" color="linear-gradient(to top, #F59A02, #FFD334 )"
+					class="buttonStyle mt33 commonMb buttonLang">确认修改
+				</u-button>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import tkiTree from '@/components/tki-tree/tki-tree.vue'
+	import {
+		cityInfo,
+		tree,
+		editCity
+	} from "@/api/city/city.js"
+	export default {
+		components: {
+			tkiTree
+		},
+		data() {
+			return {
+				cumtomClass: {
+					// fontSize: '16rpx'
+				},
+				defaultValue: [],
+				list: [{
+					deptName: '一级 1',
+					deptId: 1,
+					children: [{
+						deptName: '二级 1',
+						deptId: 4,
+						children: [{
+							deptName: '三级 1',
+							deptId: 5
+						}]
+					}, {
+						deptName: '二级 2',
+						deptId: 5,
+						children: [{
+							deptName: '三级 1',
+							deptId: 9
+						}]
+					}]
+				}, {
+					deptName: '一级 2',
+					deptId: 2,
+					children: []
+				}, {
+					deptName: '一级 3',
+					deptId: 3,
+					children: []
+				}, {
+					deptName: '一级 4',
+					deptId: 99,
+					children: []
+				}],
+				form: {
+					companyName: null,
+					companyAbbreviation: null,
+					companyCode: null,
+					legalPerson: null,
+					phoneNumber: null,
+					deptName: null,
+					deptId: null
+				},
+				rules: {
+					nickName: [{
+						required: true,
+						message: '请输入名称',
+						trigger: ['blur', 'change']
+					}, ],
+					deptName: [{
+						required: true,
+						message: '请选择部门',
+						trigger: ['blur', 'change']
+					}, ],
+					phonenumber: [{
+						required: true,
+						message: '请输入手机号',
+						trigger: ['blur', 'change']
+					}, ]
+				},
+				// 城管id
+				userId: null,
+				userName: null,
+				deptName: null,
+				roleIds: []
+			}
+		},
+		methods: {
+			showIt() {
+				console.log(111);
+				this.$refs.tkitree._show()
+				console.log(this.$refs.tkitree);
+			},
+			onChange(e) {
+				console.log(e);
+			},
+			onConfirm(e) {
+				console.log(e)
+				console.log(e[0].deptName);
+				this.form.deptId = e[0].deptId
+				this.form.deptName = e[0].deptName
+				console.log(this.form);
+				this.deptName = e[0].deptName
+				// let arr = e.primary.filter((item, index) => {
+				// 	return item != undefined
+				// })
+				// this.form.deptName = arr[arr.length - 1]
+				// let array = e.values.filter((item) => {
+				// 	return item != undefined
+				// })
+				// this.form.deptId = array[array.length - 1]
+			},
+			submit() {
+				this.$refs.formRef.validate().then(async res => {
+					console.log('form', this.form);
+					let obj = {}
+					obj.deptId = this.form.deptId
+					obj.userId = this.form.userId
+					obj.nickName = this.form.nickName
+					obj.phonenumber = this.form.phonenumber
+					obj.userName = this.form.userName
+					console.log('obj', obj);
+					const result = await editCity({
+						...this.form,
+						roleIds: this.roleIds
+					})
+					console.log('修改成功', result);
+					this.$tab.navigateBack()
+				}).catch(errors => {
+					console.log(errors, 'errors');
+				})
+			},
+			// 获取当前登陆人信息
+			async getCityInfo(userId) {
+				const res = await cityInfo(userId)
+				console.log('信息', res);
+				this.form = res.data
+				this.roleIds = res.roleIds
+				this.deptName = res.data.dept.deptName
+			},
+			// 获取树
+			async getTree() {
+				const res = await tree()
+				console.log('树', res);
+				this.list = res.data
+			}
+		},
+		onLoad() {
+			this.userId = this.$store.state.user.userId
+			this.getCityInfo(this.userId)
+			this.getTree()
+
+		}
+	}
+</script>
+
+<style scoped lang="scss">
+	.avstarBack {
+		background-image: url(@/static/images/editInfo/editInfo.png);
+	}
+
+	.relative {
+		position: relative;
+	}
+
+	.absolute {
+		position: absolute;
+		bottom: 46rpx;
+		width: 100%;
+	}
+
+	.choose-line-bottom {
+		overflow: hidden;
+		padding: 49rpx 35rpx 93rpx;
+		box-sizing: border-box;
+
+		.small-box-middle {
+			position: relative;
+			margin-bottom: 27rpx;
+
+			border: 1rpx solid #EBEBEB;
+			border-radius: 20rpx;
+			padding: 28rpx;
+			box-sizing: border-box;
+
+			.small-box-middle-startAndEnd {
+				display: flex;
+				align-items: center;
+				font-size: 24rpx;
+				font-weight: bold;
+
+				uni-text {
+					margin-left: 22rpx;
+				}
+			}
+
+			.small-box-middle-line {
+				display: flex;
+				justify-content: start;
+				align-items: center;
+				margin-left: 11rpx;
+
+				.small-box-middle-line-left {
+					width: 2rpx;
+					height: 26rpx;
+					background: #eeeeee;
+					border-radius: 1rpx;
+					margin: 6rpx 7rpx;
+				}
+
+				.small-box-middle-line-right {
+					width: 439rpx;
+					height: 1rpx;
+					background: #eeeeee;
+					margin-left: 15rpx;
+				}
+			}
+		}
+	}
+
+	.mt33 {
+		margin-top: 33rpx;
+	}
+
+	/deep/.u-form-item__body {
+		padding: 26rpx 0;
+	}
+</style>

+ 966 - 0
pages/cityHome/index.vue

@@ -0,0 +1,966 @@
+<template>
+	<view :class="tabbarName==='home'?'container2':tabbarName==='my'?'container3':'container'">
+		<uni-navbar :title="getTile()" :placeholder="true" bgColor="rgba(0,0,0,0)" leftIconSize="0">
+		</uni-navbar>
+		<view class="box homeHeight" v-if="tabbarName==='home'">
+			<view class="contentBox">
+				<view class="headImg commonMt"></view>
+				<view class="userName titleStyle">账号:{{userName}}</view>
+				<view class="headName titleStyle">{{nickName}}</view>
+				<view class="tabs commonBj">
+					<view class="tabs-top">
+						<view class="tabs-top-one" @click="goTo('/pages/cityCar/index')">
+							<view class="img-box">
+								<image class="one-img" src="../../static/images/home/index1.png" mode="widthFix">
+								</image>
+							</view>
+							<text>车辆审批</text>
+						</view>
+						<view class="tabs-top-one" @click="goTo('/pages/cityPath/index')">
+							<view class="img-box">
+								<image class="one-img" src="../../static/images/city/index2.png" mode="widthFix">
+								</image>
+							</view>
+							<text>路线审批</text>
+						</view>
+						<view class="tabs-top-one" @click="goTo('/pages/cityTransport/index')">
+							<view class="img-box">
+								<image class="one-img" src="../../static/images/home/index4.png" mode="widthFix">
+								</image>
+							</view>
+							<text>运输审批</text>
+						</view>
+						<view class="tabs-top-one" @click="goTo('/pages/cityRecord/index')">
+							<view class="img-box">
+								<image class="one-img" src="../../static/images/home/index5.png" mode="widthFix">
+								</image>
+							</view>
+							<text>记录审批</text>
+						</view>
+					</view>
+				</view>
+				<view class="safeInfo">
+					<view class="flexBox">
+						<!-- <view class="leftLine"></view> -->
+						<image class="imgStyle" src="../../static/images/home/rigthPath.png" mode="widthFix">
+						</image>
+					</view>
+					<view class="flexBox">安全信息 </view>
+					<view class="flexBox">
+						<!-- <view class="rightLine"></view> -->
+						<image class="imgStyle" src="../../static/images/home/leftPath.png" mode="widthFix">
+						</image>
+					</view>
+				</view>
+				<view class="safeBox">
+					<view class="safe-content commonBj" v-for="(item,index) in safetyData" :key="index">
+						<view class="safe-content-one">
+							<view class="colorbox">
+							</view>
+							<view class="text-content">
+								<text>{{item.title}}</text>
+							</view>
+						</view>
+						<view class="safe-content-one">
+							<view class="colorbox1">
+							</view>
+							<view class="text-content1">
+								<text>{{item.conten}}</text>
+							</view>
+						</view>
+						<view class="safe-content-bottom">
+							<view class="bottom-left">
+								<image class="timer" src="../../static/images/home/time.png" mode="aspectFill"></image>
+								<text>{{item.date}}</text>
+								<text>{{item.time}}</text>
+							</view>
+							<view class="bottom-right">
+								<text>{{item.dept}}</text>
+							</view>
+						</view>
+					</view>
+				</view>
+			</view>
+		</view>
+		<view v-if="tabbarName==='firm'" class="box" style="overflow: hidden;">
+			<!-- 企业信息 -->
+			<view class="box2 firmHeight">
+				<view class="commonMb commonMt">
+					<view class="car-content" @tap="gotoPersonInfo(item.id)" v-for="item in companyList" :key="item.id">
+						<view class="car-info commonBj">
+							<view class="person-top">
+								<image style="width: 60rpx;height: 60rpx;" src="../../static/images/city/gongsi.png"
+									mode="widthFix"></image>
+								<text>{{ item.companyName }}</text>
+							</view>
+							<view class="person-bottom" style="margin-top: 20rpx;">
+								<view class="carinfo-bottom listText">
+									<image style="width: 22rpx;height: 22rpx;"
+										src="../../static/images/record/duoren.png" mode="widthFix"></image>
+									<text>企业法人:{{item.legalPerson}}</text>
+								</view>
+								<view class="carinfo-bottom listText">
+									<image style="width: 22rpx;height: 22rpx;" src="../../static/images/user/phone.png"
+										mode="widthFix"></image>
+									<text>电 话:{{item.phoneNumber}}</text>
+								</view>
+							</view>
+						</view>
+					</view>
+				</view>
+			</view>
+		</view>
+		<view v-if="tabbarName==='my'" class="box homeHeight width100">
+			<view class="commonMt">
+				<view class="avstarImgBox">
+					<view class="headImg2">
+						<!-- <image style="width: 191rpx;" src="../../static/images/home/avstar.png" mode="widthFix"></image> -->
+					</view>
+					<view class="username">
+						<p>账号:{{userName}}</p>
+						<p>{{nickName}}</p>
+					</view>
+				</view>
+				<view class="avstarInfo ">
+					<view class="info-box" @tap="goTo('/pages/cityEditInfo/index')">
+						<image style="width: 78rpx;" src="../../static/images/home/bianjiwenjian.png" mode="widthFix">
+						</image>
+						<text class="mt28">修改信息</text>
+					</view>
+					<view class="info-box" @tap="versionList">
+						<image style="width: 78rpx;" src="../../static/images/home/banbengengxin.png" mode="widthFix">
+						</image>
+						<text class="mt28">版本更新</text>
+					</view>
+					<view class="info-box mt30" @tap="goTo('/pages/editPassword/index')">
+						<image style="width: 78rpx;" src="../../static/images/home/klm.png" mode="widthFix">
+						</image>
+						<text class="mt28">修改密码</text>
+					</view>
+					<view class="info-box mt30">
+						<image style="width: 78rpx;" src="../../static/images/home/tuichu.png" mode="widthFix">
+						</image>
+						<text class="mt28">退出</text>
+					</view>
+				</view>
+			</view>
+		</view>
+		<homeHint :show="show"></homeHint>
+		<u-tabbar :value="tabbarName" @change="changeTabbarName" :fixed="true" :border="false" :placeholder="true"
+			activeColor="#F59A02" :safeAreaInsetBottom="true">
+			<u-tabbar-item text="首页" name="home">
+				<image class="u-page__item__slot-icon" slot="active-icon" src="../../static/images/nav_02.png"></image>
+				<image class="u-page__item__slot-icon" slot="inactive-icon" src="../../static/images/nav_01.png">
+				</image>
+			</u-tabbar-item>
+			<u-tabbar-item text="企业信息" name="firm">
+				<image class="u-page__item__slot-icon" slot="active-icon" src="../../static/images/nav_04.png"></image>
+				<image class="u-page__item__slot-icon" slot="inactive-icon" src="../../static/images/nav_03.png">
+				</image>
+			</u-tabbar-item>
+			<u-tabbar-item text="我的" name="my">
+				<image class="u-page__item__slot-icon" slot="active-icon" src="../../static/images/nav_06.png"></image>
+				<image class="u-page__item__slot-icon" slot="inactive-icon" src="../../static/images/nav_05.png">
+				</image>
+			</u-tabbar-item>
+		</u-tabbar>
+		<!-- 版本更新弹出框 -->
+		<u-popup :show="isUpdateShow" mode="center">
+			<view class="update-box">
+				<view class="update-text" v-if="bnList.url">
+					<view class="title-text">
+						版本更新
+					</view>
+					<view class="middle-text">
+						发现新版本{{bnList.version}},升级后体验更顺畅
+					</view>
+					<view class="middle-text">
+						当前版本{{bnList.oldVersion}}
+					</view>
+				</view>
+				<view class="update-text" v-else>
+					<view class="title-text">
+						版本更新
+					</view>
+
+					<view class="middle-text">
+						当前版本{{bnList.version}},已经是最新版本了
+					</view>
+				</view>
+				<view class="update-button" v-if="bnList.url">
+					<u-button shape="circle" color="linear-gradient(to top, #F59A02, #FFD334 )"
+						@tap="getKpi(bnList.url)" class="add-button width220 boderRadius buttonLang width220">马上更新
+					</u-button>
+					<u-button @tap="isUpdateShow = false"
+						class=" add-button boderRadius backWhtie colorYellow width220">暂不更新</u-button>
+				</view>
+				<view class="update-close" @tap="isUpdateShow = false">
+					<u-icon size="66" color="#ffffff" name="close-circle"></u-icon>
+				</view>
+			</view>
+		</u-popup>
+	</view>
+</template>
+
+<script>
+	import homeHint from "../../components/homeHint.vue"
+	import {
+		companyInfoList
+	} from "@/api/city/company.js"
+	import {
+		versionList
+	} from "@/api/company/my.js"
+	export default {
+		components: {
+			homeHint
+		},
+		data() {
+			return {
+				nickName: this.$store.state.user.nickName,
+				userName: this.$store.state.user.userName,
+				weburl: 'http://jl.122.gov.cn/',
+				// 版本更新开关
+				isUpdateShow: false,
+				// 车辆信息或者人员信息
+				isCarInfo: true,
+				companyList: [],
+				safetyData: [{
+						title: '安全信息安全信息安全信息安全信息安全信息',
+						conten: '占位文字占位文字占位文字占位文字占位文字占位文 占位文字占位文字占位文字占位文字占位文字',
+						date: '2022-08-19',
+						time: '14:35:30',
+						dept: '环保部门',
+					},
+					{
+						title: '安全信息安全信息安全信息安全信息安全信息',
+						conten: '占位文字占位文字占位文字占位文字占位文字占位文 占位文字占位文字占位文字占位文字占位文字',
+						date: '2022-08-19',
+						time: '14:35:30',
+						dept: '环保部门',
+					},
+					{
+						title: '安全信息安全信息安全信息安全信息安全信息',
+						conten: '占位文字占位文字占位文字占位文字占位文字占位文 占位文字占位文字占位文字占位文字占位文字',
+						date: '2022-08-19',
+						time: '14:35:30',
+						dept: '环保部门',
+					},
+					{
+						title: '安全信息安全信息安全信息安全信息安全信息',
+						conten: '占位文字占位文字占位文字占位文字占位文字占位文 占位文字占位文字占位文字占位文字占位文字',
+						date: '2022-08-19',
+						time: '14:35:30',
+						dept: '环保部门',
+					},
+					{
+						title: '安全信息安全信息安全信息安全信息安全信息',
+						conten: '占位文字占位文字占位文字占位文字占位文字占位文 占位文字占位文字占位文字占位文字占位文字',
+						date: '2022-08-19',
+						time: '14:35:30',
+						dept: '环保部门',
+					},
+
+				],
+				show: false,
+				tabbarName: "home",
+				mineForm: {
+					username: 'ltjz0102',
+					qiyeName: '蓝天建筑'
+				},
+				// 版本更新开关
+				isUpdateShow: false,
+				bnList: {
+					version: "",
+					oldVersion: "",
+					url: ','
+				}
+			}
+		},
+		onLoad() {},
+		onShow() {
+			// this.show = true;
+		},
+		methods: {
+			changeTabbarName(name) {
+				this.tabbarName = name
+				if (name === 'firm') {
+					console.log(111);
+					this.getCompanyList()
+				}
+			},
+			getCompanyList() {
+				companyInfoList().then(res => {
+					console.log("企业列表", res);
+					this.companyList = res.rows
+				})
+			},
+			// getUserState() {
+			// 	getUserState().then(res => {
+			// 		this.personList = res.rows
+			// 	})
+			// },
+			getKpi(url) {
+				this.isUpdateShow = false
+				// #ifdef H5
+				window.location.href = url; //问号后面传参
+				// #endif
+
+				// #ifdef APP-PLUS
+				plus.runtime.openURL(url);
+				// #endif
+			},
+			versionList() {
+				versionList().then(res => {
+					console.log(res, 'res')
+					//#ifdef APP-PLUS
+					console.log('版本', plus.runtime.versionCode)
+					// this.version=plus.runtime.versionCode
+					// 获取本地应用资源版本号
+					plus.runtime.getProperty(plus.runtime.appid, (info) => {
+						console.log(JSON.stringify(info));
+						this.bnList.oldVersion = info.version;
+						this.bnList.version = res.rows[0].versionNo;
+						if (res.rows[0].versionNo == info.version) {
+							this.bnList.url = ''
+						} else {
+							this.bnList.url = res.rows[0].url;
+						}
+						this.isUpdateShow = true;
+						// this.versionCode = info.versionCode ;
+					})
+					//#endif
+
+					// console.log(res.rows[0].versionNo, 'res');
+				})
+			},
+			goAddres() {
+				// #ifdef H5
+				window.location.href = this.weburl; //问号后面传参
+				// #endif
+
+				// #ifdef APP-PLUS
+				plus.runtime.openURL(this.weburl);
+				// #endif
+
+			},
+			getTile() {
+				switch (this.tabbarName) {
+					case 'firm':
+						return '企业信息';
+						break;
+					case 'my':
+						return '个人中心';
+						break;
+					default:
+						return ''
+				}
+			},
+			goTo(path) {
+				console.log('出发了')
+
+				this.$tab.navigateTo(path)
+			},
+			gotoPersonInfo(id) {
+				this.$tab.navigateTo(`/pages/cityCompanyDetail/index?id=${id}`)
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	// 屏幕高度-导航栏高度-按钮的高度上边距-按钮的高度-按钮的高度下边距-底部导航栏高度
+	$Height: calc(100vh - 44px - 22px - 66rpx - 25rpx - 50px + 112rpx);
+
+	/deep/.u-popup__content {
+		border-radius: 18rpx;
+	}
+
+	// 个人中心
+	.avstarImgBox {
+		display: flex;
+		justify-content: center;
+		flex-direction: column;
+		align-items: center;
+
+		.username {
+			text-align: center;
+			font-size: 28rpx;
+			font-weight: bold;
+			color: #FFFFFF;
+			margin-top: 33rpx;
+
+			p {
+				&:nth-child(2) {
+					margin-top: 18rpx;
+				}
+			}
+		}
+	}
+
+	.avstarInfo {
+		display: flex;
+		flex-wrap: wrap;
+		justify-content: space-between;
+		border-radius: 17% 17% 0 0;
+		background: linear-gradient(to bottom, rgba(2, 92, 204, 0.9) 0%, rgba(40, 127, 222, 0.3) 100%);
+		padding: 80rpx 36rpx 0rpx;
+		// box-shadow: 0px 0px 64px 0px rgba(0, 76, 170, 0.52);
+		margin-top: 60rpx;
+
+		.info-box {
+			display: flex;
+			flex-direction: column;
+			justify-content: center;
+			align-items: center;
+			width: 322rpx;
+			height: 225rpx;
+			background: rgba(255, 255, 255, 0.5);
+			border: 2rpx solid #77A8FF;
+			// box-shadow: 0px 0px 24rpx 6rpx rgba(109, 160, 251, 0.6); 
+			border-radius: 28rpx;
+			font-size: 28rpx;
+			font-weight: bold;
+			color: #FFFFFF;
+		}
+	}
+
+	.mt30 {
+		margin-top: 30rpx;
+	}
+
+	.width100 {
+		width: 100%;
+	}
+
+	.width220 {
+		width: 220rpx;
+		height: 68rpx !important;
+	}
+
+	.boderRadius {
+		border-radius: 68rpx !important;
+	}
+
+	.colorYellow {
+		color: rgba(245, 154, 2, 1) !important;
+	}
+
+	.backWhtie {
+		background-color: #ffffff !important;
+		border: 2rpx solid #F69C04;
+		font-weight: bold;
+	}
+
+
+	.update-box {
+		width: 543rpx;
+		height: 630rpx;
+		background: url(../../static/images/home/update.png);
+		background-size: 100%;
+		position: relative;
+
+		.update-text {
+			text-align: center;
+			margin-top: 330rpx;
+
+			.title-text {
+				font-size: 36rpx;
+				color: #333333;
+				font-weight: bold;
+			}
+
+			.middle-text {
+				font-size: 26rpx;
+				color: rgba(153, 153, 153, 1);
+				font-weight: 400;
+				margin-top: 16rpx;
+			}
+
+
+		}
+
+		.update-button {
+			display: flex;
+			justify-content: space-between;
+
+			/deep/ uni-button {
+				margin-top: 47rpx;
+
+				&:nth-child(1) {
+					margin-right: 13rpx;
+				}
+
+				&:nth-child(2) {
+					margin-left: 13rpx;
+				}
+			}
+
+		}
+
+		.update-close {
+			position: absolute;
+			text-align: center;
+			left: 50%;
+			transform: translate(-50%);
+			bottom: -80rpx;
+		}
+	}
+
+	.mt28 {
+		margin-top: 28rpx;
+	}
+
+	// 企业信息
+	.firmHeight {
+		height: $Height;
+	}
+
+	.firmBox {
+		padding: 0rpx 36rpx;
+	}
+
+	.person-bottom {
+		display: flex;
+		justify-content: space-between;
+		align-items: center;
+	}
+
+	.person-top {
+		display: flex;
+		align-items: center;
+
+		uni-text {
+			font-size: 28rpx;
+			font-weight: bold;
+			color: #333333;
+			margin-left: 25rpx;
+		}
+	}
+
+	.car-content {
+		display: flex;
+		flex-direction: column;
+		margin-top: 20rpx;
+		margin-bottom: 30rpx;
+	}
+
+
+
+	.car-info {
+		padding: 18rpx 30rpx;
+		box-sizing: border-box;
+		// margin-top: 24rpx;
+
+		.carInfo-top {
+			display: flex;
+			align-items: center;
+			justify-content: space-between;
+			// margin-bottom: 17rpx; 
+
+			.top-left {
+				display: flex;
+				align-items: center;
+
+				uni-text {
+					font-size: 28rpx;
+					font-weight: bold;
+					color: #333333;
+					margin-left: 25rpx;
+				}
+			}
+
+			.top-right {
+				display: flex;
+				align-items: center;
+
+				uni-text {
+					// font-size: 24rpx;
+					// font-weight: 400;
+					// color: #485B93;
+					margin-left: 19rpx;
+				}
+			}
+		}
+	}
+
+	.car-info:nth-child(1) {
+		margin-top: 0rpx !important;
+	}
+
+	.carinfo-bottom::before {
+		content: '';
+		display: table;
+	}
+
+	.carinfo-bottom {
+		display: flex;
+		align-items: center;
+		margin-bottom: 14rpx;
+
+		uni-text {
+			margin-left: 19rpx;
+		}
+
+	}
+
+
+	.container2 {
+		background-image: url(@/static/images/home/bg.png);
+		background-size: 100% 100%;
+		height: 100vh;
+		overflow: hidden;
+	}
+
+	.container3 {
+		background-image: url(@/static/images/loginBj.png);
+		background-size: 100% 100%;
+		height: 100vh;
+		overflow: hidden;
+	}
+
+	.contentBox {
+		// width: 90%;
+
+		// display: flex;
+		// flex-direction: column;
+		height: 100%;
+		overflow: hidden;
+	}
+
+
+	.title {
+		display: flex;
+		justify-content: center;
+		align-items: center;
+		margin: 30rpx 0;
+		color: #FFFFFF;
+	}
+
+	.search {
+		// margin-top: 66px;
+		display: flex;
+		justify-content: center;
+		align-items: center;
+		width: 100%;
+
+		color: #ffffff;
+		font-size: 25rpx;
+		height: 66rpx;
+		line-height: 66rpx;
+		background: rgba(255, 255, 255, 0.64);
+		border: 2rpx solid #77A8FF;
+		box-shadow: 0rpx 0rpx 24rpx 6rpx rgba(109, 160, 251, 0.6);
+		/* opacity: 0.8; */
+		border-radius: 33rpx;
+		margin-bottom: 30rpx;
+	}
+
+	.searchIMG {
+		width: 25rpx !important;
+		height: 25rpx !important;
+		margin-right: 10rpx;
+	}
+
+	.tabs {
+		// width: 100%;
+		// height: 417rpx;
+		padding: 44rpx 30rpx 56rpx;
+	}
+
+	.img-box {
+		width: 90rpx;
+		height: 90rpx;
+		margin: 10rpx 0 20rpx;
+	}
+
+	.one-img {
+		width: 100% !important;
+	}
+
+	.tabs-top {
+		display: flex;
+		justify-content: space-around;
+	}
+
+	.tabs-top-one {
+		display: flex;
+		flex-direction: column;
+		justify-content: center;
+		align-items: center;
+		font-size: 28rpx;
+		font-weight: bold;
+		color: #485B93;
+		width: 170rpx;
+	}
+
+	.safeInfo {
+		margin: 25rpx 0;
+		width: 100%;
+		color: #ffffff;
+		font-size: 36rpx;
+		font-weight: bold;
+		display: flex;
+
+	}
+
+	.flexBox {
+		flex: 1;
+		display: flex;
+		align-items: center;
+		justify-content: center;
+	}
+
+	.imgStyle {
+		width: 100%;
+		height: 12rpx;
+	}
+
+	.safe-content {
+		width: 100%;
+		margin-bottom: 20rpx;
+		padding: 20rpx 30rpx;
+		box-sizing: border-box;
+	}
+
+	.safe-content:last-child {
+		margin-bottom: 90px;
+	}
+
+	.safe-content-one {
+		display: flex;
+		margin-top: 20rpx;
+		margin-bottom: 20rpx;
+		// align-items: center;
+	}
+
+	.colorbox {
+		width: 15rpx;
+		height: 15rpx;
+		background-color: #00E2C6;
+		border-radius: 8rpx;
+		margin-top: 14rpx;
+	}
+
+	.colorbox1 {
+		width: 15rpx;
+		height: 15rpx;
+		background-color: #FF5E46;
+		border-radius: 8rpx;
+		margin-top: 16rpx;
+	}
+
+	.text-content {
+		color: #2F4173;
+		font-size: 28rpx;
+		font-weight: bold;
+		// margin: 20rpx 0 20rpx 20rpx;
+		margin-left: 20rpx;
+		width: 568rpx;
+	}
+
+	.text-content1 {
+		font-size: 24rpx;
+		width: 558rpx;
+		font-weight: 400;
+		color: #485B93;
+		line-height: 48rpx;
+		margin-left: 20rpx;
+		// margin: 0rpx 0 20rpx 20rpx;
+	}
+
+	.safe-content-bottom {
+		display: flex;
+		justify-content: space-between;
+		align-items: center;
+	}
+
+	.bottom-left {
+		width: 280rpx;
+		display: flex;
+		justify-content: space-between;
+		align-items: center;
+		font-size: 24rpx;
+		font-weight: 400;
+		color: #485B94;
+	}
+
+	.timer {
+		width: 25rpx !important;
+		height: 25rpx !important;
+	}
+
+	.bottom-right {
+		font-size: 24rpx;
+		font-weight: 400;
+		color: #485B94;
+	}
+
+	.dialog {
+		position: fixed;
+		width: 542rpx;
+		height: 462rpx;
+		background: rgba(185, 196, 201, 0.75);
+		border: 2rpx solid #77A8FF;
+		box-shadow: 0rpx 0rpx 24rpx 6rpx rgba(109, 160, 251, 0.6);
+		border-radius: 28rpx;
+		top: 50%;
+		left: 50%;
+		transform: translate(-50%, -50%);
+	}
+
+	.sheild {
+		width: 197rpx;
+		height: 197rpx;
+		background: #FFFCF6;
+		box-shadow: 0rpx 9rpx 7rpx 0rpx rgba(24, 51, 129, 0.14);
+		border-radius: 50%;
+		position: absolute;
+		left: 50%;
+		transform: translate(-50%, -50%);
+	}
+
+	.sheild-img {
+		position: absolute;
+		width: 120rpx;
+		top: 50%;
+		left: 50%;
+		transform: translate(-50%, -50%);
+	}
+
+	.star {
+		position: absolute;
+		width: 450rpx;
+		left: 50%;
+		top: 15%;
+		transform: translate(-50%, -50%);
+	}
+
+	.star-img {
+		width: 450rpx;
+	}
+
+	.dialog-top {
+		position: absolute;
+		height: 240rpx;
+		width: 100%;
+		border-bottom: 1rpx solid #77A8FF;
+		border-top-left-radius: 28rpx;
+		border-top-right-radius: 28rpx;
+		border-bottom-left-radius: 48%;
+		border-bottom-right-radius: 48%;
+		background-color: #D3E0FF;
+	}
+
+	.yellow-circle {
+		width: 31rpx;
+		height: 31rpx;
+		background: linear-gradient(0deg, #EFC20D 0%, #EBCC12 100%);
+		border-radius: 50%;
+		opacity: 0.6;
+		position: absolute;
+		top: 20%;
+		left: 70%;
+	}
+
+	.dialog-title {
+		text-align: center;
+		position: absolute;
+		bottom: 15%;
+		left: 50%;
+		transform: translate(-50%);
+	}
+
+	.dialog-bottom {
+		width: 542rpx;
+		height: 200rpx;
+		position: absolute;
+		bottom: 0;
+	}
+
+	.dialog-bottom {
+		display: flex;
+		flex-direction: column;
+		align-items: center;
+		font-size: 28rpx;
+		font-weight: bold;
+		color: #485B93;
+		line-height: 41rpx;
+	}
+
+
+	/deep/ .u-tabbar__content {
+		background-image: url('@/static/images/nav_bg.png');
+		background-size: 100% 100%;
+	}
+
+	/deep/ .u-tabbar-item {
+		height: 70px;
+	}
+
+	/deep/ .u-tabbar__content {
+		background-color: transparent;
+	}
+
+	/deep/ .u-tabbar__content {
+		height: 60px;
+	}
+
+	.u-page__item__slot-icon {
+		width: 32px;
+		height: 32px;
+	}
+
+	/deep/ .u-tabbar-item__text {
+		font-size: 11px;
+		font-weight: 400;
+		color: #4A5D94;
+	}
+
+
+	.headImg {
+		margin-left: auto;
+		margin-right: auto;
+		width: 160rpx;
+		height: 160rpx;
+		// border: 1px salmon solid;
+		background: url('@/static/images/city/tx.png');
+		background-size: 100% 100%;
+		// margin-bottom: 19rpx;
+	}
+
+	.headImg2 {
+		margin-left: auto;
+		margin-right: auto;
+		width: 190rpx;
+		height: 190rpx;
+		// border: 1px salmon solid;
+		background: url('@/static/images/city/tx.png');
+		background-size: 100% 100%;
+	}
+
+	.headName {
+		margin-left: auto;
+		margin-right: auto;
+		text-align: center;
+		margin-bottom: 40rpx;
+	}
+
+	.userName {
+		margin-left: auto;
+		margin-right: auto;
+		text-align: center;
+		margin-bottom: 20rpx;
+	}
+
+	.titleStyle {
+		font-size: 30rpx;
+		font-weight: bold;
+		color: #FFFFFF;
+	}
+
+	//屏幕高度-导航栏高度-状态栏高度-底部导航栏-上边距-头像高度-下边距-文字框高度-文字框下边距 -二个图标高度-二个图标上边距-二个文本高度-一个文本高度-一个文本框的上下高度
+	.safeBox {
+		overflow-y: auto;
+		height: calc(100vh - 44px - 22px - 70px - 22rpx - 140rpx - 19rpx - 27rpx - 40rpx - 180rpx - 20rpx - 52rpx - 26rpx - 50rpx + 108rpx);
+	}
+</style>

+ 316 - 0
pages/cityPath/index.vue

@@ -0,0 +1,316 @@
+<template>
+	<view class="container">
+		<uni-navbar title="路线申请" path="/pages/cityHome/index"></uni-navbar>
+		<view class="box" style="overflow: hidden;">
+			<u-button class="commonMt custom-style" shape="circle" @click="addLine"
+				color="linear-gradient(to top, #F59A02, #FFD334)">
+				<view class="button-class">
+					<image style="width: 29rpx;height: 29rpx;" src="../../static/images/transport/plus.png"
+						mode="widthFix">
+					</image>
+					<text style="margin-left: 19rpx;">新增路线</text>
+				</view>
+			</u-button>
+			<view class="box2">
+				<view class="commonMb">
+					<view class="small-box commonBj" @click="changeState(item)" v-for="(item,index) in list"
+						:key="item.id">
+						<view class="small-box-top">
+							<view class="small-box-top-left">
+								<image style="width: 35rpx;height: 35rpx;margin-left: 11rpx;"
+									:src="item.auditState===0? '../../static/images/transport/state1.png': item.auditState===-1? '../../static/images/transport/state2.png':'../../static/images/transport/state3.png'"
+									mode="widthFix">
+								</image>
+								<text>{{ item.startDept }}</text>
+							</view>
+							<view :class="changeStateClass(item.auditState)" class="small-box-top-right">
+								<text>{{item.auditState===0? '待审核':item.auditState===-1?'驳 回':'通 过'}}</text>
+							</view>
+						</view>
+						<view class="small-box-middle">
+							<view class="small-box-middle-startAndEnd" style="margin-bottom: -6rpx;">
+								<view class="circle-green circle-style">
+									起
+								</view>
+								<!-- <text class="deepGreen bold">起点:</text> -->
+								<text class="green" style="width: 70%;">{{item.startName}}</text>
+							</view>
+							<view class="small-box-middle-line">
+								<view class="small-box-middle-line-left">
+								</view>
+								<!-- <view class="small-box-middle-line-right commonLine">
+								</view> -->
+								<!-- <view :class="changeStateClass(item.auditState)" class="small-box-top-right">
+									<text>{{item.auditState===0? '待审核':item.auditState===-1?'驳 回':'通 过'}}</text>
+								</view> -->
+							</view>
+							<view class="small-box-middle-startAndEnd" style="margin-top: -6rpx;">
+								<view class="circle-red circle-style">
+									终
+								</view>
+								<!-- <text class="deepRed bold">终点:</text> -->
+								<text class="red" style="width: 70%;">{{item.endName}}</text>
+							</view>
+						</view>
+						<view class="small-box-bottom mt23">
+							<view class="small-box-bottom-left">
+								<image style="width: 25rpx;height: 25rpx;margin-left: 10rpx;"
+									src="../../static/images/path/enterprise.png" mode="widthFix"></image>
+								<text class="ml19 font-size-style">发起部门:{{item.startDept}}</text>
+							</view>
+							<view class="small-box-bottom-left">
+								<image style="width: 25rpx;height: 25rpx;" src="../../static/images/transport/time.png"
+									mode="widthFix">
+								</image>
+
+								<text class="mr15 ml19 font-size-style">发起时间:{{changeTime(item.createTime)}}</text>
+								<!-- <text class="mr15 ml19 font-size-style">发起时间:2022/8/24 16:46</text> -->
+							</view>
+						</view>
+					</view>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import {
+		pathList
+	} from "@/api/city/path.js"
+	export default {
+		data() {
+			return {
+				list: []
+			}
+		},
+		methods: {
+			changeTime(time) {
+				if (time) {
+					return time.slice(0, time.length - 3).replace(/-/g, "/")
+				} else {
+					return '无'
+				}
+			},
+			routeList() {
+				pathList().then(res => {
+					console.log(res, 'res');
+					this.list = res.rows;
+				})
+			},
+			addLine() {
+				this.$tab.navigateTo('/pages/cityAddPath/index')
+			},
+			changeStateClass(state) {
+				switch (state) {
+					case 0:
+						return 'state-class1'
+					case -1:
+						return 'state-class2'
+					case 1:
+						return 'state-class3'
+				}
+			},
+			changeDate(date) {
+				return date.substring(0, 4) + '年' + date.substring(4, 6) + '月' + date.substring(6)
+			},
+			changeState(item) {
+				this.$tab.navigateTo('/pages/cityPathDetail/index?id=' + item.id)
+			}
+		},
+		onLoad() {
+			console.log('初始化了', '111');
+			this.routeList()
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.deepRed {
+		color: #E54504
+	}
+
+	.deepGreen {
+		color: #088243
+	}
+
+	.red {
+		color: #FF6424;
+	}
+
+	.green {
+		color: #45AC77;
+
+
+	}
+
+	.circle-style {
+		width: 40rpx;
+		height: 40rpx;
+		line-height: 40rpx;
+		text-align: center;
+		border-radius: 50%;
+		font-size: 20rpx;
+		font-weight: bold;
+		color: #FFFFFF;
+		// padding: 7px;
+	}
+
+	.circle-green {
+		background: #45AC77;
+	}
+
+	.circle-red {
+		background: #FF6424;
+	}
+
+	.bold {
+		font-weight: bold;
+	}
+
+	.custom-style {
+		font-size: 28rpx;
+		height: 66rpx;
+		line-height: 66rpx;
+		font-size: 28rpx;
+		font-weight: bold;
+		color: #FFFFFF;
+		margin-bottom: 25rpx;
+
+		.button-class {
+			display: flex;
+			justify-content: center;
+			align-items: center;
+		}
+	}
+
+	.small-box-top-right {
+		text-align: center;
+		width: 103rpx;
+		height: 45rpx;
+		border-radius: 15rpx;
+		font-size: 26rpx;
+		font-weight: bold;
+		color: #FFFFFF;
+		line-height: 45rpx;
+		margin-left: 30rpx;
+	}
+
+	.small-box {
+		margin-bottom: 30rpx;
+		margin-top: 20rpx;
+		padding: 22rpx;
+
+		.small-box-top {
+			display: flex;
+			justify-content: space-between;
+			align-items: center;
+
+			.small-box-top-left {
+				display: flex;
+				align-items: center;
+
+				uni-text {
+					font-size: 28rpx;
+					font-weight: bold;
+					color: #333333;
+					margin-left: 18rpx;
+				}
+
+			}
+
+
+		}
+
+		.small-box-middle {
+			// width: 631rpx;
+			// height: 144rpx;
+			background: rgba(245, 246, 250, 0.5);
+			border: 1rpx solid rgba(235, 235, 235, 0.5);
+			border-radius: 20rpx;
+			margin-top: 20rpx;
+			padding: 20rpx 28rpx;
+			box-sizing: border-box;
+
+			.small-box-middle-startAndEnd {
+				display: flex;
+				align-items: center;
+				font-size: 24rpx;
+				font-weight: bold;
+
+				uni-text {
+					margin-left: 22rpx;
+				}
+			}
+
+			.small-box-middle-line {
+				display: flex;
+				justify-content: space-between;
+				align-items: center;
+
+				.small-box-middle-line-left {
+					width: 2rpx;
+					height: 40rpx;
+					background: rgba(238, 238, 238, 0.5);
+					border-radius: 1rpx;
+					margin: 8rpx 0 8rpx 20rpx;
+				}
+
+				.small-box-middle-line-right {
+					width: 70%;
+					margin-left: 15rpx;
+				}
+			}
+		}
+
+		.small-box-date {
+			display: flex;
+			align-items: center;
+			margin-top: 24rpx;
+		}
+
+		.small-box-bottom {
+			display: flex;
+			justify-content: space-between;
+			align-items: center;
+
+			.small-box-bottom-left {
+				display: flex;
+				align-items: center;
+			}
+		}
+	}
+
+
+	.ml19 {
+		margin-left: 10rpx;
+	}
+
+	.mt23 {
+		margin-top: 23rpx;
+	}
+
+	.mr15 {
+		margin-right: 15rpx;
+	}
+
+	.font-size-style {
+		font-size: 24rpx;
+		font-weight: 400;
+		color: #485B93;
+	}
+
+	.state-class1 {
+		background: linear-gradient(90deg, #F59A02 0%, #FFD334 100%);
+	}
+
+	.state-class2 {
+
+		background: linear-gradient(90deg, #FF2D04 0%, #FFA53E 100%);
+	}
+
+	.state-class3 {
+
+		background: linear-gradient(90deg, #3FC377 0%, #83D992 100%);
+	}
+</style>

+ 398 - 0
pages/cityPathDetail/index.vue

@@ -0,0 +1,398 @@
+<template>
+	<view class="container">
+		<uni-navbar title="路线详情"></uni-navbar>
+		<view class="box">
+			<view class="reject-box commonBj commonMt">
+				<view class="reject-box-top">
+					<view class="top-left">
+						<image src="../../static/images/path/location.png" mode="widthFix"></image>
+						<text class="listTitle">路线信息</text>
+					</view>
+				</view>
+				<view class="reject-box-bottom infoHeight">
+					<view class="map">
+						<!-- <mapNew height="469rpx">
+							
+						</mapNew> -->
+						<mapImg :startPoint='form.startPoint' :endPoint='form.endPoint'
+							:mtRoutePointList='form.mtRoutePointList'></mapImg>
+					</view>
+					<view class="state-icon">
+						<view class="flexAlignCenter">
+							<view class="greenCircle">
+							</view>
+							<text class="itemText">上报企业:</text>
+						</view>
+						<view class="flexAlignCenter">
+							<text class="infoText">{{form.companyName}}</text>
+						</view>
+					</view>
+					<view class="state-icon">
+						<view class="flexAlignCenter">
+							<view class="greenCircle">
+							</view>
+							<text class="itemText">开始地址:</text>
+						</view>
+						<view class="flexAlignCenter">
+							<text class="infoText">{{form.startName}}</text>
+						</view>
+					</view>
+					<view class="state-icon">
+						<view class="flexAlignCenter">
+							<view class="greenCircle">
+							</view>
+							<text class="itemText">结束地址:</text>
+						</view>
+						<view class="flexAlignCenter">
+							<text class="infoText">{{form.endName}}</text>
+						</view>
+					</view>
+					<view class="state-icon">
+						<view class="flexAlignCenter">
+							<view class="greenCircle">
+							</view>
+							<text class="itemText">发起部门:</text>
+						</view>
+						<view class="flexAlignCenter">
+							<text class="infoText">{{form.startDept}}</text>
+						</view>
+					</view>
+					<view class="state-icon">
+						<view class="flexAlignCenter">
+							<view class="greenCircle">
+							</view>
+							<text class="itemText">发起时间:</text>
+						</view>
+						<view class="flexAlignCenter">
+							<text class="infoText">{{form.createTime}}</text>
+						</view>
+					</view>
+				</view>
+			</view>
+			<!-- 审批状态 -->
+			<view class="reject-box mt28 commonMb commonBj" v-if="form.auditState === 0">
+				<view class="reject-box-top just-content-start">
+					<image src="../../static/images/car/yunshu.png" mode="widthFix"></image>
+					<text class="listTitle">审批状态</text>
+				</view>
+				<view class="reject-box-bottom pb0">
+					<view class="state-icon">
+						<view class="flexAlignCenter center">
+							<view class="redCircle">
+							</view>
+							<text class="itemText">审批状态:</text>
+							<view class="normal" :class="auditType===1?'success':''" @tap="successClick">
+								<image style="width: 33rpx;height: 33rpx;margin-right: 12rpx;"
+									src="../../static/images/cityCar/state2.png" mode="widthFix"></image>
+								<text>通过</text>
+							</view>
+							<view class="normal ml19" :class="auditType===-1?'fail':''" @tap="failClick">
+								<image style="width: 33rpx;height: 33rpx;margin-right: 12rpx;"
+									src="../../static/images/cityCar/state1.png" mode="widthFix"></image>
+								<text>驳回</text>
+							</view>
+						</view>
+					</view>
+					<!-- <view :class="isPass?'border-style mb':'border-style2'"></view> -->
+					<view class="state-icon" v-if="auditType === -1">
+						<view class="flexAlignCenter center">
+							<view class="redCircle">
+							</view>
+							<text class="itemText">驳回原因:</text>
+						</view>
+					</view>
+					<u--textarea confirmType="done" v-if="auditType === -1" class="textareaStyle" height="198rpx"
+						v-model="auditContent" placeholder="请输入驳回原因">
+					</u--textarea>
+					<!-- <view v-if="!isPass" class="border-style2 mb"></view> -->
+				</view>
+			</view>
+			<!-- 通过 -->
+			<view class="reject-box mt28 commonMb commonGreenBj" v-else>
+				<view class="reject-box-top just-content-start bg-color-green">
+					<image src="../../static/images/car/yunshu.png" mode="widthFix"></image>
+					<text class="listTitle">审批状态</text>
+				</view>
+				<view class="reject-box-bottom pb0">
+					<view class="state-icon">
+						<view class="flexAlignCenter">
+							<view class="greenCircle">
+							</view>
+							<text class="itemText">审批状态:</text>
+						</view>
+						<view class="flexAlignCenter">
+							<u-icon color="#017D3E" style="margin-right: 12rpx;" name="checkmark-circle-fill"></u-icon>
+							<text class="greenText">通过</text>
+						</view>
+					</view>
+				</view>
+			</view>
+			<u-button v-if="form.auditState === 0" @click="submit" class="add-button commonMb" shape="circle"
+				color="linear-gradient(to top, #F59A02, #FFD334)">确认审批</u-button>
+		</view>
+	</view>
+</template>
+
+<script>
+	import {
+		routeInfo
+	} from "@/api/company/path.js"
+	import {
+		checkRoute
+	} from "@/api/city/path.js"
+	export default {
+		data() {
+			return {
+				// 驳回原因
+				auditContent: null,
+				// 通过样式开关
+				auditType: 1,
+				// 驳回样式开关
+				isFail: false,
+				//通过或者驳回
+				isPass: true,
+				form: {
+					id: null,
+					endPoint: '',
+					startName: '',
+					endName: '',
+					name: '',
+					startDept: '',
+					endPoint: '',
+					startPoint: '',
+					mtRoutePointList: [],
+					auditTime: '',
+				},
+			}
+		},
+		methods: {
+			async submit() {
+				let obj = {}
+				obj.id = this.form.id
+				obj.auditState = this.auditType
+				obj.auditContent = this.auditContent
+				const res = await checkRoute(obj)
+				console.log('res', res);
+				this.auditContent = null
+				this.$tab.navigateTo('/pages/cityPath/index')
+			},
+			// 切换按钮事件
+			successClick() {
+				if (this.auditType === 1) {
+					return
+				} else {
+					this.auditType = 1
+				}
+			},
+			failClick() {
+				if (this.isFail === -1) {
+					return
+				} else {
+					this.auditType = -1
+				}
+			},
+			routeInfo(id) {
+				routeInfo(id).then(res => {
+					console.log(res);
+					this.form = res.data;
+				})
+			},
+		},
+		onLoad: function(option) {
+			if (option.id) {
+				this.routeInfo(option.id)
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	// 底部按钮样式
+	.add-button {
+		height: 85rpx;
+		// background: linear-gradient(0deg, #FFD334 0%, #F59A02 100%);
+		// box-shadow: 0rpx 2rpx 13rpx 0rpx rgba(27, 43, 95, 0.25);
+		// border-radius: 28rpx;
+		font-size: 30rpx;
+		font-weight: bold;
+		color: #FFFFFF;
+		border: 0;
+		margin-top: 27rpx;
+	}
+
+	// 审批状态按钮样式
+	.normal {
+		width: 205rpx;
+		height: 72rpx;
+		background: rgba(126, 142, 193, 0.6);
+		border: 2rpx solid #7E8EC1;
+		border-radius: 36rpx;
+		display: flex;
+		justify-content: center;
+		align-items: center;
+		font-size: 28rpx;
+		font-weight: bold;
+		color: #FFFFFF;
+	}
+
+	.success {
+		background: linear-gradient(90deg, #3FC377 0%, #83D992 100%);
+		box-shadow: 0px 2rpx 13rpx 0px rgba(27, 43, 95, 0.25);
+	}
+
+	.fail {
+		background: linear-gradient(90deg, #FF2D04 0%, #FFA53E 100%);
+		box-shadow: 0px 2rpx 13rpx 0px rgba(27, 43, 95, 0.25);
+	}
+
+	.ml19 {
+		margin-left: 19rpx;
+	}
+
+	.center {
+		justify-content: center;
+		align-items: center;
+	}
+
+	.textareaStyle {
+		margin-bottom: 56rpx;
+		background: rgba(255, 255, 255, 0.1);
+		border: 2rpx solid #495B93 !important;
+		border-radius: 15rpx;
+
+		/deep/ .input-placeholder {
+			color: #7E8EC1 !important;
+			font-size: 26rpx;
+		}
+	}
+
+	.reject-box {
+
+		.reject-box-top {
+			width: 100%;
+			height: 69rpx;
+			background: #7FB5FF;
+			border-radius: 26rpx 26rpx 0px 0px;
+			display: flex;
+			justify-content: space-between;
+
+			uni-image {
+				width: 50rpx;
+				margin-left: 32rpx;
+				vertical-align: middle;
+			}
+
+		}
+
+		.reject-box-bottom {
+			padding: 40rpx;
+
+			.state-icon {
+				display: flex;
+				margin: 70rpx 0;
+			}
+
+			.state-icon:nth-child(1) {
+				margin: 0 0 40rpx;
+			}
+
+			.border-style {
+				border-top: 1rpx dashed #F98803;
+				width: 90%;
+				margin: 0 auto;
+			}
+
+			.border-style2 {
+				border-top: 1rpx dashed #FB5637;
+				width: 90%;
+				margin: 0 auto;
+			}
+		}
+	}
+
+	.reject-box-bottom:nth-child(2) {
+		padding: 40rpx 40rx 20rpx !important;
+	}
+
+	.block {
+		display: block !important;
+	}
+
+	.border {
+		border: 1rpx solid #495B93;
+	}
+
+	.box-size {
+		width: 598rpx;
+		height: 198rpx;
+	}
+
+	.mt30 {
+		margin-top: 30rpx;
+	}
+
+	.radius15 {
+		border-radius: 15rpx;
+	}
+
+	.state-box-size {
+		width: 180rpx;
+		height: 180rpx;
+	}
+
+	.state-box-size-video {
+		width: 175rpx !important;
+		height: 175rpx !important;
+	}
+
+	.space-between {
+		justify-content: space-between;
+	}
+
+	.just-content-start {
+		justify-content: flex-start !important;
+		align-items: center;
+	}
+
+	.bg-color-green {
+		background: #36C372 !important;
+	}
+
+	.bg-color-red {
+		background: #FB5637 !important;
+	}
+
+	.fontTongGuo {
+		font-size: 26rpx !important;
+		font-weight: bold !important;
+		color: #007C3C !important;
+	}
+
+	.fontColor {
+		color: #FC5536 !important;
+	}
+
+	.mb {
+		margin-bottom: 53rpx !important;
+	}
+
+	.pb0 {
+		padding-bottom: 0 !important;
+	}
+
+	.mt28 {
+		margin-top: 40rpx;
+	}
+
+	.mb0 {
+		margin-bottom: 0rpx !important;
+	}
+
+	.map {
+		height: 469rpx;
+		background: #FFFFFF;
+		border: 2rpx solid #495B93;
+		border-radius: 15rpx;
+		margin-top: 20rpx;
+	}
+</style>

+ 217 - 0
pages/cityRecord/index.vue

@@ -0,0 +1,217 @@
+<template>
+	<view class="container">
+		<uni-navbar title="记录审批" path="/pages/cityHome/index"></uni-navbar>
+		<view class="box">
+			<view @click="goTo(item)" class="small-box commonBj commonMt commonMb" v-for="item in List" :key="item.id">
+				<view class="small-box-top">
+					<view class="small-box-top-left">
+						<image style="width: 51rpx;height: 51rpx;margin-left: 11rpx;"
+							src="../../static/images/city/gongsi.png" mode="widthFix">
+						</image>
+						<text>{{ item.transportName }}</text>
+					</view>
+					<view class="small-box-right">
+						<text>待审批</text>
+					</view>
+				</view>
+				<view class="small-box-middle">
+					<view class="small-box-middle-startAndEnd" style="margin-top: -6rpx;">
+						<view class="start-green">
+							起
+						</view>
+						<text class="green" style="width: 70%;">{{item.startName}}</text>
+					</view>
+					<view class="small-box-middle-line-right">
+					</view>
+					<view class="small-box-middle-startAndEnd" style="margin-top: -6rpx;">
+						<view class="start-green bgRed">
+							终
+						</view>
+						<text class="red" style="width: 70%;">{{item.endName}}</text>
+					</view>
+				</view>
+				<view class="small-box-date">
+					<image style="width: 24rpx;height: 24rpx;margin-left: 10rpx;"
+						src="../../static/images/transport/rili.png" mode="widthFix">
+					</image>
+					<text class="ml19 font-size-style">
+						时间: {{item.startTime+' - '+item.endTime}}
+					</text>
+				</view>
+				<view class="small-box-bottom mt23">
+					<view class="small-box-bottom-left">
+						<image style="width: 25rpx;height: 25rpx;margin-left: 10rpx;"
+							src="../../static/images/transport/time.png" mode="widthFix"></image>
+						<text class="ml19 font-size-style">车牌号:{{item.carNumber}} </text>
+					</view>
+					<view class="small-box-bottom-left">
+						<image style="width: 25rpx;height: 25rpx;" src="../../static/images/record/duoren.png"
+							mode="widthFix">
+						</image>
+						<text class="mr15 ml19 font-size-style">车辆司机:{{item.driverName}}</text>
+					</view>
+				</view>
+			</view>
+		</view>
+
+	</view>
+</template>
+
+<script>
+	import {
+		recordList
+	} from "@/api/city/record.js"
+	export default {
+		data() {
+			return {
+				List: []
+			}
+		},
+		methods: {
+			goTo(item) {
+				console.log(item);
+				this.$tab.navigateTo(`/pages/cityRecordDetail/index?id=${item.id}`)
+			},
+			async getRecordList() {
+				const res = await recordList()
+				console.log(res);
+				this.List = res.rows.filter(item => {
+					return item.auditState === 0
+				})
+				// this.List = res.rows
+			}
+		},
+		onLoad() {
+			this.getRecordList()
+		}
+	}
+</script>
+
+<style scoped lang="scss">
+	.mt23 {
+		margin-top: 23rpx;
+	}
+
+	.mr15 {
+		margin-right: 15rpx;
+	}
+
+	.small-box {
+		padding: 22rpx;
+		box-sizing: border-box;
+		margin-bottom: 31rpx;
+
+		.small-box-top {
+			display: flex;
+			justify-content: space-between;
+			align-items: center;
+
+			.small-box-top-left {
+				display: flex;
+				align-items: center;
+
+				uni-text {
+					font-size: 28rpx;
+					font-weight: bold;
+					color: #333333;
+					margin-left: 18rpx;
+				}
+
+			}
+
+			.small-box-right {
+				text-align: center;
+				width: 103rpx;
+				height: 45rpx;
+				// border-radius: 15rpx;
+				font-size: 26rpx;
+				font-weight: bold;
+				color: #FDFB18;
+				line-height: 45rpx;
+			}
+		}
+
+		.small-box-middle {
+			background: rgba(245, 246, 250, 0.5);
+			border: 1rpx solid rgba(235, 235, 235, 0.5);
+			border-radius: 20rpx;
+			margin-top: 20rpx;
+			padding: 20rpx 28rpx;
+			box-sizing: border-box;
+
+			.small-box-middle-startAndEnd {
+				display: flex;
+				align-items: center;
+				font-size: 24rpx;
+				font-weight: bold;
+
+				uni-text {
+					margin-left: 22rpx;
+				}
+			}
+
+			.small-box-middle-line-right {
+				width: 2rpx;
+				height: 20rpx;
+				background: #eeeeee;
+				border-radius: 1rpx;
+				margin: 10rpx 16rpx;
+			}
+		}
+
+		.small-box-date {
+			display: flex;
+			align-items: center;
+			margin-top: 24rpx;
+		}
+
+		.small-box-bottom {
+			display: flex;
+			justify-content: space-between;
+			align-items: center;
+
+			.small-box-bottom-left {
+				display: flex;
+				align-items: center;
+			}
+		}
+	}
+
+	.box-linear {
+		background: linear-gradient(90deg, #FF2D04 0%, #FFA53E 100%) !important;
+	}
+
+	.start-green {
+		width: 34rpx;
+		height: 34rpx;
+		background: #45AC77;
+		border-radius: 50%;
+		text-align: center;
+		line-height: 34rpx;
+		font-size: 20rpx;
+		font-weight: bold;
+		color: #FFFFFF;
+	}
+
+	.bgRed {
+		background: #FF6424;
+	}
+
+	.red {
+		color: #FF6424;
+	}
+
+	.green {
+		color: #45AC77;
+	}
+
+	.ml19 {
+		margin-left: 10rpx;
+	}
+
+	.font-size-style {
+		font-size: 24rpx;
+		font-weight: 400;
+		color: #485B93;
+	}
+</style>

+ 674 - 0
pages/cityRecordDetail/index.vue

@@ -0,0 +1,674 @@
+<template>
+	<view class="container">
+		<uni-navbar title="记录审批" path="/pages/cityRecord/index"></uni-navbar>
+		<view class="box commonMt">
+			<view class="commonMb">
+				<view class="addLineSuccess-big-box commonBj">
+					<view class="addLineSuccess-big-box-top">
+						<image style="width: 45rpx;height: 45rpx; margin-left: 30rpx;"
+							src="../../static/images/transport/dingwei.png" mode="widthFix">
+						</image>
+						<text class="listTitle">记录信息</text>
+					</view>
+					<view class="addLineSuccess-big-box-bottom">
+						<view class="addLineSuccess-big-box-bottom-item">
+							<view class="flexAlignCenter">
+								<view class="greenCircle">
+								</view>
+								<text class="itemText">运输名称:</text>
+							</view>
+							<view class="flexAlignCenter">
+								<text class="infoText">{{form.transportName}}</text>
+							</view>
+						</view>
+						<view class="map">
+							<mapImg :startPoint='form.startPoint' :endPoint='form.endPoint'
+								:mtRoutePointList='form.mtRoutePointList'>
+							</mapImg>
+						</view>
+						<view class="addLineSuccess-big-box-bottom-item ">
+							<view class="flexAlignCenter">
+								<view class="greenCircle">
+								</view>
+								<text class="itemText">运输开始时间:</text>
+							</view>
+							<view class="flexAlignCenter">
+								<text class="infoText">{{form.startTime}}</text>
+							</view>
+						</view>
+						<!-- <view class="border-style"></view> -->
+						<view class="addLineSuccess-big-box-bottom-item ">
+							<view class="flexAlignCenter">
+								<view class="greenCircle">
+								</view>
+								<text class="itemText">运输结束时间:</text>
+							</view>
+							<view class="flexAlignCenter">
+								<text class="infoText">{{form.endTime}}</text>
+							</view>
+						</view>
+						<!-- <view class="border-style"></view> -->
+						<view class="addLineSuccess-big-box-bottom-item">
+							<view class="flexAlignCenter">
+								<view class="greenCircle">
+								</view>
+								<text
+									class="itemText">车&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;牌&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;号:</text>
+							</view>
+							<view class="flexAlignCenter">
+								<text class="infoText">{{form.carNumber}}</text>
+							</view>
+						</view>
+						<view class="addLineSuccess-big-box-bottom-item">
+							<view class="flexAlignCenter">
+								<view class="greenCircle">
+								</view>
+								<text class="itemText">车&nbsp;&nbsp;&nbsp;辆&nbsp;&nbsp;司&nbsp;&nbsp;&nbsp;机:</text>
+							</view>
+							<view class="flexAlignCenter">
+								<text class="infoText">{{form.driverName}}</text>
+							</view>
+						</view>
+					</view>
+				</view>
+				<!-- 车辆状态 -->
+				<view class="addLineSuccess-big-box mt33 commonBj">
+					<view class="addLineSuccess-big-box-top">
+						<image style="width: 45rpx;height: 45rpx; margin-left: 30rpx;"
+							src="../../static/images/car/yunshu.png" mode="widthFix">
+						</image>
+						<text class="listTitle">车辆状态</text>
+					</view>
+					<view class="addLineSuccess-big-box-bottom">
+						<view class="addLineSuccess-big-box-bottom-item block">
+							<view class="flexAlignCenter">
+								<view class="greenCircle">
+								</view>
+								<text class="itemText">开始车辆状态:</text>
+							</view>
+							<view class="space-between state-icon-right mt30">
+								<view class="state-box-size border radius15">
+									<!-- <video controls object-fit="fill" @play="playvideo" @fullscreenchange="fullscreenchange"
+									class="state-box-size border radius15" id="truckVideo" ref="truckVideo"
+									src="https://bjetxgzv.cdn.bspapp.com/VKCEYUGU-uni-app-doc/360e4b20-4f4b-11eb-8a36-ebb87efcf8c0.mp4"></video> -->
+									<xfx-image-upload :remove="false" :add="false" v-model="startStateVideo"
+										mediaType="video"></xfx-image-upload>
+								</view>
+								<u--image class=" border radius15" radius="15rpx" :key="index"
+									v-for="(item,index) in startImgList" :showLoading="true" :src="item" width="180rpx"
+									height="180rpx" @tap="previewStartImg(item)">
+								</u--image>
+							</view>
+							<view class="flexAlignCenter mt33" v-if="!form.isInterrupt">
+								<view class="greenCircle">
+								</view>
+								<text class="itemText">结束车辆状态:</text>
+							</view>
+							<view class="space-between state-icon-right mt30" v-if="!form.isInterrupt">
+								<view class=" state-box-size border radius15">
+									<!-- <video controls object-fit="fill" @play="playvideo" @fullscreenchange="fullscreenchange"
+									class="state-box-size border radius15" id="truckVideo" ref="truckVideo"
+									src="https://bjetxgzv.cdn.bspapp.com/VKCEYUGU-uni-app-doc/360e4b20-4f4b-11eb-8a36-ebb87efcf8c0.mp4"></video> -->
+									<xfx-image-upload :remove="false" :add="false" v-model="endStateVideo"
+										mediaType="video"></xfx-image-upload>
+								</view>
+								<u--image class=" border radius15" radius="15rpx" :key="index"
+									v-for="(item,index) in endImgList" :showLoading="true" :src="item" width="180rpx"
+									height="180rpx" @tap="previewEndImg(item)">
+								</u--image>
+							</view>
+						</view>
+					</view>
+				</view>
+				<view class="mt33" style="margin-bottom: 100rpx;">
+					<!-- 通过 -->
+					<!-- <view v-if="!form.isInterrupt">
+						<view class="addLineSuccess-big-box  commonGreenBj">
+							<view class="addLineSuccess-big-box-top bg-color-green">
+								<image style="width: 45rpx; height: 45rpx;margin-left: 30rpx;"
+									src="../../static/images/record/yichang.png" mode="widthFix">
+								</image>
+								<text class="listTitle">审批状态</text>
+							</view>
+							<view class="addLineSuccess-big-box-bottom">
+								<view class="addLineSuccess-big-box-bottom-item">
+									<view class="flexAlignCenter">
+										<view class="greenCircle">
+										</view>
+										<text class="itemText">审批状态:</text>
+									</view>
+									<view class="flexAlignCenter">
+										<u-icon color="#017D3E" name="checkmark-circle-fill"
+											style="margin-right: 12rpx;">
+										</u-icon>
+										<text class="greenText">通过</text>
+									</view>
+								</view>
+							</view>
+						</view>
+					</view> -->
+					<!-- 驳回 -->
+					<view v-if="form.isInterrupt">
+						<!-- 异常脱离原因 -->
+						<view class="addLineSuccess-big-box commonRedBj">
+							<view class="addLineSuccess-big-box-top bg-color-red">
+								<image style="width: 45rpx; height: 45rpx;margin-left: 30rpx;"
+									src="../../static/images/record/yichang.png" mode="widthFix">
+								</image>
+								<text class="listTitle">异常情况</text>
+							</view>
+							<view class="addLineSuccess-big-box-bottom">
+								<view class="addLineSuccess-big-box-bottom-item">
+									<view class="flexAlignCenter">
+										<view class="redCircle mCircle">
+										</view>
+										<text class="itemText">异常情况:</text>
+									</view>
+									<view class="flexAlignCenter">
+										<text class="redText">{{isInterruptContent}}</text>
+									</view>
+								</view>
+								<view class="addLineSuccess-big-box-bottom-item" v-if="form.breakReason">
+									<view class="flexAlignCenter">
+										<view class="redCircle mCircle">
+										</view>
+										<text class="itemText">脱离原因:</text>
+									</view>
+									<view class="flexAlignCenter">
+										<text class="redText">{{form.breakReason}}</text>
+									</view>
+								</view>
+							</view>
+						</view>
+					</view>
+					<view class="reject-box mt28 commonMb commonBj">
+						<view class="reject-box-top just-content-start">
+							<image src="../../static/images/car/yunshu.png" mode="widthFix"></image>
+							<text class="listTitle">记录查看</text>
+						</view>
+						<view class="reject-box-bottom pb0">
+							<view class="state-icon">
+								<view class="flexAlignCenter center">
+									<view class="redCircle">
+									</view>
+									<text class="itemText">记录查看:</text>
+									<view class="normal" :class="auditType===1?'success':''" @tap="successClick">
+										<image style="width: 33rpx;height: 33rpx;margin-right: 12rpx;"
+											src="../../static/images/cityCar/state2.png" mode="widthFix"></image>
+										<text>合规</text>
+									</view>
+									<view class="normal ml19" :class="auditType===-1?'fail':''" @tap="failClick">
+										<image style="width: 33rpx;height: 33rpx;margin-right: 12rpx;"
+											src="../../static/images/cityCar/state1.png" mode="widthFix"></image>
+										<text>不合规</text>
+									</view>
+								</view>
+							</view>
+							<!-- <view :class="isPass?'border-style mb':'border-style2'"></view> -->
+							<view class="state-icon" v-if="auditType === -1">
+								<view class="flexAlignCenter center">
+									<view class="redCircle">
+									</view>
+									<text class="itemText">反馈建议:</text>
+								</view>
+							</view>
+							<u--textarea confirmType="done" v-if="auditType === -1" class="textareaStyle"
+								height="198rpx" v-model="auditContent" placeholder="请输入反馈建议">
+							</u--textarea>
+							<!-- <view v-if="!isPass" class="border-style2 mb"></view> -->
+						</view>
+					</view>
+					<u-button @click="submit" class="add-button commonMb" shape="circle"
+						color="linear-gradient(to top, #F59A02, #FFD334)">确认审批</u-button>
+					<reaee-video-cover-extractor :path="startTempFilePath" @success='startSuccess'
+						@error='startError' />
+					<reaee-video-cover-extractor :path="endTempFilePath" @success='endSuccess' @error='endError' />
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import {
+		recordDetail,
+		recordCheck,
+		errorState
+	} from "@/api/city/record.js"
+	export default {
+		// dicts: ['transport_error_state'],
+		data() {
+			return {
+				dict: [],
+				newDict: [],
+				// 驳回原因
+				auditContent: null,
+				// 驳回样式开关
+				isFail: false,
+				//通过或者驳回
+				// 结束状态的视频
+				endStateVideo: [],
+				// 开始状态的视频
+				startStateVideo: [],
+				form: {
+					startPoint: '',
+					endPoint: '',
+					mtRoutePointList: [],
+				},
+				// 通过样式开关
+				auditType: 1,
+				xqForm: {},
+				endImgList: [],
+				startImgList: [],
+				startTempFilePath: '',
+				endTempFilePath: '',
+				startSrcVideo: '',
+				endSrcVideo: '',
+				auditState: null,
+				isInterruptContentObj: {},
+				isInterruptContent: null
+			}
+		},
+		methods: {
+			translate(obj) {
+				for (let key in obj) {
+					console.log(key);
+					if (this.form.isInterrupt == key) {
+						this.isInterruptContent = this.isInterruptContentObj[key]
+						console.log(this.isInterruptContent);
+					}
+				}
+			},
+			async submit() {
+				let obj = {}
+				obj.id = this.form.id
+				obj.auditState = this.auditType
+				obj.auditContent = this.auditContent
+				const res = await recordCheck(obj)
+				console.log(res);
+				this.auditContent = null
+				this.$tab.navigateTo('/pages/cityRecord/index')
+
+			},
+			// 切换按钮事件
+			successClick() {
+				if (this.form.isInterrupt != 0) {
+					return
+				}
+				if (this.auditType === 1) {
+					return
+				} else {
+					this.auditType = 1
+				}
+			},
+			failClick() {
+				if (this.isFail === -1) {
+					return
+				} else {
+					this.auditType = -1
+				}
+			},
+			select() {
+				this.startTempFilePath = this.startSrcVideo;
+				this.endTempFilePath = this.endSrcVideo
+			},
+			startSuccess(o) {
+				console.log('成功了', o);
+				this.startStateVideo = [{
+					cover: o,
+					url: this.startSrcVideo
+				}]
+				console.log('开始视频', this.startStateVideo);
+			},
+			endSuccess(o) {
+				console.log('成功了', o);
+				this.endStateVideo = [{
+					cover: o,
+					url: this.endSrcVideo
+				}]
+				console.log('开始视频', this.endStateVideo);
+			},
+			// 视频封面提取失败
+			startError(e) {
+				console.log('startError', e);
+			},
+			endError(e) {
+				console.log('enderror', e);
+			},
+			// 开始状态图片预览
+			previewStartImg(current) {
+				const urls = this.startImgList.map(item => {
+					return item
+				})
+				uni.previewImage({
+					urls
+				})
+			},
+			// 结束图片状态预览
+			previewEndImg(current) {
+				const urls = this.endImgList.map(item => {
+					return item
+				})
+				uni.previewImage({
+					urls
+				})
+			},
+			// 获取详情
+			async getRecordDetail(id) {
+				const res = await recordDetail(id)
+				console.log('详情', res);
+				this.form = res.data
+				this.form.startTime = this.form.startTime.slice(0, 16)
+				this.form.endTime = this.form.endTime.slice(0, 16)
+				// this.startStateVideo.push(this.form.startVideo[0].url)
+				// this.endStateVideo.push(this.form.endVideo[0].url)
+				res.data.startImg.forEach(item => {
+					this.startImgList.push(item.url)
+				})
+				res.data.endImg.forEach(item => {
+					this.endImgList.push(item.url)
+				})
+				this.startSrcVideo = this.form.startVideo[0].url
+				this.endSrcVideo = this.form.endVideo[0].url
+				this.select();
+
+			},
+			async getErrorState() {
+				const res = await errorState()
+				console.log('车辆状态', res);
+				let obj = {}
+
+				res.data.forEach((item, index) => {
+					obj[index + 1] = item.dictLabel
+				})
+				console.log('obj', obj);
+				this.isInterruptContentObj = obj
+				this.translate(obj)
+			}
+		},
+		watch: {
+			form: {
+				handler(newVal) {
+					this.getErrorState()
+					if (this.form.isInterrupt === 1 || this.form.isInterrupt === 2 || this.form.isInterrupt === 3 || this
+						.form.isInterrupt === 4) {
+						this.auditType = -1
+					}
+				},
+				deep: true
+			},
+			// dict: {
+			// 	handler(newVal) {
+			// 		this.newDict = newVal
+			// 		console.log(this.newDict);
+			// 		this.translate()
+			// 	},
+			// 	deep: true
+			// }
+		},
+		onLoad(option) {
+			this.getRecordDetail(option.id)
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.mt28 {
+		margin-top: 28rpx;
+	}
+
+	.just-content-start {
+		justify-content: flex-start !important;
+		align-items: center;
+	}
+
+	.reject-box-bottom:nth-child(2) {
+		padding: 40rpx 40rx 20rpx !important;
+	}
+
+	.reject-box {
+
+		.reject-box-top {
+			width: 100%;
+			height: 69rpx;
+			background: #7FB5FF;
+			border-radius: 26rpx 26rpx 0px 0px;
+			display: flex;
+			justify-content: space-between;
+
+			.top-right {
+				display: flex;
+				justify-content: start;
+				align-items: center;
+				margin-right: 36rpx;
+
+				uni-image {
+					width: 28rpx;
+					margin-left: 32rpx;
+					vertical-align: middle;
+				}
+
+				.state-text {
+
+					margin-left: 13rpx;
+					line-height: 69rpx;
+				}
+			}
+
+			uni-image {
+				width: 50rpx;
+				margin-left: 32rpx;
+				vertical-align: middle;
+			}
+		}
+
+		.reject-box-bottom {
+			padding: 40rpx;
+
+			.state-icon {
+				display: flex;
+				margin: 40rpx 0;
+			}
+
+			.state-icon:nth-child(1) {
+				margin: 0 0 40rpx;
+			}
+
+			.border-style {
+				border-top: 1rpx dashed #F98803;
+				width: 90%;
+				margin: 0 auto;
+			}
+
+			.border-style2 {
+				border-top: 1rpx dashed #FB5637;
+				width: 90%;
+				margin: 0 auto;
+			}
+		}
+	}
+
+	// 底部按钮样式
+	.add-button {
+		height: 85rpx;
+		// background: linear-gradient(0deg, #FFD334 0%, #F59A02 100%);
+		// box-shadow: 0rpx 2rpx 13rpx 0rpx rgba(27, 43, 95, 0.25);
+		// border-radius: 28rpx;
+		font-size: 30rpx;
+		font-weight: bold;
+		color: #FFFFFF;
+		border: 0;
+		margin-top: 27rpx;
+	}
+
+	// 审批状态按钮样式
+	.normal {
+		width: 205rpx;
+		height: 72rpx;
+		background: rgba(126, 142, 193, 0.6);
+		border: 2rpx solid #7E8EC1;
+		border-radius: 36rpx;
+		display: flex;
+		justify-content: center;
+		align-items: center;
+		font-size: 28rpx;
+		font-weight: bold;
+		color: #FFFFFF;
+	}
+
+	.success {
+		background: linear-gradient(90deg, #3FC377 0%, #83D992 100%);
+		box-shadow: 0px 2rpx 13rpx 0px rgba(27, 43, 95, 0.25);
+	}
+
+	.fail {
+		background: linear-gradient(90deg, #FF2D04 0%, #FFA53E 100%);
+		box-shadow: 0px 2rpx 13rpx 0px rgba(27, 43, 95, 0.25);
+	}
+
+	.ml19 {
+		margin-left: 19rpx;
+	}
+
+	.center {
+		justify-content: center;
+		align-items: center;
+	}
+
+	.textareaStyle {
+		margin-bottom: 56rpx;
+		background: rgba(255, 255, 255, 0.1);
+		border: 2rpx solid #495B93 !important;
+		border-radius: 15rpx;
+
+		/deep/ .input-placeholder {
+			color: #7E8EC1 !important;
+			font-size: 26rpx;
+		}
+	}
+
+	.fontGreen {
+		color: #007C3C !important;
+	}
+
+	.bg-color-green {
+		background: #36C372 !important;
+	}
+
+	.fontColor {
+		color: #FC5536 !important;
+	}
+
+	.fontWeight {
+		font-weight: bold !important;
+	}
+
+	.bg-color-red {
+		background: #FB5637 !important;
+	}
+
+	.block {
+		display: block !important;
+	}
+
+	.radius15 {
+		border-radius: 15rpx;
+	}
+
+	.border {
+		border: 1rpx solid #495B93;
+	}
+
+	.state-box-size {
+		width: 180rpx;
+		height: 180rpx;
+	}
+
+	.mt30 {
+		margin-top: 30rpx;
+	}
+
+	.space-between {
+		justify-content: space-between;
+	}
+
+	.mt33 {
+		margin-top: 33rpx;
+	}
+
+	.addLineSuccess-big-box {
+
+		.addLineSuccess-big-box-top {
+			height: 69rpx;
+			background: #7FB5FF;
+			border-radius: 28rpx 28rpx 0rpx 0rpx;
+			display: flex;
+			align-items: center;
+			font-size: 26rpx;
+			font-weight: bold;
+			color: #FFFFFF;
+		}
+
+		.addLineSuccess-big-box-bottom {
+			padding: 0rpx 39rpx;
+
+			.addLineSuccess-big-box-bottom-item {
+				display: flex;
+				margin: 36rpx auto;
+
+				.state-icon-left {
+					display: flex;
+					align-items: center;
+
+					.green-circle {
+						width: 15rpx;
+						height: 15rpx;
+						background: #36C372;
+						border-radius: 50%;
+						margin-right: 16rpx;
+					}
+
+					uni-text {
+						font-size: 26rpx;
+						font-weight: bold;
+						color: #495B93;
+
+					}
+
+				}
+
+				.state-icon-right {
+					display: flex;
+					align-items: center;
+
+					uni-text {
+						font-size: 26rpx;
+						font-weight: 400;
+						color: #333333;
+						margin-left: 14rpx;
+					}
+				}
+			}
+
+			.map {
+				height: 339rpx;
+				background: #FFFFFF;
+				border: 2rpx solid #495B93;
+				border-radius: 15rpx;
+				margin: 25rpx auto 40rpx;
+			}
+
+			// .border-style {
+			// 	border-top: 1rpx dashed #F98803;
+			// 	margin: 0 auto;
+			// }
+		}
+	}
+
+	/deep/.xfx-image-upload-Item {
+		margin-right: 0;
+		margin-bottom: 0;
+		width: 180rpx;
+		height: 180rpx;
+	}
+</style>

+ 325 - 0
pages/cityTransport/index.vue

@@ -0,0 +1,325 @@
+<template>
+	<view class="container">
+		<uni-navbar title="运输审批" path="/pages/cityHome/index"></uni-navbar>
+		<view class="box" style="overflow: hidden;">
+			<view class="box2 heightBox">
+				<view class="commonMb commonMt">
+					<view @tap="goToDetial(item)" class="small-box commonBj" v-for="(item,index) in list"
+						:key="item.id">
+						<view class="small-box-top">
+							<view class="small-box-top-left">
+								<image style="width: 35rpx;height: 35rpx;margin-left: 11rpx;"
+									:src="item.auditState===0? '../../static/images/transport/state1.png': item.auditState===-1? '../../static/images/transport/state2.png':'../../static/images/transport/state3.png'"
+									mode="widthFix">
+								</image>
+								<text>{{ item.transportName }}</text>
+							</view>
+							<view :class="changeStateClass(item.auditState)" class="small-box-top-right">
+								<text>{{item.auditState===0? '待审核':item.auditState===-1?'驳 回':'通 过'}}</text>
+							</view>
+						</view>
+						<view class="small-box-middle">
+							<view class="small-box-middle-startAndEnd" style="margin-bottom: -6rpx;">
+								<view>
+									<view class="circle-green circle-style">
+										起
+									</view>
+								</view>
+
+								<!-- <text class="deepGreen bold">起点:</text> -->
+								<text class="green" style="width: 70%;">{{item.startName}}</text>
+							</view>
+							<view class="small-box-middle-line">
+								<view class="small-box-middle-line-left">
+								</view>
+								<!-- <view class="small-box-middle-line-right commonLine">
+								</view> -->
+							</view>
+							<view class="small-box-middle-startAndEnd" style="margin-top: -6rpx;">
+								<view class="circle-red circle-style">
+									终
+								</view>
+								<!-- <text class="deepRed bold">终点:</text> -->
+								<text class="red" style="width: 70%;">{{item.endName}}</text>
+							</view>
+						</view>
+						<view class="small-box-date">
+							<image style="width: 24rpx;height: 24rpx;margin-left: 10rpx;"
+								src="../../static/images/transport/rili.png" mode="widthFix">
+							</image>
+							<text class="ml19 font-size-style">
+								日期:{{changeDate(item.startDate)}} — {{changeDate(item.endDate)}}
+							</text>
+						</view>
+						<view class="small-box-bottom mt23">
+							<view class="small-box-bottom-left">
+								<image style="width: 25rpx;height: 25rpx;margin-left: 10rpx;"
+									src="../../static/images/transport/time.png" mode="widthFix"></image>
+								<text class="ml19 font-size-style">
+									时间:{{changeTime(item.startTime)}} — {{changeTime(item.endTime)}}
+								</text>
+							</view>
+							<view class="small-box-bottom-left">
+								<image style="width: 25rpx;height: 25rpx;" src="../../static/images/transport/lb_01.png"
+									mode="">
+								</image>
+								<text class="mr15 ml19 font-size-style">计划使用车辆数:{{item.expectCar}} 辆</text>
+							</view>
+						</view>
+					</view>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import {
+		transportList
+	} from "../../api/city/transport.js"
+	export default {
+		data() {
+			return {
+				list: []
+			}
+		},
+		methods: {
+			// 跳转 
+			// 通过和驳回跳转,待审核不跳
+			goToDetial(item) {
+				// if (item.auditState === -1) {
+				// 	this.$tab.navigateTo(`/pages/addTransport/index?id=${item.id}&state=${item.auditState}`)
+				// }
+				if (item.auditState === 1) {
+					this.$tab.navigateTo(`/pages/transportInfo/index?id=${item.id}`)
+				}
+				if (item.auditState === 0) {
+					this.$tab.navigateTo(`/pages/cityTransportDetail/index?id=${item.id}`)
+				}
+			},
+			addLine() {
+				this.$tab.navigateTo('/pages/addTransport/index')
+			},
+			changeStateClass(state) {
+				switch (state) {
+					case 0:
+						return 'state-class1'
+					case -1:
+						return 'state-class2'
+					case 1:
+						return 'state-class3'
+				}
+			},
+			changeDate(date) {
+				return date.substring(0, 4) + '年' + date.substring(5, 7) + '月' + date.substring(8, 10)
+			},
+			changeTime(time) {
+				return time.slice(0, 5)
+			},
+			// 获取运输列表
+			async getList() {
+				const res = await transportList()
+				console.log('运输列表', res);
+
+				this.total = res.total
+				res.rows.forEach(item => {
+					if (item.auditState === 0 || item.auditState === 1) {
+						this.list.push(item)
+					}
+				})
+				console.log(this.list);
+			}
+		},
+		onLoad() {
+			this.getList()
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	// 屏幕高度-导航栏高度-按钮的高度上边距-按钮的高度-按钮的高度下边距-底部导航栏高度 + 按钮的高度和上下外边距
+	$Height: calc(100vh - 44px - 22px - 66rpx - 25rpx + 112rpx);
+
+	.heightBox {
+		height: $Height;
+	}
+
+	.deepRed {
+		color: #E54504
+	}
+
+	.deepGreen {
+		color: #088243
+	}
+
+	.red {
+		color: #FF6424;
+	}
+
+	.green {
+		color: #45AC77;
+
+
+	}
+
+	.circle-style {
+		width: 40rpx;
+		height: 40rpx;
+		line-height: 40rpx;
+		text-align: center;
+		border-radius: 50%;
+		font-size: 20rpx;
+		font-weight: bold;
+		color: #FFFFFF;
+		// padding: 7px;
+	}
+
+	.circle-green {
+		background: #45AC77;
+	}
+
+	.circle-red {
+		background: #FF6424;
+	}
+
+	.bold {
+		font-weight: bold;
+	}
+
+	.custom-style {
+		font-size: 28rpx;
+		height: 66rpx;
+		line-height: 66rpx;
+		font-size: 28rpx;
+		font-weight: bold;
+		color: #FFFFFF;
+		margin-bottom: 25rpx;
+
+		.button-class {
+			display: flex;
+			justify-content: center;
+			align-items: center;
+		}
+	}
+
+	.small-box {
+		margin-bottom: 31rpx;
+		padding: 22rpx;
+
+		.small-box-top {
+			display: flex;
+			justify-content: space-between;
+			align-items: center;
+
+			.small-box-top-left {
+				display: flex;
+				align-items: center;
+
+				uni-text {
+					font-size: 28rpx;
+					font-weight: bold;
+					color: #333333;
+					margin-left: 18rpx;
+				}
+
+			}
+
+			.small-box-top-right {
+				text-align: center;
+				width: 103rpx;
+				height: 45rpx;
+				border-radius: 15rpx;
+				font-size: 26rpx;
+				font-weight: bold;
+				color: #FFFFFF;
+				line-height: 45rpx;
+			}
+		}
+
+		.small-box-middle {
+			// width: 631rpx;
+			// height: 144rpx;
+			background: rgba(245, 246, 250, 0.5);
+			border: 1rpx solid rgba(235, 235, 235, 0.5);
+			border-radius: 20rpx;
+			margin-top: 20rpx;
+			padding: 20rpx 28rpx;
+			box-sizing: border-box;
+
+			.small-box-middle-startAndEnd {
+				display: flex;
+				align-items: center;
+				font-size: 24rpx;
+				font-weight: bold;
+
+				uni-text {
+					margin-left: 22rpx;
+				}
+			}
+
+			.small-box-middle-line {
+				display: flex;
+				justify-content: space-between;
+				align-items: center;
+
+				.small-box-middle-line-left {
+					width: 2rpx;
+					height: 20rpx;
+					background: rgba(238, 238, 238, 0.5);
+					border-radius: 1rpx;
+					margin: 10rpx 20rpx;
+				}
+			}
+		}
+
+		.small-box-date {
+			display: flex;
+			align-items: center;
+			margin-top: 24rpx;
+		}
+
+		.small-box-bottom {
+			display: flex;
+			justify-content: space-between;
+			align-items: center;
+
+			.small-box-bottom-left {
+				display: flex;
+				align-items: center;
+			}
+		}
+	}
+
+
+	.ml19 {
+		margin-left: 10rpx;
+	}
+
+	.mt23 {
+		margin-top: 23rpx;
+	}
+
+	.mr15 {
+		margin-right: 15rpx;
+	}
+
+	.font-size-style {
+		font-size: 24rpx;
+		font-weight: 400;
+		color: #485B93;
+	}
+
+	.state-class1 {
+		background: linear-gradient(90deg, #F59A02 0%, #FFD334 100%);
+	}
+
+	.state-class2 {
+
+		background: linear-gradient(90deg, #FF2D04 0%, #FFA53E 100%);
+	}
+
+	.state-class3 {
+
+		background: linear-gradient(90deg, #3FC377 0%, #83D992 100%);
+	}
+</style>

+ 410 - 0
pages/cityTransportDetail/index.vue

@@ -0,0 +1,410 @@
+<template>
+	<view class="container">
+		<uni-navbar title="运输申请"></uni-navbar>
+		<view class="box commonMt">
+			<view class="addLineSuccess-big-box commonBj">
+				<view class="addLineSuccess-big-box-top">
+					<image style="width: 45rpx;height: 45rpx; margin-left: 30rpx;"
+						src="../../static/images/transport/dingwei.png" mode="widthFix">
+					</image>
+					<text class="listTitle">路线信息</text>
+				</view>
+				<view class="addLineSuccess-big-box-bottom infoHeight" style="padding-bottom: 40rpx;">
+					<view class="addLineSuccess-big-box-bottom-item">
+						<view class="flexAlignCenter">
+							<view class="greenCircle">
+							</view>
+							<text class="itemText">运输名称:</text>
+						</view>
+						<view class="flexAlignCenter">
+							<text class="infoText">{{form.transportName}}</text>
+						</view>
+					</view>
+					<view class="map">
+						<mapImg :startPoint='form.startPoint' :endPoint='form.endPoint'
+							:mtRoutePointList='form.mtRoutePointList'></mapImg>
+						<!-- <mapNew height="339rpx">
+							
+						</mapNew> -->
+					</view>
+					<view class="addLineSuccess-big-box-bottom-item">
+						<view class="flexAlignCenter">
+							<view class="greenCircle">
+							</view>
+							<text class="itemText">开始地址:</text>
+						</view>
+						<view class="flexAlignCenter">
+							<text class="infoText">{{form.startName}}</text>
+						</view>
+					</view>
+					<!-- <view class="border-style"></view> -->
+					<view class="addLineSuccess-big-box-bottom-item">
+						<view class="flexAlignCenter">
+							<view class="greenCircle">
+							</view>
+							<text class="itemText">结束地址:</text>
+						</view>
+						<view class="flexAlignCenter">
+							<text class="infoText">{{form.endName}}</text>
+						</view>
+					</view>
+					<!-- <view class="border-style"></view> -->
+					<view class="addLineSuccess-big-box-bottom-item">
+						<view class="flexAlignCenter">
+							<view class="greenCircle">
+							</view>
+							<text class="itemText">运输期限:</text>
+						</view>
+						<view class="flexAlignCenter">
+							<text class="infoText">{{form.startDate}} 至 {{form.endDate}}</text>
+						</view>
+					</view>
+					<!-- <view class="border-style"></view> -->
+					<view class="addLineSuccess-big-box-bottom-item">
+						<view class="flexAlignCenter">
+							<view class="greenCircle">
+							</view>
+							<text class="itemText">开始时间:</text>
+						</view>
+						<view class="flexAlignCenter">
+							<text class="infoText">{{ changeTime(form.startTime) }}</text>
+						</view>
+					</view>
+					<!-- <view class="border-style"></view> -->
+					<view class="addLineSuccess-big-box-bottom-item">
+						<view class="flexAlignCenter">
+							<view class="greenCircle">
+							</view>
+							<text class="itemText">结束时间:</text>
+						</view>
+						<view class="flexAlignCenter">
+							<text class="infoText">{{ changeTime(form.endTime) }}</text>
+						</view>
+					</view>
+					<!-- <view class="border-style"></view> -->
+					<view class="addLineSuccess-big-box-bottom-item">
+						<view class="flexAlignCenter">
+							<view class="greenCircle">
+							</view>
+							<text class="itemText">计划车辆:</text>
+						</view>
+						<view class="flexAlignCenter">
+							<text class="infoText">{{form.expectCar}}</text>
+						</view>
+					</view>
+					<!-- <view class="border-style"></view> -->
+					<view class="addLineSuccess-big-box-bottom-item">
+						<view class="flexAlignCenter">
+							<view class="greenCircle">
+							</view>
+							<text class="itemText">上报企业:</text>
+						</view>
+						<view class="flexAlignCenter">
+							<text class="infoText">{{form.companyName}}</text>
+						</view>
+					</view>
+					<!-- <view class="border-style"></view> -->
+				</view>
+			</view>
+			<!-- 审批状态 -->
+			<view class="reject-box mt28 commonMb commonBj">
+				<view class="reject-box-top just-content-start">
+					<image src="../../static/images/car/yunshu.png" mode="widthFix"></image>
+					<text class="listTitle">审批状态</text>
+				</view>
+				<view class="reject-box-bottom pb0">
+					<view class="state-icon">
+						<view class="flexAlignCenter center">
+							<view class="redCircle">
+							</view>
+							<text class="itemText">审批状态:</text>
+							<view class="normal" :class="auditType===1?'success':''" @tap="successClick">
+								<image style="width: 33rpx;height: 33rpx;margin-right: 12rpx;"
+									src="../../static/images/cityCar/state2.png" mode="widthFix"></image>
+								<text>通过</text>
+							</view>
+							<view class="normal ml19" :class="auditType===-1?'fail':''" @tap="failClick">
+								<image style="width: 33rpx;height: 33rpx;margin-right: 12rpx;"
+									src="../../static/images/cityCar/state1.png" mode="widthFix"></image>
+								<text>驳回</text>
+							</view>
+						</view>
+					</view>
+					<!-- <view :class="isPass?'border-style mb':'border-style2'"></view> -->
+					<view class="state-icon" v-if="auditType === -1">
+						<view class="flexAlignCenter center">
+							<view class="redCircle">
+							</view>
+							<text class="itemText">驳回原因:</text>
+						</view>
+					</view>
+					<u--textarea confirmType="done" v-if="auditType === -1" class="textareaStyle" height="198rpx"
+						v-model="auditContent" placeholder="请输入驳回原因">
+					</u--textarea>
+					<!-- <view v-if="!isPass" class="border-style2 mb"></view> -->
+				</view>
+			</view>
+			<u-button @click="submit" class="add-button commonMb" shape="circle"
+				color="linear-gradient(to top, #F59A02, #FFD334)">确认审批</u-button>
+		</view>
+	</view>
+</template>
+
+<script>
+	import {
+		transportDetail
+	} from "../../api/company/transport.js"
+	import {
+		checkTransport
+	} from "@/api/city/transport.js"
+	export default {
+		data() {
+			return {
+				// 驳回原因
+				auditContent: null,
+				// 通过样式开关
+				auditType: 1,
+				// 驳回样式开关
+				isFail: false,
+				form: {
+					startTime: "00:00:00",
+					endTime: "00:00:00",
+					// 结束坐标和开始坐标
+					endPoint: '',
+					startPoint: '',
+					mtRoutePointList: [],
+				},
+			}
+		},
+		methods: {
+			async submit() {
+				console.log(this.form);
+				let obj = {}
+				obj.id = this.form.id
+				obj.auditState = this.auditType
+				obj.auditContent = this.auditContent
+				obj.startDate = this.form.startDate
+				const res = await checkTransport(obj)
+				this.auditContent = null
+				this.$tab.navigateTo('/pages/cityTransport/index')
+
+			},
+			// 切换按钮事件
+			successClick() {
+				if (this.auditType === 1) {
+					return
+				} else {
+					this.auditType = 1
+				}
+			},
+			failClick() {
+				if (this.isFail === -1) {
+					return
+				} else {
+					this.auditType = -1
+				}
+			},
+			// 获取运输申请详情
+			async getDetail(id) {
+				const res = await transportDetail(id)
+				console.log('运输详情', res);
+				this.form = res.data
+
+			},
+			changeTime(time) {
+				return time.slice(0, 5)
+			},
+
+		},
+		onLoad(option) {
+
+			if (option.id) {
+				this.getDetail(option.id)
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	// 底部按钮样式
+	.add-button {
+		height: 85rpx;
+		// background: linear-gradient(0deg, #FFD334 0%, #F59A02 100%);
+		// box-shadow: 0rpx 2rpx 13rpx 0rpx rgba(27, 43, 95, 0.25);
+		// border-radius: 28rpx;
+		font-size: 30rpx;
+		font-weight: bold;
+		color: #FFFFFF;
+		border: 0;
+		margin-top: 27rpx;
+	}
+
+	// 审批状态按钮样式
+	.normal {
+		width: 205rpx;
+		height: 72rpx;
+		background: rgba(126, 142, 193, 0.6);
+		border: 2rpx solid #7E8EC1;
+		border-radius: 36rpx;
+		display: flex;
+		justify-content: center;
+		align-items: center;
+		font-size: 28rpx;
+		font-weight: bold;
+		color: #FFFFFF;
+	}
+
+	.success {
+		background: linear-gradient(90deg, #3FC377 0%, #83D992 100%);
+		box-shadow: 0px 2rpx 13rpx 0px rgba(27, 43, 95, 0.25);
+	}
+
+	.fail {
+		background: linear-gradient(90deg, #FF2D04 0%, #FFA53E 100%);
+		box-shadow: 0px 2rpx 13rpx 0px rgba(27, 43, 95, 0.25);
+	}
+
+	.ml19 {
+		margin-left: 19rpx;
+	}
+
+	.center {
+		justify-content: center;
+		align-items: center;
+	}
+
+	.textareaStyle {
+		margin-bottom: 56rpx;
+		background: rgba(255, 255, 255, 0.1);
+		border: 2rpx solid #495B93 !important;
+		border-radius: 15rpx;
+
+		/deep/ .input-placeholder {
+			color: #7E8EC1 !important;
+			font-size: 26rpx;
+		}
+	}
+
+	.reject-box-top {
+		width: 100%;
+		height: 69rpx;
+		background: #7FB5FF;
+		border-radius: 26rpx 26rpx 0px 0px;
+		display: flex;
+		justify-content: space-between;
+
+		uni-image {
+			width: 50rpx;
+			margin-left: 32rpx;
+			vertical-align: middle;
+		}
+
+	}
+
+	.reject-box-bottom {
+		padding: 40rpx;
+
+		.state-icon {
+			display: flex;
+			margin: 40rpx 0;
+		}
+
+		.state-icon:nth-child(1) {
+			margin: 0 0 40rpx;
+		}
+
+		.border-style {
+			border-top: 1rpx dashed #F98803;
+			width: 90%;
+			margin: 0 auto;
+		}
+
+		.border-style2 {
+			border-top: 1rpx dashed #FB5637;
+			width: 90%;
+			margin: 0 auto;
+		}
+	}
+
+
+	.reject-box-bottom:nth-child(2) {
+		padding: 40rpx 40rx 20rpx !important;
+	}
+
+	.just-content-start {
+		justify-content: flex-start !important;
+		align-items: center;
+	}
+
+	.pb0 {
+		padding-bottom: 0 !important;
+	}
+
+	.mt28 {
+		margin-top: 40rpx;
+	}
+
+	// 
+	.addLineSuccess-big-box {
+
+		.addLineSuccess-big-box-top {
+			height: 69rpx;
+			background: #7FB5FF;
+			border-radius: 26rpx 26rpx 0rpx 0rpx;
+			display: flex;
+			align-items: center;
+		}
+
+		.addLineSuccess-big-box-bottom {
+			padding: 0rpx 39rpx;
+			border-radius: 0 0 28rpx 28rpx;
+
+			.addLineSuccess-big-box-bottom-item {
+				display: flex;
+				margin: 36rpx auto;
+			}
+
+			.map {
+				// width: 599rpx;
+				height: 339rpx;
+				background: #FFFFFF;
+				border: 2rpx solid #495B93;
+				border-radius: 15rpx;
+				margin: 25rpx auto 40rpx;
+			}
+
+			// .border-style {
+			// 	border-top: 1rpx dashed #F98803;
+			// 	margin: 0 auto;
+			// }
+		}
+	}
+
+	.custom-style {
+		box-shadow: 0px 2rpx 13rpx 0rpx rgba(27, 43, 95, 0.25);
+		border-radius: 28rpx;
+		font-size: 28rpx;
+		font-weight: bold;
+		color: #FFFFFF;
+		margin: 27rpx 0 36rpx;
+		height: 85rpx;
+	}
+
+
+	.bg-color-green {
+		background: #36C372 !important;
+	}
+
+
+	.mb {
+		margin-bottom: 11rpx !important;
+	}
+
+	.mt31 {
+		margin-top: 31rpx;
+	}
+
+	.mb43 {
+		margin-bottom: 43rpx;
+	}
+</style>

+ 9 - 6
pages/editPassword/index.vue

@@ -21,7 +21,8 @@
 						<u-form-item prop="newPassword">
 							<view class="redCircle"></view>
 							<text class="itemText">新&nbsp;&nbsp;密&nbsp;&nbsp;码</text>
-							<u-input class="inputStyle pasStyle" v-model="form.newPassword" placeholder="大小写字母组合+特殊符号 长度8位">
+							<u-input class="inputStyle pasStyle" v-model="form.newPassword"
+								placeholder="请设置字母数字+特殊符号 长度8位">
 							</u-input>
 						</u-form-item>
 						<u-form-item prop="password">
@@ -63,7 +64,8 @@
 							// let validationStr = /^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]+$/;
 							// 大小写字母+特殊字符组合+八位
 							// let validationStr = /^(?=.*?[a-z])(?=.*?[A-Z])(?=.*?[!#@*&.])[a-zA-Z!#@*&.]{8,8}.*$/;
-							let validationStr = /^(?=.*[A-Za-z])(?=.*\d)(?=.*[`~!@#$%^&*()_+<>?:"{},.\/\\;'[\]])[A-Za-z\d`~!@#$%^&*()_+<>?:"{},.\/\\;'[\]]{8,}$/;
+							let validationStr =
+								/^(?=.*[A-Za-z])(?=.*\d)(?=.*[`~!@#$%^&*()_+<>?:"{},.\/\\;'[\]])[A-Za-z\d`~!@#$%^&*()_+<>?:"{},.\/\\;'[\]]{8,}$/;
 							// console.log(validationStr.test(value), 'validationStr.test(value)');
 							if (!validationStr.test(value) || value.length !== 8) {
 								return false;
@@ -72,7 +74,7 @@
 							}
 
 						},
-						message: '请设置大小写字母组合+特殊符号 长度8位',
+						message: '请设置字母数字+特殊符号 长度8位',
 						trigger: ['blur', 'change']
 					}, ],
 					password: [{
@@ -81,7 +83,8 @@
 							// let validationStr = /^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]+$/;
 							// 大小写字母+特殊字符组合+八位
 							// let validationStr = /^(?=.*?[a-z])(?=.*?[A-Z])(?=.*?[!#@*&.])[a-zA-Z!#@*&.]{8,8}.*$/;
-							let validationStr = /^(?=.*[A-Za-z])(?=.*\d)(?=.*[`~!@#$%^&*()_+<>?:"{},.\/\\;'[\]])[A-Za-z\d`~!@#$%^&*()_+<>?:"{},.\/\\;'[\]]{8,}$/;
+							let validationStr =
+								/^(?=.*[A-Za-z])(?=.*\d)(?=.*[`~!@#$%^&*()_+<>?:"{},.\/\\;'[\]])[A-Za-z\d`~!@#$%^&*()_+<>?:"{},.\/\\;'[\]]{8,}$/;
 							// console.log(validationStr.test(value), 'validationStr.test(value)');
 							if (!validationStr.test(value) || value.length !== 8) {
 								return false;
@@ -90,7 +93,7 @@
 							}
 
 						},
-						message: '请设置大小写字母组合+特殊符号 长度8位',
+						message: '请设置字母数字+特殊符号 长度8位',
 						trigger: ['blur', 'change']
 					}, ],
 					legal: [{
@@ -200,8 +203,8 @@
 	.mt33 {
 		margin-top: 33rpx;
 	}
+
 	.pasStyle .input-placeholder {
 		font-size: 24rpx !important;
 	}
-	
 </style>

+ 35 - 32
pages/login/index.vue

@@ -13,14 +13,15 @@
 						<u-input class="inputStyle" type="password" v-model="loginForm.password" placeholder="请输入密码" />
 					</u-form-item>
 					<u-form-item label="" prop="code" v-if="captchaEnabled">
-						
+
 						<image :src="codeUrl" @click="getCode" class="login-code-img"></image>
 						<u-input v-model="loginForm.code" type="number" class="inputStyle" placeholder="请输入验证码"
 							maxlength="4" />
 					</u-form-item>
 				</u--form>
 				<view class="btBox">
-					<text @click="forgetUsername">忘记账号 </text> <text style="margin-left: 10rpx;margin-right: 10rpx">|</text>
+					<text @click="forgetUsername">忘记账号 </text> <text
+						style="margin-left: 10rpx;margin-right: 10rpx">|</text>
 					<text @click="phone"> 忘记密码</text>
 				</view>
 				<u-button @click="submit" class="mt buttonStyle" shape="circle"
@@ -29,13 +30,15 @@
 				<text class="zcStyle" @click="register">注册账号</text>
 			</view>
 		</view>
-		<tooltipNew :show="show" :auditContent='auditContent' :type='type' @close='close' :phone='phoneCard'></tooltipNew>
+		<tooltipNew :show="show" :auditContent='auditContent' :type='type' @close='close' :phone='phoneCard'>
+		</tooltipNew>
 	</view>
 </template>
 
 <script>
 	import {
-		getCodeImg,getUserState
+		getCodeImg,
+		getUserState
 	} from '@/api/login'
 	export default {
 		data() {
@@ -75,7 +78,7 @@
 				show: false,
 				type: '',
 				phoneCard: '0431-8563996',
-				auditContent:'',
+				auditContent: '',
 			}
 		},
 		created() {
@@ -86,7 +89,7 @@
 			getCode() {
 				getCodeImg().then(res => {
 					this.captchaEnabled = res.captchaEnabled === undefined ? true : res.captchaEnabled
-					this.rules.code[0].required=this.captchaEnabled;
+					this.rules.code[0].required = this.captchaEnabled;
 					if (this.captchaEnabled) {
 						this.codeUrl = 'data:image/gif;base64,' + res.img
 						this.loginForm.uuid = res.uuid
@@ -113,29 +116,29 @@
 				this.type = 'type5';
 				this.show = true;
 			},
-			getUserState(){
-				getUserState({userName:this.loginForm.username}).then(res => {
+			getUserState() {
+				getUserState({
+					userName: this.loginForm.username
+				}).then(res => {
 					// console.log(res.data.auditFlag: 0,'res');
-					if(res.data)
-					{
-						switch(res.data.auditFlag)
-						{
-							case 0: 
-							this.type='type1';
-							this.show = true;
-							break;
+					if (res.data) {
+						switch (res.data.auditFlag) {
+							case 0:
+								this.type = 'type1';
+								this.show = true;
+								break;
 							case -1:
-							this.type='type3';
-							this.show = true;
-							this.auditContent=res.data.auditContent
-							break;
+								this.type = 'type3';
+								this.show = true;
+								this.auditContent = res.data.auditContent
+								break;
 							case 1:
-							this.pwdLogin()
-							break;
+								this.pwdLogin()
+								break;
 							default:
 						}
 					}
-					
+
 				})
 			},
 			// 密码登录
@@ -151,21 +154,21 @@
 			loginSuccess(result) {
 				// 设置用户信息
 				this.$store.dispatch('GetInfo').then(res => {
-					console.log(res.data.roles,'res');
+					console.log(res.data.roles, 'res');
 					// 角色标识(企业账号:mt_company;驾驶员账号:mt_driver)
 					// roles: "mt_driver"
 					// pages/cityHome/index
 					// this.$tab.reLaunch('/pages/home/index')
-					switch(res.data.roles){
+					switch (res.data.roles) {
 						case 'mt_company':
-						this.$tab.reLaunch('/pages/home/index');
-						break;
+							this.$tab.reLaunch('/pages/home/index');
+							break;
 						case 'mt_driver':
-						this.$tab.reLaunch('/pages/driverHome/index');
-						break;
+							this.$tab.reLaunch('/pages/driverHome/index');
+							break;
 						default:
-						this.$tab.reLaunch('/pages/cityHome/index');
-						break;
+							this.$tab.reLaunch('/pages/cityHome/index');
+							break;
 					}
 				})
 			},
@@ -313,7 +316,7 @@
 		color: #DC8A00;
 		margin-top: 30rpx;
 		margin-bottom: 60rpx;
-		
+
 	}
 
 	.login-code-img {

binární
static/images/city/gongsi.png


binární
static/images/city/index2.png


binární
static/images/city/tx.png


binární
static/images/cityCar/state1.png


binární
static/images/cityCar/state2.png