diff --git a/src/components/fileUpload/index.js b/src/components/fileUpload/index.js index 436cf5c..7a95b60 100644 --- a/src/components/fileUpload/index.js +++ b/src/components/fileUpload/index.js @@ -74,7 +74,7 @@ export default function FileUpload({ mode, setFileIds, files, downloadUrl, uploa useEffect(() => { if (mode != "save" && files) { setFileList(files.map(file => ({ ...file, name: file.fileName, response: { data: { name: file.fileName, fileId: file.fileId,filePath:file.filePath } } }))) - setFileIds(files.map(item => ({fileId:item.response?.data?.fileId}))) + setFileIds(files.map(item => ({fileId:item.fileId}))) } }, [mode, files]) diff --git a/src/service/apiurl.js b/src/service/apiurl.js index 14eee78..f225685 100644 --- a/src/service/apiurl.js +++ b/src/service/apiurl.js @@ -6,7 +6,7 @@ const service_ykz = '/gunshiApp/ykz' const apiurl = { setMenu: service_fxdd + '/visitMenuLog/insert', setPassword: service_fxdd + '/user/updateSecretKey', - xytlogin: { + login: { login: service_xyt + '/login', info: service_xyt + '/getInfo', router: service_xyt + '/getRouters', @@ -15,10 +15,10 @@ const apiurl = { home: { videoList: service_fxdd + "/gateValveCctvRel/list", - videosrc: service_fxdd + "/attCctvBase/preview/", + videosrc: service_fxdd + "/attCctvBase/preview/", }, zmjk: { - getList : service_xyt + '/attGateB/list', + getList: service_xyt + '/attGateB/list', getInformation: service_xyt + '/attGateB/data', getDamData: service_xyt + '/gatePore/listByStcd', getVideo: service_xyt + '/gateValveCctvRel/list' @@ -30,7 +30,7 @@ const apiurl = { edit: service_ykz + '/maintainPlan/update', delete: service_ykz + '/maintainPlan/del', uploadUrl: service_ykz + '/maintainPlan/file/upload/singleSimple', - downloadUrl:service_ykz + '/maintainPlan/file/download' + downloadUrl: service_ykz + '/maintainPlan/file/download' }, ssgcjl: { page: service_ykz + '/implementProcessRecord/page', @@ -39,7 +39,7 @@ const apiurl = { delete: service_ykz + '/implementProcessRecord/del', uploadUrl: service_ykz + '/implementProcessRecord/file/upload/singleSimple', downloadUrl: service_ykz + '/implementProcessRecord/file/download', - list:service_ykz + '/implementProcessRecord/list' + list: service_ykz + '//maintainPlan/list' }, whxmys: { page: service_ykz + '/maintainProjectCheck/page', @@ -47,7 +47,7 @@ const apiurl = { edit: service_ykz + '/maintainProjectCheck/update', delete: service_ykz + '/maintainProjectCheck/del', uploadUrl: service_ykz + '/maintainProjectCheck/file/upload/singleSimple', - downloadUrl:service_ykz + '/maintainProjectCheck/file/download' + downloadUrl: service_ykz + '/maintainProjectCheck/file/download' }, cgtzgl: { page: service_ykz + '/purchaseLedger/page', @@ -55,7 +55,30 @@ const apiurl = { edit: service_ykz + '/purchaseLedger/update', delete: service_ykz + '/purchaseLedger/del', uploadUrl: service_ykz + '/purchaseLedger/file/upload/singleSimple', - downloadUrl:service_ykz + '/purchaseLedger/file/download' + downloadUrl: service_ykz + '/purchaseLedger/file/download', + export:service_ykz + '/purchaseLedger/export' + }, + kchsgl: { + page: service_ykz + '/stockRecord/page', + save: service_ykz + '/stockRecord/insert', + edit: service_ykz + '/stockRecord/update', + delete: service_ykz + '/stockRecord/del', + uploadUrl: service_ykz + '/stockRecord/file/upload/singleSimple', + downloadUrl: service_ykz + '/stockRecord/file/download', + export:service_ykz + '/stockRecord/export' + }, + spbjgl: { + page: service_ykz + '/sparePartsInfo/page', + save: service_ykz + '/sparePartsInfo/insert', + edit: service_ykz + '/sparePartsInfo/update', + delete: service_ykz + '/sparePartsInfo/del', + tree: service_ykz + "/sparePartsClassify/tree", + saveTree: service_ykz + "/sparePartsClassify/insert", + editTree: service_ykz + "/sparePartsClassify/update", + deleteTree: service_ykz + "/sparePartsClassify/del", + uploadUrl: service_ykz + '/sparePartsInfo/file/upload/singleSimple', + downloadUrl: service_ykz + '/sparePartsInfo/file/download', + export:service_ykz + '/sparePartsInfo/export' } } diff --git a/src/service/warn.js b/src/service/warn.js index 766fb3a..1c4f178 100644 --- a/src/service/warn.js +++ b/src/service/warn.js @@ -37,7 +37,7 @@ export async function getXjTreeData(params = {}) { } export async function getjdTreeData(params = {}) { - const { data, code, msg } = await httppost2(apiurl.rcgl.jdkh.khzbgl.tree) || {}; + const { data, code, msg } = await httppost2(apiurl.sbwh.spbjgl.tree) || {}; if (code !== 200) { message.error(msg || '请求失败'); return []; diff --git a/src/setupProxy.js b/src/setupProxy.js index 885a7e9..ebd07d0 100644 --- a/src/setupProxy.js +++ b/src/setupProxy.js @@ -5,8 +5,8 @@ module.exports = function (app) { app.use( '/gunshiApp', createProxyMiddleware({ - // target: 'http://local.gunshiiot.com:18083/',//测试 - target: 'http://192.168.66.7:24106/',//正式 + target: 'http://local.gunshiiot.com:18083/',//测试 + // target: 'http://192.168.66.7:24106/',//正式 // target: 'http://36.139.207.50:18083/',//移动云 // target: 'http://192.168.66.49:24105/',//移动云 changeOrigin: true, diff --git a/src/views/AppRouters.tsx b/src/views/AppRouters.tsx index b484bd1..64d5d44 100644 --- a/src/views/AppRouters.tsx +++ b/src/views/AppRouters.tsx @@ -9,6 +9,7 @@ import Ssgcjl from "./Sbwh/Ssgcjl"; import Whxmys from "./Sbwh/Whxmys"; import Cgtzgl from "./Sbwh/Cgtzgl"; import Kchsgl from "./Sbwh/Kchsgl"; +import Spbjgl from "./Sbwh/Spbjgl"; import BasicSituation from "./Gcyx/InformationSearch/BasicSituation"; import RunSituation from "./Gcyx/InformationSearch/RunSituation"; import StaticTable from "./Gcyx/InformationSearch/StaticTable"; @@ -50,6 +51,7 @@ const AppRouters: React.FC = () => { { path: 'sbwh/wxyhgl/whxmys', element: }, { path: 'sbwh/sbwzgl/cgtzgl', element: }, { path: 'sbwh/sbwzgl/kchsgl', element: }, + { path: 'sbwh/sbwzgl/bpbjgl', element: }, // 工程运行 { path: 'gcyx/xxcx/jbqk', element: }, { path: 'gcyx/xxcx/yxqk', element: }, diff --git a/src/views/Gcyx/InformationSearch/OperateLog/toolbar.js b/src/views/Gcyx/InformationSearch/OperateLog/toolbar.js index 884e719..67a32fc 100644 --- a/src/views/Gcyx/InformationSearch/OperateLog/toolbar.js +++ b/src/views/Gcyx/InformationSearch/OperateLog/toolbar.js @@ -40,7 +40,7 @@ const ToolBar = ({ setSearchVal, onSave, storeData, exportFile1 }) => { diff --git a/src/views/Gcyx/InformationSearch/StaticTable/toolbar.js b/src/views/Gcyx/InformationSearch/StaticTable/toolbar.js index ca013d5..89c2ec4 100644 --- a/src/views/Gcyx/InformationSearch/StaticTable/toolbar.js +++ b/src/views/Gcyx/InformationSearch/StaticTable/toolbar.js @@ -87,7 +87,7 @@ const ToolBar = ({ setSearchVal, onSave, storeData, exportFile1 }) => { {timeType == 0 ? : timeType == 1 ? { - const res = await httppost2(apiUrl.xytlogin.login, params) + const res = await httppost2(apiUrl.login.login, params) return res } export const info = async (params) => { - const res = await xyt_httpget2(apiUrl.xytlogin.info, params) + const res = await xyt_httpget2(apiUrl.login.info, params) return res } export const router = async (params) => { - const res = await xyt_httpget2(apiUrl.xytlogin.router, params) + const res = await xyt_httpget2(apiUrl.login.router, params) return res } diff --git a/src/views/Sbwh/Cgtzgl/form.js b/src/views/Sbwh/Cgtzgl/form.js index acbdd5a..a25458d 100644 --- a/src/views/Sbwh/Cgtzgl/form.js +++ b/src/views/Sbwh/Cgtzgl/form.js @@ -1,6 +1,6 @@ -import React,{useEffect,useState,useMemo,useRef} from 'react'; -import { Form, Button, Input, Row,Upload, Col, Table, DatePicker, InputNumber,message,Image,Modal,Typography ,Popconfirm } from 'antd'; -import { DeleteOutlined,FileWordOutlined,FilePdfOutlined,FileZipOutlined,FileExcelOutlined } from '@ant-design/icons'; +import React, { useEffect, useState, useMemo, useRef } from 'react'; +import { Form, Button, Input, Row, Upload, Col, Table, DatePicker, InputNumber, message, Image, Modal, Typography, Popconfirm } from 'antd'; +import { DeleteOutlined, FileWordOutlined, FilePdfOutlined, FileZipOutlined, FileExcelOutlined } from '@ant-design/icons'; import { formItemLayout, btnItemLayout } from '../../../components/crud/FormLayoutProps'; import apiurl from '../../../service/apiurl'; @@ -21,26 +21,59 @@ const ModalForm = ({ mode, record, onEdit, onSave, onSimilarSave }) => { { label: "设备更换", value: 1 - },{ + }, { label: "结构加固", value: 2 }, ] + + const goodsTypeList = [ + { + label: "防汛物资", + value: 0 + }, + { + label: "食品和饮水", + value: 1 + }, + { + label: "防护用具", + value: 2 + }, + { + label: "照明设备", + value: 3 + }, { + label: "金属材料类", + value: 4 + }, { + label: "其它", + value: 5 + }, + ] const [form] = Form.useForm(); const [fileIds, setFileIds] = useState() const onfinish = (values) => { - values.eventsDate = values.eventsDate?moment(values.eventsDate).format("YYYY-MM-DD 00:00:00"):'' + const userId = localStorage.getItem('userId') + const userName = localStorage.getItem('userName') + values.createUserId = userId; + values.createUserName = userName; + values.purchaseTime = values.purchaseTime ? moment(values.purchaseTime).format("YYYY-MM-DD 00:00:00") : '' + values.files = fileIds; if (mode === 'edit') { - values.files = fileIds; - values.id = record.id; - onEdit(apiurl.rcgl.gcdsj.edit,values) + onEdit(apiurl.sbwh.cgtzgl.edit, {...record, ...values}) } if (mode === 'save') { - values.files = fileIds - onSave(apiurl.rcgl.gcdsj.save,values) + onSave(apiurl.sbwh.cgtzgl.save, values) } } - + + const onValuesChange = (v,vv) => { + if (vv.quantity && vv.unitPrice) { + form.setFieldValue('totalPrice',vv.quantity * vv.unitPrice) + } + } + return ( <>
{ {...formItemLayout} onFinish={onfinish} initialValues={record} + onValuesChange={onValuesChange} > - + - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + - + options={goodsTypeList} + /> + - - dateString} - getValueProps={(value) => { - return { - value: value ? [value[0]&&moment(value[0]),value[1]&&moment(value[1])] : undefined - }; - }} - > - - - - - - - - - - - - + + - - - + + + - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + dateString} + getValueProps={(value) => ({ value: value ? moment(value) : undefined })} + > + + + + + + + + + + + + + - - + { - mode==='view'?null:( - <> - - - - - ) - } + mode === 'view' ? null : ( + <> + + + + + ) + } - + ); } diff --git a/src/views/Sbwh/Cgtzgl/index.js b/src/views/Sbwh/Cgtzgl/index.js index acd858e..c32d318 100644 --- a/src/views/Sbwh/Cgtzgl/index.js +++ b/src/views/Sbwh/Cgtzgl/index.js @@ -31,6 +31,8 @@ const Page = () => { { title: '数量', key: 'quantity', dataIndex: 'quantity', width: 140}, { title: '计量单位', key: 'unit', dataIndex: 'unit', width: 140}, { title: '单价(元)', key: 'unitPrice', dataIndex: 'unitPrice', width: 140}, + { + title: '总价(元)', key: 'totalPrice', dataIndex: 'totalPrice', width: 140}, { title: '采购时间', key: 'purchaseTime', dataIndex: 'purchaseTime', width: 150, }, @@ -79,7 +81,7 @@ const Page = () => { let params = { ...searchVal, } - httppost5(apiurl.pxjh.export, params).then(res => { + httppost5(apiurl.sbwh.cgtzgl.export, params).then(res => { exportFile(`采购台账管理.xlsx`,res.data) }) } @@ -95,7 +97,7 @@ const Page = () => { return ( <> -
+
{ diff --git a/src/views/Sbwh/Kchsgl/form.js b/src/views/Sbwh/Kchsgl/form.js index ed96a2b..a6b953a 100644 --- a/src/views/Sbwh/Kchsgl/form.js +++ b/src/views/Sbwh/Kchsgl/form.js @@ -1,16 +1,10 @@ import React,{useEffect,useState,useMemo,useRef} from 'react'; import { Form, Button, Input, Row,Upload, Col, Table, DatePicker, InputNumber,message,Image,Modal,Typography ,Popconfirm } from 'antd'; -import { DeleteOutlined,FileWordOutlined,FilePdfOutlined,FileZipOutlined,FileExcelOutlined } from '@ant-design/icons'; import { formItemLayout, btnItemLayout } from '../../../components/crud/FormLayoutProps'; - import apiurl from '../../../service/apiurl'; import FileUpload from '../../../components/fileUpload'; import NormalSelect from '../../../components/Form/NormalSelect'; - import "./index.less" -import moment from 'moment'; -const { RangePicker } = DatePicker -const url = "http://223.75.53.141:9102/test.by-lyf.tmp" const ModalForm = ({ mode, record, onEdit, onSave, onSimilarSave }) => { const types = [ @@ -50,15 +44,16 @@ const ModalForm = ({ mode, record, onEdit, onSave, onSimilarSave }) => { const [form] = Form.useForm(); const [fileIds, setFileIds] = useState() const onfinish = (values) => { - values.eventsDate = values.eventsDate?moment(values.eventsDate).format("YYYY-MM-DD 00:00:00"):'' + const userId = localStorage.getItem('userId') + const userName = localStorage.getItem('userName') + values.createUserId = userId; + values.createUserName = userName; + values.files = fileIds; if (mode === 'edit') { - values.files = fileIds; - values.id = record.id; - onEdit(apiurl.rcgl.gcdsj.edit,values) + onEdit(apiurl.sbwh.kchsgl.edit,{...record,...values}); } if (mode === 'save') { - values.files = fileIds - onSave(apiurl.rcgl.gcdsj.save,values) + onSave(apiurl.sbwh.kchsgl.save,values) } } @@ -74,7 +69,7 @@ const ModalForm = ({ mode, record, onEdit, onSave, onSimilarSave }) => { @@ -100,7 +95,7 @@ const ModalForm = ({ mode, record, onEdit, onSave, onSimilarSave }) => { { @@ -124,7 +119,7 @@ const ModalForm = ({ mode, record, onEdit, onSave, onSimilarSave }) => { @@ -133,7 +128,7 @@ const ModalForm = ({ mode, record, onEdit, onSave, onSimilarSave }) => { @@ -144,7 +139,7 @@ const ModalForm = ({ mode, record, onEdit, onSave, onSimilarSave }) => { @@ -162,6 +157,8 @@ const ModalForm = ({ mode, record, onEdit, onSave, onSimilarSave }) => { wrapperCol={{ span: 19 }} > { 2: "防护用具", 3: "照明设备", 4: "金属材料类", - 5:"其它", + 5: "其它", } const types1 = { @@ -28,35 +28,35 @@ const Page = () => { const refModal = useRef(); const [searchVal, setSearchVal] = useState(false) const columns = [ - { title: '序号', key: 'inx', dataIndex: 'inx', width: 60, align:"center" }, - { title: '物资名称', key: 'name', dataIndex: 'name', width: 150, ellipsis: true }, + { title: '序号', key: 'inx', dataIndex: 'inx', width: 60, align: "center" }, + { title: '物资名称', key: 'goodsName', dataIndex: 'goodsName', width: 150, ellipsis: true }, { title: '类型', key: 'type', dataIndex: 'type', width: 140, render: (value) => {types1[value]}, }, { - title: '类别', key: 'type', dataIndex: 'type', width: 140, + title: '类别', key: 'goodsType', dataIndex: 'goodsType', width: 140, render: (value) => {types[value]}, }, - { title: '规格型号', key: 'adress', dataIndex: 'adress', width: 150, ellipsis: true }, - { title: '记录数量', key: 'type', dataIndex: 'type', width: 140}, - { title: '计量单位', key: 'type', dataIndex: 'type', width: 140}, - { title: '记录人', key: 'type', dataIndex: 'type', width: 140}, + { title: '规格型号', key: 'specs', dataIndex: 'specs', width: 150, ellipsis: true }, + { title: '记录数量', key: 'quantity', dataIndex: 'quantity', width: 140 }, + { title: '计量单位', key: 'unit', dataIndex: 'unit', width: 140 }, + { title: '记录人', key: 'createUserName', dataIndex: 'createUserName', width: 140 }, { - title: '记录时间', key: 'eventsDate', dataIndex: 'eventsDate', width: 150, + title: '记录时间', key: 'createTime', dataIndex: 'createTime', width: 150, }, { - title: '操作', key: 'operation', width: 200, fixed: 'right',align: 'center', + title: '操作', key: 'operation', width: 200, fixed: 'right', align: 'center', render: (value, row, index) => ( () => command(cmd)(row)} />) }, ]; - + const width = useMemo(() => columns.reduce((total, cur) => total + (cur.width), 0), [columns]); const command = (type) => (params) => { @@ -67,31 +67,31 @@ const Page = () => { } else if (type === 'view') { refModal.current.showView(params); } else if (type === 'del') { - refModal.current.onDeleteGet(apiurl.rcgl.gcdsj.delete + `/${params.id}`); + refModal.current.onDeleteGet(apiurl.sbwh.kchsgl.delete + `/${params.id}`); } } - - - const { tableProps, search, refresh } = usePageTable(createCrudService(apiurl.sbwh.whfabz.page).find_noCode); - /** - * @description 处理成功的回调 - */ - const successCallback = () => { - refresh() -} - // 导出 - const exportExcel = () => { - let params = { - ...searchVal, - } - httppost5(apiurl.pxjh.export, params).then(res => { - exportFile(`采购台账管理.xlsx`,res.data) - }) + const { tableProps, search, refresh } = usePageTable(createCrudService(apiurl.sbwh.kchsgl.page).find_noCode); + + /** + * @description 处理成功的回调 + */ + const successCallback = () => { + refresh() + } + + // 导出 + const exportExcel = () => { + let params = { + ...searchVal, } - useEffect(()=>{ + httppost5(apiurl.sbwh.kchsgl.export, params).then(res => { + exportFile(`库存核算管理.xlsx`, res.data) + }) + } + useEffect(() => { const params = { search: { ...searchVal, @@ -99,12 +99,12 @@ const Page = () => { }; search(params) }, [searchVal]) - - + + return ( <> -
-
+
+
{ />
- +
diff --git a/src/views/Sbwh/Kchsgl/toolbar.js b/src/views/Sbwh/Kchsgl/toolbar.js index 53f8b0b..9d340f0 100644 --- a/src/views/Sbwh/Kchsgl/toolbar.js +++ b/src/views/Sbwh/Kchsgl/toolbar.js @@ -59,10 +59,10 @@ const ToolBar = ({ setSearchVal, onSave, storeData, exportFile1 }) => { <>
- + - + diff --git a/src/views/Sbwh/Spbjgl/AdcdTreeSelector/index.less b/src/views/Sbwh/Spbjgl/AdcdTreeSelector/index.less new file mode 100644 index 0000000..ac6ad25 --- /dev/null +++ b/src/views/Sbwh/Spbjgl/AdcdTreeSelector/index.less @@ -0,0 +1,47 @@ +li.ant-tree-treenode-disabled > span:not(.ant-tree-switcher), +li.ant-tree-treenode-disabled > .ant-tree-node-content-wrapper, +li.ant-tree-treenode-disabled > .ant-tree-node-content-wrapper span{ + color: #000 !important; + font-weight: bold; +} + +.treeBox1{ + .ant-tree-node-content-wrapper{ + position: static !important; + } + .hover-ele{ + &:hover{ + color:#259dff + } + } +} +.AdcdTreeSelectorStyle{ + .ant-input-wrapper{ + + .ant-input-affix-wrapper{ + width: 98%; + } + .ant-input-group-addon{ + .ant-btn{ + width: 34px; + height: 34px; + } + } + } + + .treeTitle { + display: flex; + justify-content: space-between; + .treeBtn { + display: none; + } +} +.treeTitle:hover { + .treeBtn { + display: flex; + } +} +} +.no-matter{ + opacity: 0.5; +} \ No newline at end of file diff --git a/src/views/Sbwh/Spbjgl/AdcdTreeSelector/index.tsx b/src/views/Sbwh/Spbjgl/AdcdTreeSelector/index.tsx new file mode 100644 index 0000000..f5400e5 --- /dev/null +++ b/src/views/Sbwh/Spbjgl/AdcdTreeSelector/index.tsx @@ -0,0 +1,315 @@ +import React, { useState, useEffect } from 'react'; +import { Tree, Input, Checkbox, Spin, Modal, Form, Col, Row, message, Space } from 'antd'; +import { EditOutlined, PlusCircleOutlined, DeleteOutlined, ExclamationCircleOutlined } from '@ant-design/icons'; +import './index.less'; +import { formItemLayout, btnItemLayout } from '../../../../components/crud/FormLayoutProps'; +import { getjdTreeData } from '../../../../service/warn'; +import apiurl from '../../../../service/apiurl'; +import { httppost3, httpget6 } from '../../../../utils/request'; + +const { Search } = Input; + +type IProps = { + onSelectFun?: any; + setAdcd?: any; + showCheckbox: any; + tableName?: any; + onChangeOpen?: any; + hasAlertBox?: boolean;//顶部是否有预警条 + isFetch?: boolean; +} +const { confirm } = Modal; +const AdcdTreeSelector: React.FC = ({ onSelectFun, setAdcd, showCheckbox, tableName, hasAlertBox }) => { + const [loading, setLoading] = useState(true); + const [treeData, setTreeData] = useState([]); + const [newTreeData, setNewTreeData] = useState([]); + const [isFiter, setIsFiter] = useState(false); + const [expandedKeys, setExpandedKeys] = useState([]); + const [checkedKeys, setCheckedKeys] = useState([]); + const [selectedKeys, setSelectedKeys] = useState([]); + const [selectedItem, setSelectedItem] = useState({}); + const [autoExpandParent, setAutoExpandParent] = useState(true); + const [treeBoxHeight, setTreeBoxHeight] = useState({}); + const [jdOpen, setJdOpen] = useState(false) + const [form] = Form.useForm(); + const [mode, setMode] = useState('') + const [itemDetail, setItemDetail] = useState({}) + const [orderMax, setOrderMax] = useState(0) + useEffect(() => { + getCustomerTreeData(); + }, []); + + useEffect(() => { + if (tableName) { + setSelectedKeys([]); + } + }, [tableName]); + + useEffect(() => { + //根据预警条计/多选框计算高度 + if (hasAlertBox) { + if (showCheckbox) { + setTreeBoxHeight({ height: "calc( 100vh - 240px )" }) + } else { + setTreeBoxHeight({ height: "calc( 100vh - 210px )" }) + } + } else { + if (showCheckbox) { + setTreeBoxHeight({ height: "calc( 100vh - 224px )" }) + } else { + setTreeBoxHeight({ height: "calc( 100vh - 194px )" }) + } + } + }, [hasAlertBox]) + + const getCustomerTreeData = async () => { + const adcdTreedata: any = await getjdTreeData(); + const item: any = adcdTreedata + if (item) { + setSelectedKeys([item[0]?.id]) + setAdcd(item[0]?.id) + } + if (adcdTreedata.length > 0) { + handelTreeData(adcdTreedata); + setTreeData(adcdTreedata); + setLoading(false); + setOrderMax(Math.max(...adcdTreedata.map((item: any) => item?.orderIndex))) + } + }; + // @ts-ignore + const handelTreeData = (data) => { + if (data.length > 0) { + // @ts-ignore + data.forEach(item => { + item.title = item.name; + item.key = item.id; + if (item.children && item.children.length > 0) { + handelTreeData(item.children); + } + }); + } + } + + const onExpand = (expandedKeysValue: any) => { + setExpandedKeys(expandedKeysValue); + setAutoExpandParent(false); + }; + + + const onSelect = (selectedKeysValue: any, info: any) => { + setSelectedKeys(selectedKeysValue); + setSelectedItem(info); + + if (info.selectedNodes.length > 0) { + let selectData = info.selectedNodes[0]; + + let adcdVal = ""; + adcdVal = selectData.key; + + let params = { id: adcdVal }; + if (onSelectFun) { + onSelectFun(params); + } + if (setAdcd) { + setAdcd(adcdVal) + } + } else { + let params = { id: "" }; + if (onSelectFun) { + onSelectFun(params); + } + if (setAdcd) { + setAdcd("") + } + } + }; + + + + + + // 删除 + const deleteJd = (v: any) => { + confirm({ + title: '删除', + icon: , + content: '确认删除此数据', + okText: '确定', + okType: 'primary', + cancelText: '取消', + onOk: async () => { + try { + const res = await httpget6(apiurl.sbwh.spbjgl.deleteTree + `/${v.id}`) + if (res.code === 200) { + message.success('删除成功'); + getCustomerTreeData(); + } + if (res.code === 400) { + message.error(res.description); + } + } catch (error) { + console.log(error); + } + }, + onCancel() { + console.log('Cancel'); + }, + }); + } + + // 新增节点 + const saveJd = (v: any) => { + if (v) { + // form.setFieldValue('name', v.title); + setItemDetail(v); + } + setJdOpen(true); + setMode("save"); + } + + // 编辑节点 + const editJd = (v: any) => { + setJdOpen(true); + form.setFieldsValue(v); + setMode("edit"); + setItemDetail(v); + } + + const onOk = async () => { + const name = form.getFieldValue('name').replace(/\s/g, ""); + if (!name) return + const url = mode == "save" ? apiurl.sbwh.spbjgl.saveTree : apiurl.sbwh.spbjgl.editTree; + let saveParams = { + name, + parentId: itemDetail?.id || undefined, + orderIndex: itemDetail?.orderIndex || orderMax + } + let editParams = { + ...itemDetail, + name + } + try { + const res = await httppost3(url, mode == "save" ? saveParams : editParams) + if (res.code == 200) { + message.success(mode == "save" ? '新增成功' : '编辑成功'); + setJdOpen(false); + getCustomerTreeData(); + form.resetFields(); + } else if (res.code == 400) { + message.error(res.description); + } + } catch (error) { + console.log(error); + + } + } + return ( +
+
备品备件分类
+ { + loading ? +
+ +
: null + } + +
+
+ { + treeData.length > 0 && + { + return ( +
+ {v.title} + + {v.children && { + e.stopPropagation(); + saveJd(v); + }} + className='hover-ele' + />} + { + e.stopPropagation(); + editJd(v); + }} + className='hover-ele' + /> + { + e.stopPropagation(); + deleteJd(v); + }} + className='hover-ele' + /> + + +
+ ) + }} + /> + } +
+ +
+ { setJdOpen(false); form.resetFields() }} + onOk={onOk} + > + + +
+ + + + + + + + + ); +}; + +export default AdcdTreeSelector; diff --git a/src/views/Sbwh/Spbjgl/form.js b/src/views/Sbwh/Spbjgl/form.js new file mode 100644 index 0000000..bea69bc --- /dev/null +++ b/src/views/Sbwh/Spbjgl/form.js @@ -0,0 +1,132 @@ +import React, { useEffect, useState, useMemo, useRef } from 'react'; +import { Form, Button, Input, Row, Upload, Col, Table, DatePicker, InputNumber, message, Image, Modal, Typography, Popconfirm } from 'antd'; +import { formItemLayout, btnItemLayout } from '../../../components/crud/FormLayoutProps'; +import apiurl from '../../../service/apiurl'; +import FileUpload from '../../../components/fileUpload'; +import NormalSelect from '../../../components/Form/NormalSelect'; +import moment from 'moment'; +import { httppost2 } from '../../../utils/request'; +const { RangePicker } = DatePicker + +const ModalForm = ({ mode, record, onEdit, onSave, onSimilarSave }) => { + const [form] = Form.useForm(); + const [fileIds, setFileIds] = useState() + const onfinish = (values) => { + const userId = localStorage.getItem('userId') + const userName = localStorage.getItem('userName') + values.createUserId = userId; + values.createUserName = userName; + values.files = fileIds; + values.classifyId = record.code; + if (mode === 'edit') { + onEdit(apiurl.sbwh.spbjgl.edit, {...record,...values}) + } + if (mode === 'save') { + onSave(apiurl.sbwh.spbjgl.save, values) + } + } + + + return ( + <> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { + mode === 'view' ? null : ( + <> + + + + + ) + } + + + + ); +} + +export default ModalForm; diff --git a/src/views/Sbwh/Spbjgl/index.js b/src/views/Sbwh/Spbjgl/index.js new file mode 100644 index 0000000..d79227c --- /dev/null +++ b/src/views/Sbwh/Spbjgl/index.js @@ -0,0 +1,124 @@ +import React, { Fragment, useRef, useMemo,useEffect,useState } from 'react'; +import BasicCrudModal from '../../../components/crud/BasicCrudModal'; +import { Table, Card, Modal, Form, Input, Button, Row,Col, Timeline, message, Tabs,Image,Switch } from 'antd'; +import { useSelector } from 'react-redux'; +import AdcdTreeSelector from "./AdcdTreeSelector"; +import ToolBar from './toolbar'; +import ModalForm from './form'; +import apiurl from '../../../service/apiurl'; +import usePageTable from '../../../components/crud/usePageTable2'; +import { createCrudService } from '../../../components/crud/_'; +import { CrudOpRender_text } from '../../../components/crud/CrudOpRender'; +import { httppost5 } from '../../../utils/request'; +import { exportFile } from '../../../utils/tools.js'; +const Page = () => { + const refModal = useRef(); + const columns = [ + { title: '序号', key: 'inx', dataIndex: 'inx', width: 60, align: "center" }, + {title: '名称', key: 'name', dataIndex: 'name', width: 150}, + { + title: '类别', key: 'classifyName', dataIndex: 'classifyName', width: 150,ellipsis:true}, + { + title: '规格型号', key: 'specs', dataIndex: 'specs', width: 150 }, + { + title: '数量', key: 'quantity', dataIndex: 'quantity', width: 100, + }, + { + title: '单位', key: 'unit', dataIndex: 'unit', width: 100, + }, + {title: '厂家', key: 'manufactor', dataIndex: 'manufactor', width: 150 }, + {title: '备注', key: 'remark', dataIndex: 'remark', width: 150 }, + {title: '创建时间', key: 'createTime', dataIndex: 'createTime', width: 150 }, + { + title: '操作', key: 'operation', width: 200, fixed: 'right',align: 'center', + render: (value, row, index) => ( + () => command(cmd)(row)} />) + }, + ]; + const [code, setCode] = useState() + + + const width = useMemo(() => columns.reduce((total, cur) => total + (cur.width), 0), [columns]); + + + + const command = (type) => (params) => { + if (type === 'save') { + refModal.current.showSave({code}); + } else if (type === 'edit') { + refModal.current.showEdit({ ...params,code }); + } else if (type === 'view') { + refModal.current.showView(params); + } else if (type === 'del') { + refModal.current.onDeleteGet(apiurl.sbwh.spbjgl.delete + `/${params.id}`); + } + } + + + + const { tableProps, search, refresh } = usePageTable(createCrudService(apiurl.sbwh.spbjgl.page).find_noCode); + const [searchVal, setSearchVal] = useState(false) + + // 导出 + const exportExcel = () => { + let params = { + ...searchVal, + classifyId:code + } + httppost5(apiurl.sbwh.spbjgl.export, params).then(res => { + exportFile(`备品备件管理.xlsx`,res.data) + }) + } + useEffect(() => { + if (code) { + let params = { + search: { + classifyId:code, + } + }; + search(params) + } + }, [code]); + + + return ( + <> +
+
+ +
+
+ + + + +
+ + + + + + + + ); +} + +export default Page; diff --git a/src/views/Sbwh/Spbjgl/toolbar.js b/src/views/Sbwh/Spbjgl/toolbar.js new file mode 100644 index 0000000..61ccf2d --- /dev/null +++ b/src/views/Sbwh/Spbjgl/toolbar.js @@ -0,0 +1,44 @@ +import React, { useEffect, useState } from 'react'; +import { Form, Input, Button, DatePicker } from 'antd'; + +const ToolBar = ({ setSearchVal, onSave, exportFile1 }) => { + const [form] = Form.useForm(); + + const onFinish = (values) => { + setSearchVal({ ...values }); + } + + return ( + <> +
+
+ + + + + + + + + + + + + + { + (onSave) ? + + + + : null + } + + + + +
+ + ); +} + +export default ToolBar; \ No newline at end of file diff --git a/src/views/Sbwh/Ssgcjl/form.js b/src/views/Sbwh/Ssgcjl/form.js index 7c2357e..de0e4ae 100644 --- a/src/views/Sbwh/Ssgcjl/form.js +++ b/src/views/Sbwh/Ssgcjl/form.js @@ -43,12 +43,14 @@ const ModalForm = ({ mode, record, onEdit, onSave, onSimilarSave }) => { onSave(apiurl.sbwh.ssgcjl.save, values) } } - + const [faList, setFaList] = useState([]) // 获取方案list - const faList = async () => { + const getFaList = async () => { try { const res = await httppost2(apiurl.sbwh.ssgcjl.list) - debugger + if (res.code == 200) { + setFaList(res.data.map(item => ({label:item.planName,value:item.id}))); + } } catch (error) { console.log(error); @@ -63,7 +65,7 @@ const ModalForm = ({ mode, record, onEdit, onSave, onSimilarSave }) => { }, [record, mode]) useEffect(() => { - faList() + getFaList() }, []) return ( @@ -87,10 +89,15 @@ const ModalForm = ({ mode, record, onEdit, onSave, onSimilarSave }) => {
- + diff --git a/src/views/Sbwh/Ssgcjl/index.js b/src/views/Sbwh/Ssgcjl/index.js index 9a7f89e..b714959 100644 --- a/src/views/Sbwh/Ssgcjl/index.js +++ b/src/views/Sbwh/Ssgcjl/index.js @@ -69,7 +69,7 @@ const Page = () => { return ( <> -
+
{ diff --git a/src/views/Sbwh/Whfabz/form.js b/src/views/Sbwh/Whfabz/form.js index ccbe2f2..8880263 100644 --- a/src/views/Sbwh/Whfabz/form.js +++ b/src/views/Sbwh/Whfabz/form.js @@ -38,8 +38,7 @@ const ModalForm = ({ mode, record, onEdit, onSave, onSimilarSave }) => { values.endTime = values.tm?moment(values.tm[1]).format("YYYY-MM-DD 00:00:00") :''; values.files = fileIds; if (mode === 'edit') { - values.id = record.id; - onEdit(apiurl.sbwh.whfabz.edit,values) + onEdit(apiurl.sbwh.whfabz.edit,{...record,...values}) } if (mode === 'save') { onSave(apiurl.sbwh.whfabz.save,values) diff --git a/src/views/Sbwh/Whfabz/index.js b/src/views/Sbwh/Whfabz/index.js index 72d8b78..2c0b0b2 100644 --- a/src/views/Sbwh/Whfabz/index.js +++ b/src/views/Sbwh/Whfabz/index.js @@ -78,7 +78,7 @@ const Page = () => { return ( <> -
+
{ diff --git a/src/views/Sbwh/Whxmys/form.js b/src/views/Sbwh/Whxmys/form.js index f3720f4..3cbbd26 100644 --- a/src/views/Sbwh/Whxmys/form.js +++ b/src/views/Sbwh/Whxmys/form.js @@ -35,16 +35,22 @@ const ModalForm = ({ mode, record, onEdit, onSave, onSimilarSave }) => { values.createUserName = userName; values.startTime =values.tm? moment(values.tm[0]).format("YYYY-MM-DD 00:00:00") :''; values.endTime = values.tm?moment(values.tm[1]).format("YYYY-MM-DD 00:00:00") :''; + values.files = fileIds; if (mode === 'edit') { - values.files = fileIds; - values.id = record.id; - onEdit(apiurl.sbwh.whxmys.edit,values) + onEdit(apiurl.sbwh.whxmys.edit,{...record,...values}); } if (mode === 'save') { - values.files = fileIds onSave(apiurl.sbwh.whxmys.save,values) } } + + useEffect(() => { + if (mode != 'save') { + let dataSo = record.startTime && record.endTime ? + [moment(record.startTime), moment(record.endTime)]:'' + form.setFieldValue("tm", dataSo) + } + }, [record,mode]) return ( <> @@ -58,7 +64,7 @@ const ModalForm = ({ mode, record, onEdit, onSave, onSimilarSave }) => {
@@ -67,7 +73,7 @@ const ModalForm = ({ mode, record, onEdit, onSave, onSimilarSave }) => { dateString} getValueProps={(value) => { return { @@ -84,7 +90,7 @@ const ModalForm = ({ mode, record, onEdit, onSave, onSimilarSave }) => { @@ -96,7 +102,7 @@ const ModalForm = ({ mode, record, onEdit, onSave, onSimilarSave }) => { @@ -108,7 +114,7 @@ const ModalForm = ({ mode, record, onEdit, onSave, onSimilarSave }) => { @@ -120,7 +126,7 @@ const ModalForm = ({ mode, record, onEdit, onSave, onSimilarSave }) => { diff --git a/src/views/Sbwh/Whxmys/index.js b/src/views/Sbwh/Whxmys/index.js index e2a1fac..1e5596c 100644 --- a/src/views/Sbwh/Whxmys/index.js +++ b/src/views/Sbwh/Whxmys/index.js @@ -77,7 +77,7 @@ const Page = () => { return ( <> -
+
{ diff --git a/src/views/WatchData/Jcsj/toolbar.js b/src/views/WatchData/Jcsj/toolbar.js index 3654d57..58d49e1 100644 --- a/src/views/WatchData/Jcsj/toolbar.js +++ b/src/views/WatchData/Jcsj/toolbar.js @@ -61,7 +61,7 @@ const ToolBar = ({ setSearchVal, onSave, storeData, exportFile1 }) => { diff --git a/src/views/WatchData/PoliceMangant/PoliceRecord/toolbar.js b/src/views/WatchData/PoliceMangant/PoliceRecord/toolbar.js index 91182ab..754e0c5 100644 --- a/src/views/WatchData/PoliceMangant/PoliceRecord/toolbar.js +++ b/src/views/WatchData/PoliceMangant/PoliceRecord/toolbar.js @@ -57,7 +57,7 @@ const ToolBar = ({ setSearchVal, onSave, storeData, exportFile1 }) => {