From a3ad988e9f74049a6b17efd4f3db8389ae6fe7ed Mon Sep 17 00:00:00 2001
From: xuxy <1059738716@qq.com>
Date: 星期一, 24 六月 2024 17:06:05 +0800
Subject: [PATCH] upload 花农小程序(todo商品管理)

---
 pages/farmer/order-records/order-records.vue       |  147 +++++++
 common/self.scss                                   |    4 
 common/global.scss                                 |   34 +
 pages/login/farmer-login.vue                       |  104 +++-
 common/icons.scss                                  |    6 
 pages/farmer/order-settlement/order-settlement.vue |  185 ++++++++
 pages.json                                         |   77 +--
 pages/login/farmer-reg.vue                         |  444 ++++++++++++++++++++++
 App.vue                                            |    1 
 static/common/icon-date.png                        |    0 
 pages/farmer/order-sale/order-sale.vue             |  140 ++++++
 pages/user/user.scss                               |    2 
 pages/login/login.scss                             |   39 +
 13 files changed, 1,091 insertions(+), 92 deletions(-)

diff --git a/App.vue b/App.vue
index e9c7d94..d279b31 100644
--- a/App.vue
+++ b/App.vue
@@ -78,6 +78,7 @@
 
 	@import '@/common/self.scss';
 	@import '@/common/icons.scss';
+	@import '@/common/global.scss';
 
 	/* #endif */
 	.example-info {
diff --git a/common/global.scss b/common/global.scss
new file mode 100644
index 0000000..6154ba9
--- /dev/null
+++ b/common/global.scss
@@ -0,0 +1,34 @@
+.component-tab-container{
+	display: flex;
+	.tab-item{
+		display: flex;
+		text-align: center;
+		border-radius: 8rpx;
+		border: 2rpx solid var(--topicolor);
+		background: #fff;
+		color: var(--topicolor);
+	}
+	.tab-item.cur{
+		background: var(--topicolor);
+		border-radius: 0rpx 8rpx 8rpx 0rpx;
+	}
+}
+.component-button-upload{
+	width: 96rpx;
+	height: 96rpx;
+	border-radius: 4rpx;
+	border: 2rpx solid #CECECE;
+	position: relative;
+	background-image: 100% 100%;
+	&::after{
+		content: "+";
+		position: absolute;
+		left: 50%;
+		top: 50%;
+		transform: translate(50%,50%);
+		// width: 22rpx;
+		// height: 22rpx;
+		font-size: 24rpx;
+		color: #000000;
+	}
+}
\ No newline at end of file
diff --git a/common/icons.scss b/common/icons.scss
index 9b35b9e..4ce98f5 100644
--- a/common/icons.scss
+++ b/common/icons.scss
@@ -9,4 +9,10 @@
 				width: 28rpx;
 				height: 28rpx;
 				background-size: 100% 100%;
+			}
+			.icon-date{
+				
+				width: 38rpx;
+				height: 38rpx;
+				background-size: 100% 100%;
 			}
\ No newline at end of file
diff --git a/common/self.scss b/common/self.scss
index 2baf157..2f1ba42 100644
--- a/common/self.scss
+++ b/common/self.scss
@@ -561,7 +561,6 @@
 	background-size: 100% 100%;
 	width: 136rpx;
 	height: 136rpx;
-	background-image: url('@/static/app/imgs/app-add.png');
 }
 // #endif
 .flex-w100{
@@ -943,3 +942,6 @@
 	}
 
 
