From c93eff979aba7e4e071b3363f9146d5b4d49996e Mon Sep 17 00:00:00 2001
From: li-guang <153605324@qq.com>
Date: Mon, 21 Dec 2020 14:47:43 +0800
Subject: [PATCH] 服务单

---
 hive-app/pages/workbench/orderList.vue                          |   25 -
 hive-app/pages/workbench/confirmService.vue                     |  124 +++++++
 /dev/null                                                       |  136 --------
 hive-app/common/styles/index.css                                |    5 
 hive-app/pages.json                                             |   13 
 hive-app/components/bory-dateTimePicker/bory-dateTimePicker.vue |  407 +++++++++++++++++++++++++
 hive-app/pages/workbench/selectService.vue                      |  161 ++++++++++
 hive-app/pages/workbench/selectProduct/index.vue                |    1 
 hive-app/components/bory-dateTimePicker/uitls/util.js           |   40 ++
 9 files changed, 747 insertions(+), 165 deletions(-)

diff --git a/hive-app/common/styles/index.css b/hive-app/common/styles/index.css
index b98e911..44f6e45 100644
--- a/hive-app/common/styles/index.css
+++ b/hive-app/common/styles/index.css
@@ -196,20 +196,23 @@
 }
 /* 蓝色圆形加减按钮 */
 .blue-btn-circle{
+	display: inline-block;
 	height: 24px;
 	width: 24px;
 	line-height: 24px;
+	text-align: center;
 	box-sizing: border-box;
 	font-size: 14px!important;
 	border-radius: 50%!important;
 	background: #518EFF;
-	border-radius: 4px;
 	color: #FFFFFF;
 }
 .blue-outline-btn-circle{
+	display: inline-block;
 	height: 24px;
 	width: 24px;
 	line-height: 22px;
+	text-align: center;
 	box-sizing: border-box;
 	font-size: 12px!important;
 	border-radius: 50%;
diff --git a/hive-app/components/bory-dateTimePicker/bory-dateTimePicker.vue b/hive-app/components/bory-dateTimePicker/bory-dateTimePicker.vue
new file mode 100644
index 0000000..d315f6d
--- /dev/null
+++ b/hive-app/components/bory-dateTimePicker/bory-dateTimePicker.vue
@@ -0,0 +1,407 @@
+<template>
+	<view class="date-time-picker" v-if="visible">
+		<view class="date-time-mask" @click.stop="hide"></view>
+		<view class="date-time-container" @click.stop="handleEvent">
+			<view class="time-picker-tool" v-if='isShowToolBar'>
+				<view :class="[cancelButtonClass]" @click.stop="cancel">
+					<text>{{cancelButtonText}}</text>
+				</view>
+				<view :class="[toolBarTitleClass]">
+					<text>{{toolBarTitle}}</text>
+				</view>
+				<view :class="[confirmButtonClass]" @click.stop="confirm">
+					<text>{{confirmButtonText}}</text>
+				</view>
+			</view>
+			<picker-view class="picker-view" :indicator-style="indicatorStyleString" :value="dateTime" @change="dateTimePickerChange">
+				<picker-view-column data-id='year' v-if='isShowYear'>
+					<view class="item" v-for="(item,index) in years" :key="index">{{item}}年</view>
+				</picker-view-column>
+				<picker-view-column data-id='month' v-if='isShowMonth'>
+					<view class="item" v-for="(item,index) in months" :key="index">{{item}}月</view>
+				</picker-view-column>
+				<picker-view-column data-id='day' v-if='isShowDay'>
+					<view class="item" v-for="(item,index) in days" :key="index">{{item}}日</view>
+				</picker-view-column>
+				<picker-view-column data-id='hour' v-if='isShowHour'>
+					<view class="item" v-for="(item,index) in hours" :key="index">{{item}}时</view>
+				</picker-view-column>
+				<picker-view-column data-id='minute' v-if='isShowMinute'>
+					<view class="item" v-for="(item,index) in minutes" :key="index">{{item}}分</view>
+				</picker-view-column>
+				<picker-view-column data-id='second' v-if='isShowSecond'>
+					<view class="item" v-for="(item,index) in seconds" :key="index">{{item}}秒</view>
+				</picker-view-column>
+			</picker-view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import {
+		getOneMonthDays,
+		getTimeArray,
+		addZero,
+		getIndexOfArray
+	} from './uitls/util.js'
+	export default {
+		name: 'DateTimePicker',
+		props: {
+			startYear: {
+				type: Number,
+				default: 1900
+			},
+			endYear: {
+				type: Number,
+				default: new Date().getFullYear()
+			},
+			isShowToolBar: {
+				type: Boolean,
+				default: true
+			},
+			cancelButtonText: {
+				type: String,
+				default: '取消'
+			},
+			cancelButtonClass: {
+				type: String,
+				default: 'cancel-btn'
+			},
+			toolBarTitle: {
+				type: String,
+				default: '请选择'
+			},
+			toolBarTitleClass: {
+				type: String,
+				default: 'tool-title'
+			},
+			confirmButtonText: {
+				type: String,
+				default: '确定'
+			},
+			confirmButtonClass: {
+				type: String,
+				default: 'confirm-btn'
+			},
+			datestring: {
+				type: String,
+				default: ''
+			},
+			type: {
+				/**
+				 * date 年月日
+				 * year-month 年月
+				 * year 年
+				 * datetime 年月日 时分
+				 * datetime-all 年月日 时分秒
+				 * time 时分秒
+				 * hour-minute 时分
+				 */
+				type: String,
+				default: 'date'
+			},
+			indicatorStyle: {
+				type: Object,
+				default: null
+			}
+		},
+		data() {
+			return {
+				visible: false,
+				dateTime: [],
+				days: [],
+				indicatorStyleString: ''
+			}
+		},
+		watch: {
+			indicatorStyle(val){
+				this.getIndicatorStyle();
+			},
+			type() {
+				this.initDateTime()
+			},
+			datestring(){
+				this.initDateTime()
+			}
+		},
+		computed: {
+			years() {
+				return this.initTimeData(this.endYear, this.startYear);
+			},
+			isShowYear() {
+				return this.type !== 'time' && this.type !== 'hour-minute';
+			},
+			months() {
+				return this.initTimeData(12, 1);
+			},
+			isShowMonth() {
+				return this.type !== 'year' && this.type !== 'time' && this.type !== 'hour-minute';
+			},
+			isShowDay() {
+				return this.type === 'date' || this.type === 'datetime' || this.type === 'datetime-all';
+			},
+			hours() {
+				return this.initTimeData(23, 0);
+			},
+			isShowHour() {
+				return this.type !== 'date' && this.type !== 'year-month' && this.type !== 'year';
+			},
+			minutes() {
+				return this.initTimeData(59, 0);
+			},
+			isShowMinute() {
+				return this.type !== 'date' && this.type !== 'year-month' && this.type !== 'year';
+			},
+			seconds() {
+				return this.initTimeData(59, 0);
+			},
+			isShowSecond() {
+				return this.type === 'datetime-all' || this.type === 'time';
+			}
+		},
+		methods: {
+			getIndicatorStyle(){
+				if(this.indicatorStyle){
+					for(let key in this.indicatorStyle){
+						this.indicatorStyleString += `${key}:${this.indicatorStyle[key]};`
+					}
+				}
+			},
+			handleEvent() {
+				return;
+			},
+			cancel() {
+				this.hide();
+			},
+			confirm() {
+				this.formatDate();
+				this.hide();
+			},
+			show() {
+				this.visible = true;
+			},
+			hide() {
+				this.visible = false;
+			},
+			initDateTime() {
+				let value;
+				if (this.datestring.length > 0) {
+					if (this.type === 'year') {
+						value = new Date(this.datestring, 0);
+					} else if (this.type === 'time' || this.type === 'hour-minute') {
+						let date = new Date();
+						let ary = this.datestring.split(':');
+						ary.forEach((item, index) => {
+							if (index == 0) {
+								date.setHours(item)
+							} else if (index == 1) {
+								date.setMinutes(item)
+							} else if (index == 2) {
+								date.setSeconds(item)
+							}
+						})
+						value = date;
+					} else {
+						value = new Date(this.datestring.replace(/-/g, '/'));
+					}
+
+				} else {
+					value = new Date();
+				}
+				let len, timeArray, index;
+				let array = getTimeArray(value);
+				let [year, month, day, hour, minute, second] = array;
+				this.days = this.initTimeData(getOneMonthDays(year, month-1), 1);
+				let names = ['year', 'month', 'day', 'hour', 'minute', 'second'];
+				switch (this.type) {
+					case "date":
+						len = 3;
+						break;
+					case "year-month":
+						len = 2;
+						break;
+					case "year":
+						len = 1;
+						break;
+					case "datetime":
+						len = 5;
+						break;
+					case "datetime-all":
+						len = 6;
+						break;
+					case "time":
+						len = 3;
+						break;
+					case "hour-minute":
+						len = 2;
+						break;
+				}
+				timeArray = new Array(len).fill(0);
+				if (this.type === 'time' || this.type === 'hour-minute') {
+					names = names.slice(3);
+					array = array.slice(3);
+				}
+				timeArray = timeArray.map((item, index) => {
+					const name = names[index];
+					return getIndexOfArray(array[index], this[name + 's'])
+				})
+				this.dateTime = timeArray;
+			},
+			initTimeData(end, start) {
+				let timeArray = [];
+				while (start <= end) {
+					timeArray.push(start);
+					start++;
+				}
+				return timeArray;
+			},
+			formatDate() {
+				let names = ['year', 'month', 'day', 'hour', 'minute', 'second'];
+				let dateString, formatDateArray = [];
+				if (this.type === 'date' || this.type === 'year-month' || this.type === 'year') {
+					formatDateArray = this.dateTime.map((item, index) => {
+						return this[names[index] + 's'][item] < 10 ? addZero(this[names[index] + 's'][item]) : this[names[index] + 's'][item];
+					})
+					dateString = formatDateArray.join('-');
+				} else if (this.type === 'time' || this.type === 'hour-minute') {
+					names = names.splice(3);
+					formatDateArray = this.dateTime.map((item, index) => {
+						return this[names[index] + 's'][item] < 10 ? addZero(this[names[index] + 's'][item]) : this[names[index] + 's'][item];
+					})
+					dateString = formatDateArray.join(':');
+				} else {
+					let name1 = names.splice(0, 3);
+					formatDateArray = this.dateTime.map((item, index) => {
+						if (index > 2) {
+							return this[names[index - 3] + 's'][item] < 10 ? addZero(this[names[index - 3] + 's'][item]) : this[names[index - 3] + 's'][item];
+						} else {
+							return this[name1[index] + 's'][item] < 10 ? addZero(this[name1[index] + 's'][item]) : this[name1[index] + 's'][item];
+						}
+					})
+					dateString = formatDateArray.splice(0, 3).join('-') + ' ' + formatDateArray.join(':');
+				}
+				this.$emit('change', dateString)
+			},
+			dateTimePickerChange(e) {
+				let columns = e.target.value;
+				if (this.type === 'date' || this.type === 'datetime' || this.type === 'datetime-all') {
+					this.dateTime.splice(0, 1, columns[0]);
+					if (columns[0] != this.dateTime[0]) {
+						this.days = this.initTimeData(getOneMonthDays(this.years[this.dateTime[0]], this.months[this.dateTime[1]]), 1);
+						if (this.dateTime[1] == 1) {
+							if (this.dateTime[2] === this.days.length - 1) {
+								if (getOneMonthDays(this.years[columns[0]], this.dateTime[1]) < getOneMonthDays(this.years[this.dateTime[0]],this.dateTime[1])) {
+									this.dateTime.splice(2, 1, this.days.length - 1)
+								}
+							}
+						}
+					} else {
+						this.dateTime.splice(1, 1, columns[1]);
+						this.days = this.initTimeData(getOneMonthDays(this.years[this.dateTime[0]], this.dateTime[1]), 1);
+						if (columns[1] != this.dateTime[1]) {
+							if (this.dateTime[1] == 1) {
+								if (this.dateTime[2] === this.days.length - 1) {
+									if (getOneMonthDays(this.years[columns[0]], this.dateTime[1]) < getOneMonthDays(this.years[this.dateTime[0]],
+											this.dateTime[1])) {
+										this.dateTime.splice(2, 1, this.days.length - 1)
+									}
+								}
+							} else {
+								if (this.dateTime[2] > this.days.length - 1) {
+									this.dateTime.splice(2, 1, this.days.length - 1)
+								} else {
+									this.dateTime.splice(2, 1, columns[2])
+								}
+							}
+						} else {
+							this.dateTime.splice(2, 1, columns[2])
+						}
+					}
+					if (columns.length > 2) {
+						columns.splice(3).forEach((column, index) => {
+							this.dateTime.splice(index + 3, 1, column);
+						})
+					}
+				} else {
+					columns.forEach((column, index) => {
+						this.dateTime.splice(index, 1, column);
+					})
+				}
+				if (!this.isShowToolBar) {
+					this.formatDate();
+				}
+			},
+		},
+		mounted() {
+			this.getIndicatorStyle();
+			this.initDateTime();
+		}
+	}
+</script>
+
+<style lang='scss' scoped>
+	.date-time-picker {
+		.date-time-mask {
+			position: fixed;
+			top: 0;
+			bottom: 0;
+			left: 0;
+			right: 0;
+			background-color: rgba($color: #000000, $alpha: .5);
+			z-index: 998;
+		}
+
+		.date-time-container {
+			position: fixed;
+			height: 50%;
+			bottom: 0;
+			right: 0;
+			left: 0;
+			background-color: #f6f6f6;
+			z-index: 1000;
+			display: flex;
+			flex-direction: column;
+
+			.time-picker-tool {
+				height: 80rpx;
+				display: flex;
+				align-items: center;
+				justify-content: space-between;
+				font-size: 28rpx;
+
+				.cancel-btn {
+					padding: 0 28rpx;
+					box-sizing: border-box;
+					color: #969799;
+				}
+
+				.tool-title {
+					font-weight: 500;
+					font-size: 16px;
+					max-width: 50%;
+					overflow: hidden;
+					white-space: nowrap;
+					text-overflow: ellipsis;
+				}
+
+				.confirm-btn {
+					padding: 0 28rpx;
+					box-sizing: border-box;
+					color: #576b95;
+				}
+			}
+
+			.picker-view {
+				width: 100%;
+				flex: 1;
+
+				.item {
+					font-size: 34rpx;
+					display: flex;
+					align-items: center;
+					justify-content: center;
+				}
+			}
+		}
+	}
+</style>
diff --git a/hive-app/components/bory-dateTimePicker/uitls/util.js b/hive-app/components/bory-dateTimePicker/uitls/util.js
new file mode 100644
index 0000000..e0fd503
--- /dev/null
+++ b/hive-app/components/bory-dateTimePicker/uitls/util.js
@@ -0,0 +1,40 @@
+/**
+ * 获取某年某月有多少天
+ */
+export const getOneMonthDays = (year,month)=>{
+	month = Number(month);
+	const baseMonthsDays = [31,28,31,30,31,30,31,31,30,31,30,31];
+	if(year % 4 == 0 && (year % 100 != 0 || year % 400 == 0)){
+		if(month === 1){
+			baseMonthsDays[month] = 29;
+		}
+	}
+	return baseMonthsDays[month];
+}
+
+/**
+ * 获取日期的年月日时分秒
+ */
+export const getTimeArray = (date)=>{
+	const year = date.getFullYear();
+	const month = date.getMonth()+1;
+	const day = date.getDate();
+	const hour = date.getHours();
+	const minute = date.getMinutes();
+	const second = date.getSeconds();
+	return [year,month,day,hour,minute,second];
+}
+/**
+ * 小于10的数字前面补0
+ */
+export const addZero = (num)=>{
+	return num < 10 ? '0' + num : num;
+}
+
+/**
+ * 获取当前值在数组中的索引
+ */
+export const getIndexOfArray = (value,array)=>{
+	let index = array.findIndex(item => item == value);
+	return index > -1 ? index : 0;
+}
\ No newline at end of file
diff --git a/hive-app/pages.json b/hive-app/pages.json
index 64e648c..d7124a0 100644
--- a/hive-app/pages.json
+++ b/hive-app/pages.json
@@ -211,7 +211,7 @@
 			}
 		},
 		{
-			"path": "./pages/workbench/orderDetail",
+			"path": "pages/workbench/orderDetail",
 			"style": {
 				"navigationBarTitleText": "订单详情",
 				"navigationBarBackgroundColor":"#FFFFFF",
@@ -220,6 +220,17 @@
 					"scrollIndicator": "none"
 				}
 			}
