Ver código fonte

Merge branch 'master' of http://git.zthymaoyi.com/zyw/tourism

# Conflicts:
#	uni_applet/pages/my/my.vue
高敬炎 1 ano atrás
pai
commit
85fc79af64

+ 28 - 3
uni_applet/components/loginPopUp/index.vue

@@ -62,6 +62,10 @@
 
 
 <script>
 <script>
 	var that
 	var that
+	import {
+		pathToBase64,
+		base64ToPath
+	} from 'image-tools'
 	export default {
 	export default {
 	 data() {
 	 data() {
 	 	return {
 	 	return {
@@ -75,14 +79,18 @@
 	 		customStyleUnOk: {
 	 		customStyleUnOk: {
 	 			marginTop: '20rpx',
 	 			marginTop: '20rpx',
 	 			color: '#eaad1a',
 	 			color: '#eaad1a',
-	 			border: '2px solid #eaad1a',
+	 			// border: '2px solid #eaad1a',
+				"font-weight": 'bold',
+				"background":'#F2F2F2',
 	 			"border-radius": "10px",
 	 			"border-radius": "10px",
 	 			fontSize: "32rpx"
 	 			fontSize: "32rpx"
 	 		},
 	 		},
 	 		customStyleOk: {
 	 		customStyleOk: {
 	 			marginTop: '20rpx',
 	 			marginTop: '20rpx',
 	 			color: '#fff',
 	 			color: '#fff',
-	 			border: '2px solid #eaad1a',
+	 			// border: '2px solid #eaad1a',
+				"font-weight": 'bold',
+				"background":'#F2F2F2',
 	 			"border-radius": "10px",
 	 			"border-radius": "10px",
 	 			fontSize: "32rpx",
 	 			fontSize: "32rpx",
 				padding:'0 20rpx',
 				padding:'0 20rpx',
@@ -137,6 +145,23 @@
 		  		// that.mescroll.resetUpScroll()
 		  		// that.mescroll.resetUpScroll()
 		  	}
 		  	}
 		  },
 		  },
+		  //获取昵称输入内容
+		  userNameInput(e) {
+		  	this.userInfo.nickname = e.detail.value
+		  },
+		  async onChooseAvatar(e) {
+		  	this.$set(this.userInfo, "head", await this.toBase64(e.detail.avatarUrl))
+		  },
+		  toBase64(url) {
+		  	return new Promise(resolve => {
+		  		pathToBase64(url).then(path => {
+		  			resolve(path);
+		  		}).catch(error => {
+		  			console.log(error)
+		  		})
+		  	})
+		  },
+		  
 	  }
 	  }
 	}
 	}
 </script>
 </script>
