shaogen1995 1 年之前
父節點
當前提交
6ad9a58cd1

+ 78 - 0
后台/src/pages/BZ1Intro/index.module.scss

@@ -0,0 +1,78 @@
+.BZ1Intro {
+  position: relative;
+
+  :global {
+
+    .BZ1main {
+      background-color: #fff;
+      border-radius: 10px;
+      width: 100%;
+      height: 100%;
+      overflow-y: auto;
+      padding: 20px 100px 20px 15px;
+
+    }
+
+    .BZ1btn {
+      position: absolute;
+      top: 20px;
+      right: 20px;
+      z-index: 10;
+    }
+
+    .BZ1btnOk {
+      position: absolute;
+      top: 50%;
+      transform: translateY(-50%);
+      right: 20px;
+      z-index: 10;
+      display: flex;
+      flex-direction: column;
+      height: 100px;
+      justify-content: space-between;
+    }
+
+    .e_row {
+      padding-right: 50px;
+      display: flex;
+      margin-bottom: 30px;
+
+      .e_rowL {
+        width: 80px;
+        text-align: right;
+        position: relative;
+        top: 3px;
+
+        &>span {
+          color: #ff4d4f;
+          position: relative;
+          top: 3px;
+        }
+      }
+
+      .e_rowR {
+        width: calc(100% - 82px);
+      }
+
+    }
+
+    .e_rowLook {
+
+      .e_rowL {
+        top: 6px;
+      }
+
+      .ant-input-textarea {
+        pointer-events: none;
+
+        textarea {
+          border: none;
+        }
+
+        .ant-input-data-count {
+          opacity: 0;
+        }
+      }
+    }
+  }
+}

+ 164 - 0
后台/src/pages/BZ1Intro/index.tsx