+		},
+		{
+			"path": "pages/workbench/confirmService",
+			"style": {
+				"navigationBarTitleText": "确认订单",
+				"navigationBarBackgroundColor":"#FFFFFF",
+				"navigationBarTextStyle":"black",
+				"app-plus":{ 
+					"scrollIndicator": "none"
+				}
+			}
 		}
 	],
 	"globalStyle": {
diff --git a/hive-app/pages/workbench/confirmService.vue b/hive-app/pages/workbench/confirmService.vue
new file mode 100644
index 0000000..e71b4ca
--- /dev/null
+++ b/hive-app/pages/workbench/confirmService.vue
@@ -0,0 +1,124 @@
+<template>
+	<!-- 确认服务单 -->
+	<view>
+		<view class="header flex align-center mt-10">
+			<image class="header-img" src="../../static/images/head-img.jpg"></image>
+			<view class="ml-10">
+				<view class="font-16">
+					<text>李某</text>
+					<text class="ml-20">15588881111</text>
+				</view>
+				<text class="font-14 gray mt-5">普通会员</text>
+			</view>
+		</view>
+		<view class="font-16 content">
+			<view class="content-row flex align-center justify-between">
+				<text>预约时间</text>
+				<text class="gray" @click="selectDatePicker()">{{time}}</text>
+			</view>
+			<date-time-picker ref='date-time' type='datetime' @change='dateTimeChange'></date-time-picker>
+			<view class="content-row flex align-center justify-between">
+				<text>预约技师</text>
+				<view class="blue">
+					<picker mode="selector" :range="technicianList" @change="technicianChange">
+						<view>
+							<text class="mr-5">{{technician}}</text>
+							<text class="iconfont iconjiantouarrow486"></text>
+						</view>
+					</picker>
+				</view>
+			</view>
+		</view>
+		<view class="content">
+			<view class="content-row flex align-center" v-for="item in 3">
+				<image class="product-img" src="../../static/images/product.jpg" mode="aspectFill"></image>
+				<view class="flex justify-between align-center flex-1 ml-10">
+					<view class="flex flex-v">
+						<text class="font-12">面部护理</text>
+						<text class="font-10 gray mt-5">时长: 30分钟</text>
+						<text class="font-10 gray mt-5">有效期至: 2021-12-20</text>
+					</view>
+					<view>
+						<text class="font-16">×1</text>
+					</view>
+				</view>
+			</view>
+			<view class="content-row right">
+				<text class="font-16 blue">共3项服务</text>
+			</view>
+		</view>
+		<view class="content input-row flex">
+			<text class="mr-10">备注</text>
+			<input type="text" value="" placeholder="客户需求" placeholder-class='placeholder'/>
+		</view>
+		<button class="sticky-footer blue-btn">确认提交</button>
+	</view>
+</template>
+
+<script>
+	import DateTimePicker from '../../components/bory-dateTimePicker/bory-dateTimePicker.vue'
+	export default{
+		components:{
+			DateTimePicker
+		},
+		data(){
+			return{
+				time:'2020-12-12 19:06',
+				technicianList:['赵姐','钱姐','孙姐'],
+				technician:'赵姐'
+			}
+		},
+		methods:{
+			selectDatePicker () {
+				this.$refs['date-time'].show();
+			},
+			dateTimeChange(value) {
+				this.time=value
+			},
+			technicianChange(e){
+				this.technician = this.technicianList[e.detail.value];
+			},
+		}
+	}
+</script>
+
+<style>
+	page{
+		background: #F6F6F8;
+	}
+	.header{
+		background: #FFFFFF;
+		border: 1px solid #EDEAF4;
+		border-radius: 4px;
+		box-shadow:0 6px 6px rgba(237,234,244,0.5);
+		padding: 10px;
+	}
+	.header-img{
+		width: 48px;
+		height: 48px;
+		border-radius: 50%;
+	}
+	.content{
+		margin: 10px;
+		padding: 0 10px;
+		background: #FFFFFF;
+		border: 1px solid #EDEAF4;
+		border-radius: 4px;
+		box-shadow:0 6px 6px rgba(237,234,244,0.5);	
+	}
+	.content-row{
+		border-bottom: 1px solid #EDEAF4;
+		padding: 10px 5px;
+	}
+	.content-row:nth-last-child(1){
+		border: 0;
+	}
+	.product-img{
+		width: 53px;
+		height: 53px;
+		border-radius: 4px;
+	}
+	.input-row{
+		padding: 10px;
+	}
+</style>
diff --git a/hive-app/pages/workbench/orderList.vue b/hive-app/pages/workbench/orderList.vue
index 3a0e318..96857fe 100644
--- a/hive-app/pages/workbench/orderList.vue
+++ b/hive-app/pages/workbench/orderList.vue
@@ -44,31 +44,6 @@
 					</view>
 				</view>
 			</view>
-			<view class="order">
-				<view class="flex justify-between order-number">
-					<text class="font-14">订单号: N202012123556</text>
-					<text class="font-14 blue">已完成</text>
-				</view>
-				<view class="flex justify-between order-content">
-					<view class="flex flex-v">
-						<text class="font-12">李某某</text>
-						<text class="font-12 gray mt-10">2020-12-15 18:11:01</text>
-					</view>
-					<view class="flex flex-v">
-						<text class="font-12">应付金额</text>
-						<text class="font-12 mt-10">实付金额</text>
-					</view>
-					<view class="flex flex-v">
-						<text class="font-12">¥ 8000.00</text>
-						<text class="font-12 mt-10">¥ 8000.00</text>
-					</view>
-				</view>
-				<view class="flex justify-end">
-					<navigator url="./orderDetail">
-						<button class="blue-btn small-btn">查看详情</button>
-					</navigator>
-				</view>
-			</view>
 		</view>
 	</view>
 </template>
diff --git a/hive-app/pages/workbench/selectProduct.vue b/hive-app/pages/workbench/selectProduct.vue
deleted file mode 100644
index b7b3fc3..0000000
--- a/hive-app/pages/workbench/selectProduct.vue
+++ /dev/null
@@ -1,136 +0,0 @@
-<template>
-	<!-- 当前客户 -->
-	<view class="container">
-		<search-bar placeholder="商品名称、编号、拼音" class="ml-10 mr-10"></search-bar>
-		<view class="list flex">
-			<scroll-view class="list-left" scroll-y>
-				<view v-for="(item,index) in list" class="list-left-row" @click="active(index)" :class="select==index?'active':''">
-					<text class="font-14">{{item}}</text>
-				</view>
-			</scroll-view>
-			<scroll-view class="list-right" scroll-y>
-				<view class="flex flex-v list-right-row">
-					<text class="flex justify-start font-14">肽妍氨基酸平衡基础洁面乳</text>
-					<text class="flex justify-start font-14 red mt-10">¥400.00</text>
-					<view class="flex align-center justify-end mt-10">
-						<text class="iconfont iconjian blue-outline-btn-circle mr-10"></text>
-						<text>1</text>
-						<text class="iconfont iconjia blue-btn-circle ml-10"></text>
-					</view>
-				</view>
-				<view class="flex flex-v list-right-row">
-					<text class="flex justify-start font-14">肽妍氨基酸平衡基础洁面乳</text>
-					<text class="flex justify-start font-14 red mt-10">¥400.00</text>
-					<view class="flex align-center justify-end mt-10">
-						<text class="iconfont iconjian blue-outline-btn-circle mr-10"></text>
-						<text>1</text>
-						<text class="iconfont iconjia blue-btn-circle ml-10"></text>
-					</view>
-				</view>
-			</scroll-view>
-		</view>
-		<view class="shopping flex align-center justify-between">
-			<view class="flex align-center">
-				<view class="shopping-icon iconfont iconicongouwuche gray">
-					<view class="shopping-icon-num flex align-center justify-center">
-						<text class="font-10">19</text>
-					</view>
-				</view>
-				<text class="font-14 blue ml-10">¥110.00</text>
-			</view>
-			<button class="blue-btn btn mr-0" @click="linkTo('./confirmOrder')">提交订单</button>
-		</view>
-	</view>
-</template>
-
-<script>
-	import searchBar from '../../components/searchBar/index.vue';
-	export default {
-		components:{
-			searchBar
-		},
-		data(){
-			return{
-				list:['院装产品','美容套餐','美容客装','美容试装','头皮院装'],
-				select:'0'
-			}
-		},
-		methods:{
-			linkTo(val){
-				uni.navigateTo({
-					url:val
-				})
-			},
-			active(index){
-				this.select=index
-			}
-		}
-	}
-</script>
-
-<style>
-	page{
-		height: 100%;
-	}
-	.container{
-		display: flex;
-		flex-direction: column;
-		height: 100%;
-		padding: 10px 0 0;
-		box-sizing: border-box;
-	}
-	.list{
-		flex: 1;
-	}
-	.list-left{
-		width: 25%;
-		height: 100%;
-		text-align: center;
-		background: #F6F6F8;
-		border-radius: 4px;
-	}
-	.list-right{
-		width: 75%;
-		text-align: center;
-		padding: 0px 10px;
-	}
-	.list-left-row{
-		padding: 10px;
-		color: #8c9fad;
-	}
-	.active{
-		background: #FFFFFF;
-		color: #000000;
-	}
-	.list-right-row{
-		border: 1px solid #EDEAF4;
-		box-shadow:0 6px 6px rgba(237,234,244,0.5);
-		border-radius: 4px;
-		padding: 10px;
-	}
-	.list-right-row:not(:first-child){
-		margin-top: 10px;
-	}
-	.shopping{
-		padding: 20px 10px;
-	}
-	.shopping-icon{
-		font-size: 28px;
-		position: relative;
-	}
-	.shopping-icon-num{
-		width: 20px;
-		height: 20px;
-		background: #518EFF;
-		border-radius: 50%;
-		color: #FFFFFF;
-		position: absolute;
-		right: -10px;
-		top: -10px;
-	}
-	.btn{
-		border-radius: 20px;
-		line-height: 30px;
-		font-size: 14px;
-	}
-</style>
diff --git a/hive-app/pages/workbench/selectProduct/index.vue b/hive-app/pages/workbench/selectProduct/index.vue
index b28c9b6..47d7715 100644
--- a/hive-app/pages/workbench/selectProduct/index.vue
+++ b/hive-app/pages/workbench/selectProduct/index.vue
@@ -58,7 +58,6 @@
 			<navigator url="../confirmOrder">
 				<button class="blue-btn btn mr-0">提交订单</button>
 			</navigator>
-			
 		</view>
 		<uni-popup ref="popup" type="bottom">
 			<shopping-cart></shopping-cart>
diff --git a/hive-app/pages/workbench/selectService.vue b/hive-app/pages/workbench/selectService.vue
index 8781a2e..da35450 100644
--- a/hive-app/pages/workbench/selectService.vue
+++ b/hive-app/pages/workbench/selectService.vue
@@ -1,11 +1,170 @@
 <template>
 	<view>
-		<text>选择套餐</text>
+		<view class="header">
+			<search-bar placeholder="商品名称、编号、拼音" class="ml-10 mr-10"></search-bar>
+		</view>
+		<view class="content">
+			<view class="content-box">
+				<view class="content-box-title">
+					<text>项目</text>
+				</view>
+				<view class="flex align-center content-box-row" v-for="item in 2">
+					<image class="product-img" mode="aspectFill" src="../../static/images/product.jpg"></image>
+					<view class="flex flex-v ml-10 flex-1">
+						<text class="font-12">面部护理</text>
+						<text class="font-10 gray mt-5">时长: 30分钟</text>
+						<text class="font-10 gray mt-5">有效期至: 2021-01-02</text>
+						<view class="mt-5 flex align-center justify-between">
+							<text class="font-12 blue">剩余次数: 2次</text>
+							<view>
+								<text class="iconfont iconjian blue-outline-btn-circle mr-20"></text>
+								<text class="iconfont iconjia blue-btn-circle"></text>
+							</view>
+						</view>
+					</view>
+				</view>
+			</view>
+			
+			<view class="content-box mt-10">
+				<view class="content-box-title">
+					<text>套餐</text>
+				</view>
+				<view class="flex flex-v content-box-row" v-for="item in 2">
+					<view class="font-12 flex align-center justify-between">
+						<text>时尚补水套餐</text>
+						<text class="red">即将过期</text>
+					</view>
+					<view class="flex align-center mt-5">
+						<image class="product-img" mode="aspectFill" src="../../static/images/product.jpg"></image>
+						<view class="flex flex-v ml-10 flex-1">
+							<text class="font-12">面部护理</text>
+							<text class="font-10 gray mt-5">时长: 30分钟</text>
+							<text class="font-10 gray mt-5">有效期至: 2021-01-02</text>
+							<view class="mt-5 flex align-center justify-between">
+								<text class="font-12 blue">剩余次数: 2次</text>
+								<view>
+									<text class="iconfont iconjian blue-outline-btn-circle mr-20"></text>
+									<text class="iconfont iconjia blue-btn-circle"></text>
+								</view>
+							</view>
+						</view>
+					</view>
+					<view class="flex align-center mt-10">
+						<image class="product-img" mode="aspectFill" src="../../static/images/product.jpg"></image>
+						<view class="flex flex-v ml-10 flex-1">
+							<text class="font-12">面部护理</text>
+							<text class="font-10 gray mt-5">时长: 30分钟</text>
+							<text class="font-10 gray mt-5">有效期至: 2021-01-02</text>
+							<view class="mt-5 flex align-center justify-between">
+								<text class="font-12 blue">剩余次数: 2次</text>
+								<view>
+									<text class="iconfont iconjian blue-outline-btn-circle mr-20"></text>
+									<text class="iconfont iconjia blue-btn-circle"></text>
+								</view>
+							</view>
+						</view>
+					</view>
+					<view class="font-12 mt-5">
+						<text>有效期至: 2021-01-03</text>
+					</view>
+				</view>
+			</view>
+		</view>
+		<view class="shopping flex align-center justify-between">
+			<view class="flex align-center">
+				<view class="shopping-icon iconfont iconicongouwuche gray" @click="openShoppingCart">
+					<view class="shopping-icon-num flex align-center justify-center">
+						<text class="font-10">19</text>
+					</view>
+				</view>
+				<text class="font-14 blue ml-10">¥110.00</text>
+			</view>
+			<navigator url="./confirmService" hover-class="none">
+				<button class="blue-btn btn mr-0">提交订单</button>
+			</navigator>
+		</view>
+		<uni-popup ref="popup" type="bottom">
+			<shopping-cart></shopping-cart>
+		</uni-popup>
 	</view>
 </template>
 
 <script>
+	import searchBar from '../../components/searchBar/index.vue';
+	import uniPopup from '@/components/uni-popup/uni-popup.vue'
+	import shoppingCart from './selectProduct/shoppingCart.vue'
+	export default {
+		components:{
+			searchBar,
+			uniPopup,
+			shoppingCart
+		},
+		data(){
+			return{
+			}
+		},
+		methods:{
+			openShoppingCart(){
+				this.$refs.popup.open()
+			}
+		}
+	}
 </script>
 
 <style>
+	page{
+		background: #F6F6F8;
+	}
+	.header{
+		background: #FFFFFF;
+		border-bottom-left-radius: 4px;
+		border-bottom-right-radius: 4px;
+		box-shadow:0 6px 6px rgba(237,234,244,0.5);
+		padding-bottom: 5px;
+	}
+	.content{
+		padding: 10px;
+	}
+	.content-box{
+		background: #FFFFFF;
+		padding: 10px;
+		border: 1px solid #EDEAF4;
+		border-radius: 4px;
+		box-shadow:0 6px 6px rgba(237,234,244,0.5);
+	}
+	.content-box-title{
+		padding: 10px 5px;
+		border-bottom: 1px solid #EDEAF4;
+	}
+	.content-box-row{
+		padding: 10px 0;
+		border-bottom: 1px solid #EDEAF4;
+	}
+	.content-box-row:nth-last-child(1){
+		border: 0;
+		padding-bottom: 0;
+	}
+	.product-img{
+		width: 80px;
+		height: 80px;
+		border-radius: 4px;
+	}
+	.shopping{
+		background: #FFFFFF;
+		padding: 10px 10px;
+	}
+	.shopping-icon{
+		font-size: 28px;
+		position: relative;
+	}
+	.shopping-icon-num{
+		width: 20px;
+		height: 20px;
+		background: #518EFF;
+		border-radius: 50%;
+		color: #FFFFFF;
+		position: absolute;
+		right: -10px;
+		top: -10px;
+	}
 </style>

--
Gitblit v1.9.1