@@ -159,7 +184,7 @@
 		text-align: center;
 		text-align: center;
 	
 	
 		.avatar-img {
 		.avatar-img {
-			width: 250rpx;
+			width: 200rpx;
 		}
 		}
 	
 	
 		.title {
 		.title {

+ 76 - 0
uni_applet/node_modules/image-tools/README.md

@@ -0,0 +1,76 @@
+# image-tools
+图像转换工具,可用于如下环境:uni-app、微信小程序、5+APP、浏览器(需允许跨域)
+
+## 使用方式
+
+### NPM
+
+```
+npm i image-tools --save
+```
+
+```js
+import { pathToBase64, base64ToPath } from 'image-tools'
+```
+
+### 直接下载
+
+```js
+// 以下路径需根据项目实际情况填写
+import { pathToBase64, base64ToPath } from '../../js/image-tools/index.js'
+```
+
+## API
+
+### pathToBase64
+
+从图像路径转换为base64,uni-app、微信小程序和5+APP使用的路径不支持网络路径,如果是网络路径需要先使用下载API下载下来。
+
+```js
+pathToBase64(path)
+  .then(base64 => {
+    console.log(base64)
+  })
+  .catch(error => {
+    console.error(error)
+  })
+```
+
+### base64ToPath
+
+将图像base64保存为文件,返回文件路径。
+
+```js
+base64ToPath(base64)
+  .then(path => {
+    console.log(path)
+  })
+  .catch(error => {
+    console.error(error)
+  })
+```
+
+## 提示
+
+可以利用promise来串行和并行的执行多个任务
+
+```js
+// 并行
+Promise.all(paths.map(path => pathToBase64(path)))
+  .then(res => {
+    console.log(res)
+    // [base64, base64...]
+  })
+  .catch(error => {
+    console.error(error)
+  })
+// 串行
+paths.reduce((promise, path) => promise.then(res => pathToBase64(path).then(base64 => (res.push(base64), res))), Promise.resolve([]))
+  .then(res => {
+    console.log(res)
+    // [base64, base64...]
+  })
+  .catch(error => {
+    console.error(error)
+  })
+```

+ 196 - 0
uni_applet/node_modules/image-tools/index.js

@@ -0,0 +1,196 @@
+function getLocalFilePath(path) {
+    if (path.indexOf('_www') === 0 || path.indexOf('_doc') === 0 || path.indexOf('_documents') === 0 || path.indexOf('_downloads') === 0) {
+        return path
+    }
+    if (path.indexOf('file://') === 0) {
+        return path
+    }
+    if (path.indexOf('/storage/emulated/0/') === 0) {
+        return path
+    }
+    if (path.indexOf('/') === 0) {
+        var localFilePath = plus.io.convertAbsoluteFileSystem(path)
+        if (localFilePath !== path) {
+            return localFilePath
+        } else {
+            path = path.substr(1)
+        }
+    }
+    return '_www/' + path
+}
+
+function dataUrlToBase64(str) {
+    var array = str.split(',')
+    return array[array.length - 1]
+}
+
+var index = 0
+function getNewFileId() {
+    return Date.now() + String(index++)
+}
+
+function biggerThan(v1, v2) {
+    var v1Array = v1.split('.')
+    var v2Array = v2.split('.')
+    var update = false
+    for (var index = 0; index < v2Array.length; index++) {
+        var diff = v1Array[index] - v2Array[index]
+        if (diff !== 0) {
+            update = diff > 0
+            break
+        }
+    }
+    return update
+}
+
+export function pathToBase64(path) {
+    return new Promise(function(resolve, reject) {
+        if (typeof window === 'object' && 'document' in window) {
+            if (typeof FileReader === 'function') {
+                var xhr = new XMLHttpRequest()
+                xhr.open('GET', path, true)
+                xhr.responseType = 'blob'
+                xhr.onload = function() {
+                    if (this.status === 200) {
+                        let fileReader = new FileReader()
+                        fileReader.onload = function(e) {
+                            resolve(e.target.result)
+                        }
+                        fileReader.onerror = reject
+                        fileReader.readAsDataURL(this.response)
+                    }
+                }
+                xhr.onerror = reject
+                xhr.send()
+                return
+            }
+            var canvas = document.createElement('canvas')
+            var c2x = canvas.getContext('2d')
+            var img = new Image
+            img.onload = function() {
+                canvas.width = img.width
+                canvas.height = img.height
+                c2x.drawImage(img, 0, 0)
+                resolve(canvas.toDataURL())
+                canvas.height = canvas.width = 0
+            }
+            img.onerror = reject
+            img.src = path
+            return
+        }
+        if (typeof plus === 'object') {
+            plus.io.resolveLocalFileSystemURL(getLocalFilePath(path), function(entry) {
+                entry.file(function(file) {
+                    var fileReader = new plus.io.FileReader()
+                    fileReader.onload = function(data) {
+                        resolve(data.target.result)
+                    }
+                    fileReader.onerror = function(error) {
+                        reject(error)
+                    }
+                    fileReader.readAsDataURL(file)
+                }, function(error) {
+                    reject(error)
+                })
+            }, function(error) {
+                reject(error)
+            })
+            return
+        }
+        if (typeof wx === 'object' && wx.canIUse('getFileSystemManager')) {
+            wx.getFileSystemManager().readFile({
+                filePath: path,
+                encoding: 'base64',
+                success: function(res) {
+                    resolve('data:image/png;base64,' + res.data)
+                },
+                fail: function(error) {
+                    reject(error)
+                }
+            })
+            return
+        }
+        reject(new Error('not support'))
+    })
+}
+
+export function base64ToPath(base64) {
+    return new Promise(function(resolve, reject) {
+        if (typeof window === 'object' && 'document' in window) {
+            base64 = base64.split(',')
+            var type = base64[0].match(/:(.*?);/)[1]
+            var str = atob(base64[1])
+            var n = str.length
+            var array = new Uint8Array(n)
+            while (n--) {
+                array[n] = str.charCodeAt(n)
+            }
+            return resolve((window.URL || window.webkitURL).createObjectURL(new Blob([array], { type: type })))
+        }
+        var extName = base64.split(',')[0].match(/data\:\S+\/(\S+);/)
+        if (extName) {
+            extName = extName[1]
+        } else {
+            reject(new Error('base64 error'))
+        }
+        var fileName = getNewFileId() + '.' + extName
+        if (typeof plus === 'object') {
+            var basePath = '_doc'
+            var dirPath = 'uniapp_temp'
+            var filePath = basePath + '/' + dirPath + '/' + fileName
+            if (!biggerThan(plus.os.name === 'Android' ? '1.9.9.80627' : '1.9.9.80472', plus.runtime.innerVersion)) {
+                plus.io.resolveLocalFileSystemURL(basePath, function(entry) {
+                    entry.getDirectory(dirPath, {
+                        create: true,
+                        exclusive: false,
+                    }, function(entry) {
+                        entry.getFile(fileName, {
+                            create: true,
+                            exclusive: false,
+                        }, function(entry) {
+                            entry.createWriter(function(writer) {
+                                writer.onwrite = function() {
+                                    resolve(filePath)
+                                }
+                                writer.onerror = reject
+                                writer.seek(0)
+                                writer.writeAsBinary(dataUrlToBase64(base64))
+                            }, reject)
+                        }, reject)
+                    }, reject)
+                }, reject)
+                return
+            }
+            var bitmap = new plus.nativeObj.Bitmap(fileName)
+            bitmap.loadBase64Data(base64, function() {
+                bitmap.save(filePath, {}, function() {
+                    bitmap.clear()
+                    resolve(filePath)
+                }, function(error) {
+                    bitmap.clear()
+                    reject(error)
+                })
+            }, function(error) {
+                bitmap.clear()
+                reject(error)
+            })
+            return
+        }
+        if (typeof wx === 'object' && wx.canIUse('getFileSystemManager')) {
+            var filePath = wx.env.USER_DATA_PATH + '/' + fileName
+            wx.getFileSystemManager().writeFile({
+                filePath: filePath,
+                data: dataUrlToBase64(base64),
+                encoding: 'base64',
+                success: function() {
+                    resolve(filePath)
+                },
+                fail: function(error) {
+                    reject(error)
+                }
+            })
+            return
+        }
+        reject(new Error('not support'))
+    })
+}

+ 21 - 1
uni_applet/pageA/enter/enter.vue

@@ -96,6 +96,10 @@
 
 
 <script>
 <script>
 	var that
 	var that
+	import {
+		pathToBase64,
+		base64ToPath
+	} from 'image-tools'
 	import luyjGridLink from '@/uni_modules/lxm-fold-link/luyj-grid-link/components/luyj-grid-link/luyj-grid-link.vue'
 	import luyjGridLink from '@/uni_modules/lxm-fold-link/luyj-grid-link/components/luyj-grid-link/luyj-grid-link.vue'
 	export default {
 	export default {
 		components: {
 		components: {
@@ -382,6 +386,22 @@
 					// that.mescroll.resetUpScroll()
 					// that.mescroll.resetUpScroll()
 				}
 				}
 			},
 			},
+			//获取昵称输入内容
+			userNameInput(e) {
+				this.userInfo.nickname = e.detail.value
+			},
+			async onChooseAvatar(e) {
+				this.$set(this.userInfo, "head", await this.toBase64(e.detail.avatarUrl))
+			},
+			toBase64(url) {
+				return new Promise(resolve => {
+					pathToBase64(url).then(path => {
+						resolve(path);
+					}).catch(error => {
+						console.log(error)
+					})
+				})
+			},
 		}
 		}
 	}
 	}
 </script>
 </script>
