editUser.vue 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193
  1. <template>
  2. <view class=" uni-container ">
  3. <view class="u-demo-block">
  4. <view class="u-demo-block__content">
  5. <!-- 注意,如果需要兼容微信小程序,最好通过setRules方法设置rules规则 -->
  6. <u--form label-position="top" :model="user" ref="form1" label-width='100'>
  7. <u-form-item label-position="top" label="用户昵称" prop="nickname">
  8. <u--input v-model="user.nickname" border="none" placeholder="请输入用户昵称"></u--input>
  9. </u-form-item>
  10. <u-form-item label-position="top" label="手机号码" prop="mobile">
  11. <u--input v-model="user.mobile" border="none" placeholder="请输入手机号码"></u--input>
  12. </u-form-item>
  13. <u-form-item label-position="top" label="邮箱" prop="email">
  14. <u--input v-model="user.email" border="none" placeholder="请输入邮箱"></u--input>
  15. </u-form-item>
  16. <u-form-item label-position="top" label="用户性别" prop="sexname"
  17. @click="showSex = true; hideKeyboard()">
  18. <u-input v-model="user.sexname" disabled disabledColor="#ffffff" placeholder="请选择性别"
  19. border="none"></u-input>
  20. <u-icon slot="right" name="arrow-right"></u-icon>
  21. </u-form-item>
  22. <u-form-item label-position="top" label="备注" prop="remark">
  23. <u--input v-model="user.remark" type="textarea" border="none" placeholder="请输入内容"></u--input>
  24. </u-form-item>
  25. </u--form>
  26. <u-button type="primary" text="提交"
  27. customStyle="height: 72rpx;width: 340rpx;margin-top: 100rpx;display: flex;align-items: center;justify-content: center;border-radius: 60rpx;background: #4CB2B6;"
  28. @click="submit"></u-button>
  29. <!-- description="如果选择保密会报错" 放在u-action-sheet中的 -->
  30. <u-action-sheet :show="showSex" :actions="actions" title="请选择性别" @close="showSex = false"
  31. @select="sexSelect">
  32. </u-action-sheet>
  33. </view>
  34. </view>
  35. </view>
  36. </template>
  37. <script>
  38. import {
  39. updateUser // 修改用户
  40. } from '@/api/personnel_permissions';
  41. import {
  42. DICT_TYPE,
  43. getDictDatas
  44. } from "@/utils/dict";
  45. let that = null;
  46. export default {
  47. data() {
  48. return {
  49. user: {
  50. id: undefined,
  51. deptId: undefined,
  52. username: undefined,
  53. nickname: undefined,
  54. password: undefined,
  55. mobile: undefined,
  56. email: undefined,
  57. sex: undefined,
  58. status: "0",
  59. remark: undefined,
  60. },
  61. showSex: false,
  62. actions: getDictDatas(DICT_TYPE.SYSTEM_USER_SEX),
  63. rules: {
  64. 'username': {
  65. // type: 'string',
  66. required: true,
  67. message: '用户名称不能为空',
  68. trigger: ['blur']
  69. },
  70. 'nickname': {
  71. // type: 'string',
  72. required: true,
  73. message: '用户昵称不能为空',
  74. trigger: ['blur']
  75. },
  76. 'password': {
  77. // type: 'string',
  78. required: true,
  79. message: '用户密码不能为空',
  80. trigger: ['blur']
  81. },
  82. 'sex': {
  83. // type: 'number',
  84. required: true,
  85. message: '请选择男或女',
  86. trigger: ['change']
  87. },
  88. 'email': {
  89. type: 'email',
  90. // required: true,
  91. message: "'请输入正确的邮箱地址",
  92. trigger: ["blur", "change"]
  93. },
  94. 'mobile': {
  95. pattern: /^(?:(?:\+|00)86)?1(?:3[\d]|4[5-79]|5[0-35-9]|6[5-7]|7[0-8]|8[\d]|9[189])\d{8}$/,
  96. // type: 'string',
  97. // required: true,
  98. message: '请输入正确的手机号码',
  99. trigger: ['blur']
  100. },
  101. },
  102. }
  103. },
  104. onLoad(option) {
  105. that = this
  106. let str = decodeURIComponent(option.val)
  107. this.actions.map(i => i.name = i.label)
  108. if (str != "undefined") {
  109. that.user = JSON.parse(str);
  110. this.user.sexname = this.sexTrans(this.user.sex)
  111. console.log(that.user, 'res');
  112. }
  113. },
  114. onReady() {
  115. // 如果需要兼容微信小程序,并且校验规则中含有方法等,只能通过setRules方法设置规则
  116. this.$refs.form1.setRules(this.rules)
  117. },
  118. methods: {
  119. sexTrans(val) {
  120. let eduStr = ''
  121. this.actions.map(i => {
  122. if (i.value == val) {
  123. eduStr = i.name
  124. }
  125. })
  126. return eduStr
  127. },
  128. getUser() {
  129. getUserProfile().then(response => {
  130. this.user = response.data
  131. this.user.sexname = this.sexTrans(this.user.sex)
  132. })
  133. },
  134. sexSelect(e) {
  135. console.log("this,actions: ", this.actions);
  136. this.user.sexname = e.name
  137. this.user.sex = e.value
  138. this.$refs.form1.validateField('userInfo.sex')
  139. },
  140. submit() {
  141. // 如果有错误,会在catch中返回报错信息数组,校验通过则在then中返回true
  142. this.$refs.form1.validate().then(res => {
  143. delete this.user.dept
  144. updateUser(this.user).then(response => {
  145. this.$modal.msgSuccess('修改成功')
  146. this.$tab.navigateBack('/pagesA/fire/personnel_permissions/index')
  147. })
  148. }).catch(errors => {
  149. console.log(errors);
  150. // uni.$u.toast('校验失败')/
  151. })
  152. },
  153. hideKeyboard() {
  154. uni.hideKeyboard()
  155. }
  156. }
  157. }
  158. </script>
  159. <style lang="scss" scoped>
  160. .uni-container {
  161. height: 100%;
  162. padding: 20px;
  163. background: #f5f7f9;
  164. }
  165. /deep/.u-form-item__body__left__content[data-v-5e7216f1],
  166. /deep/.u-form-item__body__left__content.data-v-5e7216f1,
  167. /deep/.u-form-item__body__left__content {
  168. padding-right: 0;
  169. }
  170. page {
  171. height: 100%;
  172. background-color: #f5f7f9;
  173. position: relative;
  174. }
  175. /deep/ .u-input[data-v-fdbb9fe6],
  176. /deep/ .u-input.data-v-fdbb9fe6 {
  177. background-color: #fff;
  178. border: 1px solid #E2E4E6;
  179. height: 100rpx;
  180. }
  181. /deep/ .uni-input-wrapper {
  182. margin-left: 20rpx;
  183. }
  184. /deep/ .item__body__right__content__icon {
  185. position: absolute;
  186. right: 50rpx;
  187. }
  188. </style>