+.before-line::before{
+	border-top: 2rpx solid #EEEEEE;
+}
diff --git a/pages.json b/pages.json
index 36c06da..a99cd4e 100644
--- a/pages.json
+++ b/pages.json
@@ -1,12 +1,12 @@
 {
 	"pages": [{
-			"path" : "pages/home/login/farmer-login",
-			"style" : 
-			{
-				"navigationBarTitleText" : "登录",
-				"enablePullDownRefresh" : false
+			"path": "pages/login/farmer-login",
+			"style": {
+				"navigationBarTitleText": "登录",
+				"enablePullDownRefresh": false,
+				"navigationStyle": "custom"
 			}
-		},{
+		}, {
 			"path": "pages/home/farmer-home",
 			"style": {
 				"navigationBarTitleText": "首页",
@@ -14,7 +14,7 @@
 				"navigationStyle": "custom"
 			}
 
-		} , {
+		}, {
 			"path": "pages/user/farmer-user",
 			"style": {
 				"navigationBarTitleText": "我的",
@@ -43,45 +43,42 @@
 				"enablePullDownRefresh": false
 			}
 		},
-		
+
 		{
-			"path" : "pages/home/login/farmer-reg",
-			"style" : 
-			{
-				"navigationBarTitleText" : "注册",
-				"enablePullDownRefresh" : false
+			"path": "pages/login/farmer-reg",
+			"style": {
+				"navigationBarTitleText": "申请入住",
+				"enablePullDownRefresh": false
 			}
 		},
 		{
-			"path" : "pages/farmer/manage/order-settlement/order-settlement",
-			"style" : 
-			{
-				"navigationBarTitleText" : "账单结算",
-				"enablePullDownRefresh" : false
+			"path": "pages/farmer/order-settlement/order-settlement",
+			"style": {
+				"navigationBarTitleText": "账单结算",
+				"enablePullDownRefresh": false
 			}
 		},
 		{
-			"path" : "pages/farmer/manage/flower-manage/flower-manage",
-			"style" : 
-			{
-				"navigationBarTitleText" : "商品管理",
-				"enablePullDownRefresh" : false
+			"path": "pages/farmer/flower-manage/flower-manage",
+			"style": {
+				"navigationBarTitleText": "商品管理",
+				"enablePullDownRefresh": false
 			}
 		},
 		{
-			"path" : "pages/farmer/order-sale/order-sale",
-			"style" : 
-			{
-				"navigationBarTitleText" : "售后理赔",
-				"enablePullDownRefresh" : false
+			"path": "pages/farmer/order-sale/order-sale",
+			"style": {
+				"navigationBarTitleText": "售后理赔",
+				"enablePullDownRefresh": false
 			}
 		},
 		{
-			"path" : "pages/farmer/order-records/order-records",
-			"style" : 
-			{
-				"navigationBarTitleText" : "扣款记录",
-				"enablePullDownRefresh" : false
+			"path": "pages/farmer/order-records/order-records",
+			"style": {
+				"navigationBarTitleText": "扣款记录",
+				"enablePullDownRefresh": false,
+				"navigationBarBackgroundColor": "#E6F2EB"
+				
 			}
 		}
 	],
@@ -94,14 +91,12 @@
 			"background": "#efeff4"
 		}
 	},
-	"condition" : { //模式配置,仅开发期间生效
+	"condition": { //模式配置,仅开发期间生效
 		"current": 0, //当前激活的模式(list 的索引项)
-		"list": [
-			{
-				"name": "", //模式名称
-				"path": "", //启动页面,必选
-				"query": "" //启动参数,在页面的onLoad函数里面得到
-			}
-		]
+		"list": [{
+			"name": "", //模式名称
+			"path": "", //启动页面,必选
+			"query": "" //启动参数,在页面的onLoad函数里面得到
+		}]
 	}
 }
\ No newline at end of file
diff --git a/pages/farmer/order-records/order-records.vue b/pages/farmer/order-records/order-records.vue
index 8183fd0..a1ff880 100644
--- a/pages/farmer/order-records/order-records.vue
+++ b/pages/farmer/order-records/order-records.vue
@@ -1,6 +1,55 @@
 <template>
-	<view>
-		
+	<view class="order-records">
+		<view class="tj-container-p">
+			<view class="tj-container">
+				<view class="tj-each">
+					<view class="value">9</view>
+					<view class="label">买家</view>
+				</view>
+				<view class="tj-each">
+					<view class="value">9扎</view>
+					<view class="label">交易</view>
+				</view>
+				<view class="tj-each">
+					<view class="value">0.00</view>
+					<view class="label">理赔</view>
+				</view>
+				<view class="tj-each">
+					<view class="value">401.12</view>
+					<view class="label">交易合计</view>
+				</view>
+			</view>
+		</view>
+		<view class="p15" style="min-height: calc(100vh - 160rpx);">
+			<no-data v-if="!list||list.length==0" style="width: 100%;"></no-data>
+			<view v-for="(item,index) in list" :key="index" class="order-records-list list-container">
+				<view class="order-records-item list-item">
+					<view class="title flex">
+						<view>{{item.title}}</view>
+						<view class="m-l-a m-r-0 topic-gray">测试人员</view>
+					</view>
+					<view class="line"></view>
+					<view class="form">
+						<view class="form-item">
+							<view class="label">数量</view>
+							<view class="value">1</view>
+						</view>
+						<view class="form-item">
+							<view class="label">单价</view>
+							<view class="value">¥32.00</view>
+						</view>
+						<view class="form-item">
+							<view class="label">小计</view>
+							<view class="value red">¥32.00</view>
+						</view>
+					</view>
+				</view>
+			</view>
+		</view>
+
+		<!-- 判断是否到底了,自动吧 -->
+		<footer-msg :more="page.total>0&&page.total>page.current*page.size"></footer-msg>
+
 	</view>
 </template>
 
@@ -8,15 +57,101 @@
 	export default {
 		data() {
 			return {
-				
+
 			}
 		},
 		methods: {
-			
+
 		}
 	}
 </script>
 
-<style>
+<style lang="scss" scoped>
+	.order-records {
+		.order-records-list {
+			padding: 20rpx 30rpx;
 
-</style>
+			.order-records-item {
+				padding: 24rpx 34rpx;
+				margin-bottom: 20rpx;
+
+
+				.title {
+					font-weight: 600;
+					font-size: 28rpx;
+					color: #000000;
+					line-height: 40rpx;
+				}
+
+				.line {
+					height: 2rpx solid #EEEEEE;
+					margin-top: 16rpx;
+					margin-bottom: 16rpx;
+				}
+
+				.form {
+					display: flex;
+
+					.form-item {
+						flex: 1;
+						min-width: 40%;
+						max-width: 50%;
+
+						.label {
+							font-weight: 400;
+							font-size: 24rpx;
+							color: #666666;
+							line-height: 34rpx;
+						}
+
+						.label::after {
+							content: ":";
+							font-weight: 400;
+							font-size: 24rpx;
+							color: #666666;
+							line-height: 34rpx;
+						}
+
+						.value {
+							font-weight: 400;
+							font-size: 24rpx;
+							color: #000000;
+							line-height: 34rpx;
+						}
+
+						.value.red {
+							color: #CF0000;
+						}
+					}
+				}
+			}
+		}
+
+		.tj-container-p {
+			background: #E6F2EB;
+			padding: 30rpx;
+
+			.tj-container {
+				height: 148rpx;
+				background: #FFFFFF;
+				border-radius: 8rpx;
+
+				.tj-each {
+					.label {
+						font-weight: 400;
+						font-size: 24rpx;
+						color: #000000;
+						line-height: 34rpx;
+					}
+
+					.value {
+						font-weight: 400;
+						font-size: 32rpx;
+						color: #CF0000;
+						line-height: 44rpx;
+					}
+				}
+			}
+		}
+	}
+</style>
\ No newline at end of file
diff --git a/pages/farmer/order-sale/order-sale.vue b/pages/farmer/order-sale/order-sale.vue
index 8183fd0..583657f 100644
--- a/pages/farmer/order-sale/order-sale.vue
+++ b/pages/farmer/order-sale/order-sale.vue
@@ -1,6 +1,52 @@
 <template>
-	<view>
-		
+	<view class="list-container order-sale farmer">
+		<view class="component-tab-container">
+			<view class="tab-item" :class="[tabIndex==0?'cur':'']" @click="changeIndex(0)">本月</view>
+			<view class="tab-item" :class="[tabIndex==1?'cur':'']" @click="changeIndex(1)">全部</view>
+		</view>
+		<view class="p15" style="min-height: calc(100vh - 160rpx);">
+			<no-data v-if="!list||list.length==0" style="width: 100%;"></no-data>
+			<view v-for="(item,index) in list" :key="index" class="m-b-24 order-sale-list list-container">
+				<view class="order-sale-item list-item">
+					<view class="title">{{item.title}}<span>A级</span></view>
+					<view class="line"></view>
+					<view class="form">
+						<view class="form-item">
+							<view class="label">理赔数量</view>
+							<view class="value">1</view>
+						</view>
+						<view class="form-item">
+							<view class="label">买家ID</view>
+							<view class="value">1</view>
+						</view>
+						<view class="form-item">
+							<view class="label">平台支付</view>
+							<view class="value red">1</view>
+						</view>
+						<view class="form-item">
+							<view class="label">商家赔付</view>
+							<view class="value red">1</view>
+						</view>
+						<view class="form-item">
+							<view class="label">下单时间</view>
+							<view class="value">1</view>
+						</view>
+						<view class="form-item">
+							<view class="label">申请时间</view>
+							<view class="value">1</view>
+						</view>
+						<view class="form-item width100">
+							<view class="label">申请原因</view>
+							<view class="value">1</view>
+						</view>
+					</view>
+				</view>
+			</view>
+		</view>
+
+		<!-- 判断是否到底了,自动吧 -->
+		<footer-msg :more="page.total>0&&page.total>page.current*page.size"></footer-msg>
+
 	</view>
 </template>
 
@@ -8,15 +54,97 @@
 	export default {
 		data() {
 			return {
-				
+				tabIndex: 0,
 			}
 		},
+		onLoad() {
+			this.listApi = '/api/ua/announcement/list'
+			this.getList()
+
+		},
+		onReachBottom() {
+			this.page.current += 1
+			this.getMore()
+		},
+		async onPullDownRefresh() {
+			this.page.current = 1
+			await this.getList()
+			uni.stopPullDownRefresh()
+		},
 		methods: {
-			
+			changeIndex(index) {
+				if (this.tabIndex !== index) {
+					this.changeIndex = index
+					// 刷新 query
+				}
+			},
+			toDetail(item) {
+				// uni.navigateTo({
+				// 	url: `/pages/notice/notice?id=${item.id}`
+				// })
+			}
 		}
 	}
 </script>
 
-<style>
+<style lang="scss" scope>
+	.order-sale-list {
+		.order-sale-item {
+			margin-bottom: 20rpx;
+			padding: 28rpx;
 
-</style>
+			.title {
+				font-weight: 600;
+				font-size: 28rpx;
+				color: #000000;
+				line-height: 40rpx;
+			}
+
+			.line {
+				height: 2rpx solid #EEEEEE;
+				margin-top: 16rpx;
+				margin-bottom: 16rpx;
+			}
+
+			.form {
+				display: flex;
+
+				.form-item {
+					flex: 1;
+					min-width: 40%;
+					max-width: 50%;
+
+					.label {
+						font-weight: 400;
+						font-size: 24rpx;
+						color: #666666;
+						line-height: 34rpx;
+					}
+
+					.label::after {
+						content: ":";
+						font-weight: 400;
+						font-size: 24rpx;
+						color: #666666;
+						line-height: 34rpx;
+					}
+
+					.value {
+						font-weight: 400;
+						font-size: 24rpx;
+						color: #000000;
+						line-height: 34rpx;
+					}
+
+					.value.red {
+						color: #CF0000;
+					}
+				}
+
+				.form-item.width100 {
+					max-width: unset;
+				}
+			}
+		}
+	}
+</style>
\ No newline at end of file
diff --git a/pages/farmer/order-settlement/order-settlement.vue b/pages/farmer/order-settlement/order-settlement.vue
index 8183fd0..e497857 100644
--- a/pages/farmer/order-settlement/order-settlement.vue
+++ b/pages/farmer/order-settlement/order-settlement.vue
@@ -1,6 +1,68 @@
 <template>
-	<view>
-		
+	<view class="list-container order-settlement farmer">
+		<view class="component-tab-container">
+			<view class="tab-item" :class="[tabIndex==0?'cur':'']" @click="changeIndex(0)">本月</view>
+			<view class="tab-item" :class="[tabIndex==1?'cur':'']" @click="changeIndex(1)">全部</view>
+		</view>
+		<view class="p15" style="min-height: calc(100vh - 160rpx);">
+			<no-data v-if="!list||list.length==0" style="width: 100%;"></no-data>
+			<view v-for="(item,index) in list" :key="index" class="m-b-24 order-settlement-list list-container">
+				<view class="order-settlement-item list-item">
+					<view class="title flex">
+						<image class="icon-date m-r-6 m-t-2" src="@/static/common/icon-date.png"></image>
+						<view>{{item.title}}</view>
+						<view class="status m-l-a m-r-0">已结算</view>
+					</view>
+					<view class="line"></view>
+					<view class="form">
+						<view class="form-item">
+							<view class="label">均价</view>
+							<view class="value">¥32.00</view>
+						</view>
+						<view class="form-item">
+							<view class="label">买家</view>
+							<view class="value">1位</view>
+						</view>
+						<view class="form-item">
+							<view class="label">数量</view>
+							<view class="value red">1扎</view>
+						</view>
+						<view class="form-item">
+							<view class="label">商家赔付</view>
+							<view class="value red">1</view>
+						</view>
+						<view class="form-item">
+							<view class="label">服务费</view>
+							<view class="value">¥32.00</view>
+						</view>
+						<view class="form-item">
+							<view class="label">理赔</view>
+							<view class="value">¥32.00</view>
+						</view>
+						<view class="form-item">
+							<view class="label">运费</view>
+							<view class="value">¥32.00</view>
+						</view>
+					</view>
+
+					<view class="line"></view>
+					<view class="flex">
+						<view class="flex1 tj">
+							<view class="label">交易合计:</view>
+							<view class="value">¥32.00</view>
+						</view>
+						<view class="flex1 tj text-right">
+							<view class="label">结算金额:</view>
+							<view class="value">¥32.00</view>
+						</view>
+					</view>
+				</view>
+			</view>
+		</view>
+
+		<!-- 判断是否到底了,自动吧 -->
+		<footer-msg :more="page.total>0&&page.total>page.current*page.size"></footer-msg>
+
 	</view>
 </template>
 
@@ -8,15 +70,126 @@
 	export default {
 		data() {
 			return {
-				
+				tabIndex: 0,
 			}
 		},
+		onLoad() {
+			this.listApi = '/api/ua/announcement/list'
+			this.getList()
+
+		},
+		onReachBottom() {
+			this.page.current += 1
+			this.getMore()
+		},
+		async onPullDownRefresh() {
+			this.page.current = 1
+			await this.getList()
+			uni.stopPullDownRefresh()
+		},
 		methods: {
-			
+			changeIndex(index) {
+				if (this.tabIndex !== index) {
+					this.changeIndex = index
+					// 刷新 query
+				}
+			},
+			toDetail(item) {
+				// uni.navigateTo({
+				// 	url: `/pages/notice/notice?id=${item.id}`
+				// })
+			}
 		}
 	}
 </script>
 
-<style>
+<style lang="scss" scope>
+	.order-settlement-list {
+		.order-settlement-item {
+			margin-bottom: 20rpx;
+			padding: 28rpx;
 
-</style>
+			.title {
+				font-weight: 600;
+				font-size: 28rpx;
+				color: #000000;
+				line-height: 40rpx;
+
+				.status {
+					font-weight: 400;
+					font-size: 28rpx;
+					color: #20613D;
+					line-height: 40rpx;
+				}
+
+				.status.red {
+					color: #CF0000;
+				}
+
+				.status.green {
+					color: var(--topiccolor);
+				}
+			}
+
+			.line {
+				height: 2rpx solid #EEEEEE;
+				margin-top: 16rpx;
+				margin-bottom: 16rpx;
+			}
+
+			.tj {
+				.label {
+					font-weight: 600;
+					font-size: 28rpx;
+					color: #000000;
+					line-height: 40rpx;
+				}
+
+				.value {
+					font-weight: 400;
+					font-size: 28rpx;
+					color: #CF0000;
+					line-height: 40rpx;
+				}
+			}
+
+			.form {
+				display: flex;
+
+				.form-item {
+					flex: 1;
+					min-width: 26%;
+					max-width: 33%;
+
+					.label {
+						font-weight: 400;
+						font-size: 24rpx;
+						color: #666666;
+						line-height: 34rpx;
+					}
+
+					.label::after {
+						content: ":";
+						font-weight: 400;
+						font-size: 24rpx;
+						color: #666666;
+						line-height: 34rpx;
+					}
+
+					.value {
+						font-weight: 400;
+						font-size: 24rpx;
+						color: #000000;
+						line-height: 34rpx;
+					}
+
+					.value.red {
+						color: #CF0000;
+					}
+				}
+
+
+			}
+		}
+	}
+</style>
\ No newline at end of file
diff --git a/pages/login/farmer-login.vue b/pages/login/farmer-login.vue
index b7cd8ea..1f71a78 100644
--- a/pages/login/farmer-login.vue
+++ b/pages/login/farmer-login.vue
@@ -2,43 +2,38 @@
 	<view class="main-container login-container img100" style="margin-top: 0rpx;">
 
 		<view class="t-login top-bg">
-			<view class="icons">
-				<image class="icon1" src="../../static/imgs/user/usr-icon1.png" mode="aspectFit"></image>
-				<image class="icon2" src="../../static/imgs/home/home-shop-top-icon.png" mode="aspectFit"></image>
-			</view>
+			<view class="nav-title">登录</view>
 			<view class="login">
 				<form class="cl">
 					<view class="t-a titles-top">
 						<view class="title-1">HELLO</view>
-						<view class="title-2">欢迎登录<span class="title-2">花满芜</span></view>
+						<view class="title-2">欢迎登录<span class="title-3">花满芜</span></view>
 					</view>
-					<view class="t-a">
-						<!-- <image src="/static/username.png"></image> -->
-						<!-- <uni-icons class="icon" type="person-filled" size="32" color="#04BA97"></uni-icons> -->
-
-						<!-- <view class="line"></view> -->
+					<view class="t-a input" v-if="loginType=='pwd'">
 						<input type="text" name="userName" placeholder="请输入账号" v-model="userName" />
 					</view>
-					<view class="t-a">
-						<!-- 						<image src="/static/password.png"></image> -->
-						<!-- <uni-icons class="icon" type="locked-filled"  size="32" color="#04BA97"></uni-icons> -->
-						<!-- <view class="line"></view> -->
+					<view class="t-a input" v-if="loginType=='pwd'">
 						<input type="text" :password="true" name="password" placeholder="请输入密码" v-model="password" />
 					</view>
-					<view class="main-container" v-if="false">
-						<checkbox-group @change="changeAll" style="float:left;">
-							<label class="checkbox">
-								<checkbox value="1" :checked="checked" />
-							</label>
-						</checkbox-group>
-						同意<text @click="tc1(1)" style="color:red;">《用户服务协议》</text>及
-						<text @click="tc1(2)" style="color:red;">《隐私政策》</text>
+					<view class="t-a input" v-if="loginType=='code'">
+						<view class="get-code" :style="{'color':getCodeBtnColor}" @click.stop="getCode()">
+							{{getCodeText}}
+						</view>
+
+						<input type="text" name="userName" placeholder="请输入手机号" v-model="phoneNumber" />
+
 					</view>
-					<button @tap="login()" style="background-color: #04BA97;">登 录</button>
-					<!-- <view @tap="backpage" class="to-home">返回首页</view> -->
+
+
+					<view class="t-a input" v-if="loginType=='code'">
+						<input type="text" :password="true" name="password" placeholder="请输入密码" v-model="password" />
+					</view>
+
+					<button @tap="login()" class="bottom-button">登 录</button>
+
 					<view class="flex">
-						<view class="topic-font">手机验证码登录</view>
-						<view class="topic-font">前往注册</view>
+						<view class="topic-font" @click="loginType='code'">手机验证码登录</view>
+						<view class="topic-font m-l-a m-r-0" @click="toReg">前往注册</view>
 					</view>
 				</form>
 			</view>
@@ -56,16 +51,70 @@
 				// userName: '12345678',
 				// password: '12345678',
 				userName: '',
+				phoneNumber: '',
 				password: '',
 				checked: false,
+				loginType: 'pwd', //pwd和code,密码和验证码登录
 				pcfvalue: undefined,
+				getCodeText: '获取验证码',
+				getCodeBtnColor: "#20613D",
+				getCodeisWaiting: false,
+				Timer: undefined
 			};
 		},
 		methods: {
-			toHome() {
+			getCode() {
+				uni.hideKeyboard() //隐藏已经显示的软键盘,如果软键盘没有显示则不做任何操作。
+				if (this.getCodeisWaiting) {
+					return;
+				}
+				if (!(/^1(3|4|5|6|7|8|9)\d{9}$/.test(this.phoneNumber))) { //校验手机号码是否有误
+					uni.showToast({
+						title: '请填写正确手机号码',
+						icon: "none"
+					});
+					return false;
+				}
+				this.getCodeText = "发送中..." //发送验证码
+				this.getCodeisWaiting = true;
+				this.getCodeBtnColor = "rgba(255,255,255,0.5)" //追加样式,修改颜色
+				//示例用定时器模拟请求效果
+				//setTimeout(()用于在指定的毫秒数后调用函数或计算表达式
+				setTimeout(() => {
+					uni.showToast({
+						title: '验证码已发送',
+						icon: "none"
+					}); //弹出提示框
+					//示例默认1234,生产中请删除这一句。
+					// this.code = '1234'; //发送验证码,进行填入
+					this.setTimer(); //调用定时器方法
+				}, 1000)
+			},
+			//setTimer: 需要每隔一段时间执行一件事的的时候就需要使用SetTimer函数
+			setTimer() {
+				let holdTime = 60; //定义变量并赋值
+				this.getCodeText = "重新获取(60)"
+				//setInterval()是一个实现定时调用的函数,可按照指定的周期(以毫秒计)来调用函数或计算表达式。
+				//setInterval方法会不停地调用函数,直到 clearInterval被调用或窗口被关闭。
+				this.Timer = setInterval(() => {
+					if (holdTime <= 0) {
+						this.getCodeisWaiting = false;
+						this.getCodeBtnColor = "#20613D";
+						this.getCodeText = "获取验证码"
+						clearInterval(this.Timer); //清除该函数
+						return; //返回前面
+					}
+					this.getCodeText = "重新获取(" + holdTime + ")"
+					holdTime--;
+				}, 1000)
+			},
+			toReg() {
 				// uni.switchTab({
 				// 	url: '/pages/index/index'
 				// })
+				uni.navigateTo({
+					url: '/pages/login/farmer-reg'
+				})
 
 			},
 			changeAll(e) {
@@ -178,6 +227,7 @@
 	.t-login .login {
 		width: 650rpx;
 		margin: 60rpx auto;
+		margin-top: 0rpx;
 		font-size: 28rpx;
 		color: #000;
 	}
diff --git a/pages/login/farmer-reg.vue b/pages/login/farmer-reg.vue
new file mode 100644
index 0000000..877af58
--- /dev/null
+++ b/pages/login/farmer-reg.vue
@@ -0,0 +1,444 @@
+<template>
+	<view class="container-page">
+		<view>
+			<view class="form-item">
+				<view class="label required">店铺类型</view>
+				<view class="m-l-a m-r-0 flex " :class="[!dto.applicationType?'desc-gray':'']" @click="()=>{
+					if(!id){
+						show_select_type=true
+					}
+				}">
+					<view>{{dto.applicationTypeStr||dto.applicationType || '请选择'}}</view>
+					<u-icon class="m-l-a" name="arrow-right"></u-icon>
+				</view>
+
+			</view>
+			<view class="form-item before-line">
+				<view class="label required">店铺名称</view>
+				<view class="m-l-a m-r-0 flex">
+					<input v-model="dto.applicationTitle" placeholder="请输入店铺名称"
+						style="margin-top: 16px;text-align: right;"></input>
+
+				</view>
+			</view>
+			<view class="form-item before-line">
+				<view class="label required">店铺头像(750*750px)</view>
+				<view class="m-l-a m-r-0 flex">
+					<view class="component-button-upload" @click="uploadIcon('icon')"
+						:style="{'background-image':dto.icon&&`url('${dto.icon}')`||''}">
+
+					</view>
+				</view>
+			</view>
+			<view class="form-item before-line">
+				<view class="label required">姓名</view>
+				<view class="m-l-a m-r-0 flex">
+					<input v-model="dto.applicationTitle" placeholder="请输入姓名"
+						style="margin-top: 16px;text-align: right;"></input>
+
+				</view>
+			</view>
+			<view class="form-item before-line">
+				<view class="label required">联系方式</view>
+				<view class="m-l-a m-r-0 flex">
+					<input v-model="dto.applicationTitle" placeholder="请输入联系方式"
+						style="margin-top: 16px;text-align: right;"></input>
+
+				</view>
+			</view>
+			<view class="form-item before-line">
+				<view class="label required">集货站</view>
+				<view class="m-l-a m-r-0 flex " :class="[!dto.applicationType?'desc-gray':'']" @click="()=>{
+					if(!id){
+						show_select_type=true
+					}
+				}">
+					<view>{{dto.applicationTypeStr||dto.applicationType || '请选择'}}</view>
+					<u-icon class="m-l-a" name="arrow-right"></u-icon>
+				</view>
+
+			</view>
+			<view class="form-item before-line">
+				<view class="label required">地区</view>
+				<view class="m-l-a m-r-0 flex " :class="[!dto.applicationType?'desc-gray':'']" @click="()=>{
+					if(!id){
+						show_select_type=true
+					}
+				}">
+					<view>{{dto.applicationTypeStr||dto.applicationType || '请选择'}}</view>
+					<u-icon class="m-l-a" name="arrow-right"></u-icon>
+				</view>
+
+			</view>
+			<view class="form-item before-line">
+				<view class="label required">地址</view>
+				<view class="m-l-a m-r-0 flex">
+					<input v-model="dto.applicationTitle" placeholder="请输入地址"
+						style="margin-top: 16px;text-align: right;"></input>
+
+				</view>
+			</view>
+			<view class="form-item before-line">
+				<view class="label required">店铺简介</view>
+			</view>
+			<view class="flex">
+				<u--textarea v-model="dto.ps" placeholder="请输入店铺简介"></u--textarea>
+
+			</view>
+			<view class="form-item before-line">
+				<view class="label required">选择审核方式</view>
+				<view class="m-l-a m-r-0 flex">
+					<u-radio-group v-model="dto.idcardType" placement="row">
+						<u-radio :customStyle="{marginBottom: '8px'}" v-for="(item, index) in shTypeList" :key="index"
+							:label="item.name" :name="item.name">
+						</u-radio>
+					</u-radio-group>
+				</view>
+			</view>
+			<view class="form-item before-line" v-if="dto.idcardType=='身份证'">
+				<view class="label required">身份证正反面</view>
+				<view class="m-l-a m-r-0 flex">
+					<view class="component-button-upload m-r-15" @click="uploadIcon('icon')"
+						:style="{'background-image':dto.icon&&`url('${dto.icon}')`||''}">
+
+					</view>
+					<view class="component-button-upload" @click="uploadIcon('icon')"
+						:style="{'background-image':dto.icon&&`url('${dto.icon}')`||''}">
+
+					</view>
+				</view>
+			</view>
+			<view class="form-item before-line" v-if="dto.idcardType=='营业执照'">
+				<view class="label required">营业执照</view>
+				<view class="m-l-a m-r-0 flex">
+					<view class="component-button-upload m-r-15" @click="uploadIcon('icon')"
+						:style="{'background-image':dto.icon&&`url('${dto.icon}')`||''}">
+
+					</view>
+
+				</view>
+			</view>
+
+
+
+
+			<view class="button-green-1 m-t-20 button-fixed-bottom before-line" @click="submit">
+				提交审核
+			</view>
+
+		</view>
+
+
+		<u-picker @confirm="select_type" keyName="label" @cancel="show_select_type=false" :show="show_select_type"
+			:columns="columns_types"></u-picker>
+
+		<u-picker @confirm="select_user" keyName="label" @cancel="show_select_user=false" :show="show_select_user"
+			:columns="userListCols"></u-picker>
+
+
+	</view>
+</template>
+
+<script>
+	import environments from '@/environments'
+	import xflSelect from '@/components/xfl-select/xfl-select.vue'; //导入
+
+	import {
+		mapState
+	} from 'vuex'
+
+	export default {
+
+		data() {
+			return {
+				id: '',
+				orderId: '',
+				show_addlog: false,
+				log_remarks: '',
+				refresh: false,
+				api: '',
+				dto: {
+					id: '',
+					applicationType: '',
+				},
+				show_select_type: false,
+				show_select_user: false,
+				columns_types: [],
+				audit_remarks: '',
+				audit_result: false,
+				show_audit: false,
+
+
+				//审核方式
+				shTypeList: [{
+						name: '身份证',
+						disabled: false
+					},
+					{
+						name: '营业执照',
+						disabled: false
+					}
+				],
+				radiovalue1: '身份证',
+
+			}
+		},
+		onLoad(options) {
+			if (options.id) {
+				this.id = options.id
+				this.getDetail()
+			} else {
+				// this.$http.request('get', '/api/personnel/employee/list', {
+				// 	params: {
+				// 		size: 4000,
+				// 		current: 1
+				// 	}
+				// }).then(res => {
+				// 	this.userListAll = (res.data && res.data.records || []).map(item => {
+				// 		item.label = item.label || item.name || item.nickName || item.loginName || '-'
+				// 		return item
+				// 	})
+				// 	var index = 0
+				// 	this.userList = this.userListAll.map(item => {
+				// 		index += 1
+				// 		return `${index}.` + item.label + (item.tel ? `(${item.tel})` : '')
+				// 	})
+				// 	var arr = this.userListAll.map(item => {
+				// 		return {
+				// 			label: item.label + (item.tel ? `(${item.tel})` : ''),
+				// 			value: item.id
+				// 		}
+				// 	})
+				// 	this.userListCols = [arr]
+
+				// })
+
+
+				this.$http.request('get', '/api/dict/value', {
+					params: {
+						typeCode: 'APPLICATION_TYPE'
+					}
+				}).then(res => {
+					var data = res.data
+					this.columns_types = [data || []]
+					this.columns_types[0].unshift({
+						label: '全部',
+						value: ''
+					})
+
+				})
+			}
+
+		},
+
+		methods: {
+
+
+			select_type(e) {
+				this.show_select_type = false
+				this.dto.applicationTypeStr = e.value[0].label
+				this.dto.applicationType = e.value[0].value
+			},
+			select_user(e) {
+				this.show_select_user = false
+				this.dto.auditPersonStr = e.value[0].label
+				this.dto.auditPersonId = e.value[0].value
+			},
+
+			async getDetail() {
+				this.$message.showLoading()
+				const {
+					code,
+					data
+				} = await this.$http.request('get', "/api/app/application/get/" + this.id, {})
+				if (code == 0) {
+					this.dto = {
+						...data,
+
+					}
+					if (this.dto.applicationDate) {
+						this.dto.applicationDate = this.$util.toDate(new Date(this.dto.applicationDate))
+					}
+					// console.log('this.dto', this.dto)
+
+				}
+
+				this.$message.hideLoading()
+
+			},
+			async submit() {
+				if (!this.dto.applicationType) {
+					this.$message.showToast('未选择类型')
+					return
+				}
+				if (!this.dto.applicationTitle) {
+					this.$message.showToast('未填写申请主题')
+					return
+				}
+				if (!this.dto.auditPersonId) {
+					this.$message.showToast('未选择审批人')
+					return
+				}
+				await this.$message.confirm(`是否确定提交申请${this.auditPersonName?(",审批人为:"+this.auditPersonName):""}`)
+
+				// this.$message.showToast('1')
+				// return
+				var dto = {
+					...this.dto,
+					applicationDate: this.$util.toDate(new Date()),
+					applicantId: this.currentInfo.id
+				}
+				this.$message.showLoading()
+				const re = await this.$http.request('post', '/api/app/application/create', {
+					data: dto
+				})
+				this.$message.hideLoading()
+				if (re.code == 2000 || re.code == 0) {
+					this.$message.showToast('操作成功')
+					//需要标记加一下
+					this.$store.dispatch('sign_add', 'application');
+
+					this.backpage()
+				}
+			},
+			async submitAudit() {
+				var url = ''
+				if (this.audit_result) {
+					url = '/api/app/application/audit/pass'
+				} else {
+					url = '/api/app/application/audit/reject'
+				}
+				var dto = {
+					id: this.id,
+					auditRemarks: this.audit_remarks
+				}
+				this.show_audit = false
+				this.$message.showLoading()
+				const re = await this.$http.request('post', url, {
+					data: dto
+				})
+				this.$message.hideLoading()
+				if (re.code == 2000 || re.code == 0) {
+					this.$message.showToast('操作成功')
+					this.$store.dispatch('sign_add', 'application');
+
+					this.getDetail()
+				}
+			},
+			uploadIcon(key) {
+				const that = this
+				uni.chooseImage({
+					count: 1, // 最多可以选择的图片张数,默认9
+					sizeType: ['original', 'compressed'], //original 原图,compressed 压缩图,默认二者都有
+					sourceType: ['camera', 'album'], //album 从相册选图,camera 使用相机,默认二者都有。如需直接开相机或直接选相册,请只使用一个选项
+					success: function({
+						errMsg,
+						tempFiles
+					}) {
+						if (errMsg === 'chooseImage:ok') {
+							// console.log(tempFiles[0])
+							that.$message.showLoading()
+							that.$http.upload(tempFiles[0].path).then(async res => {
+								var pic = res.data && res.data.length > 0 && res.data[
+										0]
+									.url || ''
+								that.$message.hideLoading()
+								that.dto[key] = pic || ''
+								that.$forceUpdate()
+							}).catch(res => {
+								that.$message.hideLoading()
+
+							})
+						}
+					}
+				})
+			},
+
+		},
+		computed: {
+			...mapState(['currentInfo'])
+		},
+		components: {
+			xflSelect
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.form-item {
+		// padding: 40rpx;
+		border-bottom: 1px solid #F3F3F3;
+		display: flex;
+		// height: 100px;
+
+		.label {
+			width: 300rpx;
+			line-height: 60px;
+
+		}
+
+		.flex {
+			line-height: 60px;
+
+			.flex1 {
+				flex: 1;
+				text-align: center;
+				color: var(--selfblue)
+			}
+
+
+		}
+	}
+
+	.form-item.bottom-border-no {
+		border-bottom: none;
+	}
+
+	.container-page {
+		padding: 40rpx;
+		background-color: #FFFFFF;
+		// min-height: calc(100vh - 80rpx);
+		min-height: 100vh;
+	}
+
+	.style {
+		width: fit-content;
+		margin: 0 auto;
+		line-height: 64rpx;
+		border-radius: 8rpx;
+		padding-left: 20rpx;
+		padding-right: 20rpx;
+		// padding-top: 5rpx;
+		// padding-bottom: 5rpx;
+		border: 2rpx solid var(--selfblue);
+		background-color: var(--selfbluebg);
+		min-width: 100rpx;
+	}
+
+
+	.style-1 {
+		border: 1px solid rgb(122, 187, 255);
+		border: 1px solid #409EFF;
+		color: #409EFF;
+		background-color: rgb(240, 247, 255);
+	}
+
+	.style-2 {
+		border: 1px solid rgb(255, 184, 78);
+		border: 1px solid #FE9044;
+		color: #FE9044;
+		background-color: rgb(255, 247, 235);
+	}
+
+	.style-3 {
+		border: 1px solid #19be6b;
+		color: #19be6b;
+		background-color: rgb(231, 244, 238);
+	}
+
+	.style-4 {
+		border: 1px solid #F56c6c;
+		color: #F56c6c;
+		background-color: rgb(254, 243, 243);
+	}
+</style>
\ No newline at end of file
diff --git a/pages/login/login.scss b/pages/login/login.scss
index 961c478..fcd6136 100644
--- a/pages/login/login.scss
+++ b/pages/login/login.scss
@@ -1,6 +1,18 @@
 .login-container{
-		background-image: url('../../static/images/login/bg.png');
+	min-height: 99vh;
+		background-image: url('../../static/images/farmer/login/bg.png');
+		.nav-title{
+			font-weight: 400;
+			font-size: 32rpx;
+			color: #000000;
+			line-height: 44rpx;
+			text-align: center;
+			padding-bottom: 176rpx;
+			padding-top: 100rpx;
+			font-weight: 600;
+		}
 		.titles-top{
+			padding-bottom: 80rpx;
 			.title-1{
 				font-weight: 600;
 				font-size: 20px;
@@ -13,10 +25,29 @@
 				font-size: 24px;
 				color: #000000;
 				line-height: 33px;
+				.title-3{
+					color: #20613D;
+					
+				}
 			}
-			.title-3{
-				color: #20613D;
-				
+			
+		}
+		.t-login uni-input{
+			border: none !important;
+			background: none !important;
+			border-bottom: 2rpx solid #e9e9e9 !important;
+			padding-left: 40rpx;
+			.input-placeholder{
+				color: var(--topicgray);
 			}
 		}
+		.bottom-button{
+			height: 90rpx;
+			background: var(--topicolor);
+			border-radius: 46rpx;
+			text-align: center;
+			margin-top: 120rpx;
+			margin-bottom: 42rpx;
+			
+		}
 }
\ No newline at end of file
diff --git a/pages/user/user.scss b/pages/user/user.scss
index 33b4320..7ab8232 100644
--- a/pages/user/user.scss
+++ b/pages/user/user.scss
@@ -6,7 +6,7 @@
 	}
 	.top-bg{
 		// background: linear-gradient( 180deg, #BBE9E6 0%, rgba(245,245,245,0) 100%, rgba(245,245,245,0) 100%);
-		background-image: url('../../static/images/farmer/user/bg.png');
+		background-image: url('../../static/images/farmer/home/bg.png');
 		
 		width: 750rpx;
 		height: 438rpx;
diff --git a/static/common/icon-date.png b/static/common/icon-date.png
new file mode 100644
index 0000000..81b5405
--- /dev/null
+++ b/static/common/icon-date.png
Binary files differ

--
Gitblit v1.9.3