import React from 'react' import $ from 'jquery' import moment from 'moment' import Picture from '@/manageCenter/publicComponent/picture' import '@/manageCenter/financialManage/distribute/public.less' import '@/manageCenter/financialManage/distribute/shouKuan.less' import OrderDetail from '../../order/orderNew/changeComponent/orderDetail' import ResolutionDetail from '@/resolutionDetail' import { Button, Form, Input, Select, Spin, Table, message, DatePicker, Modal, Radio, Cascader, Popconfirm, Switch, Tabs, Col, Icon, Upload, Tag, Row, Tooltip, AutoComplete, } from 'antd' import Assign from '@/manageCenter/publicComponent/assign' import { areaSelect } from '@/NewDicProvinceList' import { ChooseList } from '../../order/orderNew/chooseList' import OrderRiZi from '@/orderRiZi.jsx' import './table.less' import { getMaterialStatus, getUrgentStatus, getProcessStatus, getApproval, getTaskStatus, getLiquidationStatus, splitUrl, getboutique, ShowModal, getRefundStatus, getProjectName, getFormRetrieve, getApprovedType, } from '@/tools' import { cuiJieDian, projectStatusCascader, approvalOptions } from '@/dataDic.js' import ShowModalDiv from '@/showModal.jsx'; import NowProjectStatus from '../../../common/nowProjectStatus'; import DeclarationProgress from '../../../../component/common/declarationProgress'; import CheckProject from '../../components/checkProject'; import NewSupplier from './newSupplier'; import ImgList from "../../../common/imgList"; import OperationPayNode from "./operationPayNode"; import PatentSchedule from './patentSchedule'; import ProjectDetailsReadOnly from "../../../common/projectDetailsReadOnly"; import NewEditProject from "../../../common/projectOperation/newEditProject"; import ProjectLog from './projectLog'; import OrderItemStatus from "../../../common/orderItemStatus"; import EnterpriseNameChange from "../../../common/enterpriseNameChange"; import PatentCheck from '../../../common/patentCheck'; import PaymentRecord from "../../../common/initiateOrder/paymentRecord"; import Cascaders from "../../../common/cascaders"; import Property from '../../../common/orderDetail/property'; // 知识产权情况 import Progress from './progress'; const confirm = Modal.confirm const FormItem = Form.Item const { TabPane } = Tabs const { TextArea } = Input const { Option } = Select const PicturesWall = React.createClass({ getInitialState() { return { fileList: [], } }, handleChange(info) { let fileList = info.fileList this.setState({ fileList, }) this.props.fileList(fileList) }, componentWillReceiveProps(nextProps) { this.state.fileList = nextProps.pictureUrl this.state.pojectApplicationUrl = undefined }, render() { const { fileList } = this.state return ( <div style={{ display: 'inline-block' }}> <ImgList domId={this.props.domId} uploadConfig={{ action: globalConfig.context + '/api/admin/outsourceOrg/uploadOutsourceFile', multiple: true, data: { sign: 'order_outsource' }, listType: "picture-card", }} onChange={(infor) => { this.handleChange(infor) }} fileList={fileList} /> </div> ) }, }) const Task = React.createClass({ loadData(pageNo) { this.state.data = [] this.setState({ page: pageNo, loading: true, }) $.ajax({ method: 'get', dataType: 'json', crossDomain: false, url: globalConfig.context + '/api/admin/orderProject/orderTaskList', data: { pageNo: pageNo || 1, pageSize: this.state.pagination.pageSize, specially: 0, //个人 name: this.state.nameSearch, //客户名称 deps: this.state.departmenttSearch, //订单部门 cid: this.state.category,//项目分类 orderNo: this.state.orderNoSearch, //订单编号 contractNo: this.state.contractNoSearch, //合同编号 taskId: this.state.taskNoSearch, //项目编号 taskStatus: this.state.taskStatuSearch, //项目状态 projectStatus: this.state.projectStatusSearch && this.state.projectStatusSearch.length > 0 ? (typeof this.state.projectStatusSearch[0] === 'string' ? this.state.projectStatusSearch[1] : this.state.projectStatusSearch[0]) : undefined, //项目状态 adminName: this.state.adminName, //项目受理人 approval: this.state.approvalSearch, //特批状态搜索 outsourceStatus: this.state.outsourceStatusSearch >= 999 ? undefined : this.state.outsourceStatusSearch, //外包状态搜索 projectName: this.state.projectName, // 项目名称 type: this.state.approvaType.length > 0 ? this.state.approvaType.toString() : undefined, //特批类型 memberProjectType: this.state.memberProjectType }, success: function (data) { ShowModal(this) let theArr = [] if (!data.data || !data.data.list) { if (data.error && data.error.length) { message.warning(data.error[0].message) } } else { for (let i = 0; i < data.data.list.length; i++) { let thisdata = data.data.list[i]; thisdata.key = i; thisdata.userName = thisdata.taskName.substring(0, 5) === '软件著作权' ? thisdata.userName + '(' + thisdata.commodityQuantity.toString() + '/' + thisdata.alreadyNumber + ')' : thisdata.userName; theArr.push(thisdata) } } this.state.pagination.current = data.data.pageNo this.state.pagination.total = data.data.totalCount if (data.data && data.data.list && !data.data.list.length) { this.state.pagination.current = 0 this.state.pagination.total = 0 } this.setState({ dataSource: theArr, totalAmount: data.data.totalAmount || 0, totalNumber: data.data.totalNumber || 0, pagination: this.state.pagination, }) }.bind(this), }).always( function () { this.setState({ loading: false, }) }.bind(this) ) }, getInitialState() { return { isNull: true, approvaType: [], satisfactionDegreeUrl: [], // 满意度调查表 satisfactionDegree: "", // 满意度 formRetrieve: "",// 满意调查表上传状态 containOfficialFees: 0,//官费缴费情况 audit: 1, declarationBatch: 1, dataInfor: {}, projectType: '', //项目分类 paySubject: [], paySubjectName: '', //付款科目名称 PayNodeCompany: [], thirdMaterial: 0, //第三方信息材料 0-无 1-有 thirdUrgent: 0, //第三方信息加急状态 thirdCompanyName: '', thirdUnitPrice: '', currentCompanyName: '', //当前选中供应商名称 thirdQuantity: 1, payNodeQuantity: 1, thirdRemarks: '', customerArr: [], timeRecordparse: {}, currentTotalPrice: 0, //当前修改页面的总价 saveThirdList: [], orderData: [], orderNo: '', jiedian: [], jiedianNew: [], timeVisible: false, ThirdListVisible: false, PayNodeVisible: false, //新增付款节点 searchMore: true, assignVisible: false, releaseDate: [], patentType: -1, patentNameType: -1, startType: 0, //外包供应商类型 // 判断是否是退回给咨询师经理 flag: false, roleName: '', activeKey: '1', //特批状态搜索 approvalSearch: undefined, testFlag: true, boHuivisible: false, selectedRowKeys: [], avisible: false, departmentArr: [], categoryArr: [], selectedRows: [], attachmentUrl: [], contactList: [], paginations: false, loading: false, pagination: { defaultCurrent: 1, defaultPageSize: 10, showQuickJumper: true, pageSize: 10, onChange: function (page) { this.loadData(page) }.bind(this), showTotal: function (total) { return '共' + total + '条数据' }, }, // 子组件改变的表格title数组 changeList: undefined, columnsTime: [ { title: '工作时长(小时)', dataIndex: 'hours', key: 'hours', }, { title: '工作时间', dataIndex: 'taskDays', key: 'taskDays', }, // { // title: "项目负责人", // dataIndex: "remarks", // key: "remarks" // }, { title: '备注', dataIndex: 'remarks', key: 'remarks', }, ], columns: [ { title: '项目编号', dataIndex: 'id', key: 'id', fixed: 'left', width: 50, render: (text, record) => { if (record.splitStatus == 2) { return <span>{record.splitSuper + '-' + record.splitId}</span> } else { return text } }, }, { title: '项目名称', dataIndex: 'taskName', key: 'taskName', fixed: 'left', width: 150, render: (text, record) => { let typeArr = []; if (record.htMember === 1) { typeArr.push("高新会员"); } if (record.additionalDeduction === 1) { typeArr.push("加计扣除"); } if (record.rdAwardsubsidy === 1) { typeArr.push("研发奖补"); } if (typeArr.length) { return ( <div> <span>{text}<span style={{ color: "red" }}>{record.patentTypeName}</span></span> <div>{ typeArr.join("&") }</div> </div> ) } return <span>{text}<span style={{ color: "red" }}>{record.patentTypeName}</span></span> } }, { title: '项目数量', dataIndex: 'commodityQuantity', key: 'commodityQuantity', fixed: 'left', width: 50, }, { title: "特批类型", dataIndex: "type", key: "type", fixed: 'left', width: 110, render: (text, record) => { return ( <span> {getApprovedType(text ? text.split(",").map(Number) : [], record.typeExplain)} </span> ); }, }, { title: '订单编号', dataIndex: 'orderNo', key: 'orderNo', fixed: 'left', width: 150, }, { title: '合同编号', dataIndex: 'contractNo', key: 'contractNo', fixed: 'left', width: 120, }, { title: '客户名称', dataIndex: 'userName', key: 'userName', className: 'userName', fixed: 'left', width: 150, render: text => { return ( <Tooltip title={text}> <div>{text}</div> </Tooltip> ) } }, { title: '业务类别', dataIndex: 'cname', key: 'cname', }, { title: '分配状态', dataIndex: 'taskStatus', key: 'taskStatus', render: (text) => { return getTaskStatus(text) }, }, { title: '项目状态', dataIndex: 'projectStatus', key: 'projectStatus', render: (text) => { return getProjectName(parseInt(text)) }, }, { title: '审核状态', dataIndex: 'outsourceStatus', key: 'outsourceStatus', render: (text, record) => { if (record.outsourceType === 1) { return '供应商' } else if ((record.outsourceType === 0)) { if (text === 0) { return <Tag color="#f50">外包待审核</Tag> } else if (text === 1) { return <Tag color="#87d068">外包已通过</Tag> } else if (text === 2) { return <Tag color="#2db7f5">外包被驳回</Tag> } else { return <div style={{ textAlign: 'center' }}>/</div> } } else if ((record.outsourceType === 2)) { return '高质量申请' } else { return <div style={{ textAlign: 'center' }}>/</div> } }, }, { title: '分配时间', dataIndex: 'taskDate', key: 'taskDate', }, { title: '订单部门', dataIndex: 'depName', key: 'depName', }, { title: '服务年限', dataIndex: 'serviceYear', key: 'serviceYear', }, { title: '累计工时(小时)', dataIndex: 'hours', key: 'hours', }, { title: "项目金额(万元)", dataIndex: "commodityPrice", key: "commodityPrice", }, { title: "成本(万元)", dataIndex: "costAmount", key: "costAmount", render: (text, record) => { return (<span> { isNaN(parseFloat(text)) ? text : parseFloat(text) } </span>) } }, { title: "已付(万元)", dataIndex: "partyAmount", key: "partyAmount", render: (text, record) => { return (<span> { isNaN(parseFloat(text)) ? text : parseFloat(text) } </span>) } }, { title: '操作', dataIndex: 'caozuo', key: 'caozuo', render: (text, record) => { return ( <div> <Button type="primary" onClick={(e) => { e.stopPropagation(), this.evaluate(record, this.props.isZxs ? '咨询师' : '咨询师经理') }} > 转交 </Button> <Button type="primary" style={{ marginLeft: 10 }} onClick={(e) => { e.stopPropagation(), this.evaluate(record, '咨询师经理', true) }} > 回退 </Button> <Button type="primary" style={{ margin: '0 10px' }} onClick={(e) => { e.stopPropagation(), this.okCancel(record) }} > 添加工时 </Button> <Button type="primary" onClick={(e) => { e.stopPropagation() this.setState({ timeVisible: true, }) this.timeDetail(record) }} > 工时记录 </Button> <Button type="primary" style={{ marginLeft: '10px' }} onClick={(e) => { e.stopPropagation() this.setState({ projectLogVisible: true, projectLogId: record.id }) }} > 项目日志 </Button> </div> ) }, }, ], dataSource: [], searchTime: [], columnsX: [ { title: '业务项目名称', dataIndex: 'commodityName', key: 'commodityName', render: (text, record) => { return <span> {text}<span style={{ color: "red" }}>{record.patentTypeName}</span>{"-" + record.id} <div> {record.cSort == 6 && record.projectType == 1 && <span>(含{record.htMember == 1 ? '高新会员&' : ''}{record.additionalDeduction == 1 ? '加计扣除&' : ''}{record.rdAwardsubsidy == 1 ? '研发奖补' : ''})</span>} {record.cSort == 6 && ([0, 3].indexOf(record.projectType) > -1) && <span>(仅提供单边会员服务)</span>} {record.cSort == 6 && record.projectType == 2 && <span>(仅填报表,仅咨询,不出备查资料)</span>} {record.cSort == 3 && <span>{record.technologyProjectType==0?'(简易项目)':record.technologyProjectType==1?'(市区级)':record.technologyProjectType==2?'(省级)':record.technologyProjectType==3?'(国家级)':''}</span>} {record.cSort == 8 ? (record.type != 2 && record.patentType == 1) ? <span>(变更)</span> : <span>{record.ordinaryRisk == 0 ? '(普通申请)' : record.ordinaryRisk == 1 ? '(风险代理)' : ''}</span> : ""} {record.type == 2 && <span>({record.days == 0 ? '普通' : record.days == 1 ? '加急' : ''}{record.scheme == 0 ? '&无方案' : record.scheme == 1 ? '&有方案' : ''})</span>} </div> </span> } }, { title: '项目类别', dataIndex: 'cname', key: 'cname', }, { title: '项目数量', dataIndex: 'commodityQuantity', key: 'commodityQuantity', render: (text, record) => { if (record.splitStatus == 1) { return ( <span> {text}{' '} <Tag color="#108ee9" onClick={(e) => { e.stopPropagation() this.showRes(record) }} > 已拆 </Tag> </span> ) } else { return text } }, }, { title: '金额(万元)', dataIndex: 'commodityPrice', key: 'commodityPrice', render: (text, record) => { return ( <span> {this.props.isZxs || text === -1 ? '***' : text} </span> ) } }, { title: '负责人', dataIndex: 'contacts', key: 'contacts', }, { title: '负责人电话', dataIndex: 'contactsMobile', key: 'contactsMobile', }, { title: '主要项目', dataIndex: 'main', key: 'main', render: (text) => { return text ? '是' : '否' }, }, { title: "总年限", dataIndex: "yearSum", key: "yearSum", render: (text, record) => { return ( <div>{["", "一年", "二年", "三年", "四年", "五年"][text]}</div> ); } }, { title: "年限", dataIndex: "serviceLife", key: "serviceLife", render: (text, record) => { return ( <div>{!!text && JSON.parse(text).toString()}</div> ); } }, { title: "本次派单", dataIndex: "serviceYear", key: "serviceYear", render: (text, record) => { return ( <div>{!text ? "" : text}</div> ); } }, { title: '项目说明', dataIndex: 'taskComment', key: 'taskComment', render: (text, record) => { let textStr = text; return ( <Tooltip title={textStr}> <div style={{ width: 100, overflow: "hidden", whiteSpace: "nowrap", textOverflow: "ellipsis", }} >{textStr}</div> </Tooltip> ) }, }, ], columnsA: [ { title: '流程', dataIndex: 'content', key: 'content', align: 'center', }, { title: '操作人', dataIndex: 'aName', key: 'aName', align: 'center', }, { title: '时间', dataIndex: 'createTimes', key: 'createTimes', align: 'center', }, ], dataSourceX: [], dataSourceA: [], ContactsLists: [ { title: '批次', dataIndex: 'num', key: 'num', }, { title: '下证时间', dataIndex: 'licenceTimes', key: 'licenceTimes', render: (text, record) => { return ( <div> <DatePicker style={{ marginTop: '5px' }} disabled={record.flag} showTime format="YYYY-MM-DD" onOk={() => { }} value={ record.licenceTimes ? moment(record.licenceTimes) : null } onChange={(data, dataString) => { record.licenceTimes = dataString this.setState({ contactList: this.state.contactList }) }} /> </div> ) }, }, { title: '下证数量', dataIndex: 'alreadyNumber', key: 'alreadyNumber', render: (text, record) => { return ( <div> { <Input value={record.alreadyNumber} disabled={record.flag} placeholder="请输入下证数量" key={record.id} required="required" onChange={(e) => { record.alreadyNumber = e.target.value this.setState({ contactList: this.state.contactList }) }} style={{ width: '120px' }} /> } </div> ) }, }, { title: '未下证数量', dataIndex: 'notCount', key: 'notCount', }, { title: '操作', dataIndex: 'dels', key: 'dels', render: (text, record, index) => { return ( <div> { <Popconfirm title="是否删除?" onConfirm={() => { this.confirmDelet(record) }} okText="删除" cancelText="不删除" > <Button style={{ marginRight: '10px', color: '#ffffff', background: '#f00', border: 'none', }} > 删除 </Button> </Popconfirm> } {record.flag ? ( '' ) : ( <Button type="primary" onClick={(e) => { e.stopPropagation(), this.contactSave(record, index) }} > 保存 </Button> )} </div> ) }, }, ], // 专利 ContactsListsNew: [], //付款节点表头 PayNodeTableColunms: [], } }, /* 分派 */ evaluate(record, nub, flag) { this.setState( { nub: nub, assignData: record, flag, }, () => { this.setState({ assignVisible: true, }) } ) }, componentWillMount() { const data = localStorage.getItem('typeZxs') || ""; /** * 统计页点击跳转,将参数存在缓存中(缓存中有数据就给筛选项添加默认值) */ if (!data) { this.categoryList() this.loadData() } else { this.setState({ projectStatusSearch: [Number(data)] }, () => { this.categoryList() this.loadData() }) } }, componentDidMount() { this.setColor() localStorage.removeItem('typeZxs') // 组件挂载完清除缓存 }, componentWillUnmount() { localStorage.removeItem('typeZxs') // 组件销毁时清除缓存 }, //用于判断 第三方信息表格显示 projectTypeTabContent(projectType) { //0正常 1专利 2软著 3审计 this.state.startType 0外包 1供应商 外包时当普通单处理 projectType大于3的都用通用表格 if (projectType === 0 || !projectType || this.state.startType === 0 || projectType > 3) { this.setState({ ContactsListsNew: [ { title: '供应商名称', dataIndex: 'companyName', key: 'companyName', render: (text, record, index) => { if (text) { return <span>{text}</span> } }, }, { title: '单价(万元)', dataIndex: 'unitPrice', key: 'unitPrice', render: (text, record) => { if (text) { return <span> { isNaN(text) ? text : parseFloat(text) } </span> } }, }, { title: '数量', dataIndex: 'quantity', key: 'quantity', render: (text, record) => { if (text) { return <span>{text}</span> } }, }, { title: '总价(万元)', dataIndex: 'totalAmount', key: 'totalAmount', render: (text, record) => { return <span> { isNaN(text) ? text : parseFloat(text) } </span> }, }, { title: '备注', dataIndex: 'remarks', key: 'remarks', }, { title: '操作', dataIndex: 'action', key: 'action', render: (text, record) => { return ( <div> {/*外包审核通过后,咨询师/咨询经理可申请付款*/} {/*存在支付节点时不显示第三方的申请付款*/} {/*0-待审核 ,1-审核通过,2-审核拒绝 true [NULL]*/} { <Button disabled={ !(this.props.isPreviewPay && (this.props.status === 1 || parseInt(this.props.startType) === 1) && this.props.dataSource.length === 0) } type="primary" onClick={() => { this.setState({ previewPayVisible: true, previewPayInfor: record, }) }}> 申请付款 </Button> } <Popconfirm title="是否删除?" onConfirm={() => { this.confirmDeletNew(record) }} okText="删除" cancelText="不删除" > <Button onClick={(e) => { e.stopPropagation() }} style={{ marginLeft: '10px', color: '#ffffff', background: '#f00', border: 'none', }} > 删除 </Button> </Popconfirm> </div> ) }, }, ], }) } else if (projectType === 2) { //2软著 this.setState({ ContactsListsNew: [ { title: '供应商名称', dataIndex: 'companyName', key: 'companyName', render: (text, record, index) => { if (text) { return <span>{text}</span> } }, }, { title: '单价(万元)', dataIndex: 'unitPrice', key: 'unitPrice', render: (text, record) => { if (text) { return <span> { isNaN(text) ? text : parseFloat(text) } </span> } }, }, { title: '数量', dataIndex: 'quantity', key: 'quantity', render: (text, record) => { if (text) { return <span>{text}</span> } }, }, { title: '总价(万元)', dataIndex: 'totalAmount', key: 'totalAmount', render: (text, record) => { return <span> { isNaN(text) ? text : parseFloat(text) } </span> }, }, { title: '方案', dataIndex: 'material', key: 'material', render: (text, record) => { return getMaterialStatus(text) }, }, { title: '加急', dataIndex: 'urgent', key: 'urgent', render: (text, record) => { return getUrgentStatus(text) }, }, { title: '操作', dataIndex: 'action', key: 'action', render: (text, record) => { return ( <div> {/*外包审核通过后,咨询师/咨询经理可申请付款*/} {/*存在支付节点时不显示第三方的申请付款*/} {/*0-待审核 ,1-审核通过,2-审核拒绝 true [NULL]*/} { <Button disabled={ !(this.props.isPreviewPay && (this.props.status === 1 || parseInt(this.props.startType) === 1) && this.props.dataSource.length === 0) } type="primary" onClick={() => { this.setState({ previewPayVisible: true, previewPayInfor: record, }) }}> 申请付款 </Button> } <Popconfirm title="是否删除?" onConfirm={() => { this.confirmDeletNew(record) }} okText="删除" cancelText="不删除" > <Button onClick={(e) => { e.stopPropagation() }} style={{ marginLeft: '10px', color: '#ffffff', background: '#f00', border: 'none', }} > 删除 </Button> </Popconfirm> </div> ) }, }, ], }) } else if (projectType === 1) { //1专利 if (this.state.patentType === 0) { //专利申请 this.setState({ ContactsListsNew: [ { title: '供应商名称', dataIndex: 'companyName', key: 'companyName', render: (text, record, index) => { if (text) { return <span>{text}</span> } }, }, { title: '单价(万元)', dataIndex: 'unitPrice', key: 'unitPrice', render: (text, record) => { if (text) { return <span> { isNaN(text) ? text : parseFloat(text) } </span> } }, }, { title: '数量', dataIndex: 'quantity', key: 'quantity', render: (text, record) => { if (text) { return <span>{text}</span> } }, }, // { // title: "官费", // dataIndex: "officialCost", // key: "officialCost", // render: (text) => { // return text === 1 ? '有官费' : '无官费' // }, // }, // { // title: "费减", // dataIndex: "costReduction", // key: "costReduction", // render: (text) => { // return text === 1 ? '有费减' : '无费减' // }, // }, { title: '总价(万元)', dataIndex: 'totalAmount', key: 'totalAmount', render: (text, record) => { return <span> { isNaN(text) ? text : parseFloat(text) } </span> }, }, { title: '备注', dataIndex: 'remarks', key: 'remarks', }, { title: '操作', dataIndex: 'action', key: 'action', render: (text, record) => { return ( <div> {/*外包审核通过后,咨询师/咨询经理可申请付款*/} {/*存在支付节点时不显示第三方的申请付款*/} {/*0-待审核 ,1-审核通过,2-审核拒绝 true [NULL]*/} { <Button disabled={ !(this.props.isPreviewPay && (this.props.status === 1 || parseInt(this.props.startType) === 1) && this.props.dataSource.length === 0) } type="primary" onClick={() => { this.setState({ previewPayVisible: true, previewPayInfor: record, }) }}> 申请付款 </Button> } <Popconfirm title="是否删除?" onConfirm={() => { this.confirmDeletNew(record) }} okText="删除" cancelText="不删除" > <Button onClick={(e) => { e.stopPropagation() }} style={{ marginLeft: '10px', color: '#ffffff', background: '#f00', border: 'none', }} > 删除 </Button> </Popconfirm> </div> ) }, }, ] }) } else { this.setState({ ContactsListsNew: [ { title: '供应商名称', dataIndex: 'companyName', key: 'companyName', render: (text, record, index) => { if (text) { return <span>{text}</span> } }, }, { title: '单价(万元)', dataIndex: 'unitPrice', key: 'unitPrice', render: (text, record) => { if (text) { return <span> { isNaN(text) ? text : parseFloat(text) } </span> } }, }, { title: '数量', dataIndex: 'quantity', key: 'quantity', render: (text, record) => { if (text) { return <span>{text}</span> } }, }, { title: '总价(万元)', dataIndex: 'totalAmount', key: 'totalAmount', render: (text, record) => { return <span> { isNaN(text) ? text : parseFloat(text) } </span> }, }, { title: '备注', dataIndex: 'remarks', key: 'remarks', }, { title: '操作', dataIndex: 'action', key: 'action', render: (text, record) => { return ( <div> {/*外包审核通过后,咨询师/咨询经理可申请付款*/} {/*存在支付节点时不显示第三方的申请付款*/} {/*0-待审核 ,1-审核通过,2-审核拒绝 true [NULL]*/} { <Button disabled={ !(this.props.isPreviewPay && (this.props.status === 1 || parseInt(this.props.startType) === 1) && this.props.dataSource.length === 0) } type="primary" onClick={() => { this.setState({ previewPayVisible: true, previewPayInfor: record, }) }}> 申请付款 </Button> } <Popconfirm title="是否删除?" onConfirm={() => { this.confirmDeletNew(record) }} okText="删除" cancelText="不删除" > <Button onClick={(e) => { e.stopPropagation() }} style={{ marginLeft: '10px', color: '#ffffff', background: '#f00', border: 'none', }} > 删除 </Button> </Popconfirm> </div> ) }, }, ] }) } } else if (projectType === 3) { //3审计 this.setState({ ContactsListsNew: [ { title: '供应商名称', dataIndex: 'companyName', key: 'companyName', render: (text, record, index) => { if (text) { return <span>{text}</span> } }, }, { title: '单价(万元)', dataIndex: 'unitPrice', key: 'unitPrice', render: (text, record) => { if (text) { return <span> { isNaN(text) ? text : parseFloat(text) } </span> } }, }, { title: '数量', dataIndex: 'quantity', key: 'quantity', render: (text, record) => { if (text) { return <span>{text}</span> } }, }, { title: '总价(万元)', dataIndex: 'totalAmount', key: 'totalAmount', render: (text, record) => { return <span> { isNaN(text) ? text : parseFloat(text) } </span> }, }, { title: '审计', dataIndex: 'audit', key: 'audit', render: (text, record) => { if (text) { return <span>{text === 0 ? '无审计' : text === 1 ? '年审' : '专审'}</span> } }, }, { title: '公司资产(万元)', dataIndex: 'assets', key: 'assets', render: (text, record) => { if (text) { return <span>{text}</span> } }, }, { title: '收入(万元)', dataIndex: 'income', key: 'income', render: (text, record) => { return <span> { isNaN(text) ? text : parseFloat(text) } </span> }, }, { title: '操作', dataIndex: 'action', key: 'action', render: (text, record) => { return ( <div> {/*外包审核通过后,咨询师/咨询经理可申请付款*/} {/*存在支付节点时不显示第三方的申请付款*/} {/*0-待审核 ,1-审核通过,2-审核拒绝 true [NULL]*/} { <Button disabled={ !(this.props.isPreviewPay && (this.props.status === 1 || parseInt(this.props.startType) === 1) && this.props.dataSource.length === 0) } type="primary" onClick={() => { this.setState({ previewPayVisible: true, previewPayInfor: record, }) }}> 申请付款 </Button> } <Popconfirm title="是否删除?" onConfirm={() => { this.confirmDeletNew(record) }} okText="删除" cancelText="不删除" > <Button onClick={(e) => { e.stopPropagation() }} style={{ marginLeft: '10px', color: '#ffffff', background: '#f00', border: 'none', }} > 删除 </Button> </Popconfirm> </div> ) }, }, ] }) } this.setState({ //付款节点表头 PayNodeTableColunms: [ { title: '供应商名称', dataIndex: 'companyName', key: 'companyName', render: (text, record, index) => { if (text) { return <span>{text}</span> } }, }, { title: '付款科目', dataIndex: 'dunType', key: 'dunType', render: (text, record) => { if (text) { return <span>{text}</span> } }, }, { title: '付款时间', dataIndex: 'partyTimes', key: 'partyTimes', render: (text, record) => { return <span>{text ? text : '/'}</span> }, }, { title: '数量', dataIndex: 'quantity', key: 'quantity', render: (text, record) => { if (text) { return <span>{text}</span> } }, }, { title: '总价(万元)', dataIndex: 'totalAmount', key: 'totalAmount', render: (text, record) => { return <span> { isNaN(text) ? text : parseFloat(text) } </span> }, }, { title: '已付', dataIndex: 'partyAmount', key: 'partyAmount', render: (text, record) => { if (text) { return <span>{text}</span> } }, }, { title: '操作', dataIndex: 'dels', key: 'dels', render: (text, record, index) => { return ( <div> <Popconfirm title="是否删除?" onConfirm={() => { this.checkNode(record) }} okText="删除" cancelText="不删除" > <Button onClick={(e) => { e.stopPropagation() }} style={{ marginRight: '10px', color: '#ffffff', background: '#f00', border: 'none', }} > 删除 </Button> </Popconfirm> </div> ) }, }, ], }) }, setColor() { $('.userName span').after( "(<span class='ruanzhu'>软著数</span>/<span class='xiazheng'>下证数</span>)" ) }, // 获取csort下的数据 getCsortData(cSort) { return cuiJieDian.map((item) => { if (item.value == cSort) { this.setState({ paySubject: item.children, }) } }) }, async tableRowClick(record) { this.state.RowData = record let str = record.taskName let test = str.indexOf('会员') if (test == -1) { this.setState({ isHuiyuan: false, }) } else { this.getByTid(record.id) // this.setState({ isHuiyuan: true, }) } if (record.taskName.substring(0, 5) === '软件著作权') { this.setState({ speVisible: true, id: record.id, splitStatus: record.splitStatus, splitSuper: record.splitSuper, splitId: record.splitId, dataArr: record, commodityQuantity: record.commodityQuantity, }) } else { this.setState({ visible: true, splitStatus: record.splitStatus, splitSuper: record.splitSuper, splitId: record.splitId, }) } this.setState({ projectType: record.projectType, isIso: record.taskName.indexOf("贯标") !== -1, orderNo: record.orderNo, id: record.id, tid: record.id, }) await this.xiangqing(record.id); // 获取Csort await this.getCsortData(localStorage.getItem('cSort')) this.xiangqings(record.orderNo) this.xiangmu(record.orderNo) this.loaduserss(record) // 获取第三方信息表格 // this.thirdTable(record.id); //获取支付节点信息表格 // this.payNodeTable(record.id); //查看外包状态日志 this.getSelectOutsourceLog(record.id); this.projectTypeTabContent(record.projectType); }, getByTid(id) { $.ajax({ method: 'get', dataType: 'json', crossDomain: false, url: globalConfig.context + '/api/admin/taskDetails/getByTid', data: { id, }, success: function (data) { if (data.error.length || data.data.list == '') { if (data.error && data.error.length) { message.warning(data.error[0].message) } } else { let obj = data.data this.setState({ isNull: !obj.projectId }) } }.bind(this), }).always( function () { this.setState({ loading: false, }) }.bind(this) ) }, //点击修改项目详情 tijiaoOk(status = '', fn) { let attachmentUrls = [] if (/.*[\u4e00-\u9fa5]+.*$/.test(this.state.contacts)) { } else { message.error("请填写正确的联系人,且至少包含一个汉字"); return; }; var mobileRegex = /^1\d{10}$/; // 手机 var landlineRegex = /^0\d{2,3}-?\d{7,8}$/; // 座机 if (!mobileRegex.test(this.state.contactMobile) && !landlineRegex.test(this.state.contactMobile)) { message.error("请填写正确的联系电话"); return; } if (this.state.attachmentUrl.length) { let picArr = [] this.state.attachmentUrl.map(function (item) { if (item.response && item.response.data && item.response.data.length) { picArr.push(item.response.data) } }) attachmentUrls = picArr.join(',') } this.setState({ loading: true, }) $.ajax({ method: 'POST', dataType: 'json', crossDomain: false, url: globalConfig.context + '/api/admin/orderProject/updateOrderTask', data: { id: this.state.id, //项目编号 orderNo: this.state.orderNo, //订单编号 projectStatus: status || this.state.projectStatus, //项目状态 taskStatus: this.state.taskStatus, //项目状态 taskComment: this.state.taskComment, //说明 startDate: this.state.startDate, //启动日期 endDate: this.state.endDate, //结束日期 acceptDate: this.state.acceptDate, //受理日期 reviewDate: this.state.reviewDate, //评审日期 publicityDate: this.state.publicityDate, //公示日期 licenceDate: this.state.licenceDate, //发证日期 attachmentUrl: attachmentUrls.length ? attachmentUrls : '', //附件 contacts: this.state.contacts, //联系人 contactMobile: this.state.contactMobile, //联系人电话 legalPerson: this.state.legalPerson, //法人 legalPersonTel: this.state.legalPersonTel, //法人电话 certificateNumber: this.state.certificateNumber, //证书编号 status: this.state.status, //状态 // formRetrieve: this.state.formRetrieve, //满意度 taskRefund: this.state.taskRefund, //退单 refundContent: this.state.refundContent, //退单信息 retrieveContent: this.state.retrieveContent, //回收信息 locationProvince: this.state.ProvinceCity[0], locationCity: this.state.ProvinceCity[1], locationArea: this.state.ProvinceCity[2], postalAddress: this.state.postalAddress, //详细地址 arrivalMoney: this.state.arrivalMoney, //是否到款 setUpAmount: this.state.setUpAmount, //立项金额 declareUser: this.state.declareUser, //账号 declarePwd: this.state.declarePwd, //密码 outsourceName: this.state.outsourceName, //外包公司 outsourcePrice: this.state.outsourcePrice, //外包价格 declarationBatch: this.state.declarationBatch, specialComment: this.state.specialComment || undefined,//特别说明 setUpStatus: typeof this.state.setUpStatus === 'number' ? this.state.setUpStatus : undefined,//是否立项 setUpTime: this.state.setUpTime || undefined,//立项时间 highTechStatus: typeof this.state.highTechStatus === 'number' ? this.state.highTechStatus : undefined,//是否高新 spotCheckStatus: typeof this.state.spotCheckStatus === 'number' ? this.state.spotCheckStatus : undefined,//是否抽查 0否 1未通过 2通过 urgentDay: typeof this.state.urgentDay === 'number' ? this.state.urgentDay : undefined,//加急天数 ifMaterial: typeof this.state.ifMaterial === 'number' ? this.state.ifMaterial : undefined,//有无材料 acceptCount: this.state.acceptCount || undefined, certificatesCount: this.state.certificatesCount || undefined, rejectCount: this.state.rejectCount || undefined, certificationCorporate: this.state.certificationCorporate || undefined,//认证费公司 certificationFee: this.state.certificationFee,//认证费 ifCertificationFee: this.state.ifCertificationFee,//是否包含认证费 }, }).done( function (data) { this.setState({ loading: false, }) if (!data.error.length) { message.success('保存成功!') fn ? fn() : this.visitCancel(); } else { message.warning(data.error[0].message) } }.bind(this) ) }, //点击修改项目详情 tianjiaOk() { if (this.state.attachmentUrl.length) { let picArr = [] this.state.attachmentUrl.map(function (item) { if (item.response && item.response.data && item.response.data.length) { picArr.push(item.response.data) } }) } this.setState({ loading: true, }) $.ajax({ method: 'POST', dataType: 'json', crossDomain: false, url: globalConfig.context + '/api/admin/orderProject/addTaskHours', data: { taskId: this.state.taskId, //项目编号 hours: this.state.hours, //工时 remarks: this.state.remarks, //说明 taskDate: this.state.taskDate, //日期 taskComment: this.state.taskComment, //说明 }, }).done( function (data) { this.setState({ loading: false, }) if (!data.error.length) { message.success('保存成功!') this.noCancel() } else { message.warning(data.error[0].message) } }.bind(this) ) }, //订单详情 xiangqing(id) { return $.ajax({ method: 'get', dataType: 'json', crossDomain: false, url: globalConfig.context + '/api/admin/orderProject/orderTaskDetail', data: { id: id, }, success: function (data) { let thisdata = data.data if (data.error.length || data.data.list == '') { if (data.error && data.error.length) { message.warning(data.error[0].message) } } else { localStorage.setItem('cSort', thisdata.sort) this.setState({ certificationCorporate: thisdata.certificationCorporate,//认证费公司 certificationFee: thisdata.certificationFee,//认证费 ifCertificationFee: thisdata.ifCertificationFee,//是否包含认证费 sort: thisdata.sort, cSort: thisdata.sort, id: thisdata.id, //ID splitId: thisdata.splitId,//拆分序号 splitStatus: thisdata.splitStatus,//0未拆分 1已拆分 splitSuper: thisdata.splitSuper,//拆分前项目编号 orderNo: thisdata.orderNo, //订单编号 userName: thisdata.userName, //客户名称 taskName: thisdata.taskName, //项目名称 cname: thisdata.cname, //项目品类 contractNo: thisdata.contractNo, //合同编号 projectStatus: thisdata.projectStatus.toString(), //项目状态 taskStatus: thisdata.taskStatus.toString(), //项目状态 taskDate: thisdata.taskDate, //分配时间 taskComment: thisdata.taskComment, //说明 taskCommentData: thisdata.taskComment, attachmentUrl: thisdata.attachmentUrl ? splitUrl(thisdata.attachmentUrl, ',', globalConfig.avatarHost + '/upload') : [], //图片地址 salesmanName: thisdata.salesmanName, //订单负责人 startDate: thisdata.startDate, //启动日期 endDate: thisdata.endDate, //结束日期 acceptDate: thisdata.acceptDate, //受理日期 reviewDate: thisdata.reviewDate, //评审日期 publicityDate: thisdata.publicityDate, //公示日期 licenceDate: thisdata.licenceDate, //发证日期 contacts: thisdata.contacts, //联系人 contactMobile: thisdata.contactMobile, //联系人电话 legalPerson: thisdata.legalPerson, //法人 legalPersonTel: thisdata.legalPersonTel, //法人电话 certificateNumber: thisdata.certificateNumber, //证书编号 status: thisdata.status, //状态 0未开始 1已开始 2已暂停 3已完成 4已驳回 5已退单 formRetrieve: thisdata.formRetrieve, //满意调查表状态 satisfactionDegree: thisdata.satisfactionDegree, //满意度 satisfactionDegreeUrl: thisdata.satisfactionDegreeUrl ? splitUrl(thisdata.satisfactionDegreeUrl, ',', globalConfig.avatarHost + '/upload') : [], //满意度调查表 taskRefund: thisdata.taskRefund, //退单 refundContent: thisdata.refundContent, //退单信息 retrieveContent: thisdata.retrieveContent, //回收信息 arrivalMoney: thisdata.arrivalMoney, //是否到款 setUpAmount: thisdata.setUpAmount, //立项金额 declareUser: thisdata.declareUser, //账号 declarePwd: thisdata.declarePwd, //密码 outsourceName: thisdata.outsourceName, //外包公司 outsourcePrice: thisdata.outsourcePrice, //外包价格 declarationBatch: thisdata.declarationBatch, orderTaskOfficialCost: thisdata.officialCost, //官费 0无 1有 orderTaskCostReduction: thisdata.costReduction,//费减 bpType: thisdata.bpType,//0 正常 1专利 2软著 3审计 4双软 5高新 6商标 specialComment: thisdata.specialComment, urgentDay: thisdata.urgentDay, //有无材料 ifMaterial: thisdata.ifMaterial, //加急情况 spotCheckStatus: thisdata.spotCheckStatus, setUpStatus: thisdata.setUpStatus, setUpTime: thisdata.setUpTime, highTechStatus: thisdata.highTechStatus, acceptCount: thisdata.acceptCount, //受理数 certificatesCount: thisdata.certificatesCount, //授权数 rejectCount: thisdata.rejectCount, //驳回数 commodityQuantity: thisdata.commodityQuantity, //派单项目数 timeRecord: thisdata.timeRecord || '{}',//项目状态JSON timeRecordparse: thisdata.timeRecord ? JSON.parse(thisdata.timeRecord) : {},//项目状态JSON checkStatus: thisdata.checkStatus,//核对状态 patentTypeName: thisdata.patentTypeName, patentTypeId: thisdata.patentType,//官费专利类型 }) if (thisdata.patentTransfer) { this.setState({ patentType: 1 }) } else { this.setState({ patentType: 0 }) } } }.bind(this), }).always( function () { this.setState({ loading: false, }) }.bind(this) ) }, //订单详情 xiangqings(orderNos) { $.ajax({ method: 'get', dataType: 'json', crossDomain: false, url: globalConfig.context + '/api/admin/newOrder/getOrderNewDetail', data: { orderNo: orderNos, }, success: function (data) { let thisdata = data.data let ProvinceCityArr = [] let ProvinceS = thisdata.locationProvince //省 let citys = thisdata.locationCity //市 let Areas = thisdata.locationArea //区 ProvinceCityArr.push(ProvinceS, citys, Areas) if (data.error.length || data.data.list == '') { if (data.error && data.error.length) { message.warning(data.error[0].message) } } else { this.setState({ orderUid: thisdata.uid, examineName: thisdata.examineName, processStatus: thisdata.processStatus, //流程状态 liquidationStatus: thisdata.liquidationStatus, //结算状态 approval: thisdata.approval, //特批状态 orderRemarks: thisdata.orderRemarks, //订单留言 salesmanName: thisdata.salesmanName, //营销员名称 salesmanMobile: thisdata.salesmanMobile, //营销员电话 financeName: thisdata.financeName, //财务名称 financeMobile: thisdata.financeMobile, //财务电话 oldSalesmanName: thisdata.oldSalesmanName, //营销员名称 oldSalesmanMobile: thisdata.oldSalesmanMobile, //营销员电话 nowFinance: thisdata.nowFinance, //财务名称 nowFinanceMobile: thisdata.nowFinanceMobile, //财务电话 depName: thisdata.depName, //订单部门 ProvinceCity: ProvinceCityArr[0] === null ? [] : ProvinceCityArr, postalAddress: thisdata.postalAddress, //详细地址 deleteSign: thisdata.deleteSign, patentStatus: thisdata.patentStatus, // 知识产权情况 }) } }.bind(this), }).always( function () { this.setState({ loading: false, }) }.bind(this) ) }, //项目列表 xiangmu(orderNos) { $.ajax({ method: 'get', dataType: 'json', crossDomain: false, url: globalConfig.context + '/api/admin/newOrder/getOrderTask', data: { orderNo: orderNos, }, success: function (data) { let theArr = [] if (data.error.length || data.data.list == '') { if (data.error && data.error.length) { message.warning(data.error[0].message) } } else { for (let i = 0; i < data.data.length; i++) { let thisdata = data.data[i] thisdata.key = i; thisdata.sort = thisdata.cSort; theArr.push(thisdata); } } this.setState({ dataSourceX: theArr, type: theArr[0].type, }) }.bind(this), }).always( function () { this.setState({ loading: false, }) }.bind(this) ) }, //导出 exportExec() { // let departmentName = '', // depart = this.state.departmentArr || [] // depart.map((item) => { // if (this.state.departmentId == item.id) { // departmentName = item.name // return // } // }) // // 导出 // let categoryName = '', // category = this.state.categoryArr || [] // category.map((item) => { // if (this.state.categoryId == item.id) { // categoryName = item.name // return // } // }) let data = { orderNo: this.state.orderNoSearch, //订单编号 contractNo: this.state.contractNoSearch, //合同编号 name: this.state.nameSearch, //客户名称 taskId: this.state.taskNoSearch, //项目编号 cid: this.state.category,//项目分类 deps: this.state.departmenttSearch, //订单部门 taskStatus: this.state.taskStatuSearch, //项目状态 approval: this.state.approvalSearch, //特批状态搜索 outsourceStatus: this.state.outsourceStatusSearch >= 999 ? undefined : this.state.outsourceStatusSearch, //外包状态搜索 projectName: this.state.projectName, // 项目名称 type: this.state.approvaType.length > 0 ? this.state.approvaType.toString() : undefined, //特批类型 } for (let key in data) { if (!data[key]) { delete data[key] } } window.location.href = globalConfig.context + '/api/admin/orderProject/exporProjectList?' + $.param(data) }, //关闭详情 visitCancel() { this.setState({ visible: false, speVisible: false, activeKey: '1', updataSwicth: false, projectSituationVisible: false, }) this.reset() }, visitOk() { this.setState({ visible: false, speVisible: false, }) this.reset() }, closeDesc(e, s) { this.state.showDesc = e if (s) { this.loadData(this.state.page) } }, closeAssign(e, s) { this.state.roleName = '' this.state.assignVisible = e if (s) { this.loadData(this.state.page) } }, //添加工时 okCancel(record) { this.setState({ lookVisible: true, taskId: record.id, }) }, //测试 getOrgCodeUrl(e) { this.setState({ orgCodeUrl: e }) }, //查看下证信息 loaduserss(record) { $.ajax({ method: 'get', dataType: 'json', crossDomain: false, url: globalConfig.context + '/api/admin/orderProject/selectTaskProgress', data: { tid: record.id, }, success: function (data) { let theArr = [] let thisData = [] if (!thisData) { if (data.error && data.error.length) { message.warning(data.error[0].message) } thisData = {} } else { for (let i = 0; i < data.data.length; i++) { thisData = data.data[i] theArr.push({ num: i + 1, key: i, id: thisData.id, //编号 alreadyNumber: thisData.alreadyNumber, //下证数 licenceTimes: thisData.licenceTimes, //下证时间 notCount: thisData.notCount, //未下证数 flag: true, }) } this.setState({ contactList: theArr, tid: record.id, }) } }.bind(this), }).always( function () { this.setState({ loading: false, }) }.bind(this) ) }, // 拆分详细 showRes(record) { this.setState({ resVisible: true, resRecord: record, }) }, resCancel() { this.setState({ resVisible: false, }) }, //下证信息保存 contactSave(record) { if (!record.licenceTimes) { message.warning('下证日期不能为空') return } if (!record.alreadyNumber) { message.warning('下证数量不能为空') return } this.setState({ loading: true, }) $.ajax({ url: globalConfig.context + '/api/admin/orderProject/createTaskProgress', method: 'post', data: { taskId: this.state.id, licenceTimes: record.licenceTimes, alreadyNumber: record.alreadyNumber, }, }).done( function (data) { this.setState({ loading: false, }) if (!data.error.length) { message.success('保存成功!') record.flag = true this.loaduserss(this.state.dataArr) } else { message.warning(data.error[0].message) } }.bind(this) ) }, //下证信息删除 contactDele(record) { this.setState({ loading: true, }) $.ajax({ url: globalConfig.context + '/api/admin/orderProject/delectTaskProgress', method: 'post', data: { id: record.id, }, }).done( function (data) { this.setState({ loading: false, }) if (!data.error.length) { this.loaduserss(this.state.dataArr) } else { message.warning(data.error[0].message) } }.bind(this) ) }, //点击新增下证信息 addcontact() { this.state.contactList.push({ num: this.state.contactList.length + 1, key: this.state.contactList.length, licenceTimes: '', alreadyNumber: '', notCount: '', dels: '', flag: false, aflag: false, }) this.setState({ contactList: this.state.contactList, }) }, //删除下证信息 confirmDelet(record) { this.state.contactList.splice(record.key, 1) this.setState({ contactList: this.state.contactList, }) if (record.id) { this.contactDele(record) } }, caozuorizhi() { this.setState({ visibleA: true, }) $.ajax({ method: 'get', dataType: 'json', crossDomain: false, url: globalConfig.context + '/api/admin/orderProject/TaskLogList', data: { id: this.state.id, }, success: function (data) { let theArr = [] if (data.error.length || data.data.list == '') { if (data.error && data.error.length) { message.warning(data.error[0].message) } } else { for (let i = 0; i < data.data.length; i++) { let thisdata = data.data[i] theArr.push({ key: i, id: thisdata.id, //日志ID content: thisdata.content, //流程 taskId: thisdata.taskId, //项目ID aName: thisdata.aName, //负责人 createTimes: thisdata.createTimes, //时间 }) } } this.setState({ dataSourceA: theArr, }) }.bind(this), }).always( function () { this.setState({ loading: false, }) }.bind(this) ) }, //关闭操作工时 visitCancelA() { this.setState({ visibleA: false, }) }, nextCancel() { this.setState({ addnextVisible: false, displayFees: 'none', officialCost: '', //是否有官费 costReduction: '', //是否有费减 }) }, //点击打卡项目详情 tableRowClickX(record) { if (record.type == '1') { this.setState({ displayFees: 'block', costReduction: record.costReduction, officialCost: record.officialCost, }) } this.setState({ jid: record.id, //项目ID kid: record.commodityId, //商品ID commodityName: record.commodityName, //金额 commodityPrice: record.commodityPrice, //金额 commodityQuantity: record.commodityQuantity, //数量 taskComment: record.taskComment, //备注 taskCommentData: record.taskComment, main: record.main.toString(), //是否为主要 addnextVisible: true, dataInfor: record, addState: 0, }) }, //关闭添加工时 noCancel() { this.setState({ lookVisible: false, }) this.reset() }, search() { this.loadData() }, reset(flag) { if (flag) { this.setState({ nameSearch: '', orderNoSearch: '', contractNoSearch: undefined, taskNoSearch: '', departmenttSearch: undefined, projectStatusSearch: [], //项目状态 approvalSearch: undefined, category: undefined, outsourceStatusSearch: [], projectName: undefined, approvaType: [], }) } this.setState({ oldInfor: {}, outsourceRemarks: undefined, thirdInfoList: [], payNodeList: [], orderNo: '',//订单编号 tid: '', id: '', //项目编号 projectStatus: undefined, //项目状态 deleteSign: undefined, taskStatuSearch: undefined, //项目状态 startDate: '', //启动日期 endDate: '', //结束日期 acceptDate: '', //受理日期 reviewDate: '', //评审日期 publicityDate: '', //公示日期 licenceDate: '', //发证日期 partyTimes: '', //付款时间 attachmentUrl: [], //附件 contacts: '', //联系人 contactMobile: '', //联系人电话 legalPerson: '', //法人 legalPersonTel: '', //法人电话 taskId: '', //项目编号 hours: '', //工时 remarks: '', //说明 taskDate: '', //日期 taskComment: '', //说明 taskCommentData: '', releaseDate: [], outsourceName: '', outsourcePrice: undefined, distribution: undefined, companyName: undefined, unitPrice: undefined, unitNumber: undefined, amount: undefined, pictureUrl: [], allTotalAmount: 0, urgentDay: '', //有无材料 ifMaterial: '', //加急情况 specialComment: '', //特别说明 spotCheckStatus: '', setUpStatus: '', setUpTime: '', highTechStatus: '', }, () => { this.Cascaders.empty(); this.loadData(flag ? '' : this.state.page) }) }, searchSwitch() { this.setState({ searchMore: !this.state.searchMore, }) }, //部门 departmentList() { this.setState({ loading: true, }) $.ajax({ method: 'get', dataType: 'json', crossDomain: false, url: globalConfig.context + '/api/admin/organization/selectSuperId', data: {}, success: function (data) { let thedata = data.data let theArr = [] if (!thedata) { if (data.error && data.error.length) { message.warning(data.error[0].message) } thedata = {} } else { thedata.map(function (item, index) { theArr.push({ key: index, name: item.name, id: item.id, }) }) } this.setState({ departmentArr: theArr, }) }.bind(this), }).always( function () { this.setState({ loading: false, }) }.bind(this) ) }, // 业务类别 categoryList() { this.setState({ loading: true, }) $.ajax({ method: 'get', dataType: 'json', crossDomain: false, url: globalConfig.context + '/api/admin/ProjectSize/getAllCname', data: { flag: 0 }, success: function (data) { let thedata = data.data let theArr = [] if (!thedata) { if (data.error && data.error.length) { message.warning(data.error[0].message) } thedata = {} } else { thedata.map(function (item, index) { theArr.push({ key: index, name: item.cname, id: item.id, }) }) } this.setState({ categoryArr: theArr, }) }.bind(this), }).always( function () { this.setState({ loading: false, }) }.bind(this) ) }, changeList(arr) { const newArr = [] this.state.columns.forEach((item) => { arr.forEach((val) => { if (val === item.title) { newArr.push(item) } }) }) this.setState({ changeList: newArr, }) }, timeClose() { this.setState({ timeVisible: false, }) }, timeDetail(record) { this.setState({ loading: true, recordHour: record.hours, }) $.ajax({ method: 'get', dataType: 'json', crossDomain: false, url: globalConfig.context + '/api/admin/orderProject/taskHoursDetailsList', data: { taskId: record.id, }, success: function (data) { if (data.error && data.error.length) { message.warning(data.error[0].message) } else { this.setState({ dataSourceTime: data.data, }) } }.bind(this), }).always( function () { this.setState({ loading: false, }) }.bind(this) ) }, showDeleteConfirm(num, fn) { let text = getProjectName(num) confirm({ title: <p style={{ fontSize: 16, fontWeight: 900 }}>注意</p>, content: ( <p style={{ fontWeight: 900, color: 'red' }}> 当前的项目状态为{text},保存后将触发对应的催款节点!!!您确定保存? </p> ), okText: '确定', okType: 'danger', cancelText: '取消', onOk() { fn() }, onCancel() { }, }) }, // 项目发起外包 sureOut(startType) { if (this.state.startType !== 0 && this.state.startType !== 1 && this.state.startType !== 2) { message.warning('请选择类型') return } //0正常 1专利 2软著 3审计 if (this.state.projectType === 1) { //专利 // if (this.state.patentType === -1) { // message.warning('请选择专利类型') // return // } if (this.state.patentNameType === -1) { message.warning('请选择专利类型名称') return } if (this.state.patentNameType == 3) { if (!this.state.patentName) { message.warning('请填写专利名称') return } } } if (!this.state.outsourceRemarks) { message.warning('备注不能为空') return } //refundStatus 0-待审核 ,1-审核通过,2-审核拒绝 //类型为供应商时不需要发起原因 //this.state.startType 0外包 1供应商 if (!this.state.reason && (this.state.refundStatus === 2 || typeof this.state.refundStatus === 'undefined') && this.state.startType == 0) { message.warning('发起原因不能为空') return } // if (!this.state.pictureUrl && !Array.isArray(this.state.pictureUrl)) { // message.warning('合同扫描件不能为空') // return // } // if(this.state.pictureUrl.length === 0){ // message.warning('合同扫描件不能为空') // return // } let _this = this; let ajaxObj = null; confirm({ title: startType === 0 ? '确定要发起外包吗?' : '确定要提交供应商信息吗?', content: startType === 0 ? '高于总部价格,费用个人承担' : '确定提交供应商信息后,不可修改', onOk() { return new Promise((resolve, reject) => { _this.setState({ sureOutLoading: true, }) let data = { tid: _this.state.id, orderNo: _this.state.orderNo, type: 1, //分类 0订单 1项目 startType: _this.state.startType, //支付类型 0外包 1供应商 false 0 companyName: _this.state.companyName, amount: _this.state.amount, outsourceRemarks: _this.state.outsourceRemarks, unitNumber: _this.state.unitNumber, unitPrice: _this.state.unitPrice, id: _this.state.refundStatus === 2 ? _this.state.mid : undefined,//被拒绝外包申请时,需要传id } for (let i of Object.keys(data)) { if (data[i] === null) { delete data[i]; } } if (_this.state.startType !== 0 && _this.state.patentType === 1) { data.actualOfficial = _this.state.containOfficialFees;//0实际已缴费 1实际未缴费 } //refundStatus 0-待审核 ,1-审核通过,2-审核拒绝 审核被驳回时和第一次发起外包时,要填写发起原因 //this.state.startType 0外包 1供应商 //类型为外包时不需要传 发起原因 if ((_this.state.refundStatus === 2 || typeof _this.state.refundStatus === 'undefined') && _this.state.startType !== 1) { data.reason = _this.state.reason } if (_this.state.projectType === 1) { data.patentType = _this.state.patentType; data.patentNameType = _this.state.patentNameType; if (_this.state.patentNameType == 3) { data.patentName = _this.state.patentName; } } if (_this.state.pictureUrl && Array.isArray(_this.state.pictureUrl) && _this.state.pictureUrl.length !== 0) { data.pictureUrl = _this.getUrl(_this.state.pictureUrl).length ? _this.getUrl(_this.state.pictureUrl) : '' } ajaxObj = $.ajax({ method: 'POST', dataType: 'json', crossDomain: false, url: globalConfig.context + '/api/admin/outsourceOrg/outsourceProjectAudit', data: data, }).done( function (data) { _this.setState({ sureOutLoading: false, }) if (!data.error.length) { resolve(); message.success('提交成功!') _this.waiDetail(); _this.thirdTable(_this.state.tid); _this.getSelectOutsourceLog(_this.state.tid); if (_this.state.paySubject.length === 0) { _this.xiangqing(_this.state.tid); // 获取Csort _this.getCsortData(localStorage.getItem('cSort')) _this.payNodeTable(_this.state.tid); } else { _this.payNodeTable(_this.state.tid) } } else { message.warning(data.error[0].message); _this.waiDetail(); _this.thirdTable(_this.state.tid); _this.getSelectOutsourceLog(_this.state.tid); reject(); } }.bind(_this) ) }).catch((err) => console.log(err)); }, onCancel() { ajaxObj ? ajaxObj.abort() : ''; _this.setState({ sureOutLoading: false, }) }, }); }, callback(e) { this.setState({ activeKey: e, }) if (e == 3) { this.orderDetailData(this.state.orderNo) this.xiangmu(this.state.orderNo) this.jiedian(this.state.orderNo) this.jiedianNew(this.state.orderNo) } }, getOrgCodeUrlWai(e) { this.setState({ pictureUrl: e }) }, getUrl(url) { let theorgCodeUrl = [] if (url.length) { let picArr = [] url.map(function (item) { if (item.response && item.response.data && item.response.data.length) { picArr.push(item.response.data) } }) theorgCodeUrl = picArr.join(',') } return theorgCodeUrl }, waiDetail() { let url = window.location.href.substring(7) this.setState({ waiDetailLoading: true, }) let ajaxObj = $.ajax({ method: 'get', dataType: 'json', crossDomain: false, url: globalConfig.context + '/api/admin/outsourceOrg/orderOutsourceDtails', data: { tid: this.state.id, orderNo: this.state.orderNo, }, }).done( function (data) { if (!data.error.length && data.data) { if (!isNaN(parseFloat(data.data.unitNumber))) { this.setState({ oldInfor: { companyName: data.data.companyName, unitPrice: data.data.unitPrice, unitNumber: data.data.unitNumber, amount: data.data.amount, outsourceRemarks: data.data.outsourceRemarks, refundStatus: data.data.refundStatus, pictureUrl: data.data.pictureUrl ? splitUrl( data.data.pictureUrl, ',', globalConfig.avatarHost + '/upload', url ) : [], //图片地址 }, }) } else { this.setState({ oldInfor: {}, }) } this.setState({ containOfficialFees: data.data.actualOfficial,//官费类型 0实际已缴费 1实际未缴费 startType: data.data.startType, //类型 patentType: data.data.patentType, //专利类型 patentNameType: data.data.patentNameType, //专利名称类型 patentName: data.data.patentName, //专利名称 outsourceRemarks: data.data.outsourceRemarks, remarks: data.data.remarks, companyName: data.data.companyName, amount: data.data.amount, mid: data.data.id, unitPrice: data.data.unitPrice, refundStatus: data.data.refundStatus, unitNumber: data.data.unitNumber, //如果存在 证明是以前的旧数据 pictureUrl: data.data.pictureUrl ? splitUrl( data.data.pictureUrl, ',', globalConfig.avatarHost + '/upload', url ) : [], //图片地址 createTimes: data.data.createTimes, auditTimes: data.data.auditTimes, }, () => { this.setState({ waiDetailLoading: false, }) }) } else if (data.error && data.error.length) { message.warning(data.error[0].message); this.setState({ waiDetailLoading: false, }) } else if (!data.data) { this.setState({ refundStatus: undefined, waiDetailLoading: false, }) } }.bind(this) ) this.setState({ orderOutsourceDtailsAjaxObj: ajaxObj }) }, rizhi() { this.setState({ loading: true, }) $.ajax({ method: 'get', dataType: 'json', crossDomain: false, url: '/api/admin/newOrder/selectOrderLog', data: { orderNo: this.state.orderNo, }, success: function (data) { let theArr = [] let thisData = data.data if (!thisData.length) { if (data.error && data.error.length) { message.warning(data.error[0].message) } thisData = {} } else { for (let i = 0; i < data.data.length; i++) { let thisdata = data.data[i] theArr.push({ processName: thisdata.processName, adminName: thisdata.adminName, createDate: thisdata.createDate, remarks: thisdata.remarks, }) } } this.setState({ dataSourceY: theArr, }) }.bind(this), }).always( function () { this.setState({ loading: false, }) }.bind(this) ) }, closeOrderLog() { this.setState({ avisible: false, }) }, getOrderLog() { this.setState({ avisible: true, }) this.rizhi() }, async orderChange(key) { this.setState({ activeKey: key, }) if (key === '3') { this.orderDetailData(this.state.orderNo) this.xiangmu(this.state.orderNo) this.jiedian(this.state.orderNo) this.jiedianNew(this.state.orderNo) } else if (key === '2') { this.waiDetail(); this.thirdTable(this.state.tid); if (this.state.paySubject.length === 0) { await this.xiangqing(this.state.tid); // 获取Csort await this.getCsortData(localStorage.getItem('cSort')) await this.payNodeTable(this.state.tid); } else { await this.payNodeTable(this.state.tid) } this.getSelectOutsourceLog(this.state.tid); } else if (key === "1") { this.xiangqing(this.state.tid); } }, //节点列表 jiedian(orderNos) { $.ajax({ method: 'get', dataType: 'json', crossDomain: false, url: globalConfig.context + '/api/admin/newOrder/selectOrderDun', data: { orderNo: orderNos, }, success: function (data) { let theArr = [] let thisData = [] if (data.error.length || data.data.list == '') { if (data.error && data.error.length) { message.warning(data.error[0].message) } } else { for (let i = 0; i < data.data.length; i++) { thisData = data.data[i] theArr.push({ key: i, dunSubject: thisData.dunSubject ? thisData.dunSubject.toString() : '', //催款科目 id: thisData.id, //节点Id money: thisData.money, //催款金额 dunStatus: thisData.dunStatus, //催款状态 }) } this.setState({ jiedian: theArr, }) } }.bind(this), }) }, jiedianNew(orderNos) { $.ajax({ method: 'get', dataType: 'json', crossDomain: false, url: globalConfig.context + '/api/admin/newOrderDun/selectListNewOrderDun', data: { orderNo: orderNos, }, success: function (data) { if (data.error && data.error.length) { message.warning(data.error[0].message) } else { let theArr = [] let thisData = [] let arr = data.data || [] let totalCui = 0 for (let i = 0; i < arr.length; i++) { thisData = arr[i] totalCui += +thisData.money theArr.push({ key: i, dunSubject: thisData.dunSubject ? thisData.dunSubject.toString() : '', //催款科目 id: thisData.id, //节点Id tid: thisData.tid, //节点指定的第三方id money: thisData.money, //催款金额 // orderNo: record ? record.orderNo : this.props.datauser.orderNo, commodityName: thisData.commodityName, projectType: thisData.projectType, dunTypeName: thisData.dunTypeName, status: thisData.status, waitDay: thisData.waitDay, effectiveCount: thisData.effectiveCount, startDate: thisData.startDate, dunType: thisData.dunType, appropriationRatio: thisData.appropriationRatio, customizeName: thisData.customizeName, customizeTimes: thisData.customizeTimes, }) } if (!totalCui) { totalCui = 0 } totalCui = (Math.round(totalCui * 1000000) / 1000000).toFixed(6) this.setState({ jiedianNew: theArr, totalCui, }) } }.bind(this), }).always( function () { this.setState({ loading: false, }) }.bind(this) ) }, orderDetailData(orderNos) { this.setState({ loading: true, }) $.ajax({ method: 'get', dataType: 'json', crossDomain: false, url: globalConfig.context + '/api/admin/newOrder/getOrderNewDetail', data: { orderNo: orderNos, }, success: function (data) { if (data.error.length || data.data.list == '') { if (data.error && data.error.length) { message.warning(data.error[0].message) this.setState({ loading: false, }) } } else { let thisdata = data.data this.setState({ orderUid: thisdata.uid, loading: false, userName: thisdata.userName, primaryOrderNo: thisdata.primaryOrder, additionalOrder: thisdata.additionalOrder, contractNo: thisdata.contractNo, orderData: thisdata, isAddition: thisdata.additionalOrder ? true : false, contractPictureUrl: thisdata.contractPictureUrl ? splitUrl( thisdata.contractPictureUrl, ',', globalConfig.avatarHost + '/upload' ) : [], }) } }.bind(this), }) }, //点击新增供应商 addcontactNew() { this.state.contactListNew.push({ key: this.state.contactListNew.length, money: '', dunSubject: undefined, orderNo: this.state.orderNo, dunTarget: this.state.kehuId, }) this.setState({ contactListNew: this.state.contactListNew, cuiFlag: true, }) }, //查看第三方信息表格 thirdTable(id, lv = true) { this.setState({ thirdInfoLoading: true, }) let ajaxObj = $.ajax({ method: 'get', dataType: 'json', crossDomain: false, url: globalConfig.context + '/api/admin/company/selectCompany', data: { tid: id, }, success: function (data) { if (data.error && data.error.length) { message.warning(data.error[0].message) } else { let companyNameArr = []; let theArr = []; let thisData = []; let arr = data.data || []; let allTotalAmount = 0; let type = 0; let startType = 0; let patentNameType = 0; for (let i = 0; i < arr.length; i++) { thisData = arr[i] allTotalAmount = (allTotalAmount * 10000 + thisData.totalAmount * 10000) / 10000 companyNameArr.push(thisData.companyName); thisData.key = i; type = thisData.patentType; thisData.patentType = thisData.type; theArr.push(thisData); startType = thisData.startType; patentNameType = thisData.patentNameType } if (!allTotalAmount) { allTotalAmount = 0 } for (let d = 0; d < theArr.length; d++) { theArr[d].companyName = theArr[d].companyName + '-' + theArr[d].id; companyNameArr[d] = { companyName: theArr[d].companyName, id: theArr[d].id, } } if ((type === 0 || type === 1) && lv && arr.length > 0) { this.setState({ patentType: type === 0 ? 0 : 1, //0专利申请 1专利转让 patentNameType: patentNameType, //0实用新型 1发明专利 2外观专利 3 其他 }) } //设置项目类型 if (arr.length > 0) { this.setState({ startType: startType }) } this.setState({ tid: id, PayNodeCompany: companyNameArr, thirdInfoList: theArr, allTotalAmount: allTotalAmount, }, () => { this.projectTypeTabContent(this.state.projectType); }) } }.bind(this), }).always( function () { this.setState({ thirdInfoLoading: false, }) }.bind(this) ) this.setState({ selectCompanyAjaxObj: ajaxObj }) }, //外包日志列表 getSelectOutsourceLog(tid) { this.setState({ loading: true, }) $.ajax({ method: 'get', dataType: 'json', crossDomain: false, url: globalConfig.context + '/api/admin/outsourceOrg/selectOutsourceLog', data: { tid: tid, }, success: function (data) { if (data.error.length) { if (data.error && data.error.length) { message.warning(data.error[0].message); } } else { this.setState({ outsourceLogs: data.data }) } this.setState({ loading: false, }) }.bind(this), }).always( function () { this.setState({ loading: false, }) }.bind(this) ) }, payNodeTable(id) { this.setState({ payNodeLoading: true, }) let ajaxObj = $.ajax({ method: 'get', dataType: 'json', crossDomain: false, url: globalConfig.context + '/api/admin/company/selectPaymentNode', data: { tid: id, }, success: function (data) { if (data.error && data.error.length) { message.warning(data.error[0].message) } else { let payNodeArr = [] let thisData = [] let arr = data.data || [] //对#5283自定义的补充展示 let infor = [...this.state.paySubject]; infor.push({ key: '自定义', value: '0' }); this.setState({ paySubject: infor }); for (let i = 0; i < arr.length; i++) { thisData = arr[i] //遍历paySubject,获取当前dunType对应的key infor.map((item) => { if (item.value == thisData.dunType) { thisData.dunType = item.key } }) payNodeArr.push({ key: i, id: thisData.id, //付款节点Id nodeId: thisData.id, //付款节点Id tid: thisData.tid, companyName: thisData.companyName, //供应商名称 projectType: thisData.projectType, //项目分类 dunType: thisData.dunType, //催款分类 unitPrice: thisData.unitPrice, //单价 quantity: thisData.quantity, //数量 totalAmount: thisData.totalAmount, //总价 partyAmount: thisData.partyAmount, //付款 partyTimes: thisData.partyTimes, //付款时间 cid: thisData.cid, //机构id status: thisData.status, //催款状态 0-未支付 1-待全款 ,2已全款 status=2的时候已经全款,申请付款按钮可以去掉了 }) } for (let d = 0; d < payNodeArr.length; d++) { payNodeArr[d].companyName = payNodeArr[d].companyName + '-' + payNodeArr[d].cid; } this.setState({ tid: id, payNodeList: payNodeArr, }) } }.bind(this), }).always( function () { this.setState({ payNodeLoading: false, }) }.bind(this) ) this.setState({ selectPaymentNodeAjaxObj: ajaxObj }) return ajaxObj; }, // 新增第三方供应商信息 addThirdList() { this.setState({ ThirdListVisible: true, }) }, // 查询订单负责人列表 followUpHY(e) { this.setState({ projectDirector: e }); $.ajax({ method: "get", dataType: "json", crossDomain: false, url: globalConfig.context + "/api/admin/customer/listAdminByName", data: { adminName: e, }, success: function (data) { let thedata = data.data; if (!thedata) { if (data.error && data.error.length) { message.warning(data.error[0].message); } thedata = {}; } this.setState({ HYlist: thedata, }); }.bind(this), }).always( function () { this.setState({ loading: false, }); }.bind(this) ); }, // 选中订单负责人 selectHY(value) { const { HYlist } = this.state; const newdataSources = JSON.stringify(HYlist) == "{}" ? [] : HYlist; this.setState({ projectId: newdataSources.find((item) => item.name == value).id, }); }, addProjectName() { $.ajax({ url: globalConfig.context + '/api/admin/taskDetails/add', method: 'post', data: { tid: this.state.tid, projectName: this.state.projectDirector, projectId: this.state.projectId, }, }).done( function (data) { if (!data.error.length) { } else { message.warning(data.error[0].message) } }.bind(this) ) }, updateProjectStatus(projectStatus, fn) { $.ajax({ url: globalConfig.context + '/api/admin/orderProject/updateProjectStatus', method: 'post', data: { tid: this.state.tid, projectStatus: projectStatus, timeRecord: '{}' }, }).done( function (data) { if (!data.error.length) { this.setState({ timeRecordparse: {}, }) message.success('保存成功!'); fn(); } else { message.warning(data.error[0].message) } }.bind(this) ) }, // 新增支付节点 addPayNode() { this.setState({ PayNodeVisible: true, }) }, // 第三方信息自动计算总金额 calculatedAmount() { let currentTotalPrice currentTotalPrice = this.state.thirdUnitPrice * this.state.thirdQuantity currentTotalPrice = currentTotalPrice.toFixed(6) this.setState({ currentTotalPrice: currentTotalPrice, }) }, // 付款节点自动计算总金额 payNodeCalculatedAmount(num) { let currentTotalPrice, quantity, unitPrice //获取当前供应商名称对应的单价并更新 this.state.thirdInfoList.forEach((item) => { if (item.companyName === this.state.thirdCompanyName) { currentTotalPrice = num ? item.unitPrice * num : item.quantity * item.unitPrice; currentTotalPrice = currentTotalPrice.toFixed(6); quantity = num ? num : item.quantity; unitPrice = item.unitPrice; } }) this.setState({ payNodeQuantity: num ? num : quantity, }) if (this.state.projectType !== 2) { this.setState({ currentTotalPrice: currentTotalPrice, thirdUnitPrice: unitPrice }) } }, // 保存供应商信息 handleCancelq() { let api if (this.state.ThirdId) { //修改 api = '/api/admin/company/updateCompany' } else { //新增 api = '/api/admin/company/addCompany' } let customerId = 0; let isHave = this.state.customerArr.some((value) => { if (value.companyName === this.state.thirdCompanyName) { customerId = value.id return true; } }); if (!isHave && this.state.projectType !== 0) { message.warning('请输入正确的供应商名称') return; } this.setState({ loading: true, }) // material: this.state.thirdMaterial, //方案 // urgent: this.state.thirdUrgent, //加急 // unitPrice: this.state.thirdUnitPrice, //单价 let data = { id: this.state.ThirdId, //id tid: this.state.tid, //订单编号 companyName: this.state.thirdCompanyName, //第三方名称 quantity: this.state.thirdQuantity, //数量 // totalAmount: this.state.currentTotalPrice, //总价 remarks: this.state.thirdRemarks, //备注 } if (this.state.projectType === 0) { data.unitPrice = this.state.thirdUnitPrice; } if (isHave) { data.cid = customerId ////公司id } $.ajax({ url: globalConfig.context + api, method: 'post', dataType: 'json', crossDomain: false, data: data, }).done( function (data) { this.setState({ loading: false, }) if (!data.error.length) { message.success('保存成功!') this.setState({ ThirdId: '', ThirdListVisible: false, thirdCompanyName: '', //第三方名称 thirdUnitPrice: '', //单价 thirdQuantity: '', //数量 currentTotalPrice: '', //总价 thirdRemarks: '', thirdUrgent: 0, }) // this.visitCancel(); this.thirdTable(this.state.tid) } else { message.warning(data.error[0].message) } }.bind(this) ) }, //保存付款节点 savePayNode() { let api if (this.state.ThirdId) { //修改 api = '/api/admin/company/updatePaymentNode' } else { //新增 api = '/api/admin/company/addPaymentNode' } // totalAmount: this.state.currentTotalPrice, //总价 // partyAmount: this.state.partyAmount, //付款金额 // let customerId = 0; this.state.PayNodeCompany.some((value) => { if (value.companyName === this.state.thirdCompanyName) { customerId = value.id return true; } }); if (!this.state.thirdCompanyName) { message.error('请选择供应商名称'); return; } if (!this.state.paySubjectName) { message.error('请选择付款科目'); return; } if (!this.state.payNodeQuantity) { message.error('请输入数量'); return; } let data = { id: this.state.ThirdId, //id tid: this.state.tid, //订单编号 cid: customerId,//对应的第三方信息 companyName: this.state.thirdCompanyName.split('-')[0], //第三方名称 quantity: this.state.payNodeQuantity, //数量 dunType: this.state.dunType, //催款节点 projectType: this.state.cSort, //项目分类 } if (this.state.paySubjectName === '0') { if (!this.state.partyTimes) { message.error('请选择付款时间'); return; } data.partyTimes = this.state.partyTimes //付款时间 } if (this.state.projectType !== 2) { //其他类型 0正常 1专利 2软著 3审计 data.totalAmount = this.state.currentTotalPrice //总价 data.unitPrice = this.state.thirdUnitPrice //单价 } this.setState({ loading: true, }) $.ajax({ url: globalConfig.context + api, method: 'post', dataType: 'json', crossDomain: false, data: data, }).done( function (data) { this.setState({ loading: false, }) if (!data.error.length) { message.success('保存成功!') this.setState({ ThirdId: '', PayNodeVisible: false, thirdCompanyName: '', //第三方名称 paySubjectName: '', //付款科目名称 thirdUnitPrice: '', //单价 thirdQuantity: '', //数量 payNodeQuantity: 1, //付款节点数量 currentTotalPrice: '', //总价 partyAmount: '', //付款金额 partyTimes: '', //付款时间 dunType: '', //催款节点 }) // this.visitCancel(); this.payNodeTable(this.state.tid) } else { message.warning(data.error[0].message) } }.bind(this) ) }, // 取消 handleCancelclose() { this.setState({ PayNodeVisible: false, payNodeInfor: {}, ThirdId: '', ThirdListVisible: false, thirdCompanyName: '', //第三方名称 paySubjectName: '', //付款科目名称 thirdUnitPrice: '', //单价 partyTimes: '', thirdQuantity: 1, //数量 payNodeQuantity: 1, currentTotalPrice: '', //总价 thirdRemarks: '', thirdUrgent: 0, //加急状态 }) }, // 删除供应商信息 confirmDeletNew(value, resolve = () => { }, reject = () => { }) { let hide = message.loading('检测中...'); let _this = this; if (value === -1) { _this.handleConfirmDelet(value, resolve, reject); return; } $.ajax({ url: globalConfig.context + '/api/admin/company/checkThirdParty', method: 'get', data: { id: value.id, }, }).done( function (data) { hide(); if (data.error.length === 0) { if (data.data.code === 0) { _this.handleConfirmDelet(value, resolve, reject) } else { let content = data.data.desc; confirm({ title: '确定要删除此供应商信息吗?', content: content, onOk() { return new Promise((resolve, reject) => { _this.handleConfirmDelet(value, resolve, reject) }).catch(() => console.log('Oops errors!')); }, onCancel() { }, }); } } else { message.warning(data.error[0].message) } }.bind(this) ) }, handleConfirmDelet(value, resolve = () => { }, reject = () => { }) { this.setState({ loading: true, ThirdListVisible: false, }) const hide = message.loading('删除中...', 0); let id = ''; if (value === -1) { if (this.state.thirdInfoList.length === 1) { id = this.state.thirdInfoList[0].id } else { this.state.thirdInfoList.map((value, index) => { id += value.id + ','; }) } } else { id = value.id } $.ajax({ url: globalConfig.context + '/api/admin/company/deleteCompany', method: 'post', data: { id: id, }, }).done( function (data) { this.setState({ loading: false, }); hide(); if (!data.error.length) { message.success('删除成功!'); let arr = this.state.payNodeList.filter((v) => { return v.companyName === value.companyName }); let str = ''; arr.map((value) => { str += value.id + ','; }) if (arr.length > 0) { this.payNodeConfirmDeletNew({ id: str }); } this.thirdTable(this.state.tid) // this.payNodeTable(this.state.tid) this.paymentRecordRef && this.paymentRecordRef.refresh();; resolve(); } else { message.warning(data.error[0].message) reject(); } }.bind(this) ) }, // 付款催款检测 checkNode(value) { let hide = message.loading('检测中...'); let _this = this; $.ajax({ url: globalConfig.context + '/api/admin/company/checkNode', method: 'get', data: { id: value.id, }, }).done( function (data) { hide(); if (data.error.length === 0) { if (data.data.code === 0) { _this.payNodeConfirmDeletNew(value) } else { let content = data.data.desc; confirm({ title: '确定要删除此付款节点吗?', content: content, onOk() { return new Promise((resolve, reject) => { _this.payNodeConfirmDeletNew(value, resolve, reject) }).catch(() => console.log('Oops errors!')); }, onCancel() { }, }); } } else { message.warning(data.error[0].message) } }.bind(this) ) }, // 删除付款节点 payNodeConfirmDeletNew(index, resolve = () => { }, reject = () => { }) { this.setState({ loading: true, PayNodeVisible: false, }) let id = ''; if (index === -1) { this.state.payNodeList.map((value, index) => { id += value.id + ','; }) } else { id = index.id } $.ajax({ url: globalConfig.context + '/api/admin/company/deletePaymentNode', method: 'post', data: { id: id, }, }).done( function (data) { this.setState({ loading: false, }) if (!data.error.length) { message.success('删除成功!') this.payNodeTable(this.state.tid) this.paymentRecordRef && this.paymentRecordRef && this.paymentRecordRef.refresh();; resolve(); } else { message.warning(data.error[0].message) reject(); } }.bind(this) ) }, //点击供应商详情 tableRowClickOne(record) { this.setState({ ThirdListVisible: true, ThirdId: record.id, //供应商id thirdCompanyName: record.companyName, //第三方名称 thirdUnitPrice: record.unitPrice, //单价 thirdQuantity: record.quantity, //数量 currentTotalPrice: record.totalAmount, //总价 thirdMaterial: record.material, //有无材料 thirdUrgent: record.urgent, //加急情况 thirdRemarks: record.remarks, audit: record.audit,//审计 assets: record.assets,//公司资产 income: record.income,//收入 }) }, //点击付款节点详情 payNodeTableRowClickOne(record) { this.setState({ PayNodeVisible: true, ThirdId: record.id, //供应商id thirdCompanyName: record.companyName, //第三方名称 thirdUnitPrice: record.unitPrice, //单价 thirdQuantity: record.quantity, //供应商数量 payNodeQuantity: record.quantity, //付款节点数量 currentTotalPrice: record.totalAmount, //总价 partyTimes: record.partyTimes, paySubjectName: record.dunType, }); let obj = JSON.parse(JSON.stringify(record)); this.state.paySubject.some((value) => { if (value.key === obj.dunType) { obj.dunType = value.value; return true; } }); this.setState({ payNodeInfor: obj, //付款节点详情 }); }, // 项目类型,专利类型,专利名称切换时 先检测再删除 detectDeletion(type = 0, fn = () => { }) { let hide = message.loading(type === 1 ? '切换中...' : '检测中...'); let _this = this; $.ajax({ url: globalConfig.context + '/api/admin/company/updateCheck', method: 'get', data: { id: this.state.id, type }, }).done( function (data) { hide(); if (data.error.length === 0) { if (type === 1) { message.success('切换成功!'); fn(); _this.thirdTable(this.state.tid, false); _this.payNodeTable(this.state.tid); _this.paymentRecordRef.refresh(); } else { if (data.data.code === 0) { message.success('切换成功!'); fn(); } else { confirm({ title: '确定要删除此供应商信息吗?', content: data.data.desc, onOk() { _this.detectDeletion(1, fn) }, onCancel() { }, }); } } } else { message.warning(data.error[0].message) } }.bind(this) ) }, // 修改项目满意度 updateSatisfactionDegree(status) { let satisfactionDegreeUrls = [] if (this.state.satisfactionDegreeUrl.length) { let picArr = [] this.state.satisfactionDegreeUrl.map(function (item) { if (item.response && item.response.data && item.response.data.length) { picArr.push(item.response.data) } }) satisfactionDegreeUrls = picArr.join(',') } if (status == 2) { if (satisfactionDegreeUrls.length == 0) { message.warning("请先上传满意度调查表!"); return } if (!this.state.formRetrieve) { message.warning("请先选择满意度!"); return } } let obj1 = { id: this.state.tid, formRetrieve: 1, } let obj2 = { id: this.state.tid, formRetrieve: status, satisfactionDegree: this.state.satisfactionDegree, satisfactionDegreeUrl: satisfactionDegreeUrls.length ? satisfactionDegreeUrls : '', } this.setState({ loading: true, }); $.ajax({ url: globalConfig.context + "/api/admin/orderProject/updateSatisfactionDegree", method: "post", data: status == 1 ? obj1 : obj2, }).done( function (data) { this.setState({ loading: false, }); if (data.error.length === 0) { if (status == 1) { this.setState({ formRetrieve: 1 }) } else if (status == 2) { this.setState({ formRetrieve: 2 }) message.success("保存成功!"); } } else { message.warning(data.error[0].message); } }.bind(this) ); }, //会员 可展开颜色不同 addRowColor(record) { if (!!record.splitList && record.splitList.length > 0) { return 'light' } else { return 'dark' } }, // 暂停项目 颜色 suspendColor(record) { if (record.projectStatus == 29) { return 'light' } else { return 'dark' } }, render() { const expandedRowRenderVip = (e) => { const data = e.splitList; let columns = []; if (data instanceof Array && data.length) { if (e.cSort == 6) { columns = [ { title: "负责人", dataIndex: "receiverName", key: "receiverName", }, { title: "负责人电话", dataIndex: "receiverMobile", key: "receiverMobile", }, { title: "会员负责人", dataIndex: "projectMemberName", key: "projectMemberName", }, { title: "项目状态", dataIndex: "projectStatus", key: "projectStatus", render: (text) => { return getProjectName(text); }, }, { title: "本次派单", dataIndex: "serviceYear", key: "serviceYear", }, { title: "项目说明", dataIndex: "taskComment", key: "taskComment", render: (text, record) => { let textStr = text; let textArr = []; if (record.htMember === 1) { textArr.push("高新会员"); } if (record.additionalDeduction === 1) { textArr.push("加计扣除"); } if (record.rdAwardsubsidy === 1) { textArr.push("研发补助"); } if (textArr.length) { textStr = `${textArr.join("&")} ${!!text ? `(${text})` : ''}` } return ( <Tooltip title={textStr}> <div // style={{ // width: 100, // overflow: "hidden", // whiteSpace: "nowrap", // textOverflow: "ellipsis", // }} >{textStr}</div> </Tooltip> ) }, }, ]; } else { columns = [ { title: "子项目名称", dataIndex: "taskName", key: "taskName" }, { title: "子项目数量", dataIndex: "commodityQuantity", key: "commodityQuantity" }, { title: "拆分操作人", dataIndex: "splitAname", key: "splitAname" }, { title: "项目负责人", dataIndex: "receiverName", key: "receiverName" }, { title: "拆分时间", dataIndex: "splitTimes", key: "splitTimes" } ] } return ( <Table columns={columns} dataSource={data} pagination={false} /> ); } else { columns = []; return ( <p style={{ fontWeight: "bold", color: "red", textAlign: "center" }} > {e.cSort == 6 ? "暂无派单" : "此项目暂未拆分"} </p> ); } }; const formItemLayout = { labelCol: { span: 8 }, wrapperCol: { span: 14 }, } let departmentArr = this.state.departmentArr || [] let categoryArr = this.state.categoryArr || [] const approvaChildren = approvalOptions.map(i => ( <Option key={i.value}>{i.label}</Option> )); const dataSources = this.state.HYlist || []; const options = dataSources.map((group) => ( <Select.Option key={group.id} value={group.name}> {group.name} </Select.Option> )); return ( <div className="user-content"> {this.state.resVisible ? ( <ResolutionDetail cancel={this.resCancel} detail={this.state.resRecord} visible={this.state.resVisible} id={this.state.resRecord.orderNo} /> ) : ( '' )} <ShowModalDiv ShowModal={this.state.showModal} onClose={() => { this.setState({ showModal: false }) }} /> <div className="content-title" style={{ marginBottom: 10 }}> <span style={{ fontWeight: 900, fontSize: 16 }}>我的项目任务</span> </div> <Tabs defaultActiveKey="2" className="test" bordered> <TabPane tab="搜索" key="2"> <div className="user-search" style={{ marginLeft: 10 }}> <Input placeholder="请输入项目名称" value={this.state.projectName} onChange={(e) => { this.setState({ projectName: e.target.value }) }} /> <Input placeholder="订单编号" value={this.state.orderNoSearch} onChange={(e) => { this.setState({ orderNoSearch: e.target.value }) }} /> <Input placeholder="合同编号" value={this.state.contractNoSearch} onChange={(e) => { this.setState({ contractNoSearch: e.target.value }) }} /> <Input placeholder="客户名称" value={this.state.nameSearch} onChange={(e) => { this.setState({ nameSearch: e.target.value }) }} /> <Input placeholder="项目编号" value={this.state.taskNoSearch} onChange={(e) => { this.setState({ taskNoSearch: e.target.value }) }} /> <Select placeholder="业务类别" style={{ width: 150, marginRight: '10px' }} value={this.state.category} onChange={(e) => { this.setState({ category: e }) }} > {categoryArr.map(function (item) { return ( <Select.Option key={item.id}>{item.name}</Select.Option> ) })} </Select> <Cascaders ref={ref => this.Cascaders = ref} placeholder="选择部门" height={28} onSel={(e) => { this.setState({ departmenttSearch: JSON.stringify(e) }) }} /> <Cascader placeholder="项目状态" style={{ width: 150, marginRight: '10px' }} options={projectStatusCascader} value={this.state.projectStatusSearch} onChange={(e) => { this.setState({ projectStatusSearch: e }) }} /> <Select placeholder="特批状态" style={{ width: 150, marginRight: '10px' }} value={this.state.approvalSearch} onChange={(e) => { this.setState({ approvalSearch: e }) // console.log(this.state.approvalSearch) }} > <Select.Option key={0}>非特批</Select.Option> <Select.Option key={1}>总裁特批</Select.Option> <Select.Option key={2}>董事长特批</Select.Option> </Select> <Select placeholder="外包状态" style={{ width: 150, marginRight: '10px' }} value={this.state.outsourceStatusSearch} onChange={(e) => { this.setState({ outsourceStatusSearch: e }) // console.log(this.state.outsourceStatusSearch) }} > <Select.Option key={0}>外包待审核</Select.Option> {/* <Select.Option key={1}>外包审核通过</Select.Option> */} <Select.Option key={2}>外包审核驳回</Select.Option> <Select.Option key={999}>全部</Select.Option> </Select> <Select mode="multiple" style={{ width: 200 }} placeholder="特批类型" value={this.state.approvaType} onChange={e => { this.setState({ approvaType: e }) }} > {approvaChildren} </Select> <Select placeholder="会员分类" style={{ width: 150, marginRight: '10px' }} value={this.state.memberProjectType} onChange={(e) => { this.setState({ memberProjectType: e }) }} allowClear > <Select.Option key={1}>高新会员</Select.Option> <Select.Option key={2}>加急扣除</Select.Option> <Select.Option key={3}>研发奖补</Select.Option> </Select> <Button type="primary" onClick={this.search}> 搜索 </Button> <Button onClick={(e) => { this.reset(true) }} > 重置 </Button> {/* <span>更多搜索<Switch defaultChecked={false} onChange={this.searchSwitch.bind(this)} /></span> <div className="search-more" style={this.state.searchMore ? { display: 'none' } : {}}> <span>订单时间 :</span> <RangePicker value={[this.state.releaseDate[0] ? moment(this.state.releaseDate[0]) : null, this.state.releaseDate[1] ? moment(this.state.releaseDate[1]) : null]} onChange={(data, dataString) => { this.setState({ releaseDate: dataString }); }} /> </div> */} </div> </TabPane> <TabPane tab="导出Excel" key="3"> <Button type="primary" style={{ margin: '11px 0 10px 10px' }} onClick={this.exportExec} > 导出Excel </Button> </TabPane> <TabPane tab="更改表格显示数据" key="1"> <div style={{ marginLeft: 10 }}> <ChooseList columns={this.state.columns} changeFn={this.changeList} changeList={this.state.changeList} top={55} margin={11} /> </div> </TabPane> {/* <TabPane tab="批量操作" key="6"> <Button type="primary" disabled={this.state.selectedRowKeys.length == 0} style={{ margin: "0px 0px 10px 10px" }} onClick={e => { e.stopPropagation(), this.evaluateY(this.state.selectedRowKeys, "财务专员"); }} > 转交 </Button> </TabPane> */} </Tabs> <div className="patent-table"> <Spin spinning={this.state.loading}> <Table columns={ this.state.changeList == undefined ? this.state.columns : this.state.changeList } dataSource={this.state.dataSource} pagination={this.state.pagination} scroll={{ x: 'max-content', y: 0 }} onRowClick={this.tableRowClick.bind(this)} rowClassName={this.suspendColor} bordered size={'small'} /> </Spin> <p style={{ display: "inline-block", fontSize: "14px", color: "red" }} > { <span style={{ marginRight: 10 }}> {`累计:${this.state.totalNumber}个,共${this.state.totalAmount}万元`} </span> } </p> </div> <Assign title="项目" selApi={'/api/admin/orderProject/projectDistribution'} data={this.state.assignData} showDesc={this.state.assignVisible} closeDesc={this.closeAssign.bind(this)} fenpaiData={8} type={this.state.flag ? 4 : (this.props.isZxs ? 3 : 1)} roleName={this.state.nub} requestMethod={'post'} flag={this.state.flag} all={this.state} /> {this.state.visible ? <Modal className="customeDetails" footer="" title="" width="1200px" visible={this.state.visible} maskClosable={false} onOk={() => { this.visitOk(); this.state.selectCompanyAjaxObj ? this.state.selectCompanyAjaxObj.abort() : null; this.state.selectPaymentNodeAjaxObj ? this.state.selectPaymentNodeAjaxObj.abort() : null; this.state.orderOutsourceDtailsAjaxObj ? this.state.orderOutsourceDtailsAjaxObj.abort() : null; }} onCancel={() => { this.visitCancel(); this.state.selectCompanyAjaxObj ? this.state.selectCompanyAjaxObj.abort() : null; this.state.selectPaymentNodeAjaxObj ? this.state.selectPaymentNodeAjaxObj.abort() : null; this.state.orderOutsourceDtailsAjaxObj ? this.state.orderOutsourceDtailsAjaxObj.abort() : null; this.setState({ isNull: true }) }} > <div style={{ position: "relative" }}> <div style={{ position: "absolute", top: 0, left: 0, right: 0, bottom: 0, zIndex: 1000, //0未开始 1已开始 2已暂停 3已完成 4已驳回 5已退单 display: parseInt(this.state.projectStatus) === 0 ? 'flex' : 'none', alignItems: 'center', flexDirection: 'column', paddingTop: '300px', background: 'rgba(0,0,0,0.7)', borderRadius: '4px', borderTopRightRadius: '96px', }}> { (this.state.sort == 6 && this.state.isNull) ? <div style={{ width: 200, display: 'flex', flexDirection: 'column', alignItems: 'center', }} > <div style={{ textAlign: 'center', color: '#fff', fontSize: '18px', marginBottom: 15, }} >请设置会员负责人</div> <AutoComplete className="certain-category-search" dropdownClassName="certain-category-search-dropdown" dropdownMatchSelectWidth={false} style={{ width: "200px", textAlign: 'center', marginBottom: 15 }} dataSource={options} placeholder="请输入会员负责人姓名" value={this.state.projectDirector} onChange={this.followUpHY.bind(this)} filterOption={true} onSelect={this.selectHY.bind(this)} > <Input /> </AutoComplete> {/* <Input style={{ textAlign: 'center', marginBottom: 15 }} placeholder="请输入项目负责人姓名" value={this.state.projectDirector} onChange={(e) => { this.setState({ projectDirector: e.target.value }) }} /> */} <Button type="primary" size='large' onClick={() => { if (!this.state.projectDirector) { message.warning('请先设置会员负责人') return } else { this.addProjectName() } //0未开始 1已开始 2已暂停 3已完成 4已驳回 5已退单 this.updateProjectStatus(1, () => { this.xiangqing(this.state.id) }); }}> 开始启动项目 </Button> </div> : <Button type="primary" size='large' onClick={() => { //0未开始 1已开始 2已暂停 3已完成 4已驳回 5已退单 this.updateProjectStatus(1, () => { this.xiangqing(this.state.id) }); }}> 开始启动项目 </Button> } </div> <Tabs tabBarExtraContent={ <div style={{ fontWeight: 'bold', paddingRight: '15px' }}> <span> 项目名称: <span style={{ color: '#F00', paddingRight: '5px' }}>{this.state.taskName}</span> </span> <span style={{ marginLeft: '15px' }}> 项目编号: <span style={{ color: '#F00', paddingRight: '5px' }}> {this.state.id} { this.state.splitStatus === 2 ? '(' + this.state.splitSuper + '-' + this.state.splitId + ')' : '' } </span> </span> <OrderItemStatus deleteSign={this.state.deleteSign} /> </div> } activeKey={this.state.activeKey} onChange={(e) => { this.callback(e) if (e === "2") { this.waiDetail(); this.thirdTable(this.state.tid); this.payNodeTable(this.state.tid); this.getSelectOutsourceLog(this.state.tid); } else if (e === "1") { this.xiangqing(this.state.tid); } }} > <TabPane tab="项目概况" key="1"> {this.state.activeKey === "1" ? <Form layout="horizontal" onSubmit={this.handleSubmit} id="demand-form" style={{ paddingBottom: '00px' }} > <Spin spinning={this.state.loading}> <div className="clearfix"> <div className="clearfix"> <FormItem className="half-item" {...formItemLayout} label="项目状态" > { getProjectName(parseInt(this.state.projectStatus)) } { this.state.projectStatus !== 0 ? <Button type="primary" size="small" style={{ marginTop: "5px", marginLeft: '5px', }} onClick={() => { if (this.state.projectStatus == 29) { message.warn("项目已暂停,无法修改") return } this.setState({ projectSituationVisible: true, }) }} > 修改 </Button> : null } <Button type="primary" size="small" style={{ marginTop: "5px", position: "absolute", zIndex: 1, marginLeft: '5px', }} onClick={this.caozuorizhi} > 操作日志 </Button> </FormItem> <FormItem className="half-item" {...formItemLayout} label="合同编号" > <span>{this.state.contractNo}</span> </FormItem> </div> <div className="clearfix"> <FormItem className="half-item" {...formItemLayout} label="是否特批" > <span>{getApproval(this.state.approval)}</span> </FormItem> <FormItem className="half-item" {...formItemLayout} label="结算状态" > <span> {getLiquidationStatus(this.state.liquidationStatus)} </span> </FormItem> <FormItem className="half-item" {...formItemLayout} label="流程状态" > <span> {getProcessStatus(this.state.processStatus, this.state.examineName, this.state.approval)} </span> </FormItem> <FormItem className="half-item" {...formItemLayout} label="订单编号" > <span>{this.state.orderNo}</span> </FormItem> </div> <div className="clearfix"> <FormItem labelCol={{ span: 3 }} wrapperCol={{ span: 16 }} label="满意度表格" > <div> {getFormRetrieve(this.state.formRetrieve)} {this.state.formRetrieve == 0 && <Button type="primary" size="small" style={{ marginTop: "5px", marginLeft: '5px', }} onClick={() => { this.updateSatisfactionDegree(1) }} >已发送至客户</Button>} { (this.state.formRetrieve == 1 || this.state.formRetrieve == 2) && <div className="clearfix"> <FormItem labelCol={{ span: 3 }} wrapperCol={{ span: 16 }} label="满意度调查整表" > <Picture showRemove={false} //删除图标 domId={'table'} fileList={(e) => { this.setState({ satisfactionDegreeUrl: e }) }} pictureUrl={this.state.satisfactionDegreeUrl} visible={this.props.visible} data={{ sign: 'satisfactionDegree', url: '/api/admin/orderProject/upload/satisfactionDegree', }} /> </FormItem> </div> } <p style={{ color: 'red' }}> { this.state.formRetrieve == 0 ? "注:满意度调查整表,已发送时,即可上传回复件了!" : "注:回收表格后,即可上传回复件了" } </p> { (this.state.formRetrieve == 1 || this.state.formRetrieve == 2) && <div className="clearfix"> <FormItem labelCol={{ span: 3 }} wrapperCol={{ span: 16 }} label="满意度" > <Radio.Group value={this.state.satisfactionDegree} onChange={(e) => { this.setState({ satisfactionDegree: e.target.value }) }} > <Radio value={0}>非常满意</Radio> <Radio value={1}>满意</Radio> <Radio value={2}>一般</Radio> <Radio value={3}>不满意</Radio> </Radio.Group> <div> <Button type="primary" size="small" onClick={() => { this.updateSatisfactionDegree(2) }}>保存并上传</Button> </div> </FormItem> </div> } </div> </FormItem> {/* <FormItem className="half-item" {...formItemLayout} label="(满意度)备注" > <Input type="textarea" placeholder="请输入备注" rows={2} value={this.state.retrieveContent} onChange={(e) => { this.setState({ retrieveContent: e.target.value, }) }} /> </FormItem> */} {/*<FormItem*/} {/* className="half-item"*/} {/* {...formItemLayout}*/} {/* label="退单"*/} {/*>*/} {/* <Radio.Group*/} {/* value={this.state.taskRefund}*/} {/* onChange={(e) => {*/} {/* this.setState({ taskRefund: e.target.value })*/} {/* }}*/} {/* >*/} {/* <Radio value={0}>已完成</Radio>*/} {/* <Radio value={1}>未完成</Radio>*/} {/* <Radio value={2}>其他</Radio>*/} {/* </Radio.Group>*/} {/*</FormItem>*/} </div> <div className="clearfix"> {/*<FormItem*/} {/* className="half-item"*/} {/* {...formItemLayout}*/} {/* label="(退单)备注"*/} {/*>*/} {/* <Input*/} {/* type="textarea"*/} {/* placeholder="请输入备注"*/} {/* rows={2}*/} {/* value={this.state.refundContent}*/} {/* onChange={(e) => {*/} {/* this.setState({ refundContent: e.target.value })*/} {/* }}*/} {/* />*/} {/*</FormItem>*/} <div style={{ paddingLeft: '8%', }}> <div style={{ color: '#000', fontWeight: 500 }}> 特别说明 <span style={{ color: '#58a3ff', }}>(针对项目的特殊情况说明)</span> </div> <div style={{ display: 'flex', alignItems: 'center', paddingTop: '10px' }}> <div>备注:</div> <Input type="textarea" placeholder="请输入备注" rows={3} style={{ width: '33%', marginLeft: '10px', }} value={this.state.specialComment} onChange={(e) => { this.setState({ specialComment: e.target.value }); }} /> </div> </div> </div> <div className="clearfix"> <h3 className="sub-title">订单负责人信息</h3> <FormItem className="half-item" {...formItemLayout} label="负责人" > <span> {this.state.salesmanName + '(' + this.state.depName + ')'} </span> </FormItem> <FormItem className="half-item" {...formItemLayout} label="负责人电话" > <span>{this.state.salesmanMobile}</span> </FormItem> <FormItem className="half-item" {...formItemLayout} label="当前财务负责人" > <span>{this.state.nowFinance}</span> </FormItem> <FormItem className="half-item" {...formItemLayout} label="当前财务负责人电话" > <span>{this.state.nowFinanceMobile}</span> </FormItem> <FormItem className="half-item" {...formItemLayout} style={{ opacity: '.5' }} label="原负责人" > <span>{this.state.oldSalesmanName}</span> </FormItem> <FormItem className="half-item" {...formItemLayout} style={{ opacity: '.5' }} label="原负责人电话" > <span>{this.state.oldSalesmanMobile}</span> </FormItem> <FormItem className="half-item" {...formItemLayout} style={{ opacity: '.5' }} label="实际财务操作人" > <span>{this.state.financeName}</span> </FormItem> <FormItem className="half-item" {...formItemLayout} style={{ opacity: '.5' }} label="实际财务操作人电话" > <span>{this.state.financeMobile}</span> </FormItem> {/* 知识产权情况 */} <Property patentStatus={this.state.patentStatus} labelCol={4} /> <FormItem className="half-item" {...formItemLayout} label="订单留言" > <span>{this.state.orderRemarks}</span> </FormItem> <FormItem className="half-item" {...formItemLayout} label="" > <Button onClick={this.getOrderLog}>查看订单日志</Button> </FormItem> <OrderRiZi dataSourcerizhi={this.state.dataSourceY} closeOrderLog={this.closeOrderLog} visible={this.state.avisible} loading={this.state.loading} /> </div> {/*<div className="clearfix">*/} {/* <h3 className="sub-title">外包信息</h3>*/} {/* <FormItem*/} {/* className="half-item"*/} {/* {...formItemLayout}*/} {/* label="外包公司"*/} {/* >*/} {/* <Input*/} {/* value={this.state.outsourceName}*/} {/* onChange={(e) => {*/} {/* this.setState({*/} {/* outsourceName: e.target.value,*/} {/* })*/} {/* }}*/} {/* placeholder="请输入外包公司"*/} {/* style={{ width: '200px' }}*/} {/* />*/} {/* </FormItem>*/} {/* <FormItem*/} {/* className="half-item"*/} {/* {...formItemLayout}*/} {/* label="外包成本(万元)"*/} {/* >*/} {/* <Input*/} {/* value={this.state.outsourcePrice}*/} {/* onChange={(e) => {*/} {/* this.setState({*/} {/* outsourcePrice: e.target.value,*/} {/* })*/} {/* }}*/} {/* placeholder="请输入外包成本"*/} {/* style={{ width: '200px' }}*/} {/* />*/} {/* </FormItem>*/} {/*</div>*/} {/*<hr style={{border:'1px dashed #aaa', width:"90%",margin:'auto'}}/>*/} <div className="clearfix"> <h3 className="sub-title">联系信息</h3> <FormItem className="half-item" {...formItemLayout} label="客户名称" > <span>{this.state.userName}</span> <EnterpriseNameChange type='journal' style={{ marginLeft: 10 }} enterpriseId={this.state.orderUid} /> </FormItem> <FormItem className="half-item" {...formItemLayout} label="企业法人" > <Input placeholder="请输入法人名称" value={this.state.legalPerson} style={{ width: '200px' }} onChange={(e) => { this.setState({ legalPerson: e.target.value }) }} ref="commodityQuantity" /> </FormItem> <FormItem className="half-item" {...formItemLayout} label="法人电话" > <Input placeholder="请输入法人电话" value={this.state.legalPersonTel} style={{ width: '200px' }} onChange={(e) => { this.setState({ legalPersonTel: e.target.value }) }} ref="commodityQuantity" /> </FormItem> <FormItem className="half-item" {...formItemLayout} label="客户联系人" > <Input placeholder="请输入联系人名称" value={this.state.contacts} style={{ width: '200px' }} onChange={(e) => { this.setState({ contacts: e.target.value }) }} ref="commodityQuantity" /> </FormItem> <FormItem className="half-item" {...formItemLayout} label="联系人电话" > <Input placeholder="请输入联系人电话" value={this.state.contactMobile} style={{ width: '200px' }} onChange={(e) => { this.setState({ contactMobile: e.target.value }) }} ref="commodityQuantity" /> </FormItem> <FormItem className="half-item" {...formItemLayout} label="企业地址" > <Cascader options={areaSelect()} value={this.state.ProvinceCity} placeholder="选择城市" style={{ width: '200px' }} onChange={(e) => { this.setState({ ProvinceCity: e }) }} /> </FormItem> <FormItem className="half-item" {...formItemLayout} label="" ></FormItem> <FormItem className="half-item" {...formItemLayout} label="" > <Input placeholder="请输入详细地址" value={this.state.postalAddress} style={{ width: '200px', marginLeft: '12em' }} onChange={(e) => { this.setState({ postalAddress: e.target.value }) }} ref="commodityQuantity" /> </FormItem> </div> {/*<hr style={{border:'1px dashed #aaa', width:"90%",margin:'auto'}}/>*/} <div className="clearfix"> <h3 className="sub-title">项目信息</h3> {/*0通用 1专利 2软著 3审计 4双软 5高新 6商标*/} {/*贯标需要显示*/} { this.state.isIso ? <div> <FormItem className="half-item" {...formItemLayout} label="认证费" > <span> { this.state.ifCertificationFee === 1 ? '包含' : '不包含' } </span> </FormItem> {this.state.ifCertificationFee === 1 ? <FormItem className="half-item" {...formItemLayout} label="认证费(万元)" > <Input placeholder="请输入认证金额" value={this.state.certificationFee} style={{ width: '200px' }} onChange={(e) => { this.setState({ certificationFee: e.target.value }) }} /> </FormItem> : null} {this.state.ifCertificationFee === 1 ? <FormItem className="half-item" {...formItemLayout} label="" /> : null} {this.state.ifCertificationFee === 1 ? <FormItem className="half-item" {...formItemLayout} label="付款公司名称" > <Input placeholder="请输入代付款公司名称" value={this.state.certificationCorporate} style={{ width: '200px' }} onChange={(e) => { this.setState({ certificationCorporate: e.target.value }) }} ref="commodityQuantity" /> </FormItem> : null} </div> : null } <FormItem className="half-item" {...formItemLayout} label="项目编号" > <span> {this.state.splitStatus == 2 ? this.state.splitSuper + '-' + this.state.splitId : this.state.id} </span> </FormItem> <FormItem className="half-item" {...formItemLayout} label="项目名称" > <span>{this.state.taskName}</span> </FormItem> {/*<FormItem*/} {/* className="half-item"*/} {/* {...formItemLayout}*/} {/* label="项目状态"*/} {/*>*/} {/* <Select*/} {/* placeholder="选择项目状态"*/} {/* style={{ width: '200px' }}*/} {/* value={this.state.taskStatus}*/} {/* onChange={(e) => {*/} {/* this.setState({ taskStatus: e })*/} {/* }}*/} {/* >*/} {/* {taskStatus.map(function (item) {*/} {/* return (*/} {/* <Select.Option key={item.value}>*/} {/* {item.key}*/} {/* </Select.Option>*/} {/* )*/} {/* })}*/} {/* </Select>*/} {/*</FormItem>*/} <FormItem className="half-item" {...formItemLayout} label="项目类别" > <span>{this.state.cname}</span> </FormItem> <FormItem className="half-item" {...formItemLayout} label="证书编号" > {this.state.certificateNumber} </FormItem> </div> <div className="clearfix"> <h3 className="sub-title">申报系统账户信息</h3> {/*<span style={{color:'red'}}>注:仅技术部可见</span>*/} <FormItem className="half-item" {...formItemLayout} label="用户名" > <Input placeholder="请输入用户名" value={this.state.declareUser} style={{ width: '200px' }} onChange={(e) => { this.setState({ declareUser: e.target.value }) }} /> </FormItem> <FormItem className="half-item" {...formItemLayout} label="密码" > <Input placeholder="请输入密码" value={this.state.declarePwd} style={{ width: '200px' }} onChange={(e) => { this.setState({ declarePwd: e.target.value }) }} /> </FormItem> </div> <div className="clearfix"> <h3 className="sub-title">项目申报进度</h3> <DeclarationProgress timeRecordparse={this.state.timeRecordparse} startDate={this.state.startDate} taskDate={this.state.taskDate} list={[ { id: 4, name: '完成时间', value: this.state.endDate }, { id: 6, name: '受理时间', value: this.state.acceptDate }, { id: 8, name: '公示时间', value: this.state.publicityDate }, { id: 10, name: '发证时间', value: this.state.licenceDate }, { id: 15, name: '立项金额', value: this.state.setUpAmount } ]} /> {/*专利显示 bpType: 0 正常 1专利 2软著 3审计 4双软 5高新 6商标*/} { this.state.bpType === 1 || this.state.bpType === 6 ? <div> <FormItem className="half-item" {...formItemLayout} label="是否高新企业" > <Radio.Group value={this.state.highTechStatus} onChange={(e) => { this.setState({ highTechStatus: e.target.value }) }} > <Radio value={1}>是</Radio> <Radio value={0}>否</Radio> </Radio.Group> </FormItem> <FormItem /> <PatentSchedule taskId={this.state.id} bpType={this.state.bpType} acceptCount={this.state.acceptCount} certificatesCount={this.state.certificatesCount} rejectCount={this.state.rejectCount} commodityQuantity={this.state.commodityQuantity} refresh={() => { this.xiangqing(this.state.id) }} onChange={(key, value) => { if (key === 'acceptCount') { this.setState({ acceptCount: value }) } if (key === 'certificatesCount') { this.setState({ certificatesCount: value }) } if (key === 'rejectCount') { this.setState({ rejectCount: value }) } }} /> </div> : <div> {/*高新显示 bpType: 0 正常 1专利 2软著 3审计 4双软 5高新 6商标*/} {this.state.bpType === 5 ? <FormItem className="half-item" {...formItemLayout} label="是否抽查"> <Radio.Group value={this.state.spotCheckStatus} onChange={(e) => { this.setState({ spotCheckStatus: e.target.value }) }} > <Radio value={0}>否</Radio> <Radio value={1}>是,未通过</Radio> <Radio value={2}>是,通过</Radio> </Radio.Group> </FormItem> : null} {this.state.bpType === 5 ? <FormItem /> : null} {this.state.bpType === 5 ? <FormItem className="half-item" {...formItemLayout} label="是否立项" > <Radio.Group value={this.state.setUpStatus} onChange={(e) => { this.setState({ setUpStatus: e.target.value }) }} > <Radio value={0}>否</Radio> <Radio value={1}>是</Radio> </Radio.Group> </FormItem> : null} {this.state.bpType === 5 ? <FormItem className="half-item" {...formItemLayout} label={this.state.setUpStatus === 1 ? "立项时间" : ''} > {this.state.setUpStatus === 1 ? <DatePicker style={{ marginTop: '2px', width: '200px', height: '27px', }} showTime format="YYYY-MM-DD" onOk={() => { }} value={ this.state.setUpTime ? moment(this.state.setUpTime) : null } onChange={(data, dataString) => { this.setState({ setUpTime: dataString }) }} /> : null} </FormItem> : null} {/*高新和科技项目显示 bpType: 0 正常 1专利 2软著 3审计 4双软 5高新 6商标*/} {/*cSort: 3 科技项目 6: 会员*/} {(this.state.bpType === 5 || this.state.cSort === 3) && <FormItem className="half-item" {...formItemLayout} label="申报批次" > <Select style={{ width: 200 }} placeholder="请选择批次" value={ this.state.declarationBatch ? this.state.declarationBatch : undefined } onChange={(e) => { this.setState({ declarationBatch: e, }) }} > <Option value={1}>第一批</Option> <Option value={2}>第二批</Option> <Option value={3}>第三批</Option> <Option value={4}>第四批</Option> </Select> </FormItem>} {/*只有科技项目才有是否到款*/} {/*cSort: 3 科技项目 6: 会员*/} {this.state.cSort === 3 && <FormItem className="half-item" {...formItemLayout} label="是否到款" > <Radio.Group value={this.state.arrivalMoney} onChange={(e) => { this.setState({ arrivalMoney: e.target.value }) }} > <Radio value={0}>未到企业</Radio> <Radio value={1}>已到企业</Radio> </Radio.Group> </FormItem>} </div>} </div> {this.state.bpType !== 1 && this.state.bpType !== 6 ? <div className="clearfix"> <FormItem labelCol={{ span: 3 }} wrapperCol={{ span: 16 }} label="附件" > <Picture domId={'myTask1'} fileList={(e) => { this.setState({ attachmentUrl: e }) }} pictureUrl={this.state.attachmentUrl} visible={this.props.visible} data={{ sign: 'order_task_file', url: '/api/admin/orderProject/uploadOrderTaskFile', }} /> </FormItem> </div> : null} {this.state.bpType !== 1 && this.state.bpType !== 6 ? <div className="clearfix"> <FormItem labelCol={{ span: 3 }} wrapperCol={{ span: 16 }} label="项目说明" > <Input type="textarea" placeholder="请输入项目说明" rows={4} disabled value={this.state.taskComment} onChange={(e) => { if (this.state.taskCommentData) { let len = this.state.taskCommentData.length; if (e.target.value.slice(0, len) !== this.state.taskCommentData) { message.warning('项目说明不允许删除与修改已存在的内容'); return; } } this.setState({ taskComment: e.target.value }) }} /> </FormItem> </div> : null} <div> <h3 className="sub-title">项目业务</h3> {this.state.processStatus == 0 ? ( <Button type="primary" onClick={this.addDetailed} style={{ float: 'right', marginRight: '50px', marginBottom: '15px', }} > 添加项目明细 </Button> ) : ( '' )} </div> <div className="patent-table"> <Spin spinning={this.state.loading}> <Table columns={this.state.columnsX} dataSource={this.state.dataSourceX} pagination={this.state.paginations} onRowClick={this.tableRowClickX} expandedRowRender={expandedRowRenderVip} rowClassName={this.addRowColor} bordered size="small" /> </Spin> </div> <div className="clearfix" style={{ display: "flex", justifyContent: "center" }}> <Button className="cancel" type="primary" // onClick={this.tijiaoOk} onClick={() => { let num = this.state.projectStatus if ( num != 1 && num != 20 && num != 21 ) { this.showDeleteConfirm(num, this.tijiaoOk) } else { this.tijiaoOk() } }} style={{ margin: 25 }} htmlType="submit" > 保存 </Button> <Button className="cancel" type="ghost" onClick={this.visitCancel} style={{ margin: 25 }} > 取消 </Button> </div> </div> </Spin> </Form> : <div />} </TabPane> <TabPane tab="外包/供应商信息" key="2"> <Spin spinning={this.state.sureOutLoading || this.state.waiDetailLoading || this.state.payNodeLoading || this.state.thirdInfoLoading}> {this.state.refundStatus != 0 && this.state.refundStatus != 1 ? ( <div style={{ marginTop: 10 }}> <div className="clearfix"> <FormItem className="half-item" labelCol={{ span: 3 }} wrapperCol={{ span: 14 }} label={ <span><strong style={{ color: '#f00' }}>*</strong>类型</span> } > <Radio.Group disabled={this.state.payNodeLoading || this.state.thirdInfoLoading} value={this.state.startType} onChange={(e) => { this.detectDeletion(0, () => { this.setState({ startType: e.target.value }, () => { this.projectTypeTabContent(this.state.projectType); }) }); }} > <Radio value={0}>外包(不走总部)</Radio> <Radio value={1}>供应商信息</Radio> {adminData.isTechTransfer && <Radio value={2}>高质量申请</Radio>} </Radio.Group> </FormItem> </div> {/* 专利类型 */} <div className="clearfix" style={{ display: this.state.projectType === 1 ? 'block' : 'none', }} > <FormItem className="half-item" labelCol={{ span: 4 }} wrapperCol={{ span: 14 }} label={ <span>专利类型</span> } > { this.state.patentType === 0 ? '专利申请/变更' : this.state.patentType === 1 ? '专利转让' : '' } </FormItem> </div> <div className="clearfix" style={{ display: this.state.projectType === 1 ? 'block' : 'none', }} > <FormItem className="half-item" labelCol={{ span: 4 }} wrapperCol={{ span: 18 }} label={ <span><strong style={{ color: '#f00' }}>*</strong>专利名称</span> } > <Radio.Group disabled={this.state.payNodeLoading || this.state.thirdInfoLoading} value={this.state.patentNameType} onChange={(e) => { Modal.info({ title: '系统提示', content: ( <div> <span style={{ color: "red" }}>请再次确定“对应的项目”与右上角的“项目名称”保持一致!</span> </div>), }); this.detectDeletion(0, () => { this.setState({ patentNameType: e.target.value }, () => { this.projectTypeTabContent(this.state.projectType); }) }); }} > <Radio value={0}>实用新型专利</Radio> <Radio value={1}>发明专利</Radio> <Radio value={2}>外观专利</Radio> {/*<Radio value={3}>*/} {/* 其他*/} {/* <Input*/} {/* disabled={this.state.patentNameType !== 3}*/} {/* value={this.state.patentName}*/} {/* style={{ marginLeft: '15px' }}*/} {/* onChange={(e) => {*/} {/* this.setState({*/} {/* patentName: e.target.value,*/} {/* })*/} {/* }}*/} {/* placeholder="请填写专利名称"*/} {/* />*/} {/*</Radio>*/} </Radio.Group> </FormItem> </div> {/*外包类型无此选项*/} {this.state.startType === 1 && this.state.projectType === 1 ? <div className="clearfix"> <FormItem className="half-item" labelCol={{ span: 3 }} wrapperCol={{ span: 15 }} label={<span>官费</span>}> { this.state.patentType === 1 ? <Radio.Group value={this.state.containOfficialFees} onChange={(e) => { this.setState({ containOfficialFees: e.target.value }) }} > <Radio value={0}>实际已缴费</Radio> <Radio value={1}>实际未缴费</Radio> </Radio.Group> : <PatentCheck style={{ display: 'flex', alignItems: 'center', }} id={this.state.id} patentTypeName={this.state.patentTypeName} patentTypeId={this.state.patentTypeId} checkStatus={this.state.checkStatus} //核对状态 projectType={this.state.projectType} //项目类型 patentType={this.state.patentType} //专利类型 startType={this.state.startType} //1供应商 0外包 orderTaskOfficialCost={this.state.orderTaskOfficialCost} //1含官费 0不含官费 orderTaskCostReduction={this.state.orderTaskCostReduction} //1有费减 0无费减 isPreviewPay={false} onRefresh={() => { this.xiangqing(this.state.tid); this.paymentRecordRef && this.paymentRecordRef.refresh();; }} status={this.state.refundStatus} /> } </FormItem> </div> : <div />} {/* 第三方信息专利 */} <div> <span style={{ fontSize: '18px', }} > 第三方信息 </span> <span style={{ display: 'inline-block', marginLeft: 10, color: 'red', }} > 金额总计(万元): {this.state.allTotalAmount} </span> <Button type="primary" onClick={(e) => { //this.state.startType 0外包 1供应商 类型为外包时,当普通单 if (this.state.projectType === 1 && this.state.patentType === -1) { message.info('请先选择专利类型'); } else if (this.state.projectType === 1 && this.state.patentNameType === -1) { message.info('请先选择专利名称'); } else { this.addThirdList() } }} style={{ float: 'right', marginRight: '50px', marginBottom: '15px', }} > +新增第三方信息 </Button> </div> <div className="clearfix" style={{ // display: this.state.type == 1 ? "block" : "none", display: this.state.type == 1 ? 'block' : 'block', }} > <Spin spinning={this.state.thirdInfoLoading}> <Form layout="horizontal"> <Table pagination={false} columns={this.state.ContactsListsNew} dataSource={this.state.thirdInfoList} onRowClick={this.tableRowClickOne} scroll={{ x: 'max-content', y: 0 }} bordered size="small" /> <Col span={24} offset={9} style={{ marginTop: '15px' }} /> </Form> </Spin> </div> {/*如果是软著类或者专利类的专利申请,隐藏付款节点 但当为外包类型时,无需隐藏*/} {/*this.state.startType 0外包 1供应商*/} <div style={{ display: (this.state.startType === 0 || this.state.startType === 2) ? 'block' : ((this.state.projectType === 1 && this.state.patentType === 0) || this.state.projectType === 2 ? 'none' : 'block'), //0正常 1专利 2软著 3审计 }} > <span style={{ fontSize: '18px', }} > 付款节点 </span> <span style={{ display: 'inline-block', marginLeft: 10, color: 'red', }} /> <Button type="primary" onClick={(e) => { this.addPayNode() }} style={{ float: 'right', marginRight: '50px', marginBottom: '15px', }} > +新增付款节点 </Button> </div> {/*如果是软著类或者专利类的专利申请,隐藏付款节点 但当为外包类型时,无需隐藏*/} <div className="clearfix" style={{ display: (this.state.startType === 0 || this.state.startType === 2) ? 'block' : ((this.state.projectType === 1 && this.state.patentType === 0) || this.state.projectType === 2 ? 'none' : 'block'), //0正常 1专利 2软著 3审计 }} > <Spin spinning={this.state.payNodeLoading}> <Form layout="horizontal"> <Table pagination={false} columns={this.state.PayNodeTableColunms} dataSource={this.state.payNodeList} onRowClick={this.payNodeTableRowClickOne} scroll={{ x: 'max-content', y: 0 }} bordered size="small" /> <Col span={24} offset={9} style={{ marginTop: '15px' }} /> </Form> </Spin> </div> <div className="clearfix"> <FormItem className="half-item" {...formItemLayout} label={ <span> <strong style={{ color: '#f00' }}>*</strong>备注 </span> } > <TextArea rows={4} value={this.state.outsourceRemarks} onChange={(e) => { this.setState({ outsourceRemarks: e.target.value, }) }} placeholder="请输入备注" /> </FormItem> </div> <p className="tip" style={{ paddingBottom: '12px', width: '240px', marginLeft: '195px', color: 'red', }} > 首次派单项目,需上传协议,第2次起,同项目,只需写外包公司 </p> <div className="clearfix"> <FormItem labelCol={{ span: 4 }} wrapperCol={{ span: 18 }} label={ <span>合同/协议扫描件</span> } > <PicturesWall domId={'myTask3'} fileList={this.getOrgCodeUrlWai} pictureUrl={this.state.pictureUrl} /> <p style={{ color: 'red' }}>图片建议:要清晰。</p> </FormItem> </div> {/*只有审核拒绝和第一次发起外包的时候才要填写发起原因 如果是类型为供应商则不需要发起原因*/} {/*this.state.startType 0外包 1供应商*/} {(typeof this.state.refundStatus === 'undefined' || this.state.refundStatus === 2) && this.state.startType == 0 ? <div className="clearfix"> <FormItem className="half-item" {...formItemLayout} label={ <span><strong style={{ color: '#f00' }}>*</strong>发起原因</span> } > <TextArea rows={4} value={this.state.reason} onChange={(e) => { this.setState({ reason: e.target.value, }) }} placeholder="请输入发起原因" /> </FormItem> </div> : <div />} <PaymentRecord {...this.props} ref={res => this.paymentRecordRef = res} tid={this.state.tid} isAuditPayment={false} isAuditPaymentGLY={false} projectType={this.state.projectType} patentType={this.state.patentType} /> <div className="clearfix"> <div style={{ display: 'inline-black', textAlign: 'center', }} > <Button type="primary" loading={this.state.loading} onClick={() => { this.sureOut(this.state.startType); }} > { this.state.startType === 0 ? "确认发起外包,不通过总部" : "提交供应商信息" } </Button> <p className="tip" style={{ color: 'red' }}> { this.state.startType === 0 ? "提示:高于总部价格,费用个人承担" : "确定提交供应商信息,提交后,不可修改" } </p> </div> </div> </div> ) : ( <div> { this.state.visible && this.state.activeKey === '2' ? <CheckProject {...this.props} sort={this.state.sort} patentTypeName={this.state.patentTypeName} //官费类型 patentTypeId={this.state.patentTypeId} commodityQuantity={this.state.commodityQuantity} //项目数量 checkStatus={this.state.checkStatus} //核对状态 orderTaskOfficialCost={this.state.orderTaskOfficialCost} //是否含官费 0无1有 orderTaskCostReduction={this.state.orderTaskCostReduction} //是否含费减 0无1有 containOfficialFees={this.state.containOfficialFees} //0:实际已缴费 1:实际未缴费 tid={this.state.tid} oldInfor={this.state.oldInfor} projectType={this.state.projectType} //0正常 1专利 2软著 3审计 patentNameType={this.state.patentNameType} patentName={this.state.patentName} patentType={this.state.patentType} status={this.state.refundStatus} isPreviewPay={true} mid={this.state.mid} thirdInfoList={this.state.thirdInfoList} dataSource={this.state.payNodeList} outsourceRemarks={this.state.outsourceRemarks} fileList={this.state.pictureUrl} startType={this.state.startType} projectStatus={this.state.projectStatus} onRefresh={() => { this.waiDetail(); this.xiangqing(this.state.tid); this.thirdTable(this.state.tid); this.getSelectOutsourceLog(this.state.tid); this.payNodeTable(this.state.tid) this.loadData(this.state.page) }} /> : <div /> } </div> )} {(this.state.refundStatus == 1 || this.state.refundStatus == 0 || this.state.refundStatus == 2) && this.state.startType !== 1 ? ( <div className="clearfix" style={{ display: this.state.refundStatus == 0 ? 'none' : 'block', }} > <hr className="division" /> {parseInt(this.state.startType) !== 1 ? <div style={{ color: '#F00', fontWeight: 'bolder', paddingBottom: '20px', }}> 审核结果: <span style={{ paddingLeft: '20px' }}>{getRefundStatus(this.state.refundStatus)}</span> </div> : <div />} <div className="outsourceLogList"> { this.state.outsourceLogs && this.state.outsourceLogs.map((value, index) => ( <div key={index} className="outsourceLogItem outsource"> <div style={{ display: 'flex', flexFlow: 'row nowrap', paddingBottom: '3px', paddingTop: '3px', }}> <div> {value.aname} </div> <div style={{ paddingLeft: '5px' }}> { value.status === 0 ? <Tag color="#2db7f5">发起外包审核</Tag> : value.status === 1 ? <Tag color="#87d068">通过</Tag> : <Tag color="#f50">驳回</Tag> } </div> <div style={{ wordBreak: 'break-all', maxWidth: '67%', }}> {value.remarks} </div> <div style={{ paddingLeft: '10px' }}> {value.createTimes} </div> </div> </div> )) } </div> </div> ) : ( '' )} </Spin> </TabPane> {!this.props.isZxs || (this.state.isHuiyuan && this.props.isZxs) ? ( <TabPane tab="订单详情" key="3"> <Spin spinning={this.state.loading}> {this.state.activeKey === "3" ? <OrderDetail orderUid={this.state.orderUid} orderData={this.state.orderData} getOrderLog={this.getOrderLog} dataSourceX={this.state.dataSourceX} contactList={this.state.jiedian} orderNo={this.state.orderNo} totalCui={this.state.totalCui} contactListNew={this.state.jiedianNew} pictureUrl={this.state.contractPictureUrl} /> : <div />} </Spin> <OrderRiZi dataSourcerizhi={this.state.dataSourceY} closeOrderLog={this.closeOrderLog} visible={this.state.avisible} loading={this.state.loading} /> </TabPane> ) : ( '' )} { this.state.sort == 6 ? <TabPane tab='会员进度表' key="4"> {this.state.sort == 6 && <Progress tid={this.state.tid} />} </TabPane> : '' } </Tabs> </div> </Modal> : <div />} <Modal maskClosable={false} visible={this.state.lookVisible} onOk={this.noCancel} onCancel={this.noCancel} width="500px" title={'添加工时'} footer="" className="admin-desc-content" > <Form layout="horizontal" id="demand-form"> <div className="clearfix"> <FormItem {...formItemLayout} label="工作日期"> <DatePicker style={{ marginTop: '2px', width: '200px', height: '27px' }} showTime format="YYYY-MM-DD" onOk={() => { }} value={ this.state.taskDate ? moment(this.state.taskDate) : null } onChange={(data, dataString) => { this.setState({ taskDate: dataString }) }} /> </FormItem> </div> <div className="clearfix"> <FormItem {...formItemLayout} label="工作时长"> <Input placeholder="请输入工作时长" value={this.state.hours} style={{ width: '200px' }} onChange={(e) => { this.setState({ hours: e.target.value }) }} ref="commodityQuantity" /> </FormItem> </div> <div className="clearfix"> <FormItem {...formItemLayout} label="工作内容"> <Input type="textarea" placeholder="请输入备注" rows={4} value={this.state.remarks} onChange={(e) => { this.setState({ remarks: e.target.value }) }} /> </FormItem> </div> <div className="clearfix"> <Button className="cancel" type="primary" onClick={this.tianjiaOk} loading={this.state.loading} style={{ marginLeft: '100px' }} htmlType="submit" > 确定 </Button> <Button className="cancel" type="ghost" onClick={this.noCancel} style={{ marginLeft: '50px' }} > 取消 </Button> </div> </Form> </Modal> {this.state.speVisible ? <Modal maskClosable={false} visible={this.state.speVisible} onOk={() => { this.visitOk(); this.state.selectCompanyAjaxObj ? this.state.selectCompanyAjaxObj.abort() : null; this.state.selectPaymentNodeAjaxObj ? this.state.selectPaymentNodeAjaxObj.abort() : null; this.state.orderOutsourceDtailsAjaxObj ? this.state.orderOutsourceDtailsAjaxObj.abort() : null; }} onCancel={() => { this.visitCancel(); this.state.selectCompanyAjaxObj ? this.state.selectCompanyAjaxObj.abort() : null; this.state.selectPaymentNodeAjaxObj ? this.state.selectPaymentNodeAjaxObj.abort() : null; this.state.orderOutsourceDtailsAjaxObj ? this.state.orderOutsourceDtailsAjaxObj.abort() : null; }} width="1200px" title="" footer="" className="admin-desc-content" > <div style={{ position: "relative" }}> <div style={{ position: "absolute", top: 0, left: 0, right: 0, bottom: 0, zIndex: 1000, display: parseInt(this.state.projectStatus) === 0 ? 'flex' : 'none', alignItems: 'center', flexDirection: 'column', paddingTop: '300px', background: 'rgba(0,0,0,0.7)', borderRadius: '4px', borderTopRightRadius: '96px', }}> { this.state.sort == 6 ? <div style={{ width: 200, display: 'flex', flexDirection: 'column', alignItems: 'center', }} > <div style={{ textAlign: 'center', color: '#fff', fontSize: '18px', marginBottom: 15, }} >请设置会员负责人</div> <Input style={{ textAlign: 'center', marginBottom: 15 }} placeholder="请输入会员负责人姓名" value={this.state.projectDirector} onChange={(e) => { this.setState({ projectDirector: e.target.value }) }} /> <Button type="primary" size='large' onClick={() => { if (!this.state.projectDirector) { message.warning('请先设置会员负责人') return } else { this.addProjectName() } //0未开始 1已开始 2已暂停 3已完成 4已驳回 5已退单 this.updateProjectStatus(1, () => { this.xiangqing(this.state.id) }); }}> 开始启动项目 </Button> </div> : <Button type="primary" size='large' onClick={() => { //0未开始 1已开始 2已暂停 3已完成 4已驳回 5已退单 this.updateProjectStatus(1, () => { this.xiangqing(this.state.id) }); }}> 开始启动项目 </Button> } </div> <Tabs tabBarExtraContent={ <div style={{ fontWeight: 'bold', paddingRight: '15px' }}> <span> 项目名称: <span style={{ color: '#F00', paddingRight: '5px' }}>{this.state.taskName}</span> </span> <span style={{ marginLeft: '15px' }}> 项目编号: <span style={{ color: '#F00', paddingRight: '5px' }}> {this.state.id} { this.state.splitStatus === 2 ? '(' + this.state.splitSuper + '-' + this.state.splitId + ')' : '' } </span> </span> <OrderItemStatus deleteSign={this.state.deleteSign} /> </div> } activeKey={this.state.activeKey} onChange={this.orderChange} > <TabPane tab="项目概况" key="1"> <div className="clearfix"> <FormItem className="half-item" {...formItemLayout} label="项目状态" > { getProjectName(parseInt(this.state.projectStatus)) } { this.state.projectStatus !== 0 ? <Button type="primary" size="small" style={{ marginTop: "5px", marginLeft: '5px', }} onClick={() => { if (this.state.projectStatus == 29) { message.warn("项目已暂停,无法修改") return } this.setState({ projectSituationVisible: true, }) }} > 修改 </Button> : null } <Button type="primary" size="small" style={{ marginTop: "5px", position: "absolute", zIndex: 1, marginLeft: '5px', }} onClick={this.caozuorizhi} > 操作日志 </Button> </FormItem> <FormItem className="half-item" {...formItemLayout} label="合同编号" > <span>{this.state.contractNo}</span> </FormItem> </div> <div className="clearfix"> <FormItem className="half-item" {...formItemLayout} label="是否特批" > <span>{getApproval(this.state.approval)}</span> </FormItem> <FormItem className="half-item" {...formItemLayout} label="结算状态" > <span> {getLiquidationStatus(this.state.liquidationStatus)} </span> </FormItem> <FormItem className="half-item" {...formItemLayout} label="流程状态" > <span>{getProcessStatus(this.state.processStatus, this.state.examineName, this.state.approval)}</span> </FormItem> <FormItem className="half-item" {...formItemLayout} label="订单编号" > <span>{this.state.orderNo}</span> </FormItem> </div> <div className="clearfix"> <FormItem className="half-item" {...formItemLayout} label="满意度表格" > <Radio.Group value={this.state.formRetrieve} onChange={(e) => { this.setState({ formRetrieve: e.target.value }) }} > <Radio value={0}>未收回</Radio> <Radio value={1}>已收回</Radio> <Radio value={2}>其他</Radio> </Radio.Group> </FormItem> { <FormItem className="half-item" {...formItemLayout} label="(满意度)备注" > <Input type="textarea" placeholder="请输入备注" rows={2} value={this.state.retrieveContent} onChange={(e) => { this.setState({ retrieveContent: e.target.value }) }} /> </FormItem> } {/*<FormItem*/} {/* className="half-item"*/} {/* {...formItemLayout}*/} {/* label="退单"*/} {/*>*/} {/* <Radio.Group*/} {/* value={this.state.taskRefund}*/} {/* onChange={(e) => {*/} {/* this.setState({ taskRefund: e.target.value })*/} {/* }}*/} {/* >*/} {/* <Radio value={0}>已完成</Radio>*/} {/* <Radio value={1}>未完成</Radio>*/} {/* <Radio value={2}>其他</Radio>*/} {/* </Radio.Group>*/} {/*</FormItem>*/} </div> {/*软著显示 bpType: 0 正常 1专利 2软著 3审计 4双软 5高新 6商标*/} {this.state.bpType === 2 ? <div className="clearfix"> <FormItem className="half-item" {...formItemLayout} label="加急天数" > <Radio.Group value={this.state.urgentDay} onChange={(e) => { this.setState({ urgentDay: e.target.value }) }} > <Radio value={1}>是</Radio> <Radio value={0}>否</Radio> </Radio.Group> </FormItem> <FormItem className="half-item" {...formItemLayout} label="有无方案" > <Radio.Group value={this.state.ifMaterial} onChange={(e) => { this.setState({ ifMaterial: e.target.value }) }} > <Radio value={1}>是</Radio> <Radio value={0}>否</Radio> </Radio.Group> </FormItem> </div> : null} <div className="clearfix"> <div style={{ paddingLeft: '8%', }}> <div style={{ color: '#000', fontWeight: 500 }}> 特别说明 <span style={{ color: '#58a3ff', }}>(针对项目的特殊情况说明)</span> </div> <div style={{ display: 'flex', alignItems: 'center', paddingTop: '10px' }}> <div>备注:</div> <Input type="textarea" placeholder="请输入备注" rows={3} style={{ width: '33%', marginLeft: '10px', }} value={this.state.specialComment} onChange={(e) => { this.setState({ specialComment: e.target.value }); }} /> </div> </div> { // <FormItem // className="half-item" // {...formItemLayout} // label="(退单)备注" // > // <Input // type="textarea" // placeholder="请输入备注" // rows={2} // value={this.state.refundContent} // onChange={(e) => { // this.setState({ refundContent: e.target.value }) // }} // /> // </FormItem> } </div> <div className="clearfix"> <h3 className="sub-title">订单负责人信息</h3> <FormItem className="half-item" {...formItemLayout} label="负责人" > <span> {this.state.salesmanName + '(' + this.state.depName + ')'} </span> </FormItem> <FormItem className="half-item" {...formItemLayout} label="负责人电话" > <span>{this.state.salesmanMobile}</span> </FormItem> <FormItem className="half-item" {...formItemLayout} label="当前财务负责人" > <span>{this.state.nowFinance}</span> </FormItem> <FormItem className="half-item" {...formItemLayout} label="当前财务负责人电话" > <span>{this.state.nowFinanceMobile}</span> </FormItem> <FormItem className="half-item" {...formItemLayout} style={{ opacity: '.5' }} label="原负责人" > <span>{this.state.oldSalesmanName}</span> </FormItem> <FormItem className="half-item" {...formItemLayout} style={{ opacity: '.5' }} label="原负责人电话" > <span>{this.state.oldSalesmanMobile}</span> </FormItem> <FormItem className="half-item" {...formItemLayout} style={{ opacity: '.5' }} label="实际财务操作人" > <span>{this.state.financeName}</span> </FormItem> <FormItem className="half-item" {...formItemLayout} style={{ opacity: '.5' }} label="实际财务操作人电话" > <span>{this.state.financeMobile}</span> </FormItem> <FormItem className="half-item" {...formItemLayout} label="订单留言" > <span>{this.state.orderRemarks}</span> </FormItem> <FormItem className="half-item" {...formItemLayout} label=""> <Button onClick={this.getOrderLog}>查看订单日志</Button> </FormItem> <OrderRiZi dataSourcerizhi={this.state.dataSourceY} closeOrderLog={this.closeOrderLog} visible={this.state.avisible} loading={this.state.loading} /> </div> {/*<hr style={{border:'1px dashed #aaa', width:"90%",margin:'auto'}}/>*/} <div className="clearfix"> <h3 className="sub-title">联系信息</h3> <FormItem className="half-item" {...formItemLayout} label="客户名称" > <span>{this.state.userName}</span> <EnterpriseNameChange type='journal' style={{ marginLeft: 10 }} enterpriseId={this.state.orderUid} /> </FormItem> <FormItem className="half-item" {...formItemLayout} label="企业法人" > <Input placeholder="请输入法人名称" value={this.state.legalPerson} style={{ width: '200px' }} onChange={(e) => { this.setState({ legalPerson: e.target.value }) }} ref="commodityQuantity" /> </FormItem> <FormItem className="half-item" {...formItemLayout} label="法人电话" > <Input placeholder="请输入法人电话" value={this.state.legalPersonTel} style={{ width: '200px' }} onChange={(e) => { this.setState({ legalPersonTel: e.target.value }) }} ref="commodityQuantity" /> </FormItem> <FormItem className="half-item" {...formItemLayout} label="客户联系人" > <Input placeholder="请输入联系人名称" value={this.state.contacts} style={{ width: '200px' }} onChange={(e) => { this.setState({ contacts: e.target.value }) }} ref="commodityQuantity" /> </FormItem> <FormItem className="half-item" {...formItemLayout} label="联系人电话" > <Input placeholder="请输入联系人电话" value={this.state.contactMobile} style={{ width: '200px' }} onChange={(e) => { this.setState({ contactMobile: e.target.value }) }} ref="commodityQuantity" /> </FormItem> <FormItem className="half-item" {...formItemLayout} label="企业地址" > <Cascader options={areaSelect()} value={this.state.ProvinceCity} placeholder="选择城市" style={{ width: '200px' }} onChange={(e) => { this.setState({ ProvinceCity: e }) }} /> </FormItem> <FormItem className="half-item" {...formItemLayout} label="" /> <FormItem className="half-item" {...formItemLayout} label=""> <Input placeholder="请输入详细地址" value={this.state.postalAddress} style={{ width: '200px', marginLeft: '12em' }} onChange={(e) => { this.setState({ postalAddress: e.target.value }) }} ref="commodityQuantity" /> </FormItem> </div> {/*<hr style={{border:'1px dashed #aaa', width:"90%",margin:'auto'}}/>*/} <div className="clearfix"> <h3 className="sub-title">项目信息</h3> <FormItem className="half-item" {...formItemLayout} label="项目编号" > <span> {this.state.splitStatus == 2 ? this.state.splitSuper + '-' + this.state.splitId : this.state.id} </span> </FormItem> <FormItem className="half-item" {...formItemLayout} label="项目名称" > <span>{this.state.taskName}</span> </FormItem> {/*<FormItem*/} {/* className="half-item"*/} {/* {...formItemLayout}*/} {/* label="项目状态"*/} {/*>*/} {/* <Select*/} {/* placeholder="选择项目状态"*/} {/* style={{ width: '200px' }}*/} {/* value={this.state.taskStatus}*/} {/* onChange={(e) => {*/} {/* this.setState({ taskStatus: e })*/} {/* }}*/} {/* >*/} {/* {taskStatus.map(function (item) {*/} {/* return (*/} {/* <Select.Option key={item.value}>*/} {/* {item.key}*/} {/* </Select.Option>*/} {/* )*/} {/* })}*/} {/* </Select>*/} {/*</FormItem>*/} <FormItem className="half-item" {...formItemLayout} label="项目类别" > <span>{this.state.cname}</span> </FormItem> <FormItem className="half-item" {...formItemLayout} label="证书编号" > {this.state.certificateNumber} </FormItem> </div> <div className="clearfix" style={{ marginTop: '10px' }}> <FormItem labelCol={{ span: 3 }} wrapperCol={{ span: 14 }} label="附件" > <Picture domId={'myTask2'} fileList={(e) => { this.setState({ attachmentUrl: e }) }} pictureUrl={this.state.attachmentUrl} visible={this.props.visible} data={{ sign: 'order_task_file', url: '/api/admin/orderProject/uploadOrderTaskFile', }} /> </FormItem> </div> <div className="clearfix"> <FormItem labelCol={{ span: 3 }} wrapperCol={{ span: 16 }} label="项目说明" > <Input type="textarea" placeholder="请输入项目说明" rows={4} disabled value={this.state.taskComment} onChange={(e) => { if (this.state.taskCommentData) { let len = this.state.taskCommentData.length; if (e.target.value.slice(0, len) !== this.state.taskCommentData) { message.warning('项目说明不允许删除与修改已存在的内容'); return; } } this.setState({ taskComment: e.target.value }) }} /> </FormItem> </div> <div className="clearfix"> <h3 className="sub-title">项目申报进度</h3> <DeclarationProgress timeRecordparse={this.state.timeRecordparse} startDate={this.state.startDate} taskDate={this.state.taskDate} list={[ { id: 4, name: '完成时间', value: this.state.endDate }, { id: 6, name: '受理时间', value: this.state.acceptDate }, { id: 8, name: '公示时间', value: this.state.publicityDate }, { id: 10, name: '发证时间', value: this.state.licenceDate }, { id: 15, name: '立项金额', value: this.state.setUpAmount } ]} /> {/*高新和科技项目显示 bpType: 0 正常 1专利 2软著 3审计 4双软 5高新 6商标*/} {/*cSort: 3 科技项目 6: 会员*/} {(this.state.bpType === 5 || this.state.cSort === 3) && <FormItem className="half-item" {...formItemLayout} label="申报批次" > <Select value={ this.state.declarationBatch ? this.state.declarationBatch : undefined } placeholder="请选择批次" style={{ width: 200 }} onChange={(e) => { this.setState({ declarationBatch: e, }) }} > <Option value={1}>第一批</Option> <Option value={2}>第二批</Option> <Option value={3}>第三批</Option> <Option value={4}>第四批</Option> </Select> </FormItem>} <FormItem className="half-item" {...formItemLayout} label="软著派单数量" > <span>{this.state.commodityQuantity}</span> <Button type="primary" size="small" style={{ marginLeft: '45px' }} onClick={this.addcontact} > +增加下证信息 </Button> </FormItem> <div className="patent-table"> <Spin spinning={this.state.loading}> <Table columns={this.state.ContactsLists} dataSource={this.state.contactList} pagination={false} bordered size="small" /> </Spin> </div> </div> <div className="clearfix"> <h3 className="sub-title">项目业务</h3> <div className="patent-table"> <Spin spinning={this.state.loading}> <Table columns={this.state.columnsX} dataSource={this.state.dataSourceX} pagination={this.state.paginations} onRowClick={this.tableRowClickX} bordered size="small" /> </Spin> </div> </div> <div className="clearfix" style={{ display: "flex", justifyContent: "center" }}> <Button className="cancel" type="primary" onClick={() => { this.tijiaoOk(); }} style={{ margin: 25 }} htmlType="submit" > 保存 </Button> <Button className="cancel" type="ghost" onClick={this.visitCancel} style={{ margin: 25 }} > 取消 </Button> </div> </TabPane> <TabPane tab="外包/供应商信息" key="2"> <Spin spinning={this.state.sureOutLoading || this.state.waiDetailLoading || this.state.payNodeLoading || this.state.thirdInfoLoading}> {this.state.refundStatus != 0 && this.state.refundStatus != 1 ? ( <div style={{ marginTop: 10 }}> <div className="clearfix"> <FormItem className="half-item" labelCol={{ span: 3 }} wrapperCol={{ span: 14 }} label={ <span> <strong style={{ color: '#f00' }}>*</strong> 类型 </span> } > <Radio.Group disabled={this.state.payNodeLoading || this.state.thirdInfoLoading} value={this.state.startType} onChange={(e) => { this.detectDeletion(0, () => { this.setState({ startType: e.target.value }, () => { this.projectTypeTabContent(this.state.projectType); }) }); }} > <Radio value={0}>外包(不走总部)</Radio> <Radio value={1}>供应商信息</Radio> {adminData.isTechTransfer && <Radio value={2}>高质量申请</Radio>} </Radio.Group> </FormItem> </div> {/* 专利类型 */} <div className="clearfix" style={{ display: this.state.projectType === 1 ? 'block' : 'none', }} > <FormItem className="half-item" labelCol={{ span: 4 }} wrapperCol={{ span: 14 }} label={ <span>专利类型</span> } > { this.state.patentType === 0 ? '专利申请/变更' : this.state.patentType === 1 ? '专利转让' : '' } </FormItem> </div> <div className="clearfix" style={{ display: this.state.projectType === 1 ? 'block' : 'none', }} > <FormItem className="half-item" labelCol={{ span: 3 }} wrapperCol={{ span: 18 }} label={ <span><strong style={{ color: '#f00' }}>*</strong>专利名称</span> } > <Radio.Group disabled={this.state.payNodeLoading || this.state.thirdInfoLoading} value={this.state.patentNameType} onChange={(e) => { this.detectDeletion(0, () => { this.setState({ patentNameType: e.target.value }, () => { this.projectTypeTabContent(this.state.projectType); }) }); }} > <Radio value={0}>实用新型专利</Radio> <Radio value={1}>发明专利</Radio> <Radio value={2}>外观专利</Radio> {/*<Radio value={3}>*/} {/* 其他*/} {/* <Input*/} {/* disabled={this.state.patentNameType !== 3}*/} {/* value={this.state.patentName}*/} {/* style={{ marginLeft: '15px' }}*/} {/* onChange={(e) => {*/} {/* this.setState({*/} {/* patentName: e.target.value,*/} {/* })*/} {/* }}*/} {/* placeholder="请填写专利名称"*/} {/* />*/} {/*</Radio>*/} </Radio.Group> </FormItem> </div> {this.state.startType === 1 && this.state.projectType === 1 ? <div className="clearfix"> <FormItem className="half-item" labelCol={{ span: 3 }} wrapperCol={{ span: 15 }} label={<span>官费</span>}> { this.state.patentType === 1 ? <Radio.Group value={this.state.containOfficialFees} onChange={(e) => { this.setState({ containOfficialFees: e.target.value }) }} > <Radio value={0}>实际已缴费</Radio> <Radio value={1}>实际未缴费</Radio> </Radio.Group> : <PatentCheck style={{ display: 'flex', alignItems: 'center', }} id={this.state.id} patentTypeName={this.state.patentTypeName} patentTypeId={this.state.patentTypeId} checkStatus={this.state.checkStatus} //核对状态 projectType={this.state.projectType} //项目类型 patentType={this.state.patentType} //专利类型 startType={this.state.startType} //1供应商 0外包 orderTaskOfficialCost={this.state.orderTaskOfficialCost} //1含官费 0不含官费 orderTaskCostReduction={this.state.orderTaskCostReduction} //1有费减 0无费减 isPreviewPay={false} onRefresh={() => { this.xiangqing(this.state.tid); this.paymentRecordRef && this.paymentRecordRef.refresh();; }} status={this.state.refundStatus}//0-待审核 ,1-审核通过,2-审核拒绝 /> } </FormItem> </div> : <div />} {/* 第三方信息专利 */} <div style={{ // display: this.state.type == 1 ? "block" : "none", display: this.state.type == 1 ? 'block' : 'block', }} > <span style={{ fontSize: '18px', }} > 第三方信息 </span> <span style={{ display: 'inline-block', marginLeft: 10, color: 'red', }} > 金额总计(万元): {this.state.allTotalAmount} </span> <Button type="primary" onClick={(e) => { //this.state.startType 类型为外包时,当普通单 if (this.state.projectType === 1 && this.state.patentType === -1) { message.info('请先选择专利类型'); } else if (this.state.projectType === 1 && this.state.patentNameType === -1) { message.info('请先选择专利名称'); } else { this.addThirdList() } }} style={{ float: 'right', marginRight: '50px', marginBottom: '15px', }}> +新增第三方信息 </Button> </div> <div className="clearfix" style={{ // display: this.state.type == 1 ? "block" : "none", display: this.state.type == 1 ? 'block' : 'block', }} > <Spin spinning={this.state.thirdInfoLoading}> <Form layout="horizontal"> <Table pagination={false} columns={this.state.ContactsListsNew} dataSource={this.state.thirdInfoList} onRowClick={this.tableRowClickOne} scroll={{ x: 'max-content', y: 0 }} bordered size="small" /> <Col span={24} offset={9} style={{ marginTop: '15px' }} /> </Form> </Spin> </div> {/*如果是软著类或者专利类的专利申请,隐藏付款节点*/} <div style={{ display: (this.state.startType === 0 || this.state.startType === 2) ? 'block' : ((this.state.projectType === 1 && this.state.patentType === 0) || this.state.projectType === 2 ? 'none' : 'block'), //0正常 1专利 2软著 3审计 }} > <span style={{ fontSize: '18px', }} > 付款节点 </span> <span style={{ display: 'inline-block', marginLeft: 10, color: 'red', }} /> <Button type="primary" onClick={(e) => { this.addPayNode() }} style={{ float: 'right', marginRight: '50px', marginBottom: '15px', }} > +新增付款节点 </Button> </div> {/*如果是软著类或者专利类的专利申请,隐藏付款节点但当为外包类型时,无需隐藏*/} <div className="clearfix" style={{ display: (this.state.startType === 0 || this.state.startType === 2) ? 'block' : ((this.state.projectType === 1 && this.state.patentType === 0) || this.state.projectType === 2 ? 'none' : 'block'), //0正常 1专利 2软著 3审计 }} > <Spin spinning={this.state.payNodeLoading}> <Form layout="horizontal"> <Table pagination={false} columns={this.state.PayNodeTableColunms} dataSource={this.state.payNodeList} onRowClick={this.payNodeTableRowClickOne} scroll={{ x: 'max-content', y: 0 }} bordered size="small" /> <Col span={24} offset={9} style={{ marginTop: '15px' }} /> </Form> </Spin> </div> <div className="clearfix"> <FormItem className="half-item" {...formItemLayout} label={ <span> <strong style={{ color: '#f00' }}>*</strong>备注 </span> } > <TextArea rows={4} value={this.state.outsourceRemarks} onChange={(e) => { this.setState({ outsourceRemarks: e.target.value, }) }} placeholder="请输入备注" /> </FormItem> </div> <p className="tip" style={{ paddingBottom: '12px', width: '240px', marginLeft: '145px', color: 'red', }} > 首次派单项目,需上传协议,第2次起,同项目,只需写外包公司 </p> <div className="clearfix"> <FormItem labelCol={{ span: 4 }} wrapperCol={{ span: 18 }} label={ <span> 合同/协议扫描件 </span> } > <PicturesWall domId={'myTask4'} fileList={this.getOrgCodeUrlWai} pictureUrl={this.state.pictureUrl} /> <p style={{ color: 'red' }}>图片建议:要清晰。</p> </FormItem> </div> {/*只有审核拒绝和第一次发起外包的时候才要填写发起原因 如果是类型为供应商则不需要发起原因*/} {/*this.state.startType 0外包 1供应商*/} {(typeof this.state.refundStatus === 'undefined' || this.state.refundStatus === 2) && this.state.startType == 0 ? <div className="clearfix"> <FormItem className="half-item" {...formItemLayout} label={ <span> <strong style={{ color: '#f00' }}>*</strong>发起原因 </span> } > <TextArea rows={4} value={this.state.reason} onChange={(e) => { this.setState({ reason: e.target.value, }) }} placeholder="请输入发起原因" /> </FormItem> </div> : <div />} <PaymentRecord {...this.props} ref={res => this.paymentRecordRef = res} tid={this.state.tid} isAuditPayment={false} isAuditPaymentGLY={false} projectType={this.state.projectType} patentType={this.state.patentType} /> <div className="clearfix"> <div style={{ display: 'inline-black', textAlign: 'center', }} > <Button type="primary" loading={this.state.loading} onClick={() => { this.sureOut(this.state.startType); }} > { this.state.startType === 0 ? "确认发起外包,不通过总部" : "提交供应商信息" } </Button> <p className="tip" style={{ color: 'red' }}> { this.state.startType === 0 ? "提示:高于总部价格,费用个人承担" : "确定提交供应商信息,提交后,不可修改" } </p> </div> </div> </div> ) : ( <div> { this.state.speVisible && this.state.activeKey === '2' ? <CheckProject {...this.props} tid={this.state.tid} sort={this.state.sort} patentTypeName={this.state.patentTypeName} //官费类型 patentTypeId={this.state.patentTypeId} commodityQuantity={this.state.commodityQuantity} //项目数量 checkStatus={this.state.checkStatus} //核对状态 orderTaskCostReduction={this.state.orderTaskCostReduction} //是否含费减 0无1有 orderTaskOfficialCost={this.state.orderTaskOfficialCost} //是否含官费 0无1有 containOfficialFees={this.state.containOfficialFees} //0:实际已缴费 1:实际未缴费 oldInfor={this.state.oldInfor} projectType={this.state.projectType} //0正常 1专利 2软著 3审计 patentNameType={this.state.patentNameType} patentName={this.state.patentName} patentType={this.state.patentType} status={this.state.refundStatus} isPreviewPay={true} mid={this.state.mid} thirdInfoList={this.state.thirdInfoList} dataSource={this.state.payNodeList} outsourceRemarks={this.state.outsourceRemarks} fileList={this.state.pictureUrl} startType={this.state.startType} projectStatus={this.state.projectStatus} onRefresh={() => { this.waiDetail(); this.thirdTable(this.state.tid); this.xiangqing(this.state.tid); this.getSelectOutsourceLog(this.state.tid); this.payNodeTable(this.state.tid) this.loadData(this.state.page) }} /> : <div /> } </div> )} {(this.state.refundStatus == 1 || this.state.refundStatus == 0 || this.state.refundStatus == 2) && this.state.startType !== 1 ? ( <div className="clearfix" style={{ display: this.state.refundStatus == 0 ? 'none' : 'block', }} > <hr className="division" /> {parseInt(this.state.startType) !== 1 ? <div style={{ color: '#F00', fontWeight: 'bolder', paddingBottom: '20px', }}> 审核结果: <span style={{ paddingLeft: '20px' }}>{getRefundStatus(this.state.refundStatus)}</span> </div> : <div />} <div className="outsourceLogList"> { this.state.outsourceLogs && this.state.outsourceLogs.map((value, index) => ( <div key={index} className="outsourceLogItem outsource"> <div style={{ display: 'flex', flexFlow: 'row nowrap', paddingBottom: '3px', paddingTop: '3px', }}> <div> {value.aname} </div> <div style={{ paddingLeft: '5px' }}> { value.status === 0 ? <Tag color="#2db7f5">发起外包审核</Tag> : value.status === 1 ? <Tag color="#87d068">通过</Tag> : <Tag color="#f50">驳回</Tag> } </div> <div style={{ wordBreak: 'break-all', maxWidth: '67%', }}> {value.remarks} </div> <div style={{ paddingLeft: '10px' }}> {value.createTimes} </div> </div> </div> )) } </div> </div> ) : ( '' )} </Spin> </TabPane> {!this.props.isZxs || (this.state.isHuiyuan && this.props.isZxs) ? ( <TabPane tab="订单详情" key="3"> <Spin spinning={this.state.loading}> <OrderDetail orderUid={this.state.orderUid} orderData={this.state.orderData} getOrderLog={this.getOrderLog} dataSourceX={this.state.dataSourceX} contactList={this.state.jiedian} orderNo={this.state.orderNo} totalCui={this.state.totalCui} contactListNew={this.state.jiedianNew} pictureUrl={this.state.contractPictureUrl} /> </Spin> </TabPane> ) : ( '' )} </Tabs> </div> </Modal> : <div />} {this.state.visibleA ? <Modal width="800px" visible={this.state.visibleA} onCancel={this.visitCancelA} title="操作日志" footer="" className="admin-desc-content" > <div className="patent-table patent-table-center"> <Spin spinning={this.state.loading}> <Table columns={this.state.columnsA} dataSource={this.state.dataSourceA} pagination={false} bordered size="small" /> </Spin> </div> </Modal> : null} {this.state.timeVisible ? <Modal title="工时记录" visible={this.state.timeVisible} onCancel={this.timeClose} width={800} footer={null} > <Spin spinning={this.state.loading}> <Table columns={this.state.columnsTime} dataSource={this.state.dataSourceTime} pagination={false} scroll={{ x: 'max-content', y: 0 }} bordered size={'small'} /> <p style={{ marginTop: 10, color: 'red' }}> 累计工时(小时):{this.state.recordHour} </p> </Spin> </Modal> : null} {this.state.ThirdListVisible ? <NewSupplier patentNameType={this.state.patentNameType} ThirdId={this.state.ThirdId} tid={this.state.tid} patentType={this.state.patentType} projectType={(this.state.startType === 0 || this.state.startType === 2) ? 0 : this.state.projectType} realProjectType={this.state.projectType} //真实的项目类型 startType={this.state.startType} //项目类型 0外包 1供应商 thirdCompanyName={this.state.thirdCompanyName} thirdUnitPrice={this.state.thirdUnitPrice} thirdQuantity={this.state.thirdQuantity} thirdRemarks={this.state.thirdRemarks} spinning={this.state.loading} visible={this.state.ThirdListVisible} thirdMaterial={this.state.thirdMaterial} thirdUrgent={this.state.thirdUrgent} audit={this.state.audit} assets={this.state.assets} income={this.state.income} onDetermine={this.handleCancelq} payNodeTable={() => { this.payNodeTable(this.state.tid) }} onCancel={() => { this.thirdTable(this.state.tid); this.setState({ ThirdListVisible: false, ThirdId: '', //供应商id thirdCompanyName: '', //第三方名称 thirdUnitPrice: '', //单价 thirdQuantity: '', //数量 currentTotalPrice: '', //总价 thirdMaterial: 0, //有无材料 thirdUrgent: 0, //加急情况 thirdRemarks: '', audit: 1, assets: '', income: '', }) }} otherOperations={(data) => { this.setState({ thirdMaterial: data.thirdMaterial, thirdUrgent: data.thirdUrgent, customerArr: data.customerArr, thirdCompanyName: data.thirdCompanyName }) }} /> : <div />} {this.state.PayNodeVisible ? <OperationPayNode tid={this.state.tid} cSort={this.state.cSort} visible={this.state.PayNodeVisible} thirdId={this.state.ThirdId} thirdInfoList={this.state.thirdInfoList} supplierList={this.state.PayNodeCompany} payNodeInfor={this.state.payNodeInfor} thirdUnitPrice={this.state.thirdUnitPrice} onCancel={async () => { this.setState({ PayNodeVisible: false, payNodeInfor: {}, ThirdId: '', thirdUnitPrice: '', }) if (this.state.paySubject.length === 0) { await this.xiangqing(this.state.tid); // 获取Csort await this.getCsortData(localStorage.getItem('cSort')) await this.payNodeTable(this.state.tid); } else { await this.payNodeTable(this.state.tid) } }} /> : <div />} {this.state.projectSituationVisible ? <NowProjectStatus tid={this.state.tid} cSort={parseInt(this.state.cSort)} projectTypeJSON={this.state.timeRecord ? JSON.parse(this.state.timeRecord) : {}} projectType={this.state.projectType} projectStatus={this.state.projectStatus} visible={this.state.projectSituationVisible} oldData={{ endDate: this.state.endDate, //完成时间 acceptDate: this.state.acceptDate,//受理时间 publicityDate: this.state.publicityDate,//公示时间 licenceDate: this.state.licenceDate,//发证时间 setUpAmount: this.state.setUpAmount,//立项金额 }} onCancel={() => { this.setState({ projectSituationVisible: false }) }} onPreservation={(value) => { this.xiangqing(this.state.id) this.setState({ projectSituationVisible: false }) }} /> : null } {/* {this.state.addnextVisible && <ProjectDetailsReadOnly infor={this.state.dataInfor} visible={this.state.addnextVisible} onCancel={this.nextCancel} />} */} { // 项目业务详情 this.state.addnextVisible && <NewEditProject readOnly={true} visible={this.state.addnextVisible} dataInfor={this.state.dataInfor} onCancel={this.nextCancel} /> } {this.state.projectLogVisible && <ProjectLog projectLogId={this.state.projectLogId} visible={this.state.projectLogVisible} onCancel={() => { this.setState({ projectLogId: '', projectLogVisible: false, }) }} />} </div> ) }, }) export default Task