addUser.vue 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. <template>
  2. <div class="system-add-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="name" :rules="[{required: true,message: '请输入账号',trigger: 'blur'}]">
  8. <el-input v-model="ruleForm.name" placeholder="请输入账号" clearable></el-input>
  9. </el-form-item>
  10. </el-col>
  11. <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
  12. <el-form-item label="用户昵称" prop="userName" :rules="[{required: false,message: '请输入用户昵称',trigger: 'blur'}]">
  13. <el-input v-model="ruleForm.userName" placeholder="请输入用户昵称" clearable></el-input>
  14. </el-form-item>
  15. </el-col>
  16. <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
  17. <el-form-item label="手机号" prop="phoneNo" :rules="[{ required: false, message: '请输入手机号', trigger: 'blur' }]">
  18. <el-input v-model="ruleForm.phoneNo" placeholder="请输入手机号" clearable></el-input>
  19. </el-form-item>
  20. </el-col>
  21. <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
  22. <el-form-item label="上级组织" prop="parentId" :rules="[{ required: false, message: '请选择上级组织', trigger: 'change' }]">
  23. <el-cascader
  24. :options="OrgData"
  25. :props="{ checkStrictly: true, value: 'id', label: 'orgName',emitPath:false }"
  26. placeholder="请选择上级组织"
  27. clearable
  28. class="w100"
  29. v-model="ruleForm.orgId"
  30. ref="cascaderRef" @change="getselKnowledgeList"
  31. >
  32. <template #default="{ node, data }">
  33. <span>{{ data.orgName }}</span>
  34. <span v-if="!node.isLeaf"> ({{ data.children.length }}) </span>
  35. </template>
  36. </el-cascader>
  37. </el-form-item>
  38. </el-col>
  39. <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
  40. <el-form-item label="默认分机" prop="defaultTelNo" :rules="[{required: false,message: '请选择默认分机',trigger: 'change'}]">
  41. <el-select v-model="ruleForm.defaultTelNo" placeholder="请选择默认分机" class="w100">
  42. <el-option
  43. v-for="item in telsList"
  44. :key="item.no"
  45. :label="item.no"
  46. :value="item.no"
  47. />
  48. </el-select>
  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()" :loading="loading">确 定</el-button>
  57. </span>
  58. </template>
  59. </el-dialog>
  60. </div>
  61. </template>
  62. <script lang="ts">
  63. import { reactive, toRefs, defineComponent,getCurrentInstance,ref } from 'vue';
  64. import { ElMessage } from 'element-plus';
  65. import { throttle } from '/@/utils/tools';
  66. import { addUser,getcanuseorg } from '/@/api/system/user';
  67. import { getTelsList } from '/@/api/deviceManagement/tels';
  68. // 定义接口来定义对象的类型
  69. interface UserState {
  70. isShowDialog: boolean;
  71. ruleForm: {
  72. phoneNo: '', // 手机号
  73. name: '', // 姓名
  74. userName: '', // 用户昵称
  75. orgId:'', // 组织id
  76. orgCode:'', //组织code
  77. staffNo:'', //工号
  78. defaultTelNo:'' ,//默认分机
  79. };
  80. OrgData:Array<any>;
  81. telsList:Array<any>;
  82. }
  83. export default defineComponent({
  84. name: 'systemAddUser',
  85. setup(props:any, {emit}:any) {
  86. const state = reactive<UserState>({
  87. isShowDialog: false,
  88. ruleForm: {
  89. phoneNo: '', // 手机号
  90. name: '', // 姓名
  91. userName: '', // 用户昵称
  92. orgId:'', // 组织id
  93. orgCode:'', //组织code
  94. staffNo:'', //工号
  95. defaultTelNo:'' ,//默认分机
  96. },
  97. OrgData:[], //可用组织
  98. telsList:[] // 所有分机
  99. });
  100. const { proxy } = <any>getCurrentInstance()
  101. let loading = ref<boolean>(false);
  102. // 打开弹窗
  103. const openDialog = ()=> {
  104. if(proxy.$refs.ruleFormRef){
  105. proxy.$refs.ruleFormRef.resetFields();
  106. }
  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(() => {
  138. proxy.$refs.ruleFormRef.validate((valid: boolean) => {
  139. if (valid) {
  140. loading.value = true;
  141. addUser(state.ruleForm).then(()=>{
  142. ElMessage({
  143. message: '新增成功',
  144. type: 'success',
  145. })
  146. loading.value = false;
  147. closeDialog();
  148. emit("updateList")
  149. }).catch(()=>{ // 新增失败
  150. loading.value = false;
  151. closeDialog();
  152. })
  153. } else {
  154. return false;
  155. }
  156. });
  157. },1000);
  158. return {
  159. openDialog,
  160. closeDialog,
  161. onCancel,
  162. onSubmit,
  163. loading,
  164. getselKnowledgeList,
  165. ...toRefs(state),
  166. };
  167. },
  168. });
  169. </script>