organization.vue 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. <template>
  2. <div class="relics-layout">
  3. <div class="relics-header">
  4. <div class="search">
  5. <el-form label-width="100px" inline>
  6. <el-form-item label="单位名称">
  7. <el-input v-model="pageProps.orgName" clearable style="width: 250px" placeholder="请输入" />
  8. </el-form-item>
  9. <el-form-item label="类型">
  10. <el-select style="width: 250px" v-model="pageProps.type" clearable>
  11. <el-option :value="Number(key)" :label="type" v-for="(type, key) in OrganizationTypeDesc" />
  12. </el-select>
  13. </el-form-item>
  14. <el-form-item>
  15. <el-button type="primary" @click="refresh">查询</el-button>
  16. <el-button type="primary" plain @click="pageProps = { ...initProps }">
  17. 重置
  18. </el-button>
  19. <el-button type="primary" @click="addHandler"> 新增单位 </el-button>
  20. </el-form-item>
  21. </el-form>
  22. </div>
  23. </div>
  24. <div class="relics-content">
  25. <el-table default-expand-all row-key="orgId" :data="relicsArray" border>
  26. <el-table-column label="单位名称" prop="orgName"></el-table-column>
  27. <el-table-column label="类型" prop="type" v-slot:default="{ row }: { row: OrganizationType }">
  28. {{ row.type ? OrganizationTypeDesc[row.type] : '' }}
  29. </el-table-column>
  30. <el-table-column label="单位账号" prop="userName"></el-table-column>
  31. <el-table-column label="单位联系人" prop="contact"></el-table-column>
  32. <el-table-column label="创建时间" prop="updateTime" v-slot:default="{ row }">
  33. {{ row.updateTime && row.updateTime.substr(0, 16) }}
  34. </el-table-column>
  35. <el-table-column label="创建人" prop="createByName"></el-table-column>
  36. <el-table-column label="操作" width="100px" fixed="right">
  37. <template #default="{ row }: { row: OrganizationType }">
  38. <el-button link type="primary" @click="editHandler(row)" size="small">
  39. 编辑
  40. </el-button>
  41. <el-button link type="danger" @click="delOrganization(row)" size="small">
  42. 删除
  43. </el-button>
  44. </template>
  45. </el-table-column>
  46. </el-table>
  47. </div>
  48. <div class="pag-layout">
  49. <el-pagination background layout="total, prev, pager, next, sizes, jumper" v-model:page-size="pageProps.pageSize"
  50. :page-sizes="[10, 20, 50, 100]" :total="total" @current-change="(data: number) => pageProps.pageNum = data"
  51. :current-page="pageProps.pageNum" />
  52. </div>
  53. </div>
  54. </template>
  55. <script lang="ts" setup>
  56. import { onActivated, ref, watch } from "vue";
  57. import {
  58. getOrgListFetch,
  59. addOrgFetch,
  60. delOrgFetch,
  61. alterOrgFetch,
  62. PageProps,
  63. } from "@/request";
  64. import type { OrganizationType } from "@/request/organization";
  65. import { OrganizationTypeDesc } from '@/store/organization'
  66. import { organizationAdd, organizationEdit } from "./quisk";
  67. import { debounce, parseTree } from "@/util";
  68. import { ElMessageBox } from "element-plus";
  69. const initProps: PageProps<Partial<OrganizationType>> = {
  70. pageNum: 1,
  71. pageSize: 10,
  72. orgName: '',
  73. orgId: undefined,
  74. type: undefined,
  75. };
  76. const pageProps = ref({ ...initProps });
  77. const total = ref<number>(0);
  78. const relicsArray = ref<any[]>([]);
  79. // 1省级 2市级 3县级 4服务商
  80. const refresh = debounce(async () => {
  81. const data = await getOrgListFetch(pageProps.value);
  82. total.value = data.total;
  83. // console.log('parseTree', parseTree(data.records, 'orgId'))
  84. relicsArray.value = parseTree(data.records, 'orgId');
  85. });
  86. watch(pageProps, refresh, { deep: true, immediate: true });
  87. onActivated(refresh);
  88. const addHandler = async () => {
  89. await organizationAdd({ submit: addOrgFetch });
  90. await refresh();
  91. };
  92. const editHandler = async (org: OrganizationType) => {
  93. await organizationEdit({ org: org, submit: alterOrgFetch });
  94. await refresh();
  95. };
  96. const delOrganization = async (org: OrganizationType) => {
  97. console.log('org', org)
  98. const ok = await ElMessageBox.confirm("确定要删除吗", {
  99. type: "warning",
  100. });
  101. if (ok) {
  102. await delOrgFetch({
  103. orgId: org.orgId,
  104. orgName: org.orgName,
  105. type: org.type,
  106. });
  107. await refresh();
  108. }
  109. };
  110. </script>
  111. <style scoped lang="scss">
  112. .relics-layout {
  113. height: 100%;
  114. overflow-y: auto;
  115. padding: 30px;
  116. }
  117. .pag-layout {
  118. margin-top: 20px;
  119. display: flex;
  120. justify-content: center;
  121. }
  122. .relics-header {
  123. display: flex;
  124. align-items: center;
  125. margin-bottom: 20px;
  126. .search {
  127. flex: 1;
  128. }
  129. .relics-oper {
  130. flex: 0 0 100px;
  131. text-align: right;
  132. }
  133. }
  134. </style>