zhongtianhaoyuan 3 yıl önce
ebeveyn
işleme
675217209e

+ 45 - 0
components/uni-popup/keypress.js

@@ -0,0 +1,45 @@
+// #ifdef H5
+export default {
+  name: 'Keypress',
+  props: {
+    disable: {
+      type: Boolean,
+      default: false
+    }
+  },
+  mounted () {
+    const keyNames = {
+      esc: ['Esc', 'Escape'],
+      tab: 'Tab',
+      enter: 'Enter',
+      space: [' ', 'Spacebar'],
+      up: ['Up', 'ArrowUp'],
+      left: ['Left', 'ArrowLeft'],
+      right: ['Right', 'ArrowRight'],
+      down: ['Down', 'ArrowDown'],
+      delete: ['Backspace', 'Delete', 'Del']
+    }
+    const listener = ($event) => {
+      if (this.disable) {
+        return
+      }
+      const keyName = Object.keys(keyNames).find(key => {
+        const keyName = $event.key
+        const value = keyNames[key]
+        return value === keyName || (Array.isArray(value) && value.includes(keyName))
+      })
+      if (keyName) {
+        // 避免和其他按键事件冲突
+        setTimeout(() => {
+          this.$emit(keyName, {})
+        }, 0)
+      }
+    }
+    document.addEventListener('keyup', listener)
+    this.$once('hook:beforeDestroy', () => {
+      document.removeEventListener('keyup', listener)
+    })
+  },
+	render: () => {}
+}
+// #endif

+ 22 - 0
components/uni-popup/message.js

@@ -0,0 +1,22 @@
+export default {
+	created() {
+		if (this.type === 'message') {
+			// 不显示遮罩
+			this.maskShow = false 
+			// 获取子组件对象
+			this.childrenMsg = null
+		}
+	},
+	methods: {
+		customOpen() {
+			if (this.childrenMsg) {
+				this.childrenMsg.open()
+			}
+		},
+		customClose() {
+			if (this.childrenMsg) {
+				this.childrenMsg.close()
+			}
+		}
+	}
+}

+ 50 - 0
components/uni-popup/popup.js

@@ -0,0 +1,50 @@
+import message from './message.js';
+// 定义 type 类型:弹出类型:top/bottom/center
+const config = {
+	// 顶部弹出
+	top: 'top',
+	// 底部弹出
+	bottom: 'bottom',
+	// 居中弹出
+	center: 'center',
+	// 消息提示
+	message: 'top',
+	// 对话框
+	dialog: 'center',
+	// 分享
+	share: 'bottom',
+}
+
+export default {
+	data() {
+		return {
+			config: config,
+			popupWidth: 0,
+			popupHeight: 0
+		}
+	},
+	mixins: [message],
+	computed: {
+		isDesktop() {
+			return this.popupWidth >= 500 && this.popupHeight >= 500
+		}
+	},
+	mounted() {
+		const fixSize = () => {
+			const {
+				windowWidth,
+				windowHeight,
+				windowTop
+			} = uni.getSystemInfoSync()
+			this.popupWidth = windowWidth
+			this.popupHeight = windowHeight + windowTop
+		}
+		fixSize()
+		// #ifdef H5
+		window.addEventListener('resize', fixSize)
+		this.$once('hook:beforeDestroy', () => {
+			window.removeEventListener('resize', fixSize)
+		})
+		// #endif
+	},
+}

+ 16 - 0
components/uni-popup/share.js

@@ -0,0 +1,16 @@
+export default {
+	created() {
+		if (this.type === 'share') {
+			// 关闭点击
+			this.mkclick = false
+		}
+	},
+	methods: {
+		customOpen() {
+			console.log('share 打开了');
+		},
+		customClose() {
+			console.log('share 关闭了');
+		}
+	}
+}

+ 321 - 0
components/uni-popup/uni-popup.vue

@@ -0,0 +1,321 @@
+<template>
+	<view v-if="showPopup" class="uni-popup" :class="[popupstyle, isDesktop ? 'fixforpc-z-index' : '']"
+	 @touchmove.stop.prevent="clear">
+		<uni-transition v-if="maskShow" class="uni-mask--hook" :mode-class="['fade']" :styles="maskClass" :duration="duration"
+		 :show="showTrans" @click="onTap" />
+		<uni-transition :mode-class="ani" :styles="transClass" :duration="duration" :show="showTrans" @click="onTap">
+			<view class="uni-popup__wrapper-box" @click.stop="clear">
+				<slot />
+			</view>
+		</uni-transition>
+		<!-- #ifdef H5 -->
+		<keypress v-if="maskShow" @esc="onTap" />
+		<!-- #endif -->
+	</view>
+</template>
+
+<script>
+	import popup from './popup.js'
+	// #ifdef H5
+	import keypress from './keypress.js'
+	// #endif
+	/**
+	 * PopUp 弹出层
+	 * @description 弹出层组件,为了解决遮罩弹层的问题
+	 * @tutorial https://ext.dcloud.net.cn/plugin?id=329
+	 * @property {String} type = [top|center|bottom] 弹出方式
+	 * 	@value top 顶部弹出
+	 * 	@value center 中间弹出
+	 * 	@value bottom 底部弹出
+	 * 	@value message 消息提示
+	 * 	@value dialog 对话框
+	 * 	@value share 底部分享示例
+	 * @property {Boolean} animation = [ture|false] 是否开启动画
+	 * @property {Boolean} maskClick = [ture|false] 蒙版点击是否关闭弹窗
+	 * @event {Function} change 打开关闭弹窗触发,e={show: false}
+	 */
+
+	export default {
+		name: 'uniPopup',
+		components: {
+			// #ifdef H5
+			keypress
+			// #endif
+		},
+		props: {
+			// 开启动画
+			animation: {
+				type: Boolean,
+				default: true
+			},
+			// 弹出层类型,可选值,top: 顶部弹出层;bottom:底部弹出层;center:全屏弹出层
+			// message: 消息提示 ; dialog : 对话框
+			type: {
+				type: String,
+				default: 'center'
+			},
+			// maskClick
+			maskClick: {
+				type: Boolean,
+				default: true
+			}
+		},
+		provide() {
+			return {
+				popup: this
+			}
+		},
+		mixins: [popup],
+		watch: {
+			/**
+			 * 监听type类型
+			 */
+			type: {
+				handler: function(newVal) {
+					this[this.config[newVal]]()
+				},
+				immediate: true
+			},
+			isDesktop: {
+				handler: function(newVal) {
+					this[this.config[this.type]]()
+				},
+				immediate: true
+			},
+			/**
+			 * 监听遮罩是否可点击
+			 * @param {Object} val
+			 */
+			maskClick: {
+				handler: function(val) {
+					this.mkclick = val
+				},
+				immediate: true
+			}
+		},
+		data() {
+			return {
+				duration: 300,
+				ani: [],
+				showPopup: false,
+				showTrans: false,
+				maskClass: {
+					'position': 'fixed',
+					'bottom': 0,
+					'top': 0,
+					'left': 0,
+					'right': 0,
+					'backgroundColor': 'rgba(0, 0, 0, 0.4)'
+				},
+				transClass: {
+					'position': 'fixed',
+					'left': 0,
+					'right': 0,
+				},
+				maskShow: true,
+				mkclick: true,
+				popupstyle: this.isDesktop ? 'fixforpc-top' : 'top'
+			}
+		},
+		created() {
+			this.mkclick = this.maskClick
+			if (this.animation) {
+				this.duration = 300
+			} else {
+				this.duration = 0
+			}
+		},
+		methods: {
+			clear(e) {
+				// TODO nvue 取消冒泡
+				e.stopPropagation()
+			},
+			open() {
+				this.showPopup = true
+				this.$nextTick(() => {
+					new Promise(resolve => {
+						clearTimeout(this.timer)
+						this.timer = setTimeout(() => {
+							this.showTrans = true
+							// fixed by mehaotian 兼容 app 端
+							this.$nextTick(() => {
+								resolve();
+							})
+						}, 50);
+					}).then(res => {
+						// 自定义打开事件
+						clearTimeout(this.msgtimer)
+						this.msgtimer = setTimeout(() => {
+							this.customOpen && this.customOpen()
+						}, 100)
+						this.$emit('change', {
+							show: true,
+							type: this.type
+						})
+					})
+				})
+			},
+			close(type) {
+				this.showTrans = false
+				this.$nextTick(() => {
+					this.$emit('change', {
+						show: false,
+						type: this.type
+					})
+					clearTimeout(this.timer)
+					// 自定义关闭事件
+					this.customOpen && this.customClose()
+					this.timer = setTimeout(() => {
+						this.showPopup = false
+					}, 300)
+				})
+			},
+			onTap() {
+				if (!this.mkclick) return
+				this.close()
+			},
+			/**
+			 * 顶部弹出样式处理
+			 */
+			top() {
+				this.popupstyle = this.isDesktop ? 'fixforpc-top' : 'top'
+				this.ani = ['slide-top']
+				this.transClass = {
+					'position': 'fixed',
+					'left': 0,
+					'right': 0,
+				}
+			},
+			/**
+			 * 底部弹出样式处理
+			 */
+			bottom() {
+				this.popupstyle = 'bottom'
+				this.ani = ['slide-bottom']
+				this.transClass = {
+					'position': 'fixed',
+					'left': 0,
+					'right': 0,
+					'bottom': 0
+				}
+			},
+			/**
+			 * 中间弹出样式处理
+			 */
+			center() {
+				this.popupstyle = 'center'
+				this.ani = ['zoom-out', 'fade']
+				this.transClass = {
+					'position': 'fixed',
+					/* #ifndef APP-NVUE */
+					'display': 'flex',
+					'flexDirection': 'column',
+					/* #endif */
+					'bottom': 0,
+					'left': 0,
+					'right': 0,
+					'top': 0,
+					'justifyContent': 'center',
+					'alignItems': 'center'
+				}
+			}
+		}
+	}
+</script>
+<style lang="scss" scoped>
+	.uni-popup {
+		position: fixed;
+		/* #ifndef APP-NVUE */
+		z-index: 99;
+		/* #endif */
+	}
+
+	.fixforpc-z-index {
+		/* #ifndef APP-NVUE */
+		z-index: 999;
+		/* #endif */
+	}
+
+	.uni-popup__mask {
+		position: absolute;
+		top: 0;
+		bottom: 0;
+		left: 0;
+		right: 0;
+		background-color: $uni-bg-color-mask;
+		opacity: 0;
+	}
+
+	.mask-ani {
+		transition-property: opacity;
+		transition-duration: 0.2s;
+	}
+
+	.uni-top-mask {
+		opacity: 1;
+	}
+
+	.uni-bottom-mask {
+		opacity: 1;
+	}
+
+	.uni-center-mask {
+		opacity: 1;
+	}
+
+	.uni-popup__wrapper {
+		/* #ifndef APP-NVUE */
+		display: block;
+		/* #endif */
+		position: absolute;
+	}
+
+	.top {
+		/* #ifdef H5 */
+		top: var(--window-top);
+		/* #endif */
+		/* #ifndef H5 */
+		top: 0;
+		/* #endif */
+	}
+
+	.fixforpc-top {
+		top: 0;
+	}
+
+	.bottom {
+		bottom: 0;
+	}
+
+	.uni-popup__wrapper-box {
+		/* #ifndef APP-NVUE */
+		display: block;
+		/* #endif */
+		position: relative;
+		/* iphonex 等安全区设置,底部安全区适配 */
+		/* #ifndef APP-NVUE */
+		padding-bottom: constant(safe-area-inset-bottom);
+		padding-bottom: env(safe-area-inset-bottom);
+		/* #endif */
+	}
+
+	.content-ani {
+		// transition: transform 0.3s;
+		transition-property: transform, opacity;
+		transition-duration: 0.2s;
+	}
+
+
+	.uni-top-content {
+		transform: translateY(0);
+	}
+
+	.uni-bottom-content {
+		transform: translateY(0);
+	}
+
+	.uni-center-content {
+		transform: scale(1);
+		opacity: 1;
+	}
+</style>

+ 61 - 14
pages.json

@@ -150,6 +150,20 @@
 			}
 		
 		},
