save.vue 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. <template>
  2. <el-dialog :title="titleMap[mode]" v-model="visible" :width="500" destroy-on-close @closed="$emit('closed')">
  3. <el-form :model="form" :rules="rules" :disabled="mode=='show'" ref="dialogForm" label-width="100px"
  4. label-position="left">
  5. <!-- <el-form-item label="头像" prop="avatar">-->
  6. <!-- <sc-upload v-model="form.avatar" title="上传头像"></sc-upload>-->
  7. <!-- </el-form-item>-->
  8. <el-form-item label="登录账号" prop="username">
  9. <el-input v-model="form.username" placeholder="用于登录系统" clearable></el-input>
  10. </el-form-item>
  11. <template v-if="mode=='add'">
  12. <el-form-item label="登录密码" prop="password">
  13. <el-input type="password" v-model="form.password" clearable show-password></el-input>
  14. </el-form-item>
  15. <el-form-item label="确认密码" prop="password2">
  16. <el-input type="password" v-model="form.password2" clearable show-password></el-input>
  17. </el-form-item>
  18. </template>
  19. <el-form-item label="昵称" prop="nickName">
  20. <el-input v-model="form.nickName" placeholder="用于登录系统" clearable></el-input>
  21. </el-form-item>
  22. <el-form-item label="姓名" prop="realName">
  23. <el-input v-model="form.realName" placeholder="请输入完整的真实姓名" clearable></el-input>
  24. </el-form-item>
  25. <el-form-item label="性别" prop="sex">
  26. <el-radio-group v-model="form.sex">
  27. <el-radio label="男">男</el-radio>
  28. <el-radio label="女">女</el-radio>
  29. </el-radio-group>
  30. </el-form-item>
  31. <el-form-item label="状态" prop="status">
  32. <el-switch v-model="form.status" :active-value="1" :inactive-value="0"></el-switch>
  33. </el-form-item>
  34. <el-form-item label="所属角色" prop="roleIds">
  35. <el-select v-model="form.roleIds" placeholder="请选择分配角色" multiple clearable style="width: 100%;">
  36. <el-option v-for="item in roles" :key="item.id" :label="item.name" :value="item.id">
  37. <span style="float: left">{{ item.name }}</span>
  38. <span
  39. style="float: right;color: var(--el-text-color-secondary); font-size: 13px;">{{ item.alias }}</span>
  40. </el-option>
  41. </el-select>
  42. </el-form-item>
  43. </el-form>
  44. <template #footer>
  45. <el-button @click="visible=false">取 消</el-button>
  46. <el-button v-if="mode!='show'" type="primary" :loading="isSaveing" @click="submit()">保 存</el-button>
  47. </template>
  48. </el-dialog>
  49. </template>
  50. <script>
  51. export default {
  52. emits: ['success', 'closed'],
  53. data() {
  54. return {
  55. mode: "add",
  56. titleMap: {
  57. add: '新增用户',
  58. edit: '编辑用户',
  59. show: '查看'
  60. },
  61. visible: false,
  62. isSaveing: false,
  63. //表单数据
  64. form: {
  65. id: "",
  66. username: "",
  67. password: "",
  68. nickName: "",
  69. avatar: "",
  70. realName: "",
  71. group: "",
  72. sex: "男",
  73. status: 1,
  74. roleIds: []
  75. },
  76. //验证规则
  77. rules: {
  78. avatar: [
  79. {required: true, message: '请上传头像'}
  80. ],
  81. username: [
  82. {required: true, message: '请输入登录账号'}
  83. ],
  84. password: [
  85. {required: true, message: '请输入登录密码'},
  86. {
  87. validator: (rule, value, callback) => {
  88. if (this.form.password2 !== '') {
  89. this.$refs.dialogForm.validateField('password2');
  90. }
  91. callback();
  92. }
  93. }
  94. ],
  95. password2: [
  96. {required: true, message: '请再次输入密码'},
  97. {
  98. validator: (rule, value, callback) => {
  99. if (value !== this.form.password) {
  100. callback(new Error('两次输入密码不一致!'));
  101. } else {
  102. callback();
  103. }
  104. }
  105. }
  106. ],
  107. group: [
  108. {required: true, message: '请选择所属角色'}
  109. ]
  110. },
  111. //所需数据选项
  112. roles: []
  113. }
  114. },
  115. mounted() {
  116. this.loadRoles()
  117. },
  118. methods: {
  119. open(mode = 'add') {
  120. this.mode = mode;
  121. this.visible = true;
  122. return this
  123. },
  124. async loadRoles() {
  125. let res = await this.$API.role.listAll();
  126. this.roles = res.data;
  127. },
  128. //表单提交方法
  129. submit() {
  130. this.$refs.dialogForm.validate(async (valid) => {
  131. if (valid) {
  132. this.isSaveing = true;
  133. var res = await this.$API.user.save(this.form);
  134. this.isSaveing = false;
  135. if (res.code == 200) {
  136. this.$emit('success', this.form, this.mode)
  137. this.visible = false;
  138. this.$message.success("操作成功")
  139. } else {
  140. this.$alert(res.message, "提示", {type: 'error'})
  141. }
  142. } else {
  143. return false;
  144. }
  145. })
  146. },
  147. //表单注入数据
  148. async setData(data) {
  149. this.form = data
  150. let res = await this.$API.user.roleIds(data.id);
  151. this.form.roleIds = res.data;
  152. }
  153. }
  154. }
  155. </script>
  156. <style>
  157. </style>