CompanyTableCom.vue 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. <template>
  2. <a-modal
  3. :width="1100"
  4. v-model:visible="visible"
  5. title="已录入企业信息"
  6. :confirm-loading="confirmLoading"
  7. @ok="handleOk"
  8. ok-text="确认"
  9. cancel-text="取消"
  10. :keyboard="false"
  11. :mask-closable="false"
  12. >
  13. <div class="card-search">
  14. <a-form
  15. ref="formRef"
  16. name="advanced_search"
  17. class="ant-advanced-search-form"
  18. :model="searchParams"
  19. >
  20. <a-row :gutter="24">
  21. <a-col :span="6">
  22. <a-form-item label="企业名称" :label-col="{ span: 8 }" name="name">
  23. <a-input v-model:value="searchParams.companyName" style="color: black;" placeholder=""/>
  24. </a-form-item>
  25. </a-col>
  26. <a-col :span="8">
  27. <a-form-item label="统一信用代码" :label-col="{ span: 8 }" name="name">
  28. <a-input v-model:value="searchParams.companyCode" style="color: black;" placeholder=""/>
  29. </a-form-item>
  30. </a-col>
  31. <a-col :span="4" style="text-align: left">
  32. <a-button type="primary" html-type="submit" @click="onSearch">查询</a-button>
  33. <a-button
  34. style="margin: 0 8px"
  35. @click="
  36. () => {
  37. searchParams.pageIndex = 1;
  38. searchParams.pageSize = 10;
  39. searchParams.companyName = '';
  40. searchParams.companyCode = '';
  41. loadData();
  42. }
  43. ">重置
  44. </a-button>
  45. </a-col>
  46. </a-row>
  47. </a-form>
  48. </div>
  49. <a-table :columns="columns" :data-source="dataList" :scroll="{ x:'100%', y: 500 }" :pagination="pagination"
  50. :loading="formState.loading"
  51. @change="handleTableChange"
  52. bordered>
  53. <template #bodyCell="{ column, text, record }">
  54. <template v-if="column.key === 'postCount'">
  55. <div style="text-align: center;">
  56. <a-button name="postCount" type="link" size="small"
  57. @click='onShowPosition(record)'>{{ record.postCount }}
  58. </a-button>
  59. </div>
  60. </template>
  61. </template>
  62. </a-table>
  63. </a-modal>
  64. <PositionShowModal ref="modalShowRef"></PositionShowModal>
  65. </template>
  66. <script setup lang="ts">
  67. import {computed, reactive, ref} from "vue";
  68. import type {TableColumnsType, TableProps} from "ant-design-vue";
  69. import {getPaginationTotalTitle} from "@/utils/common";
  70. import {getList} from "@/api/companyService/company";
  71. import {get} from "@/api/common";
  72. import PositionShowModal from "@/views/companyService/company/show.vue";
  73. // 对话框显示隐藏开关
  74. const visible = ref(false);
  75. // 加载动画开关
  76. const confirmLoading = ref(false);
  77. // 企业数据
  78. const dataList = ref<Array<any>>();
  79. // 企业信息表格数据定义
  80. const columns: TableColumnsType = [
  81. {
  82. title: '序号',
  83. align: "center",
  84. key: 'companyID',
  85. width: 60,
  86. customRender: item => `${searchParams.pageSize * (searchParams.pageIndex - 1) + item.index + 1}`
  87. },
  88. {title: '企业名称', dataIndex: 'companyName', key: 'companyName', width: 200, align: "center"},
  89. {title: '统一信用代码', dataIndex: 'companyCode', key: 'companyCode', width: 200, align: "center"},
  90. {
  91. title: '企业状态',
  92. dataIndex: 'recordStatus',
  93. key: 'recordStatus',
  94. width: 120,
  95. align: "center",
  96. customRender: (item) => {
  97. return item.record.recordStatus == 1 ? "在营" : "关闭";
  98. }
  99. },
  100. {title: '企业规模', dataIndex: 'companyModelType', key: 'companyModelType', width: 120, align: "center"},
  101. {title: '当前岗位数量', dataIndex: 'postCount', key: 'postCount', width: 120, align: "center"},
  102. ];
  103. const searchParams = reactive({
  104. pageIndex: 1,
  105. pageSize: 20,
  106. companyName: '',
  107. companyCode: '',
  108. createUserId: "",
  109. workTime: ""
  110. });
  111. const pagination = computed(() => ({
  112. total: formState.total,
  113. current: searchParams.pageIndex,
  114. pageSize: searchParams.pageSize,
  115. showSizeChanger: true,
  116. showTotal: total => getPaginationTotalTitle(total)
  117. }));
  118. const formState = reactive({
  119. total: 0,
  120. loading: false
  121. });
  122. // 岗位对话框ref
  123. const modalShowRef = ref();
  124. // 对话框确定事件
  125. function handleOk() {
  126. visible.value = false
  127. }
  128. // 显示
  129. function show(record) {
  130. visible.value = true;
  131. searchParams.createUserId = record.userId;
  132. searchParams.workTime = record.workTime;
  133. loadData()
  134. }
  135. // 获取数据
  136. const loadData = async function () {
  137. formState.loading = true;
  138. await getList(searchParams).then((result: any) => {
  139. dataList.value = result.list;
  140. formState.total = result.total;
  141. }).finally(() => {
  142. formState.loading = false;
  143. })
  144. }
  145. // 表格状态变更事件
  146. const handleTableChange: TableProps['onChange'] = (pag: { pageSize: number; current: number },) => {
  147. searchParams.pageIndex = pag.current;
  148. searchParams.pageSize = pag.pageSize;
  149. loadData();
  150. };
  151. // 开启岗位数据对话框
  152. async function onShowPosition(record) {
  153. if (record.postCount == 0) {
  154. return;
  155. }
  156. const curPositionList: any = await get("companyService/post/getPostsByCompanyID", {companyId: record.companyID});
  157. modalShowRef.value.show(curPositionList);
  158. }
  159. // 表单查询事件
  160. function onSearch() {
  161. loadData()
  162. }
  163. defineExpose({
  164. show
  165. })
  166. </script>
  167. <style scoped>
  168. </style>