import React, { useState, useRef, } from 'react'; import { Button, Tabs, Form, Input, Modal, Checkbox, message, PageHeader, Popconfirm, Progress, Spin } from 'antd'; import ProTable, { ActionType, ProColumns } from '@ant-design/pro-table'; import { getSection, exitProject, getProject, getOther, supplierRegister, exitProjectPayCheck } from './service'; import { getSupplierUser } from '@/utils/SupplierList/service' import { getProMethod,getSessionUserData } from '@/utils/session'; import '@/assets/ld_style.less'; import { history } from 'umi'; import { followUpAProjectSupplier, getDicData } from '@/utils/session'; import { getDictName, getProjectTypeCode, getURLInformation, getUrlParam, getUrlRelativePath, isEmpty, isNotEmpty, proTableValueEnum, proTableValueEnumOther } from '@/utils/CommonUtils'; import { btnAuthority } from '@/utils/authority'; import kefu from '@/assets/img/kefu.png' //智慧客服 import {submitHiddenForm, createHiddenForm} from '@/utils/CustomerService' //智慧客服 const { TabPane } = Tabs; const { TextArea } = Input; const CheckboxGroup = Checkbox.Group; const formItemLayout = { labelCol: { span: 6 }, wrapperCol: { span: 14 }, }; const plainOptions: any[] = []; const defaultCheckedList: any[] = []; const Index: React.FC<{}> = () => { const { confirm } = Modal; const checkRelationRef = useRef(); //操作数据后刷新列表 const [personList, setPersonList] = useState([]); // 负责人列表 const [plainList, setPlainList] = useState(plainOptions); // 选择标段 const [quitVisible, setQuitVisible] = useState(false); // 退出项目弹窗按钮 const [personVisible, setPersonVisible] = useState(false); // 修改负责人弹窗按钮 const [indeterminate, setIndeterminate] = useState(false); // 复选框全选 const [checkAll, setCheckAll] = useState(false); // 复选框全选 const [checkedList, setCheckedList] = useState(defaultCheckedList); // 全选选中数组 const [sectionsVal, setSectionsVal] = useState([]); // 选中数组id const [organId, setOrganId] = useState(); // id const [projectId, setProjectId] = useState(); // id const [quitForm] = Form.useForm(); const MethodDict = getProMethod(); //获取采购方式 const modalHeight = (innerHeight * 96) / 100; //招募方式 const recruitmentMethodRecord = 'recruitment_method=record'; //存储当前页面项目类型 let proTypeCode = getProjectTypeCode(); // 项目列表url const [projectParams, setProjectParams] = useState(""); const projectName = getUrlParam("projectName"); const bidMethodDict = getURLInformation("bidMethodDict"); const current = getURLInformation("current"); //获取字典 const getDict: any = getDicData(); const dictData = JSON.parse(getDict); const actionRef = useRef(); const personColumns: ProColumns<{}>[] = [ // 修改项目负责人 { title: '姓名', dataIndex: 'empName', }, { title: '手机号', dataIndex: 'mobile', search: false, }, { title: '账号', dataIndex: 'userAccount', search: false, }, { title: '操作', dataIndex: 'action', search: false, align: 'center', render: (text: any, record: any) => ( choosePerson(record)} okText="确定" cancelText="返回" > ), }, ]; const columns: any = [ // 我参与的项目 { title: '序号', dataIndex: 'index', valueType: 'index', search: false, width: 50, }, { title: proTypeCode.indexOf("procurement_mode_4") !== -1 ? '招募方式' : '采购方式', dataIndex: 'bidMethodDict', search: proTypeCode?.length > 1 ? null : false, initialValue: bidMethodDict ? bidMethodDict : void 0, valueEnum: proTableValueEnumOther(dictData['procurement_mode=entrust'], proTypeCode), width: '7%', render: (_: any, record: any) => { if (proTypeCode.indexOf("procurement_mode_4") !== -1) { const recruitmentMethod = getDictName(dictData[recruitmentMethodRecord], record.examinationMethodDict) if (recruitmentMethod == '一次评审') { return "公开招募" } else { return "公开招募(多轮评审)" } } else { return _ } } }, { title: '项目名称', dataIndex: 'projectName', initialValue: projectName ? projectName : void 0, }, { title: '我要咨询', dataIndex: 'consult', render: (text: any, record: any) => ( {saveTmpForm(record); initChatUI()}}> ), }, { title: proTypeCode.indexOf("procurement_mode_4") !== -1 ? '招募人' : '采购人', dataIndex: 'tendereeOrgName', search: false, width: '15%' }, { title: '代理机构', dataIndex: 'tenderAgencyName', search: false, width: '15%' }, { title: '项目分类', dataIndex: 'procurementType', valueEnum: proTableValueEnum(dictData['procurement_type=entrust']), search: false, width: '5%' }, { title: '所属区域', dataIndex: 'regionDictName', search: false, width: '15%' }, { title: '操作', width: '7%', search: false, render: (text: any, record: any) => { if (MethodDict == "procurement_mode_7") { return ( ) } else { return ( <> ) } } }, ]; const otherColumns: any[] = [ // 公司其他项目 { title: '序号', dataIndex: 'index', valueType: 'index', search: false, width: 50, }, { title: '项目名称', dataIndex: 'projectName', }, { title: '采购类型', dataIndex: 'procurementTypeDict', search: false, width: '5%', valueEnum: proTableValueEnum(dictData['procurement_type=entrust']) }, { title: '采购方式', dataIndex: 'bidMethodDict', search: false, width: '7%', valueEnum: proTableValueEnum(dictData['procurement_mode=entrust']) }, { title: '已报名标段名称', dataIndex: 'bidSectName', width: '20%', search: false }, { title: '已报名标段编号', dataIndex: 'bidSectBizNum', width: '10%', search: false }, { title: '项目负责人', dataIndex: 'projectBidUser', search: false, width: '7%' }, ]; const dataSource = [ '语雀的天空', 'Ant Design', '蚂蚁金服体验科技', 'TechUI', 'TechUI 2.0', 'Bigfish', 'Umi', ].map((item) => ({ title: item, // subTitle: 语雀专栏, actions: [ 邀请, 操作, ], avatar: ( ), content: ( <>
第一个包 11
第一个包 11
), })); /** * 获取返回路径 * @returns */ const getReturnURL = () => { let projectURLParams = JSON.parse(projectParams); let params = `${'?current=' + projectURLParams.current}${isEmpty(projectURLParams.projectName) ? '' : '&projectName=' + projectURLParams.projectName}${isEmpty(projectURLParams.bidMethodDict) ? '' : '&bidMethodDict=' + projectURLParams.bidMethodDict}`; return getUrlRelativePath() + params; } const saveProject = async (val: any) => { // 点击项目跟进存储项目信息 //创建临时表单-智慧客服 saveTmpForm(val) val.returnURL = getReturnURL() await followUpAProjectSupplier(val); history.push('/ProjectLayout/Supplier/HomePageSectionList') } const changePerson = (val: any) => { // 修改负责人弹窗 setPersonVisible(true) setOrganId(val.companyId) setProjectId(val.id) } const [spin, spinSet] = useState(false); const choosePerson = async (val: any) => { // 确定修改负责人 spinSet(true); let data = { bidUserId: val.userAccount, bidUserName: val.empName, companyId: val.partnerMdmCode, projectId: projectId } await supplierRegister(data).then((res: any) => { if (res.code == 200) { message.success('修改负责人成功!') checkRelationRef.current?.reload(); setPersonVisible(false) } }); spinSet(false); } const onFinish = (val: any) => { // 校验成功确认提交 let date = { packageIdList: val.checkbox, remark: val.reason } exitProject(date).then((res: any) => { if (res.code == 200) { setQuitVisible(false) message.success('退出成功') setCheckedList([]) setIndeterminate(false) } else { setQuitVisible(false) } }) }; const onCheckAllChange = (e: any) => { // 全选 setCheckedList(e.target.checked ? sectionsVal : []); setIndeterminate(false) setCheckAll(e.target.checked) }; const onChange = (checkedList: any) => { // 多选单点 setCheckedList(checkedList) setIndeterminate(!!checkedList.length && checkedList.length < sectionsVal.length) setCheckAll(checkedList.length === sectionsVal.length) }; const quitProject = (id: any) => { // 退出项目 setQuitVisible(true) quitForm.resetFields() getSection(id).then((res: any) => { let secVals = []; if (res.success) { secVals = res.data.map((item: any) => { return item.id }) } setPlainList(res.data) setSectionsVal(secVals) }) } const showConfirm = (date: any) => { confirm({ title: date, onOk() { if (checkedList.length > 0) { //quitForm.getFieldValue().checkbox = checkedList 报错——林杰注释 quitForm.setFieldsValue({checkbox: checkedList}) } quitForm.submit() setCheckAll(false) setIndeterminate(false) setCheckedList([]) checkRelationRef.current?.reload(); }, onCancel() { setCheckAll(false) setIndeterminate(false) setCheckedList([]) setQuitVisible(false) }, }); } const submitQuit = (val: any) => { // 确定并进行校验 exitProjectPayCheck(checkedList).then((res: any) => { if(res.data && res.data != null){ showConfirm(res.data) } else { if (checkedList.length > 0) { //quitForm.getFieldValue().checkbox = checkedList 报错——林杰注释 quitForm.setFieldsValue({checkbox: checkedList}) } quitForm.submit() setCheckAll(false) setIndeterminate(false) setCheckedList([]) checkRelationRef.current?.reload(); } }) } const saveTmpForm = (record:any)=>{//智慧客服-创建临时表单 let roleAuthority: any | null = sessionStorage.getItem('roleAuthority'); let data = getSessionUserData(); const inputList = [ { label:null, paraName:'origin', isEncode:false, paraVal:'eBid', }, { label:null, paraName:'organizationId', isEncode:false, paraVal: data.organizationId, }, { label:'项目名称', paraName:'projectName', isEncode:true, paraVal:record.projectName, }, { label:'项目编号', paraName:'ebpProjectNumber', isEncode:false, paraVal:record.ebpProjectNumber, }, { label:'项目流水号', paraName:'projectBizNum', isEncode:false, paraVal:record.projectBizNum, }, { label:null, paraName:'tenderAgencyId', isEncode:false, paraVal:record.tenderAgencyId, }, { label:null, paraName:'tenderAgencyName', isEncode:true, paraVal:record.tenderAgencyName, }, { label:'项目状态', paraName:'status', isEncode:false, paraVal:record.status==1?'编辑中':record.status==2?'进行中':record.status==3?'已结束':record.status==9?'废止':'无效状态', }, { label:'采购单位', paraName:'tendereeName', isEncode:true, paraVal:record.tendereeName, }, { label:'实施单位', paraName:'providerName', isEncode:true, paraVal:record.tenderAgencyName, }, { label:'实施人员', paraName:'ownerContactName', isEncode:true, paraVal:record.appManagerName+'-'+record.appManagerId+'-'+record.appManagerTel }, { label:null, paraName:'roleAuthority', isEncode:false, paraVal:JSON.parse(roleAuthority)[0], }, { label:null, paraName:'module', isEncode:false, paraVal:'10', }, { label:null, paraName:'custType', isEncode:false, paraVal:'2', }, ] createHiddenForm(inputList, window.location.pathname) } const initChatUI = ()=>{ //打开客服界面 submitHiddenForm() } return ( <>
{/* className="pro-list" pagination={{ defaultPageSize: 10, showSizeChanger: true, }} metas={{ title: {}, subTitle: {}, type: {}, avatar: {}, content: {}, actions: {}, }} dataSource={dataSource} /> */} await getProject(params, proTypeCode).then((res) => { setProjectParams(JSON.stringify(params)); if (res.code == 200) { let data = res.data; return Promise.resolve({ data: data.records, success: res.success, total: res.data.total, current: res.data.current, }); } return Promise.resolve({ data: [], success: false, total: 0, current: 1, }); }) } search={{ filterType: "query", optionRender: (searchConfig: any, { form }) => { return [ , , ]; }, }} pagination={{ defaultCurrent: isNotEmpty(current) ? Number(current) : 1, defaultPageSize: 10, showSizeChanger: false }}//默认显示条数 toolBarRender={false} /> setPersonVisible(false)} footer={[]} centered style={{ maxHeight: modalHeight }} bodyStyle={{ maxHeight: modalHeight - 107, overflowY: 'auto' }} > size='small' actionRef={actionRef}//action触发后更新表格 columns={personColumns} request={async (params) => await getSupplierUser({ ...params, partnerMdmCode: organId, pageNum: params.current, pageSize: params.pageSize, }).then((res) => { if (res.success) { let data = res.data; setPersonList(data.records) return Promise.resolve({ data: data.records, success: res.success, total: res.data.total, current: res.data.page, }); } return Promise.resolve({ data: [], success: false, total: 0, current: 1, }); }) } pagination={{ defaultPageSize: 10, showSizeChanger: false }}//默认显示条数 dataSource={personList} toolBarRender={false} bordered /> setQuitVisible(false)} onOk={submitQuit} centered >