@@ -0,0 +1,164 @@
+import React, {
+  useCallback,
+  useEffect,
+  useMemo,
+  useRef,
+  useState,
+} from "react";
+import styles from "./index.module.scss";
+import { Button, Popconfirm } from "antd";
+import TextArea from "antd/es/input/TextArea";
+import UpFileMore from "@/components/Z_upFileMore";
+import { FileImgListType } from "@/types";
+import { BZ1_APIgetInfo, BZ1_APIsetInfo } from "@/store/action/BZ1Intro";
+import classNames from "classnames";
+import { MessageFu } from "@/utils/message";
+
+type InfoType = {
+  file: FileImgListType[];
+  data: {
+    content: string;
+    dirCode: string;
+  };
+};
+
+function BZ1Intro() {
+  // 接口是否请求数据完成
+  const [isGetData, setIsGetData] = useState(0);
+
+  // 是否是编辑
+  const [isEdit, setIsEdit] = useState(false);
+
+  const getInfoFu = useCallback(async () => {
+    const res = await BZ1_APIgetInfo();
+    if (res.code === 0) {
+      if (isGetData === 0) setIsGetData(1);
+
+      setInfo({ file: res.data.file, data: res.data.entity });
+      infoRef.current = { file: res.data.file, data: res.data.entity };
+    }
+  }, [isGetData]);
+
+  useEffect(() => {
+    getInfoFu();
+  }, [getInfoFu]);
+
+  const [info, setInfo] = useState({
+    file: [],
+    data: { content: "", dirCode: "" },
+  } as InfoType);
+
+  const infoRef = useRef({} as InfoType);
+
+  const dirCodeRes = useMemo(() => {
+    if (info.data && info.data.dirCode) return info.data.dirCode;
+    else return Date.now() + "";
+  }, [info.data]);
+
+  const btnOk = useCallback(async () => {
+    const data = info.data || {};
+
+    if (data.content) {
+      const txt = data.content.replaceAll(" ", "").replaceAll("\n", "");
+      if (txt === "") return MessageFu.warning("正文-请输入有效字符!");
+    } else return MessageFu.warning("正文不能为空!");
+
+    const file = info.file || [];
+
+    const obj = {
+      content: data.content,
+      dirCode: data.dirCode,
+      img: file.map((v) => v.id).join(","),
+    };
+
+    const res = await BZ1_APIsetInfo(obj);
+
+    if (res.code === 0) {
+      MessageFu.success("编辑成功!");
+      setIsEdit(false);
+    }
+  }, [info.data, info.file]);
+
+  return (
+    <div className={styles.BZ1Intro}>
+      <div className="pageTitle">企业简介</div>
+
+      <div className="BZ1main">
+        <div className="BZ1btn" hidden={isEdit} onClick={() => setIsEdit(true)}>
+          <Button type="primary">编辑</Button>
+        </div>
+
+        <div className="BZ1btnOk" hidden={!isEdit}>
+          <Button type="primary" onClick={btnOk}>
+            提交
+          </Button>
+          <Popconfirm
+            title="放弃编辑后,信息将不会保存!"
+            okText="放弃"
+            cancelText="取消"
+            onConfirm={() => {
+              setInfo(infoRef.current);
+              setIsEdit(false);
+            }}
+          >
+            <Button>取消</Button>
+          </Popconfirm>
+        </div>
+
+        <div className={classNames("e_row", !isEdit ? "e_rowLook" : "")}>
+          <div className="e_rowL">
+            <span>* </span>正文:
+          </div>
+          <div className="e_rowR">
+            <TextArea
+              autoSize
+              placeholder={isGetData !== 0 ? "请输入内容" : ""}
+              showCount
+              maxLength={1000}
+              value={info.data.content}
+              onChange={(e) => {
+                setInfo({
+                  file: info.file,
+                  data: {
+                    content: e.target.value,
+                    dirCode: info.data.dirCode,
+                  },
+                });
+              }}
+            />
+          </div>
+        </div>
+
+        <div className="e_row">
+          <div className="e_rowL">
+            <span> </span>图片:
+          </div>
+          <div className="e_rowR">
+            {isGetData === 0 ? null : info.file &&
+              info.file.length <= 0 &&
+              !isEdit ? (
+              <div style={{ position: "relative", top: "3px" }}>(空)</div>
+            ) : null}
+
+            <UpFileMore
+              myUrl="cms/block/upload/company"
+              max={10}
+              fileList={info.file}
+              setFileList={(data) => {
+                setInfo({ file: data, data: info.data });
+              }}
+              isLook={!isEdit}
+              fileCheck={false}
+              size={5}
+              dirCode={dirCodeRes}
+            />
+          </div>
+        </div>
+      </div>
+    </div>
+  );
+}
+
+const MemoBZ1Intro = React.memo(BZ1Intro);
+
+export default MemoBZ1Intro;

+ 5 - 0
后台/src/pages/BZ2Qhistory/index.module.scss

@@ -0,0 +1,5 @@
+.BZ2Qhistory{
+  :global{
+    
+  }
+}

+ 14 - 0
后台/src/pages/BZ2Qhistory/index.tsx

@@ -0,0 +1,14 @@
+import React from "react";
+import styles from "./index.module.scss";
+ function BZ2Qhistory() {
+  
+  return (
+    <div className={styles.BZ2Qhistory}>
+      <h1>BZ2Qhistory</h1>
+    </div>
+  )
+}
+
+const MemoBZ2Qhistory = React.memo(BZ2Qhistory);
+
+export default MemoBZ2Qhistory;

+ 38 - 0
后台/src/pages/C0Tripartite/C0Edit/index.module.scss