+		{
+			"path": "pages/riders/checkPage",
+			"style": {
+				"navigationStyle": "custom",
+				"navigationBarTextStyle": "white"
+			}
+		},
+		{
+			"path": "pages/riders/test",
+			"style": {
+				"navigationBarTitleText": "测试",
+				"enablePullDownRefresh": false
+			}
+		},
 		{
 			"path": "pages/riders/notice",
 			"style": {
@@ -157,23 +171,25 @@
 				"enablePullDownRefresh": false
 			}
 		
+		},{
+			"path": "pages/riders/noticeSee",
+			"style": {
+				"navigationBarTitleText": "公告详情",
+				"enablePullDownRefresh": false
+			}
+		},
+		{
+			"path": "pages/riders/fleetMember",
+			"style": {
+				"navigationBarTitleText": "车队成员",
+				"enablePullDownRefresh": false
+			}
 		},
 		{
 			"path": "pages/riders/fleetSee",
 			"style": {
 				"navigationBarTitleText": "车队详情",
-				"enablePullDownRefresh": false,
-				"navigationBarBackgroundColor": "white",
-				"app-plus": {
-					"titleNView": {
-						"buttons": [{
-							"text": "&#xe7c3",
-							"fontSrc": "/static/addfleet/iconfont.ttf",
-							"fontSize": "22"
-						}]
-					}
-				}
-		
+				"enablePullDownRefresh": false
 			}
 		},
 		{
@@ -198,10 +214,41 @@
 			"path": "pages/riders/addFleet",
 			"style": {
 				"navigationBarTitleText": "创建车队",
-				"enablePullDownRefresh": false
+				"enablePullDownRefresh": false,
+				"navigationBarBackgroundColor": "white",
+				"app-plus": {
+					"titleNView": {
+						"buttons": [{
+							"text": "提交",
+							"fontSrc": "/static/addfleet/iconfont.ttf",
+							"fontSize": "28rpx",
+							 "color": "#2772FB",
+							 "width":"80rpx",
+							 "textAlign":"left"
+						}]
+					}
+				}
 			}
-
 		}, {
+			"path": "pages/riders/setMember",
+			"style": {
+				"navigationBarTitleText": "删除成员",
+				"enablePullDownRefresh": false,
+				"navigationBarBackgroundColor": "white",
+				"app-plus": {
+					"titleNView": {
+						"buttons": [{
+							"text": "完成",
+							"fontSrc": "/static/addfleet/iconfont.ttf",
+							"fontSize": "28rpx",
+							 "color": "#2772FB",
+							 "width":"80rpx",
+							 "textAlign":"left"
+						}]
+					}
+				}
+			}
+		},{
 			"path": "pages/riders/fleetInvitation",
 			"style": {
 				"navigationBarTitleText": "车队邀请",

+ 138 - 59
pages/riders/addFleet.vue

@@ -1,21 +1,21 @@
 <template>
 	<view class="center">
-		
+
 		<view class="flex row form_css">
 			<view class="left-text">车队名称</view>
 			<view class="right-text">
-				<u--input placeholder="输入车队名称,4-15个字" inputAlign='left' border="none"  v-model="formData.fleetName">
+				<u--input placeholder="输入车队名称,4-15个字" inputAlign='right' clearable border="none" maxlength="15"
+					v-model="formData.fleetName">
 				</u--input>
 			</view>
 		</view>
 		<view class="flex row form_css">
 			<view class="left-text">常驻城市</view>
 			<view class="right-text">
-				<!-- <regionPicker :multiIndex_="selections1" @region_="regionChange1" custom_="请选择"
-					@selecteRegion_="selecteRegion1" title_="全国" /> -->
-				<!-- <view @click="show = true">{{title1 ? title1 : "请选择地址"}}</view>
-				<Linkage @conceal="conceal1" class="flex" v-if="show" ref="uDropdown"></Linkage> -->
-				<view @click="selectAddress">{{title1 ? title1 : "请选择地址"}}</view>
+				<view @click="selectAddress">{{title1 ? title1 : "选择常驻地址"}}
+					<image src="../../static/images/myimg/gengduo1.png" mode=""
+						style="width: 18rpx;height: 24rpx;margin:14rpx 0 0 20rpx;"></image>
+				</view>
 				<itmister-address-picker ref="addressElone" @confirmChange="confirmChangeOne"></itmister-address-picker>
 			</view>
 		</view>
@@ -23,14 +23,15 @@
 			<view class="left-text">邀请权限</view>
 			<view class="right-text">
 				<u-radio-group v-model="formData.invitationPermission">
-					<u-radio key="1" label="所有队员" name="1"></u-radio>
+					<u-radio key="1" label="所有队员" name="1" style="margin-right: 30rpx;" checked="true"></u-radio>
 					<u-radio key="2" label="仅队长" name="2"></u-radio>
 				</u-radio-group>
 			</view>
 		</view>
 		<view class="row">
 			<view class="left-text">车队简介</view>
-			<u--textarea v-model="formData.fleetProfile" placeholder="请输入内容" autoHeight maxlength="500" height="100"></u--textarea>
+			<u--textarea class="textarea" v-model="formData.fleetProfile" placeholder="输入车队简介,10-500个字" count
+				border="none" maxlength="500" height="100"></u--textarea>
 		</view>
 		<view class="row">
 			<view class="left-text">封面照片</view>
@@ -38,16 +39,16 @@
 				name="1" multiple :maxCount="1">
 				<!-- <image src="fileList1[0]" 
 					mode="widthFix" style="width: 250px;height: 150px;"></image> -->
-				</u-upload>
+			</u-upload>
 		</view>
 		<view class=" row ">
-			<view class="left-text">车队照片</view>
+			<view class="left-text">车队照片   (非必传)</view>
 			<u-upload class="uview-upload" :fileList="fileList2" @afterRead="afterRead1($event)" @delete="deletePic"
 				name="2" multiple :maxCount="9" style="z-index: 9999;"></u-upload>
 		</view>
-			<u-toast ref="uToast"></u-toast>
-		<u-button type="primary" @click="submit">提交</u-button>
-		
+		<u-toast ref="uToast"></u-toast>
+		<!-- <u-button type="primary" @click="submit">提交</u-button> -->
+
 	</view>
 </template>
 
@@ -55,38 +56,42 @@
 	// import Linkage from '@/components/gaojianghua-linkage/linkage.vue'
 	import uploadImage from '@/components/ossutil/uploadFile.js';
 	import itmisterAddressPicker from '@/components/itmister-address-picker/itmister-address-picker.nvue'
-	export default{
+	export default {
 		components: {
 			// Linkage
 			itmisterAddressPicker
 		},
-		data(){
-			return{
-				formData:{
-					fleetMemberInfo:{},
-					invitationPermission:1,
+		data() {
+			return {
+				formData: {
+					fleetMemberInfo: {},
+					invitationPermission: "1",
 				},
-				show:false,
-				title1:"",
+				show: false,
+				title1: "",
 				fileList1: [],
-				fileList2:[]
+				fileList2: []
 			}
 		},
-		onShow(){
-			
+		onShow() {
+			this.$forceUpdate()
+
 		},
-		onLoad(options){
+		onLoad(options) {
 			this.id = options.id
-			if(this.id){//修改
+			if (this.id) { //修改
 				uni.setNavigationBarTitle({
-					title:'设置'
+					title: '设置'
 				})
 				this.getList()
 			}
 		},
-		methods:{
+		onNavigationBarButtonTap(e) {
+			this.submit()
+		},
+		methods: {
 			selectAddress() {
-					this.$refs.addressElone.show();
+				this.$refs.addressElone.show();
 			},
 			// 确认选中
 			confirmChangeOne(address) {
@@ -98,34 +103,39 @@
 				this.formData.province = address.province ? address.province : ''
 				this.formData.city = address.city ? address.city : ''
 				this.formData.Area = address.area ? address.area : ''
-				if(address.city == '全省'){
+				if (address.city == '全省') {
 					this.title1 = address.province
 					this.formData.sendCity = ""
 					this.formData.sendArea = ""
-				}else if(address.area == '全市'){
-					this.title1 = address.province  + address.city
+				} else if (address.area == '全市') {
+					this.title1 = address.province + address.city
 					this.formData.sendArea = ""
-				}else{
-					this.title1 = address.province  + address.city + address.area;
+				} else {
+					this.title1 = address.province + address.city + address.area;
 				}
 			},
-			getList(){
+			getList() {
 				this.$request.baseRequest('get', '/fleetInfo/getFleetInfo', {
 						id: this.id
 					}).then(res => {
 						this.formData = res.data
-						this.title1 = this.formData.province + this.formData.city + this.formData.area
+						if(this.formData.city){
+							this.title1 = this.formData.province + this.formData.city
+						}
+						if(this.formData.area){
+							this.title1 = this.formData.province + this.formData.city + this.formData.area
+						}
 						let coverUrlList = this.formData.coverUrl.split(",")
-						for(let i = 0 ; i < coverUrlList.length ; i++){
+						for (let i = 0; i < coverUrlList.length; i++) {
 							this.fileList1.push({
-								url:coverUrlList[i]
+								url: coverUrlList[i]
 							})
 						}
 						let fleetUrlList = this.formData.fleetUrl.split(",")
 						// this.fileList2 = this.formData.fleetUrl.split(",")
-						for(let i = 0 ; i < fleetUrlList.length ; i++){
+						for (let i = 0; i < fleetUrlList.length; i++) {
 							this.fileList2.push({
-								url:fleetUrlList[i]
+								url: fleetUrlList[i]
 							})
 						}
 					})
@@ -187,15 +197,15 @@
 				}
 			},
 			uploadFilePromise(url) {
-				uploadImage('image',url, 'appData/',
+				uploadImage('image', url, 'appData/',
 					result => {
 						// 上传成功回调函数
-						if(this.formData.coverUrl){
-							this.formData.coverUrl = this.formData.coverUrl+','+ result
-						}else{
+						if (this.formData.coverUrl) {
+							this.formData.coverUrl = this.formData.coverUrl + ',' + result
+						} else {
 							this.formData.coverUrl = result
 						}
-						
+
 					}
 				)
 			},
@@ -223,19 +233,70 @@
 				}
 			},
 			uploadFilePromise1(url) {
-				uploadImage('image',url, 'appData/',
+				uploadImage('image', url, 'appData/',
 					result => {
 						// 上传成功回调函数
-						if(this.formData.fleetUrl){
-							this.formData.fleetUrl = this.formData.fleetUrl+','+ result
-						}else{
+						if (this.formData.fleetUrl) {
+							this.formData.fleetUrl = this.formData.fleetUrl + ',' + result
+						} else {
 							this.formData.fleetUrl = result
 						}
 					}
 				)
 			},
-			submit(){
-				if(this.id){//编辑
+			submit() {
+				if (!this.formData.fleetName) {
+					this.$refs.uToast.show({
+						type: 'error',
+						message: "请输入车队名称!",
+					})
+					return
+				}
+				if (this.formData.fleetName.length < 4) {
+					this.$refs.uToast.show({
+						type: 'error',
+						message: "车队名称需4-15字!",
+					})
+					return
+				}
+				
+				if (!this.title1) {
+					this.$refs.uToast.show({
+						type: 'error',
+						message: "请选择常驻地址!",
+					})
+					return
+				}
+				if (!this.formData.invitationPermission) {
+					this.$refs.uToast.show({
+						type: 'error',
+						message: "请设置邀请权限!",
+					})
+					return
+				}
+				if (!this.formData.fleetProfile) {
+					this.$refs.uToast.show({
+						type: 'error',
+						message: "请填写车队简介!",
+					})
+					return
+				}
+				if (this.formData.fleetProfile.length < 10) {
+					this.$refs.uToast.show({
+						type: 'error',
+						message: "车队简介需10 - 500个字!",
+					})
+					return
+				}
+				if (this.fileList1.length == 0) {
+					this.$refs.uToast.show({
+						type: 'error',
+						message: "请上传车队封面!",
+					})
+					return
+				}
+				if (this.id) { //编辑
+					this.formData.flag = 2
 					this.$request.baseRequest('post', '/fleetInfo/api/editFleetInfo', this.formData).then(res => {
 							if (res.code == 200) {
 								this.$refs.uToast.show({
@@ -253,7 +314,7 @@
 						.catch(res => {
 							uni.$u.toast(res.message);
 						});
-				}else{
+				} else {
 					this.formData.commonId = uni.getStorageSync("firstAuthentication").commonId
 					this.formData.fleetMemberInfo.commonId = uni.getStorageSync("firstAuthentication").commonId
 					this.formData.fleetMemberInfo.driverNickname = uni.getStorageSync("firstAuthentication").driverCall
@@ -267,7 +328,7 @@
 										uni.$u.route("pages/riders/myTeam")
 									}
 								})
-							
+
 							}
 						})
 						.catch(res => {
@@ -280,26 +341,44 @@
 </script>
 
 <style lang="scss">
-	.form_data{
+	.center {
+		padding: 30rpx;
+	}
+
+	.form_data {
 		// padding: 30rpx;
 	}
+
 	.form_css {
 		width: 100%;
 		display: flex;
-		margin: 20rpx 0;
-		height: 60rpx;
+		margin: 30rpx 0;
+		height: 80rpx;
 		border-bottom: 1px solid #eeeeee;
-	
+
 		.left-text {
 			width: 50%;
 			text-align: left;
 		}
-	
+
 		.right-text {
 			width: 50%;
 			justify-content: flex-end;
 			display: flex;
 			text-align: right;
+
+			.jiantou {
+				color: #CCCCCC;
+				width: 23rpx;
+				height: 23rpx;
+				display: inline-block;
+			}
 		}
+
+	}
+
+	.textarea {
+		background: #F9F9FB;
+		margin: 21rpx 0 80rpx 0;
 	}
 </style>

+ 103 - 0
pages/riders/checkPage.vue

@@ -0,0 +1,103 @@
+<template>
+	<view class="center">
+		<view class="tips">
+			<image src="../../static/images/riders/weirenzheng.png" mode="" class="tips_img" v-if="type == 1"></image>
+			<image src="../../static/images/riders/shenhezhong.png" mode="" class="tips_img" v-if="type == 2"></image>
+			<image src="../../static/images/riders/weitongguo.png" mode=""  class="tips_img" v-if="type == 3"></image>
+		</view>
+		<view class="tips_title">司机身份未认证</view>
+		<view class="tips_center">{{tipsInfo}}</view>
+		<view class="tips_btn" @click="authentication(1)" v-if="type == 1">立即认证</view>
+		<view class="tips_btns" @click="authentication(2)" v-if="type == 2">知道了</view>
+		<view class="tips_btn" @click="authentication(3)" v-if="type == 3">重新认证</view>
+	</view>
+</template>
+
+<script>
+	export default{
+		data(){
+			return{
+				tipsInfo:"",
+				statusVal:"",
+				type:""
+			}
+		},
+		onShow() {
+			
+		},
+		onLoad() {
+			this.statusVal = uni.getStorageSync("firstAuthentication").authenticationStatus
+			if (this.statusVal == '未认证' || !this.statusVal) {
+				this.tipsInfo = "认证司机身份后即可查看车友信息哦"
+				this.type = 1
+			}
+			if (this.statusVal == '审核中') {
+			this.tipsInfo = "您的身份正在审核哦,请耐心等待"
+			this.type = 2
+			} else if (this.statusVal == '未通过') {
+				this.tipsInfo = "您的身份没用通过审核哦,您可以重新认证身份~"
+				this.type = 3
+			}
+		},
+		methods:{
+			authentication(num){
+				if (num == 1) {
+					this.$u.route("/pages/mine/driverCertification")
+				} else if (num == 3) {
+					this.$u.route("/pages/mine/editDriverCertification")
+				} else if (num == 2) {
+					// this.$u.route("")
+					uni.switchTab({
+						url: '/pages/mine/index'
+					});
+				}
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.center{
+		.tips{
+			margin-top: 400rpx;
+			text-align: center;
+			// line-height: 50%;
+			.tips_img{
+				width: 200rpx;
+				height: 200rpx;
+			}
+		}
+		.tips_title,.tips_center{
+			color: #323333 ;
+			text-align: center;
+		}
+		.tips_title{
+			color: #323333 ;
+			font-size: 42rpx;
+			font-weight: 600;
+		}
+		.tips_center{
+			font-size: 26rpx;
+			margin-top: 22rpx;
+		}
+		.tips_btn{
+			text-align: center;
+			background: #2772FB ;
+			width: 70%;
+			margin: 83rpx auto;
+			padding: 30rpx 0;
+			border-radius: 10rpx;
+			color: #FFFFFF;
+		}
+		.tips_btns{
+			text-align: center;
+			width: 70%;
+			margin: 83rpx auto;
+			padding: 30rpx 0;
+			border-radius: 10rpx;
+			color: #A3A3A3;
+		}
+		
+	}
+	
+</style>

+ 52 - 36
pages/riders/fleetInvitation.vue

@@ -1,9 +1,10 @@
 <template>
 	<view class="center">
-		<view v-for="(item,index) in applyList" class="flex fleet" @click="fleetInfo(item)">
+		<view v-for="(item,index) in applyList" class="flex fleet">
 			<view class="fleet_img">
-				<u--image class="flex-end" :showLoading="true" :src="item.coverUrl" width="60px" height="60px" shape='circle'>
-			</u--image>
+				<u--image class="flex-end" :showLoading="true" :src="item.coverUrl" width="60px" height="60px"
+					shape='circle'>
+				</u--image>
 			</view>
 			<view class="fleet_right">
 				<view class="flex">
@@ -13,33 +14,43 @@
 					<view class="fleet_invite" v-if="item.status == '已申请'" @click="refuse(item)">拒绝</view>
 					<view class="fleet_invite" v-if="item.status == '已申请'" @click="accept(item)">接受</view>
 					<view class="fleet_invite" v-else>{{item.status}}</view>
-					
+
 				</view>
-			</view>	
+			</view>
 		</view>
 	</view>
 </template>
 
 <script>
-	export default{
-		data(){
-			return{
-				commonId:"",
-				applyList:[]
+	export default {
+		data() {
+			return {
+				commonId: "",
+				applyList: []
 			}
 		},
-		onShow(){
-			
+		onShow() {
+
 		},
-		onLoad(){
+		onLoad() {
 			this.commonId = uni.getStorageSync("firstAuthentication").commonId
+			this.read() //点击进来已读信息
 			this.getList()
 		},
-		methods:{
-			refuse(item){
+		methods: {
+			read() {
+				this.$request.baseRequest('post', '/fleetMemberInfo/api/read', {
+						commonId: this.commonId,
+						readFlag: 2
+					}).then(res => {})
+					.catch(res => {
+						uni.$u.toast(res.message);
+					});
+			},
+			refuse(item) {
 				this.$request.baseRequest('post', '/fleetMemberInfo/api/editFleetMemberInfo', {
-						examineFlag:2,
-						id:item.id
+						examineFlag: 2,
+						id: item.id
 					}).then(res => {
 						if (res.code == 200) {
 							this.$refs.uToast.show({
@@ -55,29 +66,29 @@
 						uni.$u.toast(res.message);
 					});
 			},
-			accept(item){
+			accept(item) {
 				this.$request.baseRequest('post', '/fleetMemberInfo/api/editFleetMemberInfo', {
-						examineFlag:1,
-						id:item.id
+						examineFlag: 1,
+						id: item.id
 					}).then(res => {
 						if (res.code == 200) {
-						this.$refs.uToast.show({
-							type: 'success',
-							message: "通过成功!",
-							complete() {
-								uni.$u.route("pages/riders/myTeam")
-							}
-						})
+							this.$refs.uToast.show({
+								type: 'success',
+								message: "通过成功!",
+								complete() {
+									uni.$u.route("pages/riders/myTeam")
+								}
+							})
 						}
 					})
 					.catch(res => {
 						uni.$u.toast(res.message);
 					});
 			},
-			getList(){
+			getList() {
 				this.$request.baseRequest('get', '/fleetMemberInfo/selectFleetMemberInfo', {
-						commonId:this.commonId,
-						flag:2,
+						commonId: this.commonId,
+						flag: 2,
 						pageSize: 10,
 						currentPage: 1
 					}).then(res => {
@@ -94,21 +105,26 @@
 </script>
 
 <style lang="scss" scoped>
-	.center{
+	.center {
 		padding: 30rpx;
 	}
-	.fleet{
+
+	.fleet {
 		margin: 30rpx 0;
-		.fleet_img{
+
+		.fleet_img {
 			width: 20%;
 		}
-		.fleet_right{
+
+		.fleet_right {
 			margin-top: 20rpx;
 			width: 80%;
-			.fleet_name{
+
+			.fleet_name {
 				width: 70%;
 			}
-			.fleet_invite{
+
+			.fleet_invite {
 				background-color: #5878e8;
 				color: #fff;
 				margin-left: 10rpx;

+ 57 - 0
pages/riders/fleetMember.vue

@@ -0,0 +1,57 @@
+<template>
+	<view class="center">
+		<view class="avatars flex"> 
+		   <view class="" v-for="(item,index) in 9">
+		   	<image :src="formData.fleetMemberInfoList[0].driverPortrait" mode="" style="width: 128rpx;height: 30px;"></image>
+		   </view>
+
+
+		</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				fleetId: "",
+				formData: {}
+			}
+		},
+		onShow() {
+
+		},
+		onLoad(options) {
+			this.fleetId = options.id
+			this.getList()
+		},
+		methods: {
+			getList() {
+				this.$request.baseRequest('get', '/fleetInfo/getFleetInfo', {
+						id: this.fleetId
+					}).then(res => {
+						this.formData = res.data
+					})
+					.catch(res => {
+						uni.$u.toast(res.message);
+					});
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.center {
+		padding: 40rpx;
+	}
+
+	.avatars {
+		// height: 100%;
+		width: 100%;
+		// height: 30px;
+		// .avatars_item{
+		// 	width: 25%;
+
+		// }
+	}
+</style>

+ 353 - 85
pages/riders/fleetSee.vue

@@ -2,125 +2,229 @@
 	<view class="center">
 
 		<view class="fleet_info">
-			<view class="fleet_img">
-				<u-swiper :list="imgList" height="200" indicator></u-swiper>
+			<view class="fleet_top_css">
+				<u-avatar :src="fleetInfo.coverUrl" size="75" class="fleetInfo_img"></u-avatar>
+				<view class="fleetInfo_top_right">
+					<view class="fleetInfo_name">{{fleetInfo.fleetName}}
+						<!-- type 1队长 2队员 -->
+						<image v-if="type == 1" src="../../static/images/riders/shezhi.png" mode=""
+							style="width: 22rpx;height: 22rpx;margin:10rpx 0 0 20rpx;"
+							@click="setUp('/pages/riders/addFleet')"></image>
+					</view>
+					<view class="fleetInfo_address">{{fleetInfo.province}}{{fleetInfo.city}}{{fleetInfo.area}}</view>
+				</view>
+				<view class="notice_title">公告</view>
+				<view class="flex notice_center" @click="noticeSee">
+					<view class="notice_text">{{fleetInfo.notice?fleetInfo.notice:"暂无公告"}}</view>
+					<image src="../../static/images/myimg/gengduo1.png" mode=""
+						style="width: 18rpx;height: 24rpx;margin:10rpx 0 0 20rpx;"></image>
+				</view>
+				<!-- <view class="notice_text notice_center" v-else>暂无公告</view> -->
+
+				<view class="notice_title">车队简介</view>
+				<view class="introduce_info">
+					{{fleetInfo.fleetProfile}}
+				</view>
+				<!-- 	<u--textarea v-model="fleetInfo.fleetProfile" placeholder="输入公告文字,0-500字" disabled maxlength="500"
+					autoHeight count>
+				</u--textarea> -->
+			</view>
+			<view class="member">
+				<view class="flex member_top">
+					<view class="notice_title member_title">车队成员</view>
+					 <!-- @click="setUp('/pages/riders/fleetMember')" -->
+					<view class="member_right">
+						<span>查看{{fleetInfo.fleetMemberNum}}名群成员</span>
+						<image src="../../static/images/myimg/gengduo1.png" mode=""
+							style="width: 18rpx;height: 24rpx;margin:10rpx 0 0 20rpx;"></image>
+					</view>
+				</view>
+
+				<view class="flex member_avatar">
+					<view margin v-for="(item,index) in  4" class="member_item"
+						v-if="fleetInfo.fleetMemberInfoList[index]">
+						<u-avatar
+							:src="fleetInfo.fleetMemberInfoList[index].driverPortrait?fleetInfo.fleetMemberInfoList[index].driverPortrait:''"
+							size="48" style="margin: 0 auto;"></u-avatar>
+						<view class="member_name">
+							{{fleetInfo.fleetMemberInfoList[index].driverNickname}}
+						</view>
+					</view>
+					<view class="del" @click="setUp('/pages/riders/setMember',1)" v-if="type == 1">
+						<view class="del_img">—</view>
+						<view class="member_name">删除</view>
+					</view>
+
+				</view>
+			</view>
+			<view class="setUp" v-if="type == 1">
+				<view class="flex set_item" @click="setUp('/pages/riders/notice')">
+					<view class="set_name">
+						发布公告
+					</view>
+					<view class="set_img">
+						<image src="../../static/images/myimg/gengduo1.png" mode=""
+							style="width: 18rpx;height: 24rpx;margin:10rpx 0 0 20rpx;"></image>
+					</view>
+				</view>
+				<view class="flex set_item" @click="setUp('/pages/riders/setMember',2)">
+					<view class="set_name">
+						车队管理权转让
+					</view>
+					<view class="set_img">
+						<image src="../../static/images/myimg/gengduo1.png" mode=""
+							style="width: 18rpx;height: 24rpx;margin:10rpx 0 0 20rpx;"></image>
+					</view>
+				</view>
 			</view>
-			<view>{{fleetInfo.fleetName}}</view>
-			<view>{{fleetInfo.province}}{{fleetInfo.city}}{{fleetInfo.area}}</view>
-			<view>车队简介</view>
-			<u--textarea v-model="fleetInfo.notice" placeholder="输入公告文字,0-500字" disabled autoHeight >
-			</u--textarea>
-			<view>车队简介</view>
-			<u--textarea v-model="fleetInfo.fleetProfile" placeholder="输入公告文字,0-500字" disabled maxlength="500" autoHeight count>
-			</u--textarea>
-			<view>车队成员({{fleetInfo.fleetMemberNum}})</view>
-			<view class="flex">
-				<view margin v-for="(item,index) in fleetInfo.fleetMemberInfoList" >
-					<u--image class="flex-end" :showLoading="true" :src="item.driverPortrait" width="50px" height="50px"
-						shape='circle'>
-					</u--image>
+			<view class="setUp">
+				<view class="flex set_item" @click="setUp('/pages/riders/report')">
+					<view class="set_name">
+						举报
+					</view>
+					<view class="set_img">
+						<image src="../../static/images/myimg/gengduo1.png" mode=""
+							style="width: 18rpx;height: 24rpx;margin:10rpx 0 0 20rpx;"></image>
+					</view>
 				</view>
 			</view>
+			<view class="setUp">
+				<view class="set_item quit" @click="quitFleet">退出车队</view>
+			</view>
+
 		</view>
-		<chunLei-popups v-model="value" :popData="dataList" @tapPopup="tapPopup" :x="344" :y="20" placement="top-end">
-		</chunLei-popups>
+		<!-- chunLei-popups v-model="value" :popData="dataList" @tapPopup="tapPopup" :x="344" :y="20" placement="top-end">
+		</chunLei-popups> -->
+		<u-modal :show="quitShow" :title="alertTitle" :closeOnClickOverlay='true' :showCancelButton='true'
+			confirmColor='#2772FB' @confirm="confirmClick" @close="cancelClick" @cancel="cancelClick"></u-modal>
+		<u-toast ref="uToast"></u-toast>
 	</view>
 </template>
 
 <script>
-	import chunLeiPopups from "@/components/chunLei-popups/chunLei-popups.vue";
+	// import chunLeiPopups from "@/components/chunLei-popups/chunLei-popups.vue";
 	export default {
 		components: {
-			chunLeiPopups
+			// chunLeiPopups
 		},
 		data() {
 			return {
 				value: false,
-				imgList:[],
-				type:"",
-				dataList: [{
-						title: '设置',
-						icon: '../../static/chuangjianqunliao-lan.png',
-						src: '/pages/riders/addFleet',
-						// disabled: true
-						show: true
-					},
-					{
-						title: '发公告',
-						icon: '../../static/tianjiahaoyou.png',
-						src: '/pages/riders/notice',
-						show: true
-					},
-					{
-						title: '删除成员',
-						icon: '../../static/scan_icon.png',
-						show: true
-					},
-					{
-						title: '转移队长',
-						icon: '../../static/zhifeiji.png',
-						show: true
-					},
-					{
-						title: '退出车队',
-						icon: '../../static/shoufukuan.png',
-						show:true
-					},
-					{
-						title: '举报',
-						icon: '../../static/shoufukuan.png',
-						src: "/pages/riders/report",
-						show:true,
-					}
-				],
+				type: "",
 				id: "",
+				fleetId: "",
 				fleetInfo: {},
-				more: false,
+				quitShow:false,
+				alertTitle:""
 			}
 		},
 		onShow() {
 			this.getList()
 		},
 		onLoad(options) {
+			this.fleetId = options.fleetId
 			this.id = options.id
 			this.type = options.type
-			if(!this.type){
-				for(let i = 0 ; i < this.dataList.length - 2 ; i++){
-					 this.dataList[i].show = false
-				}
-			}
-			this.getList()
-		},
-		onNavigationBarButtonTap(e) {
-			this.value = true
+			this.read() //已读接口
+			// this.getList()
 		},
 		methods: {
-			clickRightIcon() {
-				this.value = true
+			cancelClick(){
+				this.quitShow = false
+			}, 
+			confirmClick(){
+				this.$request.baseRequest('post', '/fleetMemberInfo/api/delete', {
+						commonId: uni.getStorageSync("firstAuthentication").commonId,
+						fleetId:this.fleetId,
+						outFlag: 1,
+					}).then(res => {
+						debugger
+						console.log(res)
+						if (res.code == 200) {
+							this.$refs.uToast.show({
+								type: 'success',
+								message: "退出成功!",
+								complete() {
+									uni.$u.route("pages/riders/myTeam")
+								}
+							})
+						}else{
+							this.$refs.uToast.show({
+								type: 'error',
+								message: res.message,
+							})
+						}
+					})
+					.catch(res => {
+						uni.$u.toast(res.message);
+					});
+			},
+			setUp(url, num) {
+				if (num == 1) { //删除成员
+					this.$u.route(url, {
+						id: this.fleetId,
+						type: 1
+					})
+				} else if (num == 2) { //转移队长
+					this.$u.route(url, {
+						id: this.fleetId,
+						type: 2
+					})
+				} else {
+					this.$u.route(url, {
+						id: this.fleetId
+					})
+				}
 			},
-			tapPopup(e) {
-				this.$u.route(e.src, {
-					id: this.id
+			quitFleet() {
+				if(this.fleetInfo.fleetMemberInfoList.length == 1){
+					this.alertTitle= "退出后车队将解散,确定退出?"
+				}else{
+					this.alertTitle= "确定退出车队?"
+				}
+				this.quitShow = true
+				
+			},
+			noticeSee() {
+				this.$u.route("pages/riders/noticeSee", {
+					_obj: JSON.stringify(this.fleetInfo)
 				})
-				// uni.showToast({
-				// 	title:e.title,
-				// 	icon:'none'
-				// })
 			},
+			read() {
+				this.$request.baseRequest('post', '/fleetMemberInfo/api/read', {
+						id: this.id,
+						readFlag: 3
+					}).then(res => {})
+					.catch(res => {
+						uni.$u.toast(res.message);
+					});
+			},
+			clickRightIcon() {
+				this.value = true
+			},
+			// tapPopup(e) {
+			// 	this.$u.route(e.src, {
+			// 		id: this.id
+			// 	})
+			// 	// uni.showToast({
+			// 	// 	title:e.title,
+			// 	// 	icon:'none'
+			// 	// })
+			// },
 			returnPage() {
 				this.$u.route("/pages/riders/myTeam")
 			},
 			getList() {
 				this.$request.baseRequest('get', '/fleetInfo/getFleetInfo', {
-						id: this.id
+						id: this.fleetId
 					}).then(res => {
 						this.fleetInfo = res.data
-						if(this.fleetInfo.fleetUrl){
-							this.imgList = this.fleetInfo.fleetUrl.split(",")
-						}else{
-							this.imgList = this.fleetInfo.coverUrl.split(",")
-						}
-						
+						// if(this.fleetInfo.fleetUrl){
+						// 	this.imgList = this.fleetInfo.fleetUrl.split(",")
+						// }else{
+						// 	this.imgList = this.fleetInfo.coverUrl.split(",")
+						// }
+
 					})
 					.catch(res => {
 						uni.$u.toast(res.message);
@@ -132,6 +236,9 @@
 
 <style lang="scss" scoped>
 	.center {
+		background: #F2F4F7;
+		padding: 30rpx 0;
+
 		.top {
 			margin-top: 20rpx;
 			width: 100%;
@@ -149,9 +256,170 @@
 	}
 
 	.fleet_info {
-		.fleet_img {
-			width: 100%;
 
+		// padding-top: 20rpx;
+		.fleet_top_css {
+			padding: 10rpx 30rpx;
+			background: #FFFFFF;
+			margin-top: 90rpx;
+			border-radius: 30rpx 30rpx 0px 0px;
+			position: relative;
+
+			.fleetInfo_img {
+				position: absolute;
+				top: -40rpx;
+				left: 40rpx
+			}
+
+			.fleetInfo_top_right {
+				// margin-top: 10rpx;
+				margin-left: 200rpx;
+
+				.fleetInfo_name {
+					color: #333333;
+					font-size: 36rpx;
+					font-weight: 600;
+					margin: 10rpx 0;
+					// margin-top: 30rpx;
+				}
+
+				.fleetInfo_address {
+					color: #BABABA;
+					font-size: 26rpx;
+				}
+			}
+
+
+			.notice_center {
+				border-bottom: 1px solid #E6E6E6;
+			}
+
+			.notice_text {
+				font-size: 30rpx;
+				width: 95%;
+				margin-bottom: 36rpx;
+				overflow: hidden;
+				word-break: break-all;
+				/* break-all(允许在单词内换行。) */
+				text-overflow: ellipsis;
+				/* 超出部分省略号 */
+				display: -webkit-box;
+				/** 对象作为伸缩盒子模型显示 **/
+				-webkit-box-orient: vertical;
+				/** 设置或检索伸缩盒对象的子元素的排列方式 **/
+				-webkit-line-clamp: 1;
+				/** 显示的行数 **/
+			}
+
+			.introduce_info {
+				font-size: 30rpx;
+				// width: 95%;
+				margin-bottom: 48rpx;
+				overflow: hidden;
+				word-break: break-all;
+				/* break-all(允许在单词内换行。) */
+				text-overflow: ellipsis;
+				/* 超出部分省略号 */
+				display: -webkit-box;
+				/** 对象作为伸缩盒子模型显示 **/
+				-webkit-box-orient: vertical;
+				/** 设置或检索伸缩盒对象的子元素的排列方式 **/
+				-webkit-line-clamp: 3;
+				/** 显示的行数 **/
+			}
+		}
+
+		.notice_title {
+			margin: 60rpx 0 26rpx 0;
+			color: #333333;
+			font-size: 34rpx;
+			font-weight: 600;
+		}
+
+		.member {
+			padding: 1rpx 30rpx;
+			background: #FFFFFF;
+			margin-top: 30rpx;
+			padding-bottom: 45rpx;
+
+			.member_top {
+				width: 100%;
+
+				.member_title,
+				.member_right {
+					width: 50%;
+				}
+
+				.member_right {
+					text-align: right;
+					margin-top: 60rpx;
+					color: #BABABA;
+				}
+			}
+
+			.member_avatar {
+				width: 100%;
+
+				.member_item {
+					width: 20%;
+					text-align: center;
+					margin-right: 44rpx;
+				}
+
+				.del {
+					text-align: center;
+
+					.del_img {
+						width: 96rpx;
+						height: 96rpx;
+						background: #F2F4F7;
+						border-radius: 48rpx;
+						text-align: center;
+						line-height: 86rpx;
+						color: #AFB3BF;
+						font-weight: 700;
+					}
+				}
+
+				.member_name {
+					overflow: hidden;
+					text-overflow: ellipsis;
+					white-space: nowrap;
+					margin-top: 10rpx;
+					font-size: 24rpx;
+				}
+			}
+
+		}
+
+		.setUp {
+			padding: 0 30rpx;
+			background-color: #FFFFFF;
+			margin-top: 20rpx;
+
+			.set_item {
+				width: 100%;
+				height: 120rpx;
+				line-height: 120rpx;
+
+				.set_name,
+				.set_img {
+					width: 50%;
+				}
+
+				.set_img {
+					text-align: right;
+				}
+			}
+
+			.quit {
+				margin: 0 auto;
+				text-align: center;
+				color: #FE5C5C;
+				font-size: 34rpx;
+				font-weight: 600;
+
+			}
 		}
 	}
 </style>

+ 200 - 47
pages/riders/inTeam.vue

@@ -1,11 +1,47 @@
 <template>
 	<view class="center">
-		<view v-for="(item,index) in applyList" class="flex fleet" @click="fleetInfo(item)">
-			<view class="fleet_img">
-				<u--image class="flex-end" :showLoading="true" :src="item.driverPortrait" width="60px" height="60px" shape='circle'>
-			</u--image>
+
+		<view v-for="(item,index) in applyList" class="fleet">
+			<u-swipe-action>
+				<u-swipe-action-item :options="options1" :disabled="item.status == '已申请'" @click="delInfo(item)">
+					<view class="flex">
+						<view class="fleet_img">
+							<u--image class="flex-end" :showLoading="true" :src="item.driverPortrait" width="60px"
+								height="60px" shape='circle'>
+							</u--image>
+						</view>
+						<view class="fleet_right flex">
+							<view class="driver_info">
+								<view class="driver_name">
+									{{item.driverNickname}}
+								</view>
+								<view class="fleet_name">
+									{{item.fleetName}}
+								</view>
+
+							</view>
+							<view class="fleet_btn">
+								<view class="fleet_invite btn1" @click="auditSubmit(item,1)" v-if="item.status =='已申请'">
+									拒绝
+								</view>
+								<view class="fleet_invite btn2" @click="auditSubmit(item,2)" v-if="item.status =='已申请'">
+									通过
+								</view>
+								<view class="btn3" v-else>{{item.status == '已加入' ? "已通过" : item.status}}</view>
+							</view>
+
+						</view>
+					</view>
+				</u-swipe-action-item>
+			</u-swipe-action>
+
+
+			<!-- <view class="fleet_img">
+				<u--image class="flex-end" :showLoading="true" :src="item.driverPortrait" width="60px" height="60px"
+					shape='circle'>
+				</u--image>
 			</view>
-			
+
 			<view class="fleet_right">
 				<view class="flex">
 					<view class="fleet_name">
@@ -18,70 +54,135 @@
 				<view>
 					{{item.fleetName}}
 				</view>
-			</view>
+			</view> -->
 		</view>
+		<u-modal :show="auditShow" :title="alertTitle" :closeOnClickOverlay='true' :showCancelButton='true'
+			confirmColor='#2772FB' @confirm="confirmClick" @close="cancelClick" @cancel="cancelClick"></u-modal>
 		<u-toast ref="uToast"></u-toast>
 	</view>
 </template>
 
 <script>
-	export default{
-		data(){
-			return{
-				commonId:"",
-				applyList:[]
+	export default {
+		data() {
+			return {
+				commonId: "",
+				applyList: [],
+				options1: [{
+					text: '删除',
+					style: {
+						width: '145rpx',
+						// height:'180rpx',
+						backgroundColor: '#FE5C5C',
+					}
+				}],
+				auditShow: false,
+				alertTitle: "",
+				btnSign: "",
+				btnInfo: {}
 			}
 		},
-		onShow(){
-			
+		onShow() {
+
 		},
-		onLoad(){
+		onLoad() {
 			this.commonId = uni.getStorageSync("firstAuthentication").commonId
+			this.read() //已读接口
 			this.getList()
 		},
-		methods:{
-			refuse(item){
+		methods: {
+			delInfo(item) {
+				this.$request.baseRequest('post', '/fleetMemberInfo/api/listDelete', {
+						id: item.id
+					}).then(res => {
+						if (res.code == 200) {
+							this.$refs.uToast.show({
+								type: 'success',
+								message: "删除成功!",
+							})
+							this.getList()
+						}
+					})
+					.catch(res => {
+						uni.$u.toast(res.message);
+					});
+			},
+			read() {
+				this.$request.baseRequest('post', '/fleetMemberInfo/api/read', {
+						commonId: this.commonId,
+						readFlag: 1
+					}).then(res => {})
+					.catch(res => {
+						uni.$u.toast(res.message);
+					});
+			},
+			auditSubmit(item, num) {
+				if (num == 1) {
+					this.auditShow = true
+					this.alertTitle = "确定拒绝该申请?"
+
+				} else {
+					this.auditShow = true
+					this.alertTitle = "确定通过该申请?"
+				}
+				this.btnInfo = item
+				this.btnSign = num
+			},
+			cancelClick() {
+				this.auditShow = false
+			},
+			confirmClick() {
+				if (this.btnSign = 1) {
+					this.refuse()
+				} else {
+					this.accept()
+				}
+				this.auditShow = false
+			},
+			refuse() {
 				this.$request.baseRequest('post', '/fleetMemberInfo/api/editFleetMemberInfo', {
-						examineFlag:2,
-						id:item.id
+						examineFlag: 2,
+						id: this.btnInfo.id
 					}).then(res => {
 						if (res.code == 200) {
 							this.$refs.uToast.show({
 								type: 'success',
 								message: "拒绝成功!",
-								complete() {
-									uni.$u.route("pages/riders/myTeam")
-								}
+								// complete() {
+								// 	uni.$u.route("pages/riders/myTeam")
+								// }
 							})
+							this.getList()
 						}
 					})
 					.catch(res => {
 						uni.$u.toast(res.message);
 					});
 			},
-			accept(item){
+			accept(item) {
 				this.$request.baseRequest('post', '/fleetMemberInfo/api/editFleetMemberInfo', {
-						examineFlag:1,
-						id:item.id
+						examineFlag: 1,
+						id: this.btnInfo.id
 					}).then(res => {
 						if (res.code == 200) {
-						this.$refs.uToast.show({
-							type: 'success',
-							message: "通过成功!",
-							complete() {
-								uni.$u.route("pages/riders/myTeam")
-							}
-						})
+							this.$refs.uToast.show({
+								type: 'success',
+								message: "通过成功!",
+								// complete() {
+								// 	uni.$u.route("pages/riders/myTeam")
+								// }
+							})
+							this.getList()
 						}
 					})
 					.catch(res => {
 						uni.$u.toast(res.message);
 					});
 			},
-			getList(){
+			getList() {
 				this.$request.baseRequest('get', '/fleetMemberInfo/selectFleetMemberInfo', {
-						commonId:this.commonId,
-						flag:1,
+						commonId: this.commonId,
+						flag: 1,
 						pageSize: 10,
 						currentPage: 1
 					}).then(res => {
@@ -98,25 +199,77 @@
 </script>
 
 <style lang="scss" scoped>
-	.center{
-		padding: 30rpx;
+	.center {
+		padding: 30rpx 0;
 	}
-	.fleet{
-		margin: 30rpx 0;
-		.fleet_img{
+
+	.fleet {
+		// padding: 0 30rpx;
+		margin: 40rpx 0;
+		padding-bottom: 40rpx;
+		border-bottom: 1px solid #E6E6E6;
+
+		.fleet_img {
 			width: 20%;
+			margin-left: 30rpx;
 		}
-		.fleet_right{
-			margin-top: 20rpx;
+
+		.fleet_right {
+			// margin-top: 20rpx;
 			width: 80%;
-			.fleet_name{
-				width: 70%;
+
+			.driver_info {
+				width: 50%;
+
+				.driver_name {
+					width: 50%;
+					color: #333333;
+					font-size: 34rpx;
+					font-weight: 600;
+					margin-top: 10rpx;
+				}
+
+				.fleet_name {
+					color: #BABABA;
+					font-size: 26rpx;
+					margin-top: 10rpx;
+				}
 			}
-			.fleet_invite{
-				margin-left: 10rpx;
-				background-color: #5878e8;
-				color: #fff;
+
+
+			.fleet_btn {
+				justify-content: flex-end;
+				width: 50%;
+				display: flex;
+				line-height: 60rpx;
+				margin-right: 30rpx;
+
+				.fleet_invite {
+					padding: 10rpx 30rpx;
+					height: 60rpx;
+					line-height: 60rpx;
+					margin-left: 10rpx;
+					border-radius: 35px;
+					color: #fff;
+					margin-top: 20rpx;
+				}
+
+				.btn1 {
+					background-color: #FE5C5C;
+				}
+
+				.btn2 {
+					background-color: #2772FB;
+				}
+
+				.btn3 {
+					margin: 30rpx 70rpx 0 0;
+					color: #BABABA;
+					font-size: 26rpx;
+				}
 			}
+
+
 		}
 	}
 </style>

+ 408 - 149
pages/riders/index.vue

@@ -1,70 +1,130 @@
 <template>
 	<view class="center">
-		<view class="row1">
-			<u--image class="flex-end" :showLoading="true" src="../../static/images/reders/geren.png" width="30px"
-				height="30px" @click="myPage"></u--image>
-		</view>
-		<view class="flex center_top">
-			<u-button :type="indexbtn == 1? 'primary':''" @click="changebtn(1)">司机</u-button>
-			<u-button :type="indexbtn == 2? 'primary':''" @click="changebtn(2)">车队</u-button>
-			<view class="">司机</view>
-			<view class="">车队</view>
+		<view class="flex row1">
+			<view class="flex center_top">
+				<view class="center_top_btn" :class="indexbtn == 1? '':'center_top_btn1'" @click="changebtn(1)">司机
+				</view>
+				<view class="center_top_btn" :class="indexbtn == 2? '':'center_top_btn1'" @click="changebtn(2)">车队
+				</view>
+			</view>
+			<view class="top_img">
+				<u--image :showLoading="true" class="flex-end" src="../../static/images/riders/geren.png" width="35px"
+					height="35px" @click="myPage"></u--image>
+			</view>
 		</view>
 		<view class="driver" v-show="indexbtn == 1">
 			<view class="flex screen">
-				<view @click="selectAddress(1)" class="screen_item">{{title1 ? title1 : "请选择地址"}}</view>
+				<view @click="selectAddress(1)" class="screen_item">
+					<view class="screen_sign sign1">装</view>
+					{{title1 ? title1 : "请选择地址"}}
+				</view>
 				<itmister-address-picker ref="addressElone" @confirmChange="confirmChangeOne"></itmister-address-picker>
-				<view @click="replace">--></view>
-				<view @click="selectAddress(2)" class="screen_item">{{title2 ? title2 : "请选择地址"}}</view>
-				<!-- <itmister-address-picker ref="addressEltwo" :wholeCountry="true" @confirmChange="confirmChangeTwo"></itmister-address-picker> -->
-			</view>
-			<view class="route" v-for="(item,index) in routeData">
-				<view class="flex">{{item.driverNickname}}
-					<view class="" style="margin-left: 30px;" @click="invitation(item)">邀请</view>
-					<u-picker :show="fleetShow" :columns="columns" @cancel="fleetClose" @confirm="invitationCheng"></u-picker>
+				<u--image :showLoading="true" class="exchange" src="../../static/images/riders/exchange.png"
+					width="43px" height="43px" @click="replace"></u--image>
+				<view @click="selectAddress(2)" class="screen_item">
+					<view class="screen_sign sign2">卸</view>
+					{{title2 ? title2 : "请选择地址"}}
 				</view>
-				<view>{{item.sendCity ? item.sendCity: item.sendProvince }}{{item.sendArea}} ----->
-					{{item.unloadCity ? item.unloadCity: item.unloadProvince }}{{item.unloadArea}}
+				<!-- :wholeCountry="true" -->
+				<itmister-address-picker ref="addressEltwo" @confirmChange="confirmChangeTwo"></itmister-address-picker>
+			</view>
+			<view class="route">
+				<view v-for="(item,index) in routeData">
+					<view class="flex route_item">
+						<view style="width: 20%;">
+							<u-avatar :src="item.driverPortrait" size="60"></u-avatar>
+						</view>
+						<view style="width: 80%;">
+							<view class="flex">
+								<view class="driver_name">
+									{{item.driverNickname}}
+								</view>
+								<view class="driver_invite">
+									<view class="route_invite" style="margin-left: 30px;" @click="invitation(item)">
+										<image src="../../static/images/riders/yaoqing.png" mode=""
+											style="width: 26rpx;height: 26rpx;margin-rigth:10rpx;"></image>邀请
+									</view>
+								</view>
+							
+								<u-picker :show="fleetShow" :columns="columns" @cancel="fleetClose"
+									@confirm="invitationCheng">
+								</u-picker>
+							</view>
+							<view class="address" v-for="(items,index) in item.startAdress">
+								<span class="spots spot1"></span>
+								{{item.startAdress[index]}}
+								<!-- {{item.sendCity ? item.sendCity: item.sendProvince }}{{item.sendArea}} -->
+								<image class="jt-icon" src="@/static/images/goodSource/jt.png" mode='widthFix'></image>
+								<span class="spots spot2"></span>
+								{{item.endAdress[index]}}
+								<!-- {{item.unloadCity ? item.unloadCity: item.unloadProvince }}{{item.unloadArea}} -->
+							</view>
+						</view>
+					</view>
 				</view>
 			</view>
-			<view v-if="routeData.length == 0">
-				<u-empty mode="search" icon="http://cdn.uviewui.com/uview/empty/car.png"></u-empty>
+			<view v-if="routeData.length == 0" style="background: #FFFFFF;text-align: center;">
+				<!-- <u-empty mode="search" icon="http://cdn.uviewui.com/uview/empty/car.png"></u-empty> -->
+				暂无数据
 			</view>
-
 		</view>
-		<view class="" v-show="indexbtn == 2">
-			<view class="flex">
-				<view @click="selectChange" class="screen_item">{{city ? city : province}}</view>
-				<!-- <itmister-address-picker ref="addressElthree" :showCheck="false" @confirmChange="confirmChangethree"></itmister-address-picker> -->
-				<u-search placeholder="输入车队信息关键字" v-model="searchKeyWord" @change="getList" maxlength="15"></u-search>
+		<view class="riders" v-show="indexbtn == 2">
+			<view class="flex riders_top">
+				<view @click="selectChange" class="riders_city">{{city ? city : province}}</view>
+				<itmister-address-picker ref="addressElthree" :showCheck="false" @confirmChange="confirmChangethree">
+				</itmister-address-picker>
+				<u-search placeholder="输入车队信息关键字" bgColor="#ffffff" v-model="searchKeyWord" @search="getList"
+					maxlength="15"></u-search>
 			</view>
-			<view v-for="(item,index) in formData" class="flex fleet">
-				<view class="fleet_right">
-					<view class="flex">
-						<view class="fleet_name">
-							{{item.fleetName}}({{item.fleetMemberNum}})
+			<view class="fleet">
+				<view v-for="(item,index) in formData" class="flex">
+					<view class="fleet_item">
+						<view class="flex">
+							<u-avatar :src="item.coverUrl" size="45"></u-avatar>
+							<view class="fleet_name">
+								{{item.fleetName}}
+								<view class="fleet_member flex">
+									<u-avatar-group :urls="item.fleetMemberUrl.split(',')" size="24" gap="0.4">
+									</u-avatar-group>
+									<text class="fleet_number">{{item.fleetMemberNum}}人</text>
+									<!-- <image src="../../static/images/myimg/gengduo1@3x.png" class="arrow"></image> -->
+									<image src="../../static/images/myimg/gengduo1.png" mode=""
+										style="width: 18rpx;height: 20rpx;margin-top:14rpx;"></image>
+								</view>
+							</view>
+							<view class="fleet_invite" v-if="!item.fleetMemberStatus" @click="joinFleet(item)">加入</view>
+							<view class="fleet_invite" v-else>{{item.fleetMemberStatus}}</view>
+						</view>
+
+						<view class="fleet_introduce">
+							<u-read-more ref="uReadMore" :toggle="true" :shadowStyle="shadowStyle" closeText="查看全部"
+								:showHeight="20">
+								<rich-text :nodes="item.fleetProfile"></rich-text>
+							</u-read-more>
+
+							<!-- <view class="fleet_text" v-if="item.textShow">{{item.fleetProfile}}</view>
+							<view class="" v-else>{{item.fleetProfile}}</view>
+								<span class="btn_change" @click="textChange(index)">{{switchtext}}</span> -->
+
+						</view>
+						<view class="" v-if="item.img">
+							<u-upload class="uview-upload" :fileList="item.img" :deletable="false" name="1" multiple
+								:maxCount="1">
+							</u-upload>
 						</view>
-						<view class="fleet_invite" v-if="!item.fleetMemberStatus" @click="joinFleet(item)">加入</view>
-						<view class="fleet_invite" v-else @click="joinFleet(item)">{{item.fleetMemberStatus}}</view>
-					</view>
-					<view class="">
-						<u-upload class="uview-upload" :fileList="item.img" :deletable="false" name="1" multiple
-							:maxCount="1">
-						</u-upload>
-					</view>
-					<view>
-						{{item.fleetProfile}}
 					</view>
 				</view>
 			</view>
-			<view v-if="formData.length == 0">
-				<u-empty mode="data" icon="http://cdn.uviewui.com/uview/empty/car.png"></u-empty>
+
+			<view v-if="formData.length == 0" style="background: #FFFFFF;text-align: center;">
+				<!-- <u-empty mode="data" icon="http://cdn.uviewui.com/uview/empty/car.png"></u-empty> -->
+				暂无数据
 			</view>
 		</view>
 		<u-toast ref="uToast"></u-toast>
 		<u-modal :show="isShowAlert" :title="alertTitle" :closeOnClickOverlay='true' :showCancelButton='true'
 			confirmColor='#2772FB' @confirm="confirmClick" @close="cancelClick" @cancel="cancelClick"></u-modal>
-			<u-modal :show="tipsShow"  :content='tipsText' :confirmText="btnTips" @confirm="authentication"></u-modal>
+		<u-modal :show="tipsShow" :content='tipsText' :confirmText="btnTips" @confirm="authentication"></u-modal>
 	</view>
 </template>
 
@@ -92,7 +152,7 @@
 					unloadCity: "",
 					unloadArea: ""
 				},
-				fleetLocation:{},
+				fleetLocation: {},
 				formData: [],
 				searchKeyWord: "",
 				province: "", //省
@@ -101,12 +161,17 @@
 				isShowAlert: false,
 				commonId: "",
 				addMember: {},
-				tipsShow:false,
-				tipsText:"",
-				btnTips:'去认证',
-				fleetShow:false,
-				columns:[],
-				fleetInviteList:[]
+				tipsShow: false,
+				tipsText: "",
+				btnTips: '去认证',
+				fleetShow: false,
+				columns: [],
+				fleetInviteList: [],
+				//文本折叠
+				shadowStyle: {
+					backgroundImage: "none",
+					paddingTop: "0",
+				}
 			}
 		},
 		created() {},
@@ -125,78 +190,103 @@
 				this.title2 = '全国'
 				this.unloadInfo.unloadProvince = '全国'
 			}
-			if(uni.getStorageSync("fleetLocation")){
+			if (uni.getStorageSync("fleetLocation")) {
 				this.province = uni.getStorageSync("fleetLocation").province
 				this.city = uni.getStorageSync("fleetLocation").city
-			}else{
+			} else {
 				this.province = ''
 				this.city = '北京'
 			}
 			this.commonId = uni.getStorageSync("firstAuthentication").commonId
-			if(uni.getStorageSync("firstAuthentication")){
-				this.statusVal = uni.getStorageSync("firstAuthentication").authenticationStatus
-				if(this.statusVal == '未认证'){
-					this.tipsShow = true
-					this.tipsText = "认证司机身份后,可查看车友信息"
-				}
-				if(this.statusVal == '审核中'){
-					this.tipsShow = true
-					this.tipsText = "司机身份审核中"
-					this.btnTips = "我知道了"
-				}else if(this.statusVal == '未通过'){
-					this.tipsShow = true
-					this.tipsText = "司机身份未通过审核"
-					this.btnTips = "重新认证"
-				}
-			}else{
-				this.tipsShow = true
-				this.tipsText = "您尚未登录,请前去登录!"
-				this.btnTips = "去登录"
-			}
+			this.checking()
 			this.getList()
 		},
 		onLoad() {},
 		methods: {
-			fleetClose(){
+			checking(){
+				debugger
+				this.statusVal = uni.getStorageSync("firstAuthentication").authenticationStatus
+				if (uni.getStorageSync("firstAuthentication")) {
+					if(this.statusVal != "已认证" && this.statusVal != "已过期"){
+						uni.setTabBarItem({
+							  index: 1,
+							  text: '车友',
+							  pagePath: "/pages/riders/checkPage",
+							  iconPath: 'static/images/common/huoyuan@2x(1).png',
+							  selectedIconPath: 'static/images/common/huoyuan@2x.png'
+						})
+						uni.switchTab({
+							url: '/pages/riders/checkPage'
+						});
+					}else{
+						uni.setTabBarItem({
+							  index: 1,
+							  text: '车友',
+							  pagePath: "/pages/riders/index",
+							  iconPath: 'static/images/common/huoyuan@2x(1).png',
+							  selectedIconPath: 'static/images/common/huoyuan@2x.png'
+						})
+						uni.switchTab({
+							url: '/pages/riders/index'
+						});
+					}
+				} else if(!uni.getStorageSync("firstAuthentication")&&!uni.getStorageSync("userInfo")) { //判断有没有登录
+					this.tipsShow = true
+					this.tipsText = "您尚未登录,请前去登录!"
+					this.btnTips = "去登录"
+				}else if (!uni.getStorageSync("firstAuthentication")){ //注册登录后并没有认证司机
+					uni.setTabBarItem({
+						  index: 1,
+						  text: '车友',
+						  pagePath: "/pages/riders/checkPage",
+						  iconPath: 'static/images/common/huoyuan@2x(1).png',
+						  selectedIconPath: 'static/images/common/huoyuan@2x.png'
+					})
+					uni.switchTab({
+						url: '/pages/riders/checkPage'
+					});
+				}
+			},
+			fleetClose() {
 				this.fleetShow = false
 			},
-			invitation(item){
-				this.addMember={}
+			invitation(item) {
+				this.addMember = {}
 				this.columns = []
 				this.addMember.commonId = item.commonId
 				this.addMember.driverNickname = item.driverNickname
 				this.addMember.driverPortrait = item.driverPortrait
-				
+
 				this.$request.baseRequest('get', '/fleetInfo/fleetInfos', {
 						commonId: this.commonId,
 					}).then(res => {
 						this.fleetInviteList = res.data
 						let flrrtArray = []
-						for(let i = 0 ; i < res.data.length ; i++){
+						for (let i = 0; i < res.data.length; i++) {
 							flrrtArray.push(res.data[i].fleetName)
 						}
 						this.columns.push(flrrtArray)
-						if(this.columns.length == 0){
+						if (this.columns.length == 0) {
 							uni.$u.toast("无可邀请的车队");
-						}else{
+						} else {
 							this.fleetShow = true
 						}
 					})
 					.catch(res => {
 						uni.$u.toast(res.message);
-					});	
+					});
 			},
-			invitationCheng(e){//邀请
-			    this.addMember.fleetId = this.fleetInviteList[e.indexs[0]].id
+			invitationCheng(e) { //邀请
+				this.addMember.fleetId = this.fleetInviteList[e.indexs[0]].id
 				this.fleetShow = false
 				this.addMember.joinFlag = 2
-				this.$request.baseRequest('post', '/fleetMemberInfo/api/addFleetMemberInfo',this.addMember).then(res => {
-						if(res.code == 200){
+				this.$request.baseRequest('post', '/fleetMemberInfo/api/addFleetMemberInfo', this.addMember).then(res => {
+						if (res.code == 200) {
 							this.$refs.uToast.show({
 								type: 'success',
 								message: "邀请已发出",
 							})
-						}else{
+						} else {
 							uni.$u.toast(res.message);
 						}
 					})
@@ -204,34 +294,34 @@
 						uni.$u.toast(res.message);
 					});
 			},
-			authentication(){
+			authentication() {
 				this.tipsShow = false
-				if(this.statusVal == '未认证'){
+				if (this.statusVal == '未认证') {
 					this.$u.route("/pages/mine/driverCertification")
-				}else if(this.statusVal == '未通过'){
+				} else if (this.statusVal == '未通过') {
 					this.$u.route("/pages/mine/editDriverCertification")
-				}else if(this.statusVal == '审核中'){
+				} else if (this.statusVal == '审核中') {
 					// this.$u.route("")
 					uni.switchTab({
 						url: '/pages/mine/index'
 					});
-				}else{
+				} else {
 					uni.$u.route('/pages/public/login');
 				}
 			},
 			selectAddress(num) {
-				if(num == 1){
+				if (num == 1) {
 					this.$refs.addressElone.show();
-				}else if(num == 2){
+				} else if (num == 2) {
 					this.$refs.addressEltwo.show();
 				}
 			},
-			selectChange(){
+			selectChange() {
 				this.$refs.addressElthree.show();
 			},
 			// 确认选中
 			confirmChangeOne(address) {
-				if(address.province == '全国'){
+				if (address.province == '全国') {
 					uni.$u.toast("发货地不可以是全国")
 					// this.$refs.addressElone.show();
 					return
@@ -239,48 +329,48 @@
 				this.sendInfo.sendProvince = address.province ? address.province : ''
 				this.sendInfo.sendCity = address.city ? address.city : ''
 				this.sendInfo.sendArea = address.area ? address.area : ''
-				if(address.city == '全省'){
+				if (address.city == '全省') {
 					this.title1 = address.province
 					this.sendInfo.sendCity = ""
 					this.sendInfo.sendArea = ""
-				}else if(address.area == '全市'){
-					this.title1 = address.province  + address.city
+				} else if (address.area == '全市') {
+					this.title1 = address.province + address.city
 					this.sendInfo.sendArea = ""
-				}else{
-					this.title1 = address.province  + address.city + address.area;
+				} else {
+					this.title1 = address.province + address.city + address.area;
 				}
-				uni.setStorageSync("sendInfo",this.sendInfo)
+				uni.setStorageSync("sendInfo", this.sendInfo)
 				this.getList()
 			},
 			confirmChangeTwo(address) {
 				this.unloadInfo.unloadProvince = address.province ? address.province : ''
 				this.unloadInfo.unloadCity = address.city ? address.city : ''
 				this.unloadInfo.unloadArea = address.area ? address.area : ''
-				if(address.city == '全省'){
+				if (address.city == '全省') {
 					this.title2 = address.province
 					this.unloadInfo.unloadCity = ""
 					this.unloadInfo.unloadArea = ""
-				}else if(address.area == '全市'){
-					this.title2 = address.province  + address.city
+				} else if (address.area == '全市') {
+					this.title2 = address.province + address.city
 					this.unloadInfo.unloadArea = ""
-				}else{
-					this.title2 = address.province  + address.city + address.area;
+				} else {
+					this.title2 = address.province + address.city + address.area;
 				}
-				uni.setStorageSync("unloadInfo",this.unloadInfo)
+				uni.setStorageSync("unloadInfo", this.unloadInfo)
 				this.getList()
 			},
-			confirmChangethree(address){
+			confirmChangethree(address) {
 				this.province = address.province
 				this.city = address.city
-				if(address.city == "全省"){
+				if (address.city == "全省") {
 					this.city = ""
 				}
 				this.fleetLocation.province = address.province
-				this.fleetLocation.city = address.city
-				uni.setStorageSync("fleetLocation",this.fleetLocation)
+				this.fleetLocation.city = address.city == "全省" ? "" : address.city
+				uni.setStorageSync("fleetLocation", this.fleetLocation)
 				this.getList()
 			},
-			joinFleet(item) { 
+			joinFleet(item) {
 				this.addMember.commonId = this.commonId
 				this.addMember.driverNickname = uni.getStorageSync("firstAuthentication").driverCall
 				this.addMember.driverPortrait = uni.getStorageSync("userInfo").avatarUrl
@@ -310,7 +400,7 @@
 								message: "申请成功,等待队长审核",
 							})
 							this.getList()
-						}else{
+						} else {
 							this.$refs.uToast.show({
 								type: 'success',
 								message: "申请失败,请稍后重试",
@@ -323,7 +413,7 @@
 			},
 			getList() {
 				if (this.indexbtn == 1) {
-					this.$request.baseRequest('get', '/commonRoute/select', {
+					this.$request.baseRequest('get', '/commonRoute/driverList', {
 							pageSize: 10,
 							currentPage: 1,
 							sendProvince: this.sendInfo.sendProvince,
@@ -335,12 +425,21 @@
 						}).then(res => {
 							if (res.code == 200) {
 								this.routeData = res.data.records
+								for (let i = 0; i < this.routeData.length; i++) {
+									if (this.routeData[i].startAdress) {
+										this.routeData[i].startAdress = this.routeData[i].startAdress.split(",")
+									}
+									if (this.routeData[i].endAdress) {
+										this.routeData[i].endAdress = this.routeData[i].endAdress.split(",")
+									}
+								}
 							}
 						})
 						.catch(res => {
 							uni.$u.toast(res.message);
 						});
 				} else {
+					let that = this
 					this.$request.baseRequest('get', '/fleetInfo/selectFleetInfo', {
 							commonId: this.commonId,
 							province: this.province, //省
@@ -349,12 +448,12 @@
 							pageSize: 10,
 							currentPage: 1
 						}).then(res => {
-							this.formData = res.data.records
-							let that = this
-							for (let i = 0; i < this.formData.length; i++) {
-								if (this.formData[i].fleetUrl) {
-									this.formData[i].img = []
-									let imgList = this.formData[i].fleetUrl.split(",")
+							that.formData = res.data.records
+							for (let i = 0; i < that.formData.length; i++) {
+								that.formData[i].textShow = false
+								if (that.formData[i].fleetUrl) {
+									that.formData[i].img = []
+									let imgList = that.formData[i].fleetUrl.split(",")
 									for (let j = 0; j < imgList.length; j++) {
 										that.formData[i].img.push({
 											url: imgList[j]
@@ -378,7 +477,7 @@
 				this.show = false
 			},
 			replace() {
-				if(this.unloadInfo.unloadProvince == "全国"){
+				if (this.unloadInfo.unloadProvince == "全国") {
 					uni.$u.toast("发货地不可以是全国")
 					return
 				}
@@ -405,55 +504,215 @@
 
 <style lang="scss" scoped>
 	.center {
-		background: #F2F4F7 ;
+		background: #F2F4F7;
+
 		.row1 {
 			display: flex;
 			justify-content: flex-end;
-			margin-top: 46rpx;
-			margin: 30rpx 30rpx 0 0;
+
+			.flex-end {
+				margin-top: 50rpx;
+			}
+
+			.center_top {
+				width: 40%;
+				margin: 60rpx auto 0;
+
+				.center_top_btn {
+					width: 50%;
+					text-align: center;
+					color: #000000;
+					font-size: 42rpx;
+					font-weight: 600;
+				}
+
+				.center_top_btn1 {
+					color: #BBBBBB;
+				}
+			}
 		}
 
-		.center_top {
-			margin-top: 20rpx;
-			padding: 0 30rpx;
+		.top_img {
+			width: 70rpx;
+			height: 70rpx;
 		}
 	}
 
-	.fleet {
-		padding: 0 30rpx;
-		margin: 30rpx 0;
 
-		// .fleet_img {
-		// 	width: 20%;
-		// }
+	.route {
+		padding: 40rpx;
+		margin-top: 40rpx;
+		background: #FFFFFF;
 
-		.fleet_right {
-			margin-top: 10rpx;
+		.route_item {
 			width: 100%;
 
-			.fleet_name {
-				width: 80%;
+			.route_invite {
+				width: 146rpx;
+				height: 54rpx;
+				border-radius: 35px;
+				text-align: center;
+				color: #FFFFFF;
+				line-height: 54rpx;
+				background: #2772FB;
 			}
 
-			.fleet_invite {
-				text-align: right;
-				background-color: #5878e8;
-				color: #fff;
+			.driver_name {
+				width: 50%;
+				margin: 20rpx 0 0 30rpx;
+				color: #333333;
+				font-size: 30rpx;
+			}
+			.driver_invite{
+				display: flex;
+				width: 50%;
+				justify-content: flex-end;
 			}
 		}
-	}
 
-	.route {
-		padding: 30rpx;
+		.address {
+			margin-left: 30rpx;
+
+			// line-height: 34rpx;
+			.spots {
+				width: 20rpx;
+				height: 20rpx;
+				display: inline-block;
+				border-radius: 10rpx;
+				margin-right: 10rpx;
+				margin-bottom: 4rpx
+			}
+
+			.spot1 {
+				background: #2772FB;
+			}
+
+			.spot2 {
+				background: #FE6300;
+			}
+		}
 	}
 
 	.driver {
 		.screen {
-			margin-top: 10rpx;
-			.screen_item{
-				width: 46%;
+			background-color: #FFFFFF;
+			width: 92%;
+			border-radius: 20rpx;
+			height: 200rpx;
+			margin: 0 auto;
+			margin-top: 60rpx;
+
+			.screen_item {
+				padding: 60rpx 30rpx;
+				width: 40%;
 				text-align: center;
+
+				.screen_sign {
+					width: 40rpx;
+					height: 40rpx;
+					text-align: center;
+					margin: 0 auto;
+					border-radius: 6px;
+					color: #FFFFFF;
+					font-size: 22rpx;
+					line-height: 40rpx;
+				}
+
+				.sign1 {
+					background: #2772FB;
+				}
+
+				.sign2 {
+					background: #FE6300;
+				}
+			}
+
+			.exchange {
+				line-height: 200rpx;
+				margin-top: 60rpx;
 			}
 		}
 	}
+
+	.riders {
+		.riders_top {
+			margin-top: 40rpx;
+
+			.riders_city {
+				margin-top: 10rpx;
+				margin: 10rpx 30rpx;
+			}
+		}
+
+		.fleet {
+			padding: 30rpx;
+			margin: 40rpx 0;
+			background: #FFFFFF;
+			border-top-right-radius: 40rpx;
+			border-top-left-radius: 40rpx;
+
+			.fleet_item {
+
+				// margin-top: 10rpx;
+				width: 100%;
+				margin-bottom: 20rpx;
+
+				.fleet_name {
+					margin-left: 20rpx;
+					width: 70%;
+				}
+
+				.fleet_invite {
+					text-align: center;
+					background-color: #2772FB;
+					width: 128rpx;
+					height: 66rpx;
+					line-height: 66rpx;
+					border-radius: 35rpx;
+					color: #fff;
+				}
+
+				.fleet_introduce {
+					margin: 40rpx 0;
+					position: relative;
+
+					// .fleet_text{
+					// 	overflow: hidden;
+					// 	word-break: break-all;  /* break-all(允许在单词内换行。) */
+					// 	text-overflow: ellipsis;  /* 超出部分省略号 */
+					// 	display: -webkit-box; /** 对象作为伸缩盒子模型显示 **/
+					// 	-webkit-box-orient: vertical; /** 设置或检索伸缩盒对象的子元素的排列方式 **/
+					// 	-webkit-line-clamp: 3; /** 显示的行数 **/
+					// }
+					.btn_change {
+						position: absolute;
+						right: 0rpx;
+						bottom: 0rpx;
+						color: #2772fb;
+					}
+				}
+
+				.fleet_member {
+					margin-top: 20rpx;
+				}
+
+				.fleet_number {
+					margin: 6rpx 10rpx;
+					color: #ABABAB;
+					font-size: 24rpx;
+				}
+			}
+		}
+
+
+	}
+
+	.jt-icon {
+		position: relative;
+		top: 16rpx;
+		width: 60rpx;
+		margin: 0 20rpx;
+		// margin-top: 10rpx;
+
+	}
 </style>

+ 161 - 54
pages/riders/myTeam.vue

@@ -1,36 +1,60 @@
 <template>
 	<view class="center">
-		<view>
+		<view class="center_top">
 			<u-search placeholder="输入车队名称" v-model="searchKeyWord" @change="getList" maxlength="15"></u-search>
-		</view>
-		<view class="" @click="inTeam">
-			入队申请
-		</view>
-		<view class="" @click="fleetInvitation">
-			车队邀请
-		</view>
-		<view v-for="(item,index) in formData" class="flex fleet" @click="fleetInfo(item)">
-			<view class="fleet_img">
-				<u--image class="flex-end" :showLoading="true" :src="item.coverUrl" width="60px" height="60px" shape='circle'>
-			</u--image>
+			<view class="flex top_inTeam" @click="inTeam">
+				<view class="img_sign">
+					<image src="../../static/images/riders/inTeam.png" mode="" class="topImg_css"></image>
+					<span class="info_sign" v-if="inTeamShow"></span>
+				</view>
+				<view class="text_css">
+					入队申请
+				</view>
 			</view>
-			
-			<view class="fleet_right">
-				<view class="flex">
-					<view class="fleet_name">
-						{{item.fleetName}}({{item.fleetMemberNum}})
-					</view>
-					<!-- “审核中”和“已驳回”只有队长本人可见 -->
-					<view class="fleet_invite" v-if="item.captainFlag == 1 && (item.fleetStatus =='审核中' || item.fleetStatus =='已驳回') ">{{item.fleetStatus}}</view>
-					<view class="fleet_invite" v-else-if="item.fleetStatus != '已通过'">{{item.fleetStatus}}</view>
-					<!-- <view class="fleet_invite" v-if="item.captainFlag == 1">{{item.fleetStatus}}</view> -->
+			<view class="flex top_fleetInvite" @click="fleetInvitation">
+				<view class="img_sign">
+					<image src="../../static/images/riders/fleetInvite.png" mode="" class="topImg_css"></image>
+						<span class="info_sign" v-if="fleetInviteShow"></span>
 				</view>
-				<view>
-					{{item.province}}{{item.city}}{{item.area}}
+				<view class="text_css">
+					车队邀请
 				</view>
 			</view>
-			
 		</view>
+		
+		<view class="fleet">
+			<view v-for="(item,index) in formData" class="flex fleet_item" @click="fleetInfo(item)">
+				<view class="fleet_img">
+					<u--image class="flex-end" :showLoading="true" :src="item.coverUrl" width="45px" height="45px"
+						shape='circle'>
+					</u--image>
+					<span class="info_sign" v-if="item.announcement == 0"></span>
+					<image src="../../static/images/riders/captain.png" mode="" v-if="item.captainFlag == 1" class="captain_sign"></image>
+				</view>
+				<view class="fleet_right">
+					<view class="flex">
+						<view class="fleet_name">
+							{{item.fleetName}}({{item.fleetMemberNum}})
+						</view>
+						<!-- “审核中”和“已驳回”只有队长本人可见 -->
+						<view class="fleet_invite audit" v-if="item.captainFlag == 1 && item.fleetStatus =='审核中'">{{item.fleetStatus}}</view>
+						<view class="fleet_invite rebut" v-if="item.captainFlag == 1 && item.fleetStatus =='已驳回'">{{item.fleetStatus}}</view>
+						<!-- 审核通过的不显示状态 -->
+						<!-- <view class="fleet_invite adopt">已通过</view> -->
+						<!-- <view class="fleet_invite"
+							v-if="item.captainFlag == 1 && (item.fleetStatus =='审核中' || item.fleetStatus =='已驳回') ">
+							{{item.fleetStatus}}</view>
+						<view class="fleet_invite" v-else-if="item.fleetStatus != '已通过'">{{item.fleetStatus}}</view> -->
+						<!-- <view class="fleet_invite" v-if="item.captainFlag == 1">{{item.fleetStatus}}</view> -->
+					</view>
+					<view class="fleet_address">
+						{{item.province}}  {{item.city}}  {{item.area}}
+					</view>
+				</view>
+			</view>
+		</view>
+
+		
 	</view>
 </template>
 
@@ -38,47 +62,56 @@
 	export default {
 		data() {
 			return {
-				formData:[],
-				searchKeyWord:""
+				formData: [],
+				searchKeyWord: "",
+				fleetInviteShow:false, 
+				inTeamShow:false
 			}
 		},
 		onShow() {
-
-		},
-		onLoad() {
 			this.commonId = uni.getStorageSync("firstAuthentication").commonId
+			this.checkInfo()//检查是否有未读信息
 			this.getList()
 		},
+		onLoad() {
+		},
 		onNavigationBarButtonTap(e) {
 			this.$u.route("/pages/riders/addFleet")
 		},
 		methods: {
+			checkInfo(){
+				this.$request.baseRequest('get', '/fleetMemberInfo/redDot', {
+						commonId: this.commonId
+					}).then(res => {
+						if(res.data.teamApplication == 0){
+							this.inTeamShow = true
+						}
+						if(res.data.fleetInvitation == 0){
+							this.fleetInviteShow = true
+						}
+					})
+					.catch(res => {
+						uni.$u.toast(res.message);
+					});
+			},
 			getList() {
 				this.$request.baseRequest('get', '/fleetMemberInfo/selectMyFleetInfo', {
 						commonId: this.commonId,
-						searchKeyWord:this.searchKeyWord,
+						searchKeyWord: this.searchKeyWord,
 						pageSize: 10,
 						currentPage: 1
 					}).then(res => {
-						// if (res.code == 200) {
-						// 	this.$refs.uToast.show({
-						// 		type: 'success',
-						// 		message: "车队添加成功!",
-						// 		complete() {
-						// 			uni.$u.route("pages/riders/myTeam")
-						// 		}
-						// 	})
-						// }
 						this.formData = res.data.records
 					})
 					.catch(res => {
 						uni.$u.toast(res.message);
 					});
 			},
-			fleetInfo(item){
-				this.$u.route("/pages/riders/fleetSee",{
-					id:item.fleetId,
-					type:item.captainFlag
+			fleetInfo(item) {
+				this.$u.route("/pages/riders/fleetSee", {
+					fleetId: item.fleetId,
+					id: item.id,
+					type: item.captainFlag
 				})
 			},
 			inTeam() {
@@ -87,14 +120,15 @@
 			fleetInvitation() {
 				this.$u.route("/pages/riders/fleetInvitation")
 			},
-			
+
 		}
 	}
 </script>
 
 <style lang="scss" scoped>
 	.center {
-		padding: 30rpx;
+		// padding: 30rpx;
+		background: #F2F4F7;
 
 		.row1 {
 			display: flex;
@@ -102,20 +136,93 @@
 			margin-top: 46rpx;
 			margin: 40rpx 30rpx 0 0;
 		}
+		.center_top{
+			padding: 30rpx;
+			background: #FFFFFF;
+			margin-bottom: 30rpx;
+		}
+		.topImg_css{
+			width: 64rpx;
+			height: 64rpx;
+			margin-top: 38rpx;
+		}
+		.top_fleetInvite,.top_inTeam{
+			height: 120rpx;
+			line-height: 140rpx;
+		}
+		.text_css{
+			margin-left: 30rpx;
+			
+		}
+		.img_sign{
+			position: relative;
+			.info_sign{
+				position: absolute;
+				display: inline-block;
+				width: 20rpx;
+				height: 20rpx;
+				border-radius: 10rpx;
+				background: #FE5C5C;
+				top: 30rpx;
+				right: -3px;
+			}
+		}
 	}
-	.fleet{
-		margin: 30rpx 0;
-		.fleet_img{
+
+	.fleet {
+		margin-top: 30rpx;
+	    background: #FFFFFF;
+		padding: 30rpx;
+		.fleet_item{
+			margin-bottom: 50rpx;
+		}
+
+		.fleet_img {
 			width: 20%;
+			position: relative;
+			.captain_sign{
+				position: absolute;
+				width: 28rpx;
+				height: 28rpx;
+				bottom: 0rpx;
+				left: 64rpx;
+			}
+			.info_sign{
+				position: absolute;
+				display: inline-block;
+				width: 20rpx;
+				height: 20rpx;
+				border-radius: 10rpx;
+				background: #FE5C5C;
+				top: 0rpx;
+				left: 70rpx;
+				// right: -3px;
+			}
 		}
-		.fleet_right{
+
+		.fleet_right {
 			width: 80%;
-			.fleet_name{
+
+			.fleet_name {
 				width: 80%;
+				color: #333333;
+				font-weight: 600;
+				font-size: 34rpx;
+			}
+
+			// .fleet_invite {
+			// 	background-color: #5878e8;
+			// 	color: #fff;
+			// }
+			.audit{
+				color: #FE6300;
+			} 
+			.rebut{
+				color: #FB1E1E;
 			}
-			.fleet_invite{
-				background-color: #5878e8;
-				color: #fff;
+			.fleet_address{
+				color: #BABABA ;
+				font-size: 26rpx;
 			}
 		}
 	}

+ 5 - 2
pages/riders/notice.vue

@@ -15,7 +15,9 @@
 		data() {
 			return {
 				id:"",
-				fleetInfo:{}
+				fleetInfo:{
+					notice:"",
+				}
 			}
 		},
 		onShow() {
@@ -27,7 +29,7 @@
 		},
 		methods: {
 			getList(){
-				this.$request.baseRequest('get', '/fleetInfo/getFleetInfo', {
+				this.$request.baseRequest('get', '/fleetInfo/getFleetInfo', { //获取该车队的信息,用于提交发布信息
 						id: this.id
 					}).then(res => {
 						this.fleetInfo = res.data
@@ -44,6 +46,7 @@
 					})
 					return 
 				}
+				this.fleetInfo.flag = 1
 				this.$request.baseRequest('post', '/fleetInfo/api/editFleetInfo',this.fleetInfo).then(res => {
 						if (res.code == 200) {
 							this.$refs.uToast.show({

+ 62 - 0
pages/riders/noticeSee.vue

@@ -0,0 +1,62 @@
+<template>
+	<view class="center">
+		<view class="notice_top">
+			<view class="flex"><view class="fleetInfo_name">{{fleetInfo.fleetName}}</view><view class="fleetInfo_last"> 的公告</view></view>
+		<view class="notice_css">
+			{{fleetInfo.notice?fleetInfo.notice:"暂无公告"}}
+		</view>
+		</view>
+		
+	</view>
+</template>
+
+<script>
+	export default{
+		data(){
+			return{
+				fleetInfo:{}
+			}
+		},
+		onShow(){
+			
+		},
+		onLoad(options) {
+			this.fleetInfo = JSON.parse(options._obj) 
+			console.log(this.fleetInfo)
+		},
+		methods:{
+			getList(){
+				
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.center{
+		padding: 30rpx;
+		background: #F2F4F7;
+	}
+	.notice_top{
+		background: #FFFFFF;
+		padding: 30rpx;
+		border-radius: 30rpx 30rpx 0rpx 0rpx;
+	}
+	.fleetInfo_name{
+		font-size: 36rpx;
+		font-weight: 600;
+	}
+	.fleetInfo_last{
+		margin-left: 30rpx;
+		line-height: 46rpx;
+		font-size: 36rpx;
+		font-weight: 600;
+	}
+	.notice_css{
+		margin: 30rpx 0;
+		border: 1px solid #E6E6E6;
+		border-radius: 10rpx;
+		padding: 20rpx;
+		// color: #BABABA ;
+	}
+</style>

+ 123 - 14
pages/riders/report.vue

@@ -1,10 +1,25 @@
 <template>
 	<view class="center">
-		<view class="">被举报车队</view>
+		<view class="flex row form_css">
+			<view class="left-text">被举报车队</view>
+			<view class="right-text">
+			     <u-avatar :src="formData.coverUrl" size="24" class="img_css"></u-avatar>
+				 <view class="">
+				 	{{formData.fleetName}}
+				 </view>
+			</view>
+		</view>
+		<!-- <view class="">被举报车队</view> -->
 		<view class="">举报信息</view>
-		<u--textarea v-model="content" placeholder="输入要举报的内容,10-300字" maxlength="300" autoHeight count></u--textarea>
+		<view class="textarea">
+			<u--textarea v-model="reportInfo.content" placeholder="输入要举报的内容,10-300字" maxlength="300" height="100"></u--textarea>
+		</view>
 	     <u-upload class="uview-upload" :fileList="fileList1" @afterRead="afterRead($event)" @delete="deletePic"
 	     	name="1" multiple :maxCount="1" style="z-index: 9999;"></u-upload>
+			<u-toast ref="uToast"></u-toast>
+			<u-modal :show="tipsShow" :title="alertTitle" :closeOnClickOverlay='true' :showCancelButton='true'
+				confirmColor='#2772FB' @confirm="confirmClick" @close="cancelClick" @cancel="cancelClick"></u-modal>
+			<u-button type="primary" text="提交" class="btn_css" @click="submit"></u-button> 
 	</view>
 </template>
 
@@ -16,16 +31,85 @@
 				fileList1:[],
 				content:"",
 				textNumber:300,
-				formData:{}
+				formData:{},
+				fleetId:"",
+				reportInfo:{},
+				tipsShow:false,
+				alertTitle:""
 			}
 		},
-		onShow(){
-			
-		},
-		onLoad(){
-			
+		onShow(){},
+		onLoad(options){
+			this.fleetId = options.id
+			this.getList()
 		},
 		methods:{
+			submit(){
+				if (!this.reportInfo.content) {
+					this.$refs.uToast.show({
+						type: 'error',
+						message: "请输入要举报的内容!",
+					})
+					return
+				}
+				if (this.reportInfo.content.length < 10) {
+					this.$refs.uToast.show({
+						type: 'error',
+						message: "举报内容不能小于10个字!",
+					})
+					return
+				}
+				if (this.fileList1.length == 0) {
+					this.$refs.uToast.show({
+						type: 'error',
+						message: "请上传图片!",
+					})
+					return
+				}
+				this.reportInfo.id = uni.getStorageSync("firstAuthentication").commonId
+				this.reportInfo.name = uni.getStorageSync("firstAuthentication").driverName
+				this.reportInfo.flag = 3
+				this.alertTitle="确定要举报该车队"
+				this.tipsShow = true
+			},
+			cancelClick(){
+				this.tipsShow = false
+			},
+			 confirmClick(){
+				 this.tipsShow = false
+				 this.$request.baseRequest('post', '/feedbackReport/api/addInfo', this.reportInfo).then(res => {
+				 	if(res.code == 200){
+						
+				 		this.$refs.uToast.show({
+				 			type: 'success',
+				 			message: "队员删除成功!",
+				 			complete() {
+				 				uni.navigateBack({
+				 					delta: 1
+				 				});
+				 			}
+				 		})
+				 	}else{
+						this.$refs.uToast.show({
+							type: 'error',
+							message: res.message,
+						})
+					}
+				 	})
+				 	.catch(res => {
+				 		uni.$u.toast(res.message);
+				 	});
+			 },
+			getList() {
+				this.$request.baseRequest('get', '/fleetInfo/getFleetInfo', {
+						id: this.fleetId
+					}).then(res => {
+						this.formData = res.data
+					})
+					.catch(res => {
+						uni.$u.toast(res.message);
+					});
+			},
 			// 删除图片
 			deletePic(event) {
 				console.log(this[`fileList${event.name}`])
@@ -58,12 +142,7 @@
 				uploadImage('image',url, 'appData/',
 					result => {
 						// 上传成功回调函数
-						if(this.formData.coverUrl){
-							this.formData.coverUrl = this.formData.coverUrl+','+ result
-						}else{
-							this.formData.coverUrl = result
-						}
-						
+						this.reportInfo.url = result
 					}
 				)
 			},
@@ -75,4 +154,34 @@
 	.center{
 		padding: 30rpx;
 	}
+	.form_css {
+		width: 100%;
+		display: flex;
+		margin: 30rpx 0;
+		height: 80rpx;
+		border-bottom: 1px solid #eeeeee;
+	
+		.left-text {
+			width: 50%;
+			text-align: left;
+		}
+	
+		.right-text {
+			width: 50%;
+			justify-content: flex-end;
+			display: flex;
+			text-align: right;
+			color: #363636;
+			// font-size: 28rpx;
+			.img_css{
+				margin: 0 10rpx;
+			}
+		}
+	}
+	.textarea{
+		margin: 30rpx 0;
+	}
+	.btn_css{
+		margin-top: 40rpx;
+	}
 </style>

+ 236 - 0
pages/riders/setMember.vue

@@ -0,0 +1,236 @@
+<template>
+	<view class="center">
+		<u-search placeholder="搜索" v-model="searchKeyWord" :clearabled="true" :show-action="false" @change="getList">
+		</u-search>
+		<view class="avatars">
+			<view class="" v-for="(item,index) in formData" class="avatars_item flex" @click="radioClick(item)">
+				<view class="flex avatars_left">
+					<label class="radio" v-if="type == 1">
+						<radio :value="item.id" :checked="item.checked" />
+					</label>
+					<!-- <label class="radio" @click="radioClick(item)">
+						<radio :value="item.uid" :checked="item.checked" />
+					</label> -->
+					<!-- <u-checkbox-group v-model="checked" iconPlacement="right" placement="row">
+						<u-checkbox activeColor="red" ></u-checkbox>
+					</u-checkbox-group> -->
+					<!-- <u-radio-group v-model="radiovalue1" >
+						<u-radio :customStyle="{marginBottom: '8px'}" :key="index"
+							:label="item.name" :name="item.name" @change="radioChange">
+						</u-radio>
+					</u-radio-group> -->
+					<u-avatar :src="item.driverPortrait" size="38" class="img_css"></u-avatar>
+					{{item.driverNickname}}
+				</view>
+				<view class="avatars_right" v-if="type == 2">
+					<image src="../../static/images/riders/duihao.png" mode="" class="duihao_img" v-if="item.checkmark">
+					</image>
+				</view>
+			</view>
+		</view>
+		<u-toast ref="uToast"></u-toast>
+		<u-modal :show="setShow" :title="alertTitle" :closeOnClickOverlay='true' :showCancelButton='true'
+			confirmColor='#2772FB' @confirm="confirmClick" @close="cancelClick" @cancel="cancelClick"></u-modal>
+	</view>
+</template>
+
+<script>
+	import uniPopup from '../../components/uni-popup/uni-popup.vue';
+	export default {
+		data() {
+			return {
+				fleetId: "",
+				formData: [],
+				searchKeyWord: "",
+				type: "",
+				idList: [],
+				setShow: false,
+				alertTitle: ""
+			}
+		},
+		onShow() {
+
+		},
+		onLoad(options) {
+			this.type = options.type
+			if (this.type == 1) {
+				uni.setNavigationBarTitle({
+					title: "删除成员"
+				})
+			} else {
+				uni.setNavigationBarTitle({
+					title: '车队管理权转让'
+				});
+			}
+			this.fleetId = options.id
+			this.getList()
+		},
+		onNavigationBarButtonTap(e) {
+			if (this.type == 1) {
+				if (this.idList.length == 0) {
+					this.$refs.uToast.show({
+						type: 'error',
+						message: "请选择要删除的队员!",
+					})
+					return 
+				}
+				this.alertTitle = "确定删除指定的队员?"
+				this.setShow = true
+			} else {
+				if (!this.transferId) {
+					this.$refs.uToast.show({
+						type: 'error',
+						message: "请选择一名新队长!",
+					})
+					return
+				}
+				this.alertTitle = "转移后您将不再是该车队的队长,确认转移?"
+				this.setShow = true
+			}
+		},
+		methods: {
+			confirmClick() {
+				if (this.type == 1) {
+
+					this.delSunmit()
+					this.cancelClick()
+				} else {
+
+					this.submit()
+					this.cancelClick()
+				}
+			},
+			cancelClick() {
+				this.setShow = false
+			},
+			delSunmit() {
+				this.alertTitle = "确定删除指定的队员?"
+				this.setShow = true
+				this.$request.baseRequest('post', '/fleetMemberInfo/api/delete', {
+						// outFlag: 1,
+						idList: this.idList
+					}).then(res => {
+						if (res.code == 200) {
+							this.$refs.uToast.show({
+								type: 'success',
+								message: "队员删除成功!",
+								// complete() {
+								// 	uni.$u.route("pages/riders/myTeam")
+								// }
+							})
+							this.getList()
+						}
+					})
+					.catch(res => {
+						uni.$u.toast(res.message);
+					});
+			},
+			radioClick(item) {
+				if (this.type == 1) {
+					if (item.checked) {
+						// this.idList.remove(item.id)
+						for (let i = 0; i < this.idList.length; i++) {
+							if (this.idList[i] == item.id) {
+								this.idList.splice(i, 1)
+								break
+							}
+						}
+						item.checked = false;
+					} else {
+						this.idList.push(item.id)
+						item.checked = true;
+					}
+				}
+				if (this.type == 2) {
+					for (let i = 0; i < this.formData.length; i++) {
+						this.formData[i].checkmark = false
+					}
+					if (item.checkmark) {
+						item.checkmark = false;
+					} else {
+						item.checkmark = true;
+						this.transferId = item.id
+					}
+				}
+				this.$forceUpdate()
+			},
+			getList() {
+				this.$request.baseRequest('get', '/fleetMemberInfo/selectFleetMember', {
+						searchKeyWord: this.searchKeyWord,
+						fleetId: this.fleetId,
+						pageSize: 10,
+						currentPage: 1,
+					}).then(res => {
+						this.formData = res.data.records
+						for (let i = 0; i < this.formData.length; i++) {
+							this.formData[i].checkmark = false
+							this.formData[i].checked = false
+						}
+					})
+					.catch(res => {
+						uni.$u.toast(res.message);
+					});
+			},
+			submit() {
+
+				this.$request.baseRequest('post', '/fleetMemberInfo/api/transferLeader', {
+						fleetId: this.fleetId,
+						transferId: this.transferId,
+					}).then(res => {
+						if (res.code == 200) {
+							this.$refs.uToast.show({
+								type: 'success',
+								message: "队长转移成功!",
+								complete() {
+									uni.$u.route("pages/riders/myTeam")
+								}
+							})
+
+						}
+
+					})
+					.catch(res => {
+						uni.$u.toast(res.message);
+					});
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.center {
+		padding: 40rpx;
+	}
+
+	.avatars {
+		.avatars_item {
+			width: 100%;
+			height: 120rpx;
+			border-bottom: 1px solid #E6E6E6;
+			line-height: 120rpx;
+
+			.avatars_left {
+				width: 80%;
+			}
+
+			.avatars_right {
+				width: 20%;
+				display: flex;
+				justify-content: flex-end;
+
+				.duihao_img {
+					width: 28rpx;
+					height: 28rpx;
+					margin-top: 40rpx;
+					margin: 50rpx 60rpx 0 0;
+				}
+			}
+		}
+
+		.img_css {
+			margin-top: 30rpx;
+			margin: 22rpx;
+
+		}
+	}
+</style>

+ 149 - 0
pages/riders/test.vue

@@ -0,0 +1,149 @@
+
+<template>
+	<view class="intro">
+		<view class="introText">
+			<span v-if="introduce" ref="text" @click="clickTotal">
+				{{introduce}}
+			</span>
+			<span v-if='exchangeButton' @click="clickTotal">
+				{{introduceNew}}
+			</span>
+			<view class="unfold" @click="clickTotal" v-if="showExchangeButton">
+				<span>{{showTotal ? '展开' : '收起'}}</span>
+			</view>
+		</view>
+	</view>
+</template>
+ 
+<script>
+	export default {
+		data() {
+			return {
+				title: "演示展开收起",
+				introduce: "",
+				introduceNew: "",
+				introduceOld: "",
+				// 是否展示所有文本内容
+				showTotal: true,
+				// 显示展开还是收起
+				exchangeButton: false,
+				// 是否显示展开收起按钮
+				showExchangeButton: false,
+				rem: ""
+			}
+		},
+		mounted() {
+			this.init();
+		},
+		methods: {
+			clickTotal() {
+				this.showTotal = !this.showTotal;
+				if (this.showTotal && this.showExchangeButton == true) {
+					this.$refs.text.innerHTML = this.introduceNew
+				} else {
+					this.$refs.text.innerHTML = this.introduceOld
+				}
+			},
+			getRem() {
+				const defaultRem = 16;
+				let winWidth = window.innerWidth;
+				let rem = (winWidth / 375) * defaultRem;
+				return rem;
+			},
+			init() {
+				this.introduce =
+					"唐朝,可谓歌舞盛华,乐文辉煌。与此同时,女伎们的身价也推向了巅峰。青楼之市火爆,歌舞伎成了热门之业。沦落为青楼女子虽不光彩,但依然有很多人选择这一职业,在这些女子中,琴棋书画兼备的也大有人在长安城内,有一青楼,名为“玉满楼”,别名“玉月满花”,此中之女子皆是琴棋书画兼备,相传呐,那都是卖艺不卖身的存在。我们的故事就要从这玉满楼开始说起。在长安城内,有一青楼,名为“玉满楼”,别名“玉月满花”,此中之女子皆是琴棋书画兼备,相传呐,那都是卖艺不卖身的存在。我们的故事就要从这玉满楼开始说起。";
+				this.introduceOld =
+					"唐朝,可谓歌舞盛华,乐文辉煌。与此同时,女伎们的身价也推向了巅峰。青楼之市火爆,歌舞伎成了热门之业。沦落为青楼女子虽不光彩,但依然有很多人选择这一职业,在这些女子中,琴棋书画兼备的也大有人在长安城内,有一青楼,名为“玉满楼”,别名“玉月满花”,此中之女子皆是琴棋书画兼备,相传呐,那都是卖艺不卖身的存在。我们的故事就要从这玉满楼开始说起。在长安城内,有一青楼,名为“玉满楼”,别名“玉月满花”,此中之女子皆是琴棋书画兼备,相传呐,那都是卖艺不卖身的存在。我们的故事就要从这玉满楼开始说起。";
+			},
+		},
+		watch: {
+			introduce: function() {
+				this.$nextTick(
+					function() {
+						// 判断介绍是否超过四行
+						let rem = parseFloat(this.getRem());
+						if (!this.$refs.text) {
+							return;
+						}
+						let rows = this.$refs.text.getClientRects().length // 文本行数
+						let txt = this.introduceOld // 文本
+						console.log(txt)
+						// 文本为3行时的字数长度
+						let tl = 0 // eslint-disable-line no-unused-vars
+						// 数据量大时速度太慢,需优化(二分法?)
+						while (rows > 4) { // 超出,遍历文字并进行截取,直到文本小于三行   显示4行
+							let step = 1 // 末尾扣除的字数
+							if (/<br\/>$/.test(txt)) { // 回退的时候,如果碰到换行要整体替换
+								step = 5
+							}
+							txt = txt.slice(0, -step) // 截取
+							this.showExchangeButton = true
+							this.$refs.text.innerHTML = txt
+							rows = this.$refs.text.getClientRects().length
+							tl += step
+						}
+						while (rows < 4) { //、显示4行
+							txt = txt
+							this.$refs.text.innerHTML = txt
+							return
+						}
+						let num = 0;
+						if (txt.charCodeAt(txt.length - 1) < 255) {
+							num = 2
+						} else {
+							num = 1
+						}
+						if (txt.charCodeAt(txt.length - 2) < 255) {
+							num = num + 2
+						} else {
+							num = num + 1
+						}
+						if (txt.charCodeAt(txt.length - 4) < 255) {
+							num = num + 2
+						} else {
+							num = num + 1
+						}
+						this.$refs.text.innerHTML = txt.slice(0, -1 * num) + '...'
+						this.introduceNew = txt.slice(0, -1 * num) + '...'
+					}.bind(this)
+				);
+			}
+		},
+	}
+</script>
+ 
+<style>
+	.intro {
+		width: 95%;
+		border: 2px solid grey;
+		padding: 10px;
+		margin: 0 auto;
+		box-sizing: border-box;
+		overflow: hidden;
+	}
+ 
+	.intro .introText {
+		text-align: justify;
+		position: relative;
+		display: block;
+	}
+ 
+	.intro .introText span {
+		font-size: 14px;
+		color: #627081;
+	}
+ 
+	.intro .unfold {
+		position: absolute;
+		right: 0;
+		bottom: 0;
+		opacity: 1;
+	}
+ 
+	.intro .unfold span {
+		color: #2878ff;
+		cursor: pointer;
+		font-size: 30rpx;
+	}
+</style>

BIN
static/images/riders/captain.png


BIN
static/images/riders/duihao.png


BIN
static/images/riders/exchange.png


BIN
static/images/riders/fleetInvite.png


BIN
static/images/riders/geren.png


BIN
static/images/riders/inTeam.png


BIN
static/images/riders/shenhezhong.png


BIN
static/images/riders/shezhi.png


BIN
static/images/riders/weirenzheng.png


BIN
static/images/riders/weitongguo.png


BIN
static/images/riders/yaoqing.png