index.vue 7.8 KB

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