@@ -0,0 +1,38 @@
+.C0Edit {
+  :global {
+    .ant-modal-close {
+      display: none;
+    }
+
+    .ant-modal {
+      width: 800px !important;
+    }
+
+    .C0Emain {
+      border-top: 1px solid #999999;
+      padding-top: 15px;
+      width: 100%;
+
+      .e_row {
+        padding-right: 50px;
+        display: flex;
+
+        .e_rowL {
+          width: 63px;
+          text-align: right;
+
+          &>span {
+            color: #ff4d4f;
+            position: relative;
+            top: 3px;
+          }
+        }
+
+        .e_rowR {
+          width: calc(100% - 65px);
+        }
+
+      }
+    }
+  }
+}

+ 156 - 0
后台/src/pages/C0Tripartite/C0Edit/index.tsx

@@ -0,0 +1,156 @@
+import React, { useCallback, useEffect, useRef, useState } from "react";
+import styles from "./index.module.scss";
+import { Button, Form, FormInstance, Input, Modal, Popconfirm } from "antd";
+import { C0TableType } from "@/types";
+import UpFileOne from "@/components/Z_upFileOne";
+import TextArea from "antd/es/input/TextArea";
+import { C0_APIedit } from "@/store/action/C0Tripartite";
+import { MessageFu } from "@/utils/message";
+
+type Props = {
+  info: C0TableType;
+  closeFu: () => void;
+  editFu: () => void;
+};
+
+function C0Edit({ info, closeFu, editFu }: Props) {
+  useEffect(() => {
+    if (info.id > 0) {
+      FormBoxRef.current?.setFieldsValue(info);
+      setCover(info.icon);
+    }
+  }, [info]);
+
+  // 设置表单初始数据(区分编辑和新增)
+  const FormBoxRef = useRef<FormInstance>(null);
+
+  const [fromCheck, setFromCheck] = useState(false);
+
+  const [cover, setCover] = useState("");
+
+  // 没有通过校验
+  const onFinishFailed = useCallback(() => {
+    setFromCheck(true);
+    // return MessageFu.warning("有表单不符号规则!");
+  }, []);
+
+  const onFinish = useCallback(
+    async (values: any) => {
+      if (!cover) {
+        setFromCheck(true);
+        return;
+      }
+
+      const obj = {
+        ...values,
+        id: info.id > 0 ? info.id : null,
+        icon: cover,
+      };
+
+      const res = await C0_APIedit(obj);
+
+      if (res.code === 0) {
+        MessageFu.success(info.id > 0 ? "编辑成功!" : "新增成功!");
+        editFu();
+        closeFu();
+      }
+    },
+    [closeFu, cover, editFu, info.id]
+  );
+
+  return (
+    <Modal
+      wrapClassName={styles.C0Edit}
+      destroyOnClose
+      open={true}
+      title={info.id > 0 ? "编辑三方平台" : "新增三方平台"}
+      footer={
+        [] // 设置footer为空,去掉 取消 确定默认按钮
+      }
+    >
+      <div className="C0Emain">
+        <Form
+          scrollToFirstError={true}
+          ref={FormBoxRef}
+          name="basic"
+          labelCol={{ span: 2 }}
+          onFinish={onFinish}
+          onFinishFailed={onFinishFailed}
+          autoComplete="off"
+        >
+          <Form.Item
+            label="名称"
+            name="name"
+            rules={[{ required: true, message: "请输入名称!" }]}
+            getValueFromEvent={(e) => e.target.value.replace(/\s+/g, "")}
+          >
+            <Input maxLength={15} showCount placeholder="请输入内容" />
+          </Form.Item>
+
+          {/* 封面图 */}
+          <div className="e_row">
+            <div className="e_rowL">
+              <span>* </span>ICON:
+            </div>
+            <div className="e_rowR">
+              <UpFileOne
+                myUrl="cms/platform/upload"
+                cover={cover}
+                setCover={(val) => setCover(val)}
+                isLook={false}
+                coverCheck={fromCheck}
+                size={1}
+                dirCode={"tripartite"}
+                checkTxt="请上传ICON!"
+              />
+            </div>
+          </div>
+
+          <Form.Item
+            label="appid"
+            name="appId"
+            rules={[{ required: true, message: "请输入appid!" }]}
+            getValueFromEvent={(e) => e.target.value.replace(/\s+/g, "")}
+          >
+            <Input maxLength={15} showCount placeholder="请输入内容" />
+          </Form.Item>
+
+          <Form.Item
+            label="patch"
+            name="patch"
+            rules={[{ required: true, message: "请输入patch!" }]}
+            getValueFromEvent={(e) => e.target.value.replace(/\s+/g, "")}
+          >
+            <TextArea
+              autoSize
+              placeholder="请输入内容"
+              showCount
+              maxLength={200}
+            />
+          </Form.Item>
+
+          {/* 确定和取消按钮 */}
+          <br />
+          <Form.Item wrapperCol={{ offset: 10, span: 20 }}>
+            <Button type="primary" htmlType="submit">
+              提交
+            </Button>
+            &emsp;
+            <Popconfirm
+              title="放弃编辑后,信息将不会保存!"
+              okText="放弃"
+              cancelText="取消"
+              onConfirm={closeFu}
+            >
+              <Button>取消</Button>
+            </Popconfirm>
+          </Form.Item>
+        </Form>
+      </div>
+    </Modal>
+  );
+}
+
+const MemoC0Edit = React.memo(C0Edit);
+
+export default MemoC0Edit;

