meetDataDetail.vue 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257
  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" :showOperation='false'>
  15. <template v-slot:search="scope">
  16. <Sort :scope="scope.slotData" :globalSortKey="globalSortKey" :globalSortOrder="globalSortOrder"
  17. @update:sort="handleSortUpdate"></Sort>
  18. </template>
  19. </ComplexTable>
  20. <FilterDialog :show='isShow' @close='isShow=false' @sure='filterSure' ref='filterDialogRef' @selectedKeys='selected'
  21. routerKey='routerKey'>
  22. </FilterDialog>
  23. </PageMain>
  24. </div>
  25. </template>
  26. <script setup lang="ts">
  27. import { useRouter } from "vue-router";
  28. import api from "@/api";
  29. import QueryForm from "../../components/queryForm.vue";
  30. import FilterDialog from "../../components/filterDialog.vue";
  31. import DowButton from "../../components/button.vue";
  32. import Sort from "../../components/sort.vue";
  33. import useUserStore from "@/store/modules/message";
  34. import PageInfo from "@/api/types/agreementTypes";
  35. import { ElMessage } from "element-plus";
  36. const router = useRouter();
  37. const userStore = useUserStore();
  38. const isShow = ref(false);
  39. const isSort = ref();
  40. const pageInfo = ref({
  41. pageNum: 1,
  42. pageSize: 10,
  43. sizes: [10, 20, 30, 40, 50],
  44. total: 0,
  45. });
  46. const listOption = reactive({
  47. rowKey: "telemarketingDelId",
  48. //查询
  49. queryFormFields: [],
  50. // 表格列
  51. columns: [
  52. {
  53. prop: "salesmanName",
  54. label: "业务员",
  55. width: "180",
  56. },
  57. {
  58. prop: "salesmanPhone",
  59. label: "手机号",
  60. width: "180",
  61. },
  62. {
  63. prop: "bankCardNumber",
  64. label: "银行卡号",
  65. width: "",
  66. },
  67. {
  68. prop: "bankName",
  69. label: "银行",
  70. width: "180",
  71. },
  72. {
  73. prop: "statusName",
  74. label: "状态",
  75. width: "180",
  76. },
  77. {
  78. prop: "withdrawalMoney",
  79. label: "提现金额",
  80. width: "180",
  81. align: "right",
  82. sortable: true,
  83. },
  84. {
  85. prop: "paidPersonName",
  86. label: "付款人",
  87. width: "180",
  88. },
  89. {
  90. prop: "paidTime",
  91. label: "付款时间",
  92. width: "180",
  93. },
  94. ],
  95. });
  96. const selectedKeys = ref([]);
  97. const selected = function (val) {
  98. selectedKeys.value = val;
  99. };
  100. //查询数据
  101. const phone = JSON.parse(localStorage.getItem("userInfo")).username;
  102. //获取默认选择数据
  103. const queryFormRes = ref();
  104. const routerKey = ref("meetDataDetail");
  105. const defaultList = ref();
  106. const pageHiddenList = ref([]); //页面不显示的数据
  107. const initDefaultList = async () => {
  108. const { data } = await api.manageApi.getSearchDefaultList({
  109. routerKey: routerKey.value,
  110. userId: phone,
  111. });
  112. listOption.queryFormFields = data.filter((e) => e.showFlag);
  113. pageHiddenList.value = data.filter((e) => !e.showFlag);
  114. defaultList.value = data.map((e) => e.id);
  115. selectedKeys.value = defaultList.value;
  116. queryFormRes.value = queryFormRef.value?.initDefaultSaveForm();
  117. queryList();
  118. };
  119. //删除
  120. const filterDialogRef = ref();
  121. const delSelect = (id) => {
  122. listOption.queryFormFields = listOption.queryFormFields.filter(
  123. (item) => item.id != id
  124. );
  125. filterDialogRef.value.initList(
  126. [...listOption.queryFormFields, ...pageHiddenList.value],
  127. defaultList.value
  128. );
  129. };
  130. //打开dialogShow
  131. const dialogShow = function () {
  132. isShow.value = true;
  133. filterDialogRef.value.initList(
  134. [...listOption.queryFormFields, ...pageHiddenList.value],
  135. defaultList.value
  136. );
  137. };
  138. //确定
  139. const queryFormRef = ref();
  140. const filterSure = (item, index) => {
  141. isShow.value = false;
  142. const secondGroupIds = item.list.map((item) => item.id);
  143. const oldList = listOption.queryFormFields.filter((item) =>
  144. secondGroupIds.includes(item.id)
  145. );
  146. const firstGroupIds = listOption.queryFormFields.map((item) => item.id);
  147. let newList = item.list.filter((item) => !firstGroupIds.includes(item.id));
  148. //过滤掉默认不显示的数据
  149. const hiddenList = new Set(pageHiddenList.value.map((item) => item.id));
  150. const filterList = newList.filter((item) => !hiddenList.has(item.id));
  151. listOption.queryFormFields = [...oldList, ...filterList];
  152. queryFormRef.value?.initDefaultSaveForm();
  153. selectedKeys.value = item.list.filter((item) => item.id);
  154. };
  155. const globalSortKey = ref("");
  156. const globalSortOrder = ref<"asc" | "desc">("asc");
  157. // 处理子组件传递的排序更新
  158. const handleSortUpdate = (sortInfo: {
  159. key: string;
  160. order: string;
  161. name: string;
  162. }) => {
  163. globalSortKey.value = sortInfo.key;
  164. globalSortOrder.value = sortInfo.order;
  165. queryList();
  166. };
  167. //查询
  168. const query = (item) => {
  169. queryFormRes.value = item;
  170. queryList();
  171. };
  172. //数据查询
  173. const tableData = ref([]);
  174. const queryList = async () => {
  175. let query = { ...queryFormRes.value };
  176. const { data } = await api.manageApi.meetDataDetailPageList({
  177. pageNo: pageInfo.value.pageNum,
  178. pageSize: pageInfo.value.pageSize,
  179. routerKey: routerKey.value,
  180. userId: phone,
  181. orderType: globalSortKey.value
  182. ? globalSortKey.value + " " + globalSortOrder.value
  183. : "",
  184. ...query,
  185. });
  186. tableData.value = data.records;
  187. pageInfo.value.pageNum = data.current;
  188. pageInfo.value.pageSize = data.size;
  189. pageInfo.value.total = data.total;
  190. };
  191. //分页事件
  192. function getList(item: PageInfo) {
  193. pageInfo.value.pageNum = item.pageNum;
  194. pageInfo.value.pageSize = item.pageSize;
  195. queryList();
  196. }
  197. //导出
  198. const downloadFile = async () => {
  199. let query = { ...queryFormRes.value };
  200. const { data, msg } = await api.manageApi.meetDataDetailToTask({
  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. ElMessage({
  211. message: msg,
  212. type: "success",
  213. });
  214. userStore.count++;
  215. };
  216. onMounted(() => {
  217. initDefaultList();
  218. });
  219. </script>
  220. <style scoped lang="scss">
  221. .log {
  222. .query-btn {
  223. margin-left: 20px;
  224. }
  225. .btn-box {
  226. padding-bottom: 15px;
  227. margin-bottom: 24px;
  228. border-bottom: 1px solid #eeeeee;
  229. display: flex;
  230. justify-content: flex-end;
  231. }
  232. }
  233. :deep(.caret-wrapper) {
  234. display: none !important;
  235. }
  236. </style>