From 417fa2e9ee65aa23c453537e8109bc7546b40321 Mon Sep 17 00:00:00 2001 From: xingyongchun Date: Thu, 15 Dec 2022 15:05:09 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- web/client/assets/排队项目.xlsx | Bin 0 -> 10094 bytes .../src/sections/article/containers/index.js | 47 +++-- .../src/sections/homePage/actions/profile.js | 18 +- .../src/sections/homePage/containers/index.js | 149 ++++++++++++---- .../sections/homePage/containers/index.less | 13 +- .../sections/personnel/containers/index.js | 41 ++++- .../sections/wait/components/import_model.js | 162 ++++++++++++++++++ .../src/sections/wait/components/modeal.js | 1 - .../src/sections/wait/containers/index.js | 65 ++++++- web/client/src/utils/webapi.js | 4 +- 10 files changed, 446 insertions(+), 54 deletions(-) create mode 100644 web/client/assets/排队项目.xlsx create mode 100644 web/client/src/sections/wait/components/import_model.js diff --git a/web/client/assets/排队项目.xlsx b/web/client/assets/排队项目.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..52e785242f065037210d190b96cdfe7fe2a2946c GIT binary patch literal 10094 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 { key: "direction", hideInTable: true, dataIndex: "direction", - order: 6, + renderFormItem: (item, { type, defaultRender, ...rest }, form) => { return ( ); }, + },{ + key: "direction", + hideInTable: true, + dataIndex: "direction", + renderFormItem: (item, { type, defaultRender, ...rest }, form) => { + return ( + + + + ); + }, }, ]; const handleCancel = () => { @@ -168,6 +188,20 @@ export const Default = (props) => { } }); }; + //一键删除 + const confirm = (record) => { + const query = { + table_name: "test_project", + delete_all:'1' + }; + dispatch(delCancel(query)).then((res) => { + if (res.success) { + // 刷新 + // tableActionRef.current.reload(); + handleCancel(); + } + }); + }; //编辑 const editor = (record) => { setVisible(true); @@ -190,13 +224,14 @@ export const Default = (props) => { setCounts(res.payload.data.projects); return { ...res, - total: res.payload.data ? res.payload.data.total : 0, + // total: res.payload.data ? res.payload.data.total : 0, }; }} rowKey="id" pagination={{ showSizeChanger: true, }} + /> ({}); export default connect(mapStateToProps)(Default); - -const data = [ - { name: "yongchu", age: "18", 任务1: "v1", 计划1: "time1" }, - { name: "yongchu", age: "18", 任务1: "v1", 计划1: "time1" }, - { name: "yongchu", age: "18", 任务1: "v1", 计划1: "time1" }, - { name: "大王", age: "18", 任务1: "v1", 计划1: "time1" }, - { name: "大王", age: "18", 任务1: "v1", 计划1: "time1" }, -]; diff --git a/web/client/src/sections/homePage/actions/profile.js b/web/client/src/sections/homePage/actions/profile.js index 5bd8588..f7506ab 100644 --- a/web/client/src/sections/homePage/actions/profile.js +++ b/web/client/src/sections/homePage/actions/profile.js @@ -107,11 +107,12 @@ export function getProject() { }); } -export function getPeople() { +export function getPeople(query) { return (dispatch) => basicAction({ type: "post", dispatch: dispatch, + data:query, actionType: "PEOPLE", url: ApiTable.peopleUrl, msg: { option: "获取人员情况" }, @@ -134,7 +135,20 @@ export function getWait() { }, }); } - +export function postKeySearch(query) { + return (dispatch) => + basicAction({ + type: "post", + dispatch: dispatch, + data:query, + actionType: "PEOPLE", + url: ApiTable.postKeySearch, + msg: { option: "获取人员情况" }, + reducer: { + name: "people", + }, + }); +} export default { // getProfile, // editProfile, diff --git a/web/client/src/sections/homePage/containers/index.js b/web/client/src/sections/homePage/containers/index.js index a94decf..cf56ff4 100644 --- a/web/client/src/sections/homePage/containers/index.js +++ b/web/client/src/sections/homePage/containers/index.js @@ -1,13 +1,14 @@ /* eslint-disable react-hooks/exhaustive-deps */ -import React, { useState, useEffect } from "react"; +import React, { useState, useEffect,useRef } from "react"; import { connect } from "react-redux"; import { Spin, Tabs, Table } from "antd"; import classnames from "classnames/bind"; import styles from "./index.less"; import { push } from "react-router-redux"; import moment from "moment"; -import { getProject, getPeople, getWait } from "../actions/profile"; +import { getProject, getPeople, getWait,postKeySearch } from "../actions/profile"; import { Scroller } from "$components"; +import ProTable from "@ant-design/pro-table"; const CX = classnames.bind(styles); const topImg = "/assets/images/top.png"; @@ -15,16 +16,19 @@ const pointImg = "/assets/images/point.png"; function Management(props) { const { dispatch, user } = props - + const height = document.body.clientHeight + const width=document.body.clientWidth const [dataSource, setDataSource] = useState([]) - + const [name, setName] = useState()//名字查询 + const [ajob, setAjob] = useState()//岗位查询 const [projectData, setProjectData] = useState([]) const [peopleData, setPeopleData] = useState([]) const [waitData, setWaitData] = useState([]) - + const [counts,setCounts]=useState() + const ref = useRef(); useEffect(() => { dispatch(getProject()).then((res) => { - setProjectData(res.payload.data.projects) + setProjectData(res?.payload.data?.projects) }) dispatch(getPeople()).then((res) => { setPeopleData(res.payload.data.projects) @@ -54,8 +58,16 @@ function Management(props) { dataIndex: 'build_time', key: 'build_time', align: 'center', + defaultSortOrder: 'ascend', + sorter: { + compare: (a, b) => { + const one = moment(a.build_time).format('YYYYMMDD') + const two=moment(b.build_time).format('YYYYMMDD') + return one - two + }, + }, render: (dom, record) => { - return moment(record.build_time).format('YYYY-MM-DD') + return <>{moment(record.build_time).format('YYYY-MM-DD')=='1999-01-01'?'待定':moment(record.build_time).format('YYYY-MM-DD')} }, }, { @@ -73,33 +85,77 @@ function Management(props) { key: 'progress', align: 'center' }, + { + title: '状态', + dataIndex: 'deferred_payment', + key: 'deferred_payment', + align: 'center', + render: (dom, record) => { + const current = new Date() + return <> + {(record.progress == '研发中' && Number(moment(current).format('YYYYMMDD')) > Number(moment(record.build_time).format('YYYYMMDD')))&&moment(record.build_time).format('YYYY-MM-DD')!=='1999-01-01'||(record.progress == '测试中' && Number(moment(current).format('YYYYMMDD')) > Number(moment(record.publish_time).format('YYYYMMDD')))&&moment(record.build_time).format('YYYY-MM-DD')!=='1999-01-01'?
已延期
:
未延期
} + + }, + }, ]; const peopleCol = [ { - title: "人员姓名", - dataIndex: "name_people", - key: "name_people", - hideInSearch: true, + title: '人员姓名', + dataIndex: 'name_people', + key: 'name_people', + ellipsis: true, + width: 300, render: (dom, record) => { return record.name_people; }, - }, - { - title: "岗位", - key: "post_people", - dataIndex: "post_people", - hideInSearch: true, + fieldProps: { + onChange: (value, cs) => { + setName(value.target.value); + }, + placeholder: '请输入人员名称进行搜索', + getPopupContainer: (triggerNode) => triggerNode.parentNode, + }, + }, { + title: '岗位', + key: 'post_people', + dataIndex: 'post_people', + valueType: "select", + initialValue: null, + fieldProps: { + onChange: (value, cs) => { + console.log(value) + setAjob(value); + }, + options: [ + { + label: "全部岗位", + value: null, + }, + { + label: "研发", + value: '研发', + }, + { + label: "测试", + value: '测试', + }, + { + label: "UI", + value: 'UI', + }, + ], + }, render: (dom, record) => { return record.post_people; }, - }, + }, { title: "周一", key: "md", dataIndex: "md", hideInSearch: true, - width:220, + render: (dom, record) => { return
{record.md=='undefined'?'--' :record.md}
; }, @@ -109,7 +165,7 @@ function Management(props) { key: "td", dataIndex: "td", hideInSearch: true, - width:220, + render: (dom, record) => { return
{record.td=='undefined'?'--' :record.td}
; }, @@ -119,7 +175,7 @@ function Management(props) { key: "wd", dataIndex: "wd", hideInSearch: true, - width:220, + render: (dom, record) => { return
{record.wd=='undefined'?'--' :record.wd}
; }, @@ -129,7 +185,7 @@ function Management(props) { key: "thd ", dataIndex: "thd ", hideInSearch: true, - width:220, + render: (dom, record) => { return
{record.thd=='undefined'?'--' :record.thd}
; }, @@ -139,7 +195,7 @@ function Management(props) { key: "fd", dataIndex: "fd", hideInSearch: true, - width:220, + render: (dom, record) => { return
{record.fd=='undefined'?'--' :record.fd}
; }, @@ -196,33 +252,64 @@ function Management(props) { }, ]; + return ( <> -
+ +
-
-
+
+
本周在研项目
/Research project this week
- +
-
+
待研发项目
/Project to be developed
-
+
-
+
人员情况
/Information on Personnel
{/* */} -
+ { + + if (name || ajob) { + const query = { + value1:name, + value2:ajob, + } + const res = await dispatch(postKeySearch(query)); + setPeopleData(res?.payload.data.projects); + return { + ...res, + // total: res.payload.data.data ? res.payload.data.total : 0, + }; + } else { + const res = await dispatch(getPeople()); + console.log(res) + setPeopleData(res?.payload.data.projects); + return { + ...res, + // total: res.payload.data.data ? res.payload.data.total : 0, + }; + } + + }} + onReset={(v) => { + setName(null) + setAjob(null) + }} + /> {/* */} diff --git a/web/client/src/sections/homePage/containers/index.less b/web/client/src/sections/homePage/containers/index.less index b7a2005..2f847bc 100644 --- a/web/client/src/sections/homePage/containers/index.less +++ b/web/client/src/sections/homePage/containers/index.less @@ -119,18 +119,21 @@ &-main { display: flex; - width: 80%; + width: 90%; margin: 0 auto; + height: 40vh; justify-content: space-between; &-box { width: 49%; - min-height: 200px; - max-height: 800px; - overflow-y: auto; + // min-height: 200px; + // max-height: 800px; + // overflow-y: auto; box-shadow: 0px 0px 5px 0px rgba(0, 0, 0, 0.5); text-align: left; padding: 5px; - +.ant-pro-card-body{ + padding: 0px 24px 0 24px !important; +} &-point { width: 14px; height: 14px; diff --git a/web/client/src/sections/personnel/containers/index.js b/web/client/src/sections/personnel/containers/index.js index fd74bc4..2ba6572 100644 --- a/web/client/src/sections/personnel/containers/index.js +++ b/web/client/src/sections/personnel/containers/index.js @@ -137,6 +137,7 @@ export const Default = (props) => { dataIndex: "direction", order: 6, renderFormItem: (item, { type, defaultRender, ...rest }, form) => { + return ( ); }, + },{ + key: "direction", + hideInTable: true, + dataIndex: "direction", + renderFormItem: (record, { type, defaultRender, ...rest }, form) => { + console.log(record) + return ( + + + + + ); + }, }, ]; const handleCancel = () => { @@ -197,6 +222,20 @@ export const Default = (props) => { } }); }; + //一键删除 + const confirm = (record) => { + const query = { + table_name: "test_people", + delete_all:'1' + }; + dispatch(delCancel(query)).then((res) => { + if (res.success) { + // 刷新 + // tableActionRef.current.reload(); + handleCancel(); + } + }); + }; //编辑 const editor = (record) => { setVisible(true); diff --git a/web/client/src/sections/wait/components/import_model.js b/web/client/src/sections/wait/components/import_model.js new file mode 100644 index 0000000..a672a0f --- /dev/null +++ b/web/client/src/sections/wait/components/import_model.js @@ -0,0 +1,162 @@ +/* + * @description : + * @Date : 2021-04-07 14:39:33 + * @FilePath : \web\client\src\sections\user\components\userManagement\importUser.js + * @useStrict : use strict + */ + +"use strict"; +import React, { useState } from "react"; +import { connect } from "react-redux"; +import { Button, Input, Card, Modal, Upload, message } from "antd"; +import { Request } from "@peace/utils"; +import request from "superagent"; +import XLSX from "xlsx"; +import { postInWait } from "../actions/article"; + +//TODO 下载模板和上传文件读取 +const ImportUser = (props) => { + const { user, dispatch, handleCancel, params, editData } = props; + const [msg, setMsg] = useState(""); + const [loading, setLoading] = useState(""); + const [postData, setPostData] = useState([]); + + const confirm = () => { + handleCancel + if (postData.length) { + console.log(postData) + setLoading(true); + dispatch(postInWait(postData)).then((res) => { + console.log(res) + + if (res.success) { + message.success("上传成功"); + handleCancel() + } + setLoading(false); + }); + } else { + message.warn("没有数据可以提交,请上传数据文件"); + } + }; + + return ( + { + setMsg(""); + setLoading(false); + setPostData([]); + handleCancel(); + }} + destroyOnClose + > + {/* */} + + + +
下载模板后填写完整后上传
+
+ { + setMsg(""); + setPostData([]); + const extNames = file.name.split("."); + let isDAE = false; + if (extNames.length > 0) { + let fileType = extNames[extNames.length - 1].toLowerCase(); + isDAE = ["xlsx", "xls"].some((f) => f == fileType); + } + if (!isDAE) { + setMsg(`只能上传 ${["xlsx", "xls"].join()} 格式的文件!`); + return false; + } + }, + onChange(info) {}, + customRequest: async (data) => { + const { file, onSuccess, onError } = data; + + const reader = new FileReader(); // 使用 FileReader 读取数据 + reader.onload = function (e) { + // 数据读取完成后的回调函数 + const data = new Uint8Array(e.target.result); + const workbook = XLSX.read(data, { type: "array" }); // workbook 是 xlsx 解析 excel 后返回的对象 + + const firstSheetName = workbook.SheetNames[0]; // 获取第一个 sheet 的名字 + const worksheet = workbook.Sheets[firstSheetName]; // 获取第一个 sheet 的内容 + const res = XLSX.utils.sheet_to_json(worksheet); // 使用 utils 里的方法转换内容为便于使用的数组 + const error = (msg) => { + setMsg(msg); + onError({ message: msg }); + }; + if (res.length > 1000) { + error("一次性上传数据行数应小于1000行,请分批上传"); + return; + } + if (!res.length) { + error("请填写至少一行数据"); + return; + } + let postData = []; + + for (let i = 0; i < res.length; i++) { + let d = res[i]; + let name_project = String(d["项目"]).trim(); + + let from_project = String(d["需求来源"]).trim(); + let contacts = String(d["对接人"]).trim(); + let consum_time = String(d["评估工时"]).trim(); + let progress = String(d["处理进度"]).trim(); + let o_name_project='' + if (!name_project || !from_project || !consum_time || !contacts||!progress) { + error(`第${i + 1} 行有空值,请填写后重新上传`); + return; + } + + + postData.push({ + name_project, + from_project,contacts,consum_time,progress + }); + } + if (postData.length) { + setPostData(postData); + } + let msg = "文件解析完成,点击确定按钮上传保存!"; + setMsg(msg); + onSuccess({ message: msg }); + }; + reader.readAsArrayBuffer(file); // 读取数据 + }, + }} + > + + +
+ {msg} +
+
+ ); +}; + +function mapStateToProps(state) { + const { auth, customizeList } = state; + return { + user: auth.user, + }; +} + +export default connect(mapStateToProps)(ImportUser); diff --git a/web/client/src/sections/wait/components/modeal.js b/web/client/src/sections/wait/components/modeal.js index fb209f8..3435bc4 100644 --- a/web/client/src/sections/wait/components/modeal.js +++ b/web/client/src/sections/wait/components/modeal.js @@ -4,7 +4,6 @@ import dayjs from 'dayjs'; function modeal(props) { const [form] = Form.useForm(); const { visible, handleOk, handleCancel, editData ,setEditData,setState} = props - console.log(editData) useEffect(() => { if (editData && visible) { form.setFieldsValue({ diff --git a/web/client/src/sections/wait/containers/index.js b/web/client/src/sections/wait/containers/index.js index 06fc68f..23a591e 100644 --- a/web/client/src/sections/wait/containers/index.js +++ b/web/client/src/sections/wait/containers/index.js @@ -8,13 +8,14 @@ import moment from "moment"; import { push } from "react-router-redux"; import { Scroller } from "$components"; import ProjectModeal from "../components/modeal"; - +import ImportModeal from "../components/import_model"; export const Default = (props) => { const { dispatch } = props; const [state, setState] = useState(false); //状态 const [counts, setCounts] = useState(); //数据 const [visible, setVisible] = useState(false); //弹窗 const [editData, setEditData] = useState(); //数据 + const [importVisible, setImportVisible] = useState(false); //弹窗 const tableActionRef = useRef(); const columns = [ @@ -90,7 +91,6 @@ export const Default = (props) => { key: "direction", hideInTable: true, dataIndex: "direction", - order: 6, renderFormItem: (item, { type, defaultRender, ...rest }, form) => { return ( + ); + }, + },{ + key: "direction", + hideInTable: true, + dataIndex: "direction", + renderFormItem: (item, { type, defaultRender, ...rest }, form) => { + return ( + + + + ); + }, + }, ]; const handleCancel = () => { tableActionRef.current.reload(); @@ -143,7 +181,10 @@ export const Default = (props) => { } }); }; - + const importHandleCancel = () => { + tableActionRef.current.reload(); + setImportVisible(false); + }; //删除资讯 const delDataList = (record) => { const query = { @@ -159,6 +200,20 @@ export const Default = (props) => { } }); }; + //一键删除 + const confirm = (record) => { + const query = { + table_name: "test_waiting", + delete_all:'1' + }; + dispatch(delCancel(query)).then((res) => { + if (res.success) { + // 刷新 + // tableActionRef.current.reload(); + handleCancel(); + } + }); + }; //编辑 const editor = (record) => { if (record) { @@ -201,6 +256,10 @@ export const Default = (props) => { setState={setState} > + ); }; diff --git a/web/client/src/utils/webapi.js b/web/client/src/utils/webapi.js index 957e728..a196f4e 100644 --- a/web/client/src/utils/webapi.js +++ b/web/client/src/utils/webapi.js @@ -12,7 +12,9 @@ export const ApiTable = { delCancel: 'deleteDB', //删除信息 //下载项目模板 - getDownProject:'downProject' + getDownProject: 'downProject', + //查询人员信息 + postKeySearch:'keySearch' }; export const RouteTable = {