+ 44 - 0
后台/src/pages/C0Tripartite/index.module.scss

@@ -0,0 +1,44 @@
+.C0Tripartite {
+  background-color: #fff;
+  border-radius: 10px;
+  padding: 20px 15px;
+
+  :global {
+    .C0btn {
+      text-align: right;
+      margin-bottom: 20px;
+    }
+
+    .tableBox {
+      border-radius: 10px;
+      overflow: hidden;
+      margin-top: 15px;
+      height: calc(100% - 33px);
+      background-color: #fff;
+
+      .ant-table-body {
+        height: 675px;
+        overflow-y: auto !important;
+
+        .ant-table-row {
+          .ant-table-cell {
+            padding: 10px;
+          }
+        }
+      }
+
+      .moveTit {
+        justify-content: center;
+        position: relative;
+        display: flex;
+
+        .inco {
+          cursor: pointer;
+          margin-left: 10px;
+          font-size: 14px;
+          color: #7e8293;
+        }
+      }
+    }
+  }
+}

+ 259 - 0
后台/src/pages/C0Tripartite/index.tsx

@@ -0,0 +1,259 @@
+import React, {
+  useCallback,
+  useEffect,
+  useMemo,
+  useRef,
+  useState,
+} from "react";
+import styles from "./index.module.scss";
+import { Button, Popconfirm, Table, Tooltip } from "antd";
+import { useDispatch, useSelector } from "react-redux";
+import { RootState } from "@/store";
+import {
+  C0_APIdel,
+  C0_APIgetList,
+  C0_APIsort,
+} from "@/store/action/C0Tripartite";
+import { ExclamationCircleFilled } from "@ant-design/icons";
+
+// 表格拖动排序-----------------
+import { DndProvider, useDrag, useDrop } from "react-dnd";
+import { HTML5Backend } from "react-dnd-html5-backend";
+import { MessageFu } from "@/utils/message";
+
+import { C0TableType } from "@/types";
+import ImageLazy from "@/components/ImageLazy";
+import C0Edit from "./C0Edit";
+function C0Tripartite() {
+  const dispatch = useDispatch();
+
+  const tableInfo = useSelector(
+    (state: RootState) => state.C0Tripartite.tableInfo
+  );
+
+  const getListFu = useCallback(() => {
+    dispatch(C0_APIgetList());
+  }, [dispatch]);
+
+  useEffect(() => {
+    getListFu();
+  }, [getListFu]);
+
+  // 表格拖动排序
+  interface DraggableBodyRowProps
+    extends React.HTMLAttributes<HTMLTableRowElement> {
+    index: number;
+    moveRow: (dragIndex: number, hoverIndex: number) => void;
+  }
+
+  const type = "DraggableBodyRow";
+
+  const DraggableBodyRow = useCallback(
+    ({
+      index,
+      moveRow,
+      className,
+      style,
+      ...restProps
+    }: DraggableBodyRowProps) => {
+      // eslint-disable-next-line react-hooks/rules-of-hooks
+      const ref = useRef<HTMLTableRowElement>(null);
+      // eslint-disable-next-line react-hooks/rules-of-hooks
+      const [{ isOver, dropClassName }, drop] = useDrop({
+        accept: type,
+        collect: (monitor) => {
+          const { index: dragIndex } = monitor.getItem() || {};
+          if (dragIndex === index) {
+            return {};
+          }
+          return {
+            isOver: monitor.isOver(),
+            dropClassName:
+              dragIndex < index ? " drop-over-downward" : " drop-over-upward",
+          };
+        },
+        drop: (item: { index: number }) => {
+          if (moveRow) moveRow(item.index, index);
+        },
+      });
+      // eslint-disable-next-line react-hooks/rules-of-hooks
+      const [, drag] = useDrag({
+        type,
+        item: { index },
+        collect: (monitor) => ({
+          isDragging: monitor.isDragging(),
+        }),
+      });
+      drop(drag(ref));
+
+      return (
+        <tr
+          ref={ref}
+          className={`${className}${isOver ? dropClassName : ""}`}
+          style={{ cursor: "move", ...style }}
+          {...restProps}
+        />
+      );
+    },
+    []
+  );
+
+  const components = {
+    body: {
+      row: DraggableBodyRow,
+    },
+  };
+
+  const moveRow = useCallback(
+    async (dragIndex: number, hoverIndex: number) => {
+      if (dragIndex === hoverIndex) return;
+      // 交互位置-之前的id
+      const beforeId = tableInfo[dragIndex].id;
+      const afterId = tableInfo[hoverIndex].id;
+      console.log("交换位置", beforeId, afterId);
+
+      const res = await C0_APIsort(beforeId, afterId);
+
+      if (res.code === 0) getListFu();
+    },
+    [getListFu, tableInfo]
+  );
+
+  //-------------拖动排序 end   -------------
+
+  // 新增和编辑的数据
+  const [editInfo, setEditInfo] = useState({} as C0TableType);
+
+  // 点击删除
+  const delTableFu = useCallback(
+    async (id: number) => {
+      const res = await C0_APIdel(id);
+
+      if (res.code === 0) {
+        MessageFu.success("删除成功!");
+        getListFu();
+      }
+    },
+    [getListFu]
+  );
+
+  const columns = useMemo(() => {
+    return [
+      {
+        width: 100,
+        title: (
+          <div className="moveTit">
+            序号
+            <Tooltip title="按住鼠标可拖动表格调整顺序">
+              <div className="inco" hidden={tableInfo.length < 2}>
+                <ExclamationCircleFilled />
+              </div>
+            </Tooltip>
+          </div>
+        ),
+        render: (_1: any, _2: any, index: number) => index + 1,
+      },
+      {
+        title: "三方平台名称",
+        dataIndex: "name",
+      },
+      {
+        title: "ICON",
+        render: (item: C0TableType) => (
+          <div className="tableImgAuto">
+            <ImageLazy width={60} height={60} src={item.icon} />
+          </div>
+        ),
+      },
+      {
+        title: "appid",
+        dataIndex: "appId",
+      },
+
+      {
+        title: "patch",
+        render: (item: C0TableType) =>
+          item.patch.length >= 50 ? (
+            <span style={{ cursor: "pointer" }} title={item.patch}>
+              {item.patch.substring(0, 50) + "..."}
+            </span>
+          ) : (
+            item.patch
+          ),
+      },
+      {
+        title: "操作",
+        render: (item: C0TableType) => (
+          <>
+            <Button size="small" type="text" onClick={() => setEditInfo(item)}>
+              编辑
+            </Button>
+            <Popconfirm
+              title="删除后无法恢复,是否删除?"
+              okText="删除"
+              cancelText="取消"
+              onConfirm={() => delTableFu(item.id!)}
+            >
+              <Button size="small" type="text" danger>
+                删除
+              </Button>
+            </Popconfirm>
+          </>
+        ),
+      },
+    ];
+  }, [delTableFu, tableInfo.length]);
+
+  return (
+    <div className={styles.C0Tripartite}>
+      <div className="pageTitle">三方平台</div>
+
+      <div className="C0btn">
+        <Button
+          type="primary"
+          onClick={() => {
+            if (tableInfo.length >= 10)
+              return MessageFu.warning("最多支持10条数据!");
+            setEditInfo({ id: -1 } as C0TableType);
+          }}
+        >
+          新增
+        </Button>
+      </div>
+
+      {/* 表格主体 */}
+      <div className="tableBox">
+        <DndProvider backend={HTML5Backend}>
+          <Table
+            scroll={{ y: 675 }}
+            dataSource={tableInfo}
+            columns={columns}
+            rowKey="id"
+            pagination={false}
+            components={components}
+            onRow={(_, index) => {
+              const attr = {
+                index,
+                moveRow,
+              };
+              return attr as React.HTMLAttributes<any>;
+            }}
+          />
+        </DndProvider>
+      </div>
+
+      {/* 点击新增或者编辑 */}
+      {editInfo.id ? (
+        <C0Edit
+          info={editInfo}
+          closeFu={() => setEditInfo({} as C0TableType)}
+          editFu={() => getListFu()}
+        />
+      ) : null}
+    </div>
+  );
+}
+
+const MemoC0Tripartite = React.memo(C0Tripartite);
+
+export default MemoC0Tripartite;

