ModifyUser.vue 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312
  1. <template>
  2. <el-dialog
  3. class="modify-user"
  4. :visible.sync="modalIsShow"
  5. :title="title"
  6. top="10vh"
  7. width="540px"
  8. :close-on-click-modal="false"
  9. :close-on-press-escape="false"
  10. append-to-body
  11. @open="visibleChange"
  12. >
  13. <el-form
  14. ref="modalFormComp"
  15. :model="modalForm"
  16. :rules="rules"
  17. label-width="100px"
  18. >
  19. <el-form-item prop="loginName" label="用户名/工号:">
  20. <el-input
  21. v-model.trim="modalForm.loginName"
  22. placeholder="请输入用户名/工号"
  23. :disabled="isEdit"
  24. ></el-input>
  25. </el-form-item>
  26. <el-form-item prop="realName" label="姓名:">
  27. <el-input
  28. v-model.trim="modalForm.realName"
  29. placeholder="请输入姓名"
  30. clearable
  31. ></el-input>
  32. </el-form-item>
  33. <!-- <el-form-item prop="code" label="工号:">
  34. <el-input
  35. v-model.trim="modalForm.code"
  36. placeholder="请输入工号"
  37. clearable
  38. ></el-input>
  39. </el-form-item> -->
  40. <el-form-item prop="mobileNumber" label="手机号:">
  41. <el-input
  42. v-model.trim="modalForm.mobileNumber"
  43. placeholder="请输入手机号"
  44. clearable
  45. ></el-input>
  46. </el-form-item>
  47. <el-form-item prop="roleIds" label="角色:">
  48. <el-select
  49. style="width: 100%"
  50. v-model="modalForm.roleIds"
  51. placeholder="请选择角色"
  52. multiple
  53. filterable
  54. >
  55. <el-option
  56. v-for="item in roles"
  57. :key="item.id"
  58. :value="item.id"
  59. :label="item.name"
  60. >
  61. </el-option>
  62. </el-select>
  63. </el-form-item>
  64. <el-form-item prop="orgId" label="所属机构:" label-position="top">
  65. <select-orgs
  66. ref="SelectOrgs"
  67. v-model="modalForm.orgId"
  68. :multiple="false"
  69. check-strictly
  70. @change="orgChange"
  71. ></select-orgs>
  72. </el-form-item>
  73. <el-form-item
  74. prop="allowManualCard"
  75. label="是否允许新增卡格式:"
  76. label-width="160px"
  77. >
  78. <el-radio-group v-model="modalForm.allowManualCard">
  79. <el-radio
  80. v-for="(val, key) in BOOLEAN_TYPE"
  81. :key="key"
  82. :label="key * 1"
  83. >{{ val }}</el-radio
  84. >
  85. </el-radio-group>
  86. </el-form-item>
  87. </el-form>
  88. <div slot="footer">
  89. <el-button type="primary" :disabled="isSubmit" @click="submit"
  90. >确认</el-button
  91. >
  92. <el-button @click="cancel">取消</el-button>
  93. </div>
  94. </el-dialog>
  95. </template>
  96. <script>
  97. import { updateUser } from "../api";
  98. // import { logout } from "../../login/api";
  99. // import { phone } from "@/plugins/formRules";
  100. import SelectOrgs from "./SelectOrgs";
  101. import { SYS_ADMIN_NAME, BOOLEAN_TYPE } from "@/constants/enumerate";
  102. const initModalForm = {
  103. id: "",
  104. loginName: "",
  105. realName: "",
  106. // code: "",
  107. mobileNumber: "",
  108. allowManualCard: 0,
  109. roleIds: [],
  110. courseIds: [],
  111. orgId: [],
  112. };
  113. export default {
  114. name: "modify-user",
  115. components: { SelectOrgs },
  116. props: {
  117. instance: {
  118. type: Object,
  119. default() {
  120. return {};
  121. },
  122. },
  123. roles: {
  124. type: Array,
  125. default() {
  126. return [];
  127. },
  128. },
  129. },
  130. computed: {
  131. isEdit() {
  132. return !!this.instance.id;
  133. },
  134. title() {
  135. return (this.isEdit ? "编辑" : "新增") + "用户";
  136. },
  137. },
  138. data() {
  139. const roleIdsValidator = (rule, value, callback) => {
  140. if (!value || !value.length) {
  141. callback(new Error("请选择角色"));
  142. } else {
  143. callback();
  144. }
  145. };
  146. const orgIdValidator = (rule, value, callback) => {
  147. if (!value || !value.length) {
  148. callback(new Error("请选择所属机构"));
  149. } else {
  150. callback();
  151. }
  152. };
  153. const mobileNumberValidator = (rule, value, callback) => {
  154. if (!value) {
  155. return callback();
  156. }
  157. if (/^1\d{10}$/.test(value)) {
  158. return callback();
  159. } else {
  160. return callback(new Error("请输入合适的手机号码"));
  161. }
  162. };
  163. const IS_SUPER_ADMIN =
  164. this.$ls.get("user", { loginName: "" }).loginName === SYS_ADMIN_NAME;
  165. return {
  166. modalIsShow: false,
  167. isSubmit: false,
  168. modalForm: {},
  169. rules: {
  170. mobileNumber: [
  171. {
  172. required: false,
  173. validator: mobileNumberValidator,
  174. trigger: "change",
  175. },
  176. ],
  177. loginName: [
  178. {
  179. required: true,
  180. message: "请输入用户名",
  181. trigger: "change",
  182. },
  183. {
  184. max: 50,
  185. message: "用户名不能超过50",
  186. trigger: "change",
  187. },
  188. ],
  189. realName: [
  190. {
  191. required: true,
  192. message: "请输入姓名",
  193. trigger: "change",
  194. },
  195. {
  196. max: 50,
  197. message: "姓名不能超过50",
  198. trigger: "change",
  199. },
  200. ],
  201. // code: [
  202. // {
  203. // required: true,
  204. // message: "请输入工号",
  205. // trigger: "change",
  206. // },
  207. // {
  208. // max: 50,
  209. // message: "工号不能超过50",
  210. // trigger: "change",
  211. // },
  212. // ],
  213. roleIds: [
  214. {
  215. required: true,
  216. validator: roleIdsValidator,
  217. trigger: "change",
  218. },
  219. ],
  220. orgId: [
  221. {
  222. required: true,
  223. validator: orgIdValidator,
  224. trigger: "change",
  225. },
  226. ],
  227. },
  228. user: {},
  229. courses: [],
  230. roleList: [],
  231. IS_SUPER_ADMIN,
  232. BOOLEAN_TYPE,
  233. };
  234. },
  235. methods: {
  236. initData(val) {
  237. if (val.id) {
  238. this.modalForm = this.$objAssign(initModalForm, val);
  239. this.modalForm.roleIds = val.roles.map((item) => item.id);
  240. this.modalForm.orgId = [val.orgId];
  241. this.modalForm.allowManualCard = val.allowManualCard ? 1 : 0;
  242. } else {
  243. this.modalForm = { ...initModalForm };
  244. this.$nextTick(() => {
  245. this.$refs.modalFormComp.clearValidate();
  246. });
  247. }
  248. },
  249. visibleChange() {
  250. this.initData(this.instance);
  251. },
  252. cancel() {
  253. this.modalIsShow = false;
  254. },
  255. open() {
  256. this.modalIsShow = true;
  257. },
  258. orgChange() {
  259. this.$nextTick(() => {
  260. this.$refs.modalFormComp.validateField("orgId");
  261. });
  262. },
  263. async submit() {
  264. const valid = await this.$refs.modalFormComp.validate().catch(() => {});
  265. if (!valid) return;
  266. if (this.isSubmit) return;
  267. this.isSubmit = true;
  268. const datas = { ...this.modalForm };
  269. datas.allowManualCard = !!datas.allowManualCard;
  270. datas.orgId = datas.orgId.join();
  271. const data = await updateUser(datas).catch(() => {});
  272. this.isSubmit = false;
  273. if (!data) return;
  274. this.$message.success("修改成功!");
  275. this.cancel();
  276. this.$emit("modified");
  277. // if (!this.isEdit) {
  278. // this.$emit("modified");
  279. // return;
  280. // }
  281. // // 自己把自己的角色改了之后要重新登录,重新获取权限
  282. // const oldRoleIds = this.instance.roles
  283. // .map(item => item.id)
  284. // .sort((a, b) => a - b)
  285. // .join();
  286. // const newRoleIds = datas.roleIds.sort((a, b) => a - b).join();
  287. // if (
  288. // oldRoleIds !== newRoleIds &&
  289. // this.$ls.get("user").id === this.instance.id
  290. // ) {
  291. // await logout();
  292. // this.$ls.clear();
  293. // this.$router.push({ name: "Login" });
  294. // this.$message.info("您的权限已经变更,请重新登录系统!");
  295. // } else {
  296. // this.$emit("modified");
  297. // }
  298. },
  299. },
  300. };
  301. </script>