liujd 6 years ago
parent
commit
dae89a0131

+ 164 - 0
mobile-code/src/components/plugin/rate.vue

@@ -0,0 +1,164 @@
+<template>
+	<view class="tui-rate-class tui-rate-box" @touchmove="touchMove">
+		<block v-for="(item,index) in quantity" :key="index">
+			<view class="tui-icon tui-relative" :class="['tui-icon-collection'+(hollow && (current<=index || (disabled && current<=index+1))?'':'-fill')]"
+			 :data-index="index" @tap="handleTap" :style="{fontSize:size+'px',color:(current>index+1 || (!disabled && current>index))?active:normal}">
+				<view class="tui-icon tui-icon-main tui-icon-collection-fill" v-if="disabled && current==index+1" :style="{fontSize:size+'px',color:active,width:percent+'%'}"></view>
+			</view>
+		</block>
+	</view>
+</template>
+
+<script>
+export default {
+	name: 'tuiRate',
+	props: {
+		// 数量
+		quantity: {
+			type: Number,
+			default: 5
+		},
+		// 当前选中
+		current: {
+			type: Number,
+			default: 0
+		},
+		// 当前选中星星分数(大于0,小于等于1的数)
+		score: {
+			type: [Number, String],
+			default: 1
+		},
+		// 禁用点击
+		disabled: {
+			type: Boolean,
+			default: false
+		},
+		// 大小
+		size: {
+			type: Number,
+			default: 20
+		},
+		// 未选中颜色
+		normal: {
+			type: String,
+			default: '#b2b2b2'
+		},
+		// 选中颜色
+		active: {
+			type: String,
+			default: '#e41f19'
+		},
+		// 未选中是否为空心
+		hollow: {
+			type: Boolean,
+			default: false
+		}
+	},
+	data() {
+		return {
+			pageX: 0,
+			percent: 0
+		}
+	},
+	created() {
+		this.percent = Number(this.score || 0) * 100
+	},
+	watch: {
+		score(newVal, oldVal) {
+			this.percent = Number(newVal || 0) * 100
+		}
+	},
+	methods: {
+		handleTap(e) {
+			if (this.disabled) {
+				return
+			}
+			const index = e.currentTarget.dataset.index
+			this.$emit('change', {
+				index: Number(index) + 1
+			})
+		},
+		touchMove(e) {
+			if (this.disabled) {
+				return
+			}
+			if (!e.changedTouches[0]) {
+				return
+			}
+			const movePageX = e.changedTouches[0].pageX
+			const distance = movePageX - this.pageX
+
+			if (distance <= 0) {
+				return
+			}
+			let index = Math.ceil(distance / this.size)
+			index = index > this.count ? this.count : index
+			this.$emit('change', {
+				index: index
+			})
+		}
+	},
+	// #ifdef H5
+	mounted() {
+		const className = '.tui-rate-box'
+		let query = uni.createSelectorQuery().in(this)
+		query.select(className).boundingClientRect((res) => {
+			this.pageX = res.left || 0
+		}).exec()
+	},
+
+	// #endif
+	onReady() {
+		const className = '.tui-rate-box'
+		let query = uni.createSelectorQuery().in(this)
+		query.select(className).boundingClientRect((res) => {
+			this.pageX = res.left || 0
+		}).exec()
+	}
+}
+</script>
+
+<style>
+	@font-face {
+		font-family: 'rateFont';
+		src: url(data:application/font-woff;charset=utf-8;base64,d09GRgABAAAAAAT4AA0AAAAAB4wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABGRlRNAAAE3AAAABoAAAAciBprQUdERUYAAAS8AAAAHgAAAB4AKQALT1MvMgAAAaAAAABDAAAAVj1YSN1jbWFwAAAB+AAAAEIAAAFCAA/qlmdhc3AAAAS0AAAACAAAAAj//wADZ2x5ZgAAAkgAAADwAAABZLMTdXtoZWFkAAABMAAAADAAAAA2FZKISmhoZWEAAAFgAAAAHQAAACQHYgOFaG10eAAAAeQAAAARAAAAEgx6AHpsb2NhAAACPAAAAAwAAAAMAEYAsm1heHAAAAGAAAAAHgAAACABEQBPbmFtZQAAAzgAAAFJAAACiCnmEVVwb3N0AAAEhAAAAC0AAABHLO3vkXjaY2BkYGAA4t2/VF7G89t8ZeBmYQCBm9ZKMnC6ikGMuYXpP5DLwcAEEgUAHPQJOXjaY2BkYGBu+N/AEMPCAALMLQyMDKiABQBQwgLwAAAAeNpjYGRgYGBlcGZgYgABEMkFhAwM/8F8BgAPigFhAAB42mNgZGFgnMDAysDA1Ml0hoGBoR9CM75mMGLkAIoysDIzYAUBaa4pDA7PXj17zdzwv4EhhrmBoQEozAiSAwD/YA2wAHjaY2GAABYIrmKoAgACggEBAAAAeNpjYGBgZoBgGQZGBhCwAfIYwXwWBgUgzQKEQP6z1///A8lX//9LSkJVMjCyMcCYDIxMQIKJARUwMgx7AAA/9QiLAAAAAAAAAAAAAABGALJ42mNgZKhiEGNuYfrPoMnAwGimps+ox6jPqKbEz8jHCMLyjHJAmk1czMie0cxInlHMDChrZs6cJyaosI+NlzmU34I/lImPdb+CoHgXCyujIosYtzTfKlYBtlWyuqwKjKwsjNvFTdlkGDnZ1srKrmXjZJRhMxVvZxFgA+rgYI9iYoriV1TYzybAwsDABHeLBIMT0DUg29VBTjEHucvcjtGeUVyOUZ6JaFcybefnZ5HuFdEX6ZVm5uMvniemxuXmzqUmNs+FeOfHCeiKzfPi4vKaJ6YrUCDOIiM8YYKwDIu4OMRbrOtkZdex4vMWACzGM5B42n2QPU4DMRCFn/MHJBJCIKhdUQDa/JQpEyn0CKWjSDbekGjXXnmdSDkBLRUHoOUYHIAbINFyCl6WSZMia+3o85uZ57EBnOMbCv/fJe6EFY7xKFzBETLhKvUX4Rr5XbiOFj6FG9R/hJu4VQPhFi7UGx1U7YS7m9JtywpnGAhXcIon4Sr1lXCN/CpcxxU+hBvUv4SbGONXuIVrZakM4WEwQWCcQWOKDeMCMRwskjIG1qE59GYSzExPN3oRO5s4GyjvV2KXAx5oOeeAKe09t2a+Sif+YMuB1JhuHgVLtimNLiJ0KBtfLJzV3ahzsP2e7ba02L9rgTXH7FENbNT8Pdsz0khsDK+QkjXyMrekElOPaGus8btnKdbzXgiJTrzL9IjHmjR1OvduaeLA4ufyjBx9tLmSPfeoHD5jWQh5v91OxCCKXYY/k9hxGQAAAHjaY2BigAAuMMnIgA5YwaJMjEyMzPzJ+Tk5qcklmfl58WmZOTlcCD4Ak9QKlAAAAAAAAAH//wACAAEAAAAMAAAAFgAAAAIAAQADAAQAAQAEAAAAAgAAAAB42mNgYGBkAIKrS9Q5QPRNayUZGA0AM8UETgAA) format('woff');
+		font-weight: normal;
+		font-style: normal;
+	}
+
+	.tui-icon {
+		font-family: "rateFont" !important;
+		font-style: normal;
+		-webkit-font-smoothing: antialiased;
+		-moz-osx-font-smoothing: grayscale;
+		display: block;
+	}
+
+	.tui-relative {
+		position: relative;
+	}
+
+	.tui-icon-main {
+		position: absolute;
+		height: 100%;
+		left: 0;
+		top: 0;
+		overflow: hidden;
+	}
+
+	.tui-icon-collection-fill:before {
+		content: "\e6ea";
+	}
+
+	.tui-icon-collection:before {
+		content: "\e6eb";
+	}
+
+	.tui-rate-box {
+		display: -webkit-inline-flex;
+		display: inline-flex;
+		align-items: center;
+		margin: 0;
+		padding: 0;
+	}
+</style>

+ 51 - 6
mobile-code/src/pages/admin/order.vue

@@ -26,12 +26,18 @@
 						</div>
 						<div class="list-button">
 							<!-- 待配送 -->
-							<div v-if="item.status == 2" class="admin-button-com">免发货</div>
-							<div v-if="item.status == 2" class="admin-button-com">发货</div>
+							<div v-if="item.status == 2" class="admin-button-com" @click="freeShippingFn(item)">免发货</div>
+							<div v-if="item.status == 2" class="admin-button-com" @click="$util.pageTo({
+						url: 'pages/order/admin/ship',
+						query: {
+							id: item.id,
+							pageStatus: 0
+						}
+					})">发货</div>
 							<!-- 配送中 -->
 							<div v-if="item.status == 2" class="admin-button-com">继续</div>
 							<!-- 已完成 -->