+ 4 - 4
后台/src/pages/Layout/index.module.scss

@@ -33,20 +33,20 @@
         .layoutLRowBox {
           font-size: 18px;
           font-weight: 700;
-          margin-bottom: 20px;
+          margin-bottom: 15px;
           color: #ccc;
 
           .layoutLRow {
             cursor: pointer;
             padding-left: 38px;
             font-size: 16px;
-            height: 40px;
-            line-height: 40px;
+            height: 36px;
+            line-height: 36px;
             opacity: .4;
             color: #fff;
 
             &:first-child {
-              margin-top: 8px;
+              margin-top: 5px;
             }
           }
 

+ 24 - 0
后台/src/pages/Layout/index.tsx

@@ -92,10 +92,34 @@ function Layout() {
         ],
       },
       {
+        id: 5,
+        name: "企业回顾",
+        son: [
+          {
+            id: 5.1,
+            name: "企业简介",
+            path: "/intro",
+            Com: React.lazy(() => import("../BZ1Intro")),
+          },
+          {
+            id: 5.2,
+            name: "企业历史",
+            path: "/Qhistory",
+            Com: React.lazy(() => import("../BZ2Qhistory")),
+          },
+        ],
+      },
+      {
         id: 3,
         name: "平台管理",
         son: [
           {
+            id: 3.2,
+            name: "三方平台",
+            path: "/tripartite",
+            Com: React.lazy(() => import("../C0Tripartite")),
+          },
+          {
             id: 3.1,
             name: "留言",
             path: "/message",

+ 15 - 0
后台/src/store/action/BZ1Intro.ts

@@ -0,0 +1,15 @@
+import http from "@/utils/http";
+
+/**
+ * BZ1获取信息
+ */
+export const BZ1_APIgetInfo = () => {
+  return http.get("cms/block/detail/1");
+};
+
+/**
+ * BZ1获取信息
+ */
+export const BZ1_APIsetInfo = (data: any) => {
+  return http.post("cms/block/save", { ...data, type: "company",id:1 });
+};

+ 39 - 0
后台/src/store/action/C0Tripartite.ts

@@ -0,0 +1,39 @@
+import http from "@/utils/http";
+import { AppDispatch } from "..";
+
+/**
+ * C0获取列表
+ */
+export const C0_APIgetList = () => {
+  return async (dispatch: AppDispatch) => {
+    const res = await http.post("cms/platform/pageList", {
+      pageNum: 1,
+      pageSize: 9999,
+      searchKey: "",
+    });
+    if (res.code === 0) {
+      dispatch({ type: "C0Tripartite/getList", payload: res.data.records });
+    }
+  };
+};
+
+/**
+ * C0排序
+ */
+export const C0_APIsort = (id1: number, id2: number) => {
+  return http.get(`cms/platform/sort/${id1}/${id2}`);
+};
+
+/**
+ * C0删除
+ */
+export const C0_APIdel = (id: number) => {
+  return http.get(`cms/platform/del/${id}`);
+};
+
+/**
+ * C0新增/编辑
+ */
+export const C0_APIedit = (data: any) => {
+  return http.post("cms/platform/save", data);
+};

+ 24 - 0
后台/src/store/reducer/C0Tripartite.ts

@@ -0,0 +1,24 @@
+import { C0TableType } from "@/types";
+
+// 初始化状态
+const initState = {
+  // 列表数据
+  tableInfo: [] as C0TableType[],
+};
+
+// 定义 action 类型
+type Props = {
+  type: "C0Tripartite/getList";
+  payload: C0TableType[];
+};
+
+// 频道 reducer
+export default function Reducer(state = initState, action: Props) {
+  switch (action.type) {
+    // 获取列表数据
+    case "C0Tripartite/getList":
+      return { ...state, tableInfo: action.payload };
+    default:
+      return state;
+  }
+}

+ 4 - 2
后台/src/store/reducer/C1Message.ts

@@ -1,8 +1,10 @@
+import { C1TableType } from "@/types/api/C1Message";
+
 // 初始化状态
 const initState = {
   // 列表数据
   tableInfo: {
-    list: [] as any[],
+    list: [] as C1TableType[],
     total: 0,
   },
 };
@@ -10,7 +12,7 @@ const initState = {
 // 定义 action 类型
 type Props = {
   type: "C1Message/getList";
-  payload: { list: any[]; total: number };
+  payload: { list: C1TableType[]; total: number };
 };
 
 // 频道 reducer

+ 2 - 0
后台/src/store/reducer/index.ts

@@ -12,6 +12,7 @@ import A6Custom from "./A6Custom";
 import A7Project from "./A7Project";
 import B1Plate from "./B1Plate";
 import B2Goods from "./B2Goods";
+import C0Tripartite from "./C0Tripartite";
 import C1Message from "./C1Message";
 import D1User from "./D1User";
 import D2Log from "./D2Log";
@@ -28,6 +29,7 @@ const rootReducer = combineReducers({
   A7Project,
   B1Plate,
   B2Goods,
+  C0Tripartite,
   C1Message,
   D1User,
   D2Log,

+ 12 - 0
后台/src/types/api/C0Tripartite.d.ts

@@ -0,0 +1,12 @@
+export type C0TableType ={
+	appId: string;
+	createTime: string;
+	creatorId?: any;
+	creatorName: string;
+	icon: string;
+	id: number;
+	name: string;
+	patch: string;
+	sort: number;
+	updateTime: string;
+}

+ 1 - 0
后台/src/types/index.d.ts

@@ -2,5 +2,6 @@ export * from './api/layot'
 export * from './api/A1Plate'
 export * from './api/A2Country'
 export * from './api/B2Goods'
+export * from './api/C0Tripartite'
 export * from './api/D1User'
 export * from './api/D2Log'