addTeam.vue 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206
  1. <template>
  2. <div class="addTeam">
  3. <el-form ref="AddTeamRef" :model="teamForm" :rules="teamRules" label-width="100">
  4. <el-form-item label="团队名称" prop="name">
  5. <el-input v-model="teamForm.name" placeholder="请输入团队名称"></el-input>
  6. </el-form-item>
  7. <el-form-item label="所属机构" prop="deptId">
  8. <el-cascader
  9. clearable
  10. v-model="teamForm.deptId"
  11. :options="option"
  12. :props="cascaderProps"
  13. style="width: 100%"
  14. placeholder="选择机构"
  15. @change="deptIdChange"
  16. ></el-cascader>
  17. </el-form-item>
  18. <el-form-item label="管理人" prop="managerId">
  19. <el-select v-model="teamForm.managerId" placeholder="选择管理人">
  20. <el-option v-for="item in userList" :key="item.id" :value="item.id" :label="item.name"></el-option>
  21. </el-select>
  22. </el-form-item>
  23. <el-form-item label="管理人工号" prop="managerId">
  24. <el-input disabled v-model="teamForm.managerId"></el-input>
  25. </el-form-item>
  26. <el-form-item label="描述" prop="describeInformation">
  27. <el-input type="textarea" maxlength="500" placeholder="请输入" v-model="teamForm.describeInformation"></el-input>
  28. </el-form-item>
  29. <div style="display: flex; justify-content: flex-end">
  30. <el-button class="border-[#0083FF] color-[#0083FF]" plain @click="onSubmit(AddTeamRef, 0)">取消</el-button>
  31. <el-button type="primary" @click="onSubmit(AddTeamRef, 1)">确定</el-button>
  32. </div>
  33. </el-form>
  34. </div>
  35. </template>
  36. <script setup lang="ts">
  37. import { ref, defineEmits, onMounted, defineProps, defineExpose } from 'vue'
  38. import type { FormRules, FormInstance } from 'element-plus'
  39. import type { AddTeamProps } from '@/api/modules/team.ts'
  40. import { ElMessage } from "element-plus";
  41. import api from "@/api";
  42. interface EditDataProps extends AddTeamProps {
  43. id: string
  44. }
  45. let emits = defineEmits(['closeDialog'])
  46. // 表单
  47. const AddTeamRef = ref<FormInstance>()
  48. let teamForm = ref<AddTeamProps>({
  49. name: '',
  50. deptId: [],
  51. managerId: '',
  52. describeInformation: '',
  53. attribute: 1
  54. })
  55. let teamRules = ref<FormRules>({
  56. name: [
  57. { required: true, trigger: "blur", message: "请填写团队名称" }
  58. ],
  59. deptId: [
  60. { required: true, trigger: "change", message: "请选择机构" }
  61. ],
  62. managerId: [
  63. { required: true, trigger: "change", message: "请选择管理人" }
  64. ]
  65. })
  66. // 编辑初始化数据
  67. let isEdit = ref(false)
  68. const initEdit = (data, bool, type) => {
  69. isEdit.value = bool
  70. teamForm.value = data
  71. teamForm.value.attribute = type
  72. institutionList()
  73. getUser(data.deptId)
  74. }
  75. // 机构
  76. let option = ref([])
  77. const cascaderProps = {
  78. value: 'id',
  79. label: 'name',
  80. children: 'children',
  81. checkStrictly: true,
  82. }
  83. // 获取机构数据
  84. const institutionList = () => {
  85. api.institutionApi.institutionList({ name: '', system: '' }).then(res => {
  86. if(res?.code == 200) {
  87. option.value = res.data
  88. } else {
  89. ElMessage({
  90. message: res.msg,
  91. type: 'warning'
  92. })
  93. }
  94. })
  95. }
  96. const deptIdChange = (e) => {
  97. let id = e?e[e.length - 1]: ''
  98. getUser(id)
  99. }
  100. // 管理人
  101. let userList = ref([])
  102. const getUser = (id) => {
  103. api.operationApi.getUser({
  104. id: id,
  105. typeAttr:2,
  106. }).then(res => {
  107. if(res?.code == 200) {
  108. userList.value = res.data
  109. } else {
  110. ElMessage({
  111. message: res.msg,
  112. type: 'warning'
  113. })
  114. }
  115. })
  116. }
  117. // 提交/取消
  118. const onSubmit = async (AddTeamRef: FormInstance, type) => {
  119. if(!AddTeamRef) {
  120. emits('closeDialog', '取消')
  121. isEdit.value = false
  122. AddTeamRef.resetFields()
  123. return
  124. }
  125. if(type) {
  126. await AddTeamRef.validate((valid) => {
  127. if(valid) {
  128. let formData = {...teamForm.value}
  129. if(typeof teamForm.value.deptId == 'string') {
  130. teamForm.value.deptId = [teamForm.value.deptId]
  131. }
  132. formData.deptId = teamForm.value.deptId[teamForm.value.deptId.length - 1]
  133. formData.systemCode = localStorage.getItem('login_system')
  134. if(isEdit.value) {
  135. api.teamApi.updateTeam(formData).then(res => {
  136. if(res.code == 200) {
  137. ElMessage({
  138. message: res.data.msg,
  139. type: 'success'
  140. })
  141. } else {
  142. ElMessage({
  143. message: res.data.msg,
  144. type: 'warning'
  145. })
  146. }
  147. emits('closeDialog', '确认')
  148. isEdit.value = false
  149. AddTeamRef.resetFields()
  150. })
  151. } else {
  152. api.teamApi.addTeam(formData).then(res => {
  153. if(res.code == 200) {
  154. ElMessage({
  155. message: res.msg,
  156. type: 'success'
  157. })
  158. } else {
  159. ElMessage({
  160. message: res.msg,
  161. type: 'warning'
  162. })
  163. }
  164. emits('closeDialog', '确认')
  165. isEdit.value = false
  166. AddTeamRef.resetFields()
  167. })
  168. }
  169. } else {
  170. ElMessage({
  171. message: '请正确填写相关信息!',
  172. type: 'warning'
  173. })
  174. }
  175. })
  176. } else {
  177. emits('closeDialog', '取消')
  178. isEdit.value = false
  179. AddTeamRef.resetFields()
  180. }
  181. }
  182. onMounted(() => {
  183. institutionList()
  184. })
  185. defineExpose({
  186. initEdit,
  187. teamForm
  188. })
  189. </script>
  190. <style scoped lang="scss">
  191. </style>