editUser.vue 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. <template>
  2. <div class="system-edit-user-container">
  3. <el-dialog v-model="isShowDialog" width="769px" draggable title="修改用户">
  4. <el-form :model="ruleForm" label-width="90px" ref="ruleFormRef">
  5. <el-row :gutter="35">
  6. <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
  7. <el-form-item label="上级组织" prop="parentId" :rules="[{ required: false, message: '请选择上级组织', trigger: 'change' }]">
  8. <el-cascader
  9. :options="OrgData"
  10. :props="{ checkStrictly: true, value: 'id', label: 'orgName',emitPath:false }"
  11. placeholder="请选择上级组织"
  12. clearable
  13. class="w100"
  14. v-model="ruleForm.orgId"
  15. ref="cascaderRef" @change="getselKnowledgeList"
  16. >
  17. <template #default="{ node, data }">
  18. <span>{{ data.orgName }}</span>
  19. <span v-if="!node.isLeaf"> ({{ data.children.length }}) </span>
  20. </template>
  21. </el-cascader>
  22. </el-form-item>
  23. </el-col>
  24. <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
  25. <el-form-item label="默认分机" prop="defaultTelNo" :rules="[{required: false,message: '请选择默认分机',trigger: 'change'}]">
  26. <el-select v-model="ruleForm.defaultTelNo" placeholder="请选择默认分机" class="w100">
  27. <el-option
  28. v-for="item in telsList"
  29. :key="item.no"
  30. :label="item.no"
  31. :value="item.no"
  32. />
  33. </el-select>
  34. </el-form-item>
  35. </el-col>
  36. <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
  37. <el-form-item label="手机号" prop="phoneNo" :rules="[{ required: true, message: '请输入手机号', trigger: 'blur' },{pattern: /^((12\d)|(13\d)|(14[5|7])|(15([0-3]|[5-9]))|(18[0|1,5-9]))\d{8}$/, message: '手机号格式错误'}]">
  38. <el-input v-model="ruleForm.phoneNo" placeholder="请输入手机号" clearable></el-input>
  39. </el-form-item>
  40. </el-col>
  41. <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
  42. <el-form-item label="姓名" prop="name" :rules="[{required: true,message: '请输入用户姓名',trigger: 'blur'}]">
  43. <el-input v-model="ruleForm.name" placeholder="请输入用户姓名" clearable></el-input>
  44. </el-form-item>
  45. </el-col>
  46. <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
  47. <el-form-item label="用户昵称" prop="userName" :rules="[{required: false,message: '请输入用户昵称',trigger: 'blur'}]">
  48. <el-input v-model="ruleForm.userName" placeholder="请输入用户昵称" clearable></el-input>
  49. </el-form-item>
  50. </el-col>
  51. </el-row>
  52. </el-form>
  53. <template #footer>
  54. <span class="dialog-footer">
  55. <el-button @click="onCancel">取 消</el-button>
  56. <el-button type="primary" @click="onSubmit(ruleFormRef)" :loading="loading">确 定</el-button>
  57. </span>
  58. </template>
  59. </el-dialog>
  60. </div>
  61. </template>
  62. <script lang="ts">
  63. import { reactive, toRefs, defineComponent,ref,getCurrentInstance } from 'vue';
  64. import type { FormInstance } from 'element-plus';
  65. import { ElMessage } from 'element-plus';
  66. import { throttle } from '/@/utils/tools';
  67. import { updateUser,getcanuseorg } from '/@/api/system/user';
  68. import { getTelsList } from '/@/api/deviceManagement/tels';
  69. // 定义接口来定义对象的类型
  70. interface UserState {
  71. isShowDialog: boolean;
  72. ruleForm: {
  73. phoneNo: string;
  74. name: string;
  75. userName: string;
  76. orgId:string;
  77. orgCode:string;
  78. staffNo:string;
  79. defaultTelNo:string
  80. };
  81. OrgData:Array<any>;
  82. telsList:Array<any>;
  83. }
  84. export default defineComponent({
  85. name: 'systemEditUser',
  86. setup(props:any, {emit}:any) {
  87. const state = reactive<UserState>({
  88. isShowDialog: false,
  89. ruleForm: {
  90. phoneNo: '', // 手机号
  91. name: '', // 姓名
  92. userName: '', // 用户昵称
  93. orgId:'', // 组织id
  94. orgCode:'', //组织code
  95. staffNo:'', //工号
  96. defaultTelNo:'' ,//默认分机
  97. },
  98. OrgData:[], //可用组织
  99. telsList:[] // 所有分机
  100. });
  101. const ruleFormRef = ref<FormInstance>()
  102. const { proxy } = <any>getCurrentInstance()
  103. let loading = ref<boolean>(false);
  104. // 打开弹窗
  105. const openDialog = (row: any) => {
  106. state.ruleForm = JSON.parse(JSON.stringify(row));
  107. getOrgListFn();
  108. getTelsListFn();
  109. state.isShowDialog = true;
  110. };
  111. // 关闭弹窗
  112. const closeDialog = () => {
  113. state.isShowDialog = false;
  114. };
  115. // 取消
  116. const onCancel = () => {
  117. closeDialog();
  118. };
  119. // 获取可用组织
  120. const getOrgListFn = ()=>{
  121. getcanuseorg().then((res:any)=>{
  122. state.OrgData = res?.result ?? [];
  123. })
  124. }
  125. // 获取选择组织name值
  126. const getselKnowledgeList = ()=>{
  127. let currentNode = proxy.$refs.cascaderRef.getCheckedNodes();
  128. state.ruleForm.orgCode = currentNode[0].data.orgCode;
  129. }
  130. // 获取分机列表
  131. const getTelsListFn = ()=>{
  132. getTelsList().then((res:any)=>{
  133. state.telsList = res?.result ?? [];
  134. })
  135. }
  136. // 新增
  137. const onSubmit = throttle( async(formEl: FormInstance | undefined) => {
  138. if (!formEl) return
  139. await formEl.validate((valid) => {
  140. if (valid) {
  141. loading.value = true;
  142. updateUser(state.ruleForm).then(()=>{
  143. ElMessage({
  144. message: '修改成功',
  145. type: 'success',
  146. })
  147. loading.value = false;
  148. closeDialog();
  149. emit("updateList")
  150. }).catch(()=>{ // 新增失败
  151. loading.value = false;
  152. closeDialog();
  153. })
  154. } else {
  155. // console.log('error submit!', fields)
  156. }
  157. })
  158. },1000);
  159. return {
  160. openDialog,
  161. closeDialog,
  162. onCancel,
  163. onSubmit,
  164. ruleFormRef,
  165. loading,
  166. getselKnowledgeList,
  167. ...toRefs(state),
  168. };
  169. },
  170. });
  171. </script>