receivableDataDetail.vue 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247
  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. <el-table :data="tableData" border style="width: 100%" :header-cell-style="tableHeaderColor">
  13. <el-table-column prop="companyName" label="保险公司" align='center' width='200' fixed />
  14. <el-table-column prop="partnerCompanyName" label="地区" align='center' width='200' fixed>
  15. <template #default="props">
  16. <div >{{props.row.partnerCompanyName}}</div>
  17. </template>
  18. </el-table-column>
  19. <el-table-column label="应收" align='center'>
  20. <el-table-column prop="accountsReceivableSumMoney" label="总计" align='center' width='200' />
  21. <el-table-column prop="accountsReceivableCommissionMoney" label="手续费" align='center' width='200' />
  22. <el-table-column prop="accountsReceivableFollowUpFeeMoney" label="跟单费" align='center' width='200' />
  23. </el-table-column>
  24. <el-table-column label="未开票" align='center'>
  25. <el-table-column prop="uninvoicedSumMoney" label="总计" align='center' width='200' />
  26. <el-table-column prop="uninvoicedCommissionMoney" label="手续费" align='center' width='200' />
  27. <el-table-column prop="uninvoicedFollowUpFeeMoney" label="跟单费" align='center' width='200' />
  28. </el-table-column>
  29. <el-table-column label="已开票" align='center'>
  30. <el-table-column prop="invoicedSumMoney" label="总计" align='center' width='200' />
  31. <el-table-column prop="invoicedCommissionMoney" label="手续费" align='center' width='200' />
  32. <el-table-column prop="invoicedFollowUpFeeMoney" label="跟单费" align='center' width='200' />
  33. </el-table-column>
  34. <el-table-column label="未结算" align='center'>
  35. <el-table-column prop="unsettledSumMoney" label="总计" align='center' width='200' />
  36. <el-table-column prop="unsettledCommissionMoney" label="手续费" align='center' width='200' />
  37. <el-table-column prop="unsettledFollowUpFeeMoney" label="跟单费" align='center' width='200' />
  38. </el-table-column>
  39. <el-table-column label="已结算" align='center'>
  40. <el-table-column prop="settledSumMoney" label="总计" align='center' width='200' />
  41. <el-table-column prop="settledCommissionMoney" label="手续费" align='center' width='200' />
  42. <el-table-column prop="settledFollowUpFeeMoney" label="跟单费" align='center' width='200' />
  43. </el-table-column>
  44. </el-table>
  45. <FilterDialog :show='isShow' @close='isShow=false' @sure='filterSure' ref='filterDialogRef' @selectedKeys='selected'
  46. routerKey='routerKey'>
  47. </FilterDialog>
  48. </div>
  49. </template>
  50. <script setup lang="ts">
  51. import { useRouter } from "vue-router";
  52. import api from "@/api";
  53. import QueryForm from "../../components/queryForm.vue";
  54. import FilterDialog from "../../components/filterDialog.vue";
  55. import DowButton from "../../components/button.vue";
  56. import Sort from "../../components/sort.vue";
  57. import useUserStore from "@/store/modules/message";
  58. import PageInfo from "@/api/types/agreementTypes";
  59. import { ElMessage } from "element-plus";
  60. const router = useRouter();
  61. const userStore = useUserStore();
  62. const isShow = ref(false);
  63. const isSort = ref();
  64. const pageInfo = ref({
  65. pageNum: 1,
  66. pageSize: 10,
  67. sizes: [10, 20, 30, 40, 50],
  68. total: 0,
  69. });
  70. const listOption = reactive({
  71. rowKey: "receivableDelId",
  72. //查询
  73. queryFormFields: [],
  74. });
  75. const selectedKeys = ref([]);
  76. const selected = function (val) {
  77. selectedKeys.value = val;
  78. };
  79. let label = ["保险公司", "应收", "已开票", "已结算"];
  80. const tableHeaderColor = ({ row, column, rowIndex, columnIndex }) => {
  81. if (!label.includes(column.label)) {
  82. return {
  83. backgroundColor: "#FFF",
  84. };
  85. }
  86. };
  87. //查询数据
  88. const phone = JSON.parse(localStorage.getItem("userInfo")).username;
  89. //获取默认选择数据
  90. const queryFormRes = ref();
  91. const routerKey = ref("receivableDataDetail");
  92. const defaultList = ref();
  93. const pageHiddenList = ref([]); //页面不显示的数据
  94. const initDefaultList = async () => {
  95. const { data } = await api.manageApi.getSearchDefaultList({
  96. routerKey: routerKey.value,
  97. userId: phone,
  98. });
  99. listOption.queryFormFields = data.filter((e) => e.showFlag);
  100. pageHiddenList.value = data.filter((e) => !e.showFlag);
  101. defaultList.value = data.map((e) => e.id);
  102. selectedKeys.value = defaultList.value;
  103. queryFormRes.value = queryFormRef.value?.initDefaultSaveForm();
  104. queryList();
  105. };
  106. //删除
  107. const filterDialogRef = ref();
  108. const delSelect = (id) => {
  109. listOption.queryFormFields = listOption.queryFormFields.filter(
  110. (item) => item.id != id
  111. );
  112. filterDialogRef.value.initList(
  113. [...listOption.queryFormFields, ...pageHiddenList.value],
  114. defaultList.value
  115. );
  116. };
  117. //打开dialogShow
  118. const dialogShow = function () {
  119. isShow.value = true;
  120. filterDialogRef.value.initList(
  121. [...listOption.queryFormFields, ...pageHiddenList.value],
  122. defaultList.value
  123. );
  124. };
  125. //确定
  126. const queryFormRef = ref();
  127. const filterSure = (item, index) => {
  128. isShow.value = false;
  129. const secondGroupIds = item.list.map((item) => item.id);
  130. const oldList = listOption.queryFormFields.filter((item) =>
  131. secondGroupIds.includes(item.id)
  132. );
  133. const firstGroupIds = listOption.queryFormFields.map((item) => item.id);
  134. let newList = item.list.filter((item) => !firstGroupIds.includes(item.id));
  135. //过滤掉默认不显示的数据
  136. const hiddenList = new Set(pageHiddenList.value.map((item) => item.id));
  137. const filterList = newList.filter((item) => !hiddenList.has(item.id));
  138. listOption.queryFormFields = [...oldList, ...filterList];
  139. queryFormRef.value?.initDefaultSaveForm();
  140. selectedKeys.value = item.list.filter((item) => item.id);
  141. };
  142. const globalSortKey = ref("");
  143. const globalSortOrder = ref<"asc" | "desc">("asc");
  144. // 处理子组件传递的排序更新
  145. const handleSortUpdate = (sortInfo: {
  146. key: string;
  147. order: string;
  148. name: string;
  149. }) => {
  150. globalSortKey.value = sortInfo.key;
  151. globalSortOrder.value = sortInfo.order;
  152. queryList();
  153. };
  154. //查询
  155. const query = (item) => {
  156. queryFormRes.value = item;
  157. queryList();
  158. };
  159. //数据查询
  160. const tableData = ref([]);
  161. const queryList = async () => {
  162. let query = { ...queryFormRes.value };
  163. const { data } = await api.manageApi.receivableDataDetailPageList({
  164. pageNo: pageInfo.value.pageNum,
  165. pageSize: pageInfo.value.pageSize,
  166. routerKey: routerKey.value,
  167. userId: phone,
  168. orderType: globalSortKey.value
  169. ? globalSortKey.value + " " + globalSortOrder.value
  170. : "",
  171. ...query,
  172. });
  173. tableData.value = data;
  174. };
  175. //分页事件
  176. function getList(item: PageInfo) {
  177. pageInfo.value.pageNum = item.pageNum;
  178. pageInfo.value.pageSize = item.pageSize;
  179. queryList();
  180. }
  181. //导出
  182. const downloadFile = async () => {
  183. let query = { ...queryFormRes.value };
  184. const { data, msg } = await api.manageApi.receivableDataDetailToTask({
  185. pageNo: pageInfo.value.pageNum,
  186. pageSize: pageInfo.value.pageSize,
  187. routerKey: routerKey.value,
  188. userId: phone,
  189. orderType: globalSortKey.value
  190. ? globalSortKey.value + " " + globalSortOrder.value
  191. : "",
  192. ...query,
  193. });
  194. ElMessage({
  195. message: msg,
  196. type: "success",
  197. });
  198. userStore.count++;
  199. };
  200. onMounted(() => {
  201. initDefaultList();
  202. });
  203. </script>
  204. <style scoped lang="scss">
  205. .log {
  206. width: 100%;
  207. height: calc(100vh - 120px);
  208. background: #ffffff;
  209. padding: 24px;
  210. overflow-y: auto;
  211. .query-btn {
  212. margin-left: 20px;
  213. }
  214. .btn-box {
  215. padding-bottom: 15px;
  216. margin-bottom: 24px;
  217. border-bottom: 1px solid #eeeeee;
  218. display: flex;
  219. justify-content: flex-end;
  220. }
  221. }
  222. :deep(.caret-wrapper) {
  223. display: none !important;
  224. }
  225. </style>