companyDataDetail.vue 8.0 KB

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