index.vue 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294
  1. <template>
  2. <div class="log">
  3. <div class='btn-box'>
  4. <el-button type="primary" plain class='query-btn'
  5. @click='dialogShow'>{{selectedKeys.length?`已选${selectedKeys.length}项`:'筛选条件'}}</el-button>
  6. <div class='query-btn'>
  7. <DowButton @endAnim='downloadFile'></DowButton>
  8. </div>
  9. </div>
  10. <QueryForm :option="listOption" @query='query' @delSelect='delSelect' ref='queryFormRef'></QueryForm>
  11. <!-- 表格 -->
  12. <ComplexTable :tableData="tableData" :showSelect='false' :columns="listOption.columns" :showIndex="false"
  13. :columnwidth="120" :pageInfo="pageInfo" @getList="getList">
  14. <template v-slot:operation="scope">
  15. <el-button type="primary" link @click='agreementEdit(scope.operationData.id)'>明细</el-button>
  16. </template>
  17. <template v-slot:search="scope">
  18. <Sort :scope="scope.slotData" :globalSortKey="globalSortKey" :globalSortOrder="globalSortOrder"
  19. @update:sort="handleSortUpdate"></Sort>
  20. </template>
  21. <template #customSlot="{ bodyCell: { scope, column } }">
  22. <template v-if="column.prop == 'pendingReviewNum'">
  23. {{ scope.row.pendingReviewNum }} 笔
  24. </template>
  25. <template v-if="column.prop == 'reviewedNum'">
  26. {{ scope.row.reviewedNum }} 笔
  27. </template>
  28. <template v-if="column.prop == 'autoReviewNum'">
  29. {{ scope.row.autoReviewNum }} 笔
  30. </template>
  31. <template v-if="column.prop == 'manualReviewNum'">
  32. {{ scope.row.manualReviewNum }} 笔
  33. </template>
  34. <template v-if="column.prop == 'aveReviewDuration'">
  35. {{ scope.row.aveReviewDuration }} s
  36. </template>
  37. </template>
  38. </ComplexTable>
  39. <FilterDialog :show='isShow' @close='isShow=false' @sure='filterSure' ref='filterDialogRef' @selectedKeys='selected'
  40. routerKey='routerKey'>
  41. </FilterDialog>
  42. </div>
  43. </template>
  44. <script setup lang="ts">
  45. import { useRouter } from "vue-router";
  46. import api from "@/api";
  47. import QueryForm from "../../components/queryForm.vue";
  48. import FilterDialog from "../../components/filterDialog.vue";
  49. import DowButton from "../../components/button.vue";
  50. import Sort from "../../components/sort.vue";
  51. import useUserStore from "@/store/modules/message";
  52. import PageInfo from "@/api/types/agreementTypes";
  53. import { ElMessage } from "element-plus";
  54. const router = useRouter();
  55. const userStore = useUserStore();
  56. const isShow = ref(false);
  57. const isSort = ref();
  58. const pageInfo = ref({
  59. pageNum: 1,
  60. pageSize: 10,
  61. sizes: [10, 20, 30, 40, 50],
  62. total: 0,
  63. });
  64. const listOption = reactive({
  65. rowKey: "costVerId",
  66. //查询
  67. queryFormFields: [],
  68. // 表格列
  69. columns: [
  70. {
  71. prop: "companyName",
  72. label: "保险公司",
  73. width: "",
  74. },
  75. {
  76. prop: "pendingReviewNum",
  77. label: "待审核",
  78. width: "240",
  79. align: "right",
  80. sortable: true,
  81. component: "customSlot",
  82. },
  83. {
  84. prop: "reviewedNum",
  85. label: "已审核",
  86. width: "240",
  87. align: "right",
  88. sortable: true,
  89. component: "customSlot",
  90. },
  91. {
  92. prop: "autoReviewNum",
  93. label: "自动审核",
  94. width: "240",
  95. align: "right",
  96. sortable: true,
  97. component: "customSlot",
  98. },
  99. {
  100. prop: "manualReviewNum",
  101. label: "人工审核",
  102. width: "240",
  103. align: "right",
  104. sortable: true,
  105. component: "customSlot",
  106. },
  107. {
  108. prop: "aveReviewDuration",
  109. label: "平均审核时常",
  110. width: "240",
  111. align: "right",
  112. sortable: true,
  113. component: "customSlot",
  114. },
  115. ],
  116. });
  117. const selectedKeys = ref([]);
  118. const selected = function (val) {
  119. selectedKeys.value = val;
  120. };
  121. //查询数据
  122. const phone = JSON.parse(localStorage.getItem("userInfo")).username;
  123. //获取默认选择数据
  124. const queryFormRes = ref();
  125. const routerKey = ref("costVerificationData");
  126. const defaultList = ref();
  127. const pageHiddenList = ref([]); //页面不显示的数据
  128. const initDefaultList = async () => {
  129. const { data } = await api.manageApi.getSearchDefaultList({
  130. routerKey: routerKey.value,
  131. userId: phone,
  132. });
  133. listOption.queryFormFields = data.filter((e) => e.showFlag);
  134. pageHiddenList.value = data.filter((e) => !e.showFlag);
  135. defaultList.value = data.map((e) => e.id);
  136. selectedKeys.value = defaultList.value;
  137. queryFormRes.value = queryFormRef.value?.initDefaultSaveForm();
  138. queryList();
  139. };
  140. //删除
  141. const filterDialogRef = ref();
  142. const delSelect = (id) => {
  143. listOption.queryFormFields = listOption.queryFormFields.filter(
  144. (item) => item.id != id
  145. );
  146. filterDialogRef.value.initList(
  147. [...listOption.queryFormFields, ...pageHiddenList.value],
  148. defaultList.value
  149. );
  150. };
  151. //打开dialogShow
  152. const dialogShow = function () {
  153. isShow.value = true;
  154. filterDialogRef.value.initList(
  155. [...listOption.queryFormFields, ...pageHiddenList.value],
  156. defaultList.value
  157. );
  158. };
  159. //确定
  160. const queryFormRef = ref();
  161. const filterSure = (item, index) => {
  162. isShow.value = false;
  163. const secondGroupIds = item.list.map((item) => item.id);
  164. const oldList = listOption.queryFormFields.filter((item) =>
  165. secondGroupIds.includes(item.id)
  166. );
  167. const firstGroupIds = listOption.queryFormFields.map((item) => item.id);
  168. let newList = item.list.filter((item) => !firstGroupIds.includes(item.id));
  169. //过滤掉默认不显示的数据
  170. const hiddenList = new Set(pageHiddenList.value.map((item) => item.id));
  171. const filterList = newList.filter((item) => !hiddenList.has(item.id));
  172. listOption.queryFormFields = [...oldList, ...filterList];
  173. queryFormRef.value?.initDefaultSaveForm();
  174. selectedKeys.value = item.list.filter((item) => item.id);
  175. };
  176. const globalSortKey = ref("");
  177. const globalSortOrder = ref<"asc" | "desc">("asc");
  178. // 处理子组件传递的排序更新
  179. const handleSortUpdate = (sortInfo: {
  180. key: string;
  181. order: string;
  182. name: string;
  183. }) => {
  184. globalSortKey.value = sortInfo.key;
  185. globalSortOrder.value = sortInfo.order;
  186. queryList();
  187. };
  188. //查询
  189. const query = (item) => {
  190. queryFormRes.value = item;
  191. queryList();
  192. };
  193. //数据查询
  194. const tableData = ref([]);
  195. const queryList = async () => {
  196. let query = { ...queryFormRes.value };
  197. const { data } = await api.manageApi.costVerificationDataPageList({
  198. pageNo: pageInfo.value.pageNum,
  199. pageSize: pageInfo.value.pageSize,
  200. routerKey: routerKey.value,
  201. userId: phone,
  202. orderType: globalSortKey.value
  203. ? globalSortKey.value + " " + globalSortOrder.value
  204. : "",
  205. ...query,
  206. });
  207. tableData.value = data.records;
  208. pageInfo.value.pageNum = data.current;
  209. pageInfo.value.pageSize = data.size;
  210. pageInfo.value.total = data.total;
  211. };
  212. //分页事件
  213. function getList(item: PageInfo) {
  214. pageInfo.value.pageNum = item.pageNum;
  215. pageInfo.value.pageSize = item.pageSize;
  216. queryList();
  217. }
  218. //导出
  219. const downloadFile = async () => {
  220. let query = { ...queryFormRes.value };
  221. const { data, msg } = await api.manageApi.costVerificationDataToTask({
  222. pageNo: pageInfo.value.pageNum,
  223. pageSize: pageInfo.value.pageSize,
  224. routerKey: routerKey.value,
  225. userId: phone,
  226. orderType: globalSortKey.value
  227. ? globalSortKey.value + " " + globalSortOrder.value
  228. : "",
  229. ...query,
  230. });
  231. ElMessage({
  232. message: msg,
  233. type: "success",
  234. });
  235. userStore.count++;
  236. };
  237. const agreementEdit = (id) => {
  238. router.push({
  239. name: "costVerificationDataDetail",
  240. query: {
  241. id: id,
  242. },
  243. });
  244. };
  245. onMounted(() => {
  246. initDefaultList();
  247. });
  248. </script>
  249. <style scoped lang="scss">
  250. .log {
  251. width: 100%;
  252. height: calc(100vh - 120px);
  253. background: #ffffff;
  254. padding: 24px;
  255. overflow-y: auto;
  256. .query-btn {
  257. margin-left: 20px;
  258. }
  259. .btn-box {
  260. padding-bottom: 15px;
  261. margin-bottom: 24px;
  262. border-bottom: 1px solid #eeeeee;
  263. display: flex;
  264. justify-content: flex-end;
  265. }
  266. }
  267. :deep(.caret-wrapper) {
  268. display: none !important;
  269. }
  270. </style>