@@ -431,7 +451,7 @@
 		text-align: center;
 		text-align: center;
 
 
 		.avatar-img {
 		.avatar-img {
-			width: 250rpx;
+			width: 200rpx;
 		}
 		}
 
 
 		.title {
 		.title {

+ 24 - 2
uni_applet/pageA/login/index.vue

@@ -59,6 +59,10 @@
 
 
 <script>
 <script>
 	var that
 	var that
+	import {
+		pathToBase64,
+		base64ToPath
+	} from 'image-tools'
 	export default {
 	export default {
 	 data() {
 	 data() {
 	 	return {
 	 	return {
@@ -72,7 +76,8 @@
 	 		customStyleUnOk: {
 	 		customStyleUnOk: {
 	 			marginTop: '20rpx',
 	 			marginTop: '20rpx',
 	 			color: '#eaad1a',
 	 			color: '#eaad1a',
-	 			border: '2px solid #eaad1a',
+	 			"font-weight": 'bold',
+				"background":'#F2F2F2',
 	 			"border-radius": "10px",
 	 			"border-radius": "10px",
 	 			fontSize: "32rpx"
 	 			fontSize: "32rpx"
 	 		},
 	 		},
@@ -82,6 +87,7 @@
 	 			// border: '2px solid #eaad1a',
 	 			// border: '2px solid #eaad1a',
 	 			"border-radius": "10px",
 	 			"border-radius": "10px",
 	 			fontSize: "32rpx",
 	 			fontSize: "32rpx",
+				"font-weight": 'bold',
 				padding:'40rpx',
 				padding:'40rpx',
 	 			background: " linear-gradient(to right,#FED41E,#FDC21D);"
 	 			background: " linear-gradient(to right,#FED41E,#FDC21D);"
 	 		},
 	 		},
@@ -140,6 +146,22 @@
 		  		// that.mescroll.resetUpScroll()
 		  		// that.mescroll.resetUpScroll()
 		  	}
 		  	}
 		  },
 		  },
+		  //获取昵称输入内容
+		  userNameInput(e) {
+		  	this.userInfo.nickname = e.detail.value
+		  },
+		  async onChooseAvatar(e) {
+		  	this.$set(this.userInfo, "head", await this.toBase64(e.detail.avatarUrl))
+		  },
+		  toBase64(url) {
+		  	return new Promise(resolve => {
+		  		pathToBase64(url).then(path => {
+		  			resolve(path);
+		  		}).catch(error => {
+		  			console.log(error)
+		  		})
+		  	})
+		  },
 	  }
 	  }
 	}
 	}
 </script>
 </script>
