index.vue 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184
  1. <template>
  2. <div class="page-wrap page-finacial">
  3. <tool-bar
  4. :text="['advertiser_id']"
  5. :label="['广告主名/ID']"
  6. v-model:loading="inSearching"
  7. @confirm="onSearch"
  8. >
  9. <template #picker>
  10. <p class="label">日期</p>
  11. <a-range-picker
  12. :ranges="rangePick"
  13. format="YYYY/MM/DD"
  14. v-model:value="pickered"
  15. />
  16. </template>
  17. </tool-bar>
  18. <a-table
  19. :columns="columns"
  20. :data-source="list"
  21. :scroll="{ x: 1500, y: 600 }"
  22. size="small"
  23. @change="handleTableChange"
  24. rowKey="id"
  25. bordered
  26. >
  27. <template #advertiser="{ text, record }">
  28. <p class="small-font single-line">{{ record.advertiser_name }}</p>
  29. <p class="small-font single-line">ID:{{ record.advertiser_id }}</p>
  30. </template>
  31. <template #agent="{ text, record }">
  32. <p class="small-font single-line">{{ record.agent_name }}</p>
  33. <p class="small-font single-line">ID:{{ record.agent_id }}</p>
  34. </template>
  35. </a-table>
  36. </div>
  37. </template>
  38. <script lang="ts">
  39. import {
  40. defineComponent,
  41. reactive,
  42. ref,
  43. computed,
  44. toRefs,
  45. onMounted,
  46. } from "vue";
  47. import ToolBar from "@/components/tool-bar/index.vue";
  48. import usePagination from "@/hooks/usePagination";
  49. import { getFinanceList, getFinanceSum } from "@/api";
  50. import { picker } from "@/helper/config/range";
  51. import { PageOptions, FinanceData } from "#/api";
  52. import moment from "moment";
  53. import { TableColumnOfFinancial } from "../_pageOptions/table_financial";
  54. const Finance = defineComponent({
  55. components: {
  56. ToolBar,
  57. },
  58. setup() {
  59. let { loading, meta, tablePageOptions } = usePagination();
  60. const state = reactive({
  61. inSearching: false,
  62. open: false,
  63. fields: ref<any>({}),
  64. inConfirm: false,
  65. list: ref<FinanceData[]>([]),
  66. rangePick: picker,
  67. cost_order: 0,
  68. balance_order: 0,
  69. cash_cost_order: 0,
  70. pickered: [moment().subtract(30, "d"), moment()],
  71. columns: ref<any[]>([]),
  72. });
  73. const onSearch = (fields: Record<string, string>) => {
  74. const { advertiser_id } = fields;
  75. state.fields = fields;
  76. getData({ current: 1 });
  77. };
  78. const getData = async (query?: { current: number }) => {
  79. try {
  80. loading.value = true;
  81. let [begin_dates, end_dates] = state.pickered;
  82. let start_ymd = moment(begin_dates).format("YYYY-MM-DD");
  83. let end_ymd = moment(end_dates).format("YYYY-MM-DD");
  84. let parmas = Object.assign(
  85. {
  86. cost_order: state.cost_order,
  87. balance_order: state.balance_order,
  88. cash_cost_order: state.cash_cost_order,
  89. },
  90. {
  91. start_ymd,
  92. end_ymd,
  93. page: query?.current ?? 1,
  94. advertiser_id: state.fields?.advertiser_id ?? "",
  95. }
  96. );
  97. const { data } = await getFinanceList(parmas);
  98. const { data: taotals } = await getFinanceSum(parmas);
  99. let sortList = ["cost", "balance", "cash_cost"];
  100. let newlist = TableColumnOfFinancial.map((r: any) => {
  101. r.children = [
  102. {
  103. title: taotals[r.dataIndex],
  104. dataIndex: r.dataIndex,
  105. width: r.width,
  106. ellipsis: true,
  107. sorter: sortList.includes(r.dataIndex) ? true : false,
  108. sortDirections: ["descend", "ascend", false],
  109. slots: r.slots ?? "",
  110. },
  111. ];
  112. if (r.dataIndex == "date") {
  113. r.children[0].title = "总计";
  114. }
  115. return r;
  116. });
  117. state.columns = newlist;
  118. state.list = data.list as Array<FinanceData>;
  119. meta.value = data.meta;
  120. } catch (error) {
  121. console.log("on get books list error");
  122. } finally {
  123. state.inSearching = false;
  124. }
  125. };
  126. const setSateSwitch = (val: string, name: string) => {
  127. state.cost_order = 0;
  128. state.balance_order = 0;
  129. state.cash_cost_order = 0;
  130. switch (val) {
  131. case "ascend":
  132. (state as any)[name] = 2;
  133. break;
  134. case "descend":
  135. (state as any)[name] = 1;
  136. break;
  137. default:
  138. (state as any)[name] = 0;
  139. }
  140. };
  141. const handleTableChange = (
  142. pagination: PageOptions,
  143. filters: any,
  144. sorter: any
  145. ) => {
  146. if (sorter.columnKey == "cost") {
  147. setSateSwitch(sorter.order, "cost_order");
  148. }
  149. if (sorter.columnKey == "balance") {
  150. setSateSwitch(sorter.order, "balance_order");
  151. }
  152. if (sorter.columnKey == "cash_cost") {
  153. setSateSwitch(sorter.order, "cash_cost_order");
  154. }
  155. const { current, pageSize, total } = pagination;
  156. getData({ current: current });
  157. };
  158. onMounted(getData);
  159. return {
  160. ...toRefs(state),
  161. loading,
  162. tablePageOptions,
  163. onSearch,
  164. handleTableChange,
  165. };
  166. },
  167. methods: {
  168. moment,
  169. },
  170. });
  171. export default Finance;
  172. </script>