xuqiang 4 سال پیش
والد
کامیت
a841d57277

+ 4 - 1
common/demo.scss

@@ -22,7 +22,10 @@ text {
 .u-demo-area {
 	text-align: center;
 }
-
+.flex{
+	display: flex;
+	align-items: center;
+}
 .u-no-demo-here {
 	color: $u-tips-color;
 	font-size: 13px;

+ 71 - 0
components/BillInfo.vue

@@ -0,0 +1,71 @@
+<template>
+		<view class="con" :class="{ pay: billType === 'pay' }">
+			<view>
+				<view class="text1">
+					{{Info.title}}
+				</view>
+				<view class="text2">
+					{{Info.settleTime}}
+				</view>
+			</view>
+			<view class="money">
+				{{Info.amount}}
+			</view>
+		</view>
+</template>
+
+<script>
+export default {
+    name: 'Bill',
+    props: {
+        Info: {
+            type: Object,
+            default: () => {
+                return {};
+            }
+        },
+        billType: {
+            type: String,
+            default: ''
+        }
+    },
+    methods: {
+        details() {
+            this.$emit('detail');
+        }
+    }
+};
+</script>
+<style lang="scss" scoped>
+.con{
+	height: 70px;
+	background: #FFFFFF;
+	margin: 0 20px;
+	display: flex;
+	align-items: center;
+	justify-content: space-between;
+	border-bottom:1px solid #F5F7FA;
+	.text1{
+		font-size: 14px;
+		font-weight: 400;
+		color: #000000;
+		line-height: 20px;
+	}
+	.text2{
+		font-size: 12px;
+		font-weight: 400;
+		color: #969799;
+		line-height: 17px;
+	}
+	.money{
+		font-size: 16px;
+		font-weight: bold;
+		color: #F42202;
+		line-height: 24px;
+	}
+}
+
+.pay {
+	color: #000000;
+}
+</style>

+ 52 - 0
components/ImgUploader.vue

@@ -0,0 +1,52 @@
+<template>
+	<u-upload :action="action" :file-list="fileList" max-count="1" :after-read="afterRead" @delete="deleteImg" preview-size="160" />
+</template>
+
+<script>
+export default {
+	props: {
+		value: {
+			type: String,
+			default: ''
+		}
+	},
+	data() {
+		return {
+			fileList: [],
+			action: 'http://192.168.100.17/index.php/index/index/upload'
+		};
+	},
+	created() {
+		this.setFile(this.value);
+	},
+	methods: {
+		setFile(value) {
+			if (value) {
+				this.fileList = [{ url: value }];
+			} else {
+				this.fileList = [];
+			}
+		},
+		afterRead(file) {
+			console.log(file)
+			this.$http.uploadFile(file.path).then(res => {
+				let fileList = [];
+				fileList.push({ ...file, url: res });
+				this.fileList = fileList;
+				this.$emit('input', res);
+			});
+		},
+		deleteImg() {
+			this.fileList = [];
+		}
+	}
+};
+</script>
+
+<style lang="scss" scoped>
+/deep/ .u-list-item {
+	margin-left: 15px;
+	width: 160px !important;
+	height: 160px !important;
+}
+</style>

+ 104 - 0
components/NewsInfo.vue

@@ -0,0 +1,104 @@
+<template>
+    <div
+        class="news-info"
+    >
+        <div class="icon">
+            <!-- <div class="dot" v-if="dot">{{ dot }}</div> -->
+						<image style="width: 50px;height: 50px;border-radius: 50%;" src="https://bpic.588ku.com/illus_water_img/21/07/05/ecab6de5a7b2972500459ba95cf97deb.jpg" mode=""></image>
+        </div>
+        <div class="content">
+            <div class="text1">
+                333
+            </div>
+            <span class="time">1111</span>
+            <div class="text2">222</div>
+        </div>
+    </div>
+</template>
+
+<script>
+// import { mapState } from 'vuex';
+// import dayjs from 'dayjs';
+// import * as relativeTime from 'dayjs/plugin/relativeTime';
+// import 'dayjs/locale/zh-cn';
+// dayjs.locale('zh-cn');
+// dayjs.extend(relativeTime);
+
+export default {
+    name: 'NewsInfo',
+    props: {
+        info: {
+            type: Object,
+            default: () => {
+                return {};
+            }
+        },
+        dot: {
+            type: Number,
+            default: 0
+        }
+    },
+};
+</script>
+
+<style lang="scss" scoped>
+.news-info {
+    // .flex();
+		display: flex;
+		align-items: center;
+    padding: 20px 0;
+    overflow: hidden;
+		border-bottom: 1px solid #F5F7FA;
+    .icon {
+        flex-shrink: 0;
+        margin-right: 8px;
+        position: relative;
+        .dot {
+            min-width: 6px;
+            height: 18px;
+            font-size: 13px;
+            color: #ffffff;
+            line-height: 18px;
+            padding: 0 6px;
+            text-align: center;
+            position: absolute;
+            left: 36px;
+            top: -6px;
+            // background: @prim;
+            border-radius: 9px;
+        }
+    }
+
+    .content {
+        flex-grow: 1;
+        overflow: hidden;
+        position: relative;
+        .text1 {
+            font-size: 16px;
+            font-weight: bold;
+            color: #000000;
+            line-height: 26px;
+        }
+
+        .text2 {
+            font-size: 14px;
+            color: #c8c9cc;
+            line-height: 24px;
+            // .ellipsis();
+        }
+
+        .time {
+            font-size: 13px;
+            color: #c8c9cc;
+            line-height: 24px;
+            position: absolute;
+            right: 0px;
+            top: 0;
+        }
+    }
+
+    &:active {
+        background-color: rgba(0, 0, 0, 0.1);
+    }
+}
+</style>

+ 88 - 35
components/OrderInfo.vue

@@ -1,28 +1,33 @@
 <template>
-	<view class="order-info">
+	<view class="order-info" @click="navigateTo('/pages/Storesdetails?status=' + status)">
 		<view class="order-top">
-			<view class="status">配送中</view>
-			<text class="time">2021-05-20 07:52</text>
+			<view class="status">接单中</view>
+			<text class="time">{{ status ? '2021-05-20 07:52' : '剩余50分钟' }}</text>
 		</view>
-
 		<view class="products">
-			<view class="product">
-				<u-image
-					src="https://bpic.588ku.com/illus_water_img/21/07/05/ecab6de5a7b2972500459ba95cf97deb.jpg"
-					width="160"
-					height="160"
-					border-radius="16"
-					mode="cover"
-				></u-image>
-				<view class="product-content">
-					<view class="text1">
-						<text>南瓜粥</text>
-						<text>¥5</text>
-					</view>
-					<view class="text2">热</view>
-					<view class="text2">共1件</view>
+			<view class="address">
+				<view class="name">{{ status ? '用户信息' : '配送地址' }}</view>
+				<view>
+					<view class="name" v-if="!status">南京**江宁校区-4号宿舍楼</view>
+					<view class="name name1">奶盖 18789898888</view>
 				</view>
 			</view>
+			<view class="content">
+				<view class="text1">{{ status ? '用户要求' : '自取时间' }}</view>
+				<view class="text2">08:50送达</view>
+			</view>
+			<view class="content" v-if="!status">
+				<view class="text1">买家留言</view>
+				<view class="text2">麻烦送到宿舍楼下的桌子上</view>
+			</view>
+			<view class="content content2">
+				<view class="text1">买家已支付:</view>
+				<view class="text3">¥34</view>
+			</view>
+		</view>
+		<view class="btn1">
+			<u-button block type="primary" @click="submit">接单</u-button>
+			<u-button block class="btn2" @click="submit2">联系买家</u-button>
 		</view>
 	</view>
 </template>
@@ -30,19 +35,34 @@
 <script>
 export default {
 	name: 'OrderInfo',
+	props: {
+		status: {
+			type: Boolean,
+			default: false
+		}
+	},
 	data() {
 		return {};
-	}
+	},
+	methods:{}
 };
 </script>
 
-<style lang="scss">
+<style lang="scss" scoped>
 .order-info {
 	background: #ffffff;
 	border-radius: 12px;
 	padding: 16px 12px;
 }
-
+/deep/ .u-btn {
+	width: 80px;
+	height: 36px;
+	font-size: 14px;
+	font-weight: 400;
+	margin: 0;
+	color: #ffffff;
+	border-radius: 4px;
+}
 .order-top {
 	display: flex;
 	justify-content: space-between;
@@ -61,25 +81,58 @@ export default {
 		line-height: 24px;
 	}
 }
-
-.product {
+.btn1 {
 	display: flex;
-	padding: 20px 0;
-	.product-content {
-		flex-grow: 1;
-		padding-left: 10px;
-		.text1 {
-			display: flex;
-			justify-content: space-between;
+	align-items: center;
+	place-content: flex-end;
+	margin-top: 10px;
+	.btn2 {
+		color: #214bbe;
+		margin-left: 16px;
+	}
+}
+.products {
+	.address {
+		height: 78px;
+		display: flex;
+		align-items: center;
+		justify-content: space-between;
+		border-bottom: 1px solid #f5f7fa;
+		.name {
 			font-size: 14px;
-			font-weight: bold;
-			color: #1c1c1c;
+			font-weight: 400;
+			color: #000000;
+			line-height: 24px;
+			&.name1{
+				text-align: right;
+			}
+		}
+	}
+	.content {
+		height: 46px;
+		display: flex;
+		align-items: center;
+		justify-content: space-between;
+		border-bottom: 1px solid #f5f7fa;
+		&.content2{
+			border: 0;
+		}
+		.text1 {
+			font-size: 13px;
+			font-weight: 400;
+			color: #939599;
 			line-height: 24px;
 		}
-
 		.text2 {
 			font-size: 14px;
-			color: #c8c9cc;
+			font-weight: 400;
+			color: #ff7f1f;
+			line-height: 24px;
+		}
+		.text3 {
+			font-size: 16px;
+			font-weight: bold;
+			color: #000000;
 			line-height: 24px;
 		}
 	}

+ 52 - 0
components/Titlenav.vue

@@ -0,0 +1,52 @@
+<template>
+	<view :style="{ paddingTop: `${systemInfo.statusBarHeight}px` }">
+		<view class="paddingTop">
+			<image
+				@click="navigateBack()"
+				class="topImg"
+				:src="`https://ticket-exchange.oss-cn-hangzhou.aliyuncs.com/image/${flag ? '2021-09-28-10-13-29pAQbyKoL.png' : '2021-09-24-17-12-18wIDpEwbr.png'}`"
+				mode="widthFix"
+			></image>
+			<span class="title"><slot></slot></span>
+			<view class="white"></view>
+		</view>
+	</view>
+</template>
+
+<script>
+import { mapState } from 'vuex';
+export default {
+	computed: {
+		...mapState(['systemInfo'])
+	},
+	props:{
+		flag:{
+			type:Boolean,
+			default:false
+		}
+	}
+};
+</script>
+
+<style lang="scss" scoped>
+.paddingTop {
+	height: 44px;
+	display: flex;
+	align-items: center;
+	justify-content: space-between;
+	.topImg {
+		width: 28px;
+		height: 28px;
+		margin-left: 8px;
+	}
+	.title {
+		font-size: 18px;
+		font-weight: bold;
+		color: #000000;
+		line-height: 25px;
+	}
+	.white {
+		width: 33px;
+	}
+}
+</style>

+ 3 - 2
main.js

@@ -1,7 +1,8 @@
 import Vue from 'vue';
 import App from './App';
 import http from './plugins/http';
-import Vuex from 'vuex';
+import Vuex from 'vuex';
+import common from './mixins/common';
 
 Vue.config.productionTip = false;
 
@@ -10,7 +11,7 @@ App.mpType = 'app';
 // 此处为演示Vue.prototype使用,非uView的功能部分
 Vue.prototype.vuePrototype = '枣红';
 
-
+Vue.mixin(common);
 Vue.use(http);
 Vue.use(Vuex);
 

+ 8 - 5
manifest.json

@@ -27,7 +27,8 @@
         "modules" : {
             "Geolocation" : {},
             "Maps" : {},
-            "Push" : {}
+            "Push" : {},
+            "Share" : {}
         },
         "distribute" : {
             "android" : {
@@ -70,7 +71,8 @@
                         "appkey_android" : "eddad1cae03692114915a58285174177"
                     }
                 },
-                "push" : {}
+                "push" : {},
+                "share" : {}
             },
             "icons" : {
                 "android" : {
@@ -111,14 +113,15 @@
         "appid" : "",
         "setting" : {
             "urlCheck" : true,
-            "es6" : false,
-            "minified" : true,
+            "es6" : true,
+            "minified" : false,
             "postcss" : true
         },
         "optimization" : {
             "subPackages" : true
         },
-        "usingComponents" : true
+        "usingComponents" : true,
+        "permission" : {}
     },
     "mp-alipay" : {
         "usingComponents" : true,

+ 56 - 0
mixins/common.js

@@ -0,0 +1,56 @@
+export default {
+	methods: {
+		navigateBack(num = 1) {
+			uni.navigateBack({
+				delta: num
+			});
+		},
+		sendCode(phone) {
+			// this.$http
+			// .get('', {
+			// phone: phone
+			// })
+			// .then(() => {
+			this.checkTime();
+			// })
+			// .catch(e => {
+			//     this.$message.error(e.error);
+			// });
+		},
+		navigateTo(url) {
+			uni.navigateTo({
+				url: url
+			});
+		},
+		toast(title, icon = 'none', duration = 1500) {
+			uni.showToast({
+				icon: icon,
+				title: title,
+				mask: true,
+				duration: duration
+			});
+		},
+		preview(img, urls = []) {
+			if (!img) {
+				return;
+			}
+			if (urls.length === 0) {
+				urls = [img];
+			}
+
+			uni.previewImage({
+				current: img, // 当前显示图片的http链接
+				urls: urls // 需要预览的图片http链接列表
+			});
+		},
+		checkTime() {
+			this.time = 60;
+			let i = setInterval(() => {
+				this.time--;
+				if (this.time === 0) {
+					clearInterval(i);
+				}
+			}, 1000);
+		},
+	}
+}

+ 66 - 0
mock/merchantorList.js

@@ -0,0 +1,66 @@
+export const merchantorLists = [
+	{
+		name: '寿司',
+		image: 'https://ticket-exchange.oss-cn-hangzhou.aliyuncs.com/image/2021-08-13-15-54-36URxMKUXs.jpg',
+		num: '226',
+		fabulous: '40',
+		id: 1,
+		price: 20.0
+	},
+	{
+		name: '寿司',
+		image: 'https://ticket-exchange.oss-cn-hangzhou.aliyuncs.com/image/2021-08-13-15-54-36URxMKUXs.jpg',
+		num: '226',
+		fabulous: '40',
+		id: 2,
+		price: 20.0
+	},
+	{
+		name: '寿司',
+		image: 'https://ticket-exchange.oss-cn-hangzhou.aliyuncs.com/image/2021-08-13-15-54-36URxMKUXs.jpg',
+		num: '226',
+		fabulous: '40',
+		id: 3,
+		price: 20.0
+	},
+	{
+		name: '寿司',
+		image: 'https://ticket-exchange.oss-cn-hangzhou.aliyuncs.com/image/2021-08-13-15-54-36URxMKUXs.jpg',
+		num: '226',
+		fabulous: '40',
+		id: 4,
+		price: 20.0
+	},
+	{
+		name: '寿司',
+		image: 'https://ticket-exchange.oss-cn-hangzhou.aliyuncs.com/image/2021-08-13-15-54-36URxMKUXs.jpg',
+		num: '226',
+		fabulous: '40',
+		id: 5,
+		price: 20.0
+	},
+	{
+		name: '寿司',
+		image: 'https://ticket-exchange.oss-cn-hangzhou.aliyuncs.com/image/2021-08-13-15-54-36URxMKUXs.jpg',
+		num: '226',
+		fabulous: '40',
+		id: 6,
+		price: 20.0
+	},
+	{
+		name: '寿司',
+		image: 'https://ticket-exchange.oss-cn-hangzhou.aliyuncs.com/image/2021-08-13-15-54-36URxMKUXs.jpg',
+		num: '226',
+		fabulous: '40',
+		id: 7,
+		price: 20.0
+	},
+	{
+		name: '寿司',
+		image: 'https://ticket-exchange.oss-cn-hangzhou.aliyuncs.com/image/2021-08-13-15-54-36URxMKUXs.jpg',
+		num: '226',
+		fabulous: '40',
+		id: 8,
+		price: 20.0
+	}
+];

+ 163 - 20
pages.json

@@ -2,16 +2,7 @@
 	"easycom": {
 		"^u-(.*)": "@/uview-ui/components/u-$1/u-$1.vue"
 	},
-	// "condition": { //模式配置,仅开发期间生效
-	// 	"current": 0, //当前激活的模式(list 的索引项)
-	// 	"list": [{
-	// 		"name": "test", //模式名称
-	// 		"path": "pages/componentsC/test/index", //启动页面,必选
-	// 		"query": "uuid=c4bba940-f69e-11ea-a419-6bafda9d095e&__id__=1" //启动参数,在页面的onLoad函数里面得到
-	// 	}]
-	// },
 	"pages": [
-		// 演示-组件
 		{
 			"path": "pages/Home",
 			"style": {
@@ -20,14 +11,12 @@
 				"backgroundColor": "#F2F3F5"
 			}
 		},
-		// 演示-组件
 		{
 			"path": "pages/example/components",
 			"style": {
 				"navigationBarTitleText": "组件"
 			}
 		},
-		// avatarCropper-头像裁剪
 		{
 			"path": "uview-ui/components/u-avatar-cropper/u-avatar-cropper",
 			"style": {
@@ -35,21 +24,18 @@
 				"navigationBarBackgroundColor": "#000000"
 			}
 		},
-		// 演示-工具
 		{
 			"path": "pages/example/js",
 			"style": {
 				"navigationBarTitleText": "工具"
 			}
 		},
-		// 演示-模板
 		{
 			"path": "pages/example/template",
 			"style": {
 				"navigationBarTitleText": "模板"
 			}
 		},
-		// fullScreen-压窗屏
 		{
 			"path": "uview-ui/components/u-full-screen/u-full-screen",
 			"style": {
@@ -61,15 +47,162 @@
 					"popGesture": "none"
 				}
 			}
-		}, {
+		}, 
+		{
+			"path": "pages/Login",
+			"style": {
+				"navigationBarTitleText": "",
+				"navigationStyle": "custom"
+			}
+		},
+		{
+			"path": "pages/Register",
+			"style": {
+				"navigationBarTitleText": "",
+				"navigationStyle": "custom"
+			}
+		},
+		{
+			"path": "pages/Authentication",
+			"style": {
+				"navigationBarTitleText": "",
+				"navigationStyle": "custom"
+			}
+		},		
+		{
+			"path": "pages/Addstores",
+			"style": {
+				"navigationBarTitleText": "",
+				"navigationStyle": "custom"
+			}
+		},	
+		{
+			"path": "pages/Addcommodity",
+			"style": {
+				"navigationBarTitleText": "",
+				"navigationStyle": "custom"
+			}
+		},	
+		{
+			"path": "pages/Storeclassification",
+			"style": {
+				"navigationBarTitleText": "",
+				"navigationStyle": "custom"
+			}
+		},	
+		{
+			"path": "pages/Addipc",
+			"style": {
+				"navigationBarTitleText": "",
+				"navigationStyle": "custom"
+			}
+		},
+		{
+			"path": "pages/Review",
+			"style": {
+				"navigationBarTitleText": "",
+				"navigationStyle": "custom"
+			}
+		},
+		{
+			"path": "pages/Evaluate",
+			"style": {
+				"navigationBarTitleText": "",
+				"navigationStyle": "custom"
+			}
+		},
+		{
+			"path": "pages/Applicationshop",
+			"style": {
+				"navigationBarTitleText": "",
+				"navigationStyle": "custom"
+			}
+		},
+		{
+			"path": "pages/Storesettings",
+			"style": {
+				"navigationBarTitleText": "",
+				"navigationStyle": "custom"
+			}
+		},	
+		{
+			"path": "pages/Storesdetails",
+			"style": {
+				"navigationBarTitleText": "",
+				"navigationStyle": "custom"
+			}
+		},
+		{
+			"path": "pages/Security",
+			"style": {
+				"navigationBarTitleText": "",
+				"navigationStyle": "custom"
+			}
+		},	
+		{
+			"path": "pages/Modifyphnoe",
+			"style": {
+				"navigationBarTitleText": "",
+				"navigationStyle": "custom"
+			}
+		},
+		{
+			"path": "pages/Modifypass",
+			"style": {
+				"navigationBarTitleText": "",
+				"navigationStyle": "custom"
+			}
+		},
+		{
+			"path": "pages/Setup",
+			"style": {
+				"navigationBarTitleText": "",
+				"navigationStyle": "custom"
+			}
+		},
+		{
+			"path": "pages/Wallet",
+			"style": {
+				"navigationBarTitleText": "",
+				"navigationStyle": "custom"
+			}
+		},	
+		{
+			"path": "pages/Walletdetails",
+			"style": {
+				"navigationBarTitleText": "",
+				"navigationStyle": "custom"
+			}
+		},	
+		{
+			"path": "pages/Standard",
+			"style": {
+				"navigationBarTitleText": "",
+				"navigationStyle": "custom"
+			}
+		},
+		{
+			"path": "pages/Mine",
+			"style": {
+				"navigationBarTitleText": "",
+				"navigationStyle": "custom"
+			}
+		},	
+		{
+			"path": "pages/News",
+			"style": {
+				"navigationBarTitleText": "",
+				"navigationStyle": "custom"
+			}
+		},
+		{
 			"path": "pages/Orders",
 			"style": {
-				"navigationBarTitleText": "订单管理",
+				"navigationBarTitleText": "",
 				"enablePullDownRefresh": false
 			}
-
 		}
-	],
+    ],
 	"preloadRule": {
 		"pages/example/components": {
 			"network": "all",
@@ -90,7 +223,7 @@
 		"list": [{
 				"pagePath": "pages/Home",
 				"iconPath": "static/uview/imgs/tabbar_icon_01.png",
-				"selectedIconPath": "static/uview/imgs/tabbar_icon_01_pre.png",
+				"selectedIconPath": "https://ticket-exchange.oss-cn-hangzhou.aliyuncs.com/image/2021-09-29-12-08-44CDyStOvw.png",
 				"text": "首页"
 			},
 			{
@@ -100,11 +233,21 @@
 				"text": "订单管理"
 			},
 			{
-				"pagePath": "pages/example/template",
+				"pagePath": "pages/Mine",
 				"iconPath": "static/uview/imgs/tabbar_icon_03.png",
 				"selectedIconPath": "static/uview/imgs/tabbar_icon_03_pre.png",
 				"text": "我的"
 			}
 		]
+	},
+	"condition" : { 
+		"current": 0,
+		"list": [
+			{
+				"name": "", 
+				"path": "", 
+				"query": ""
+			}
+		]
 	}
 }

+ 199 - 0
pages/Addcommodity.vue

@@ -0,0 +1,199 @@
+<template>
+	<view class="titlenav">
+		<titlenav :flag="true"></titlenav>
+		<view class="top">
+			<view class="title">新增商品</view>
+		</view>
+		<view class="content">
+			<u-cell-group :border="false" class="from">
+				<view class="list">
+					<view class="name">商品名称</view>
+					<u-field placeholder="请输入商品名称" is-link v-model="form.storename" />
+				</view>
+				<view class="list" @click="navigateTo('/pages/Storesettings')">
+					<view class="name name2">商品分类</view>
+					<u-cell-item title="请选择所属分类" is-link></u-cell-item>
+				</view>
+				<view class="list">
+					<view class="name">库存(件)</view>
+					<u-field placeholder="请输入库存数量" is-link v-model="form.stock" />
+				</view>
+				<view class="list">
+					<view class="name">单价(元)</view>
+					<u-field placeholder="商品单价(元)" is-link v-model="form.price" />
+				</view>
+				<view class="list">
+					<view class="name">主料</view>
+					<u-field placeholder="请输入材料" is-link v-model="form.material" />
+				</view>
+				<view class="list">
+					<view class="name">规格</view>
+					<u-field placeholder="例:1人份 (200g)" is-link v-model="form.num" />
+				</view>
+			</u-cell-group>
+		</view>
+		<view class="bottom">
+			<view class="characteristic">掌柜描述</view>
+			<u-field type="textarea" placeholder="请介绍您的商品信息,会更受欢迎哦" v-model="form.characteristic" />
+			<view class="characteristic">商品实物图</view>
+			<u-upload :action="action" max-count="3" :file-list="fileList"></u-upload>
+		</view>
+		<view class="btn">
+			<u-button block class="btn2" @click="submit">不上架</u-button>
+			<u-button block type="primary" @click="submit2">上架出售</u-button>
+		</view>
+	</view>
+</template>
+<script>
+import { mapState } from 'vuex';
+import Titlenav from '../components/Titlenav.vue';
+export default {
+	components: { Titlenav },
+	data() {
+		return {
+			form: {},
+			action: 'http://www.example.com/upload',
+			fileList: [
+				{
+					url: ''
+				}
+			]
+		};
+	},
+	computed: {
+		...mapState(['systemInfo'])
+	},
+	methods: {}
+};
+</script>
+<style lang="scss" scoped>
+.titlenav {
+	background: #214bbe;
+	.top {
+		height: 50px;
+		.title {
+			font-size: 22px;
+			font-weight: bold;
+			color: #ffffff;
+			line-height: 26px;
+			padding: 10px 0 20px 20px;
+		}
+	}
+	.content {
+		background: #ffffff;
+		border-radius: 16px 16px 0px 0px;
+		padding: 1px 20px;
+		display: flex;
+		align-items: center;
+	}
+	.bottom {
+		background: #ffffff;
+		padding-bottom: 100px;
+		/deep/ .u-field {
+			margin: 0 20px;
+			padding: 0 0 15px 0;
+		}
+		.characteristic {
+			font-size: 14px;
+			font-weight: bold;
+			color: #000000;
+			line-height: 24px;
+			padding: 24px 0 8px 20px;
+		}
+	}
+	/deep/ .u-btn {
+		width: 162px;
+		height: 48px;
+		font-size: 16px;
+		font-weight: 400;
+		color: #ffffff;
+		border-radius: 4px;
+	}
+	/deep/ .u-list-item {
+		margin-left: 20px;
+		width: 160px !important;
+		height: 160px !important;
+	}
+	/deep/ .u-label {
+		flex: 0 0 0 !important;
+	}
+	/deep/ .u-iconfont {
+		font-size: 14px !important;
+	}
+	/deep/ .uni-textarea-textarea {
+		font-size: 16px;
+		font-weight: 400;
+		color: #000000;
+		line-height: 24px;
+	}
+	/deep/ .uni-textarea-placeholder {
+		font-weight: 400;
+		font-size: 16px;
+	}
+	.from {
+		/deep/ .u-cell__value {
+			color: #000000;
+			font-weight: 400;
+		}
+		/deep/ .u-cell_title {
+			font-size: 13px;
+			font-weight: 400;
+			color: #aaabad;
+			line-height: 24px;
+		}
+		/deep/ .u-field {
+			padding: 23px 0;
+			color: #000000;
+			font-weight: bold;
+		}
+		/deep/ .uni-input-input {
+			font-weight: 400;
+		}
+		/deep/ .uni-input-placeholder {
+			font-size: 13px;
+			font-weight: 400;
+			color: #aaabad;
+			line-height: 24px;
+		}
+		/deep/ .u-cell {
+			padding: 21.5px 0;
+		}
+		/deep/ .u-cell__value {
+			height: 27px;
+		}
+		.list {
+			display: flex;
+			align-items: center;
+			.name {
+				font-size: 14px;
+				font-weight: bold;
+				width: 86px;
+				color: #000000;
+				line-height: 24px;
+				margin-right: 14px;
+				&.name2 {
+					margin-right: 44px;
+				}
+			}
+		}
+	}
+	.btn {
+		display: flex;
+		align-items: center;
+		position: fixed;
+		justify-content: space-between;
+		left: 0;
+		right: 0;
+		bottom: 0;
+		z-index: 100;
+		padding: 6px 20px;
+		padding-bottom: 34px;
+		padding-bottom: calc(34px + constant(safe-area-inset-bottom)); // 兼容 IOS<11.2
+		padding-bottom: calc(34px + env(safe-area-inset-bottom)); // 兼容 IOS>=11.2
+		background-color: #ffffff;
+		.btn2 {
+			color: #214bbe;
+		}
+	}
+}
+</style>

+ 97 - 0
pages/Addipc.vue

@@ -0,0 +1,97 @@
+<template>
+	<view>
+		<titlenav></titlenav>
+		<view class="authentication">
+			<view class="title">添加银行卡</view>
+			<view class="inpt">
+				<input type="number" value="" placeholder="点击输入*** 银行卡号" v-model="ipc" />
+				<view class="right">
+					<image class="img" src="https://ticket-exchange.oss-cn-hangzhou.aliyuncs.com/image/2021-09-26-15-37-46LVTmoDST.png" mode=""></image>
+					<view class="text1">扫描绑定</view>
+				</view>
+			</view>
+			<u-button type="primary" :disabled="!canSubmit" @click="submit">下一步</u-button>
+		</view>
+	</view>
+</template>
+
+<script>
+import { mapState } from 'vuex';
+import Titlenav from '../components/Titlenav.vue';
+export default {
+	components: {
+		Titlenav
+	},
+	data() {
+		return {
+			ipc: ''
+		};
+	},
+	computed: {
+		...mapState(['systemInfo']),
+		canSubmit() {
+			if (this.ipc) {
+				return true;
+			} else {
+				return false;
+			}
+		}
+	},
+	methods: {
+		submit() {
+			// if (!/(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/.test(this.idNo)) {
+			// 	this.toast('请输入正确身份证');
+			// 	return;
+			// }
+			uni.navigateTo({
+				url: '/pages/Walletdetails'
+			});
+		}
+	}
+};
+</script>
+
+<style lang="scss" scoped>
+.authentication {
+	/deep/ .uni-input-placeholder {
+		font-size: 13px;
+		font-weight: 400;
+		color: #aaabad;
+		line-height: 24px;
+	}
+	/deep/ .u-btn {
+		height: 48px;
+		font-size: 16px;
+		margin: 0 22px;
+	}
+	margin: 10px 20px 0;
+	.title {
+		font-size: 24px;
+		font-weight: bold;
+		color: #000000;
+		line-height: 33px;
+	}
+	.inpt {
+		background: #f5f7fa;
+		border-radius: 8px;
+		padding: 8px 16px;
+		margin: 30px 0 60px;
+		display: flex;
+		align-items: center;
+		justify-content: space-between;
+		.right{
+			text-align: center;
+			.img {
+				width: 24px;
+				height: 24px;
+			}
+			.text1 {
+				font-size: 10px;
+				font-weight: 400;
+				color: #aaabad;
+				line-height: 14px;
+			}
+		}
+	}
+}
+</style>

+ 328 - 0
pages/Addstores.vue

@@ -0,0 +1,328 @@
+<template>
+	<view class="titlenav">
+		<view class="top">
+			<titlenav :flag="true"></titlenav>
+			<view>
+				<view class="title">商品管理</view>
+				<view class="search">
+					<image class="sousuo" src="https://ticket-exchange.oss-cn-hangzhou.aliyuncs.com/image/2021-09-16-09-53-26QAqibCrM.png" mode=""></image>
+					<view class="placeholder">搜索</view>
+				</view>
+				<u-tabs :current="tab" active-color="#ffffff" inactive-color="#ffffffcc" :list="tabs" :bg-color="$colors.prim" :is-scroll="false" @change="changeTab"></u-tabs>
+			</view>
+		</view>
+		<view class="content">
+			<view class="tabs">
+				<view class="tab" :class="{ active: item === active }" v-for="(item, index) in tabs2" :key="index" @click="change(item)">{{ item }}</view>
+			</view>
+			<view class="storeCon" v-if="status">
+				<view class="merchantroCon" v-for="(item, index) in merchantorListsData" :key="index">
+					<image
+						v-if="show"
+						style="width:24px;height:24px;margin-left:5px;"
+						:src="`https://ticket-exchange.oss-cn-hangzhou.aliyuncs.com/image/${list.includes(item.id) ? '2021-09-29-15-24-20LcnkHdXx.png' : '2021-09-02-14-49-00OrkCuHPB.png'}`"
+						@click="pushId(item.id)"
+						mode=""
+					></image>
+					<image class="img" :src="item.image" mode=""></image>
+					<view>
+						<view class="text1">{{ item.name }}</view>
+						<view class="text2">月销226&nbsp;&nbsp; 库存30/60</view>
+						<view class="price" v-if="tab != 2">¥20.00</view>
+						<view class="price" v-if="tab == 2 && show == false">库存不足</view>
+						<view class="addcon" v-if="tab == 2 && show == true">
+							<view>
+								<img
+									class="add"
+									:src="`https://ticket-exchange.oss-cn-hangzhou.aliyuncs.com/image/${item.currentNum ? '2021-09-29-14-52-08uxMdZpar.png' : '2021-09-29-14-52-26BrhdOJqT.png'}`"
+									alt=""
+									@click="minus(item)"
+								/>
+							</view>
+							<view class="text">{{ item.currentNum }}</view>
+							<view><img class="add" src="https://ticket-exchange.oss-cn-hangzhou.aliyuncs.com/image/2021-09-29-14-51-44FFpxEAAP.png" alt="" @click="add(item)" /></view>
+						</view>
+					</view>
+				</view>
+			</view>
+		</view>
+		<view class="btn" v-if="!show">
+			<view class="bottom" @click="navigateTo('/pages/Storeclassification')">
+				<image class="imgBox" src="https://ticket-exchange.oss-cn-hangzhou.aliyuncs.com/image/2021-09-29-10-32-11ViwbrsTU.png" mode=""></image>
+				<view class="name">分类管理</view>
+				<text class="border"></text>
+			</view>
+			<view class="bottom" @click="batch">
+				<image class="imgBox" src="https://ticket-exchange.oss-cn-hangzhou.aliyuncs.com/image/2021-09-29-10-32-33BsbfsGzW.png" mode=""></image>
+				<view class="name">批量操作</view>
+				<text class="border"></text>
+			</view>
+			<view class="bottom" @click="navigateTo('/pages/Addcommodity')">
+				<image class="imgBox" src="https://ticket-exchange.oss-cn-hangzhou.aliyuncs.com/image/2021-09-29-10-32-52ObSGBFre.png" mode=""></image>
+				<view class="name">新增商品</view>
+			</view>
+		</view>
+		<view class="btn" v-else>
+			<u-button block class="btn2" @click="dele">删除</u-button>
+			<u-button block class="btn2" @click="submit1">完成</u-button>
+			<u-button block type="primary" @click="submit2">{{ !Tab ? '上架出售' : '下架出售' }}</u-button>
+		</view>
+	</view>
+</template>
+<script>
+import { mapState } from 'vuex';
+import Titlenav from '../components/Titlenav.vue';
+import { merchantorLists } from '../mock/merchantorList.js';
+export default {
+	components: { Titlenav },
+	data() {
+		return {
+			tab: 0,
+			show: false,
+			list: [],
+			merchantorListsData: [],
+			tabs: [{ name: '出售中' }, { name: '未上架' }, { name: '已售磬' }],
+			form: {},
+			tabs2: ['热销', '清新素粥'],
+			active: '热销'
+		};
+	},
+	created() {
+		merchantorLists.forEach(item => {
+			// 数量
+			item.currentNum = 0;
+			this.merchantorListsData.push(item);
+		});
+	},
+	computed: {
+		...mapState(['systemInfo']),
+		status() {
+			if (this.active == '热销') {
+				return true;
+			} else {
+				return false;
+			}
+		},
+		Tab() {
+			if (this.tab == 0) {
+				return true;
+			} else {
+				return false;
+			}
+		}
+	},
+	methods: {
+		changeTab(index) {
+			this.tab = index;
+		},
+		change(e) {
+			this.active = e;
+		},
+		batch() {
+			this.show = true;
+		},
+		submit1() {
+			this.show = false;
+		},
+		checkId(id) {
+			return this.list.includes(id);
+		},
+		pushId(id) {
+			if (this.checkId(id)) {
+				this.list.splice(this.list.indexOf(id), 1);
+			} else {
+				this.list.push(id);
+			}
+		},
+		submit2() {
+			if (this.tab == 0) {
+				console.log(111);
+			} else if (this.tab == 1) {
+				console.log(222);
+			} else {
+				console.log(333);
+			}
+		},
+		add(item) {
+			item.currentNum++;
+		},
+		minus(item) {
+			if (item.currentNum != 0) {
+				item.currentNum--;
+			}
+		}
+	}
+};
+</script>
+<style lang="scss" scoped>
+.titlenav {
+	background: #214bbe;
+	.top {
+		position: sticky;
+		z-index: 999;
+		top: 0px;
+		background: #214bbe;
+		padding-bottom: 10px;
+		.title {
+			font-size: 22px;
+			font-weight: bold;
+			color: #ffffff;
+			line-height: 26px;
+			padding: 10px 0 16px 20px;
+		}
+		.search {
+			height: 32px;
+			background: rgb(69, 116, 204);
+			border-radius: 16px;
+			margin: 0 20px;
+			display: flex;
+			justify-content: center;
+			align-items: center;
+			flex-wrap: nowrap;
+			.placeholder{
+				font-size: 14px;
+				font-weight: 400;
+				color: #FFFFFF;
+				line-height: 24px;
+			}
+			.sousuo {
+				width: 16px;
+				height: 16px;
+				margin-right: 8px;
+			}
+		}
+	}
+	.content {
+		background: #ffffff;
+		border-radius: 16px 16px 0px 0px;
+		padding: 0px 20px;
+		display: flex;
+		.tabs {
+			width: 80px;
+			min-height: 100vh;
+			background: #f2f3f5;
+			border-radius: 16px 0px 0px 0px;
+			font-size: 13px;
+			margin-left: -20px;
+			font-weight: 400;
+			padding-top: 16px;
+			text-align: center;
+			color: #939599;
+			.tab {
+				height: 34px;
+				line-height: 34px;
+				&.active {
+					color: #000000;
+					font-weight: bold;
+					height: 34px;
+					background: #ffffff;
+					line-height: 34px;
+				}
+			}
+		}
+		.storeCon {
+			height: 730px;
+			overflow: auto;
+			// padding-bottom: 50px;
+			// overflow: hidden;
+			.merchantroCon {
+				display: flex;
+				align-items: center;
+				margin-bottom: 20px;
+				margin-top: 16px;
+				.img {
+					width: 80px;
+					height: 80px;
+					border-radius: 8px;
+					margin: 0 10px;
+				}
+				.text1 {
+					font-size: 16px;
+					font-weight: 400;
+					color: #000000;
+					line-height: 24px;
+				}
+				.text2 {
+					font-size: 13px;
+					font-weight: 400;
+					color: #939599;
+					line-height: 24px;
+					margin-bottom: 6px;
+				}
+				.price {
+					font-size: 14px;
+					font-weight: bold;
+					color: #ff7f1f;
+					line-height: 24px;
+				}
+				.addcon {
+					display: flex;
+					align-items: center;
+					.text {
+						width: 24px;
+						height: 24px;
+						text-align: center;
+						line-height: 24px;
+						background: #f5f7fa;
+						margin: 0 4px;
+					}
+					.add {
+						width: 24px;
+						height: 24px;
+						margin-top: 4px;
+						line-height: 24px;
+					}
+				}
+			}
+		}
+	}
+	/deep/ .u-btn {
+		width: 100px;
+		height: 48px;
+		font-size: 16px;
+		border-radius: 4px;
+	}
+	.btn {
+		display: flex;
+		align-items: center;
+		position: fixed;
+		justify-content: space-between;
+		left: 0;
+		right: 0;
+		bottom: 0;
+		z-index: 100;
+		padding: 6px 20px;
+		padding-bottom: 34px;
+		padding-bottom: calc(34px + constant(safe-area-inset-bottom)); // 兼容 IOS<11.2
+		padding-bottom: calc(34px + env(safe-area-inset-bottom)); // 兼容 IOS>=11.2
+		background-color: #ffffff;
+		.btn2 {
+			color: #214bbe;
+			text-align: center;
+		}
+		.bottom {
+			display: flex;
+			align-items: center;
+			padding: 12px 0 6px;
+			.name {
+				font-size: 16px;
+				font-weight: bold;
+				color: #214bbe;
+				line-height: 24px;
+				margin-left: 4px;
+			}
+			.imgBox {
+				width: 24px;
+				height: 24px;
+			}
+			.border {
+				width: 1px;
+				height: 30px;
+				background: #e5e5e5;
+				border-radius: 1px;
+				margin-left: 14px;
+			}
+		}
+	}
+}
+</style>

+ 244 - 0
pages/Applicationshop.vue

@@ -0,0 +1,244 @@
+<template>
+	<view>
+		<titlenav></titlenav>
+		<view class="page">
+			<view class="page-top">
+				<view class="text1 text2">您还没有店铺</view>
+				<view class="text1">立即创建一个店铺吧</view>
+				<view class="text3">申请所填信息仅用于平台店家审核使用,决不做其他用途</view>
+				<view class="text3 text4">填写店铺信息</view>
+			</view>
+			<u-cell-group :border="false">
+				<u-field name="店家名称" label="店家名称" placeholder="请输入您店铺的名称" v-model="form.storeName" />
+				<u-field name="详细地址" label="详细地址" placeholder="请输入详细地址"v-model="form.address" />
+				<u-field name="经营品类" label="经营品类" placeholder="请输入经营品类" v-model="form.management" />
+				<u-field type="number" name="联系方式" label="联系方式" placeholder="请输入您的手机号码" v-model="form.phone" />
+				<u-field type="text" label="法人姓名" placeholder="请输入真实姓名" v-model="form.name" />
+				<u-field type="number" label="身份证号" placeholder="请输入18位身份证号" v-model="form.idNo" />
+				<view class="imgBox">
+					身份证照片(正)
+					<img-uploader ref="idNoImage" v-model="form.idNoImage"></img-uploader>
+				</view>
+				<view class="imgBox">
+					身份证照片(反)
+					<img-uploader ref="idNoBackImage" v-model="form.idNoBackImage"></img-uploader>
+				</view>
+				<view class="imgBox">
+					营业执照
+					<img-uploader class="imgBox2" ref="licenseImage" v-model="form.licenseImage"></img-uploader>
+				</view>
+				<view class="imgBox">
+					店铺环境
+					<img-uploader class="imgBox2" ref="storeenvironment" v-model="form.storeenvironment"></img-uploader>
+				</view>
+				<view class="btn"><u-button block type="primary" :disabled="!next"  @click="submit">提交审核</u-button></view>
+			</u-cell-group>
+		</view>
+	</view>
+</template>
+
+<script>
+import ImgUploader from '../components/ImgUploader.vue';
+import Titlenav from '../components/Titlenav.vue';
+import { mapState } from 'vuex';
+export default {
+	components: { ImgUploader,Titlenav },
+	data() {
+		return {
+			form: {
+				storeName: '',
+				phone: '',
+				name: '',
+				address: '',
+				management: '',
+				idNo: '',
+				idNoImage: '',
+				idNoBackImage: '',
+				licenseImage: '',
+				storeenvironment: ''
+			},
+			form2: {
+				storeName: '',
+				phone: '',
+				name: '',
+				address: '',
+				management: '',
+				idNo: '',
+				idNoImage: '',
+				idNoBackImage: '',
+				licenseImage: '',
+				storeenvironment: ''
+			}
+		};
+	},
+	computed: {
+		...mapState(['systemInfo']),
+		next() {
+			return (
+				!!this.form.storeName &&
+				!!this.form.phone &&
+				!!this.form.name &&
+				!!this.form.address &&
+				!!this.form.management &&
+				!!this.form.idNo &&
+				!!this.form.idNoImage &&
+				!!this.form.idNoBackImage &&
+				!!this.form.licenseImage &&
+				!!this.form.storeenvironment
+			);
+		}
+	},
+	methods: {
+		submit() {
+			console.log(this.form)
+			if (!this.form.storeName) {
+				this.toast('请输入店家名称');
+				return;
+			}
+			if (!/^1[3-9]\d{9}$/.test(this.form.phone)) {
+				this.toast('请输入正确手机号');
+				return;
+			}
+
+			if (!this.form.name) {
+				this.toast('请输入真实姓名');
+				return;
+			}
+			if (!this.form.management) {
+				this.toast('请输入经营品类');
+				return;
+			}
+			if (!this.form.address) {
+				this.toast('请输入详细地址');
+				return;
+			}
+			if (!/(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/.test(this.form.idNo)) {
+				this.toast('请输入正确身份证');
+				return;
+			}
+			if (!this.form.idNoImage) {
+				this.toast('请上传身份证照片(正面照)');
+				return;
+			}
+			if (!this.form.idNoBackImage) {
+				this.toast('请上传身份证照片(反面照)');
+				return;
+			}
+			if (!this.form.licenseImage) {
+				this.toast('请上传营业执照');
+				return;
+			}
+			if (!this.form.storeenvironment) {
+				this.toast('请上传店铺环境');
+				return;
+			}
+			let data = { ...this.form };
+			if (!data.id) {
+				data.userId = this.$store.state.userInfo.id;
+			}
+			// data.status = 'CREATED';
+			// this.showLoading();
+			// this.$http.postJson('/storeAuthentication/save', data).then(res => {
+			//     this.toast('申请成功', 'success');
+
+			//     setTimeout(() => {
+			//         wx.redirectTo({
+			//             url: '/pages/store/review'
+			//         });
+			//     }, 1500);
+			// });
+		},
+		loginMethods() {
+			// console.log('init');
+			// this.$http
+			//     .postJson('/storeAuthentication/all', {
+			//         query: { userId: this.$store.state.userInfo.id, del: false }
+			//     })
+			//     .then(res => {
+			//         if (!res.empty) {
+			//             this.form2 = res.content[0];
+			//             this.form = res.content[0];
+			//             this.$refs.idNoImage.setFile(res.content[0].idNoImage);
+			//             this.$refs.idNoBackImage.setFile(res.content[0].idNoBackImage);
+			//             this.$refs.licenseImage.setFile(res.content[0].licenseImage);
+			//             this.$refs.storeenvironment.setFile(res.content[0].storeenvironment);
+			//         }
+			//     });
+		}
+	}
+};
+</script>
+
+<style lang="scss" scoped>
+/deep/ .u-btn {
+		height: 48px;
+		font-size: 14px;
+		margin: 6px 0;
+	}
+.page {
+	padding-bottom: 100px;
+}
+.page-top {
+	padding-left: 30px;
+	.text1 {
+		font-size: 24px;
+		font-weight: bold;
+		color: #000000;
+		line-height: 33px;
+		&.text2 {
+			margin-top: 10px;
+		}
+	}
+	.text3 {
+		font-size: 13px;
+		font-weight: 400;
+		color: #aaabad;
+		line-height: 22px;
+		margin-top: 9px;
+		&.text4 {
+			font-size: 16px;
+			font-weight: bold;
+			margin-top: 30px;
+		}
+	}
+}
+.imgBox {
+	display: flex;
+	margin: 20px 0 20px 30px;
+	font-size: 14px;
+	font-weight: bold;
+	color: #000000;
+	line-height: 28px;
+	.imgBox2 {
+		margin-left: 40px;
+	}
+}
+/deep/ .u-field {
+	padding: 26px 0;
+	margin: 0 30px;
+}
+/deep/.u-label {
+	color: #000000;
+	font-size: 14px;
+	font-weight: bold;
+	flex: 0 0 74px !important;
+}
+/deep/ .uni-input-placeholder {
+	font-size: 13px;
+	font-weight: 400;
+	color: #aaabad;
+	line-height: 24px;
+}
+.btn {
+	position: fixed;
+	left: 0;
+	right: 0;
+	bottom: 0;
+	z-index: 100;
+	padding: 6px 43px;
+	padding-bottom: 34px;
+	padding-bottom: calc(34px + constant(safe-area-inset-bottom)); // 兼容 IOS<11.2
+	padding-bottom: calc(34px + env(safe-area-inset-bottom)); // 兼容 IOS>=11.2
+	background-color: #FFFFFF;
+}
+</style>

+ 117 - 0
pages/Authentication.vue

@@ -0,0 +1,117 @@
+<template>
+	<view>
+		<titlenav></titlenav>
+		<view class="authentication">
+			<view class="title">实名认证</view>
+			<view class="text">
+				账户实名认证后不能修改,
+				<span>请使用本人身份信息完成认证</span>
+			</view>
+			<view class="text1">提现金额</view>
+			<view class="inpt"><input type="number" value="" placeholder="请输入提现金额" v-model="money" /></view>
+			<view class="text1">身份证号</view>
+			<view class="inpt"><input type="number" value="" placeholder="请输入" v-model="idNo" /></view>
+			<view class="text2">
+				已同意并阅读,
+				<span class="text3">支付服务相关协议</span>
+			</view>
+			<u-button type="primary" :disabled="!canSubmit" @click="submit">同意协议并继续</u-button>
+		</view>
+	</view>
+</template>
+
+<script>
+import { mapState } from 'vuex';
+import Titlenav from '../components/Titlenav.vue';
+export default {
+	components: {
+		Titlenav
+	},
+	data() {
+		return {
+			idNo: '',
+			money: ''
+		};
+	},
+	computed: {
+		...mapState(['systemInfo']),
+		canSubmit() {
+			if (this.idNo && this.money) {
+				return true;
+			} else {
+				return false;
+			}
+		}
+	},
+	methods: {
+		submit(){
+			if (!/(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/.test(this.idNo)) {
+				this.toast('请输入正确身份证');
+				return;
+			}
+			uni.navigateTo({
+				url: '/pages/Walletdetails'
+			});
+		}
+	}
+};
+</script>
+
+<style lang="scss" scoped>
+.authentication {
+	/deep/ .uni-input-placeholder {
+		font-size: 13px;
+		font-weight: 400;
+		color: #aaabad;
+		line-height: 24px;
+	}
+	/deep/ .u-btn {
+		height: 48px;
+		font-size: 16px;
+		text-align: center;
+		margin: 0 23px;
+	}
+	margin: 10px 20px 0;
+	.title {
+		font-size: 24px;
+		font-weight: bold;
+		color: #000000;
+		line-height: 33px;
+	}
+	.text {
+		font-size: 13px;
+		font-weight: 400;
+		color: #c8c9cc;
+		line-height: 22px;
+		margin-bottom: 20px;
+	}
+	span {
+		color: #000000;
+		font-weight: bold;
+		font-size: 13px;
+	}
+	.text1 {
+		font-size: 14px;
+		font-weight: bold;
+		color: #000000;
+		line-height: 20px;
+	}
+	.inpt {
+		background: #f5f7fa;
+		border-radius: 8px;
+		padding: 12px 16px;
+		margin: 10px 0 16px;
+	}
+	.text2 {
+		font-size: 13px;
+		font-weight: 400;
+		color: #c8c9cc;
+		line-height: 22px;
+		text-align: center;
+		margin: 30px 0 10px;
+	}
+	.text3 {
+		color: #214bbe;
+	}
+}
+</style>

+ 228 - 0
pages/Evaluate.vue

@@ -0,0 +1,228 @@
+<template>
+	<view>
+		<titlenav></titlenav>
+		<view class="evaluate">
+			<view class="title">评价管理</view>
+			<view class="tab">
+				<view class="tabs" :class="{ active: item === active }" v-for="(item, index) in tabs" :key="index" @click="tab(item)">
+					{{ item }}
+					<view style="margin-top:12px"><view class="slip" :class="{ active: item === active }"></view></view>
+				</view>
+			</view>
+			<view class="evaluateCon" v-for="(item, index) in lists" :key="index">
+				<!-- <image v-if="userInfo" class="imgBox" :src="userInfo.avatar" ></image> -->
+				<image class="evaluateImg" src="https://bpic.588ku.com/illus_water_img/21/07/05/ecab6de5a7b2972500459ba95cf97deb.jpg"></image>
+				<view class="conr">
+					<view class="name">
+						<!-- <view class="txt1" v-if="userInfo">{{ userInfo.nickname }}</view> -->
+						<view class="text1">奥斯特洛夫斯基</view>
+						<view class="text2">{{item.createdAt}}</view>
+					</view>
+					<view class="give">
+						<image class="imgBox2" src="https://ticket-exchange.oss-cn-hangzhou.aliyuncs.com/image/2021-09-06-11-21-07FIiyRFOr.png"></image>
+						<view class="text1">赞了该商品</view>
+					</view>
+					<view class="remark">{{item.remark}}</view>
+					<view class="image">
+						<view><image class="img" @click="preview(item.image, getImgs(lists))" :src="item.image" alt=""></image></view>
+					</view>
+					<view class="Yreply" v-if="item.reply">
+						<text><span>已回复:</span>{{item.reply}}</text>
+						<view class="dele" @click="dele">删除</view>
+					</view>
+					<view class="reply" @click="reply" v-else>
+						<image class="img" src="https://ticket-exchange.oss-cn-hangzhou.aliyuncs.com/image/2021-09-26-17-12-07ypKLdnaL.png"></image>
+						<text class="text1">回复</text>
+					</view>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+import { mapState } from 'vuex';
+import Titlenav from '../components/Titlenav.vue';
+export default {
+	components: {
+		Titlenav
+	},
+	data() {
+		return {
+			active: '全部',
+			tabs: ['全部', '已回复', '未回复'],
+			lists: [
+				{
+					image: 'https://ticket-exchange.oss-cn-hangzhou.aliyuncs.com/image/2021-08-13-15-54-36URxMKUXs.jpg',
+					reply:'感谢您的认可,祝您生活愉快,欢迎下次点餐,欢迎下次点餐…',
+					remark:'好吃',
+					createdAt: '2021-05-20',
+				},
+				{
+					image: 'https://ticket-exchange.oss-cn-hangzhou.aliyuncs.com/image/2021-08-13-15-56-45UCHrCoTS.gif',
+					reply:'',
+					remark:'不好吃',
+					createdAt: '2021-05-21',
+				}
+			]
+		};
+	},
+	computed: {
+		...mapState(['systemInfo', 'userInfo'])
+	},
+	methods: {
+		tab(item) {
+			this.active = item;
+		},
+		getImgs(list) {
+			return list.map(item => {
+				return item.image;
+			});
+		},
+		dele(){},
+		reply(){}
+	}
+};
+</script>
+
+<style lang="scss" scoped>
+.evaluate {
+	margin: 10px 20px 0 20px;
+	.title {
+		font-size: 24px;
+		font-weight: bold;
+		color: #000000;
+		line-height: 33px;
+		margin-bottom: 20px;
+	}
+	.tab {
+		display: flex;
+		align-items: center;
+		width: 100%;
+		padding: 0 7px;
+		background: #fff;
+		height: 44px;
+		.tabs {
+			font-size: 16px;
+			font-weight: 400;
+			color: #c8c9cc;
+			line-height: 22px;
+			z-index: 88;
+			margin: 9px 34px 0 0;
+			&.active {
+				font-size: 18px;
+				color: #214bbe;
+				font-weight: bold;
+			}
+			.slip {
+				width: 16px;
+				margin: 0 auto;
+				&.active {
+					border-bottom: 2px solid #214bbe;
+					border-radius: 2px;
+				}
+			}
+		}
+	}
+	.evaluateCon {
+		display: flex;
+		margin-top: 20px;
+		border-bottom: 1px solid #f5f7fa;
+		.evaluateImg {
+			width: 41px;
+			height: 36px;
+			border-radius: 50%;
+			margin-right: 8px;
+			display: block;
+		}
+		.conr {
+			width: 100%;
+			.name {
+				display: flex;
+				align-items: center;
+				font-weight: 400;
+				justify-content: space-between;
+				.text1 {
+					font-size: 15px;
+					color: #000000;
+					line-height: 24px;
+				}
+				.text2 {
+					font-size: 13px;
+					font-weight: 400;
+					color: #939599;
+					line-height: 22px;
+				}
+			}
+			.give {
+				display: flex;
+				align-items: center;
+				margin: 4px 0;
+				.imgBox2 {
+					width: 16px;
+					height: 16px;
+					border-radius: 0;
+				}
+				.text1 {
+					font-size: 13px;
+					font-weight: 400;
+					color: #939599;
+					line-height: 24px;
+					margin-left: 4px;
+				}
+			}
+			.remark {
+				font-size: 13px;
+				font-weight: 400;
+				color: #000000;
+				line-height: 22px;
+			}
+			.image {
+				display: flex;
+				align-items: center;
+				.img {
+					width: 80px;
+					height: 80px;
+					border-radius: 8px;
+					margin: 5px 12px 0 0;
+				}
+			}
+		}
+		.reply {
+			display: flex;
+			align-items: center;
+			place-content: flex-end;
+			margin-bottom: 9px;
+			.img {
+				width: 24px;
+				height: 24px;
+			}
+			.text1 {
+				font-size: 14px;
+				font-weight: bold;
+				color: #214bbe;
+				line-height: 24px;
+				margin-left: 6px;
+			}
+		}
+		.Yreply{
+			width: 100%;
+			padding: 12px;
+			font-size: 13px;
+			font-weight: 400;
+			color: #000000;
+			background: #F5F7FA;
+			border-radius: 0px 8px 8px 8px;
+			line-height: 22px;
+			margin: 16px 0 10px;
+			span{
+				color: #939599;
+			}
+			.dele{
+				color: #939599;
+				text-align: right;
+			}
+		}
+	}
+}
+</style>

+ 11 - 6
pages/Home.vue

@@ -10,13 +10,13 @@
 
 		<u-row gutter="0" class="menu">
 			<u-col span="4">
-				<view class="menu-item">
+				<view class="menu-item" @click="navigateTo('/pages/Addstores')">
 					<image src="../static/uview/imgs/info_icon_01.png" mode="widthFix"></image>
 					<text>商品管理</text>
 				</view>
 			</u-col>
 			<u-col span="4">
-				<view class="menu-item">
+				<view class="menu-item" @click="navigateTo('/pages/Wallet')">
 					<image src="../static/uview/imgs/info_icon_02.png" mode="widthFix"></image>
 					<text>财务中心</text>
 				</view>
@@ -28,19 +28,19 @@
 				</view>
 			</u-col>
 			<u-col span="4">
-				<view class="menu-item">
+				<view class="menu-item" @click="navigateTo('/pages/Evaluate')">
 					<image src="../static/uview/imgs/info_icon_04.png" mode="widthFix"></image>
 					<text>评价管理</text>
 				</view>
 			</u-col>
 			<u-col span="4">
-				<view class="menu-item">
+				<view class="menu-item" @click="navigateTo('/pages/News')">
 					<image src="../static/uview/imgs/info_icon_05.png" mode="widthFix"></image>
 					<text>消息中心</text>
 				</view>
 			</u-col>
 			<u-col span="4">
-				<view class="menu-item">
+				<view class="menu-item" @click="tool">
 					<image src="../static/uview/imgs/info_icon_06.png" mode="widthFix"></image>
 					<text>店铺工具</text>
 				</view>
@@ -176,12 +176,17 @@ export default {
 	methods: {
 		changeTabs(index) {
 			this.nowTab = index;
+		},
+		tool(){
+			uni.switchTab({
+				url: '/pages/Mine'
+			});
 		}
 	}
 };
 </script>
 
-<style lang="scss">
+<style lang="scss" scoped>
 .container {
 	padding: 0 20px 50px;
 }

+ 129 - 0
pages/Login.vue

@@ -0,0 +1,129 @@
+<template>
+	<view :style="{ paddingTop: `${systemInfo.statusBarHeight}px` }">
+		<view class="login">
+			<view class="text1" @click="codeFn">{{ flag ? '账号密码登陆' : '验证码登录' }}</view>
+			<view class="title">{{ flag ? '验证码登录' : '账号密码登陆' }}</view>
+			<view class="content">
+				<image src="https://ticket-exchange.oss-cn-hangzhou.aliyuncs.com/image/2021-09-23-15-00-09YCjgycbL.png" mode="widthFix"></image>
+				<view class="border"><input class="inputNm" placeholder="请输入手机号" type="number" v-model="form.phone" /></view>
+			</view>
+			<view class="content content2" v-if="flag">
+				<image src="https://ticket-exchange.oss-cn-hangzhou.aliyuncs.com/image/2021-09-23-15-56-51fUQmIfWc.png" mode="widthFix"></image>
+				<view class="border code">
+					<input class="inputNm" placeholder="请输入验证码" type="number" v-model="form.code" />
+					<view class="code2" @click="send">{{ time === 0 ? '发送验证码' : `重新发送${time}s` }}</view>
+				</view>
+			</view>
+			<view class="content content2" v-if="!flag">
+				<image src="https://ticket-exchange.oss-cn-hangzhou.aliyuncs.com/image/2021-09-23-15-00-32OuHmKLtr.png" mode="widthFix"></image>
+				<view class="border"><input class="inputNm" placeholder="请输入密码" type="number" v-model="form.password" /></view>
+			</view>
+			<view class="text1" v-if="!flag" @click="navigateTo('/pages/Register?forget=' + true)">忘记密码?</view>
+			<u-button type="primary" @click="Jump">登录</u-button>
+			<view class="btn" @click="navigateTo('/pages/Register')">暂无账号,立即注册</view>
+		</view>
+	</view>
+</template>
+
+<script>
+import { mapState } from 'vuex';
+export default {
+	computed: {
+		...mapState(['systemInfo'])
+	},
+	data() {
+		return {
+			form: {},
+			flag: false,
+			time: 0
+		};
+	},
+	methods: {
+		codeFn() {
+			this.flag = !this.flag;
+		},
+		Jump() {
+			uni.switchTab({
+				url: '/pages/Mine'
+			});
+		},
+		send() {
+			console.log(this.form);
+			this.sendCode(this.form.phone);
+		}
+	}
+};
+</script>
+
+<style lang="scss" scoped>
+.login {
+	/deep/ .uni-input-placeholder {
+		font-size: 14px;
+		font-weight: 400;
+		color: #c8c9cc;
+		line-height: 24px;
+	}
+	/deep/ .u-btn {
+		height: 48px;
+		font-size: 14px;
+		margin: 30px 0 12px 0;
+	}
+	margin: 54px 45px 0;
+	.text1 {
+		font-size: 18px;
+		font-weight: 400;
+		color: #c8c9cc;
+		line-height: 25px;
+		text-align: right;
+	}
+	.title {
+		font-size: 24px;
+		font-weight: bold;
+		color: #000000;
+		line-height: 33px;
+		margin: 10px 0 28px 0;
+	}
+	.content {
+		display: flex;
+		align-items: center;
+		justify-content: space-between;
+		.border {
+			border-bottom: 1px solid #f2f3f5;
+			width: 100%;
+			margin-left: 10px;
+			&.code {
+				display: flex;
+				align-items: center;
+				justify-content: space-between;
+			}
+			.inputNm {
+				height: 44px;
+			}
+			.code2 {
+				font-size: 13px;
+				font-weight: 400;
+				color: #214bbe;
+				line-height: 18px;
+			}
+		}
+		&.content2 {
+			margin: 20px 0 6px;
+		}
+		image {
+			width: 24px;
+			height: 24px;
+		}
+	}
+	.btn {
+		height: 48px;
+		background: #ffffff;
+		border-radius: 4px;
+		border: 1px solid #214bbe;
+		font-size: 14px;
+		font-weight: bold;
+		color: #214bbe;
+		line-height: 48px;
+		text-align: center;
+	}
+}
+</style>

+ 145 - 0
pages/Mine.vue

@@ -0,0 +1,145 @@
+<template>
+	<view class="top" :style="{ paddingTop: `${systemInfo.statusBarHeight}px` }">
+		<view class="head">
+			<view>
+				<view class="left">
+					<view class="title">益禾堂</view>
+					<text class="text1">已认证</text>
+				</view>
+				<text class="text2">南京市**学校江宁学院一楼食堂</text>
+			</view>
+			<image class="imgBox" src="https://bpic.588ku.com/illus_water_img/21/07/05/ecab6de5a7b2972500459ba95cf97deb.jpg"></image>
+		</view>
+		<view class="content">
+			<u-cell-group :border="false" class="from">
+				<view class="list" @click="navigateTo('/pages/Storesettings')">
+					<image class="imgBox2" src="https://ticket-exchange.oss-cn-hangzhou.aliyuncs.com/image/2021-09-27-15-13-23CQyDfDRP.png"></image>
+					<u-cell-item title="店铺设置" is-link></u-cell-item>
+				</view>
+				<view class="list" @click="navigateTo('/pages/Applicationshop')">
+					<image class="imgBox2" src="https://ticket-exchange.oss-cn-hangzhou.aliyuncs.com/image/2021-09-27-15-13-44aNgKvtbx.png"></image>
+					<u-cell-item title="认证信息" is-link></u-cell-item>
+				</view>
+				<view class="list" @click="navigateTo('/pages/Standard')">
+					<image class="imgBox2" src="https://ticket-exchange.oss-cn-hangzhou.aliyuncs.com/image/2021-09-27-15-14-29lqHkdIPq.png"></image>
+					<u-cell-item title="交易规范" is-link></u-cell-item>
+				</view>
+				<view class="list" @click="navigateTo('/pages/Setup')">
+					<image class="imgBox2" src="https://ticket-exchange.oss-cn-hangzhou.aliyuncs.com/image/2021-09-27-15-15-07XGsWDCTu.png"></image>
+					<u-cell-item title="设置" is-link></u-cell-item>
+				</view>
+			</u-cell-group>
+		</view>
+	</view>
+</template>
+<script>
+import { mapState } from 'vuex';
+export default {
+	data() {
+		return {
+		};
+	},
+	computed: {
+		...mapState(['systemInfo'])
+	},
+	methods: {
+	}
+};
+</script>
+<style lang="scss" scoped>
+.top {
+	background: #214bbe;
+	height: 205px;
+	.head{
+		display: flex;
+		align-items: center;
+		justify-content: space-between;
+		margin: 54px 30px 20px;
+		.left{
+			display: flex;
+			align-items: center;
+			.title{
+				font-size: 22px;
+				font-weight: bold;
+				color: #FFFFFF;
+				line-height: 26px;
+			}
+			.text1{
+				width: 64px;
+				height: 20px;
+				background: rgba(255, 255, 255, 0.2);
+				border-radius: 2px;
+				font-size: 13px;
+				font-weight: 400;
+				color: #FFFFFF;
+				line-height: 20px;
+				text-align: center;
+				margin-left: 10px;
+			}
+		}
+		.text2{
+			font-size: 13px;
+			font-weight: 400;
+			color: #A7BEFF;
+			line-height: 24px;
+			margin-top: 6px;
+		}
+		.imgBox{
+			width: 70px;
+			height: 70px;
+			border-radius: 50%;
+		}
+	}
+	.content {
+		background: #ffffff;
+		border-radius: 16px 16px 0px 0px;
+		padding: 20px;
+		display: flex;
+		align-items: center;
+	}
+	.from{
+		/deep/ .u-iconfont {
+			font-size: 14px !important;
+		}
+		/deep/ .u-cell_title {
+			font-size: 14px;
+		}
+		/deep/ .u-cell {
+			padding: 20px 0;
+			color: #000000;
+			font-weight: bold;
+		}
+		/deep/ .u-cell__value {
+			color: #000000;
+			font-weight: 400;
+		}
+		/deep/ .u-field {
+			padding: 23px 0;
+			color: #000000;
+			font-weight: bold;
+			text-align: right;
+		}
+		/deep/ .uni-input-input {
+			text-align: right;
+			font-weight: 400;
+		}
+		/deep/ .u-label {
+			span {
+				width: 90px;
+			}
+		}
+		/deep/ .u-cell__value{
+			height: 27px;
+		}
+		.list{
+			display: flex;
+			align-items: center;
+			.imgBox2{
+				width: 27px;
+				height: 24px;
+				margin-right: 14px;
+			}
+		}
+	}
+}
+</style>

+ 117 - 0
pages/Modifypass.vue

@@ -0,0 +1,117 @@
+<template>
+	<view>
+		<titlenav></titlenav>
+		<view class="register">
+			<view class="title">修改密码</view>
+			<view class="name">修改密码后立即生效,下次登录请使用新密码</view>
+			<view class="content content2">
+				<image src="https://ticket-exchange.oss-cn-hangzhou.aliyuncs.com/image/2021-09-23-15-00-32OuHmKLtr.png" mode="widthFix"></image>
+				<view class="border"><input class="inputNm" placeholder="请输入旧密码" type="number" v-model="form.usedpassword" /></view>
+			</view>
+			<view class="content content2">
+				<image src="https://ticket-exchange.oss-cn-hangzhou.aliyuncs.com/image/2021-09-23-15-00-32OuHmKLtr.png" mode="widthFix"></image>
+				<view class="border"><input class="inputNm" placeholder="请输入新密码" type="number" v-model="form.newpassword" /></view>
+			</view>
+			<view class="content content2">
+				<image src="https://ticket-exchange.oss-cn-hangzhou.aliyuncs.com/image/2021-09-23-15-00-32OuHmKLtr.png" mode="widthFix"></image>
+				<view class="border"><input class="inputNm" placeholder="请再次输入新密码" type="number" v-model="form.password" /></view>
+			</view>
+			<u-button type="primary">确定</u-button>
+		</view>
+	</view>
+</template>
+
+<script>
+import { mapState } from 'vuex';
+import Titlenav from '../components/Titlenav.vue';
+export default {
+	components: {
+		Titlenav
+	},
+	data() {
+		return {
+			form: {},
+			time: 0,
+			forget: false
+		}
+	},
+	onLoad(options) {
+		this.forget = options.forget;
+	},
+	computed: {
+		...mapState(['systemInfo'])
+	},
+	methods: {
+		send() {
+			console.log(this.form);
+			this.sendCode(this.form.phone);
+		}
+	}
+};
+</script>
+
+<style lang="scss" scoped>
+.register {
+	/deep/ .uni-input-placeholder {
+		font-size: 14px;
+		font-weight: 400;
+		color: #c8c9cc;
+		line-height: 24px;
+	}
+	/deep/ .u-btn {
+		height: 48px;
+		font-size: 14px;
+		margin: 60px 26px 12px;
+	}
+	margin: 10px 20px 0;
+	.title {
+		font-size: 24px;
+		font-weight: bold;
+		color: #000000;
+		line-height: 33px;
+		margin-bottom: 10px;
+	}
+	.name {
+		font-size: 13px;
+		font-weight: 400;
+		color: #aaabad;
+		line-height: 22px;
+		margin-bottom: 50px;
+	}
+	.phone {
+		margin: 0 26px;
+		.text1 {
+			font-size: 20px;
+			font-weight: bold;
+			color: #000000;
+			line-height: 28px;
+		}
+		.text2 {
+			font-size: 14px;
+			font-weight: 400;
+			color: #939599;
+			line-height: 24px;
+		}
+	}
+	.content {
+		display: flex;
+		align-items: center;
+		margin: 0 26px;
+		.border {
+			border-bottom: 1px solid #f2f3f5;
+			width: 100%;
+			margin-left: 10px;
+			.inputNm {
+				height: 44px;
+			}
+		}
+		&.content2 {
+			margin: 20px 26px 6px;
+		}
+		image {
+			width: 24px;
+			height: 24px;
+		}
+	}
+}
+</style>

+ 131 - 0
pages/Modifyphnoe.vue

@@ -0,0 +1,131 @@
+<template>
+	<view>
+		<titlenav></titlenav>
+		<view class="register">
+			<view class="title">{{ forget ? '修改手机号' : '绑定新号码' }}</view>
+			<view class="name">{{ forget ? '修改手机号即同时修改登录账户名称' : '请绑定新的号码,修改后登录即用新号码' }}</view>
+			<view class="content" v-if="!forget">
+				<image src="https://ticket-exchange.oss-cn-hangzhou.aliyuncs.com/image/2021-09-23-15-00-09YCjgycbL.png" mode="widthFix"></image>
+				<view class="border"><input class="inputNm" placeholder="请输入手机号" type="number" v-model="form.phone" /></view>
+			</view>
+			<view class="phone" v-if="forget">
+				<view class="text1">189****7474</view>
+				<view class="text2">修改手机号需先验证当前手机号</view>
+			</view>
+			<view class="content content2">
+				<image src="https://ticket-exchange.oss-cn-hangzhou.aliyuncs.com/image/2021-09-23-15-56-51fUQmIfWc.png" mode="widthFix"></image>
+				<view class="border code">
+					<input class="inputNm" placeholder="请输入验证码" type="number" v-model="form.code" />
+					<view class="code2" @click="send">{{ time === 0 ? '发送验证码' : `重新发送${time}s` }}</view>
+				</view>
+			</view>
+			<u-button type="primary">{{ forget ? '下一步' : '确定' }}</u-button>
+		</view>
+	</view>
+</template>
+
+<script>
+import { mapState } from 'vuex';
+import Titlenav from '../components/Titlenav.vue';
+export default {
+	components: {
+		Titlenav
+	},
+	data() {
+		return {
+			form: {},
+			time: 0,
+			forget: false
+		};
+	},
+	onLoad(options) {
+		this.forget = options.forget;
+	},
+	computed: {
+		...mapState(['systemInfo'])
+	},
+	methods: {
+		send() {
+			console.log(this.form);
+			this.sendCode(this.form.phone);
+		}
+	}
+};
+</script>
+
+<style lang="scss" scoped>
+.register {
+	/deep/ .uni-input-placeholder {
+		font-size: 14px;
+		font-weight: 400;
+		color: #c8c9cc;
+		line-height: 24px;
+	}
+	/deep/ .u-btn {
+		height: 48px;
+		font-size: 14px;
+		margin: 60px 26px 12px;
+	}
+	margin: 10px 20px 0;
+	.title {
+		font-size: 24px;
+		font-weight: bold;
+		color: #000000;
+		line-height: 33px;
+		margin-bottom: 10px;
+	}
+	.name {
+		font-size: 13px;
+		font-weight: 400;
+		color: #aaabad;
+		line-height: 22px;
+		margin-bottom: 50px;
+	}
+	.phone {
+		margin: 0 26px;
+		.text1 {
+			font-size: 20px;
+			font-weight: bold;
+			color: #000000;
+			line-height: 28px;
+		}
+		.text2 {
+			font-size: 14px;
+			font-weight: 400;
+			color: #939599;
+			line-height: 24px;
+		}
+	}
+	.content {
+		display: flex;
+		align-items: center;
+		margin: 0 26px;
+		.border {
+			border-bottom: 1px solid #f2f3f5;
+			width: 100%;
+			margin-left: 10px;
+			&.code {
+				display: flex;
+				align-items: center;
+				justify-content: space-between;
+			}
+			.inputNm {
+				height: 44px;
+			}
+			.code2 {
+				font-size: 13px;
+				font-weight: 400;
+				color: #214bbe;
+				line-height: 18px;
+			}
+		}
+		&.content2 {
+			margin: 20px 26px 6px;
+		}
+		image {
+			width: 24px;
+			height: 24px;
+		}
+	}
+}
+</style>

+ 56 - 0
pages/News.vue

@@ -0,0 +1,56 @@
+<template>
+	<view>
+		<titlenav></titlenav>
+		<view class="news">
+			<view class="title">消息中心</view>
+			<block>
+				<u-swipe-action :right-width="65">
+					<news-info></news-info>
+					<div slot="right" class="del" @click="closeNews(item)">删除</div>
+				</u-swipe-action>
+			</block>
+		</view>
+	</view>
+</template>
+
+<script>
+import { mapState } from 'vuex';
+import Titlenav from '../components/Titlenav.vue';
+import NewsInfo from '../components/NewsInfo.vue';
+export default {
+	components: {
+		Titlenav,
+		NewsInfo
+	},
+	data() {
+		return {};
+	},
+	computed: {
+		...mapState(['systemInfo'])
+	},
+	methods: {}
+};
+</script>
+
+<style lang="scss" scoped>
+.news {
+	margin: 10px 20px 0;
+	.title {
+		font-size: 24px;
+		font-weight: bold;
+		color: #000000;
+		line-height: 33px;
+		margin-bottom: 10px;
+	}
+	.del {
+	    background-color: red;
+	    height: 100%;
+	    display: flex;
+	    align-items: center;
+	    justify-content: center;
+	    color: #fff;
+	    font-size: 12px;
+	    width: 65px;
+	}
+}
+</style>

+ 59 - 5
pages/Orders.vue

@@ -1,10 +1,18 @@
 <template>
 	<view class="container">
 		<view class="top">
-			<u-tabs :current="tab" active-color="#ffffff" inactive-color="#ffffffcc" :list="tabs" :bg-color="$colors.prim" :is-scroll="false" @change="changeTab"></u-tabs>
+			<view class="tabs">
+				<view class="tab" :class="{ active: item === active }" v-for="(item, index) in tabs2" :key="index" @click="change(item)">
+					{{ item }}
+					 <div class="slip" :class="{ active: item === active }"></div>
+				</view>
+			</view>
+			<view class="tabnav">
+				<u-tabs :current="tab" active-color="#ffffff" inactive-color="#ffffffcc" :list="tabs" :bg-color="$colors.prim" :is-scroll="false" @change="changeTab"></u-tabs>
+			</view>
 		</view>
 
-		<view class="list"><order-info></order-info></view>
+		<view class="list"><order-info :status='status'></order-info></view>
 	</view>
 </template>
 
@@ -14,6 +22,8 @@ export default {
 	data() {
 		return {
 			tab: 0,
+			tabs2: ['外送订单', '用户自取'],
+			active: '外送订单',
 			tabs: [
 				{
 					name: '全部订单'
@@ -25,7 +35,10 @@ export default {
 					name: '配送中'
 				},
 				{
-					name: '待退款'
+					name: '带退款'
+				},
+				{
+					name: '待发货'
 				},
 				{
 					name: '已完成'
@@ -33,9 +46,21 @@ export default {
 			]
 		};
 	},
+	computed:{
+		status(){
+			if(this.active == '用户自取') {
+				return true
+			}else {
+				return false
+			}
+		}
+	},
 	methods: {
 		changeTab(index) {
 			this.tab = index;
+		},
+		change(e) {
+			this.active = e;
 		}
 	},
 	components: {
@@ -44,15 +69,44 @@ export default {
 };
 </script>
 
-<style lang="scss">
+<style lang="scss" scoped>
 .container {
 	background-color: #f2f4f5;
 }
+/deep/ .u-tab-item{
+	font-size: 14px !important;
+}
 .top {
 	padding: 10px 0;
 	background-color: $u-type-primary;
 	position: sticky;
-	top: 0;
+	top: 43px;
+	.tabnav{
+		padding: 0 18px;
+	}
+	.tabs {
+		padding: 13px 80px 0;
+		color: #a7beff;
+		display: flex;
+		font-size: 18px;
+		justify-content: space-between;
+		.tab {
+			&.active {
+				color: #ffffff;
+				font-weight: bold;
+			}
+			.slip {
+				width: 30px;
+				margin: 0 auto;
+				&.active {
+					border-bottom: 2px solid #ffffff;
+					border-radius: 2px;
+					margin-top: 12px;
+				}
+			}
+		}
+		margin-bottom: 16px;
+	}
 }
 
 .list {

+ 131 - 0
pages/Register.vue

@@ -0,0 +1,131 @@
+<template>
+	<view :style="{ paddingTop: `${systemInfo.statusBarHeight}px` }">
+		<image @click="navigateBack()" class="topImg" src="https://ticket-exchange.oss-cn-hangzhou.aliyuncs.com/image/2021-09-24-17-12-18wIDpEwbr.png" mode="widthFix"></image>
+		<view class="register">
+			<view class="title">{{ forget ? '设置新密码' : '用户注册' }}</view>
+			<view class="content">
+				<image src="https://ticket-exchange.oss-cn-hangzhou.aliyuncs.com/image/2021-09-23-15-00-09YCjgycbL.png" mode="widthFix"></image>
+				<view class="border"><input class="inputNm" placeholder="请输入手机号" type="number" v-model="form.phone" /></view>
+			</view>
+			<view class="content content2">
+				<image src="https://ticket-exchange.oss-cn-hangzhou.aliyuncs.com/image/2021-09-23-15-56-51fUQmIfWc.png" mode="widthFix"></image>
+				<view class="border code">
+					<input class="inputNm" placeholder="请输入验证码" type="number" v-model="form.code" />
+					<view class="code2" @click="send">{{ time === 0 ? '发送验证码' : `重新发送${time}s` }}</view>
+				</view>
+			</view>
+			<view class="content content2">
+				<image src="https://ticket-exchange.oss-cn-hangzhou.aliyuncs.com/image/2021-09-23-15-00-32OuHmKLtr.png" mode="widthFix"></image>
+				<view class="border"><input class="inputNm" placeholder="请输入密码" type="number" v-model="form.password" /></view>
+			</view>
+			<view class="content content2">
+				<image src="https://ticket-exchange.oss-cn-hangzhou.aliyuncs.com/image/2021-09-23-15-00-32OuHmKLtr.png" mode="widthFix"></image>
+				<view class="border"><input class="inputNm" placeholder="请确认密码" type="number" v-model="form.passwords" /></view>
+			</view>
+			<u-button type="primary" @click="navigateTo('/pages/Login')">立即注册</u-button>
+			<view class="btn" @click="navigateBack()">{{ forget ? '想起密码,立即登陆' : '已有账号,立即登陆' }}</view>
+		</view>
+	</view>
+</template>
+
+<script>
+import { mapState } from 'vuex';
+export default {
+	data() {
+		return {
+			form: {},
+			time: 0,
+			forget: false
+		};
+	},
+	onLoad(options) {
+		this.forget = options.forget;
+	},
+	computed: {
+		...mapState(['systemInfo'])
+	},
+	methods: {
+		send() {
+			console.log(this.form);
+			this.sendCode(this.form.phone);
+		}
+	}
+};
+</script>
+
+<style lang="scss" scoped>
+.topImg {
+	width: 28px;
+	height: 28px;
+	margin-left: 8px;
+}
+.register {
+	/deep/ .uni-input-placeholder {
+		font-size: 14px;
+		font-weight: 400;
+		color: #c8c9cc;
+		line-height: 24px;
+	}
+	/deep/ .u-btn {
+		height: 48px;
+		font-size: 14px;
+		margin: 30px 0 12px 0;
+	}
+	margin: 18px 45px 0;
+	.text1 {
+		font-size: 18px;
+		font-weight: 400;
+		color: #c8c9cc;
+		line-height: 25px;
+		text-align: right;
+	}
+	.title {
+		font-size: 24px;
+		font-weight: bold;
+		color: #000000;
+		line-height: 33px;
+		margin-bottom: 28px;
+	}
+	.content {
+		display: flex;
+		align-items: center;
+		.border {
+			border-bottom: 1px solid #f2f3f5;
+			width: 100%;
+			margin-left: 10px;
+			&.code {
+				display: flex;
+				align-items: center;
+				justify-content: space-between;
+			}
+			.inputNm {
+				height: 44px;
+			}
+			.code2 {
+				font-size: 13px;
+				font-weight: 400;
+				color: #214bbe;
+				line-height: 18px;
+			}
+		}
+		&.content2 {
+			margin: 20px 0 6px;
+		}
+		image {
+			width: 24px;
+			height: 24px;
+		}
+	}
+	.btn {
+		height: 48px;
+		background: #ffffff;
+		border-radius: 4px;
+		border: 1px solid #214bbe;
+		font-size: 14px;
+		font-weight: bold;
+		color: #214bbe;
+		line-height: 48px;
+		text-align: center;
+	}
+}
+</style>

+ 136 - 0
pages/Review.vue

@@ -0,0 +1,136 @@
+<template>
+	<view>
+		<titlenav>提交成功</titlenav>
+		<view class="review">
+			<image class="img" :src="img"></image>
+			<image v-if="status === 'fail'" class="img" :src="img2"></image>
+			<view class="content">
+				<view class="text1">{{ title }}</view>
+				<view v-if="status === 'fail'" class="text1">{{ title2 }}</view>
+				<view class="text2">{{ desc }}</view>
+				<view v-if="status === 'fail'" class="text2">{{ desc2 }}</view>
+				<template v-if="status === 'CREATED'">
+					<u-button type="primary" block @click="navigateBack()">返回</u-button>
+				</template>
+				<template v-if="status === 'fail'">
+					<u-button type="primary" block>再次申请</u-button>
+					<view class="jump">返回</view>
+				</template>
+				<view class="service">
+					客服电话 025-86868686
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+import { mapState } from 'vuex';
+import Titlenav from '../components/Titlenav.vue';
+export default {
+	components: { Titlenav },
+	data() {
+		return {
+			status: 'CREATED'
+		};
+	},
+	computed: {
+		...mapState(['systemInfo']),
+		img() {
+			const imgs = [
+				'https://ticket-exchange.oss-cn-hangzhou.aliyuncs.com/image/2021-09-26-16-06-21zVxTacze.png',
+				'https://ticket-exchange.oss-cn-hangzhou.aliyuncs.com/image/2021-09-26-16-06-37vPVQLmbQ.png'
+			];
+			return imgs[this.status === 'CREATED' ? 0 : 1];
+		},
+		img2() {
+			const imgs = [
+				'https://ticket-exchange.oss-cn-hangzhou.aliyuncs.com/image/2021-09-26-16-18-59TpOakNXi.png'
+			];
+			return imgs
+		},
+		title() {
+			const list = ['提交成功', '申请已通过'];
+			return list[this.status === 'CREATED' ? 0 : 1];
+		},
+		title2() {
+			const list = '提现申请未通过'
+			return list
+		},
+		desc() {
+			const list = ['您已成功申请提现服务,待审核成功后钱款将在72小时内提现到您的账户,请注意查收', '您已申请的提现服务已通过审核,钱款将在72小时内提现到您的账户,请注意查收'];
+			return list[this.status === 'CREATED' ? 0 : 1];
+		},
+		desc2() {
+			const list = '您已申请的提现服务未通过审核,请检账号或姓名是否输入正确'
+			return list
+		}
+	},
+	methods: {
+		// loginMethods() {
+		// }
+		// back() {
+		//     wx.redirectTo({
+		//         url: '/pages/store/apply'
+		//     });
+		// }
+	}
+};
+</script>
+
+<style lang="scss" scoped>
+	/deep/ .u-btn{
+		font-size: 16px;
+		margin: 0 10px;
+		height: 48px;
+		background: #214BBE;
+		border-radius: 4px;
+	}
+.review {
+	display: flex;
+	flex-direction: column;
+	padding: 50px 32px 100px;
+	.img {
+		width: 103px;
+		height: 78px;
+		margin: 0 auto;
+	}
+	.content {
+		display: flex;
+		flex-direction: column;
+		text-align: center;
+
+		.text1 {
+			font-size: 20px;
+			color: #000000;
+			font-weight: bold;
+			margin-top: 30px;
+		}
+
+		.text2 {
+			font-size: 14px;
+			color: #939599;
+			line-height: 24px;
+			padding: 16px 0 60px;
+		}
+		.jump{
+			height: 48px;
+			background: #F2F4F5;
+			font-size: 16px;
+			font-weight: bold;
+			color: #000000;
+			line-height: 48px;
+			text-align: center;
+			border-radius: 4px;
+			margin: 20px 10px 0;
+		}
+		.service{
+			font-size: 13px;
+			font-weight: 400;
+			color: #AAACAD;
+			line-height: 18px;
+			margin-top: 196px;
+		}
+	}
+}
+</style>

+ 87 - 0
pages/Security.vue

@@ -0,0 +1,87 @@
+<template>
+	<view>
+		<titlenav></titlenav>
+		<view class="stores">
+			<view class="title">账号安全</view>
+			<u-cell-group :border="false" class="from">
+				<u-cell-item title="修改绑定手机号" is-link @click="choosePhone">189****7474</u-cell-item>
+				<u-cell-item title="修改密码" is-link @click="navigateTo('/pages/Modifypass')"></u-cell-item>
+			</u-cell-group>
+		</view>
+	</view>
+</template>
+
+<script>
+import { mapState } from 'vuex';
+import Titlenav from '../components/Titlenav.vue';
+export default {
+	components: {
+		Titlenav
+	},
+	data() {
+		return {
+			checked: false
+		};
+	},
+	computed: {
+		...mapState(['systemInfo'])
+	},
+	methods: {
+		choosePhone() {
+			uni.navigateTo({
+				url: '/pages/Modifyphnoe?forget=true'
+			});
+		},
+	}
+};
+</script>
+
+<style lang="scss" scoped>
+.stores {
+	.from {
+		/deep/ .u-cell {
+			padding: 21.5px 0;
+			color: #000000;
+			font-weight: bold;
+		}
+		/deep/ .u-iconfont {
+			font-size: 14px !important;
+		}
+		/deep/ .u-cell_title {
+			font-size: 14px;
+		}
+		/deep/ .u-cell__value {
+			color: #000000;
+			font-weight: 400;
+		}
+		/deep/ .u-field {
+			padding: 23px 0;
+			color: #000000;
+			font-weight: bold;
+			text-align: right;
+		}
+		/deep/ .uni-input-input {
+			text-align: right;
+			font-weight: 400;
+		}
+		/deep/ .u-label {
+			span {
+				width: 90px;
+			}
+		}
+		/deep/ .u-cell__value {
+			height: 27px;
+			font-size: 14px;
+			line-height: 26.5px;
+		}
+	}
+	margin: 10px 20px 0;
+	.title {
+		font-size: 24px;
+		font-weight: bold;
+		color: #000000;
+		line-height: 33px;
+		margin-bottom: 10px;
+	}
+}
+</style>

+ 90 - 0
pages/Setup.vue

@@ -0,0 +1,90 @@
+<template>
+	<view>
+		<titlenav></titlenav>
+		<view class="stores">
+			<view class="title">设置</view>
+			<u-cell-group :border="false" class="from">
+				<u-cell-item title="店铺切换" is-link @click="changeLogo"></u-cell-item>
+				<u-cell-item title="账号安全" is-link @click="navigateTo('/pages/Security')"></u-cell-item>
+				<u-cell-item title="是否接受消息提醒" :is-link="false"><u-switch v-model="checked" @change="change()"></u-switch></u-cell-item>
+				<u-cell-item title="检查更新" is-link></u-cell-item>
+				<u-cell-item title="当前版本号" is-link>V1.2.20</u-cell-item>
+				<u-cell-item title="退出登录" is-link></u-cell-item>
+			</u-cell-group>
+		</view>
+	</view>
+</template>
+
+<script>
+import { mapState } from 'vuex';
+import Titlenav from '../components/Titlenav.vue';
+export default {
+	components: {
+		Titlenav
+	},
+	data() {
+		return {
+			checked: false
+		};
+	},
+	computed: {},
+	methods: {
+		change(status) {
+			console.log(status);
+		}
+	}
+};
+</script>
+
+<style lang="scss" scoped>
+.stores {
+	.from {
+		/deep/ .u-cell {
+			padding: 18.5px 0;
+			color: #000000;
+			font-weight: bold;
+		}
+		/deep/ .u-switch{
+			margin-top: 3px;
+		}
+		/deep/ .u-iconfont {
+			font-size: 14px !important;
+		}
+		/deep/ .u-cell__value {
+			color: #000000;
+			font-weight: 400;
+			font-size: 14px;
+			line-height: 32px;
+		}
+		/deep/ .u-cell_title {
+			font-size: 14px;
+		}
+		/deep/ .u-field {
+			padding: 23px 0;
+			color: #000000;
+			font-weight: bold;
+			text-align: right;
+		}
+		/deep/ .uni-input-input {
+			text-align: right;
+			font-weight: 400;
+		}
+		/deep/ .u-label {
+			span {
+				width: 90px;
+			}
+		}
+		/deep/ .u-cell__value {
+			height: 33px;
+		}
+	}
+	margin: 10px 20px 0;
+	.title {
+		font-size: 24px;
+		font-weight: bold;
+		color: #000000;
+		line-height: 33px;
+		margin-bottom: 10px;
+	}
+}
+</style>

+ 41 - 0
pages/Standard.vue

@@ -0,0 +1,41 @@
+<template>
+	<view :style="{ paddingTop: `${systemInfo.statusBarHeight}px` }">
+		<image @click="navigateBack()" class="topImg" src="https://ticket-exchange.oss-cn-hangzhou.aliyuncs.com/image/2021-09-24-17-12-18wIDpEwbr.png" mode="widthFix"></image>
+		<view class="stores">
+			<view class="title">交易规范</view>
+		</view>
+	</view>
+</template>
+
+<script>
+import { mapState } from 'vuex';
+export default {
+	data() {
+		return {
+			checked: false
+		};
+	},
+	computed: {
+		...mapState(['systemInfo'])
+	},
+	methods: {}
+};
+</script>
+
+<style lang="scss" scoped>
+.topImg {
+	width: 28px;
+	height: 28px;
+	margin-left: 8px;
+}
+.stores {
+	margin: 10px 20px 0;
+	.title {
+		font-size: 24px;
+		font-weight: bold;
+		color: #000000;
+		line-height: 33px;
+		margin-bottom: 10px;
+	}
+}
+</style>

+ 124 - 0
pages/Storeclassification.vue

@@ -0,0 +1,124 @@
+<template>
+	<view class="titlenav">
+		<titlenav :flag="true"></titlenav>
+		<view class="top">
+			<view class="title">添加分类</view>
+		</view>
+		<view class="content">
+			<view class="add">
+				<view class="name">分类一</view>
+				<view class="inpt"><input type="number" value="" placeholder="请输入" v-model="form.name" /></view>
+				<image class="imgBox" src="https://ticket-exchange.oss-cn-hangzhou.aliyuncs.com/image/2021-09-29-12-21-44BiuCgnNh.png" mode=""></image>
+			</view>
+			<view class="add">
+				<view class="name">分类二</view>
+				<view class="inpt"><input type="number" value="" placeholder="请输入" v-model="form.name1" /></view>
+				<image class="imgBox" src="https://ticket-exchange.oss-cn-hangzhou.aliyuncs.com/image/2021-09-29-12-21-44BiuCgnNh.png" mode=""></image>
+			</view>
+			<view class="add">
+				<view class="name">分类三</view>
+				<view class="inpt"><input type="number" value="" placeholder="请输入" v-model="form.name2" /></view>
+				<image class="imgBox" src="https://ticket-exchange.oss-cn-hangzhou.aliyuncs.com/image/2021-09-29-12-21-44BiuCgnNh.png" mode=""></image>
+			</view>
+		</view>
+		<view class="btn">
+			<u-button block class="btn2" @click="submit">添加分类</u-button>
+			<u-button block type="primary" @click="submit2">保存修改</u-button>
+		</view>
+	</view>
+</template>
+<script>
+import { mapState } from 'vuex';
+import Titlenav from '../components/Titlenav.vue';
+export default {
+	components: { Titlenav },
+	data() {
+		return {
+			form: {}
+		};
+	},
+	computed: {
+		...mapState(['systemInfo'])
+	},
+	methods: {}
+};
+</script>
+<style lang="scss" scoped>
+.titlenav {
+	background: #214bbe;
+	.top {
+		height: 50px;
+		.title {
+			font-size: 22px;
+			font-weight: bold;
+			color: #ffffff;
+			line-height: 26px;
+			padding: 10px 0 20px 20px;
+		}
+	}
+	.content {
+		background: #ffffff;
+		border-radius: 16px 16px 0px 0px;
+		padding: 1px 20px;
+	
+	}
+	/deep/ .uni-input-placeholder {
+		font-size: 16px;
+		text-align: center;
+		line-height: 24px;
+	}
+	/deep/ .uni-input-input{
+		text-align: center;
+	}
+	/deep/ .u-btn {
+		width: 162px;
+		height: 48px;
+		font-size: 16px;
+		font-weight: 400;
+		color: #ffffff;
+		border-radius: 4px;
+	}
+	.add{
+		padding: 11px 0;
+		display: flex;
+		align-items: center;
+		justify-content: space-between;
+		.inpt {
+			background: #f5f7fa;
+			width: 70%;
+			height: 48px;
+			border-radius: 8px;
+			padding: 11px 12px;
+		}
+		.name {
+			font-size: 14px;
+			font-weight: bold;
+			color: #aaabad;
+			line-height: 24px;
+			width: 42px;
+		}
+		.imgBox {
+			width: 24px;
+			height: 24px;
+		}
+	}
+	.btn {
+		display: flex;
+		align-items: center;
+		position: fixed;
+		justify-content: space-between;
+		left: 0;
+		right: 0;
+		bottom: 0;
+		z-index: 100;
+		padding: 6px 20px;
+		padding-bottom: 34px;
+		padding-bottom: calc(34px + constant(safe-area-inset-bottom)); // 兼容 IOS<11.2
+		padding-bottom: calc(34px + env(safe-area-inset-bottom)); // 兼容 IOS>=11.2
+		background-color: #ffffff;
+		.btn2 {
+			color: #214bbe;
+		}
+	}
+}
+</style>

+ 505 - 0
pages/Storesdetails.vue

@@ -0,0 +1,505 @@
+<template>
+	<view>
+		<view class="titlenav">
+			<titlenav :flag="true"></titlenav>
+			<view class="top">
+				<view class="title1">{{ !Show ? '等待骑手取餐' : '待接单' }}</view>
+				<view class="title2">{{ !Show ? '备餐完成,等待骑手取餐···' : '请您尽快接单,为用户备餐···' }}</view>
+			</view>
+		</view>
+		<view class="borderTop"></view>
+		<view class="conBox">
+			<!-- 判断外卖方式 -->
+			<template v-if="!Show">
+				<view class="address rider" @click="rider">
+					<view class="name">骑手</view>
+					<view class="choice">
+						<view class="text1">{{ name }}</view>
+						<image class="right" src="https://ticket-exchange.oss-cn-hangzhou.aliyuncs.com/image/2021-09-28-15-55-07FUuECyGb.png" mode=""></image>
+					</view>
+				</view>
+				<view class="Line"></view>
+			</template>
+			<view class="address address3">
+				<view class="name">{{ !Show ? '配送地址' : '用户信息' }}</view>
+				<view>
+					<view class="text1" v-if="!Show">南京**江宁校区-4号宿舍楼</view>
+					<view class="text1">奶盖 18789898888</view>
+				</view>
+			</view>
+			<view class="address">
+				<view class="name">{{ !Show ? '期望时间' : '自取时间' }}</view>
+				<view class="text1 text2">{{ !Show ? '08:50送达' : '今天08:50' }}</view>
+			</view>
+			<view class="address address2">
+				<view class="name">备注</view>
+				<view class="text1 text2">{{ list.remark }}</view>
+			</view>
+			<view class="border2"></view>
+			<view v-for="(item, index) in takeout" :key="index">
+				<view class="store">
+					<view class="title">
+						<image class="imgBox1" src="https://ticket-exchange.oss-cn-hangzhou.aliyuncs.com/image/2021-09-03-15-53-18gjxoMYNY.png" mode=""></image>
+						<view class="canteen">益禾堂(一食堂)</view>
+					</view>
+					<view class="store1">共{{ takeout.length }}件商品</view>
+				</view>
+				<view class="border"></view>
+				<view class="content">
+					<view class="ImgBox">
+						<image class="ImgBox2" :src="item.image" mode=""></image>
+						<view>
+							<view class="name">{{ item.name }}</view>
+							<view class="name1">共{{ item.num }}件</view>
+						</view>
+					</view>
+					<view class="money">¥{{ item.price }}</view>
+				</view>
+			</view>
+			<view class="order">
+				<view class="text1">打包费</view>
+				<view class="text2">¥{{ list.packPrice }}</view>
+			</view>
+			<view class="order order2">
+				<view class="text1">配送费</view>
+				<view class="text2">¥{{ list.distributionPrice }}</view>
+			</view>
+			<view class="text">
+				<view class="text1">合计:</view>
+				<view class="text2">¥{{ list.total }}</view>
+			</view>
+			<view class="border2"></view>
+			<view class="box">
+				<view class="box-con">
+					<p>支付方式</p>
+					<view class="text2">微信支付</view>
+				</view>
+			</view>
+			<view class="box">
+				<view class="box-con">
+					<p>订单编号</p>
+					<view class="text1">
+						<span @click="orderCopy">复制</span>
+						<view class="text2">{{ list.transactionId }}</view>
+					</view>
+				</view>
+			</view>
+			<view class="box">
+				<view class="box-con">
+					<p>下单时间</p>
+					<view class="text2">{{ list.createdAt }}</view>
+				</view>
+			</view>
+			<view class="box">
+				<view class="box-con">
+					<p>付款时间</p>
+					<view class="text2">2021-05-20 07:52:36</view>
+				</view>
+			</view>
+		</view>
+		<view class="btn">
+			<u-button block class="btn2" @click="submit">联系买家</u-button>
+			<u-button block type="primary" @click="submit2">{{ !Show ? '联系骑手' : '接单' }}</u-button>
+		</view>
+		<u-popup v-model="show2" mode="bottom" border-radius="12">
+			<view class="distribution">选择配送骑手</view>
+			<u-cell-group>
+				<view v-for="(item, index) in riderList" :key="index">
+					<view class="conPup" @click="Addrider(item)">
+						<view class="add">{{ item.name }} {{ item.phone }}</view>
+					<!-- 	<image
+							class="imgBox"
+							:src="`https://ticket-exchange.oss-cn-hangzhou.aliyuncs.com/image/${item.rider ? '2021-09-29-15-24-20LcnkHdXx.png' : '2021-09-02-14-49-00OrkCuHPB.png'}`"
+							mode=""
+						></image> -->
+					</view>
+				</view>
+			</u-cell-group>
+			<view class="popupBor"></view>
+			<view class="distribution text2">取消</view>
+		</u-popup>
+	</view>
+</template>
+<script>
+import { mapState } from 'vuex';
+import Titlenav from '../components/Titlenav.vue';
+export default {
+	components: { Titlenav },
+	data() {
+		return {
+			takeout: [],
+			name: '郝贞伟',
+			show: false,
+			show2: false,
+			riderList: [
+				{
+					name: '郝贞伟',
+					phone: '18789898888',
+					id: 1
+				},
+				{
+					name: '张三',
+					phone: '110',
+					id: 2
+				},
+				{
+					name: '李四',
+					phone: '120',
+					id: 3
+				}
+			],
+			list: {
+				transactionId: '2019052035464',
+				createdAt: '2021-09-03 14:18:26',
+				remark: '麻烦送到宿舍楼下的桌子上',
+				packPrice: '2',
+				distributionPrice: '2',
+				total: '15',
+				lists: [
+					{
+						price: '11',
+						name: '寿司',
+						id: 2,
+						num: '1',
+						image: 'https://ticket-exchange.oss-cn-hangzhou.aliyuncs.com/image/2021-08-13-15-54-36URxMKUXs.jpg'
+					}
+				]
+			}
+		};
+	},
+	onLoad(option) {
+		this.show = option.status;
+	},
+	computed: {
+		...mapState(['systemInfo']),
+		Show() {
+			if (this.show == 'false') {
+				return false;
+			} else {
+				return true;
+			}
+		}
+	},
+	methods: {
+		rider() {
+			this.show2 = true;
+		},
+		Addrider(item) {
+			this.name = item.name;
+			this.show2 = false;
+		},
+		orderCopy() {
+			uni.setClipboardData({
+				data: this.list.transactionId + '',
+				success(res) {
+					uni.getClipboardData({
+						success(res) {
+							uni.showToast({
+								title: '复制成功'
+							});
+						}
+					});
+				}
+			});
+		}
+	},
+	created() {
+		this.takeout = this.list.lists;
+	}
+};
+</script>
+<style lang="scss" scoped>
+.titlenav {
+	background: #214bbe;
+	height: 190px;
+	.top {
+		text-align: center;
+		.title1 {
+			font-size: 24px;
+			font-weight: bold;
+			color: #ffffff;
+			line-height: 34px;
+			margin: 10px 0 8px;
+		}
+		.title2 {
+			font-size: 14px;
+			font-weight: 400;
+			color: #ffffff;
+			line-height: 24px;
+		}
+	}
+}
+.borderTop {
+	height: 5px;
+	background: #f5f7fa;
+}
+/deep/ .u-btn {
+	width: 162px;
+	height: 48px;
+	font-size: 16px;
+	font-weight: 400;
+	color: #ffffff;
+	border-radius: 4px;
+}
+/deep/ .uni-scroll-view {
+	min-height: 200px;
+	border-radius: 12px 12px 10px 10px;
+	.distribution {
+		margin: 20px 0;
+		text-align: center;
+		font-size: 16px;
+		font-weight: 400;
+		color: #c9c9c9;
+		line-height: 24px;
+		&.text2{
+			font-size: 17px;
+			color: #000000;
+		}
+	}
+	.popupBor{
+		height: 8px;
+		background: #F2F2F2;
+	}
+	.conPup {
+		height: 56px;
+		line-height: 56px;
+		display: flex;
+		align-items: center;
+		justify-content: space-between;
+		padding: 0 20px;
+		border-bottom: 1px solid #f5f7fa;
+		.add {
+			font-size: 16px;
+			font-weight: 400;
+			color: #000000;
+			line-height: 22px;
+			margin-left: 6px;
+		}
+		.imgBox {
+			width: 24px;
+			height: 24px;
+		}
+	}
+}
+.btn {
+	display: flex;
+	align-items: center;
+	position: fixed;
+	justify-content: space-between;
+	left: 0;
+	right: 0;
+	bottom: 0;
+	z-index: 100;
+	padding: 6px 20px;
+	padding-bottom: 34px;
+	padding-bottom: calc(34px + constant(safe-area-inset-bottom)); // 兼容 IOS<11.2
+	padding-bottom: calc(34px + env(safe-area-inset-bottom)); // 兼容 IOS>=11.2
+	background-color: #ffffff;
+	.btn2 {
+		color: #214bbe;
+	}
+}
+.conBox {
+	// padding-top: 50px;
+	padding-bottom: 150px;
+	.store {
+		display: flex;
+		align-items: center;
+		justify-content: space-between;
+		padding: 0 16px;
+		.title {
+			display: flex;
+			align-items: center;
+			.imgBox1 {
+				width: 18px;
+				height: 18px;
+			}
+			.canteen {
+				font-size: 14px;
+				color: #000000;
+				line-height: 24px;
+				font-weight: 400;
+				padding-left: 6px;
+			}
+		}
+		.store1 {
+			font-size: 14px;
+			font-weight: 400;
+
+			color: #ff6c00;
+			line-height: 24px;
+		}
+	}
+	.border {
+		padding: 0 16px;
+		border-bottom: 1px solid #f5f7fa;
+		margin: 10px 16px 16px;
+	}
+	.content {
+		display: flex;
+		justify-content: space-between;
+		padding: 0 16px;
+		margin-bottom: 16px;
+		.ImgBox {
+			display: flex;
+			.ImgBox2 {
+				width: 80px;
+				height: 80px;
+				border-radius: 8px;
+				margin-right: 18px;
+			}
+			.name {
+				font-size: 14px;
+				font-weight: bold;
+				line-height: 24px;
+				color: #1c1c1c;
+			}
+			.name1 {
+				font-size: 14px;
+				font-weight: 400;
+				color: #c8c9cc;
+				line-height: 24px;
+			}
+		}
+		.money {
+			font-size: 16px;
+			font-weight: bold;
+			color: #1c1c1c;
+			line-height: 26px;
+		}
+	}
+	.order {
+		margin-bottom: 4px;
+		display: flex;
+		align-items: center;
+		justify-content: space-between;
+		padding: 0 16px;
+		.text1 {
+			font-size: 13px;
+			font-weight: 400;
+			color: #939599;
+			line-height: 24px;
+		}
+		.text2 {
+			font-size: 13px;
+			font-weight: 400;
+			line-height: 22px;
+			color: #1c1c1c;
+		}
+		&.order2 {
+			margin-bottom: 14px;
+		}
+	}
+	.text {
+		display: flex;
+		align-items: center;
+		padding-right: 16px;
+		place-content: flex-end;
+		font-weight: bold;
+		.text1 {
+			font-size: 14px;
+			color: #c8c9cc;
+			line-height: 24px;
+		}
+		.text2 {
+			font-size: 16px;
+			color: #000000;
+			line-height: 26px;
+		}
+	}
+	.border2 {
+		height: 5px;
+		margin: 18px 0 20px;
+		background: #f5f7fa;
+	}
+	.Line {
+		height: 5px;
+		margin-top: 18px;
+		background: #f5f7fa;
+	}
+	.address {
+		display: flex;
+		justify-content: space-between;
+		margin-bottom: 35px;
+		padding: 0 16px;
+		.choice {
+			display: flex;
+			align-items: center;
+			.text1 {
+				font-size: 16px;
+				font-weight: 400;
+				color: #214bbe;
+				line-height: 24px;
+			}
+			.right {
+				width: 12px;
+				height: 24px;
+				margin-left: 6px;
+			}
+		}
+		.name {
+			font-size: 14px;
+			font-weight: bold;
+			color: #000000;
+			line-height: 20px;
+		}
+		.text1 {
+			text-align: right;
+			font-size: 16px;
+			font-weight: 400;
+			color: #000000;
+			line-height: 24px;
+			&.text2 {
+				color: #ff7f1f;
+			}
+		}
+		&.address2 {
+			margin-bottom: 0;
+		}
+		&.rider {
+			margin-bottom: 0;
+			margin-top: 18px;
+		}
+		&.address3 {
+			margin-top: 15px;
+		}
+	}
+	.box {
+		margin-bottom: 16px;
+		padding: 0 16px;
+		.box-con {
+			align-items: center;
+			display: flex;
+			justify-content: space-between;
+			.text1 {
+				display: flex;
+				span {
+					width: 38px;
+					height: 18px;
+					border-radius: 2px;
+					border: 1px solid #c8c9cc;
+					font-size: 12px;
+					font-weight: 400;
+					color: #c8c9cc;
+					line-height: 18px;
+					text-align: center;
+					margin-right: 3px;
+				}
+			}
+			p {
+				font-size: 13px;
+				font-weight: 400;
+				color: #939599;
+				line-height: 24px;
+			}
+			.text2 {
+				height: 22px;
+				font-size: 13px;
+				font-weight: 400;
+				color: #000000;
+				line-height: 22px;
+			}
+		}
+	}
+}
+</style>

+ 163 - 0
pages/Storesettings.vue

@@ -0,0 +1,163 @@
+<template>
+	<view>
+		<titlenav></titlenav>
+		<view class="stores">
+			<view class="title">店铺设置</view>
+			<u-cell-group :border="false" class="from">
+				<u-cell-item title="店铺头像" is-link @click="changeLogo">
+					<image class="imgBox" src="https://bpic.588ku.com/illus_water_img/21/07/05/ecab6de5a7b2972500459ba95cf97deb.jpg" mode=""></image>
+				</u-cell-item>
+				<u-cell-item v-if="form.labels == 1" title="店铺标签" is-link @click="chooseSex">接受预约</u-cell-item>
+				<u-cell-item v-if="form.labels == 2" title="店铺标签" is-link @click="chooseSex">不接受预约</u-cell-item>
+				<u-cell-item title="营业时间" is-link>07:00-14:00 14:00-14:00</u-cell-item>
+				<u-field name="店铺电话" label="店铺电话" placeholder="请输入" v-model="form.phone" />
+				<u-field name="起送费(元)" label="起送费(元)" placeholder="请输入" v-model="form.delivery" />
+				<u-field name="配送费(元)" label="配送费(元)" placeholder="请输入" v-model="form.distribution" />
+			</u-cell-group>
+			<view class="characteristic">店家特色</view>
+			<u-field type="textarea" placeholder="请输入" v-model="form.characteristic" />
+			<view class="characteristic">店家公告</view>
+			<u-field type="textarea" placeholder="请输入" v-model="form.notice" />
+			<view class="btn"><u-button block type="primary" @click="submit">保存</u-button></view>
+		</view>
+	</view>
+</template>
+
+<script>
+import Titlenav from '../components/Titlenav.vue';
+export default {
+	components: {
+		Titlenav
+	},
+	data() {
+		return {
+			form: {
+				labels: 1
+			}
+		};
+	},
+	methods: {
+		chooseSex() {
+			uni.showActionSheet({
+				itemList: ['接受预约', '不接受预约'],
+				success: res => {
+					this.form.labels = (res.tapIndex + 1).toString();
+				},
+				fail(res) {
+					console.log(res.errMsg);
+				}
+			});
+		}
+	}
+};
+</script>
+
+<style lang="scss" scoped>
+.stores {
+	padding-bottom: 120px;
+	/deep/ .u-btn {
+		font-size: 16px;
+	}
+	.from {
+		/deep/ .u-iconfont {
+			font-size: 14px !important;
+		}
+		/deep/ .u-cell {
+			padding: 17px 0;
+			color: #000000;
+			font-weight: bold;
+		}
+		/deep/ .u-cell_title {
+			font-size: 14px;
+		}
+		/deep/ .u-cell__value {
+			color: #000000;
+			font-weight: 400;
+			height: 36px;
+			font-size: 14px;
+			line-height: 36px;
+		}
+		/deep/ .u-field {
+			padding: 23px 0;
+			color: #000000;
+			font-weight: bold;
+			text-align: right;
+		}
+		/deep/ .uni-input-input {
+			text-align: right;
+			font-weight: 400;
+		}
+		/deep/ .uni-input-placeholder {
+			text-align: right;
+			font-weight: 400;
+			font-size: 16px;
+		}
+		/deep/ .u-label {
+			span {
+				width: 90px;
+				font-size: 14px;
+			}
+		}
+	}
+	/deep/ .u-btn {
+		height: 48px;
+		font-size: 14px;
+		margin: 6px 0;
+	}
+	/deep/ .u-field {
+		padding: 0;
+	}
+	/deep/ .u-label {
+		flex: 0 0 0 !important;
+	}
+	/deep/ .uni-textarea-textarea {
+		font-size: 16px;
+		font-weight: 400;
+		color: #000000;
+		line-height: 24px;
+	}
+	margin: 10px 20px 0;
+	.characteristic {
+		font-size: 14px;
+		font-weight: bold;
+		color: #000000;
+		line-height: 24px;
+		margin: 24px 0 8px 0;
+	}
+	/deep/ .uni-textarea-placeholder {
+		font-weight: 400;
+		font-size: 16px;
+	}
+	.imgBox {
+		width: 36px;
+		height: 36px;
+		border-radius: 50%;
+	}
+	.text1 {
+		font-size: 18px;
+		font-weight: 400;
+		color: #c8c9cc;
+		line-height: 25px;
+		text-align: right;
+	}
+	.title {
+		font-size: 24px;
+		font-weight: bold;
+		color: #000000;
+		line-height: 33px;
+		margin-bottom: 10px;
+	}
+	.btn {
+		position: fixed;
+		left: 0;
+		right: 0;
+		bottom: 0;
+		z-index: 100;
+		padding: 6px 43px;
+		padding-bottom: 34px;
+		padding-bottom: calc(34px + constant(safe-area-inset-bottom)); // 兼容 IOS<11.2
+		padding-bottom: calc(34px + env(safe-area-inset-bottom)); // 兼容 IOS>=11.2
+		background-color: #ffffff;
+	}
+}
+</style>

+ 168 - 0
pages/Wallet.vue

@@ -0,0 +1,168 @@
+<template>
+	<view class="titlenav">
+		<titlenav :flag="true"></titlenav>
+		<view class="top">
+			<view class="title">财务中心</view>
+		</view>
+		<view class="content">
+			<view>
+				<view class="text1">9918.50</view>
+				<view class="text2">可提现金额(元)</view>
+			</view>
+			<view class="btn" @click="Withdrawal">提现</view>
+		</view>
+		<view class="time">
+			<view class="time2" @click="Times"><input type="text" readonly="readonly" v-model="startTime" /></view>
+			<view>
+				<text class="text1 text2">收入 ¥6832.50</text>
+				<text class="text1">提现 ¥5200.00</text>
+			</view>
+		</view>
+		<u-picker mode="time" v-model="show" :params="params"></u-picker>
+		<div class="list">
+			<van-empty v-if="empty" image="https://ticket-exchange.oss-cn-hangzhou.aliyuncs.com/wechat/kong_png_wodeguanzhu.png" description="暂无收益记录哦"></van-empty>
+			<template>
+				<div v-for="(item, index) in recordList" :key="index">
+					<bill-info :Info="item"></bill-info>
+					<!-- <bill-info billType="pay" :Info="item"></bill-info> -->
+				</div>
+			</template>
+		</div>
+	</view>
+</template>
+<script>
+import { mapState } from 'vuex';
+import BillInfo from '../components/BillInfo.vue';
+import Titlenav from '../components/Titlenav.vue';
+export default {
+	components: { Titlenav },
+	data() {
+		return {
+			params: {
+				year: true,
+				month: true,
+				hour: false,
+				minute: false,
+				second: false
+			},
+			empty: false,
+			startTime: '2021年9月',
+			show: false,
+			recordList: [
+				{
+					amount: 0.01,
+					attach: '17561',
+					createdAt: '2021-07-27 19:32:00',
+					del: false,
+					id: 17562,
+					remark: '',
+					settleTime: '2021-07-27 19:32:00',
+					title: '提现',
+					type: 'WITHDRAW'
+				}
+			]
+		};
+	},
+	computed: {
+		...mapState(['systemInfo'])
+	},
+	methods: {
+		confirm(e) {
+			console.log(e);
+		},
+		Withdrawal() {
+			uni.showModal({
+				title: '实名认证',
+				content: '您的账户还未实名认证,认证后可进行提现',
+				confirmText: '前往认证',
+				success: function(res) {
+					if (res.confirm) {
+						uni.navigateTo({
+							url: '/pages/Authentication'
+						});
+					} else if (res.cancel) {
+						console.log('用户点击取消');
+					}
+				}
+			});
+		},
+		Times() {
+			this.show = true;
+		}
+	}
+};
+</script>
+<style lang="scss" scoped>
+.titlenav{
+	background: #214bbe;
+	.top {
+		padding-top: 10px;
+		.title {
+			font-size: 22px;
+			font-weight: bold;
+			color: #ffffff;
+			line-height: 26px;
+			margin-left: 20px;
+		}
+	}
+	.content {
+		display: flex;
+		align-items: center;
+		justify-content: space-between;
+		margin: 33px 60px;
+		.text1 {
+			font-size: 36px;
+			font-family: OSP-DIN, OSP;
+			font-weight: normal;
+			color: #ffffff;
+			line-height: 40px;
+		}
+		.text2 {
+			font-size: 13px;
+			font-family: PingFangSC-Regular, PingFang SC;
+			font-weight: 400;
+			color: #ffffff;
+			line-height: 18px;
+		}
+		.btn {
+			width: 80px;
+			height: 36px;
+			background: #ffffff;
+			border-radius: 4px;
+			line-height: 36px;
+			text-align: center;
+			font-size: 14px;
+			font-weight: 500;
+			color: #214bbe;
+		}
+	}
+	.time {
+		height: 72px;
+		background: #f5f7fa;
+		border-radius: 16px 16px 0px 0px;
+		padding: 20px;
+		display: flex;
+		align-items: center;
+		justify-content: space-between;
+		.time2 {
+			width: 110px;
+			padding: 5px 0;
+			background: #ffffff;
+			border-radius: 4px;
+			text-align: center;
+		}
+		.text1 {
+			font-size: 12px;
+			font-weight: 400;
+			color: #646566;
+			line-height: 17px;
+			&.text2 {
+				margin-right: 16px;
+			}
+		}
+	}
+	.list {
+		background: #ffffff;
+	}
+}
+</style>

+ 255 - 0
pages/Walletdetails.vue

@@ -0,0 +1,255 @@
+<template>
+	<view class="titlenav" >
+		<titlenav :flag="true"></titlenav>
+		<view class="top">
+			<view class="title">提现</view>
+			<view class="box-con">
+				<p>提现金额</p>
+				<view class="num">
+					<span>全部可提现 ¥{{ money || 0 }}</span>
+				</view>
+				<view class="box">
+					<view class="numbers">
+						<image class="img" src="https://ticket-exchange.oss-cn-hangzhou.aliyuncs.com/image/2021-09-24-15-57-32PFysvIHT.png" mode=""></image>
+						<input type="number" v-model="boxPrice" placeholder="请输入金额" />
+					</view>
+					<view class="text2" @click="allMoney">全部</view>
+				</view>
+				<view class="btom" @click="choiceIpc">
+					<span>提现至</span>
+					<view class="btomIpc">
+						<image class="imgBox" src="https://ticket-exchange.oss-cn-hangzhou.aliyuncs.com/image/2021-09-26-15-27-51oTVSzeFr.png" mode=""></image>
+						<text>光大银行储蓄卡(1234)</text>
+						<image class="imgBox2" src="https://ticket-exchange.oss-cn-hangzhou.aliyuncs.com/image/2021-09-26-15-15-54YOiVgcKi.png" mode=""></image>
+					</view>
+				</view>
+				<u-button type="primary" size="small" :disabled="notWithdrawal" @click="Withdrawal(notWithdrawal)">申请提现</u-button>
+			</view>
+			<u-popup v-model="show" mode="bottom" border-radius="12">
+				<view class="ipc">选择到账的银行卡</view>
+				<u-cell-group>
+					<view class="conPup" @click="Add">
+						<view class="right">
+							<image class="img2" src="https://ticket-exchange.oss-cn-hangzhou.aliyuncs.com/image/2021-09-26-15-15-33kVvYGRfP.png" mode=""></image>
+							<view class="add">添加新卡提现</view>
+						</view>
+						<image class="img3" src="https://ticket-exchange.oss-cn-hangzhou.aliyuncs.com/image/2021-09-26-15-15-54YOiVgcKi.png" mode=""></image>
+					</view>
+				</u-cell-group>
+			</u-popup>
+		</view>
+	</view>
+</template>
+<script>
+import { mapState } from 'vuex';
+import Titlenav from '../components/Titlenav.vue';
+export default {
+	components: { Titlenav },
+	data() {
+		return {
+			boxPrice: '',
+			money: '',
+			show: false
+		};
+	},
+	computed: {
+		...mapState(['systemInfo']),
+		notWithdrawal() {
+			let flag = false;
+			this.boxPrice > this.money ? (flag = false) : (flag = true);
+			return flag;
+		}
+	},
+	methods: {
+		choiceIpc() {
+			this.show = true;
+		},
+		Add() {
+			uni.navigateTo({
+				url: '/pages/Addipc'
+			});
+		},
+		Withdrawal() {
+			uni.navigateTo({
+				url: '/pages/Review'
+			});
+		}
+		// Withdrawal(notWithdrawal) {
+		// 	if (notWithdrawal) {
+		// 		wx.showToast({
+		// 			icon: 'none',
+		// 			title: '提现金额超出'
+		// 		});
+		// 		return;
+		// 	}
+		// 	if (this.boxPrice < 1) {
+		// 		wx.showToast({
+		// 			icon: 'none',
+		// 			title: '金额不能低于1元',
+		// 			duration: 2000
+		// 		});
+		// 		return;
+		// 	}
+		// 		})
+		// 		.catch(e => {
+		// 			wx.showToast({
+		// 				icon: 'none',
+		// 				title: e.error
+		// 			});
+		// 		});
+		// }
+	}
+};
+</script>
+<style lang="scss" scoped>
+/deep/ .u-btn {
+	height: 48px;
+	background: #214bbe;
+	border-radius: 4px;
+	margin: 88px 23px 0 23px;
+}
+/deep/ .uni-input-input {
+	font-size: 30px;
+	font-family: OSP-DIN, OSP;
+	font-weight: normal;
+	color: #000000;
+}
+/deep/ .uni-scroll-view {
+	min-height: 200px;
+	border-radius: 12px 12px 10px 10px;
+	.ipc {
+		margin: 20px 0;
+		text-align: center;
+		font-size: 16px;
+		font-weight: 400;
+		color: #000000;
+		line-height: 24px;
+	}
+	.conPup {
+		height: 56px;
+		line-height: 56px;
+		display: flex;
+		align-items: center;
+		justify-content: space-between;
+		margin: 0 20px;
+		.right {
+			display: flex;
+			align-items: center;
+			.img2 {
+				width: 24px;
+				height: 24px;
+			}
+			.add {
+				font-size: 16px;
+				font-weight: 400;
+				color: #000000;
+				line-height: 22px;
+				margin-left: 6px;
+			}
+		}
+		.img3 {
+			width: 12px;
+			height: 24px;
+		}
+	}
+}
+.titlenav {
+	height: 491px;
+	background: linear-gradient(180deg, #214bbe 0%, #ffffff 100%);
+	.top {
+		padding-top: 10px;
+		.title {
+			font-size: 22px;
+			font-weight: bold;
+			color: #ffffff;
+			line-height: 26px;
+			margin: 0 0 20px 20px;
+		}
+		.box-con {
+			height: 600px;
+			background: #ffffff;
+			border-radius: 8px;
+			margin: 0 20px;
+			p {
+				font-size: 14px;
+				font-weight: bold;
+				color: #000000;
+				line-height: 20px;
+				padding: 30px 0 4px 16px;
+			}
+			.num {
+				display: flex;
+				align-items: center;
+				padding-left: 16px;
+				span {
+					font-size: 13px;
+					font-weight: 400;
+					color: #c8c9cc;
+					line-height: 22px;
+				}
+			}
+			.box {
+				display: flex;
+				align-items: center;
+				justify-content: space-between;
+				height: 42px;
+				margin: 16px 16px 0 16px;
+				padding-bottom: 12px;
+				border-bottom: 1px solid #f5f7fa;
+				.numbers {
+					display: flex;
+					align-items: center;
+					.img {
+						width: 15px;
+						height: 17px;
+						margin-right: 5px;
+					}
+				}
+				.text2 {
+					width: 70px;
+					height: 31px;
+					border-radius: 8px;
+					border: 1px solid #214bbe;
+					font-size: 13px;
+					color: #214bbe;
+					font-weight: bold;
+					text-align: center;
+					line-height: 28.5px;
+				}
+			}
+			.btom {
+				display: flex;
+				align-items: center;
+				justify-content: space-between;
+				padding: 0 17px;
+				margin-top: 21px;
+				span {
+					font-size: 14px;
+					font-weight: bold;
+					color: #000000;
+					line-height: 24px;
+				}
+				.btomIpc {
+					display: flex;
+					align-items: center;
+					text {
+						font-size: 16px;
+						font-weight: 400;
+						color: #000000;
+						line-height: 22px;
+						margin: 0 2px 0 6px;
+					}
+					.imgBox {
+						width: 24px;
+						height: 24px;
+					}
+					.imgBox2 {
+						width: 12px;
+						height: 24px;
+					}
+				}
+			}
+		}
+	}
+}
+</style>

+ 163 - 0
pages/style/common.scss

@@ -0,0 +1,163 @@
+@prim: #159EFF;
+@success: #07c160;
+@danger: #159EFF;
+@warn: #ff976a;
+@text0: #181818;
+@text1: #323233;
+@text2: #606266;
+@text3: #939599;
+@text4: #c6c8cc;
+@border1: #f5f7fa;
+@border2: #f2f3f5;
+@border3: #dfe1e6;
+@border4: #f2f6fc;
+@bg: #f5f7fa;
+@ff: #ffffff;
+.flex1 {
+    flex-grow: 1;
+}
+.flex() {
+    display: flex;
+    align-items: center;
+}
+.flex-col() {
+    display: flex;
+    flex-direction: column;
+}
+
+.ellipsis() {
+    overflow: hidden;
+    text-overflow: ellipsis;
+    white-space: nowrap;
+}
+.btn(){
+    height: 56px;
+    justify-content: space-between;
+    background: #ffffff;
+    width: 100%;
+    position: fixed;
+    bottom: 0;
+}
+.message(){
+      font-size: 13px;
+      font-weight: 400;
+      color: #c8c9cc;
+      line-height: 22px;
+}
+.span(){
+    font-size: 14px;
+    font-weight: bold;
+    color: #000000;
+    line-height: 24px;
+}
+.p(){
+    font-family: 'OSP';
+    font-size: 34px;
+    font-weight: normal;
+    color: #ff7f1f;
+    line-height: 34px;
+}
+.text10(){
+    color: #ff7f1f;
+    font-size: 22px;
+    font-family: 'OSP';
+    font-weight: normal;
+    line-height: 22px;
+    margin-top: 8px;
+}
+.text14(){
+       font-size: 14px;
+       font-weight: 400;
+       color: #939599;
+       line-height: 24px;
+}
+.text13(){
+      font-size: 13px;
+      font-weight: 400;
+      color: #939599;
+      line-height: 24px;
+}
+.text12(){
+      font-size: 13px;
+      font-weight: 400;
+      color: #939599;
+      line-height: 22px;
+}
+.price(){
+     font-size: 14px;
+     font-weight: 400;
+     color: #ff7f1f;
+     line-height: 24px;
+}
+.add(){
+     width: 24px;
+     height: 24px;
+     background: @prim;
+     line-height: 24px;
+     text-align: center;
+     font-weight: bold;
+     color: #fff;
+     border-radius: 2px;
+}
+.add2(){
+     width: 24px;
+     height: 24px;
+     margin-top: 4px;
+     line-height: 24px;
+}
+.mytest(){
+    position: absolute;
+    top: 0;
+    left: 0;
+    right: 0;
+    margin: auto;
+    width: 100%;
+    z-index: -1;
+}
+.button(){
+    width: 120px;
+    height: 44px;
+    background: @prim;
+    border-radius: 8px;
+    font-size: 16px;
+    font-weight: 400;
+    color: #ffffff;
+    margin-right: 16px;
+    border: 0;
+}
+.ellipsis-line( @line:2 ) {
+    display: -webkit-box;
+    -webkit-box-orient: vertical;
+    -webkit-line-clamp: @line;
+    overflow: hidden;
+}
+
+.bottom( @bottom:0.5px ) {
+    padding-bottom: @bottom;
+    padding-bottom: calc(@bottom + constant(safe-area-inset-bottom)); // 兼容 IOS<11.2
+    padding-bottom: calc(@bottom + env(safe-area-inset-bottom)); // 兼容 IOS>=11.2
+}
+
+@keyframes iconAnimate {
+    from {
+        -webkit-transform: scale(1);
+        transform: scale(1);
+    }
+
+    20% {
+        -webkit-transform: scale(0.8);
+        transform: scale(0.8);
+    }
+
+    80% {
+        -webkit-transform: scale(1.5);
+        transform: scale(1.5);
+    }
+    100% {
+        -webkit-transform: scale(1);
+        transform: scale(1);
+    }
+}
+.iconAnimate {
+    animation: iconAnimate ease-in-out 0.3s;
+}

+ 1 - 1
pages/template/login/index.vue

@@ -2,7 +2,7 @@
 	<view class="wrap">
 		<view class="top"></view>
 		<view class="content">
-			<view class="title">欢迎登录美团</view>
+			<view class="title">账号密码登陆</view>
 			<input class="u-border-bottom" type="number" v-model="tel" placeholder="请输入手机号" />
 			<view class="tips">未注册的手机号验证后自动创建美团账号</view>
 			<button @tap="submit" :style="[inputStyle]" class="getCaptcha">获取短信验证码</button>

+ 164 - 177
plugins/http.js

@@ -1,178 +1,165 @@
-let baseUrl = 'http://localhost:8080';
-switch (process.env.NODE_ENV) {
-	case 'development':
-		baseUrl = 'https://zhuoka.izouma.com';
-		break;
-	case 'test':
-		baseUrl = 'http://localhost:8080';
-		break;
-	case 'production':
-		baseUrl = 'https://zhuoka.izouma.com';
-		break;
-}
-
-function parseUrl(url) {
-	let _baseUrl = baseUrl;
-	console.log(baseUrl)
-	if (url.startsWith('http')) {
-		return url;
-	}
-	if (!_baseUrl.endsWith('/')) {
-		_baseUrl += '/';
-	}
-	if (url.startsWith('/')) {
-		url = url.slice(1);
-	}
-	return _baseUrl + url;
-}
-const http = {
-	parseUrl: parseUrl,
-	setToken(token) {
-		uni.setStorageSync('token', token);
-		this.token = token;
-	},
-	clearToken() {
-		this.token = '';
-		uni.removeStorageSync('token');
-		console.log('clear token');
-	},
-	getToken() {
-		if (!this.token) {
-			try {
-				this.token = uni.getStorageSync('token');
-			} catch (e) {}
-		}
-		return this.token;
-	},
-	get(url, params, options) {
-		options = options || {};
-		return new Promise((resolve, reject) => {
-			uni.request({
-				method: 'GET',
-				url: parseUrl(url),
-				data: params,
-				dataType: 'json',
-				header: {
-					Accept: 'application/json',
-					Authorization: this.getToken() ? 'Bearer ' + this.getToken() : 'Bearer ',
-					...(options.header || {})
-				},
-				success(res) {
-					if (res && res.statusCode === 200) {
-						resolve(res.data);
-					} else {
-						reject(res.data || res);
-					}
-				},
-				fail(err) {
-					reject(err.data || err);
-				}
-			});
-		});
-	},
-	post(url, data, options, backHeader = false) {
-		console.log('post');
-		options = options || {};
-		return new Promise((resolve, reject) => {
-			uni.request({
-				method: 'post',
-				url: parseUrl(url),
-				data: data,
-				dataType: 'json',
-				header: {
-					Accept: 'application/json',
-					'content-type': 'application/x-www-form-urlencoded',
-					Authorization: this.getToken() ? 'Bearer ' + this.getToken() : '',
-					...(options.header || {})
-				},
-				success(res) {
-					if (res && res.statusCode === 200) {
-						resolve(backHeader ? res : res.data);
-					} else {
-						reject(res.data || res);
-					}
-				},
-				fail(err) {
-					reject(err.data || err);
-				}
-			});
-		});
-	},
-	postJson(url, data, options, backHeader = false) {
-		options = options || {};
-		return new Promise((resolve, reject) => {
-			uni.request({
-				method: 'post',
-				url: parseUrl(url),
-				data: data,
-				dataType: 'json',
-				header: {
-					Accept: 'application/json',
-					'Content-Type': 'application/json',
-					Authorization: this.getToken() ? 'Bearer ' + this.getToken() : '',
-					...(options.header || {})
-				},
-				success(res) {
-					if (res && res.statusCode === 200) {
-						resolve(backHeader ? res : res.data);
-					} else {
-						reject(res.data || res);
-					}
-				},
-				fail(err) {
-					reject(err.data || err);
-				}
-			});
-		});
-	},
-	uploadFile(filePath, options) {
-		options = options || {};
-		return new Promise((resolve, reject) => {
-			uni.uploadFile({
-				url: baseUrl + '/upload/file',
-				filePath: filePath,
-				name: 'file',
-				header: {
-					Accept: 'application/json',
-					'content-type': 'application/x-www-form-urlencoded',
-					Authorization: this.getToken() ? 'Bearer ' + this.getToken() : '',
-					...(options.header || {})
-				},
-				formData: options.formData || {},
-				success(res) {
-					if (res && res.statusCode === 200) {
-						try {
-							resolve(res.data);
-						} catch (e) {
-							reject(e);
-						}
-					} else {
-						reject(res);
-					}
-				},
-				fail(err) {
-					reject(err);
-				}
-			});
-		});
-	}
-};
-export default {
-	http: http,
-	install(_Vue) {
-		_Vue.prototype.$baseUrl = baseUrl;
-		_Vue.prototype.$http = http;
-		_Vue.prototype.$request = options => {
-			options = options || {};
-			options.url = parseUrl(options.url);
-			return new Promise((resolve, reject) => {
-				options.success = res => {
-					resolve(res);
-				};
-				options.success = err => {
-					reject(err);
-				};
-			});
-		};
-	}
+const baseUrl = process.env.VUE_APP_BASE_URL;
+function parseUrl(url) {
+    let _baseUrl = baseUrl;
+    if (url.startsWith('http')) {
+        return url;
+    }
+    if (!_baseUrl.endsWith('/')) {
+        _baseUrl += '/';
+    }
+    if (url.startsWith('/')) {
+        url = url.slice(1);
+    }
+    return _baseUrl + url;
+}
+const http = {
+    parseUrl: parseUrl,
+    setToken(token) {
+        uni.setStorageSync('token', token);
+        this.token = token;
+    },
+    clearToken() {
+        this.token = '';
+        uni.removeStorageSync('token');
+        console.log('clear token');
+    },
+    getToken() {
+        if (!this.token) {
+            try {
+                this.token = uni.getStorageSync('token');
+            } catch (e) {}
+        }
+        return this.token;
+    },
+    get(url, params, options) {
+        options = options || {};
+        return new Promise((resolve, reject) => {
+            uni.request({
+                method: 'GET',
+                url: parseUrl(url),
+                data: params,
+                dataType: 'json',
+                header: {
+                    Accept: 'application/json',
+                    Authorization: this.getToken() ? 'Bearer ' + this.getToken() : 'Bearer ',
+                    ...(options.header || {})
+                },
+                success(res) {
+                    if (res && res.statusCode === 200) {
+                        resolve(res.data);
+                    } else {
+                        reject(res.data || res);
+                    }
+                },
+                fail(err) {
+                    reject(err.data || err);
+                }
+            });
+        });
+    },
+    post(url, data, options, backHeader = false) {
+        console.log('post');
+        options = options || {};
+        return new Promise((resolve, reject) => {
+            uni.request({
+                method: 'post',
+                url: parseUrl(url),
+                data: data,
+                dataType: 'json',
+                header: {
+                    Accept: 'application/json',
+                    'content-type': 'application/x-www-form-urlencoded',
+                    Authorization: this.getToken() ? 'Bearer ' + this.getToken() : '',
+                    ...(options.header || {})
+                },
+                success(res) {
+                    if (res && res.statusCode === 200) {
+                        resolve(backHeader ? res : res.data);
+                    } else {
+                        reject(res.data || res);
+                    }
+                },
+                fail(err) {
+                    reject(err.data || err);
+                }
+            });
+        });
+    },
+    postJson(url, data, options, backHeader = false) {
+        options = options || {};
+        return new Promise((resolve, reject) => {
+            uni.request({
+                method: 'post',
+                url: parseUrl(url),
+                data: data,
+                dataType: 'json',
+                header: {
+                    Accept: 'application/json',
+                    'Content-Type': 'application/json',
+                    Authorization: this.getToken() ? 'Bearer ' + this.getToken() : '',
+                    ...(options.header || {})
+                },
+                success(res) {
+                    if (res && res.statusCode === 200) {
+                        resolve(backHeader ? res : res.data);
+                    } else {
+                        reject(res.data || res);
+                    }
+                },
+                fail(err) {
+                    reject(err.data || err);
+                }
+            });
+        });
+    },
+    uploadFile(filePath, options) {
+        options = options || {};
+        return new Promise((resolve, reject) => {
+            uni.uploadFile({
+                url: baseUrl + '/upload/file',
+                filePath: filePath,
+                name: 'file',
+                header: {
+                    Accept: 'application/json',
+                    'content-type': 'application/x-www-form-urlencoded',
+                    Authorization: this.getToken() ? 'Bearer ' + this.getToken() : '',
+                    ...(options.header || {})
+                },
+                formData: options.formData || {},
+                success(res) {
+                    if (res && res.statusCode === 200) {
+                        try {
+                            resolve(res.data);
+                        } catch (e) {
+                            reject(e);
+                        }
+                    } else {
+                        reject(res);
+                    }
+                },
+                fail(err) {
+                    reject(err);
+                }
+            });
+        });
+    }
+};
+export default {
+    http: http,
+    install(_Vue) {
+        _Vue.prototype.$baseUrl = baseUrl;
+        _Vue.prototype.$http = http;
+        _Vue.prototype.$request = options => {
+            options = options || {};
+            options.url = parseUrl(options.url);
+            return new Promise((resolve, reject) => {
+                options.success = res => {
+                    resolve(res);
+                };
+                options.success = err => {
+                    reject(err);
+                };
+            });
+        };
+    }
 };

+ 54 - 0
project.config.json

@@ -0,0 +1,54 @@
+{
+  "description": "项目配置文件",
+  "setting": {
+    "urlCheck": true,
+    "es6": true,
+    "enhance": false,
+    "postcss": true,
+    "preloadBackgroundData": false,
+    "minified": true,
+    "newFeature": false,
+    "coverView": true,
+    "nodeModules": false,
+    "autoAudits": false,
+    "showShadowRootInWxmlPanel": true,
+    "scopeDataCheck": false,
+    "uglifyFileName": false,
+    "checkInvalidKey": true,
+    "checkSiteMap": true,
+    "uploadWithSourceMap": true,
+    "compileHotReLoad": false,
+    "useMultiFrameRuntime": true,
+    "useApiHook": true,
+    "useApiHostProcess": true,
+    "babelSetting": {
+      "ignore": [],
+      "disablePlugins": [],
+      "outputPath": ""
+    },
+    "useIsolateContext": true,
+    "useCompilerModule": true,
+    "userConfirmedUseCompilerModuleSwitch": false,
+    "userConfirmedBundleSwitch": false,
+    "packNpmManually": false,
+    "packNpmRelationList": [],
+    "minifyWXSS": true,
+    "bundle": false
+  },
+  "compileType": "miniprogram",
+  "scripts": {},
+  "condition": {
+    "game": {
+      "list": []
+    },
+    "plugin": {
+      "list": []
+    },
+    "gamePlugin": {
+      "list": []
+    },
+    "miniprogram": {
+      "list": []
+    }
+  }
+}

+ 1 - 0
store/index.js

@@ -30,6 +30,7 @@ export default new Vuex.Store({
     actions: {
         getUserInfo(context) {
             return http.http.get('/user/my').then(res => {
+							console.log(res)
                 if (res.sex || res.nickname.indexOf('用户') === -1) {
                     context.commit('setUserInfo', res);
                 } else {