@@ -175,7 +197,7 @@
 		text-align: center;
 		text-align: center;
 	
 	
 		.avatar-img {
 		.avatar-img {
-			width: 250rpx;
+			width: 200rpx;
 		}
 		}
 	
 	
 		.title {
 		.title {

+ 10 - 1
uni_applet/pages.json

@@ -43,7 +43,16 @@
 
 
 		}
 		}
 
 
-	],
+	    ,{
+            "path" : "pages/my/editNickName",
+            "style" :                                                                                    
+            {
+                "navigationBarTitleText": "编辑昵称",
+                "enablePullDownRefresh": false
+            }
+            
+        }
+    ],
 	"tabBar": {
 	"tabBar": {
 		"custom": false,
 		"custom": false,
 		"color": "#656765",
 		"color": "#656765",

+ 1 - 1
uni_applet/pages/food/food.vue

@@ -432,7 +432,7 @@
 			// color: #9199af;
 			// color: #9199af;
 			// background: #f9d27d;
 			// background: #f9d27d;
 			border-radius: 50rpx;
 			border-radius: 50rpx;
-			padding: 15rpx 0 15rpx 30rpx;
+			padding: 15rpx 0 15rpx 15rpx;
 			box-sizing: border-box;
 			box-sizing: border-box;
 			margin-right: 20rpx;
 			margin-right: 20rpx;
 		
 		

+ 84 - 0
uni_applet/pages/my/editNickName.vue

@@ -0,0 +1,84 @@
+<template>
+	<view class="content">
+		<view class="row1 flex">
+			<view class="left">
+				昵称
+			</view>
+			<u-input v-model="userInfo.nickname" :border="false" focus class="input" />
+		</view>
+		<view class="row2">
+			<view class="btn" @click="edit">
+				保存
+			</view>
+		</view>
+		<u-toast ref="uToast"></u-toast>
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				value: '',
+				userInfo: {
+					nickname: ''
+				}
+			};
+		},
+		onLoad() {
+			this.userInfo = uni.getStorageSync("userInfo")
+		},
+		methods: {
+			edit() {
+				this.$request.baseRequest('admin.unimall.commonUserInfo', 'update', {
+					commonUserInfo: JSON.stringify(this.userInfo)
+				}, failres => {
+					uni.hideLoading()
+					uni.showToast({
+					  icon:"none",
+					  title: failres.errmsg,
+					  duration: 3000
+					});
+				}).then(res => {
+					this.userInfo = res.data
+					uni.setStorageSync("userInfo", this.userInfo)
+					uni.showToast({
+					  icon:"success",
+					  title: '修改成功!',
+					  duration: 2000,
+					  complete:function(){
+					    uni.switchTab({
+					      url: "/pages/my/my"
+					    })
+					  }
+					})
+				})
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+	.row1 {
+		background: #fff;
+		padding: 20rpx;
+	}
+
+	.input {
+		font-size: 28rpx;
+	}
+
+	.row2 {
+		padding: 20rpx;
+	}
+
+	.btn {
+		color: #fff;
+		padding: 20rpx;
+		border-radius: 8px;
+		background: #eaad1a;
+		text-align: center;
+		font-size: 36rpx;
+
+	}
+</style>

+ 159 - 75
uni_applet/pages/my/my.vue

@@ -4,31 +4,34 @@
 			<view class='flex userWrap justify-space-between'>
 			<view class='flex userWrap justify-space-between'>
 				<view class='flex'>
 				<view class='flex'>
 					<view style='margin-right:20rpx;'>
 					<view style='margin-right:20rpx;'>
-						<u--image width='60' height='60' :src="userInfo.head" shape="circle"></u--image>
+						<u--image width='60' height='60' :src="userInfo.head" shape="circle"
+							@click="editHead"></u--image>
 					</view>
 					</view>
 					<view>
 					<view>
 						<view class='flex'>
 						<view class='flex'>
-							<view @click='login' v-if='!edit' style="font-weight: bold;font-size: 32rpx;">{{userInfo.nickname?userInfo.nickname:'请点击登录'}}</view>
-							<view v-else> <u--input
-								placeholder="请输入内容"
-								border="bottom"
-								v-model='userInfo.nickname'
-								clearable
-							  ></u--input></view>
-							<u-icon  v-if='!edit&&userInfo.phone' @click='edit = true' name="edit-pen-fill" color="#eaad1a" size="24"></u-icon>
-							<u-icon  v-if='edit&&userInfo.phone' @click='editNickName' name="checkbox-mark" color="#eaad1a" size="24"></u-icon>
+							<view @click='login' style="font-weight: bold;font-size: 32rpx;">
+								{{userInfo.nickname?userInfo.nickname:'请点击登录'}}
+							</view>
+							<!-- 	<view v-else>
+								<u--input placeholder="请输入内容" border="bottom" v-model='userInfo.nickname'
+									clearable></u--input>
+							</view> -->
+							<!-- 	<u-icon v-if='!edit&&userInfo.phone' @click='edit = true' name="edit-pen-fill"
+								color="#eaad1a" size="24"></u-icon>
+							<u-icon v-if='edit&&userInfo.phone' @click='editNickName' name="checkbox-mark"
+								color="#eaad1a" size="24"></u-icon> -->
 						</view>
 						</view>
 						<view>{{userInfo.phone1}}</view>
 						<view>{{userInfo.phone1}}</view>
 					</view>
 					</view>
-				</view>	
+				</view>
 				<view>
 				<view>
 					<u-icon @click='todetail' name="bell" color="#eaad1a" size="28"></u-icon>
 					<u-icon @click='todetail' name="bell" color="#eaad1a" size="28"></u-icon>
 				</view>
 				</view>
 			</view>
 			</view>
-			
+
 		</view>
 		</view>
 		<view class="wrap">
 		<view class="wrap">
-		<!-- 	<view class='orderList'>
+			<!-- 	<view class='orderList'>
 				<view class="orderItem align-item-center">
 				<view class="orderItem align-item-center">
 					<view style='position:relative;'>
 					<view style='position:relative;'>
 						<u-icon name="home-fill" color="#2979ff" size="28"></u-icon>
 						<u-icon name="home-fill" color="#2979ff" size="28"></u-icon>
@@ -66,11 +69,7 @@
 					    isLink
 					    isLink
 					    url="/pages/componentsB/tag/tag"
 					    url="/pages/componentsB/tag/tag"
 					></u-cell> -->
 					></u-cell> -->
-					<u-cell
-					    title="我的发布"
-					    isLink
-					    url="/pageA/my/mypublish"
-					></u-cell>
+					<u-cell title="我的发布" isLink url="/pageA/my/mypublish"></u-cell>
 					<!-- <u-cell
 					<!-- <u-cell
 					    title="房源发布"
 					    title="房源发布"
 					    isLink
 					    isLink
@@ -91,52 +90,51 @@
 					    isLink
 					    isLink
 					    url="/pages/componentsB/badge/badge"
 					    url="/pages/componentsB/badge/badge"
 					></u-cell> -->
 					></u-cell> -->
-					<u-cell
-					    title="联系客服"
-					    isLink
-					    url="/pages/componentsB/badge/badge"
-					></u-cell>
-					<u-cell
-					:border='false'
-					    title="去商家端"
-					    isLink
-					    url="/pageA/enter/enter"
-					></u-cell>
+					<view class="kf">
+						<button class="left-btn" open-type='contact'>联系客服</button>
+					</view>
+
+					<u-cell :border='false' title="去商家端" isLink url="/pageA/enter/enter"></u-cell>
 				</u-cell-group>
 				</u-cell-group>
 			</view>
 			</view>
 		</view>
 		</view>
-		<view v-if='userInfo.nickname' class='quit-login' @click='quitLogin'>退出登录</view>
+		<view v-if='userInfo.nickname' class='quit-login' @click='quitLogin'>退出账号</view>
+		<!-- <view class="exit" @click="exit" v-if="userInfo.phone">
+			退出账号
+		</view> -->
 		<login-pop-up ref='loginpopup' :content='"手机登录后才能查看我的哦~"'></login-pop-up>
 		<login-pop-up ref='loginpopup' :content='"手机登录后才能查看我的哦~"'></login-pop-up>
 	</view>
 	</view>
 </template>
 </template>
 
 
 <script>
 <script>
-	var that
-		import loginPopUp from "@/components/loginPopUp/index.vue"
+	var that;
+	import uploadImage from '@/components/ossutil/uploadFile.js';
+	import loginPopUp from "@/components/loginPopUp/index.vue"
 	export default {
 	export default {
 		components: {
 		components: {
 			loginPopUp
 			loginPopUp
 		},
 		},
 		data() {
 		data() {
 			return {
 			return {
-				edit:false,
-				offset:['-2','-27%'],
-				type:"warning",
-				value:'88',
+				edit: false,
+				offset: ['-2', '-27%'],
+				type: "warning",
+				value: '88',
 				title: 'Hello',
 				title: 'Hello',
-				userInfo:{},
+				userInfo: {},
 			}
 			}
 		},
 		},
 		onLoad() {
 		onLoad() {
 			that = this
 			that = this
 		},
 		},
-		onShow(){
-			if(!uni.getStorageSync("userInfo").phone){
+		onShow() {
+			this.userInfo = uni.getStorageSync("userInfo")
+			if (!this.userInfo.phone) {
 				this.$refs.loginpopup.open()
 				this.$refs.loginpopup.open()
-			}else{
-				this.userInfo = uni.getStorageSync("userInfo")
-				  var reg = /1(\d{2})\d{4}(\d{4})/g;
-				this.userInfo.phone1 = this.userInfo.phone.replace(reg,"1$1****$2");
+			} else {
+
+				var reg = /1(\d{2})\d{4}(\d{4})/g;
+				this.userInfo.phone1 = this.userInfo.phone.replace(reg, "1$1****$2");
 				console.log(this.userInfo)
 				console.log(this.userInfo)
 			}
 			}
 		},
 		},
@@ -174,27 +172,73 @@
 			       curPage.onReady()
 			       curPage.onReady()
 			       // 执行刷新
 			       // 执行刷新
 			   },
 			   },
-			editNickName(){
+			editNickName() {
 				this.$request.baseRequest('admin.unimall.commonUserInfo', 'update', {
 				this.$request.baseRequest('admin.unimall.commonUserInfo', 'update', {
-					commonUserInfo:JSON.stringify(this.userInfo)
+					commonUserInfo: JSON.stringify(this.userInfo)
 				}, failres => {
 				}, failres => {
 					uni.showToast({
 					uni.showToast({
 						icon: "none",
 						icon: "none",
 						title: failres.errmsg,
 						title: failres.errmsg,
 						duration: 3000
 						duration: 3000
-					});	
+					});
 				}).then(res => {
 				}).then(res => {
-					uni.setStorageSync("userInfo",this.userInfo)
-					this.edit=false
+					uni.setStorageSync("userInfo", this.userInfo)
+					this.edit = false
 				})
 				})
 			},
 			},
-			login(){
-				if(!uni.getStorageSync("userInfo").phone){
+			login() {
+				if (!uni.getStorageSync("userInfo").phone) {
 					this.$refs.loginpopup.open()
 					this.$refs.loginpopup.open()
-				}else{
-					
+				} else {
+					uni.navigateTo({
+						url: '/pages/my/editNickName'
+					})
 				}
 				}
-			}
+			},
+			exit() {
+				uni.setStorageSync("userInfo", {})
+				this.userInfo = {}
+				this.$forceUpdate()
+			},
+			editHead() {
+				if (this.userInfo.phone) {
+					uni.chooseImage({
+						count: 1,
+						sizeType: ['original', 'compressed'],
+						success: function(res) {
+							uploadImage(res.tempFilePaths[0], 'cardImages/',
+								result => {
+									that.userInfo.head = result
+									that.$request.baseRequest('admin.unimall.commonUserInfo', 'update', {
+										commonUserInfo: JSON.stringify(that.userInfo)
+									}, failres => {
+										uni.hideLoading()
+										uni.showToast({
+											icon: "none",
+											title: failres.errmsg,
+											duration: 3000
+										});
+									}).then(res => {
+										uni.setStorageSync("userInfo", that.userInfo)
+										uni.showToast({
+											icon: "success",
+											title: '修改成功!',
+											duration: 2000,
+											complete: function() {
+												uni.switchTab({
+													url: "/pages/my/my"
+												})
+											}
+										})
+									})
+								}
+							)
+						}
+					});
+				} else {
+					this.showAuthorizePhone = true
+				}
+			},
 		}
 		}
 	}
 	}
 </script>
 </script>