-							<div v-if="item.status == 5" class="admin-button-com default">查看快递</div>
+							<div v-if="item.status == 5" class="admin-button-com default" @click="seeSendFn(item)">查看快递</div>
 						</div>
 					</div>
 				</div>
@@ -40,6 +46,8 @@
 				<app-wrapper-empty title="暂无数据" :is-empty="$util.isEmpty(list.data)" />
 			</block>
 		</div>
+		<!-- 免发货弹窗 -->
+		<modal-module :show="freeShipModal" @cancel="modalCancel" @click="freeShipModalClick" content="确认不需要发货?" color="#333" :size="32" padding="30rpx 30rpx"></modal-module>
 	</div>
 </template>
 
@@ -47,15 +55,17 @@
 import AppTabs from '@/components/plugin/tabs'
 import ListModule from '@/components/module/app-order-list'
 import AppWrapperEmpty from '@/components/app-wrapper-empty'
+import ModalModule from '@/components/plugin/modal'
 import { list } from '@/mixins'
 // api
-import { getListB } from '@/api/order'
+import { getListB, freeShipping } from '@/api/order'
 export default {
 	name: 'order-list',
 	components: {
 		ListModule,
 		AppTabs,
-		AppWrapperEmpty
+		AppWrapperEmpty,
+		ModalModule
 	},
 	mixins: [list],
 	data() {
@@ -82,7 +92,12 @@ export default {
 					name: '已完结',
 					value: 0
 				}
-			]
+			],
+			// operate
+			operateIndex: null,
+			operateData: {},
+			// 免发货
+			freeShipModal: false
 		}
 	},
 	onPullDownRefresh() {
@@ -124,6 +139,36 @@ export default {
 				this.resetList()
 				this._list()
 			}
+		},
+		// 免发货
+		freeShippingFn(item, index) {
+			this.operateIndex = index
+			this.operateData = item
+			this.freeShipModal = true
+		},
+		// 免发货
+		freeShipModalClick(e) {
+			if (e.index === 0) {
+				this.modalCancel()
+			} else {
+				this.list.data[this.operateIndex].status = 2
+			}
+		},
+		// 查看配送
+		seeSendFn(item) {
+			this.$util.pageTo({
+				url: 'pages/order/admin/ship',
+				query: {
+					id: item.id,
+					pageStatus: 5
+				}
+			})
+		},
+		// 关闭弹窗
+		modalCancel() {
+			this.form.price = ''
+			this.updatePriceModal = false
+			this.freeShippingModal = false
 		}
 	}
 }

