org-user-edit.vue 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284
  1. <!-- 用户编辑弹窗 -->
  2. <template>
  3. <ele-modal
  4. width="800px"
  5. :visible="visible"
  6. :close-on-click-modal="true"
  7. custom-class="ele-dialog-form"
  8. :title="isUpdate ? '修改用户' : '添加用户'"
  9. @update:visible="updateVisible"
  10. >
  11. <el-form ref="form" :model="form" :rules="rules" label-width="82px">
  12. <el-row :gutter="15">
  13. <el-col v-bind="styleResponsive ? { sm: 12 } : { span: 12 }">
  14. <el-form-item label="所属机构:">
  15. <org-select
  16. :data="organizationList"
  17. placeholder="请选择所属机构"
  18. v-model="form.groupId"
  19. />
  20. </el-form-item>
  21. <el-form-item label="用户账号:" prop="accountId">
  22. <el-select
  23. clearable
  24. class="ele-block"
  25. v-model="form.accountId"
  26. placeholder="请选择用户账号"
  27. >
  28. <el-option
  29. v-for="item in accountList"
  30. :key="item.id"
  31. :label="item.loginName"
  32. :value="item.id">
  33. </el-option>
  34. </el-select>
  35. </el-form-item>
  36. <el-form-item label="性别:" prop="sex">
  37. <el-select
  38. clearable
  39. class="ele-block"
  40. v-model="form.sex"
  41. placeholder="请选择性别"
  42. >
  43. <el-option label="男" :value="1" />
  44. <el-option label="女" :value="2" />
  45. </el-select>
  46. </el-form-item>
  47. <el-form-item label="籍贯:" prop="address">
  48. <regions-select style="width: 100%;" v-model="form.address" placeholder="请选择省市区"/>
  49. </el-form-item>
  50. <el-form-item label="生日:" prop="age">
  51. <el-date-picker style="width: 100%;"
  52. clearable
  53. v-model="form.birthday"
  54. type="date"
  55. placeholder="请选择日期">
  56. </el-date-picker>
  57. </el-form-item>
  58. <el-form-item label="毕业院校:" prop="school">
  59. <el-input
  60. clearable
  61. :maxlength="100"
  62. v-model="form.school"
  63. placeholder="请输入毕业院校"
  64. />
  65. </el-form-item>
  66. <el-form-item label="微信号:" prop="wxId">
  67. <el-input
  68. clearable
  69. :maxlength="100"
  70. v-model="form.wxId"
  71. placeholder="请输入微信号"
  72. />
  73. </el-form-item>
  74. </el-col>
  75. <el-col v-bind="styleResponsive ? { sm: 12 } : { span: 12 }">
  76. <el-form-item label="工号:" prop="jobNumber">
  77. <el-input
  78. clearable
  79. :maxlength="100"
  80. v-model="form.jobNumber"
  81. placeholder="请输入工号"
  82. />
  83. </el-form-item>
  84. <el-form-item label="姓名:" prop="name">
  85. <el-input
  86. clearable
  87. :maxlength="20"
  88. v-model="form.name"
  89. placeholder="请输入姓名"
  90. />
  91. </el-form-item>
  92. <el-form-item label="员工状态:" prop="status">
  93. <el-select
  94. clearable
  95. class="ele-block"
  96. v-model="form.status"
  97. placeholder="请选择员工状态"
  98. >
  99. <el-option
  100. v-for="item in statusOptions"
  101. :key="item.value"
  102. :label="item.label"
  103. :value="item.value">
  104. </el-option>
  105. </el-select>
  106. </el-form-item>
  107. <el-form-item label="手机号:" prop="phone">
  108. <el-input
  109. clearable
  110. :maxlength="11"
  111. v-model="form.phone"
  112. placeholder="请输入手机号"
  113. />
  114. </el-form-item>
  115. <el-form-item label="邮箱:" prop="email">
  116. <el-input
  117. clearable
  118. :maxlength="100"
  119. v-model="form.email"
  120. placeholder="请输入邮箱"
  121. />
  122. </el-form-item>
  123. <el-form-item label="年龄:" prop="age">
  124. <el-input
  125. clearable
  126. :maxlength="100"
  127. v-model="form.age"
  128. placeholder="请输入年龄"
  129. />
  130. </el-form-item>
  131. <el-form-item label="岗位名称:" prop="postName">
  132. <el-input
  133. clearable
  134. :maxlength="100"
  135. v-model="form.postName"
  136. placeholder="请输入岗位名称"
  137. />
  138. </el-form-item>
  139. </el-col>
  140. </el-row>
  141. </el-form>
  142. <template v-slot:footer>
  143. <el-button @click="updateVisible(false)">取消</el-button>
  144. <el-button type="primary" :loading="loading" @click="save">
  145. 保存
  146. </el-button>
  147. </template>
  148. </ele-modal>
  149. </template>
  150. <script>
  151. import { emailReg, phoneReg } from 'ele-admin';
  152. import OrgSelect from './org-select.vue';
  153. import RoleSelect from '@/views/system/user/components/role-select.vue';
  154. import RegionsSelect from '@/components/RegionsSelect/index.vue';
  155. import { addUser, updateUser, checkExistence } from '@/api/system/user';
  156. import { pageUsers } from '@/api/system/user';
  157. export default {
  158. components: { OrgSelect, RoleSelect , RegionsSelect },
  159. props: {
  160. // 弹窗是否打开
  161. visible: Boolean,
  162. // 修改回显的数据
  163. data: Object,
  164. // 全部机构
  165. organizationList: Array,
  166. // 机构id
  167. organizationId: [Number,String]
  168. },
  169. data() {
  170. const defaultForm = {
  171. id: null,
  172. groupId: null,
  173. name: '',
  174. sex: null,
  175. email: '',
  176. phone: '',
  177. age:'',
  178. accountId:''
  179. };
  180. return {
  181. defaultForm,
  182. // 表单数据
  183. form: { ...defaultForm },
  184. // 表单验证规则
  185. rules: {
  186. name: [{ required: true, message: '请输入姓名',trigger: 'blur'}],
  187. accountId: [{ required: true, message: '请选择用户账号',trigger: 'blur'}],
  188. sex: [{required: true, message: '请选择性别',trigger: 'blur'}],
  189. email: [ { pattern: emailReg,message: '邮箱格式不正确',trigger: 'blur'}],
  190. phone: [ { pattern: phoneReg,message: '手机号格式不正确',trigger: 'blur'}],
  191. jobNumber: [{ required: true, message: '请输入工号',trigger: 'blur'}],
  192. status:[{ required: true, message: '请选择员工状态',trigger: 'blur'}]
  193. },
  194. // 提交状态
  195. loading: false,
  196. // 是否是修改
  197. isUpdate: false,
  198. city: [],
  199. statusOptions:[
  200. {value:1,label:'全职'},
  201. {value:2,label:'兼职'},
  202. {value:3,label:'实习'},
  203. {value:4,label:'正式'},
  204. {value:5,label:'试用'},
  205. {value:6,label:'离职'}
  206. ],
  207. accountList:[]
  208. };
  209. },
  210. computed: {
  211. // 是否开启响应式布局
  212. styleResponsive() {
  213. return this.$store.state.theme.styleResponsive;
  214. }
  215. },
  216. methods: {
  217. getAccountList(){
  218. const params = {
  219. pageNum:1,
  220. size:99999999
  221. }
  222. pageUsers(params).then(res=>{
  223. this.accountList = res.list
  224. })
  225. },
  226. /* 保存编辑 */
  227. save() {
  228. this.$refs.form.validate((valid) => {
  229. if (!valid) {
  230. return false;
  231. }
  232. this.loading = true;
  233. const data = {
  234. ...this.form,
  235. };
  236. console.log('data',data)
  237. return
  238. const saveOrUpdate = this.isUpdate ? updateUser : addUser;
  239. saveOrUpdate(data)
  240. .then((msg) => {
  241. this.loading = false;
  242. this.$message.success(msg);
  243. this.updateVisible(false);
  244. this.$emit('done');
  245. })
  246. .catch((e) => {
  247. this.loading = false;
  248. this.$message.error(e.message);
  249. });
  250. });
  251. },
  252. /* 更新visible */
  253. updateVisible(value) {
  254. this.$emit('update:visible', value);
  255. }
  256. },
  257. watch: {
  258. visible(visible) {
  259. if (visible) {
  260. this.getAccountList()
  261. if (this.data) {
  262. // this.$util.assignObject(this.form, {
  263. // ...this.data,
  264. // password: ''
  265. // });
  266. this.form = {...this.data}
  267. // this.form.address = ["130000","130300","130304"]
  268. this.form.address = "130304"
  269. console.log('this.form',this.form)
  270. this.isUpdate = true;
  271. } else {
  272. this.form.groupId = this.organizationId;
  273. this.isUpdate = false;
  274. }
  275. } else {
  276. this.$refs.form.clearValidate();
  277. this.form = { ...this.defaultForm };
  278. }
  279. }
  280. }
  281. };
  282. </script>