|
@@ -1,4 +1,4 @@
|
|
|
-import React, { useCallback, useEffect, useRef, useState } from "react";
|
|
|
+import React, { useCallback, useEffect, useMemo, useRef, useState } from "react";
|
|
|
import styles from "./index.module.scss";
|
|
|
import {
|
|
|
Button,
|
|
@@ -14,25 +14,17 @@ import {
|
|
|
import mapDataAll from "./data";
|
|
|
import dayjs from "dayjs";
|
|
|
import TextArea from "antd/es/input/TextArea";
|
|
|
-import Z1upImgs from "@/components/Z1upImgs";
|
|
|
-import Z2upVideos from "@/components/Z2upVideos";
|
|
|
import { MessageFu } from "@/utils/message";
|
|
|
-import Z3upFiles from "@/components/Z3upFiles";
|
|
|
import classNames from "classnames";
|
|
|
import { useSelector } from "react-redux";
|
|
|
import { RootState } from "@/store";
|
|
|
import { A1_APIaddProject, A1_APIgetInfoById } from "@/store/action/A1Project";
|
|
|
-import { A1TableType, FileImgListType } from "@/types";
|
|
|
+import { A1TableType } from "@/types";
|
|
|
import AuthCom from "@/components/AuthCom";
|
|
|
+import { getTokenInfo } from "@/utils/storage";
|
|
|
|
|
|
const { RangePicker } = DatePicker;
|
|
|
|
|
|
-type LinkType = {
|
|
|
- id: number;
|
|
|
- name: string;
|
|
|
- link: string;
|
|
|
-};
|
|
|
-
|
|
|
type Props = {
|
|
|
pageType: { txt: string; id: number };
|
|
|
closeFu: () => void;
|
|
@@ -43,23 +35,18 @@ type Props = {
|
|
|
function A1Add({ pageType, closeFu, addFu, editFu }: Props) {
|
|
|
const [lookInfo, setLookInfo] = useState({} as A1TableType);
|
|
|
|
|
|
- const [lookFile, setLookFile] = useState([] as FileImgListType[]);
|
|
|
-
|
|
|
const [isOk, setIsOk] = useState(false);
|
|
|
|
|
|
+ const userInfo = useMemo(() => {
|
|
|
+ return getTokenInfo().user;
|
|
|
+ }, []);
|
|
|
+
|
|
|
const getInfoFu = useCallback(async (id: number) => {
|
|
|
const res = await A1_APIgetInfoById(id);
|
|
|
if (res.code === 0) {
|
|
|
const info = res.data.entity;
|
|
|
setLookInfo(info);
|
|
|
|
|
|
- setDirCode(info.dirCode);
|
|
|
-
|
|
|
- const file = res.data.file || [];
|
|
|
- setLookFile(file);
|
|
|
-
|
|
|
- setLinkArr(JSON.parse(info.linkJson||"[]"));
|
|
|
-
|
|
|
const province = info.province ? info.province.split("-") : "";
|
|
|
|
|
|
const dateScope = info.dateScope ? info.dateScope.split(" 至 ") : "";
|
|
@@ -79,7 +66,6 @@ function A1Add({ pageType, closeFu, addFu, editFu }: Props) {
|
|
|
if (!pageType.id) {
|
|
|
// 新增
|
|
|
setIsOk(true);
|
|
|
- setDirCode(Date.now() + "");
|
|
|
} else {
|
|
|
// 编辑
|
|
|
getInfoFu(pageType.id);
|
|
@@ -91,45 +77,9 @@ function A1Add({ pageType, closeFu, addFu, editFu }: Props) {
|
|
|
(state: RootState) => state.A2Dict.A2Tab1_1Obj.status
|
|
|
);
|
|
|
|
|
|
- // 上传附件的code码
|
|
|
- const [dirCode, setDirCode] = useState("");
|
|
|
-
|
|
|
// 表单的ref
|
|
|
const FormBoxRef = useRef<FormInstance>(null);
|
|
|
|
|
|
- // 图片数组的ref
|
|
|
- const imgsRef = useRef<any>(null);
|
|
|
-
|
|
|
- // 视频数组的ref
|
|
|
- const videosRef = useRef<any>(null);
|
|
|
-
|
|
|
- // 有关 项目链接
|
|
|
- const [linkArr, setLinkArr] = useState<LinkType[]>([]);
|
|
|
-
|
|
|
- const addLinkFu = useCallback(() => {
|
|
|
- if (linkArr.length >= 10) return;
|
|
|
- setLinkArr([...linkArr, { id: Date.now(), name: "", link: "" }]);
|
|
|
- }, [linkArr]);
|
|
|
-
|
|
|
- const delLinkFu = useCallback(
|
|
|
- (id: number) => {
|
|
|
- setLinkArr(linkArr.filter((v) => v.id !== id));
|
|
|
- },
|
|
|
- [linkArr]
|
|
|
- );
|
|
|
-
|
|
|
- const linkChangeFu = useCallback(
|
|
|
- (id: number, val: string, type: "name" | "link") => {
|
|
|
- setLinkArr(
|
|
|
- linkArr.map((v) => ({
|
|
|
- ...v,
|
|
|
- [type]: v.id === id ? val.replace(/\s+/g, "") : v[type],
|
|
|
- }))
|
|
|
- );
|
|
|
- },
|
|
|
- [linkArr]
|
|
|
- );
|
|
|
-
|
|
|
// 没有通过校验
|
|
|
const onFinishFailed = useCallback(() => {}, []);
|
|
|
|
|
@@ -150,32 +100,12 @@ function A1Add({ pageType, closeFu, addFu, editFu }: Props) {
|
|
|
if (value.province && value.province.length)
|
|
|
province = value.province.join("-");
|
|
|
|
|
|
- // 获取图片地址
|
|
|
- const imgsRes = imgsRef.current.imgIdsRes();
|
|
|
-
|
|
|
- // 获取视频地址
|
|
|
- const videosRes = videosRef.current.videoIdsRes();
|
|
|
-
|
|
|
- // 检查链接填写完整情况
|
|
|
- const linkArrFlag = linkArr.some((v) => !v.name || !v.link);
|
|
|
- if (linkArrFlag) return MessageFu.warning("请完整填写 项目链接 !");
|
|
|
-
|
|
|
- // 项目成果
|
|
|
- const filesRes = filesRef.current.filesIdRes();
|
|
|
-
|
|
|
- const fileIdsArr = [...imgsRes, ...videosRes, ...filesRes];
|
|
|
-
|
|
|
- const fileIds = fileIdsArr.join(",");
|
|
|
-
|
|
|
const obj = {
|
|
|
...value,
|
|
|
id: pageType.txt === "add" ? null : pageType.id,
|
|
|
dateScope,
|
|
|
- fileIds,
|
|
|
- linkJson: JSON.stringify(linkArr)||"[]",
|
|
|
amount: value.amount ? value.amount : "",
|
|
|
province,
|
|
|
- dirCode,
|
|
|
};
|
|
|
const res = await A1_APIaddProject(obj);
|
|
|
if (res.code === 0) {
|
|
@@ -189,11 +119,10 @@ function A1Add({ pageType, closeFu, addFu, editFu }: Props) {
|
|
|
closeFu();
|
|
|
}
|
|
|
},
|
|
|
- [addFu, closeFu, dirCode, editFu, linkArr, pageType.id, pageType.txt]
|
|
|
+ [addFu, closeFu, editFu, pageType.id, pageType.txt]
|
|
|
);
|
|
|
|
|
|
- // 项目成功的 ref
|
|
|
- const filesRef = useRef<any>(null);
|
|
|
+
|
|
|
|
|
|
return (
|
|
|
<div className={styles.A1Add}>
|
|
@@ -210,6 +139,9 @@ function A1Add({ pageType, closeFu, addFu, editFu }: Props) {
|
|
|
onFinish={onFinish}
|
|
|
onFinishFailed={onFinishFailed}
|
|
|
autoComplete="off"
|
|
|
+ initialValues={{
|
|
|
+ snapPmUser: userInfo.realName
|
|
|
+ }}
|
|
|
>
|
|
|
<Form.Item
|
|
|
label="项目编号"
|
|
@@ -219,7 +151,6 @@ function A1Add({ pageType, closeFu, addFu, editFu }: Props) {
|
|
|
>
|
|
|
<Input
|
|
|
style={{ width: 600 }}
|
|
|
- disabled={pageType.txt === "edit"}
|
|
|
maxLength={30}
|
|
|
showCount
|
|
|
placeholder={
|
|
@@ -283,6 +214,34 @@ function A1Add({ pageType, closeFu, addFu, editFu }: Props) {
|
|
|
/>
|
|
|
</Form.Item>
|
|
|
|
|
|
+ <Form.Item
|
|
|
+ label="项目经理"
|
|
|
+ name="snapPmUser"
|
|
|
+ >
|
|
|
+ <Input
|
|
|
+ style={{ width: 600 }}
|
|
|
+ maxLength={30}
|
|
|
+ showCount
|
|
|
+ placeholder={
|
|
|
+ isOk ? (pageType.txt === "look" ? "(空)" : "请输入内容") : ""
|
|
|
+ }
|
|
|
+ />
|
|
|
+ </Form.Item>
|
|
|
+
|
|
|
+ <Form.Item
|
|
|
+ label="商务经理"
|
|
|
+ name="snapBmUser"
|
|
|
+ >
|
|
|
+ <Input
|
|
|
+ style={{ width: 600 }}
|
|
|
+ maxLength={30}
|
|
|
+ showCount
|
|
|
+ placeholder={
|
|
|
+ isOk ? (pageType.txt === "look" ? "(空)" : "请输入内容") : ""
|
|
|
+ }
|
|
|
+ />
|
|
|
+ </Form.Item>
|
|
|
+
|
|
|
{pageType.txt === "look" ? (
|
|
|
<div className="e_row">
|
|
|
<div className="e_rowL">
|
|
@@ -340,137 +299,6 @@ function A1Add({ pageType, closeFu, addFu, editFu }: Props) {
|
|
|
</Form.Item>
|
|
|
)}
|
|
|
|
|
|
- <div className="e_row">
|
|
|
- <div className="e_rowL e_rowRML">
|
|
|
- <span> </span>项目图片:
|
|
|
- </div>
|
|
|
- <div className="e_rowR">
|
|
|
- <Z1upImgs
|
|
|
- max={50}
|
|
|
- isLook={pageType.txt === "look"}
|
|
|
- ref={imgsRef}
|
|
|
- fileCheck={false}
|
|
|
- size={10}
|
|
|
- isCoverShow={true}
|
|
|
- dirCode={dirCode}
|
|
|
- myUrl="cms/project/upload"
|
|
|
- lookData={lookFile.filter((v) => v.type === "img")}
|
|
|
- />
|
|
|
- </div>
|
|
|
- </div>
|
|
|
-
|
|
|
- <div className="e_row">
|
|
|
- <div className="e_rowL e_rowL2 e_rowRML">
|
|
|
- <span> </span>项目视频:
|
|
|
- </div>
|
|
|
- <div className="e_rowR">
|
|
|
- <Z2upVideos
|
|
|
- max={10}
|
|
|
- isLook={pageType.txt === "look"}
|
|
|
- ref={videosRef}
|
|
|
- fileCheck={false}
|
|
|
- size={500}
|
|
|
- dirCode={dirCode}
|
|
|
- myUrl="cms/project/upload"
|
|
|
- lookData={lookFile.filter((v) => v.type === "video")}
|
|
|
- />
|
|
|
- </div>
|
|
|
- </div>
|
|
|
-
|
|
|
- <div className="e_row">
|
|
|
- <div className="e_rowL e_rowL2">
|
|
|
- <span> </span>项目链接:
|
|
|
- </div>
|
|
|
- <div className="e_rowR">
|
|
|
- {pageType.txt === "look" && linkArr.length <= 0 ? (
|
|
|
- <div className="lookNoneOne">{isOk ? "(空)" : ""}</div>
|
|
|
- ) : (
|
|
|
- <div className="erLinkTop" hidden={pageType.txt === "look"}>
|
|
|
- <Button onClick={addLinkFu} disabled={linkArr.length >= 10}>
|
|
|
- 新 增
|
|
|
- </Button>
|
|
|
- <span className="e_rowRtit"> 最多支持10条链接</span>
|
|
|
- </div>
|
|
|
- )}
|
|
|
-
|
|
|
- {pageType.txt === "look" ? (
|
|
|
- <>
|
|
|
- {linkArr.map((v) => (
|
|
|
- <div className="lookErLink" key={v.id}>
|
|
|
- <div className="lookErLink1">{v.name}:</div>
|
|
|
- <a
|
|
|
- title={v.link}
|
|
|
- className="lookErLink2"
|
|
|
- href={v.link}
|
|
|
- target="_blank"
|
|
|
- rel="noreferrer"
|
|
|
- >
|
|
|
- {v.link}
|
|
|
- </a>
|
|
|
- </div>
|
|
|
- ))}
|
|
|
- </>
|
|
|
- ) : (
|
|
|
- <div className="erLinkMain">
|
|
|
- {linkArr.map((v) => (
|
|
|
- <div className="erLinkRow" key={v.id}>
|
|
|
- <Input
|
|
|
- value={v.name}
|
|
|
- onChange={(e) =>
|
|
|
- linkChangeFu(v.id, e.target.value, "name")
|
|
|
- }
|
|
|
- style={{ width: 240 }}
|
|
|
- maxLength={10}
|
|
|
- showCount
|
|
|
- placeholder="请输入链接标题"
|
|
|
- />
|
|
|
-  
|
|
|
- <Input
|
|
|
- value={v.link}
|
|
|
- onChange={(e) =>
|
|
|
- linkChangeFu(v.id, e.target.value, "link")
|
|
|
- }
|
|
|
- style={{ width: 800 }}
|
|
|
- maxLength={100}
|
|
|
- showCount
|
|
|
- placeholder="请输入链接"
|
|
|
- />
|
|
|
-  
|
|
|
- <Popconfirm
|
|
|
- title="删除后无法恢复,是否删除?"
|
|
|
- okText="删除"
|
|
|
- cancelText="取消"
|
|
|
- onConfirm={() => delLinkFu(v.id)}
|
|
|
- okButtonProps={{ loading: false }}
|
|
|
- >
|
|
|
- <Button>删除</Button>
|
|
|
- </Popconfirm>
|
|
|
- </div>
|
|
|
- ))}
|
|
|
- </div>
|
|
|
- )}
|
|
|
- </div>
|
|
|
- </div>
|
|
|
-
|
|
|
- <br />
|
|
|
-
|
|
|
- <div className="e_row">
|
|
|
- <div className="e_rowL e_rowL2">
|
|
|
- <span> </span>项目成果:
|
|
|
- </div>
|
|
|
- <div className="e_rowR e_rowRML">
|
|
|
- <Z3upFiles
|
|
|
- max={10}
|
|
|
- isLook={pageType.txt === "look"}
|
|
|
- ref={filesRef}
|
|
|
- fileCheck={false}
|
|
|
- dirCode={dirCode}
|
|
|
- myUrl="cms/project/upload"
|
|
|
- lookData={lookFile.filter((v) => v.type === "doc")}
|
|
|
- />
|
|
|
- </div>
|
|
|
- </div>
|
|
|
-
|
|
|
{/* 确定和取消按钮 */}
|
|
|
<div className="A1AddBtn">
|
|
|
{pageType.txt === "look" ? null : ( // <Button onClick={closeFu}>关 闭</Button>
|