+ 30 - 16
mobile-code/src/pages/order/admin/detail.vue

@@ -56,7 +56,7 @@
 						</div>
 						<div class="msg-list">
 							<div class="label">祝福语</div>
-							<div class="value">{{ data.cardInfo }}</div>
+							<div class="value">{{ data.cardInfo || '暂无' }}</div>
 						</div>
 					</div>
 					<!--  -->
@@ -78,11 +78,14 @@
 					<div class="order-msg-blo">
 						<div class="msg-list">
 							<div class="label">客户评分</div>
-							<div class="value">{{ data.totalFlow }}</div>
+							<div class="value">
+								<!-- <span>{{ data.totalFlow }}</span> -->
+								<rate-module :current="Number(data.totalFlow) || 0" :disabled="true"></rate-module>
+							</div>
 						</div>
 						<div class="msg-list">
 							<div class="label">客户留言</div>
-							<div class="value">{{ data.evaluate || '无' }}</div>
+							<div class="value">{{ data.evaluate || '无' }}</div>
 						</div>
 					</div>
 					<!--  -->
@@ -126,16 +129,21 @@
 			<template v-if="data.status == 0">
 				<button class="admin-button-com middle" @click="updatePriceFn">修改价格</button>
 			</template>
-			<template v-else-if="data.status == 1">
+			<template v-else-if="data.status == 1 || data.status == 2">
 				<div class="operate-btn-wrap">
