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