@@ -229,33 +273,72 @@
 		width:92vw;
 		width:92vw;
 		padding:0 20rpx;
 		padding:0 20rpx;
 	}
 	}
-	.orderList{
-		display:flex;
+
+	.orderList {
+		display: flex;
 		flex-wrap: wrap;
 		flex-wrap: wrap;
-		.orderItem{
-			width:48%;
-			padding:20rpx;
-			background:#E5EBFF;
-			box-sizing:border-box;
-			margin:5rpx;
-			border-radius:10rpx;
-			display:flex;
+
+		.orderItem {
+			width: 48%;
+			padding: 20rpx;
+			background: #E5EBFF;
+			box-sizing: border-box;
+			margin: 5rpx;
+			border-radius: 10rpx;
+			display: flex;
 		}
 		}
-		/deep/.u-badge{
-			z-index:50;
+
+		/deep/.u-badge {
+			z-index: 50;
 		}
 		}
-		.orderName{
-			margin-left:20rpx;
+
+		.orderName {
+			margin-left: 20rpx;
 		}
 		}
 	}
 	}
-	.user{
-		background:#fff;
-		width:100%;
-		padding:10rpx 20rpx;
+
+	.user {
+		background: #fff;
+		width: 100%;
+		padding: 10rpx 20rpx;
 	}
 	}
-	.userWrap{
-		width:92vw;
-		margin:0 auto;
+
+	.userWrap {
+		width: 92vw;
+		margin: 0 auto;
+	}
+
+	.kf {
+		border-bottom-width: 1px;
+		border-bottom-style: solid;
+		width: 100%;
+		border-color: #d6d7d9;
+		padding: 20rpx;
+		box-sizing: border-box;
+	}
+
+	.left-btn {
+		padding: 0;
+		margin: 0;
+		font-size: 30rpx;
+		height: 42rpx;
+		display: flex;
+		align-items: center;
+		background-color: #fff;
+		margin-left: 10rpx;
+	}
+
+	.left-btn:after {
+		border: none !important;
+	}
+
+	.exit {
+		width: 100vw;
+		background-color: #fff;
+		font-size: 30rpx;
+		margin-top: 20rpx;
+		text-align: center;
+		padding: 20rpx;
 	}
 	}
 	.quit-login{
 	.quit-login{
 		background:#fff;
 		background:#fff;
@@ -265,4 +348,5 @@
 		margin:10rpx 20rpx;
 		margin:10rpx 20rpx;
 		border-radius:10rpx;
 		border-radius:10rpx;
 	}
 	}
-</style>
+
+</style>