user-detail.vue 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204
  1. <style scoped>
  2. .user-panel {
  3. margin: 10px auto;
  4. }
  5. </style>
  6. <template>
  7. <el-dialog
  8. :visible.sync="showDialog"
  9. :title="title"
  10. :modal-append-to-body="false"
  11. style="text-align: left"
  12. @close="closeDialog"
  13. :close-on-click-modal="false"
  14. >
  15. <div class="user-panel" v-loading="loading">
  16. <el-form
  17. ref="form"
  18. :model="formModel"
  19. :rules="ruleValidate"
  20. :label-width="'100px'"
  21. >
  22. <el-form-item label="用户名" prop="userName">
  23. <el-input
  24. v-model="formModel.userName"
  25. placeholder="请输入用户名"
  26. style="width: 300px"
  27. ></el-input>
  28. </el-form-item>
  29. <el-form-item label="真实名称" prop="realName">
  30. <el-input
  31. v-model="formModel.realName"
  32. placeholder="请输入真实名称"
  33. style="width: 300px"
  34. ></el-input>
  35. </el-form-item>
  36. <el-form-item
  37. v-show="ruleValidate.password[0].required"
  38. label="密码"
  39. prop="password"
  40. >
  41. <el-input
  42. type="password"
  43. v-model="formModel.password"
  44. placeholder="请输入密码"
  45. style="width: 300px"
  46. ></el-input>
  47. </el-form-item>
  48. <el-form-item label="所属企业" prop="companyId">
  49. <el-select-tree
  50. :props="companyProps"
  51. :options="companyResult"
  52. v-model="formModel.companyId"
  53. size="mediumn"
  54. ></el-select-tree>
  55. </el-form-item>
  56. <el-form-item label="分配角色" prop="roles">
  57. <el-select
  58. v-model="formModel.roles"
  59. filterable
  60. multiple
  61. placeholder="请选择"
  62. style="width: 300px"
  63. >
  64. <el-option
  65. v-for="role in roleList"
  66. :key="role.id"
  67. :label="role.description"
  68. :value="role.id"
  69. ></el-option>
  70. </el-select>
  71. <!-- <el-transfer v-model="formModel.roles" :data="roleList"
  72. :props="{key: 'id',label: 'description'}" :titles="['所有角色','已分配角色']"></el-transfer>-->
  73. </el-form-item>
  74. </el-form>
  75. </div>
  76. <span slot="footer" class="dialog-footer">
  77. <el-button @click="closeDialog">取 消</el-button>
  78. <el-button type="primary" @click="handleSubmit" :loading="submitting"
  79. >确 定</el-button
  80. >
  81. </span>
  82. </el-dialog>
  83. </template>
  84. <script>
  85. import Constant from "@/constant";
  86. import userApi from "@/api/sys/user";
  87. import roleApi from "@/api/sys/role";
  88. import companyApi from "@/api/base/company";
  89. import SelectTree from "@/components/SelectTree";
  90. export default {
  91. props: ["businessKey", "title","companyResult"],
  92. data() {
  93. return {
  94. showPwd: true,
  95. ruleValidate: {
  96. userName: [
  97. { required: true, message: "用户名不能为空", trigger: "blur" },
  98. ],
  99. realName: [
  100. { required: true, message: "真实名称不能为空", trigger: "blur" },
  101. ],
  102. companyId: [
  103. { required: true, message: "单位不能为空", trigger: "blur" },
  104. ],
  105. password: [
  106. { required: true, message: "密码不能为空", trigger: "blur" },
  107. ],
  108. roles: [
  109. { required: true, message: "分配角色不能为空", trigger: "blur" },
  110. ],
  111. },
  112. roleList: [],
  113. formModel: {},
  114. showDialog: true,
  115. loading: false,
  116. submitting: false,
  117. companyProps: {
  118. value: "id",
  119. label: "name",
  120. },
  121. };
  122. },
  123. methods: {
  124. closeDialog() {
  125. this.$emit("close", false);
  126. },
  127. handleSubmit() {
  128. var self = this;
  129. this.$refs["form"].validate((valid) => {
  130. if (valid) {
  131. (function () {
  132. var id = self.formModel.id;
  133. if (id == null || id.length == 0) {
  134. return userApi.add(self.formModel);
  135. } else {
  136. self.formModel.password = null;
  137. return userApi.update(self.formModel);
  138. }
  139. })().then(function (response) {
  140. var jsonData = response.data;
  141. if (jsonData.result) {
  142. self.$message({
  143. message: "保存成功!",
  144. type: "success",
  145. });
  146. self.$emit("close", true);
  147. } else {
  148. self.$message({
  149. message: jsonData.message + "",
  150. type: "warning",
  151. });
  152. self.$emit("close", false);
  153. }
  154. });
  155. }
  156. });
  157. },
  158. },
  159. async mounted() {
  160. var self = this;
  161. self.loading = true;
  162. // 不需要先加载列表值,再加载选中值了
  163. await roleApi.selectAll().then((response) => {
  164. this.roleList = response.data.data;
  165. });
  166. (function () {
  167. if (self.businessKey != null && self.businessKey.length > 0) {
  168. self.ruleValidate.password[0].required = false;
  169. return userApi.edit(self.businessKey);
  170. } else {
  171. self.ruleValidate.password[0].required = true;
  172. return userApi.create();
  173. }
  174. })()
  175. .then((response) => {
  176. var jsonData = response.data;
  177. if (jsonData.result) {
  178. self.formModel = jsonData.data;
  179. self.showModal = true;
  180. } else {
  181. self.$message.error(jsonData.message + "");
  182. }
  183. self.loading = false;
  184. })
  185. .catch((error) => {
  186. self.$message.error(error + "");
  187. self.loading = false;
  188. });
  189. },
  190. components: {
  191. "el-select-tree": SelectTree
  192. },
  193. };
  194. </script>