|
|
@@ -1,12 +1,295 @@
|
|
|
-import React from "react";
|
|
|
+import React, { useCallback, useEffect, useMemo, useState } from "react";
|
|
|
import styles from "./index.module.scss";
|
|
|
- function A6Guide() {
|
|
|
-
|
|
|
+import { Button, DatePicker, Table } from "antd";
|
|
|
+import dayjs from "dayjs";
|
|
|
+import { useDispatch, useSelector } from "react-redux";
|
|
|
+import ExportJsonExcel from "js-export-excel";
|
|
|
+import { RootState } from "@/store";
|
|
|
+import { MessageFu } from "@/utils/message";
|
|
|
+import { A6API_getList, A6API_getListToXls } from "@/store/action/A6Guide";
|
|
|
+import { A6TableType } from "@/types";
|
|
|
+const { RangePicker } = DatePicker;
|
|
|
+function A6Guide() {
|
|
|
+ const dispatch = useDispatch();
|
|
|
+
|
|
|
+ const [formData, setFormData] = useState({
|
|
|
+ startTime: dayjs().subtract(30, "day").format("YYYY-MM-DD") + " 00:00:00",
|
|
|
+ endTime: dayjs().format("YYYY-MM-DD") + " 23:59:59",
|
|
|
+ pageSize: 10,
|
|
|
+ pageNum: 1,
|
|
|
+ });
|
|
|
+
|
|
|
+ const getListFu = useCallback(() => {
|
|
|
+ // console.log("发送请求", formData);
|
|
|
+ dispatch(A6API_getList(formData));
|
|
|
+ }, [dispatch, formData]);
|
|
|
+
|
|
|
+ useEffect(() => {
|
|
|
+ getListFu();
|
|
|
+ }, [getListFu]);
|
|
|
+
|
|
|
+ // 时间选择器改变
|
|
|
+ const timeChange = useCallback(
|
|
|
+ (_: any, dateString: string[]) => {
|
|
|
+ let startTime = "";
|
|
|
+ let endTime = "";
|
|
|
+ if (dateString[0] && dateString[1]) {
|
|
|
+ startTime = dateString[0] + " 00:00:00";
|
|
|
+ endTime = dateString[1] + " 23:59:59";
|
|
|
+ }
|
|
|
+ setFormData({ ...formData, startTime, endTime });
|
|
|
+ },
|
|
|
+ [formData]
|
|
|
+ );
|
|
|
+
|
|
|
+ // 结算合计的函数
|
|
|
+ const resAllNumFu = useCallback((item: A6TableType) => {
|
|
|
+ let num = 0;
|
|
|
+ num =
|
|
|
+ item.speedMasterCx +
|
|
|
+ item.speedMasterXl +
|
|
|
+ item.speedMasterSx +
|
|
|
+ item.digitalFactory +
|
|
|
+ item.prinectCenter +
|
|
|
+ item.polarCuttingSystem +
|
|
|
+ item.stahlfolderKh +
|
|
|
+ item.versafireEp +
|
|
|
+ item.versafireEv +
|
|
|
+ item.suprasetter +
|
|
|
+ item.lifecycle +
|
|
|
+ item.training +
|
|
|
+ item.consultancy +
|
|
|
+ item.gallus +
|
|
|
+ item.financialService +
|
|
|
+ item.livestreamingRoom;
|
|
|
+ return num;
|
|
|
+ }, []);
|
|
|
+
|
|
|
+ // 从仓库获取表格列表信息
|
|
|
+ const tableInfo = useSelector((state: RootState) => state.A6Guide.tableInfo);
|
|
|
+
|
|
|
+ const columns = useMemo<any>(() => {
|
|
|
+ return [
|
|
|
+ {
|
|
|
+ title: "日期",
|
|
|
+ dataIndex: "today",
|
|
|
+ width: 100,
|
|
|
+ fixed: "left",
|
|
|
+ },
|
|
|
+ {
|
|
|
+ title: "合计",
|
|
|
+ width: 100,
|
|
|
+ fixed: "left",
|
|
|
+ render: (item: A6TableType) => resAllNumFu(item),
|
|
|
+ },
|
|
|
+ {
|
|
|
+ width: 150,
|
|
|
+ title: "Speedmaster CX 104-8+LYYL",
|
|
|
+ dataIndex: "speedMasterCx",
|
|
|
+ },
|
|
|
+ {
|
|
|
+ width: 150,
|
|
|
+ title: "Speedmaster XL 75-7+L",
|
|
|
+ dataIndex: "speedMasterXl",
|
|
|
+ },
|
|
|
+ {
|
|
|
+ width: 150,
|
|
|
+ title: "Speedmaster SX 102-4-P",
|
|
|
+ dataIndex: "speedMasterSx",
|
|
|
+ },
|
|
|
+ {
|
|
|
+ width: 150,
|
|
|
+ title: "Digital Factory",
|
|
|
+ dataIndex: "digitalFactory",
|
|
|
+ },
|
|
|
+ {
|
|
|
+ width: 150,
|
|
|
+ title: "Prinect Center",
|
|
|
+ dataIndex: "prinectCenter",
|
|
|
+ },
|
|
|
+ {
|
|
|
+ width: 150,
|
|
|
+ title: "Polar Cutting System 300",
|
|
|
+ dataIndex: "polarCuttingSystem",
|
|
|
+ },
|
|
|
+ {
|
|
|
+ width: 160,
|
|
|
+ title: "Stahlfolder KH 82-P",
|
|
|
+ dataIndex: "stahlfolderKh",
|
|
|
+ },
|
|
|
+ {
|
|
|
+ width: 150,
|
|
|
+ title: "Versafire EP",
|
|
|
+ dataIndex: "versafireEp",
|
|
|
+ },
|
|
|
+ {
|
|
|
+ width: 150,
|
|
|
+ title: "Versafire EV",
|
|
|
+ dataIndex: "versafireEv",
|
|
|
+ },
|
|
|
+ {
|
|
|
+ width: 150,
|
|
|
+ title: "Suprasetter 106",
|
|
|
+ dataIndex: "suprasetter",
|
|
|
+ },
|
|
|
+ {
|
|
|
+ width: 150,
|
|
|
+ title: "Lifecycle",
|
|
|
+ dataIndex: "lifecycle",
|
|
|
+ },
|
|
|
+ {
|
|
|
+ width: 150,
|
|
|
+ title: "Training",
|
|
|
+ dataIndex: "training",
|
|
|
+ },
|
|
|
+ {
|
|
|
+ width: 150,
|
|
|
+ title: "Consultancy",
|
|
|
+ dataIndex: "consultancy",
|
|
|
+ },
|
|
|
+ {
|
|
|
+ width: 150,
|
|
|
+ title: "Gallus",
|
|
|
+ dataIndex: "gallus",
|
|
|
+ },
|
|
|
+ {
|
|
|
+ width: 150,
|
|
|
+ title: "Financial Service",
|
|
|
+ dataIndex: "financialService",
|
|
|
+ },
|
|
|
+ {
|
|
|
+ width: 150,
|
|
|
+ title: "Livestreaming Room",
|
|
|
+ dataIndex: "livestreamingRoom",
|
|
|
+ },
|
|
|
+ ];
|
|
|
+ }, [resAllNumFu]);
|
|
|
+
|
|
|
+ // 页码变化
|
|
|
+ const paginationChange = useCallback(
|
|
|
+ () => (pageNum: number, pageSize: number) => {
|
|
|
+ setFormData({ ...formData, pageNum, pageSize });
|
|
|
+ },
|
|
|
+ [formData]
|
|
|
+ );
|
|
|
+
|
|
|
+ // 点击导出
|
|
|
+ const deriveFu = useCallback(async () => {
|
|
|
+ if (tableInfo.list.length === 0)
|
|
|
+ return MessageFu.warning("当前搜索条件没有数据!");
|
|
|
+ const name = "导航区域" + dayjs(new Date()).format("YYYY-MM-DD HH:mm");
|
|
|
+
|
|
|
+ const res = await A6API_getListToXls({
|
|
|
+ ...formData,
|
|
|
+ pageNum: 1,
|
|
|
+ pageSize: 99999,
|
|
|
+ });
|
|
|
+
|
|
|
+ if (res.code === 0) {
|
|
|
+ const sheetData = res.data.records.map((v: A6TableType) => {
|
|
|
+ return {
|
|
|
+ ...v,
|
|
|
+ all: resAllNumFu(v),
|
|
|
+ };
|
|
|
+ });
|
|
|
+
|
|
|
+ const option = {
|
|
|
+ fileName: name,
|
|
|
+ datas: [
|
|
|
+ {
|
|
|
+ sheetData,
|
|
|
+ sheetName: name,
|
|
|
+ sheetFilter: [
|
|
|
+ "today",
|
|
|
+ "all",
|
|
|
+ "speedMasterCx",
|
|
|
+ "speedMasterXl",
|
|
|
+ "speedMasterSx",
|
|
|
+ "digitalFactory",
|
|
|
+ "prinectCenter",
|
|
|
+ "polarCuttingSystem",
|
|
|
+ "stahlfolderKh",
|
|
|
+ "versafireEp",
|
|
|
+ "versafireEv",
|
|
|
+ "suprasetter",
|
|
|
+ "lifecycle",
|
|
|
+ "training",
|
|
|
+ "consultancy",
|
|
|
+ "gallus",
|
|
|
+ "financialService",
|
|
|
+ "livestreamingRoom",
|
|
|
+ ],
|
|
|
+ sheetHeader: [
|
|
|
+ "日期",
|
|
|
+ "合计",
|
|
|
+ "Speedmaster CX 104-8+LYYL",
|
|
|
+ "Speedmaster XL 75-7+L",
|
|
|
+ "Speedmaster SX 102-4-P",
|
|
|
+ "Digital Factory",
|
|
|
+ "Prinect Center",
|
|
|
+ "Polar Cutting System 300",
|
|
|
+ "Stahlfolder KH 82-P",
|
|
|
+ "Versafire EP",
|
|
|
+ "Versafire EV",
|
|
|
+ "Suprasetter 106",
|
|
|
+ "Lifecycle",
|
|
|
+ "Training",
|
|
|
+ "Consultancy",
|
|
|
+ "Gallus",
|
|
|
+ "Financial Service",
|
|
|
+ "Livestreaming Room",
|
|
|
+ ],
|
|
|
+ columnWidths: [
|
|
|
+ 10, 4, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
|
|
|
+ 10,
|
|
|
+ ],
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ };
|
|
|
+
|
|
|
+ const toExcel = new ExportJsonExcel(option); //new
|
|
|
+ toExcel.saveExcel(); //保存
|
|
|
+ }
|
|
|
+ }, [formData, resAllNumFu, tableInfo.list.length]);
|
|
|
+
|
|
|
return (
|
|
|
<div className={styles.A6Guide}>
|
|
|
- <h1>A6Guide</h1>
|
|
|
+ <div className="pageTitle">导航区域访问量</div>
|
|
|
+ {/* 日期选择框 */}
|
|
|
+ <div className="searchBox">
|
|
|
+ <RangePicker
|
|
|
+ style={{ width: 320 }}
|
|
|
+ defaultValue={[
|
|
|
+ dayjs(
|
|
|
+ dayjs().subtract(30, "day").format("YYYY-MM-DD"),
|
|
|
+ "YYYY-MM-DD"
|
|
|
+ ),
|
|
|
+ dayjs(dayjs().format("YYYY-MM-DD"), "YYYY-MM-DD"),
|
|
|
+ ]}
|
|
|
+ onChange={timeChange}
|
|
|
+ />
|
|
|
+ <Button onClick={deriveFu}>导出表格</Button>
|
|
|
+ </div>
|
|
|
+ {/* 表格主体 */}
|
|
|
+ <div className="tableBox">
|
|
|
+ <Table
|
|
|
+ scroll={{ y: 580, x: 1000 }}
|
|
|
+ dataSource={tableInfo.list}
|
|
|
+ columns={columns}
|
|
|
+ rowKey="id"
|
|
|
+ pagination={{
|
|
|
+ showQuickJumper: true,
|
|
|
+ position: ["bottomCenter"],
|
|
|
+ showSizeChanger: true,
|
|
|
+ current: formData.pageNum,
|
|
|
+ pageSize: formData.pageSize,
|
|
|
+ total: tableInfo.total,
|
|
|
+ onChange: paginationChange(),
|
|
|
+ }}
|
|
|
+ />
|
|
|
+ </div>
|
|
|
</div>
|
|
|
- )
|
|
|
+ );
|
|
|
}
|
|
|
|
|
|
const MemoA6Guide = React.memo(A6Guide);
|