-					<button class="admin-button-com middle" @click="freeShippingFn">免发货</button>
-					<button class="admin-button-com middle" @click="$util.pageTo({
+					<block v-if="data.status == 2">
+						<button class="admin-button-com middle" @click="seeSendFn">查看配送</button>
+					</block>
+					<block v-else>
+						<button class="admin-button-com middle" @click="freeShippingFn">免发货</button>
+						<button class="admin-button-com middle" @click="$util.pageTo({
 						url: 'pages/order/admin/ship',
 						query: {
 							id: data.id,
 							pageStatus: 0
 						}
 					})">发货</button>
+					</block>
 				</div>
 			</template>
 			<!-- <template v-if="data.status == 5">
@@ -149,7 +157,7 @@
 					<div class="inp-list-line required">
 						<!-- <div class="line-label">角色名称</div> -->
 						<div class="line-input">
-							<input v-model="form.price" type="text" :adjust-position="false" class="inp-input" placeholder="请输入价格">
+							<input v-model="form.price" type="text" :adjust-position="false" class="inp-input" placeholder="请输入价格" />
 						</div>
 					</div>
 				</div>
@@ -164,6 +172,7 @@
 import ListModule from '@/components/module/app-order-list'
 import AppCoupon from '@/components/app-coupon-sel'
 import ModalModule from '@/components/plugin/modal'
+import RateModule from '@/components/plugin/rate'
 // api
 import { getDetB, freeShipping, orderUpdatePrice } from '@/api/order'
 // image
@@ -174,7 +183,8 @@ export default {
 	components: {
 		ListModule,
 		AppCoupon,
-		ModalModule
+		ModalModule,
+		RateModule
 	},
 	data() {
 		return {
@@ -208,19 +218,23 @@ export default {
 			this.freeShipModal = true
 		},
 		// 免发货
-		freeShipModal(e) {
+		freeShipModalClick(e) {
 			if (e.index === 0) {
 				this.modalCancel()
 			} else {
-				this.$util.pageTo({
-					url: 'pages/order/admin/ship',
-					query: {
-						id: this.data.id,
-						pageStatus: 5
-					}
-				})
+				this.data.status = 2
 			}
 		},
+		// 查看配送
+		seeSendFn() {
+			this.$util.pageTo({
+				url: 'pages/order/admin/ship',
+				query: {
+					id: this.data.id,
+					pageStatus: 5
+				}
+			})
+		},
 		// 修改价格
 		updatePriceFn() {
 			this.form.price = this.data.prePrice