oldDataShow.vue 9.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369
  1. <template>
  2. <div>
  3. <div class="gva-search-box">
  4. <div class="gva-btn-list">
  5. <el-form ref="searchForm" :inline="true" :model="searchInfo">
  6. <el-form-item label="任务Id">
  7. <el-input v-model="searchInfo.task_id" placeholder="任务ID" />
  8. </el-form-item>
  9. <el-form-item label="任务名称">
  10. <el-input v-model="searchInfo.task_name" placeholder="任务名称" />
  11. </el-form-item>
  12. <el-form-item label="日期" prop="date">
  13. <el-date-picker
  14. v-model="searchInfo.new_date"
  15. size="default"
  16. type="daterange"
  17. unlink-panels
  18. range-separator="至"
  19. start-placeholder="开始日期"
  20. end-placeholder="结束日期"
  21. :disabled-date="disabledDate"
  22. :shortcuts="shortcuts"
  23. />
  24. </el-form-item>
  25. <el-form-item>
  26. <el-button
  27. size="small"
  28. type="primary"
  29. icon="search"
  30. @click="onSubmit"
  31. >查询</el-button
  32. >
  33. <el-button size="small" icon="refresh" @click="onReset"
  34. >重置</el-button
  35. >
  36. <el-button
  37. class="excel-btn"
  38. size="small"
  39. type="primary"
  40. icon="download"
  41. @click="exportExcel"
  42. >导出表格</el-button
  43. >
  44. </el-form-item>
  45. </el-form>
  46. </div>
  47. </div>
  48. <p style="color: brown">
  49. 旧平台历史数据仅供查询参考,详情请移步<a
  50. style="color: blue"
  51. href="http://sjyh.kfzs.com"
  52. target="_blank"
  53. >http://sjyh.kfzs.com</a
  54. >
  55. </p>
  56. <div class="gva-table-box" style="padding: 0">
  57. <el-table
  58. :data="tableData"
  59. border
  60. stripe
  61. align="center"
  62. header-align="center"
  63. height="550"
  64. size="small"
  65. :default-sort="{ prop: 'task_id', order: 'ascending' }"
  66. v-loading="loading"
  67. >
  68. <el-table-column type="index" label="#" min-width="10" fixed="left" />
  69. <el-table-column
  70. fixed="left"
  71. prop="new_date"
  72. label="日期"
  73. min-width="90"
  74. />
  75. <el-table-column
  76. fixed="left"
  77. prop="task_id"
  78. label="任务ID"
  79. min-width="80"
  80. />
  81. <el-table-column
  82. fixed="left"
  83. prop="task_name"
  84. label="任务名称"
  85. min-width="100"
  86. />
  87. <el-table-column prop="" label="目标" min-width="60" align="center">
  88. <el-table-column
  89. prop="target_new"
  90. label="新增"
  91. min-width="60"
  92. align="center"
  93. />
  94. <el-table-column
  95. prop="target_lc"
  96. label="留存"
  97. min-width="60"
  98. align="center"
  99. />
  100. <el-table-column
  101. prop="target_pay"
  102. label="付费"
  103. min-width="60"
  104. align="center"
  105. />
  106. </el-table-column>
  107. <el-table-column prop="" label="完成" min-width="60" align="center">
  108. <el-table-column
  109. prop="complete_new"
  110. label="新增"
  111. min-width="60"
  112. align="center"
  113. />
  114. <el-table-column
  115. prop="complete_lc"
  116. label="留存"
  117. min-width="60"
  118. align="center"
  119. />
  120. <el-table-column
  121. prop="complete_pay"
  122. label="付费"
  123. min-width="60"
  124. align="center"
  125. />
  126. </el-table-column>
  127. <el-table-column prop="" label="未完" min-width="60" align="center">
  128. <el-table-column
  129. prop="incomplete_new"
  130. label="新增"
  131. min-width="60"
  132. align="center"
  133. />
  134. <el-table-column
  135. prop="incomplete_lc"
  136. label="留存"
  137. min-width="60"
  138. align="center"
  139. />
  140. <el-table-column
  141. prop="incomplete_pay"
  142. label="付费"
  143. min-width="60"
  144. align="center"
  145. />
  146. </el-table-column>
  147. <el-table-column prop="" label="手动" min-width="100" align="center">
  148. <el-table-column
  149. prop="complete_pay_hand"
  150. label="手动付费数量"
  151. min-width="60"
  152. align="center"
  153. />
  154. <el-table-column
  155. prop="amount_hand"
  156. label="手动付费金额"
  157. min-width="60"
  158. align="center"
  159. />
  160. <el-table-column
  161. prop="remark"
  162. label="异常记录"
  163. min-width="60"
  164. align="center"
  165. />
  166. </el-table-column>
  167. <el-table-column
  168. prop="amount"
  169. label="总付费金额"
  170. min-width="60"
  171. align="center"
  172. />
  173. </el-table>
  174. <div class="gva-pagination">
  175. <el-pagination
  176. :current-page="page"
  177. :page-size="pageSize"
  178. :page-sizes="[10, 20, 30, 50, 100]"
  179. :total="total"
  180. layout="total, sizes, prev, pager, next, jumper"
  181. @current-change="handleCurrentChange"
  182. @size-change="handleSizeChange"
  183. />
  184. </div>
  185. </div>
  186. </div>
  187. </template>
  188. <script>
  189. export default {
  190. name: "data_abnormal_rate",
  191. };
  192. </script>
  193. <script setup>
  194. import { getOldDataList,exportSyDataListExcel } from "@/api/data_abnormal_rate";
  195. import { ref } from "vue";
  196. import dayjs from "dayjs";
  197. // import { ElMessage } from "element-plus";
  198. const page = ref(1);
  199. const total = ref(0);
  200. const pageSize = ref(20);
  201. const tableData = ref([]);
  202. const searchInfo = ref({});
  203. const loading = ref(false);
  204. const disabledDate = (time) => {
  205. return time.getTime() > Date.now();
  206. };
  207. const shortcuts = [
  208. {
  209. text: "今日",
  210. value: () => {
  211. const end = new Date();
  212. const start = new Date();
  213. return [start, end];
  214. },
  215. },
  216. {
  217. text: "最近一周",
  218. value: () => {
  219. const end = new Date();
  220. const start = new Date();
  221. start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);
  222. return [start, end];
  223. },
  224. },
  225. {
  226. text: "最近一月",
  227. value: () => {
  228. const end = new Date();
  229. const start = new Date();
  230. start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);
  231. return [start, end];
  232. },
  233. },
  234. ];
  235. // 分页
  236. const handleSizeChange = (val) => {
  237. pageSize.value = val;
  238. getTableData();
  239. };
  240. const onReset = () => {
  241. searchInfo.value = {};
  242. };
  243. const handleCurrentChange = (val) => {
  244. page.value = val;
  245. getTableData();
  246. };
  247. // 搜索
  248. const onSubmit = () => {
  249. if (typeof searchInfo.value.task_id != "undefined") {
  250. searchInfo.value.task_id = Number(searchInfo.value.task_id);
  251. }
  252. if (typeof searchInfo.value.new_date != "undefined") {
  253. searchInfo.value.new_date[0] = dayjs(searchInfo.value.new_date[0]).format(
  254. "YYYY-MM-DD"
  255. );
  256. searchInfo.value.new_date[1] = dayjs(searchInfo.value.new_date[1]).format(
  257. "YYYY-MM-DD"
  258. );
  259. }
  260. // console.log(searchInfo.value);
  261. getTableData();
  262. };
  263. // 查询
  264. const getTableData = async () => {
  265. loading.value = true;
  266. // ElMessage({
  267. // message: "查询中,请稍等",
  268. // type: "success",
  269. // offset: 50,
  270. // });
  271. const table = await getOldDataList({
  272. page: page.value,
  273. pageSize: pageSize.value,
  274. ...searchInfo.value,
  275. });
  276. if (table.code === 0) {
  277. tableData.value = [];
  278. const data = table.data.list;
  279. if (data) {
  280. data.forEach((e) => {
  281. let obj1 = {
  282. task_id: e.task_id,
  283. task_name: e.task_name,
  284. new_date: dayjs(e.new_date).format("YYYY-MM-DD"),
  285. target_new: e.target_new,
  286. target_pay: e.target_pay,
  287. target_lc:
  288. e.target_active - e.target_new < 0
  289. ? 0
  290. : e.target_active - e.target_new,
  291. complete_new: e.complete_new,
  292. complete_lc: e.complete_active - e.complete_new,
  293. complete_pay: e.complete_pay,
  294. incomplete_new:
  295. e.target_new - e.complete_new < 0
  296. ? 0
  297. : e.target_new - e.complete_new,
  298. incomplete_pay:
  299. e.target_pay - e.complete_pay < 0
  300. ? 0
  301. : e.target_pay - e.complete_pay,
  302. incomplete_lc:
  303. e.target_active -
  304. e.target_new -
  305. (e.complete_active - e.complete_new) <
  306. 0
  307. ? 0
  308. : e.target_active -
  309. e.target_new -
  310. (e.complete_active - e.complete_new),
  311. complete_pay_hand: e.complete_pay_hand,
  312. amount_hand: e.amount_hand,
  313. remark: e.remark,
  314. amount: e.amount,
  315. };
  316. tableData.value.push(obj1);
  317. });
  318. }
  319. // console.log(tableData);
  320. total.value = table.data.total;
  321. page.value = table.data.page;
  322. pageSize.value = table.data.pageSize;
  323. }
  324. loading.value = false;
  325. };
  326. const exportExcel = async () => {
  327. var fileName = "";
  328. if (searchInfo.value.new_date == null) {
  329. let dt = new Date(Date.parse(new Date()) - 1 * 24 * 60 * 60 * 1000);
  330. var y = dt.getFullYear();
  331. var mt = (dt.getMonth() + 1).toString().padStart(2, "0");
  332. var day = dt.getDate().toString().padStart(2, "0");
  333. var timeStr = y + "-" + mt + "-" + day;
  334. fileName = timeStr + "-数优数据.xlsx";
  335. } else {
  336. fileName = searchInfo.value.new_date + "-数优数据.xlsx";
  337. }
  338. exportSyDataListExcel(
  339. { page: page.value, pageSize: pageSize.value, ...searchInfo.value },
  340. fileName
  341. );
  342. };
  343. getTableData();
  344. </script>
  345. <style scoped lang="scss">
  346. .button-box {
  347. padding: 10px 20px;
  348. .el-button {
  349. float: right;
  350. }
  351. }
  352. .warning {
  353. color: #dc143c;
  354. }
  355. </style>