form.vue 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193
  1. /* eslint-disable vue/require-v-for-key */
  2. <template>
  3. <div class="app-container">
  4. <el-page-header :content="isEdit?'编辑用户':'添加用户'" @back="goBack" />
  5. <el-card class="form-container" shadow="never">
  6. <el-form ref="sysUserForm" :model="sysUser" :rules="rules" label-width="150px">
  7. <el-form-item label="用户头像">
  8. <single-upload v-model="sysUser.avatar" />
  9. </el-form-item>
  10. <el-form-item label="登录名:" prop="username">
  11. <el-input v-model="sysUser.username" />
  12. </el-form-item>
  13. <el-form-item label="密码:" prop="password">
  14. <el-input v-model="sysUser.password" />
  15. </el-form-item>
  16. <el-form-item label="姓名:" prop="fullName">
  17. <el-input v-model="sysUser.fullName" />
  18. </el-form-item>
  19. <el-form-item label="手机:">
  20. <el-input v-model="sysUser.phone" />
  21. </el-form-item>
  22. <el-form-item label="是否阻止登录:">
  23. <el-radio-group v-model="sysUser.loginFlag">
  24. <el-radio :label="1">是</el-radio>
  25. <el-radio :label="0">否</el-radio>
  26. </el-radio-group>
  27. </el-form-item>
  28. <el-form-item label="用户角色:">
  29. <el-checkbox-group v-model="roleChecked" @change="handleCheckedRoles">
  30. <el-checkbox v-for="item in roleSelect" :key="item.id" :label="item.id" class="littleMarginLeft">{{ item.roleDesc }}</el-checkbox>
  31. </el-checkbox-group>
  32. </el-form-item>
  33. <el-form-item>
  34. <el-button type="primary" @click="onSubmit('sysUserForm')">保存</el-button>
  35. <el-button v-if="!isEdit" type="info" @click="resetForm('roleFrom')">重置</el-button>
  36. <el-button @click="goBack">返回</el-button>
  37. </el-form-item>
  38. </el-form>
  39. </el-card>
  40. </div>
  41. </template>
  42. <script>
  43. import SingleUpload from '@/components/Upload/singleUpload'
  44. import { getUser, updateUser, createUser } from '@/api/sys/user'
  45. import { fetchList as fetchRoleList } from '@/api/sys/role'
  46. const defaultSysUser = {
  47. id: 0,
  48. username: '',
  49. password: '',
  50. fullName: '',
  51. phone: '',
  52. avatar: '',
  53. roleIds: '',
  54. loginFlag: 0
  55. }
  56. export default {
  57. name: 'SysUserEdit',
  58. components: { SingleUpload },
  59. filters: {},
  60. data() {
  61. return {
  62. sysUser: Object.assign({}, defaultSysUser),
  63. roleSelect: [],
  64. roleChecked: [],
  65. rules: {
  66. username: [
  67. { required: true, message: '请输入登录名', trigger: 'blur' },
  68. { min: 2, max: 15, message: '长度在 2 到 15 个字符', trigger: 'blur' }
  69. ],
  70. password: [
  71. { required: true, message: '请输入密码', trigger: 'blur' },
  72. { min: 6, max: 30, message: '长度在 6 到 30 个字符', trigger: 'blur' }
  73. ],
  74. fullName: [
  75. { required: true, message: '请输入姓名', trigger: 'blur' },
  76. { min: 2, max: 10, message: '长度在 2 到 10 个字符', trigger: 'blur' }
  77. ]
  78. }
  79. }
  80. },
  81. watch: {
  82. $route(route) {
  83. this.getFormData()
  84. this.getRoleList()
  85. }
  86. },
  87. created() {
  88. this.getFormData()
  89. this.getRoleList()
  90. },
  91. methods: {
  92. getFormData() {
  93. if (this.$route.query.id) {
  94. this.sysUser.id = this.$route.query.id
  95. this.isEdit = true
  96. getUser(this.sysUser.id).then(response => {
  97. this.sysUser.username = response.data.username
  98. this.sysUser.password = response.data.password
  99. this.sysUser.fullName = response.data.fullName
  100. this.sysUser.phone = response.data.phone
  101. this.sysUser.avatar = response.data.avatar
  102. this.sysUser.roleIds = response.data.roleIds
  103. this.sysUser.loginFlag = response.data.loginFlag
  104. if (response.data.roleIds) {
  105. this.roleChecked = []
  106. response.data.roleIds.split(',').forEach(element => {
  107. this.roleChecked.push(element * 1)
  108. console.log(this.roleChecked)
  109. })
  110. }
  111. })
  112. } else {
  113. this.sysUser.id = ''
  114. this.isEdit = false
  115. this.sysUser = Object.assign({}, defaultSysUser)
  116. }
  117. },
  118. getRoleList() {
  119. fetchRoleList({ pageNum: 1, pageSize: 100 }).then(response => {
  120. this.roleSelect = response.data.results
  121. })
  122. },
  123. onSubmit(formName) {
  124. this.$refs[formName].validate(valid => {
  125. if (valid) {
  126. this.$confirm('是否提交数据', '提示', {
  127. confirmButtonText: '确定',
  128. cancelButtonText: '取消',
  129. type: 'warning'
  130. }).then(() => {
  131. const self = this
  132. if (this.isEdit) {
  133. updateUser(this.$route.query.id, this.sysUser).then(response => {
  134. this.$message({
  135. message: '修改成功',
  136. type: 'success',
  137. duration: 1000
  138. })
  139. self.goBack()
  140. })
  141. } else {
  142. createUser(this.sysUser).then(response => {
  143. this.$refs[formName].resetFields()
  144. this.resetForm(formName)
  145. this.$message({
  146. message: '提交成功',
  147. type: 'success',
  148. duration: 1000
  149. })
  150. self.goBack()
  151. })
  152. }
  153. })
  154. } else {
  155. this.$message({
  156. message: '验证失败',
  157. type: 'error',
  158. duration: 1000
  159. })
  160. return false
  161. }
  162. })
  163. },
  164. handleCheckedRoles() {
  165. // 选择角色
  166. this.sysUser.roleIds = this.roleChecked.join(',')
  167. },
  168. resetForm(formName) {
  169. this.$refs[formName].resetFields()
  170. this.sysUser = Object.assign({}, defaultSysUser)
  171. this.getSelectsysUserList()
  172. this.filterProductAttrList = [
  173. {
  174. value: []
  175. }
  176. ]
  177. },
  178. goBack() {
  179. // 调用全局挂载的方法,关闭当前标签页
  180. this.$store.dispatch('tagsView/delView', this.$route)
  181. // 返回上一步路由,返回上一个标签页
  182. this.$router.go(-1)
  183. }
  184. }
  185. }
  186. </script>
  187. <style scoped>
  188. .form-container {
  189. width: 800px;
  190. }
  191. </style>