|
@@ -19,20 +19,13 @@ 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 { A2_APIaddProject, A2_APIgetInfoById } from "@/store/action/A1Project";
|
|
|
+import { A1TableType, FileImgListType } from "@/types";
|
|
|
|
|
|
const { RangePicker } = DatePicker;
|
|
|
|
|
|
-const eeeeArr = [
|
|
|
- {
|
|
|
- value: "项目状态1",
|
|
|
- label: "项目状态1",
|
|
|
- },
|
|
|
- {
|
|
|
- value: "项目状态2",
|
|
|
- label: "项目状态2",
|
|
|
- },
|
|
|
-];
|
|
|
-
|
|
|
type LinkType = {
|
|
|
id: number;
|
|
|
name: string;
|
|
@@ -43,14 +36,63 @@ type Props = {
|
|
|
pageType: { txt: string; id: number };
|
|
|
closeFu: () => void;
|
|
|
addFu: () => void;
|
|
|
- editFu: () => void;
|
|
|
+ editFu: (val: string) => void;
|
|
|
};
|
|
|
|
|
|
function A1Add({ pageType, closeFu, addFu, editFu }: Props) {
|
|
|
- useEffect(() => {
|
|
|
- console.log("进来编辑和新增项目的页面~~~~~~~");
|
|
|
+ const [lookInfo, setLookInfo] = useState({} as A1TableType);
|
|
|
+
|
|
|
+ const [lookFile, setLookFile] = useState([] as FileImgListType[]);
|
|
|
+
|
|
|
+ const [isOk, setIsOk] = useState(false);
|
|
|
+
|
|
|
+ const getInfoFu = useCallback(async (id: number) => {
|
|
|
+ const res = await A2_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(" 至 ") : "";
|
|
|
+
|
|
|
+ FormBoxRef.current?.setFieldsValue({
|
|
|
+ ...info,
|
|
|
+ province,
|
|
|
+ dateScope: [dayjs(dateScope[0]), dayjs(dateScope[1])],
|
|
|
+ });
|
|
|
+
|
|
|
+ // 回显的时候闪动 问题
|
|
|
+ setIsOk(true);
|
|
|
+ }
|
|
|
}, []);
|
|
|
|
|
|
+ useEffect(() => {
|
|
|
+ if (!pageType.id) {
|
|
|
+ // 新增
|
|
|
+ setIsOk(true);
|
|
|
+ setDirCode(Date.now() + "");
|
|
|
+ } else {
|
|
|
+ // 编辑
|
|
|
+ getInfoFu(pageType.id);
|
|
|
+ }
|
|
|
+ }, [getInfoFu, pageType.id]);
|
|
|
+
|
|
|
+ // 从仓库 获取 项目状态的下拉框 数据
|
|
|
+ const statusArr = useSelector(
|
|
|
+ (state: RootState) => state.A2Dict.A2Tab1_1Obj.status
|
|
|
+ );
|
|
|
+
|
|
|
+ // 上传附件的code码
|
|
|
+ const [dirCode, setDirCode] = useState("");
|
|
|
+
|
|
|
// 表单的ref
|
|
|
const FormBoxRef = useRef<FormInstance>(null);
|
|
|
|
|
@@ -93,46 +135,55 @@ function A1Add({ pageType, closeFu, addFu, editFu }: Props) {
|
|
|
// 通过校验点击确定
|
|
|
const onFinish = useCallback(
|
|
|
async (value: any) => {
|
|
|
- console.log("通过校验", value);
|
|
|
-
|
|
|
- if (value.ffff) {
|
|
|
- console.log(
|
|
|
- "修改日期格式",
|
|
|
- dayjs(value.ffff[0]).format("YYYY-MM-DD"),
|
|
|
- dayjs(value.ffff[1]).format("YYYY-MM-DD")
|
|
|
- );
|
|
|
+ // 项目周期的处理
|
|
|
+ let dateScope = "";
|
|
|
+ if (value.dateScope && value.dateScope.length >= 1) {
|
|
|
+ dateScope =
|
|
|
+ dayjs(value.dateScope[0]).format("YYYY-MM-DD") +
|
|
|
+ " 至 " +
|
|
|
+ dayjs(value.dateScope[1]).format("YYYY-MM-DD");
|
|
|
}
|
|
|
|
|
|
+ // 项目地点的处理
|
|
|
+ let province = "";
|
|
|
+ if (value.province && value.province.length)
|
|
|
+ province = value.province.join("-");
|
|
|
+
|
|
|
// 获取图片地址
|
|
|
const imgsRes = imgsRef.current.imgIdsRes();
|
|
|
|
|
|
- console.log("获取图片地址", imgsRes);
|
|
|
-
|
|
|
// 获取视频地址
|
|
|
const videosRes = videosRef.current.videoIdsRes();
|
|
|
- console.log("获取视频地址", videosRes);
|
|
|
|
|
|
// 检查链接填写完整情况
|
|
|
const linkArrFlag = linkArr.some((v) => !v.name || !v.link);
|
|
|
-
|
|
|
if (linkArrFlag) return MessageFu.warning("请完整填写 项目链接 !");
|
|
|
|
|
|
- console.log("项目链接", linkArr);
|
|
|
-
|
|
|
- // 项目成功
|
|
|
+ // 项目成果
|
|
|
const filesRes = filesRef.current.filesIdRes();
|
|
|
- console.log("获取项目成果文件", filesRes);
|
|
|
-
|
|
|
- if (pageType.txt === "add") {
|
|
|
- MessageFu.success("新增成功!");
|
|
|
- addFu();
|
|
|
- } else if (pageType.txt === "edit") {
|
|
|
- MessageFu.success("编辑成功!");
|
|
|
- editFu();
|
|
|
+
|
|
|
+ const obj = {
|
|
|
+ ...value,
|
|
|
+ id: pageType.txt === "add" ? null : pageType.id,
|
|
|
+ dateScope,
|
|
|
+ fileIds: imgsRes + "," + videosRes + "," + filesRes,
|
|
|
+ linkJson: JSON.stringify(linkArr),
|
|
|
+ province,
|
|
|
+ dirCode,
|
|
|
+ };
|
|
|
+ const res = await A2_APIaddProject(obj);
|
|
|
+ if (res.code === 0) {
|
|
|
+ if (pageType.txt === "add") {
|
|
|
+ MessageFu.success("新增成功!");
|
|
|
+ addFu();
|
|
|
+ } else if (pageType.txt === "edit") {
|
|
|
+ MessageFu.success("编辑成功!");
|
|
|
+ editFu(value.num + " - " + value.name);
|
|
|
+ }
|
|
|
+ closeFu();
|
|
|
}
|
|
|
- closeFu();
|
|
|
},
|
|
|
- [addFu, closeFu, editFu, linkArr, pageType.txt]
|
|
|
+ [addFu, closeFu, dirCode, editFu, linkArr, pageType.id, pageType.txt]
|
|
|
);
|
|
|
|
|
|
// 项目成功的 ref
|
|
@@ -156,7 +207,7 @@ function A1Add({ pageType, closeFu, addFu, editFu }: Props) {
|
|
|
>
|
|
|
<Form.Item
|
|
|
label="项目编号"
|
|
|
- name="aaaa"
|
|
|
+ name="num"
|
|
|
rules={[{ required: true, message: "请输入项目编号!" }]}
|
|
|
getValueFromEvent={(e) => e.target.value.replace(/\s+/g, "")}
|
|
|
>
|
|
@@ -165,13 +216,19 @@ function A1Add({ pageType, closeFu, addFu, editFu }: Props) {
|
|
|
disabled={pageType.txt === "edit"}
|
|
|
maxLength={30}
|
|
|
showCount
|
|
|
- placeholder="请输入内容,不能重复"
|
|
|
+ placeholder={
|
|
|
+ isOk
|
|
|
+ ? pageType.txt === "look"
|
|
|
+ ? "(空)"
|
|
|
+ : "请输入内容,不能重复"
|
|
|
+ : ""
|
|
|
+ }
|
|
|
/>
|
|
|
</Form.Item>
|
|
|
|
|
|
<Form.Item
|
|
|
label="项目名称"
|
|
|
- name="bbbb"
|
|
|
+ name="name"
|
|
|
rules={[{ required: true, message: "请输入项目名称!" }]}
|
|
|
getValueFromEvent={(e) => e.target.value.replace(/\s+/g, "")}
|
|
|
>
|
|
@@ -179,57 +236,73 @@ function A1Add({ pageType, closeFu, addFu, editFu }: Props) {
|
|
|
style={{ width: 600 }}
|
|
|
maxLength={30}
|
|
|
showCount
|
|
|
- placeholder="请输入内容"
|
|
|
+ placeholder={
|
|
|
+ isOk ? (pageType.txt === "look" ? "(空)" : "请输入内容") : ""
|
|
|
+ }
|
|
|
/>
|
|
|
</Form.Item>
|
|
|
|
|
|
- <Form.Item label="建设单位" name="cccc">
|
|
|
+ <Form.Item label="建设单位" name="unit">
|
|
|
<Input
|
|
|
style={{ width: 600 }}
|
|
|
maxLength={30}
|
|
|
showCount
|
|
|
- placeholder={pageType.txt === "look" ? "(空)" : "请输入内容"}
|
|
|
+ placeholder={
|
|
|
+ isOk ? (pageType.txt === "look" ? "(空)" : "请输入内容") : ""
|
|
|
+ }
|
|
|
/>
|
|
|
</Form.Item>
|
|
|
|
|
|
- <Form.Item label="项目地点" name="dddd">
|
|
|
+ <Form.Item label="项目地点" name="province">
|
|
|
<Cascader
|
|
|
style={{ width: 300 }}
|
|
|
options={mapDataAll}
|
|
|
- placeholder={pageType.txt === "look" ? "(空)" : "请选择省/市"}
|
|
|
+ placeholder={
|
|
|
+ isOk ? (pageType.txt === "look" ? "(空)" : "请选择省/市") : ""
|
|
|
+ }
|
|
|
/>
|
|
|
</Form.Item>
|
|
|
|
|
|
<Form.Item
|
|
|
label="项目状态"
|
|
|
- name="eeee"
|
|
|
+ name="statusId"
|
|
|
rules={[{ required: true, message: "请选择项目状态!" }]}
|
|
|
>
|
|
|
<Select
|
|
|
- placeholder="请选择"
|
|
|
+ placeholder={
|
|
|
+ isOk ? (pageType.txt === "look" ? "(空)" : "请选择") : ""
|
|
|
+ }
|
|
|
style={{ width: 300 }}
|
|
|
- options={eeeeArr}
|
|
|
+ options={statusArr.map((v) => ({ value: v.id, label: v.name }))}
|
|
|
/>
|
|
|
</Form.Item>
|
|
|
|
|
|
{pageType.txt === "look" ? (
|
|
|
<div className="e_row">
|
|
|
<div className="e_rowL">
|
|
|
- <span> </span>项目日期:
|
|
|
+ <span> </span>项目周期:
|
|
|
+ </div>
|
|
|
+ <div className="e_rowR e_rowRLook">
|
|
|
+ {isOk
|
|
|
+ ? lookInfo.dateScope
|
|
|
+ ? lookInfo.dateScope
|
|
|
+ : "(空)"
|
|
|
+ : ""}
|
|
|
</div>
|
|
|
- <div className="e_rowR e_rowRLook">日期日期日期日期</div>
|
|
|
</div>
|
|
|
) : (
|
|
|
- <Form.Item label="项目日期" name="ffff">
|
|
|
+ <Form.Item label="项目周期" name="dateScope">
|
|
|
<RangePicker style={{ width: 300 }} />
|
|
|
</Form.Item>
|
|
|
)}
|
|
|
|
|
|
- <Form.Item label="项目简介" name="gggg">
|
|
|
+ <Form.Item label="项目简介" name="description">
|
|
|
<TextArea
|
|
|
style={{ width: 600 }}
|
|
|
autoSize
|
|
|
- placeholder={pageType.txt === "look" ? "(空)" : "请输入内容"}
|
|
|
+ placeholder={
|
|
|
+ isOk ? (pageType.txt === "look" ? "(空)" : "请输入内容") : ""
|
|
|
+ }
|
|
|
showCount
|
|
|
maxLength={500}
|
|
|
/>
|
|
@@ -240,10 +313,16 @@ function A1Add({ pageType, closeFu, addFu, editFu }: Props) {
|
|
|
<div className="e_rowL">
|
|
|
<span> </span>项目金额:
|
|
|
</div>
|
|
|
- <div className="e_rowR e_rowRLook">1000000 ¥</div>
|
|
|
+ <div className="e_rowR e_rowRLook">
|
|
|
+ {isOk
|
|
|
+ ? lookInfo.amount
|
|
|
+ ? lookInfo.amount + "¥"
|
|
|
+ : "(空)"
|
|
|
+ : ""}
|
|
|
+ </div>
|
|
|
</div>
|
|
|
) : (
|
|
|
- <Form.Item label="项目金额" name="hhhh">
|
|
|
+ <Form.Item label="项目金额" name="amount">
|
|
|
<InputNumber
|
|
|
style={{ width: 300 }}
|
|
|
addonAfter="¥"
|
|
@@ -254,7 +333,7 @@ function A1Add({ pageType, closeFu, addFu, editFu }: Props) {
|
|
|
)}
|
|
|
|
|
|
<div className="e_row">
|
|
|
- <div className="e_rowL">
|
|
|
+ <div className="e_rowL e_rowRML">
|
|
|
<span> </span>项目图片:
|
|
|
</div>
|
|
|
<div className="e_rowR">
|
|
@@ -265,14 +344,15 @@ function A1Add({ pageType, closeFu, addFu, editFu }: Props) {
|
|
|
fileCheck={false}
|
|
|
size={10}
|
|
|
isCoverShow={true}
|
|
|
- dirCode="aaaaaaaaa"
|
|
|
- myUrl="cms/goods/upload"
|
|
|
+ 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">
|
|
|
+ <div className="e_rowL e_rowL2 e_rowRML">
|
|
|
<span> </span>项目视频:
|
|
|
</div>
|
|
|
<div className="e_rowR">
|
|
@@ -282,8 +362,9 @@ function A1Add({ pageType, closeFu, addFu, editFu }: Props) {
|
|
|
ref={videosRef}
|
|
|
fileCheck={false}
|
|
|
size={500}
|
|
|
- dirCode="aaaaaaaaa"
|
|
|
- myUrl="cms/goods/upload"
|
|
|
+ dirCode={dirCode}
|
|
|
+ myUrl="cms/project/upload"
|
|
|
+ lookData={lookFile.filter((v) => v.type === "video")}
|
|
|
/>
|
|
|
</div>
|
|
|
</div>
|
|
@@ -294,9 +375,9 @@ function A1Add({ pageType, closeFu, addFu, editFu }: Props) {
|
|
|
</div>
|
|
|
<div className="e_rowR">
|
|
|
{pageType.txt === "look" && linkArr.length <= 0 ? (
|
|
|
- <div className="lookNoneOne">(空)</div>
|
|
|
+ <div className="lookNoneOne">{isOk ? "(空)" : ""}</div>
|
|
|
) : (
|
|
|
- <div className="erLinkTop">
|
|
|
+ <div className="erLinkTop" hidden={pageType.txt === "look"}>
|
|
|
<Button onClick={addLinkFu} disabled={linkArr.length >= 10}>
|
|
|
新 增
|
|
|
</Button>
|
|
@@ -304,43 +385,62 @@ function A1Add({ pageType, closeFu, addFu, editFu }: Props) {
|
|
|
</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>
|
|
|
+ {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>
|
|
|
|
|
@@ -350,14 +450,15 @@ function A1Add({ pageType, closeFu, addFu, editFu }: Props) {
|
|
|
<div className="e_rowL e_rowL2">
|
|
|
<span> </span>项目成果:
|
|
|
</div>
|
|
|
- <div className="e_rowR">
|
|
|
+ <div className="e_rowR e_rowRML">
|
|
|
<Z3upFiles
|
|
|
max={10}
|
|
|
isLook={pageType.txt === "look"}
|
|
|
ref={filesRef}
|
|
|
fileCheck={false}
|
|
|
- dirCode="aaaaaaaaa"
|
|
|
- myUrl="cms/goods/upload"
|
|
|
+ dirCode={dirCode}
|
|
|
+ myUrl="cms/project/upload"
|
|
|
+ lookData={lookFile.filter((v) => v.type === "doc")}
|
|
|
/>
|
|
|
</div>
|
|
|
</div>
|