mine.vue 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350
  1. <template>
  2. <view class="home">
  3. <view class="form-area">
  4. <u--form
  5. labelPosition="left"
  6. :model="form"
  7. :rules="rules"
  8. ref="Form1"
  9. :labelWidth="100"
  10. labelAlign="left">
  11. <u-form-item
  12. label="姓名"
  13. prop="name"
  14. borderBottom>
  15. <u--input
  16. v-model="form.name"
  17. border="none">
  18. </u--input>
  19. </u-form-item>
  20. <u-form-item
  21. label="工号"
  22. prop="ID"
  23. borderBottom>
  24. {{form.ID}}
  25. </u-form-item>
  26. <u-form-item
  27. label="手机号"
  28. prop="phone"
  29. borderBottom>
  30. <u--input
  31. v-model="form.phone"
  32. border="none">
  33. </u--input>
  34. </u-form-item>
  35. <u-form-item
  36. label="邮箱"
  37. prop="email"
  38. borderBottom>
  39. <u--input
  40. v-model="form.email"
  41. border="none">
  42. </u--input>
  43. </u-form-item>
  44. <u-form-item
  45. label="密码"
  46. prop="pwd"
  47. borderBottom>
  48. <view class="demo-layout" style="width: 300rpx;">
  49. <u-button color="#000" size="small" @click="popupShow = true">修改密码</u-button>
  50. </view>
  51. </u-form-item>
  52. </u--form>
  53. </view>
  54. <u-popup :show="popupShow" @close="popupShow = false" >
  55. <view class="popup-area">
  56. <view class="form-area">
  57. <u--form
  58. labelPosition="left"
  59. :model="pwdForm"
  60. :rules="pwdRules"
  61. ref="Form2"
  62. :labelWidth="100"
  63. labelAlign="left">
  64. <u-form-item
  65. label="旧密码"
  66. prop="oldpwd"
  67. borderBottom>
  68. <u--input
  69. v-model="pwdForm.oldpwd"
  70. border="none">
  71. </u--input>
  72. </u-form-item>
  73. <u-form-item
  74. label="新密码"
  75. prop="newpwd"
  76. borderBottom>
  77. <u--input
  78. v-model="pwdForm.newpwd"
  79. border="none">
  80. </u--input>
  81. </u-form-item>
  82. <u-form-item
  83. label="确认密码"
  84. prop="surepwd"
  85. borderBottom>
  86. <u--input
  87. v-model="pwdForm.surepwd"
  88. border="none">
  89. </u--input>
  90. </u-form-item>
  91. </u--form>
  92. </view>
  93. <view class="pwd-btn">
  94. <u-button size="small" @click="popupShow = false">取消</u-button>
  95. <u-button color="#000" size="small" @click="changePwd">确认</u-button>
  96. </view>
  97. </view>
  98. </u-popup>
  99. <view class="btn-area">
  100. <!-- <u-button type="info" size="small" @click="toLogout">退出登录</u-button> -->
  101. <u-button color="#000" size="small" @click="save">保存</u-button>
  102. </view>
  103. </view>
  104. </template>
  105. <script>
  106. import cache from '@/utils/storage.js'
  107. import { getInfo,saveUserInfo,savePassword } from '@/api/user.js'
  108. export default {
  109. data() {
  110. return {
  111. form:{
  112. name:cache.session.getJSON('nickName'),
  113. ID:cache.session.getJSON('userName'),
  114. phone:cache.session.getJSON('phone'),
  115. email:cache.session.getJSON('email'),
  116. pwd:""
  117. },
  118. popupShow:false,
  119. userId:cache.session.getJSON('userId'),
  120. rules:{
  121. name:[
  122. {
  123. required: true,
  124. message: '请输入姓名',
  125. // blur和change事件触发检验
  126. trigger: ['blur']
  127. }
  128. ],
  129. phone:[
  130. {
  131. message: '请输入手机号',
  132. // blur和change事件触发检验
  133. trigger: ['blur']
  134. },
  135. {
  136. // 自定义验证函数,见上说明
  137. validator: (rule, value, callback) => {
  138. // 上面有说,返回true表示校验通过,返回false表示不通过
  139. // uni.$u.test.mobile()就是返回true或者false的
  140. return uni.$u.test.mobile(value);
  141. },
  142. message: '手机号码不正确',
  143. // 触发器可以同时用blur和change
  144. trigger: ['blur'],
  145. }
  146. ],
  147. email:[
  148. {
  149. message: '请输入邮箱',
  150. // blur和change事件触发检验
  151. trigger: ['blur']
  152. },
  153. {
  154. // 自定义验证函数,见上说明
  155. validator: (rule, value, callback) => {
  156. // 上面有说,返回true表示校验通过,返回false表示不通过
  157. // uni.$u.test.mobile()就是返回true或者false的
  158. return uni.$u.test.email(value);
  159. },
  160. message: '邮箱不正确',
  161. // 触发器可以同时用blur和change
  162. trigger: ['blur'],
  163. }
  164. ]
  165. },
  166. pwdForm:{
  167. oldpwd:"",
  168. newpwd:"",
  169. surepwd:""
  170. },
  171. pwdRules:{
  172. oldpwd:[
  173. {
  174. required: true,
  175. message: '请输入旧密码',
  176. // blur和change事件触发检验
  177. trigger: ['blur'],
  178. },
  179. {
  180. pattern: /^[0-9a-zA-Z]*$/g,
  181. // 正则检验前先将值转为字符串
  182. transform(value) {
  183. return String(value);
  184. },
  185. message: '密码只能包含字母或数字'
  186. },
  187. {
  188. min: 6,
  189. max: 16,
  190. message: '长度在6-16个字符之间'
  191. }
  192. ],
  193. newpwd:[
  194. {
  195. required: true,
  196. message: '请输入新密码',
  197. // blur和change事件触发检验
  198. trigger: ['blur'],
  199. },
  200. {
  201. pattern: /^[0-9a-zA-Z]*$/g,
  202. // 正则检验前先将值转为字符串
  203. transform(value) {
  204. return String(value);
  205. },
  206. message: '密码只能包含字母或数字'
  207. },
  208. {
  209. min: 6,
  210. max: 16,
  211. message: '长度在6-16个字符之间'
  212. }
  213. ],
  214. surepwd:[
  215. {
  216. required: true,
  217. message: '请确认密码',
  218. // blur和change事件触发检验
  219. trigger: ['blur'],
  220. },
  221. {
  222. pattern: /^[0-9a-zA-Z]*$/g,
  223. // 正则检验前先将值转为字符串
  224. transform(value) {
  225. return String(value);
  226. },
  227. message: '密码只能包含字母或数字'
  228. },
  229. {
  230. min: 6,
  231. max: 16,
  232. message: '长度在6-16个字符之间'
  233. },
  234. {
  235. validator: (rule, value, callback) => {
  236. if(value != this.pwdForm.newpwd){
  237. return false;
  238. }else{
  239. callback()
  240. }
  241. },
  242. message: '密码与新密码不一致'
  243. }
  244. ]
  245. }
  246. };
  247. },
  248. methods:{
  249. save(){
  250. const that = this
  251. this.$refs.Form1.validate().then(() => {
  252. let data = {
  253. email:this.form.email,
  254. nickName:this.form.name,
  255. phonenumber:this.form.phone,
  256. userId:this.userId
  257. }
  258. saveUserInfo(data).then(res=>{
  259. console.log(res)
  260. if(res.data.code===200 && res.data.msg === "操作成功"){
  261. that.initInfo()
  262. }
  263. })
  264. }).catch(errors => {
  265. uni.$u.toast(errors[0].message)
  266. })
  267. },
  268. changePwd(){
  269. this.$refs.Form2.validate().then(() => {
  270. savePassword(this.pwdForm.oldpwd,this.pwdForm.newpwd).then(res=>{
  271. console.log(res)
  272. })
  273. }).catch(errors => {
  274. uni.$u.toast(errors[0].message)
  275. })
  276. },
  277. toLogout(){
  278. console.log("退出登录")
  279. },
  280. initInfo(){
  281. const that = this
  282. getInfo().then(res=>{
  283. if(res.data.code===200){
  284. cache.session.setJSON('role',res.data.roles[0])
  285. cache.session.setJSON('phone',res.data.user.phonenumber)
  286. cache.session.setJSON('email',res.data.user.email)
  287. cache.session.setJSON('nickName',res.data.user.nickName)
  288. cache.session.setJSON('userName',res.data.user.userName)
  289. cache.session.setJSON('userId',res.data.user.userId)
  290. that.form = {
  291. name:res.data.user.nickName,
  292. ID:res.data.user.userName,
  293. phone:res.data.user.phonenumber,
  294. email:res.data.user.email,
  295. pwd:""
  296. }
  297. }
  298. })
  299. }
  300. },
  301. onReady() {
  302. this.$refs.Form1.setRules(this.rules)
  303. this.$refs.Form2.setRules(this.pwdRules)
  304. }
  305. }
  306. </script>
  307. <style lang="scss" scoped>
  308. .home{
  309. position: relative;
  310. height: 100vh;
  311. }
  312. .layout-row{
  313. padding:50rpx 30rpx;
  314. border-bottom:1rpx solid #c6c6c6;
  315. font-size: 30rpx;
  316. }
  317. .form-area{
  318. /deep/.u-form-item{
  319. line-height: 300%;
  320. font-size: 30rpx;
  321. }
  322. /deep/ .u-form-item__body__left__content__label{
  323. padding-left:40rpx
  324. }
  325. }
  326. .btn-area{
  327. position: absolute;
  328. width: 300rpx;
  329. bottom: 100rpx;
  330. right: 50rpx;
  331. // display: flex;
  332. // /deep/.u-button{
  333. // margin: 30rpx;
  334. // }
  335. }
  336. .popup-area{
  337. height: 700rpx;
  338. box-sizing: border-box;
  339. // padding: 0 30rpx;
  340. .pwd-btn{
  341. display: flex;
  342. padding-top: 50rpx;
  343. /deep/.u-button{
  344. margin: 30rpx;
  345. }
  346. }
  347. }
  348. </style>