Kaynağa Gözat

入驻申请

MS-IOHQJGHXZHQD\Administrator 1 gün önce
ebeveyn
işleme
80d3a3ec26

+ 57 - 27
src/App.vue

@@ -1,5 +1,6 @@
 <script>
-import {  getAccessToken } from "@/api/index";
+import { getTechnicianToken } from "@/api/newLogin";
+import { getTechnician } from "@/api/index";
 export default {
 	globalData: {
 		couponSelected: {}
@@ -9,39 +10,68 @@ export default {
 		}
 	},
 	onLaunch() {
+		this.getTechnicianTokenFun()
 		console.log('App Launch')
-		let isWechat = navigator.userAgent.toLowerCase().includes('micromessenger');
-		// 非微信环境直接跳过
-		if (!isWechat) return;
 
-		const code = this.$utils.getQueryStr('code');
-		const token = uni.getStorageSync('token');
 
-		// 已有登录态,不用登录
-		if (token) return;
-		// 1. 没有code → 跳转微信静默授权
-		if (!code && isWechat) {
-			let appid = 'wx9dc677bd41e82569'
-			//https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx9dc677bd41e82569&redirect_uri=https://city.baoxianzhanggui.com/fragrance/wxcode/&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect
-			let ruri = encodeURIComponent('https://city.baoxianzhanggui.com/fragrance/');
-			const authUrl = `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${appid}&redirect_uri=${ruri}&response_type=code&scope=snsapi_base&state=123#wechat_redirect`
-			window.location.href = authUrl
-		}
+	},
+	onShow() {
+		console.log('App Show')
+	},
+	methods: {
+		//存入openid
+		getTechnicianTokenFun() {
+			let isWechat = navigator.userAgent.toLowerCase().includes('micromessenger');
+			// 非微信环境直接跳过
+			//if (!isWechat) return;//guo
 
+			const code = this.$utils.getQueryStr('code');
+			const token = uni.getStorageSync('access-token');
 
-		let params = {
-			code: code
-		}
-		getAccessToken(params).then(res => {
-			if (res.data.code == 200) {
-				uni.setStorageSync('wx_copenid', res.data.data.copenid);
-				uni.setStorageSync('access-token', res.data.data.token);
+			// 已有登录态,不用登录
+			if (token) {
+				//this.getTechnicianFun()
+				return
+			};
+			// // 1. 没有code → 跳转微信静默授权
+			// if (!code && isWechat) {
+			// 	let appid = 'wx9dc677bd41e82569'
+			// 	//https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx9dc677bd41e82569&redirect_uri=https://city.baoxianzhanggui.com/fragrance/wxcode/&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect
+			// 	let ruri = encodeURIComponent('https://city.baoxianzhanggui.com/fragrance/');
+			// 	const authUrl = `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${appid}&redirect_uri=${ruri}&response_type=code&scope=snsapi_base&state=123#wechat_redirect`
+			// 	window.location.href = authUrl
+			// }
+
+			let params = {
+				//code: this.$utils.('code') //guo
+				code: '031Ccs1w3bRDa73fin2w3BSsSe0Ccs13'
 			}
-		});
+			getTechnicianToken(params).then(res => {
+
+				if (res.data.code == 200) {
+					uni.setStorageSync('wx_copenid', res.data.data.copenid);
+					uni.setStorageSync('access-token', res.data.data.token);
+					this.getTechnicianFun()
+				}
+			})
+		},
+		//查询商户信息   auditStatus 审核状态:-1-申请入住,0-待入驻,1-待审核,2-审核通过,3-审核驳回"
+		getTechnicianFun() {
+			let openid = uni.getStorageSync('wx_copenid')
+			getTechnician({ openid: openid }).then(res => {
+				
+				if (res.data.code == 200) {
+					if(!res.data.result)return
+					if (res.data.result.auditStatus == -1) {
+						uni.navigateTo({
+							url: '/pages/join/staff'
+						})
+					}
+
+				}
+			})
+		},
 
-	},
-	onShow() {
-		console.log('App Show')
 	},
 	onHide() {
 		console.log('App Hide')

+ 37 - 0
src/api/index.js

@@ -630,3 +630,40 @@ export function getIsLottery(data) {
         data
     })
 }
+
+
+
+// 商户注册接口
+export function technicianApply(data) {
+    return request({
+        method: 'post',
+        url: '/technician/technician/apply',
+        data,
+        // header: {
+        //     'content-type': 'multipart/form-data'
+        // }
+    });
+}
+//获取手机验证码
+export function sendMsg(data) {
+    return request({
+        method: 'get',
+        url: '/weChat/sendMsg',
+        data
+    });
+}
+//查询开通服务接口
+export function getServiceCategoryList(dictType) {
+    return request({
+        method: 'get',
+        url: `/system/dict/data/type/${dictType}`
+    });
+}
+//查询商户信息
+export function getTechnician(data) {
+    return request({
+        method: 'get',
+        url:'/technician/technician/getTechnician',
+        data
+    });
+}

+ 20 - 1
src/api/newLogin.js

@@ -1,5 +1,14 @@
 import request from "@/utils/request.js";
-//获取验证码
+
+//存openid
+export function getTechnicianToken(data) {
+    return request({
+        method: 'get',
+        url: '/sq/getTechnicianToken',
+        data
+    });
+}
+//获取手机验证码
 export function sendMsg(data) {
     return request({
         method: 'get',
@@ -31,3 +40,13 @@ export function resetPassword(data) {
         // }
     });
 }
+
+//获取图形验证码
+export function captchaImage(data) {
+    return request({
+        method: 'get',
+        url: '/nightFragrance/captchaImage',
+        data
+    });
+}
+

+ 2 - 2
src/components/upload/index.vue

@@ -1,6 +1,6 @@
 <template>
 	<u-upload :name="name" 
-		:width="width" :height="height" 
+		:width="width" :height="height"
 		:accept="accept" :fileList="fileList" 
 		:multiple="multiple" :maxCount="maxCount" 
 		@afterRead="afterRead" @delete="onDelete">
@@ -10,7 +10,7 @@
       v-if="customImg"
       src="@/static/discover/ic_upload.png"
       mode=""
-      :style="{width: width + 'px', height: height + 'px'}"
+      :style="{width: width + 'px', height: height + 'px',borderRadius: '12rpx'}"
     ></image>
 	</u-upload>
 </template>

+ 50 - 9
src/pages.json

@@ -117,7 +117,18 @@
     {
 			"path": "pages/my/dynamic/index",
 			"style": {
-				"navigationBarTitleText": "我的动态",
+				"navigationBarTitleText": "动态",
+				"navigationBarBackgroundColor": "#2cb8d4",
+				"navigationBarTextStyle": "white",
+				"app-plus": {
+					"softinputNavBar": "none",
+					"titleNView": false
+				}
+			}
+		},{
+			"path": "pages/my/dynamic/dynamicDetail",
+			"style": {
+				"navigationBarTitleText": "动态详情",
 				"navigationBarBackgroundColor": "#2cb8d4",
 				"navigationBarTextStyle": "white",
 				"app-plus": {
@@ -138,7 +149,7 @@
 				}
 			}
 		},
-    {
+    	{
 			"path": "pages/login/wxLogin",
 			"style": {
 				"navigationBarTitleText": "",
@@ -241,39 +252,69 @@
 			"path": "pages/join/staff",
 			"style": {
 				"navigationBarTitleText": "商户入驻",
-				"navigationStyle": "default"
+				"navigationBarBackgroundColor": "#2cb8d4",
+						"navigationBarTextStyle": "white",
+						"app-plus": {
+							"softinputNavBar": "none",
+							"titleNView": false
+						}
 			}
 		},
 		{
 			"path": "pages/join/applyJoin",
 			"style": {
 				"navigationBarTitleText": "申请入驻",
-				"navigationStyle": "default"
+				"navigationBarBackgroundColor": "#2cb8d4",
+						"navigationBarTextStyle": "white",
+						"app-plus": {
+							"softinputNavBar": "none",
+							"titleNView": false
+						}
 			}
 		},
 		{
 			"path": "pages/join/introduceYourselfEdit",
 			"style": {
 				"navigationBarTitleText": "简介",
-				"navigationStyle": "default"
+				"navigationBarBackgroundColor": "#2cb8d4",
+						"navigationBarTextStyle": "white",
+						"app-plus": {
+							"softinputNavBar": "none",
+							"titleNView": false
+						}
 			}
 		},{
 			"path": "pages/join/lifePhotosEdit",
 			"style": {
 				"navigationBarTitleText": "生活照",
-				"navigationStyle": "default"
+				"navigationBarBackgroundColor": "#2cb8d4",
+						"navigationBarTextStyle": "white",
+						"app-plus": {
+							"softinputNavBar": "none",
+							"titleNView": false
+						}
 			}
 		},{
 			"path": "pages/join/idCardEdit", 
 			"style": {
 				"navigationBarTitleText": "身份证",
-				"navigationStyle": "default"
+				"navigationBarBackgroundColor": "#2cb8d4",
+						"navigationBarTextStyle": "white",
+						"app-plus": {
+							"softinputNavBar": "none",
+							"titleNView": false
+						}
 			}
 		},{
 			"path": "pages/join/commitDocumentEdit", 
 			"style": {
 				"navigationBarTitleText": "承诺文件",
-				"navigationStyle": "default"
+				"navigationBarBackgroundColor": "#2cb8d4",
+						"navigationBarTextStyle": "white",
+						"app-plus": {
+							"softinputNavBar": "none",
+							"titleNView": false
+						}
 			}
 		},
 		//编辑资料
@@ -557,7 +598,7 @@
 				"selectedIconPath": "static/identify/index-cur.png"
 			},
       {
-				"text": "发现",
+				"text": "动态",
 				"pagePath": "pages/my/dynamic/index",
 				//"pagePath": "pages/discover/discover",
 				"iconPath": "static/discover/discover.png",

+ 150 - 17
src/pages/join/applyJoin.vue

@@ -1,27 +1,45 @@
 <template>
     <view class="applyJoin">
-        <view>
-            <view> 基本信息</view>
+        <view class="baseInfo">
+            <view class="title">
+                <view class="lineIcon">
+                    <image src="/static/login/lineIcon.png" mode=""></image>
+                </view>
+                <view style="position: relative; z-index: 999!important;">基础信息</view>
+
+            </view>
             <uni-list>
                 <uni-list-item title="姓名" :rightText="baseInfo.name" />
                 <uni-list-item title="性别" :rightText="baseInfo.name" />
                 <uni-list-item title="手机号" :rightText="baseInfo.name" />
-                <uni-list-item title="昵称" :rightText="baseInfo.name" />
+                <uni-list-item  showArrow title="昵称" :class="{'hasText': baseInfo.name}" clickable @click="introduceYourselfEdit(baseInfo.introduceYourself)"
+                    :rightText="baseInfo.name ? baseInfo.name : '昵称'" style="color: red!important;"/>
+
                 <uni-list-item title="入驻城市" :rightText="baseInfo.name" />
-                <uni-list-item showArrow title="简介" clickable @click="introduceYourselfEdit(baseInfo.introduceYourself)"
+                <uni-list-item showArrow title="简介" :class="{'hasText': baseInfo.introduceYourself}" clickable @click="introduceYourselfEdit(baseInfo.introduceYourself)"
                     :rightText="baseInfo.introduceYourself ? baseInfo.introduceYourself : '简单的介绍您自己~'" />
             </uni-list>
         </view>
-        <view>
-            <view> 入驻资料</view>
+        <view class="baseInfo" style="margin-top: 16rpx;height: 69vh;">
+            <view class="title">
+                <view class="lineIcon">
+                    <image src="/static/login/lineIcon.png" mode=""></image>
+                </view>
+                <view style="position: relative; z-index: 999!important;">入驻资料</view>
+
+            </view>
             <uni-list>
 
-                <uni-list-item title="形象照" showArrow clickable @click="portraitPhotoFun">
-                    <template v-slot:footer>
-                        <image class="slot-image" :src="baseInfo.portraitPhoto?baseInfo.portraitPhoto:'/static/logo.png'" mode="widthFix"></image>
+                <uni-list-item title="形象照" :class="{'portraitPhotoRow': baseInfo.portraitPhoto}" showArrow clickable
+                 @click="portraitPhotoFun" :rightText="baseInfo.portraitPhoto? '形象照' : '形象照'">
+                    <template v-slot:footer v-if="baseInfo.portraitPhoto">
+                        <image  class="slot-image"
+                            :src="baseInfo.portraitPhoto ? baseInfo.portraitPhoto : '/static/logo.png'" mode="widthFix">
+                        </image>
                     </template>
                 </uni-list-item>
-                <uni-list-item showArrow title="生活照" :rightText="baseInfo.cImgList.length > 0 ? '已上传' : '去上传'" clickable
+                <uni-list-item showArrow title="生活照" :rightText="baseInfo.cImgList.length > 0 ? baseInfo.cImgList.length+'项' : '去上传'"
+                    :class="{'hasText': baseInfo.cImgList.length > 0}" clickable
                     @click="pictureUpLoad('cImgList', '生活照', 9)" />
                 <uni-list-item showArrow title="宣传视频" :rightText="baseInfo.promotionalVideo.length > 0 ? '已上传' : '去上传'"
                     clickable @click="pictureUpLoad('promotionalVideo', '宣传视频')" />
@@ -37,7 +55,7 @@
                     clickable @click="pictureUpLoad('noCrime', '无犯罪证明', 9)" />
 
                 <uni-list-item showArrow title="承诺文件" :rightText="baseInfo.commitDocment[0].length > 0 && baseInfo.commitDocment[1].length > 0 && baseInfo.commitDocment[2].length > 0
-                ? '已上传' : '去上传'" clickable @click="commitDocmentEditFun('commitDocment')" />
+                    ? '已上传' : '去上传'" clickable @click="commitDocmentEditFun('commitDocment')" />
 
             </uni-list>
         </view>
@@ -47,7 +65,7 @@
 
         <!-- 提交按钮 pages/join/introduceYourselfEdit-->
         <view class="submit-box">
-            <u-button type="primary" disabled block @click="submitForm">提交</u-button>
+            <u-button @click="submitForm">提交</u-button>
         </view>
 
     </view>
@@ -63,7 +81,7 @@ export default {
                 { taskName: '222' }
             ],
             baseInfo: {
-                portraitPhoto:'',
+                portraitPhoto: '',
                 name: '萧然然',
                 gender: '女',
                 phone: '18366668888',
@@ -80,7 +98,7 @@ export default {
                 noCrime: [],
                 promotionalVideo: [],
                 idCard: [],
-                commitDocment: [[],[],[]],
+                commitDocment: [[], [], []],
             }
 
         }
@@ -131,7 +149,7 @@ export default {
                 sourceType: ['album'],
                 success: (res) => {
                     if (res) {
-                        this.baseInfo.portraitPhoto=res.tempFilePaths[0]
+                        this.baseInfo.portraitPhoto = res.tempFilePaths[0]
                     }
                 }
             });
@@ -151,10 +169,112 @@ export default {
 </script>
 
 <style lang="scss" scoped>
+::v-deep .uni-list--border-top {
+    display: none;
+}
+
+::v-deep .uni-list-item {
+    .uni-icon-wrapper {
+        padding: 0 !important;
+
+    }
+    .uni-icons {
+        color: #1D2129 !important;
+        font-size: 26rpx !important;
+        margin-right: -10rpx!important;
+        margin-top: 6rpx;
+    }
+
+}
+
+
+::v-deep .uni-list-item__container {
+    padding: 0;
+
+    .uni-list-item__content-title {
+        font-weight: 400;
+        font-size: 30rpx;
+        color: #1D2129;
+        text-align: left;
+    }
+
+    .uni-list-item__extra-text {
+        font-weight: 400;
+        font-size: 30rpx;
+        color: #4E5969;
+        text-align: right;
+    }
+
+
+
+    
+
+}
+
+::v-deep .container--right {
+
+    .uni-list-item__extra-text {
+        font-weight: 400;
+        font-size: 30rpx !important;
+        color: #C9CDD4 !important;
+    }
+}
+::v-deep .hasText {
+    .uni-list-item__extra-text {
+        color: #4E5969!important;
+    }
+   
+}
+::v-deep .slot-image{
+    width: 58px;
+    height: 58px;
+    border-radius: 50%;
+
+}
+::v-deep .portraitPhotoRow{
+    .uni-list-item__content-title{
+        margin-top: 13rpx;
+    }
+
+}
+
 .applyJoin {
-    background-color: #f5f5f5;
+    background-color: #F7F8FA;
     min-height: 100vh;
-    padding: 20rpx 0;
+  
+
+    ::v-deep .uni-list-item {
+        height: 106rpx;
+    }
+
+    .baseInfo {
+        margin: 16rpx 32rpx;
+        background: #FFFFFF;
+        border-radius: 16rpx 16rpx 16rpx 16rpx;
+        padding: 32rpx;
+
+        .title {
+            font-weight: 500;
+            font-size: 36rpx;
+            color: #1D2129;
+            line-height: 36rpx;
+            position: relative;
+
+            .lineIcon {
+                position: absolute;
+                top: 8rpx;
+                width: 144rpx;
+                height: 24rpx;
+                z-index: 5 !important;
+
+                image {
+                    width: 100%;
+                    height: 100%;
+                }
+            }
+        }
+
+    }
 
     .slot-box {
         /* #ifndef APP-NVUE */
@@ -181,7 +301,20 @@ export default {
     }
 
     .submit-box {
+        width: 100%;
         padding: 30rpx;
+        font-size: 32rpx;
+        background-color: #fff;
+        position: fixed;
+        bottom: 0;
+        height: 136rpx;
+        button {
+            color: #FFFFFF;
+            width: 654rpx;
+            height: 88rpx;
+            background: #333335;
+            border-radius: 60rpx 60rpx 60rpx 60rpx;
+        }
     }
 }
 </style>

+ 47 - 9
src/pages/join/introduceYourselfEdit.vue

@@ -1,12 +1,18 @@
 <template>
-    <view>
+    <view class="introduceYourselfEdit">
         <view class="u-cell-group">
-            <u--textarea :height="300" v-model="value" autoHeight placeholder="简单的介绍您自己~"></u--textarea>
+            <u--textarea placeholderClass="textarea-placeholder" autoHeight v-model="value" placeholder="简单的介绍您自己~"
+                class="textareaDef"></u--textarea>
         </view>
         <view class="footer-bar">
-            <u-button shape="circle" :customStyle="{
+            <u-button :customStyle="{
+                padding: '24rpx 48rpx',
                 color: '#fff',
-                background: 'var(--theme-color-gradient)'
+                background: 'var(--theme-color-gradient)',
+                width: '654rpx',
+                height: '88rpx',
+                background: '#333335',
+                borderRadius: '60rpx 60rpx 60rpx 60rpx',
             }" @click="onSubmit">确认修改</u-button>
         </view>
     </view>
@@ -24,9 +30,9 @@ export default {
     onLoad() {
     },
     onLoad(query) {
-        console.log(query,'query')
-		this.value = (query.introduceYourself === undefined || query.introduceYourself === 'undefined') ? '' : decodeURIComponent(query.introduceYourself)
-	},
+        console.log(query, 'query')
+        this.value = (query.introduceYourself === undefined || query.introduceYourself === 'undefined') ? '' : decodeURIComponent(query.introduceYourself)
+    },
     onShow() {
     },
     methods: {
@@ -48,7 +54,39 @@ export default {
 </script>
 
 <style scoped lang="scss">
-.u-cell-group {
-    padding: 30rpx;
+.introduceYourselfEdit {
+    height: 100vh;
+    background-color: #F7F8FA;
+
+    .u-cell-group {
+        background: #fff;
+        min-height: 260rpx;
+        box-sizing: border-box;
+        border-radius: 8rpx 8rpx 8rpx 8rpx;
+        padding: 32rpx;
+
+        .u-textarea {
+            background: #F7F8FA;
+            min-height: 200rpx !important;
+        }
+
+        .textareaDef {
+
+            .uni-textarea-placeholder {
+                font-weight: 400;
+                font-size: 30rpx;
+                color: #C9CDD4;
+            }
+
+            .uni-textarea-wrapper {
+                font-weight: 400;
+                font-size: 30rpx;
+                color: #4E5969;
+            }
+
+        }
+    }
+
+
 }
 </style>

+ 36 - 7
src/pages/join/lifePhotosEdit.vue

@@ -1,13 +1,15 @@
 <template>
-    <view>
-        <view class="images">
+    <view class="lifePhotosEdit">
+        <view class="u-cell-group">
             <!-- <Upload :maxCount="1" @fileList="onUpload($event, 'cImgList')" /> -->
-            <Upload  :accept="title == '宣传视频'?'file':'image'" :maxSize="title == '宣传视频'?51200:10240"  :maxCount="maxCount" :customImg="true" :width="'70'" :height="'70'"
-                :src="'/static/points/picture2.png'" @fileList="onUpload" :fileList="fileList" />
+            <Upload :accept="title == '宣传视频' ? 'file' : 'image'" :maxSize="title == '宣传视频' ? 51200 : 10240"
+                :maxCount="maxCount" :width="80" :height="80" @fileList="onUpload" :fileList="fileList" />
+
             <view class="tagText" v-if="title == '生活照'">简单介绍自己的生活照,可以说说自己的基本信息,工作场景,等等;
                 或者上传自己清晰露脸半身照/全身照/工作照。最多上传{{ maxCount }}张</view>
             <view class="tagText" v-if="title == '宣传视频'">请上传 大小不超过 50MB 格式为 mp4/mov/mkv/wmv 的文件</view>
-            <view class="tagText" v-if="title == '健康证' || title =='从业资格证' || title =='无犯罪证明'">请上传小于10MB的{{ title }}图片,最多上传{{ maxCount }}张
+            <view class="tagText" v-if="title == '健康证' || title == '从业资格证' || title == '无犯罪证明'">请上传小于10MB的{{ title
+                }}图片,最多上传{{ maxCount }}张
             </view>
 
 
@@ -33,6 +35,7 @@ export default {
             fieldName: '',
             maxCount: 9,
             title: '',
+            img: '/static/login/cameraIcon.png'
         }
     },
 
@@ -67,8 +70,18 @@ export default {
         onSubmit() {
             // 获取页面栈
             const pages = getCurrentPages()
+            // 至少要有上一页才执行
+            if (pages.length < 2) {
+                uni.navigateBack()
+                return
+            }
             // 上一页实例
             const prevPage = pages[pages.length - 2]
+            // 再校验页面实例是否存在
+            if (!prevPage) {
+                uni.navigateBack()
+                return
+            }
             // 直接修改上一页data里的字段
             prevPage.$data.baseInfo[this.fieldName] = this.fileList
             uni.navigateBack()
@@ -79,7 +92,23 @@ export default {
 </script>
 
 <style scoped lang="scss">
-.u-cell-group {
-    padding: 30rpx;
+.lifePhotosEdit {
+    height: 100vh;
+    background-color: #F7F8FA;
+
+    .tagText {
+        margin-top: 32rpx;
+        font-weight: 400;
+        font-size: 26rpx;
+        color: #86909C;
+    }
+
+    ::v-deep .u-cell-group {
+        padding: 32rpx;
+        background-color: #fff;
+        .u-upload__button{
+            margin:0!important;
+        }
+    }
 }
 </style>

+ 707 - 236
src/pages/join/staff.vue

@@ -1,81 +1,107 @@
 <template>
 	<view class="join">
 		<view class="banner">
-			<image src="/static/other/banner.png" mode=""></image>
+			<image src="/static/login/banner.png" mode=""></image>
 		</view>
 		<view class="top">
+			<view v-if="ShopInfo" class="checkBox" :style="{
+				borderColor: ShopInfo.auditStatus == 1 ? '#F76560' : '#FF7D00',
+				color: ShopInfo.auditStatus === 1 ? '#F53F3F' : '#FF7D00', background: status === 1 ? '#FFF5F5' : '#FFF8EC'
+			}">
+				<view class="checkStatus">审核中</view>
+				<view class="text">入驻审核中,审核结果将会在9个工作日通知您</view>
+			</view>
+			<view class="title">
+				<view class="lineIcon">
+					<image src="/static/login/lineIcon.png" mode=""></image>
+				</view>
+				<view style="position: relative;">申请入驻</view>
+
+			</view>
 			<view class="content">
-				<view class="page-section">
-					<view class="name">您的姓名</view>
-					<view class="inp">
-						<!-- <input class="weui-input" v-model="form.cName" placeholder="请输入姓名,最多四个字" /> -->
-						<u-input v-model="form.cName" :type="type" placeholder="输入您的姓名" maxlength='4' />
-					</view>
+				<view class="input-box">
+					<u-input v-model="form.teName" border="none" placeholder="输入真实姓名" class="input-item"
+						placeholder-style="font-weight: 400;font-size: 30rpx;color: #C9CDD4;text-align: right;">
+						<template slot="prefix">
+							<view class="label">
+								<text>姓名</text>
+							</view>
+						</template>
+					</u-input>
 				</view>
-				<view class="page-section">
-					<view class="name">您的性别</view>
-					<u-radio-group v-model="form.nSex">
-						<u-radio v-for="(item, index) in sex" :key="index" 
-							:name="item.value" :label="item.label" 
-							:customStyle="{ margin: '0 12rpx' }"
-						/>
+				<view class="input-box service">
+					<view class="label">性别</view>
+					<u-radio-group v-model="form.teSex">
+						<u-radio activeColor="#333335" v-for="(item, index) in sex" :key="index" :name="item.value"
+							:label="item.label" :customStyle="{ margin: '0 12rpx' }" />
 					</u-radio-group>
 				</view>
-				<view class="page-section">
-					<view class="name">手机号:</view>
-					<view class="inp">
-						<!-- <input class="weui-input" v-model="form.cPhone" placeholder="请输入手机号" /> -->
-						<u-input v-model="form.cPhone" placeholder="请输入手机号" maxlength='11' />
-					</view>
+
+
+				<view class="input-box">
+					<u-input v-model="form.tePhone" border="none" maxlength='11' placeholder="请输入手机号" class="input-item"
+						placeholder-style="font-weight: 400;font-size: 30rpx;color: #C9CDD4;text-align: right;">
+						<template slot="prefix">
+							<view class="label">
+								<text>手机号</text>
+							</view>
+						</template>
+					</u-input>
 				</view>
 				<view class="input-box">
-					<u-input
-						v-model="code"
-						type="number"
-						maxlength="6"
-						placeholder="请输入手机验证码"
-						placeholder-style="color: #999"
-						class="input-item code-input"
-					></u-input>
+					<u-input v-model="form.phoneMsg" type="number" border="none" maxlength="6" placeholder="输入短信验证码"
+						placeholder-style="font-weight: 400;font-size: 30rpx;color: #C9CDD4;text-align: right;margin-right: 42rpx;"
+						class="input-item code-input">
+						<template slot="prefix">
+							<view class="label">
+								<text>验证码</text>
+							</view>
+						</template>
+					</u-input>
 					<view class="code-btn" :class="{ disabled: !canGetCode }" @click="getCode">
-						<text v-if="countdown === 60">获取验证码</text>
-						<text v-else>{{ countdown }}s 后重新获取</text>
+						<text v-if="!CodeSendNum" @click="getCode">发送验证码</text>
+						<view v-else>
+							<text v-if="startCountdownFlag">{{ countdown }}s</text>
+							<text @click="agginGetCode">重新获取</text>
+						</view>
+						<!-- <text v-if="countdown === 60">发送验证码</text>
+          				<text v-else>{{ countdown }}s 后重新获取</text> -->
 					</view>
 				</view>
-				<view class="page-section">
-					<view class="name">合作意向城市</view>
+
+				<view class="input-box">
+					<view class="label" style="width: 50%;">合作意向城市</view>
 					<view class="inp select" @click="show = true">
-						<text>{{form.city}}</text>
-						<img src="/static/identify/down.png" alt="" />
-						<!-- <view class="city" @click="selectCity" v-if="form.city == ''">
-							入驻城市
-						</view>
-						<view class="city" @click="selectCity" v-else>
-							{{form.city}}
-						</view> -->
-						<!-- 	<view class="city" v-if="form.city == ''">
-							选择所在城市(自动定位)
-						</view> -->
-						<!-- <view class="city" v-else  @click="goCity"> -->
-						<!-- <view class="city" v-else>
-							{{form.city}}市
-						</view> -->
-						<!-- <input class="weui-input" v-model="form.cNickName" placeholder="请输入昵称" /> -->
-						<!-- <u-input v-model="form.cNickName" :type="type" placeholder="请输入昵称" maxlength = '4'/> -->
+						<view class="text" :style="{ color: form.teAddress ? '#4E5969Z' : '#C9CDD4' }">{{ form.teAddress
+							|| '选择城市' }}</view>
+						<img src="/static/login/arrowIcon.png" alt="" />
 					</view>
-					<u-picker :show="show" :columns="[cityList]" keyName="label" 
-						@cancel="show = false" @confirm="onSelect"
-					></u-picker>
+
+					<u-popup :show="show" mode="bottom" border-radius="16rpx 16rpx 0 0"
+						:style="{ height: '600rpx', zIndex: 9999,}">
+
+						<u-picker :show="show" confirmColor="#fff" title="合作意向城市" :columns="[cityList]" keyName="label"
+							:style="{ zIndex: 0, }" @confirm="onSelect" @cancel="cancel"></u-picker>
+					</u-popup>
 				</view>
-				<view class="page-section">
-					<view class="name">开通服务</view>
-					<u-radio-group v-model="form.serveType">
-						<u-radio v-for="(item, index) in serveArr" :key="index" 
-							:name="item.value" :label="item.label" 
-							:customStyle="{ margin: '0 12rpx' }"
-						/>
+				<view class="input-box service">
+					<view class="label">开通服务</view>
+					<u-radio-group v-model="form.openService">
+						<u-radio activeColor="#333335" v-for="(item, index) in serveArr" :key="index"
+							:name="item.dictValue" :label="item.dictLabel" :customStyle="{ fontSize: '20rpx' }" />
 					</u-radio-group>
 				</view>
+
+				<!-- <view class="page-section">
+					<view class="name">合作意向城市</view>
+					<view class="inp select" @click="show = true">
+						<text>{{ form.teAddress }}</text>
+						<img src="/static/identify/down.png" alt="" />
+					</view>
+					<u-picker :show="show" :columns="[cityList]" keyName="label" @cancel="show = false"
+						@confirm="onSelect"></u-picker>
+				</view> -->
+
 				<!-- <view class="page-section">
 					<view class="name">您所在的位置:</view>
 					<view class="weui-cells weui-cells_after-title location" @click="getAddress">
@@ -85,45 +111,88 @@
 				</view> -->
 				<view class="updata" style="border:0;">
 					<view class="name">工作形象照</view>
-					
+
 					<view class="images">
-						<Upload
-							:maxCount="2"
-							@fileList="onUpload($event, 'cImgList')"
-						/>
+						<Upload :maxImageSize=2097152 :maxCount="2" :width="80" :height="80" :fileList="avatarList"
+							@fileList="onUpload($event)" />
 					</view>
 					<view class="title">
-						请上传本人近期照片,图片大小不超过10M (建议清晰正脸照)
+						请上传本人2张近期照片,图片大小不超过2M(建议清晰正脸照)
 					</view>
 				</view>
 			</view>
 
-			<view class="submits">
-				
-				<view class="btn" @click="submit">
-					提交
-				</view>
-				<text>平台不会通过任何渠道泄漏你的个人信息,请放心输入</text>
+
+		</view>
+		<view class="submits">
+
+			<view class="btn" @click="submit">
+				提交
 			</view>
+			<text>平台不会通过任何渠道泄漏你的个人信息,请放心输入</text>
 		</view>
+
+
+		<!-- 图形验证码弹窗 -->
+		<u-popup :show="showCaptcha" mode="center" border-radius="12">
+			<view class="captcha-box">
+				<view class="captcha-title">
+					<view>请输入下方图形验证码</view>
+					<u-icon custom-style="position: relative;left:90rpx ;" name="close" color="#C9CDD4" size="20"
+						@click="showCaptcha = false"></u-icon>
+				</view>
+				<view style="padding: 0 48rpx;margin-top: 48rpx;">
+					<view
+						style="display: flex;justify-content: space-between;height: 106rpx;border-bottom: 1rpx solid #E7E7E7;">
+
+						<!-- 验证码输入框,唤起全字符键盘 -->
+						<u-input v-model="imgCode" placeholder="请输入图形验证码" :focus="showCaptcha" type="text" maxlength="4"
+							border="none"
+							placeholder-style="font-weight: 400;font-size: 30rpx;color: #C9CDD4;"></u-input>
+						<!-- 图形验证码图片,点击刷新 -->
+						<image :src="captchaImg" @click="refreshCaptcha" class="captcha-img"></image>
+					</view>
+					<view class="text">看不清? 换一张</view>
+					<u-button class="submitImgCode" @click="submitImgCode" block>确定</u-button>
+
+				</view>
+			</view>
+		</u-popup>
 	</view>
 </template>
 
 <script>
+
 import {
-	getInfo,
-	getCityList,
+	getCityList, technicianApply, sendMsg, getServiceCategoryList, getTechnician
 } from '@/api/index';
 import {
-	netStaffAdd,
-} from '@/api/staff';
+	captchaImage
+} from '@/api/newLogin';
+
 import Upload from '@/components/upload/index.vue';
 export default {
 	components: {
 		Upload
 	},
+	computed: {
+		canGetCode() {
+			return !this.isSendingCode && this.countdown === 60
+		},
+		// canBind() {
+		// 	return this.phoneMsg && this.phoneMsg.length === 6 && !this.isBinding
+		// }
+	},
 	data() {
 		return {
+			status: 1,
+			imgCode: '',        // 用户填写的图形验证码
+			captchaImg: '',     // 图形验证码图片地址
+			captchaKey: '',     // 后端返回验证码标识
+			showCaptcha: false,
+			startCountdownFlag: false,
+			timer: null,
+			isSendingCode: false,
 			countdown: 60,
 			cityList: [],
 			show: false,
@@ -141,157 +210,272 @@ export default {
 				}
 			],
 			serveArr: [
-				{
-					value: 1,
-					label: '上门按摩'
-				},
-				{
-					value: 0,
-					label: '同城陪玩'
-				}
+				// {
+				// 	value: 1,
+				// 	label: '上门按摩'
+				// },
+				// {
+				// 	value: 2,
+				// 	label: '同城陪玩'
+				// }
 			],
+			avatarList: [],
+			CodeSendNum: 0,
 			form: {
-				id: '',
-				cName: '',
-				cNickName: '',
-				cPortrait: '',
-				cPhone: '',
-				cJianjie: '',
-				nSex: 0,
-				serveType:0,
-				cSfzImg: [],
-				cImgList: [],
-				latitude: '',
-				longitude: '',
-				name: '0',
-				address: '',
-				cOpenId: '',
-				cBhList: '',
-				city: '请选择'
+				teAreaCode: '',
+				cOpenid: uni.getStorageSync('wx_copenid'),
+				teName: '',
+				//cNickName: '',
+				//cPortrait: '',
+				tePhone: '',
+				phoneMsg: '',
+				//cJianjie: '',
+				teSex: null,
+				openService: null,
+				//cSfzImg: [],
+				avatar: '',
+				//latitude: '',
+				//longitude: '',
+				//name: '0',
+				//cOpenId: '',
+				//cBhList: '',
+				teAddress: ''
 			},
 			token: '',
+			uuid: '',
+			ShopInfo: {}
 		}
 	},
-	onLoad() {
+	onLoad(options) {
+		if (options.ShopInfo) this.ShopInfo = JSON.parse(options.ShopInfo)
 		this.isLogin = !!uni.getStorageSync('access-token');
 	},
 	onShow() {
-		this.getinfo()
-		this.getCity()
+		//this.getServiceCategoryList()
+		//this.getCity()
 
+		//this.getinfo()
 		// let city = uni.getStorageSync('selectCity')
 		// let lastCity = city.charAt(city.length - 1)
 		// lastCity == '市' ? this.form.city = city.slice(0, -1) : this.form.city = city
 		// this.form.city = uni.getStorageSync('selectCity')
 	},
 	methods: {
-		// upload事件
-		onUpload(e, t) {
-			this.form[t] = e.map(item => item.url);
+		//查询商户信息 auditStatus 审核状态:-1-申请入住,0-待入驻,1-待审核,2-审核通过,3-审核驳回"
+		getTechnicianFun() {
+			let openid = uni.getStorageSync('wx_copenid')
+			getTechnician({ openid: openid }).then(res => {
+				console.log(res)
+				if (res.data.code == 200) {
+					if (!res.data.result) return
+					this.ShopInfo = res.data.result
+
+					if (res.data.result.auditStatus == -1) {
+						uni.navigateTo({
+							url: '/pages/join/staff'
+						})
+					} else if (res.data.result.auditStatus == 0) {
+						let str = uni.$u.queryParams(res.data.result)
+						uni.navigateTo({ url: `/pages/join/staff${str}` })
+					}
+
+				}
+			})
 		},
-		goCity() {
-			uni.navigateTo({
-				url: '/pages/identify/city?type=' + 'indent'
+		//图形验证码提交
+		submitImgCode() {
+			if (!this.imgCode) {
+				uni.showToast({
+					title: '请输入验证码',
+					icon: 'none'
+				})
+				return
+			}
+			sendMsg33333({ uuid: this.uuid, imgCode: this.imgCode }).then(res => {
+				console.log(res)
+				if (res.data.code == 200) {
+					this.showCaptcha = false
+					this.getCode()
+				}
+
+
+			})
+
+		},
+
+
+		//查询开通服务接口
+		getServiceCategoryList() {
+			getServiceCategoryList('service_tag').then(res => {
+				this.serveArr = res.data.data
+				console.log(this.serveArr)
 			})
 		},
-		getAddress() {
-			uni.chooseLocation({
-				success: res => {
-					this.form.name = res.name;
-					this.form.latitude = res.latitude;
-					this.form.longitude = res.longitude;
-					// this.form.address = res.address
+		//重新获取验证码
+		agginGetCode() {
+			if (!this.form.tePhone) {
+				uni.showToast({
+					title: '请输入手机号',
+					icon: 'none'
+				})
+				return
+			}
+
+			if (!/^1[3456789]\d{9}$/.test(this.form.tePhone)) {
+				uni.showToast({
+					title: '请输入正确的手机号',
+					icon: 'none'
+				})
+				return
+			}
+			captchaImage().then(res => {
+				console.log(res)
+				if (res.data.code == 200) {
+					this.uuid = res.data.uuid
 				}
-			});
+			})
+			this.showCaptcha = true
+
 		},
-		getinfo() {
-			getInfo().then(res => {
+		//获取验证码
+		getCode() {
+			if (!/^1[3456789]\d{9}$/.test(this.form.tePhone)) {
+				uni.showToast({
+					title: '请输入正确的手机号',
+					icon: 'none'
+				});
+				return;
+			}
+			if (this.isSendingCode || this.countdown < 60) return
+
+			this.isSendingCode = true
+			sendMsg({ phone: this.form.tePhone }).then(res => {
+				console.log(res)
 				if (res.data.code == 200) {
-					this.isLogin = true
-					// this.info = res.data.data,
-					// this.dBalance = res.data.data.dBalance.toFixed(2)
-				} else if (res.data.code == 401) {
-					uni.showModal({
-						title: '请先登录!',
-						success: (res) => {
-							if (res.confirm) {
-								uni.switchTab({
-									url: '/pages/my/my'
-								})
-							} else if (res.cancel) {
-								return
-							}
-						}
+					uni.showToast({
+						title: '验证码已发送',
+						icon: 'none'
 					})
+					this.CodeSendNum = 1
+
+					this.startCountdown()
+					this.isSendingCode = false
+				} else {
+					uni.showToast({
+						title: res.msg,
+						icon: 'none'
+					});
 				}
+
+
+
 			})
+
+
+		},
+		startCountdown() {
+			this.startCountdownFlag = true
+			this.countdown = 60
+			this.timer = setInterval(() => {
+				this.countdown--
+				if (this.countdown <= 0) {
+					clearInterval(this.timer)
+					this.startCountdownFlag = false
+					//this.countdown = 60
+					this.timer = null
+				}
+			}, 1000)
+		},
+
+		// upload事件
+		onUpload(e) {
+			this.avatarList = e;
 		},
 		//提交
 		submit() {
+			console.log(this.avatarList, 'avatarList')
+			console.log(this.form)
 			// var openids = uni.getStorageSync('wx_copenid')
 			// this.form.cOpenId = openids
 			// this.form.cAddress =this.form.cAddress
 			// this.form.cSfzImg = this.idCard
 			// that.data.form.cBhList = that.data.form.cBhList.join(", ")
-			if (this.form.cName == '') {
+			if (this.form.teName == '') {
 				uni.showToast({
 					title: '请输入您的姓名',
 					icon: 'none'
 				})
 				return
 			}
-			if (!/^1[3456789]\d{9}$/.test(this.form.cPhone)) {
+			if (this.form.teSex === null) {
+				uni.showToast({
+					title: '请选择您的性别',
+					icon: 'none'
+				})
+				return
+			}
+
+			if (!/^1[3456789]\d{9}$/.test(this.form.tePhone)) {
 				uni.showToast({
 					title: '请输入正确的手机号',
 					icon: 'none'
 				});
 				return;
 			}
-			if (this.form.city == '') {
+
+			if (this.form.phoneMsg == '') {
 				uni.showToast({
-					title: '请选择所在城市',
+					title: '请输入验证码',
 					icon: 'none'
 				});
 				return
 			}
-			if (this.form.cImgList.length < 1) {
+			if (this.form.teAddress == '') {
 				uni.showToast({
-					title: '最少上传一张生活照片',
+					title: '请选择城市',
+					icon: 'none'
+				});
+				return
+			}
+			if (!this.form.openService) {
+				uni.showToast({
+					title: '请选择开通服务',
+					icon: 'none'
+				});
+				return
+
+			}
+
+			if (this.avatarList.length) {
+				this.form.avatar = this.avatarList.map(item => item.url).join(',')
+			}
+			if (this.avatarList.length < 1) {
+				uni.showToast({
+					title: '最少上传一张工作形象照',
 					icon: 'none'
 				});
 				return
 			} else {
-				netStaffAdd(this.form).then(res => {
+				technicianApply(this.form).then(res => {
 					if (res.data.code == 200) {
+						uni.setStorageSync('wx_phone', this.form.tePhone)
 						uni.showToast({
-							title: "申请成功",
-						})
-						setTimeout(() => {
-							uni.navigateBack()
-						}, 1000)
-					} else if (res.data.code == 401) {
-						uni.showModal({
-							title: '请先登录!',
-							success: (res) => {
-								if (res.confirm) {
-									uni.switchTab({
-										url: '/pages/my/my'
-									})
-								} else if (res.cancel) {
-									return
-								}
-
-							}
+							title: res.data.message,
+							icon: 'none'
 						})
+						this.getTechnicianFun()
+
 					} else {
 						uni.showToast({
-							title: res.data.msg,
+							title: res.msg,
 							icon: 'none'
-						})
+						});
 					}
 				})
+
 			}
 		},
+		//获取城市
 		getCity() {
 			getCityList().then(res => {
 				this.cityList = res.data.data.map(({
@@ -306,25 +490,167 @@ export default {
 		selectCity() {
 			this.show = true
 		},
+		cancel() {
+			console.log('cancel')
+			this.show = false
+		},
 		onSelect(e) {
-			this.form.city = e.value[0].label
-			this.form.deptId = e.value[0].value
+			console.log(e)
+			if (!e.value[0]) return
+			this.form.teAddress = e.value[0].label
+			this.form.teAreaCode = e.value[0].value
+			//this.form.deptId = e.value[0].value
 			this.show = false
 		},
+		// goCity() {
+		// 	uni.navigateTo({
+		// 		url: '/pages/identify/city?type=' + 'indent'
+		// 	})
+		// },
+		// getAddress() {
+		// 	uni.chooseLocation({
+		// 		success: res => {
+		// 			this.form.name = res.name;
+		// 			this.form.latitude = res.latitude;
+		// 			this.form.longitude = res.longitude;
+		// 			// this.form.address = res.address
+		// 		}
+		// 	});
+		// },
+
 	},
 	mounted() {
 		this.token = uni.getStorageSync('access-token'); // 假设token保存在本地缓存中
+	},
+	beforeDestroy() {
+		if (this.timer) {
+			clearInterval(this.timer)
+			this.timer = null
+		}
 	}
 }
 </script>
 
 <style lang="scss" scoped>
+::v-deep .u-picker {
+	bottom: 136rpx;
+	background-color: #ffffff;
+	position: relative;
+}
+
+::v-deep .u-toolbar__cancel__wrapper {
+	width: 30rpx;
+	height: 30rpx;
+	position: absolute;
+	right: 32rpx;
+	background-image: url('/static/login/closeIcon.png');
+	background-repeat: no-repeat;
+	background-size: 100% 100%;
+
+	.u-toolbar__wrapper__cancel {
+		width: 30rpx;
+		height: 30rpx;
+
+		span {
+			display: none;
+		}
+
+	}
+}
+
+
+
+/* 关键:穿透隐藏原生 toolbar,只留插槽内容 */
+.u-toolbar {
+	z-index: 9999 !important;
+	display: block !important;
+}
+
+::v-deep .u-toolbar__cancel__wrapper {
+	color: #666;
+}
+
+::v-deep .u-toolbar__confirm__wrapper {
+	position: fixed;
+	bottom: 0;
+	width: 100%;
+	padding: 24rpx 48rpx;
+
+	.u-toolbar__wrapper__confirm {
+		width: 654rpx;
+		height: 88rpx;
+		background: #333335;
+		border-radius: 60rpx 60rpx 60rpx 60rpx;
+
+		font-weight: 400;
+		font-size: 32rpx;
+		color: #FFFFFF;
+		text-align: center;
+		display: flex;
+		align-items: center;
+		justify-content: center;
+	}
+}
+
+.captcha-box {
+	width: 622rpx;
+	background: #FFFFFF;
+	border-radius: 32rpx 32rpx 32rpx 32rpx;
+
+	.captcha-title {
+		display: flex;
+		justify-content: center;
+		align-items: center;
+		font-weight: 500;
+		font-size: 32rpx;
+		color: #333333;
+		text-align: center;
+		padding: 32rpx 0;
+		border-bottom: 1rpx solid #E7E7E7;
+
+	}
+
+	.captcha-img {
+		//width: 100%;
+		width: 200rpx;
+		height: 106rpx;
+	}
+
+	.submitImgCode {
+		width: 526rpx;
+		height: 80rpx;
+		background: linear-gradient(263deg, #45FFD7 0%, #7FFFBD 100%);
+		border-radius: 60rpx 60rpx 60rpx 60rpx;
+		margin-top: 48rpx;
+
+		font-weight: 500;
+		font-size: 32rpx;
+		color: #1D2129;
+		text-align: center;
+		margin-bottom: 48rpx;
+	}
+
+	.text {
+		margin-top: 12rpx;
+		font-weight: 400;
+		font-size: 28rpx;
+		color: #86909C;
+		text-align: right;
+
+	}
+
+	.u-input {}
+}
+
 .join {
-	min-height: 100vh;
+	height: 105vh;
+	overflow: auto;
+
+	background-color: #F7F8FA;
 
 	.banner {
 		width: 100%;
-		height: 424rpx;
+		height: 304rpx;
 
 		image {
 			width: 100%;
@@ -333,122 +659,267 @@ export default {
 	}
 
 	.top {
-		width: 100%;
-		height: 100px;
+		margin: 0 32rpx;
+		position: relative;
 		padding: 32rpx;
 		box-sizing: border-box;
-		margin-top: 44rpx;
-		background-color: #FDFDFD;
+		margin-top: -42rpx;
+		background-color: #FFF;
+		border-radius: 16rpx;
+
+		.checkBox {
+			padding: 24rpx;
+			width: 622rpx;
+			height: 134rpx;
+			border-radius: 8rpx 8rpx 8rpx 8rpx;
+			border: 1rpx solid #111111;
+			margin-bottom: 32rpx;
+
+			//color: #FF7D00;
+			.checkStatus {
+				font-weight: 500;
+				font-size: 30rpx;
+
+				text-align: left;
+
+			}
+
+			.text {
+				margin-top: 8rpx;
+				font-weight: 400;
+				font-size: 26rpx;
+				text-align: left;
+			}
+		}
+
+		.title {
+			font-weight: 500;
+			font-size: 36rpx;
+			color: #1D2129;
+			line-height: 36rpx;
+			position: relative;
+
+			.lineIcon {
+				position: absolute;
+				top: 10rpx;
+				width: 130rpx;
+				height: 24rpx;
+
+				image {
+					width: 100%;
+					height: 100%;
+				}
+			}
+		}
 
 		.content {
 			width: 100%;
 			height: auto;
-			padding: 24rpx 32rpx;
 			box-sizing: border-box;
-			background: #FFFFFF;
 			box-shadow: 0 4rpx 12rpx 0 rgba(209, 168, 88, 0.1);
 			border-radius: 24rpx;
 
-			.page-section {
-				width: 100%;
-				font-size: 28rpx;
-				margin-bottom: 32rpx;
+			.input-box {
+				width: 622rpx;
+				height: 110rpx;
+				background: #ffffff00 !important;
+				display: flex;
+				align-items: center;
+				justify-content: space-between;
+				border-bottom: 1rpx solid #E7E7E7;
 
-				.name {
-					width: 31%;
-					margin-bottom: 20rpx;
+
+				.u-input {
+					background: #ffffff00 !important;
+				}
+
+				.label {
+					font-weight: 400;
+					font-size: 30rpx;
+					color: #1D2129;
+					text-align: left;
+				}
+
+				.input-item {
+					flex: 1;
+				}
+
+				.captcha-img {
+					width: 30rpx;
+					height: 30rpx;
 				}
 
+				::v-deep .uni-input-input {
+					font-weight: 400;
+					font-size: 30rpx;
+					color: #4E5969;
+					text-align: right;
+				}
+
+				.code-input {
+					margin-right: 42rpx;
+					border: 1px solid re;
+
+				}
+
+				.code-btn {
+					font-weight: 400;
+					font-size: 30rpx;
+					color: #19D29B;
+					text-align: center;
+					font-style: normal;
+					text-transform: none;
+				}
+
+				// .name {
+				// 	width: 31%;
+				// 	margin-bottom: 20rpx;
+				// }
+
 				.inp {
 					width: 100%;
 				}
 
-				.select{
+				.select {
 					width: 100%;
-					padding: 12rpx 18rpx;
-					border-radius: 8rpx;
-					border: 2rpx solid #dadbde;
+
 					display: flex;
 					align-items: center;
-					justify-content: space-between;
+					justify-content: flex-end;
 
-					text {
-						width: auto;
-						color: #333333;
+					.text {
+						font-weight: 400;
 						font-size: 30rpx;
+						text-align: right;
 					}
 
 					img {
-						width: 24rpx;
-						height: 24rpx;
+						width: 22rpx;
+						height: 22rpx;
 					}
 				}
-				
-				
-			}.code-box {
+			}
 
-					.code-btn {
-						width: 200rpx;
-						text-align: right;
-						font-size: 28rpx;
-						color: #2DB1A8;
-						line-height: 88rpx;
+			.page-section {
+				width: 100%;
+				font-size: 28rpx;
+				height: 106rpx;
+				display: flex;
+				align-items: center;
 
-						&.disabled {
-						color: #2DB1A8;
-						}
-					}
-				}
-			.input-box {
-					width:100%;
-					height: 92rpx;
-					background: #FFFFFF;
-					border-radius: 24rpx;
-					margin: 46rpx auto;
+
+
+
+			}
+
+			.service {
+				/* 普通中文/英文自动换行 */
+				word-wrap: break-word;
+				word-break: break-all;
+				white-space: normal;
+
+				.u-radio-group--row {
 					display: flex;
-					align-items: center;
+					justify-content: flex-end;
+					flex-wrap: wrap;
+					/* 放不下自动换行 */
+					gap: 10px;
+					/* 间距,可选 */
+				}
+
+				.u-radio {
+					/* 减去3个gap宽度,均分4份 */
+					// width: calc((100% - 2 * 12px) / 3);
+					// box-sizing: border-box;
+				}
+
+				::v-deep .u-radio__text {
+					font-weight: 400;
+					font-size: 30rpx;
+					color: #f10000;
+					text-align: right;
+				}
+			}
+
+			.code-box {
 
-					.input-item {
-						width: 100rpx;
+				.code-btn {
+					width: 200rpx;
+					text-align: right;
+					font-size: 28rpx;
+					color: #2DB1A8;
+					line-height: 88rpx;
+
+					&.disabled {
+						color: #2DB1A8;
 					}
 				}
+			}
+
 
 			.updata {
-				margin-top: 20rpx;
+				margin-top: 32rpx;
 				width: 100%;
-				font-size: 28rpx;
+
+				.name {
+					font-weight: 400;
+					font-size: 30rpx;
+					color: #1D2129;
+					text-align: left;
+				}
 
 				.images {
-					margin-top: 20rpx;
+					border-radius: 12rpx 12rpx 12rpx 12rpx;
+					margin-top: 16rpx;
 				}
-				.title{
-					font-size: 22rpx;
-					color: #999999;
+
+				.title {
+					font-weight: 400;
+					font-size: 26rpx;
+					color: #86909C;
+					text-align: justified;
+					overflow: hidden;
+					// text-overflow: ellipsis;
+					white-space: nowrap;
 				}
 			}
 
 		}
 
-		.submits {
+
+	}
+
+	.submits {
+		padding: 24rpx 48rpx;
+		background-color: #fff;
+		position: fixed;
+		bottom: 0;
+		width: 100%;
+		margin-top: 28rpx;
+
+		text {
+			font-weight: 400;
+			font-size: 22rpx;
+			color: #86909C;
+
+			display: block;
 			width: 100%;
-			margin-top: 28rpx;
-			text{
-				display: block;
-				width: 100%;
-				text-align: center;
-				font-size: 22rpx;
-				color: #999999;
-			}
-			.btn {
-				width: 100%;
-				height: 84rpx;
-				text-align: center;
-				background: linear-gradient(90deg, #BFA061 0%, #BD9961 100%);
-				border-radius: 14rpx;
-				margin: 16rpx auto;
-				line-height: 84rpx;
-				color: #ffffff;
-			}
+			margin-top: 10rpx;
+			text-align: center;
+		}
+
+		.btn {
+			width: 654rpx;
+			height: 88rpx;
+			background: #333335;
+			border-radius: 60rpx 60rpx 60rpx 60rpx;
+			font-weight: 500;
+			font-size: 32rpx;
+			color: #FFFFFF;
+			text-align: center;
+			display: flex;
+			justify-content: center;
+			align-items: center;
 		}
 	}
 }

+ 122 - 107
src/pages/my/dynamic/add_dynamic.vue

@@ -2,119 +2,63 @@
   <view class="publish-container">
     <view class="content-body">
       <view class="text-area">
-        <u--textarea
-          v-model="formData.title"
-          placeholder="请输入标题..."
-          maxLength="20"
-          border="none"
-          height="20"
-        ></u--textarea>
+        <u--textarea v-model="formData.title" placeholder="请输入标题..." maxLength="30" border="none"
+          height="20"></u--textarea>
         <view class="line"></view>
       </view>
       <view class="content-area">
-        <u--textarea
-          v-model="formData.content"
-          placeholder="记录美好生活时刻..."
-          maxLength="300"
-          border="none"
-          height="150"
-          count
-        ></u--textarea>
+        <u--textarea v-model="formData.content" placeholder="记录美好生活时刻..." maxLength="500" border="none" height="150"
+          count></u--textarea>
       </view>
       <view class="media-area">
         <view v-if="formData.videoUrl">
-          <uni-icons
-            class="icon iconfont icon-cuo"
-            type="trash-filled"
-            size="20"
-            @tap="delectVideo"
-          ></uni-icons>
-          <video
-            ref="myVideo"
-            :src="formData.videoUrl"
-            class="video-container"
-            controls
-          ></video>
+          <uni-icons class="icon iconfont icon-cuo" type="trash-filled" size="20" @tap="delectVideo"></uni-icons>
+          <video ref="myVideo" :src="formData.videoUrl" class="video-container" controls></video>
         </view>
-        <clUpload
-          v-else
-          v-model="fileList"
-          :action="uploadApi"
-          :headers="headers"
-          :count="maxCount"
-          :listStyle="{
-            columnGap: '20rpx',
-            rowGap: '20rpx',
-            width: '130rpx',
-            radius: '12rpx',
-          }"
-          :imageFormData="{
+        <clUpload v-else v-model="fileList" :action="uploadApi" :headers="headers" :count="maxCount" :listStyle="{
+          columnGap: '20rpx',
+          rowGap: '20rpx',
+          width: '130rpx',
+          radius: '12rpx',
+        }" :imageFormData="{
             count: 9,
             size: 2,
-          }"
-          :videoFromData="{
+          }" :videoFromData="{
             count: 1,
             size: 50,
-          }"
-          :maxVideo="1"
-          :fileType="mediaType"
-          addImg="/static/discover/ic_upload.png"
-          deleteImg="/static/discover/ic_delete.png"
-          @onSuccess="onSuccess"
-          @onMediaTypeSelect="selectMediaType"
-          @onError="onCancel"
-        ></clUpload>
+          }" :maxVideo="1" :fileType="mediaType" addImg="/static/discover/ic_upload.png"
+          deleteImg="/static/discover/ic_delete.png" @onSuccess="onSuccess" @onMediaTypeSelect="selectMediaType"
+          @onError="onCancel"></clUpload>
       </view>
       <view class="tips">
-        <text v-if="fileList.length === 0"
-          >支持上传图片(最多9张)或视频(1个)</text
-        >
+        <text v-if="fileList.length === 0">支持上传图片(最多9张)或视频(1个)</text>
       </view>
     </view>
     <view class="location-cell">
       <u-cell-group :border="false">
-        <u-cell
-          title="发布地"
-          :value="formData.location || '请选择'"
-          isLink
-          :border="true"
-          @click="selectLocation"
-        >
+        <u-cell title="地点" :value="formData.location || '请选择'" isLink :border="true" @click="selectLocation">
         </u-cell>
-        <u-cell
+        <!-- <u-cell
           title="可见范围"
           :value="formData.visibleRange || '请选择'"
           isLink
           :border="true"
           @click="showScopePicker = true"
         >
-        </u-cell>
+        </u-cell> -->
       </u-cell-group>
     </view>
     <view class="footer-bar">
-      <u-button
-        text="返回"
-        shape="circle"
-        customStyle="height: 38px; font-size: 18px; margin-right: 20rpx;"
-        @click="cancel"
-      ></u-button>
-      <u-button
-        text="立即发布"
-        color="linear-gradient(80deg,#02f6c1 0%,#07cdc4 100%)"
-        shape="circle"
-        customStyle="height: 38px; font-size: 18px;"
-        @click="submit('publish')"
-      ></u-button>
+      <u-button text="存为草稿" shape="circle" customStyle="height: 38px; font-size: 18px; margin-right: 20rpx;"
+        @click="cancel"></u-button>
+      <u-button text="发布动态" color="linear-gradient(80deg,#02f6c1 0%,#07cdc4 100%)" shape="circle"
+        customStyle="height: 38px; font-size: 18px;" @click="submit('publish')"></u-button>
     </view>
     <!-- 可见范围 -->
-    <u-picker
-      title="请选择"
-      :show="showScopePicker"
-      :columns="scopeList"
-      confirmColor="#1ecbc3"
-      @confirm="confirmScope"
-      @cancel="showScopePicker = false"
-    ></u-picker>
+    <u-picker title="请选择" :show="showScopePicker" :columns="scopeList" confirmColor="#1ecbc3" @confirm="confirmScope"
+      @cancel="showScopePicker = false"></u-picker>
+
+
     <!-- 确认返回 -->
     <u-popup :show="popShow" mode="center" :round="12">
       <view class="popup-content">
@@ -123,19 +67,31 @@
           <text>是否存入草稿箱?</text>
         </view>
         <view class="popup-btn">
-          <u-button
-            text="不保存"
-            shape="circle"
+          <u-button text="不保存" shape="circle"
             customStyle="width: 225rpx; height: 68rpx; font-size: 28px; color: #1BD6CD; border-color: #1BD6CD;"
-            @click="popClose"
-          ></u-button>
-          <u-button
-            text="保存"
-            color="linear-gradient( 90deg, #1AD7CE 0%, #21C9C1 100%)"
-            shape="circle"
-            customStyle="width: 225rpx; height: 68rpx; font-size: 28px;"
-            @click="save('draft')"
-          ></u-button>
+            @click="popClose"></u-button>
+          <u-button text="保存" color="linear-gradient( 90deg, #1AD7CE 0%, #21C9C1 100%)" shape="circle"
+            customStyle="width: 225rpx; height: 68rpx; font-size: 28px;" @click="save('draft')"></u-button>
+        </view>
+      </view>
+    </u-popup>
+    <!-- 草稿提示弹窗 -->
+    <u-popup :show="popShow1" mode="center" class='popShow1' :round="12">
+      <view class="popup-content1">
+        <view class="popup-title">您有一篇未发布的草稿,要继续写吗?</view>
+
+        <view class="popup-desc">
+          <text>简单描述《春秋笔法》在的应用场景</text>
+        </view>
+        <view class="popup-btn1">
+          <u-button text="继续编辑" shape="circle"
+            customStyle=" height: 68rpx; font-size: 28px; color: #1BD6CD; border-color: #1BD6CD;"
+            @click="goOnFun"></u-button>
+          <u-button text="重新写" shape="circle"
+            customStyle=" height: 68rpx;margin:30rpx 0; font-size: 28px; color: #1BD6CD; border-color: #1BD6CD;"
+            @click="popClose"></u-button>
+          <u-button text="删除草稿" color="linear-gradient( 90deg, #1AD7CE 0%, #21C9C1 100%)" shape="circle"
+            customStyle="height: 68rpx; font-size: 28px;" @click="deleteFun"></u-button>
         </view>
       </view>
     </u-popup>
@@ -150,6 +106,7 @@ export default {
   components: { clUpload },
   data() {
     return {
+      popShow1: true,
       loading: false,
       showScopePicker: false,
       popShow: false,
@@ -327,13 +284,17 @@ export default {
         this.popShow = true
       }
     },
+    //继续写
+    goOnFun(){
+
+    },
+    //重新写
     popClose() {
       this.popShow = false
-      uni.navigateBack()
     },
-    save() {
-      this.popShow = false
-      this.submit('draft')
+    //删除草稿
+    deleteFun(){
+      uni.showToast({ title: '草稿已删除', icon: 'none' })
     },
     async submit(type) {
       if (
@@ -342,8 +303,8 @@ export default {
           !this.formData.content ||
           !this.formData.location ||
           (this.mediaType == 1 && this.fileList.length === 0) ||
-          (this.mediaType == 2 && !this.formData.videoUrl) ||
-          !this.formData.visibleRange)
+          (this.mediaType == 2 && !this.formData.videoUrl)
+        )//!this.formData.visibleRange
       ) {
         uni.showToast({ title: '请完善动态内容', icon: 'none' })
         return
@@ -352,10 +313,10 @@ export default {
           uni.showToast({ title: '动态标题不能为空', icon: 'none' })
           return
         }
-        if (!this.formData.visibleRange) {
-          uni.showToast({ title: '请选择可见范围', icon: 'none' })
-          return
-        }
+        // if (!this.formData.visibleRange) {
+        //   uni.showToast({ title: '请选择可见范围', icon: 'none' })
+        //   return
+        // }
       }
 
       // 检查是否有文件正在上传
@@ -388,7 +349,7 @@ export default {
         // 接口调用成功
         if (res.data.code == 200) {
           uni.showToast({
-            title: type === 'publish' ? '发布成功,等待审核' : '保存草稿成功',
+            title: '动态已发布',
             icon: 'none',
           })
 
@@ -495,13 +456,16 @@ export default {
   .u-line {
     border: none !important;
   }
+
   .u-button__text {
     font-weight: 500;
     font-size: 32rpx;
   }
+
   .u-upload__wrap__preview {
     border-radius: 12rpx;
   }
+
   .cl-updata {
     .file-list .add-image {
       border: none;
@@ -510,8 +474,10 @@ export default {
         width: 100%;
       }
     }
+
     .file-list-row .remove {
       background-color: transparent !important;
+
       .image[data-v-0b7ccd9e] {
         width: 24rpx;
         height: 24rpx;
@@ -526,6 +492,7 @@ export default {
 .popup-content {
   width: 630rpx;
   height: 380rpx;
+
   .popup-title {
     display: flex;
     justify-content: center;
@@ -537,6 +504,7 @@ export default {
     background: #e6f8f7;
     border-radius: 24rpx 24rpx 0rpx 0rpx;
   }
+
   .popup-desc {
     height: 168rpx;
     font-weight: 500;
@@ -546,6 +514,7 @@ export default {
     justify-content: center;
     align-items: center;
   }
+
   .popup-btn {
     display: flex;
     justify-content: space-between;
@@ -553,10 +522,56 @@ export default {
     height: 120rpx;
     padding: 24rpx 60rpx;
     border-top: 2rpx solid #eeeeee;
+
     ::v-deep .u-botton {
       width: 225rpx;
       height: 68rpx;
     }
   }
 }
+
+::v-deep .popShow1 {
+  .u-transition {
+    background-color: rgba(0, 0, 0, 0.6) !important;
+  }
+}
+
+.popup-content1 {
+
+  width: 630rpx;
+
+  //height: 380rpx;
+  .popup-title {
+    display: flex;
+    justify-content: center;
+    align-items: center;
+    font-weight: bold;
+    font-size: 32rpx;
+    color: #000000;
+    height: 92rpx;
+    background: #e6f8f7;
+    border-radius: 24rpx 24rpx 0rpx 0rpx;
+  }
+
+  .popup-desc {
+    height: 168rpx;
+    font-weight: 500;
+    font-size: 28rpx;
+    color: #333333;
+    display: flex;
+    justify-content: center;
+    align-items: center;
+  }
+
+  .popup-btn1 {
+
+    //height: 120rpx;
+    //padding: 24rpx 60rpx;
+    //border-top: 2rpx solid #eeeeee;
+    ::v-deep .u-botton {
+      width: 100%;
+      height: 68rpx;
+    }
+  }
+}
 </style>

+ 173 - 83
src/pages/my/dynamic/components/my_list.vue

@@ -1,41 +1,54 @@
 <template>
   <view class="list-box" v-if="dataList && dataList.length > 0">
-    <view
-      class="item"
-      v-for="(item, index) in dataList"
-      :key="index"
-      @click="goDetails(item)"
-    >
-      <view class="item-image">
-        <image :src="item.coverUrl" mode="aspectFill"></image>
-      </view>
-      <view class="item-content">
-        <view class="item-title">
-          <text>{{ item.title }}</text>
-          <view
-            v-if="type != 'merchant'"
-            :class="{
-              'service-status': item.auditStatus != 1,
-              'reserve-status': item.auditStatus == 1,
-            }"
-            >{{ item.auditStatus == 2 ? '已审核' : '审核中' }}</view
-          >
-        </view>
-        <view class="item-service">
-          <view class="service-info">
-            <text class="service-time">{{ item.publishTime }}</text>
+    <view class="item" v-for="(item, index) in dataList" :key="index" @click="goDetails(item)">
+
+      <view class="item-content" @click.stop="goToDateil">
+        <view style="display: flex;justify-content: space-between;">
+          <view>
+            <view class="title">{{ item.title }}</view>
+
           </view>
-          <view class="diamond-count">
-            <image
-              src="/static/discover/icon_eye.png"
-              mode=""
-              class="eye-icon"
-            />
-            <text>{{ item.viewCount }}</text>
+          <view v-if="item.auditStatus == 2" class="diamond-count">
+            <text>已读{{ item.viewCount }}</text>
           </view>
+          <view class="reserve-status" v-if="item.auditStatus == 1">审核中</view>
+
+          <view class="moreClass" @click.stop="editFun(item.auditStatus)">
+
+          </view>
+        </view>
+        <view class="service-info">
+          <text class="service-time">{{ item.publishTime }}发布</text>
         </view>
+        <view class="contentText">{{ item.content }}</view>
+        <view class="item-image">
+          <image :src="item.coverUrl" mode="aspectFill"></image>
+        </view>
+
+
       </view>
     </view>
+
+    <!-- 底部操作菜单 -->
+    <u-action-sheet :show="sheetShow" :actions="actionList" cancel-text="取消" @select="selectItem" safe-area-bottom
+      @close="closeSheetShow" />
+
+    <u-popup :show="showModal" mode="center" border-radius="16rpx" :mask-close-able="false">
+      <view class="modal-wrap">
+        <!-- 标题居中 -->
+        <view class="title">提示</view>
+        <!-- 正文 -->
+        <view class="content">
+          确定要删除该动态吗
+        </view>
+        <!-- 底部双按钮(必显示) -->
+        <view class="btn-box">
+          <view class="btn left" @click="cancel">取消</view>
+          <view class="btn right" @click="sure">确定</view>
+        </view>
+      </view>
+    </u-popup>
+
   </view>
 </template>
 
@@ -51,9 +64,77 @@ export default {
       type: Array,
       default: () => [],
     },
+  },
+  data() {
+    return {
+      showModal: false,
+      sheetShow: false,
+      actionList: [
+        { name: '编辑' },
+        { name: '删除', color: '#f56c6c' } // 删除红色字体
+      ]
+    }
+
+  },
+  mounted() {
+
   },
   methods: {
+    goToDateil(){
+      uni.navigateTo({
+          url: `/pages/my/dynamic/dynamicDetail`,
+        })
+    },
+    sure() {
+      this.showModal = false
+      uni.showToast({
+        title: '动态删除成功',
+        icon: 'none'
+      })
+
+    },
+    //取消
+    cancel() {
+      this.showModal = false
+    },
+    closeSheetShow() {
+      this.sheetShow = false
+      uni.showTabBar()
+    },
+    selectItem(item) {
+      console.log('8888')
+      this.sheetShow = false
+      uni.showTabBar()
+      if (item.name === '编辑') {
+        let str = uni.$u.queryParams({
+          item: item,
+        })
+        uni.navigateTo({
+          url: `/pages/my/dynamic/add_dynamic${str}`,
+        })
+      } else if (item.name === '删除') {
+
+        if (this.currentAuditStatus == 1) {
+          uni.showToast({
+            title: '审核中的动态不支持删除',
+            icon: 'none'
+          })
+          return
+        }
+        this.showModal = true
+      }
+
+    },
+    editFun(auditStatus) {
+      this.currentAuditStatus = auditStatus
+      this.sheetShow = true
+      //隐藏tabbar
+      uni.hideTabBar()
+      //uni.showTabBar()
+
+    },
     goDetails(item) {
+      return
       let str = uni.$u.queryParams({
         momentId: item.id,
       })
@@ -67,14 +148,14 @@ export default {
 
 <style scoped lang="scss">
 .list-box {
-  display: flex;
+  //display: flex;
   flex-wrap: wrap;
   justify-content: space-between;
   padding: 26rpx;
   font-family: PingFang SC, PingFang SC;
 
   .item {
-    width: calc(50% - 14rpx);
+    //width: calc(50% - 14rpx);
     margin-bottom: 28rpx;
     box-sizing: border-box;
     background: #ffffff;
@@ -82,8 +163,40 @@ export default {
     border-radius: 12rpx;
     overflow: hidden;
 
+    .contentText {
+      font-size: 28rpx;
+      overflow: hidden;
+      display: -webkit-box;
+      -webkit-line-clamp: 2;
+      /* 控制行数:2行 */
+      -webkit-box-orient: vertical;
+    }
+
+    .title {
+      font-size: 28rpx;
+      width: 520rpx;
+      border: 1px solid red;
+      white-space: nowrap;
+      /* 禁止换行 单行 */
+      overflow: hidden;
+      /* 超出隐藏 */
+      text-overflow: ellipsis;
+      /* 末尾... */
+    }
+
+    .service-info {
+      display: flex;
+      flex: 1;
+
+      .service-time {
+        display: block;
+        font-size: 24rpx;
+        color: #999999;
+      }
+    }
+
     .item-image {
-      width: 100%;
+      width: 200rpx;
       height: 200rpx;
       background-color: #f0f0f0;
       display: flex;
@@ -98,63 +211,40 @@ export default {
       }
     }
 
-    .item-content {
-      padding: 20rpx;
-
-      .item-title {
-        display: flex;
-        justify-content: space-between;
-        align-items: center;
-        margin-bottom: 16rpx;
+    .service-status {
+      font-size: 24rpx;
+      color: #03c8be;
+    }
 
-        text:first-child {
-          font-size: 28rpx;
-          font-weight: bold;
-          color: #333;
-        }
+    .reserve-status {
+      font-size: 24rpx;
+      color: #f16336;
+    }
 
-        .service-status {
-          font-size: 24rpx;
-          color: #03c8be;
-        }
+    .diamond-count {
+      display: flex;
+      align-items: center;
 
-        .reserve-status {
-          font-size: 24rpx;
-          color: #f16336;
-        }
+      image {
+        width: 22rpx;
+        height: 18rpx;
+        margin-right: 8rpx;
       }
 
-      .item-service {
-        display: flex;
-
-        .service-info {
-          display: flex;
-          flex: 1;
-
-          .service-time {
-            display: block;
-            font-size: 24rpx;
-            color: #999999;
-          }
-        }
+      text {
+        font-size: 24rpx;
+        color: #999999;
+      }
+    }
 
-        .diamond-count {
-          display: flex;
-          align-items: center;
+    .moreClass {
+      background-color: #03c8be;
+      height: 40rpx;
+      width: 40rpx;
+      border-radius: 50%;
+    }
 
-          image {
-            width: 22rpx;
-            height: 18rpx;
-            margin-right: 8rpx;
-          }
 
-          text {
-            font-size: 24rpx;
-            color: #999999;
-          }
-        }
-      }
-    }
   }
 }
 </style>

+ 120 - 0
src/pages/my/dynamic/dynamicDetail.vue

@@ -0,0 +1,120 @@
+<template>
+  <view class="dynamic-detail">
+    <!-- 滚动容器 -->
+    <scroll-view scroll-y class="scroll-wrap">
+      <view class="page-content">
+        <!-- 审核驳回区域 -->
+        <view class="reject-card">
+          <view class="reject-head">
+            <u-icon name="close-circle" size="38" color="#999"></u-icon>
+            <text class="reject-title">审核驳回</text>
+            <text>审核中</text>
+          </view>
+          <view class="reject-text">
+            审核结果将会在X-X个工作日通知您
+          </view>
+        </view>
+
+        <!-- 文章标题 -->
+        <view class="article-title">
+          业财对账总对不平?先搞清楚你对的是「业务账」还是「资金账」
+        </view>
+
+        <!-- 发布信息 -->
+        <view class="info-bar">
+          <text>娜娜</text>
+          <text>2025.12.25 16:23:25</text>
+          <text>252已读</text>
+        </view>
+
+        <!-- 正文内容 -->
+        <view class="article-body">
+          「业务账」是什么:业务账是从业务视角算出来的「该收多少、该付多少」,订单、支付、退款、手续费、调账,按业务规则轧差后的结果。例如:某商户今日订单100万、退款5万、手续费2万,业务上净应收93万。数据来源是业务系统:交易、清结算、账务等,不涉及「银行/渠道实际到没到账」。「资金账」是什么:资金账是从资金视角看到的「实际到账多少、实际划出多少」,渠道给我们的到账、我们给商户的划付、银行流水。例如:某日渠道实际到账92万、我们实际划给商户90万,资金上就是这两笔数。数据来源是渠道对账文件、银行流水、划付记录,是「钱真的动了」的那部分。
+        </view>
+
+        <!-- 图片/视频占位 -->
+        <view class="media-placeholder">
+          <text>视频/图片</text>
+        </view>
+      </view>
+    </scroll-view>
+  </view>
+</template>
+
+<script>
+export default {
+  name: 'DynamicDetail',
+  data() {
+    return {}
+  }
+}
+</script>
+
+<style lang="scss"  scoped>
+/* 滚动区域高度:扣除导航栏高度 */
+.scroll-wrap {
+  height: calc(100vh - var(--u-navbar-height));
+}
+/* 页面整体内边距 */
+.page-content {
+  padding: 32rpx;
+}
+/* 驳回卡片样式 */
+.reject-card {
+  border: 1rpx solid #eeeeee;
+  border-radius: 12rpx;
+  padding: 28rpx;
+  margin-bottom: 36rpx;
+}
+.reject-head {
+  display: flex;
+  align-items: center;
+  gap: 18rpx;
+  margin-bottom: 16rpx;
+}
+.reject-title {
+  font-size: 32rpx;
+  font-weight: 500;
+  color: #333333;
+}
+.reject-text {
+  font-size: 28rpx;
+  color: #666666;
+  line-height: 1.6;
+}
+/* 文章标题 */
+.article-title {
+  font-size: 34rpx;
+  font-weight: 500;
+  line-height: 1.5;
+  color: #222;
+  margin-bottom: 22rpx;
+}
+/* 发布信息栏 */
+.info-bar {
+  display: flex;
+  gap: 32rpx;
+  font-size: 26rpx;
+  color: #888888;
+  margin-bottom: 32rpx;
+}
+/* 正文 */
+.article-body {
+  font-size: 30rpx;
+  color: #333333;
+  line-height: 1.7;
+  margin-bottom: 42rpx;
+}
+/* 媒体占位框 */
+.media-placeholder {
+  width: 300rpx;
+  height: 300rpx;
+  background-color: #eeeeee;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  font-size: 30rpx;
+  color: #666666;
+}
+</style>
+

+ 31 - 19
src/pages/my/dynamic/index.vue

@@ -8,30 +8,12 @@
       }"
       @query="queryList"
     >
-      <template #top>
-        <view class="tab-box">
-          <view
-            v-for="(item, index) in tabList"
-            :key="index"
-            :class="{ item: true, active: current === index }"
-            @click="onTabChange(index)"
-          >
-            {{ item.name }}
-          </view>
-        </view>
-      </template>
 
       <!-- 我的动态 -->
       <my-dynamic-list
-        v-if="current === 0"
         :data-list="dynamicList"
       ></my-dynamic-list>
 
-      <!-- 草稿动态 -->
-      <draft-dynamic-list
-        v-if="current === 1"
-        :data-list="dynamicList"
-      ></draft-dynamic-list>
 
       <template v-slot:empty>
         <u-empty
@@ -87,6 +69,7 @@ export default {
   },
   onLoad() {
     this.isLogin = !!uni.getStorageSync('wx_copenid')
+    console.log(this.isLogin,'this.isLogin')
   },
   onShow() {
     this.queryList(1, 10)
@@ -97,6 +80,7 @@ export default {
         pageNum: pageNo,
         pageSize: pageSize,
       }
+      //this.current=0
       const api = this.current == 0 ? myDynamicList : draftDynamicList
       api(params).then(res => {
         if (
@@ -115,6 +99,34 @@ export default {
           this.$refs.paging.complete([])
         }
       })
+
+      //  this. dynamicList= [
+      //   {title:'哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈lalallalaal哈',
+      //   auditStatus:2,
+      //   publishTime:'2023.12.25 18:25',
+      //   viewCount:'99999',
+      //   coverUrl:'/static/login/closeEye.png',
+      //   content:'偶滴啊发撒积分非机动撒JFK的拉萨偶滴啊发撒积分非机动撒JFK的拉萨佛海飞机滴哦撒娇放大 地方到南方粉底哦撒飞机殴打佛教道教佛海飞机滴哦撒娇放大 地方到南方粉底哦撒飞机殴打佛教道教佛'
+
+
+      //   },
+      //   {title:'444',
+      //   auditStatus:1,
+      //   publishTime:'88962333',
+      //   viewCount:'99999'
+
+
+      //   },
+      //   {title:'444',
+      //   auditStatus:1,
+      //   publishTime:'88962333',
+      //   viewCount:'99999'
+
+
+      //   },
+
+      // ]
+
     },
     onTabChange(index) {
       this.current = index
@@ -182,7 +194,7 @@ export default {
 
   .add-btn {
     position: fixed;
-    bottom: 50rpx;
+    bottom: 150rpx;
     right: 40rpx;
     display: flex;
     justify-content: center;

+ 2 - 2
src/pages/my/my.vue

@@ -332,9 +332,9 @@ export default {
       });
     },
 		onLogin() {
-			if (this.$utils.checkLogin()) return;
+			//if (this.$utils.checkLogin()) return;
 			uni.navigateTo({
-				url: '/pages/login/wxLogin'
+				url: '/setting/myNew/phone'
 			})
 		},
 		// 退出登录

+ 110 - 18
src/setting/myNew/forgetPassword.vue

@@ -1,24 +1,30 @@
 <script>
-import { resetPassword, sendMsg } from '@/api/newLogin.js'
+import { resetPassword, sendMsg,captchaImage } from '@/api/newLogin.js'
 export default {
   data() {
     return {
-      phone: '', code: '',
+      phone: '18434361582', phoneMsg: '',
       countdown: 60,
       // 整体8-20位,只能大小写+数字
       regPwd: /^[A-Za-z0-9]{8,20}$/,
       isPwdHide: true,
       isBinding: false,
+      timer: null,
       password: '',
+      isSendingCode: false,
+      showCaptcha: false,
+      startCountdownFlag: false,
+      uuid:'',
+      imgCode:''
     }
   },
   computed: {
     canGetCode() {
       return !this.isSendingCode && this.countdown === 60
     },
-    canBind() {
-      return this.code && this.code.length === 6 && !this.isBinding
-    }
+    // canBind() {
+    //   return this.code && this.code.length === 6 && !this.isBinding
+    // }
   },
   onLoad(options) {
     if (options.phone) {
@@ -47,6 +53,54 @@ export default {
       const reg = /^1[3-9]\d{9}$/
       return reg.test(phone)
     },
+      //图形验证码提交
+    submitImgCode() {
+      if (!this.imgCode) {
+        uni.showToast({
+          title: '请输入验证码',
+          icon: 'none'
+        })
+        return
+      }
+      sendMsg33333({ uuid:this.uuid,imgCode:this.imgCode}).then(res => {
+        console.log(res)
+        if (res.data.code == 200) {
+          this.showCaptcha = false
+            this.getCode()
+        }
+        
+
+      })
+
+    },
+    //重新获取验证码
+		agginGetCode() {
+			if (!this.phone) {
+				uni.showToast({
+					title: '请输入手机号',
+					icon: 'none'
+				})
+				return
+			}
+
+			if (!/^1[3456789]\d{9}$/.test(this.phone)) {
+				uni.showToast({
+					title: '手机号不正确',
+					icon: 'none'
+				})
+				return
+			}
+			captchaImage().then(res=>{
+				console.log(res)
+				if (res.data.code == 200) {
+					this.uuid=res.data.uuid
+				}
+			})
+      this.imgCode=''
+			this.showCaptcha = true
+
+		},
+    //获取验证码
     getCode() {
       if (this.isSendingCode || this.countdown < 60) return
 
@@ -67,11 +121,13 @@ export default {
 
     },
     startCountdown() {
+      this.startCountdownFlag = true
       this.countdown = 60
       this.timer = setInterval(() => {
         this.countdown--
         if (this.countdown <= 0) {
           clearInterval(this.timer)
+          this.startCountdownFlag = false
           this.countdown = 60
           this.timer = null
         }
@@ -85,7 +141,7 @@ export default {
 
     // },
     submitFun() {
-      if (!this.code) {
+      if (!this.phoneMsg) {
         uni.showToast({
           title: '请输入验证码',
           icon: 'none'
@@ -114,7 +170,7 @@ export default {
         userType: '2',
         phone: this.phone,
         codeSwitch: 'false',//是否开启验证码登录 true-是 false-否
-        phoneMsg: this.code,
+        phoneMsg: this.phoneMsg,
         passWord: this.password
       }).then(res => {
         if (res.data.code == 200) {
@@ -189,8 +245,8 @@ export default {
       </view>
 
       <view class="input-box">
-        <u-input v-model="code" type="number" border="none" maxlength="6" placeholder="" placeholder-style="color: #999"
-          class="input-item">
+        <u-input v-model="phoneMsg" type="number" border="none" maxlength="6" placeholder=""
+          placeholder-style="color: #999" class="input-item">
           <template slot="prefix">
             <view class="label">
               <text>验证码</text>
@@ -198,8 +254,13 @@ export default {
           </template>
         </u-input>
         <view class="code-btn" :class="{ disabled: !canGetCode }" @click="getCode">
-          <text v-if="countdown === 60">获取验证码</text>
-          <text v-else>{{ countdown }}s 后重新获取</text>
+          <text v-if="countdown === 60" @click="getCode">发送验证码</text>
+          <view v-else>
+            <text v-if="startCountdownFlag">{{ countdown }}s</text>
+            <text @click="agginGetCode">重新获取</text>
+          </view>
+          <!-- <text v-if="countdown === 60">发送验证码</text>
+          <text v-else>{{ countdown }}s 后重新获取</text> -->
         </view>
       </view>
       <view class="input-box">
@@ -212,7 +273,10 @@ export default {
             </view>
           </template>
           <template #suffix>
-            <image src="/static/login/closeEye.png" @click="isPwdHide = !isPwdHide" class="captcha-img"></image>
+            <image v-if="isPwdHide" src="/static/login/closeEye.png" @click="isPwdHide = !isPwdHide"
+              class="captcha-img"></image>
+            <image v-if="!isPwdHide" src="/static/login/openEye.png" @click="isPwdHide = !isPwdHide"
+              class="captcha-img"></image>
             <!-- <u-icon :name="isPwdHide ? 'eye-off' : 'eye'" @click="isPwdHide = !isPwdHide" size="32rpx" color="#999" /> -->
           </template>
         </u-input>
@@ -223,6 +287,32 @@ export default {
     </view>
 
 
+    <!-- 图形验证码弹窗 -->
+    <u-popup :show="showCaptcha" mode="center" border-radius="12">
+      <view class="captcha-box">
+        <view class="captcha-title">
+          <view>请输入下方图形验证码</view>
+          <u-icon custom-style="position: relative;left:90rpx ;" name="close" color="#C9CDD4" size="20"
+            @click="showCaptcha = false"></u-icon>
+        </view>
+        <view style="padding: 0 48rpx;margin-top: 48rpx;">
+          <view style="display: flex;justify-content: space-between;height: 106rpx;border-bottom: 1rpx solid #E7E7E7;">
+
+            <!-- 验证码输入框,唤起全字符键盘 -->
+            <u-input v-model="imgCode" placeholder="请输入图形验证码" :focus="showCaptcha" type="text" maxlength="4"
+              border="none" placeholder-style="font-weight: 400;font-size: 30rpx;color: #C9CDD4;"></u-input>
+            <!-- 图形验证码图片,点击刷新 -->
+            <image :src="captchaImg" @click="refreshCaptcha" class="captcha-img"></image>
+          </view>
+          <view class="text" @click="submitImgCode">看不清? 换一张</view>
+          <u-button class="submitImgCode" @click="submitImgCode" block>确定</u-button>
+
+        </view>
+      </view>
+    </u-popup>
+
+
+
 
   </view>
 </template>
@@ -286,12 +376,13 @@ export default {
 .input-box {
   width: 622rpx;
   height: 110rpx;
-  background: #ffffff00!important;
+  background: #ffffff00 !important;
   display: flex;
   align-items: center;
   border-bottom: 1rpx solid #E7E7E7;
-  .u-input{
-    background: #ffffff00!important;
+
+  .u-input {
+    background: #ffffff00 !important;
   }
 
   .label {
@@ -306,7 +397,8 @@ export default {
   .input-item {
     flex: 1;
   }
-  .captcha-img{
+
+  .captcha-img {
     width: 30rpx;
     height: 30rpx;
   }
@@ -326,13 +418,13 @@ export default {
   ::v-deep .u-button {
     width: 622rpx;
     height: 88rpx;
-    background: linear-gradient(263deg, #45FFD7 0%, #7FFFBD 100%);
+    background: #333335;
     border-radius: 60rpx 60rpx 60rpx 60rpx;
     border: none;
 
     font-weight: 500;
     font-size: 32rpx;
-    color: #1D2129;
+    color: #fff;
     text-align: center;
   }
 

+ 21 - 21
src/setting/myNew/phone.vue

@@ -5,7 +5,6 @@ export default {
     return {
       phone: '',
       password: '',
-      code: '',
       countdown: 60,
       timer: null,
       isSendingCode: false,
@@ -14,7 +13,7 @@ export default {
       isPasswordLogin: true,
       useCodeLogin: false,
 
-      showCaptcha: true, // 弹窗显隐
+      showCaptcha: false, // 弹窗显隐
       imgCode: '',        // 用户填写的图形验证码
       captchaImg: '',     // 图形验证码图片地址
       captchaKey: ''      // 后端返回验证码标识
@@ -24,9 +23,9 @@ export default {
     canGetCode() {
       return this.phone && this.validatePhone(this.phone) && !this.isSendingCode && this.countdown === 60
     },
-    canBind() {
-      return this.phone && this.validatePhone(this.phone) && this.code && this.code.length === 6 && !this.isBinding
-    }
+    // canBind() {
+    //   return this.phone && this.validatePhone(this.phone) && this.code && this.code.length === 6 && !this.isBinding
+    // }
 
   },
   onShow() {
@@ -146,11 +145,14 @@ export default {
         })
         return
       }
-      sendMsg({ phone: this.phone }).then(res => {
+      sendMsg33333({ uuid:this.uuid,imgCode:this.imgCode}).then(res => {
         console.log(res)
-        uni.navigateTo({
-          url: `/setting/myNew/useCodeLogin?phone=` + this.phone
-        })
+        if (res.data.code == 200) {
+            uni.navigateTo({
+            url: `/setting/myNew/useCodeLogin?phone=` + this.phone
+          })
+        }
+        
 
       })
 
@@ -203,8 +205,9 @@ export default {
           :password="isPwdHide" maxlength="20" customClass="pwd-star" placeholder="请输入密码"
           placeholder-style="font-weight: 400;font-size: 30rpx;color: #C9CDD4;" class="input-item">
           <!-- <template #suffix>
-            <u-icon :name="isPwdHide ? 'eye-off' : 'eye'" @click="isPwdHide = !isPwdHide" size="32rpx" color="#999" />
-          </template> -->
+            <image v-if="isPwdHide" src="/static/login/closeEye.png" @click="isPwdHide = !isPwdHide" class="captcha-img"></image>
+            <image v-if="!isPwdHide" src="/static/login/openEye.png" @click="isPwdHide = !isPwdHide" class="captcha-img"></image>
+             </template> -->
         </u-input>
       </view>
       <view class="bind-btn">
@@ -221,13 +224,6 @@ export default {
 
 
 
-
-
-
-
-
-
-
     <!-- //myNew/forgetPassword -->
 
     <!-- 图形验证码弹窗 -->
@@ -247,7 +243,7 @@ export default {
             <!-- 图形验证码图片,点击刷新 -->
             <image :src="captchaImg" @click="refreshCaptcha" class="captcha-img"></image>
           </view>
-          <view class="text">看不清? 换一张</view>
+          <view class="text" @click="submitImgCode">看不清? 换一张</view>
           <u-button class="submitImgCode" @click="submitImgCode" block>确定</u-button>
 
         </view>
@@ -400,6 +396,10 @@ export default {
     font-size: 30rpx;
     color: #1D2129;
   }
+  .captcha-img{
+    width: 30rpx;
+    height: 30rpx;
+  }
 }
 
 .code-box {
@@ -426,13 +426,13 @@ export default {
   ::v-deep .u-button {
     width: 622rpx;
     height: 88rpx;
-    background: linear-gradient(263deg, #45FFD7 0%, #7FFFBD 100%);
+    background:  #333335;
     border-radius: 60rpx 60rpx 60rpx 60rpx;
     border: none;
 
     font-weight: 500;
     font-size: 32rpx;
-    color: #1D2129;
+    color: #fff;
     text-align: center;
   }
 

+ 76 - 9
src/setting/myNew/useCodeLogin.vue

@@ -3,17 +3,22 @@ import { loginPhone, sendMsg } from '@/api/newLogin.js'
 export default {
   data() {
     return {
-      phone: '', code: '',
+      phone: '', phoneMsg: '',
       countdown: 60,
+      startCountdownFlag: false,
+      showCaptcha: false,
+      imgCode: '',
+      captchaImg: '',
+      uuid: '',
     }
   },
   computed: {
     canGetCode() {
       return !this.isSendingCode && this.countdown === 60
     },
-    canBind() {
-      return this.code && this.code.length === 6 && !this.isBinding
-    }
+    // canBind() {
+    //   return this.code && this.code.length === 6 && !this.isBinding
+    // }
   },
   onLoad(options) {
     if (options.phone) {
@@ -25,10 +30,43 @@ export default {
 
   },
   methods: {
+     //图形验证码提交
+    submitImgCode() {
+      if (!this.imgCode) {
+        uni.showToast({
+          title: '请输入验证码',
+          icon: 'none'
+        })
+        return
+      }
+      sendMsg33333({ uuid:this.uuid,imgCode:this.imgCode}).then(res => {
+        console.log(res)
+        if (res.data.code == 200) {
+          this.showCaptcha = false
+            this.getCode()
+        }
+        
+
+      })
+
+    },
     validatePhone(phone) {
       const reg = /^1[3-9]\d{9}$/
       return reg.test(phone)
     },
+    //重新获取验证码
+		agginGetCode() {
+			captchaImage().then(res=>{
+				console.log(res)
+				if (res.data.code == 200) {
+					this.uuid=res.data.uuid
+				}
+			})
+      this.imgCode=''
+			this.showCaptcha = true
+
+		},
+    //获取验证码
     getCode() {
       if (this.isSendingCode || this.countdown < 60) return
 
@@ -49,11 +87,13 @@ export default {
 
     },
     startCountdown() {
+      this.startCountdownFlag = true
       this.countdown = 60
       this.timer = setInterval(() => {
         this.countdown--
         if (this.countdown <= 0) {
           clearInterval(this.timer)
+          this.startCountdownFlag = false
           this.countdown = 60
           this.timer = null
         }
@@ -69,7 +109,7 @@ export default {
           userType: '2',
           phone: this.phone,
           codeSwitch: 'true',//是否开启验证码登录 true-是 false-否
-          phoneMsg: this.code
+          phoneMsg: this.phoneMsg
         }).then(res => {
           if (res.data.code == 200) {
             // uni.showToast({
@@ -135,17 +175,44 @@ export default {
     <view class="greeting-area1"></view>
     <view style="display: flex;justify-content: center;padding: 0 64rpx;">
       <view class="input-box">
-        <u-input v-model="code" type="number" border="none" maxlength="6" placeholder="请输入手机验证码"
+        <u-input v-model="phoneMsg" type="number" border="none" maxlength="6" placeholder="请输入手机验证码"
           placeholder-style="font-weight: 400;font-size: 30rpx;color: #C9CDD4;" class="input-item code-input"
           @input="autoCheckCode"></u-input>
         <view class="code-btn" :class="{ disabled: !canGetCode }" @click="getCode">
-          <text v-if="countdown === 60">获取验证码</text>
-          <text v-else>{{ countdown }}s 后重新获取</text>
+            <text v-if="startCountdownFlag">{{ countdown }}s</text>
+            <text @click="agginGetCode">重新获取</text>
+          
         </view>
       </view>
     </view>
 
 
+     <!-- 图形验证码弹窗 -->
+    <u-popup :show="showCaptcha" mode="center" border-radius="12">
+      <view class="captcha-box">
+        <view class="captcha-title">
+          <view>请输入下方图形验证码</view>
+          <u-icon custom-style="position: relative;left:90rpx ;" name="close" color="#C9CDD4" size="20"
+            @click="showCaptcha = false"></u-icon>
+        </view>
+        <view style="padding: 0 48rpx;margin-top: 48rpx;">
+          <view style="display: flex;justify-content: space-between;height: 106rpx;border-bottom: 1rpx solid #E7E7E7;">
+
+            <!-- 验证码输入框,唤起全字符键盘 -->
+            <u-input v-model="imgCode" placeholder="请输入图形验证码" :focus="showCaptcha" type="text" maxlength="4"
+              border="none" placeholder-style="font-weight: 400;font-size: 30rpx;color: #C9CDD4;"></u-input>
+            <!-- 图形验证码图片,点击刷新 -->
+            <image :src="captchaImg" @click="refreshCaptcha" class="captcha-img"></image>
+          </view>
+          <view class="text"@click="submitImgCode">看不清? 换一张</view>
+          <u-button class="submitImgCode" @click="submitImgCode" block>确定</u-button>
+
+        </view>
+      </view>
+    </u-popup>
+
+
+
 
 
   </view>
@@ -195,7 +262,7 @@ export default {
 
   }
 
-  .code-btn{
+  .code-btn {
     font-weight: 400;
     font-size: 30rpx;
     color: #19D29B;

BIN
src/static/login/arrowIcon.png


BIN
src/static/login/banner.png


BIN
src/static/login/cameraIcon.png


BIN
src/static/login/lineIcon.png


BIN
src/static/login/openEye.png


BIN
src/static/login/selectIcon.png


BIN
src/static/login/serviceIcon.png