userinfo.vue 9.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373
  1. <template>
  2. <view>
  3. <!--pages/userinfo/userinfo.wxml-->
  4. <view class="list">
  5. <view class="li">
  6. <text>头像</text>
  7. <!-- #ifdef MP-WEIXIN -->
  8. <button open-type="chooseAvatar" hover-class="none" class="item" @chooseavatar="uploadAvatar">
  9. <image :src="avatar?avatar:'../../static/pages/images/userimg.png'" mode="aspectFit" class="logo">
  10. </image>
  11. </button>
  12. <!-- #endif -->
  13. <!-- #ifndef MP-WEIXIN -->
  14. <view class="item" @tap="uploadImgAvatar">
  15. <image :src="avatar?avatar:'../../static/pages/images/userimg.png'" mode="aspectFit" class="logo">
  16. </image>
  17. </view>
  18. <!-- #endif -->
  19. <image src="/static/pages/images/more.png" class="rico"></image>
  20. </view>
  21. <view class="li">
  22. <text>昵称</text>
  23. <view class="item">
  24. <!-- #ifdef MP-WEIXIN -->
  25. <input type="nickname" name="nickName" placeholder="请输入昵称" v-model="nickName" @input="intNickName"
  26. @blur="getNickname" />
  27. <!-- #endif -->
  28. <!-- #ifndef MP-WEIXIN -->
  29. <input name="nickName" placeholder="请输入昵称" v-model="nickName" @input="intNickName"></input>
  30. <!-- #endif -->
  31. <!-- {{nickName?nickName:''}} -->
  32. </view>
  33. <!-- <image src="/pages/images/more.png" class="rico"></image> -->
  34. </view>
  35. <view class="li">
  36. <text>真实姓名</text>
  37. <view class="item">
  38. <input name="realName" placeholder="请输入真实姓名" :value="realName" @input="intrealName"></input>
  39. </view>
  40. <image src="/static/pages/images/more.png" class="rico"></image>
  41. </view>
  42. <view class="li">
  43. <text>身份证号</text>
  44. <view class="item">
  45. <input name="cardNo" maxlength="18" type="idcard" placeholder="请输入身份证号码" :value="cardNo"
  46. @input="getcardNo"></input>
  47. </view>
  48. <image src="/static/pages/images/more.png" class="rico"></image>
  49. </view>
  50. <view class="li">
  51. <text>手机</text>
  52. <!-- #ifdef MP-WEIXIN -->
  53. <block v-if="mobile&&isMobile()">
  54. <view class="item active">{{mobile}}</view>
  55. <image src="/static/pages/images/more.png" class="rico"></image>
  56. </block>
  57. <button v-else class="wechat dflex" open-type="getPhoneNumber" @getphonenumber="getphonenumber">
  58. <image src="/static/pages/images/wxico.png"></image>立即获取
  59. </button>
  60. <!-- #endif -->
  61. <!-- #ifndef MP-WEIXIN -->
  62. <view class="item">
  63. <input name="mobile" maxlength="11" type="number" placeholder="请输入手机号绑定" v-model="mobile"></input>
  64. </view>
  65. <!-- #endif -->
  66. </view>
  67. <view class="li">
  68. <text>性别</text>
  69. <view class="item active">
  70. <picker @change="bindGender" :value="index" :range="genders">
  71. <view class="picker">
  72. {{genders[index]}}
  73. </view>
  74. </picker>
  75. </view>
  76. <!-- <view class="item active">女</view> -->
  77. <image src="/static/pages/images/more.png" class="rico"></image>
  78. </view>
  79. <view class="li">
  80. <text>出生年月</text>
  81. <view :class="'item ' + (birthday ? 'active' : '')">
  82. <picker mode="date" :value="birthday" @change="bindDateChange">
  83. <view class="picker">
  84. {{birthday ? birthday : '请选择出生年月'}}
  85. </view>
  86. </picker>
  87. </view>
  88. <image src="/static/pages/images/more.png" class="rico"></image>
  89. </view>
  90. <view class="li">
  91. <text>地区</text>
  92. <view :class="['item',(city ? 'active' : '')]">
  93. <!-- #ifdef MP-WEIXIN -->
  94. <picker mode="region" :value="morCity" @change="bindCity">
  95. <!-- <view class="uni-input">{{array[index]}}</view> -->
  96. <view class="picker">
  97. {{city ? city : '请选择地区'}}
  98. </view>
  99. </picker>
  100. <!-- #endif -->
  101. <!-- #ifndef MP-WEIXIN -->
  102. <pickerAddress @change="bindAddressChange">
  103. <view class="picker">{{ city ? city : '请选择地区' }}</view>
  104. </pickerAddress>
  105. <!-- #endif -->
  106. </view>
  107. <image src="/static/pages/images/more.png" class="rico"></image>
  108. <!-- <view class="item active">湖南</view>
  109. <image src="/pages/images/more.png" class="rico"></image> -->
  110. </view>
  111. <view class="li">
  112. <text>详细地址</text>
  113. <view class="item">
  114. <input name="realName" placeholder="请输入详细地址" :value="address" @input="bindaddress"></input>
  115. </view>
  116. <image src="/static/pages/images/more.png" class="rico"></image>
  117. </view>
  118. </view>
  119. <button class="submit" @tap="confirm">确定</button>
  120. </view>
  121. </template>
  122. <script>
  123. // pages/userinfo/userinfo.js
  124. const app = getApp();
  125. import pickerAddress from '../../components/wangding-pickerAddress/wangding-pickerAddress.vue';
  126. const req = require("../../utils/request.js");
  127. const util = require("../../utils/util.js");
  128. var QQMapWX = require("../../utils/qqmap.js");
  129. export default {
  130. data() {
  131. return {
  132. genders: ['男', '女'],
  133. index: 0,
  134. avatar: "",
  135. nickName: "",
  136. realName: "",
  137. cardNo: "",
  138. mobile: "",
  139. birthday: "",
  140. city: "",
  141. address: "",
  142. cityCode: '',
  143. morCity: []
  144. };
  145. },
  146. components: {
  147. pickerAddress
  148. },
  149. props: {},
  150. onLoad: function() {
  151. let _ts = this;
  152. QQMapWX.initMap(req.public.mapLBSKEY);
  153. app.globalData.getCheckSessoin(json => {
  154. _ts.sessionKey = json.session_key;
  155. });
  156. this.getInfo(true);
  157. },
  158. methods: {
  159. getInfo(isLoad) {
  160. let that = this;
  161. let isShowLoading = false;
  162. if (!isShowLoading && isLoad) {
  163. req.loadIng('加载中');
  164. isShowLoading = true;
  165. }
  166. req.getRequest('/api/user/info', {}, data => {
  167. // console.log(data);
  168. if (!data.district) {} else {
  169. this.cityCode = data.district
  170. this.morCity = (data.district.substring(0, 2) + "0000," + data.district.substring(0, 4) +
  171. "00," + data.district).split(",")
  172. }
  173. this.setData(data);
  174. if (!data.areaAdd) {} else {
  175. this.city = data.areaAdd
  176. }
  177. req.setStorage('userInfo', data);
  178. if (data.gender == 2) {
  179. that.setData({
  180. index: 1
  181. });
  182. } else {
  183. that.setData({
  184. index: 0
  185. });
  186. }
  187. if (isShowLoading) {
  188. uni.hideLoading();
  189. isShowLoading = false;
  190. }
  191. });
  192. },
  193. uploadImgAvatar() {
  194. let that = this;
  195. uni.chooseImage({
  196. count: 1,
  197. sizeType: ['original', 'compressed'],
  198. sourceType: ['album', 'camera'],
  199. success(res) {
  200. // console.log(res.tempFilePaths);
  201. req.uploadFile('/api/upload', res.tempFilePaths[0], res => {
  202. req.msg('图片上传成功');
  203. that.setData({
  204. avatar: res.src
  205. });
  206. });
  207. }
  208. });
  209. },
  210. uploadAvatar(e) {
  211. uni.showLoading({
  212. title: '头像上传中'
  213. })
  214. req.uploadFile('/api/upload', e.detail.avatarUrl, res => {
  215. this.avatar = res.src;
  216. uni.hideLoading();
  217. });
  218. // let that = this;
  219. // uni.chooseImage({
  220. // count: 1,
  221. // sizeType: ['original', 'compressed'],
  222. // sourceType: ['album', 'camera'],
  223. // success(res) {
  224. // // console.log(res.tempFilePaths);
  225. // req.uploadFile('/api/upload', res.tempFilePaths[0], res => {
  226. // req.msg('图片上传成功');
  227. // that.setData({
  228. // avatar: res.src
  229. // });
  230. // });
  231. // }
  232. // });
  233. },
  234. intNickName(e) {
  235. this.nickName = e.detail.value
  236. },
  237. getNickname(e) {
  238. this.nickName = e.detail.value
  239. },
  240. intrealName(e) {
  241. this.setData({
  242. realName: e.detail.value
  243. });
  244. },
  245. bindaddress(e) {
  246. this.address = e.detail.value
  247. },
  248. getcardNo(e) {
  249. this.setData({
  250. cardNo: e.detail.value
  251. });
  252. },
  253. intMobile(e) {
  254. this.setData({
  255. mobile: e.detail.value
  256. });
  257. },
  258. bindGender: function(e) {
  259. this.setData({
  260. index: e.detail.value
  261. });
  262. },
  263. bindDateChange: function(e) {
  264. this.setData({
  265. birthday: e.detail.value
  266. });
  267. },
  268. bindCity: function(e) {
  269. this.morCity = e.detail.code
  270. this.city = e.detail.value.join().replace(/[,]/g, "")
  271. this.cityCode = e.detail.code[2]
  272. },
  273. bindAddressChange(data) {
  274. // this.region = data.data;
  275. // this.addIds = data.ids;
  276. this.morCity = data.ids
  277. this.city = data.data[0] + data.data[1] + data.data[2]
  278. this.cityCode = data.ids[2]
  279. },
  280. isMobile() {
  281. return util.isMobile(this.mobile);
  282. },
  283. confirm() {
  284. let that = this;
  285. let d = {
  286. avatar: that.avatar,
  287. nickName: that.nickName,
  288. realName: that.realName,
  289. mobile: that.mobile,
  290. cardNo: that.cardNo,
  291. gender: that.index == 0 ? 1 : 2,
  292. birthday: that.birthday,
  293. district: that.cityCode,
  294. areaAdd: that.city,
  295. address: that.address
  296. };
  297. let reg = /^[\u4E00-\u9FA5\uf900-\ufa2d·s]{2,20}$/;
  298. // console.log(reg.test(d.realName));
  299. if (!reg.test(d.realName)) return req.msg("请输入正确真实姓名(至少2位汉字)");
  300. if (that.mobile) {
  301. if (!that.isMobile()) {
  302. return req.msg("请输入有效的手机号");
  303. }
  304. }
  305. let isShowLoading = false;
  306. if (!isShowLoading) {
  307. req.loadIng('保存中');
  308. isShowLoading = true;
  309. }
  310. req.postRequest('/api/user/save', d, res => {
  311. // req.msg('保存成功', () => {
  312. // this.getInfo()
  313. // app.switchTab('pages/user/user')
  314. // })
  315. if (isShowLoading) {
  316. uni.hideLoading();
  317. req.msg('保存成功');
  318. isShowLoading = false;
  319. setTimeout(s => {
  320. this.getInfo(false);
  321. }, 300)
  322. }
  323. });
  324. },
  325. getphonenumber(event) {
  326. const detail = event.detail;
  327. const _ts = this;
  328. if (!detail || !detail.encryptedData || !detail.iv) return false;
  329. req.postRequest('/api/weixin/mobile', {
  330. encryptedData: detail.encryptedData,
  331. iv: detail.iv,
  332. sessionKey: _ts.sessionKey
  333. }, res => {
  334. if (res.mobile) {
  335. let userInfo = req.getStorage('userInfo');
  336. userInfo.mobile = res.mobile;
  337. req.setStorage('userInfo', userInfo);
  338. }
  339. _ts.getInfo();
  340. });
  341. }
  342. }
  343. };
  344. </script>
  345. <style>
  346. @import "./userinfo.css";
  347. </style>