progress.jsx 84 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194
  1. import React, { Component } from "react";
  2. import {
  3. message,
  4. Popconfirm,
  5. Modal,
  6. Form,
  7. DatePicker,
  8. Select,
  9. Radio,
  10. Tag,
  11. Spin,
  12. Input,
  13. Button,
  14. Checkbox,
  15. Table,
  16. AutoComplete,
  17. } from "antd";
  18. import $ from "jquery/src/ajax";
  19. import Print from 'react-print-html';
  20. import moment from 'moment';
  21. import ReactToPrint from 'react-to-print';
  22. import html2canvas from 'html2canvas';
  23. import MyComponent from './progressSelect';
  24. import './progress.less';
  25. const { TextArea } = Input;
  26. const RadioGroup = Radio.Group;
  27. const CheckboxGroup = Checkbox.Group;
  28. class Progress extends Component {
  29. constructor(props) {
  30. super(props);
  31. this.state = {
  32. visible: false,
  33. logvisible: false,
  34. loading: false,
  35. isPrint: false,
  36. data: {},
  37. obj: {},
  38. logData: [],
  39. columns: [
  40. {
  41. title: '检查开始时间',
  42. dataIndex: 'startTime',
  43. key: 'startTime',
  44. render: (text, record) => {
  45. return (
  46. <span>{text || record.startTimeStr}</span>
  47. )
  48. }
  49. },
  50. {
  51. title: '检查结束时间',
  52. dataIndex: 'endTime',
  53. key: 'endTime',
  54. render: (text, record) => {
  55. return (
  56. <span>{text || record.endTimeStr}</span>
  57. )
  58. }
  59. },
  60. {
  61. title: '检查部门',
  62. dataIndex: 'depName',
  63. key: 'depName',
  64. },
  65. {
  66. title: '被检查年度',
  67. dataIndex: 'yearFeature',
  68. key: 'yearFeature',
  69. },
  70. {
  71. title: '检查方式',
  72. dataIndex: 'inspectWay',
  73. key: 'inspectWay',
  74. render: (text, record) => {
  75. return (
  76. <span>{['线上', '线下'][text]}</span>
  77. )
  78. }
  79. },
  80. {
  81. title: '检查类别',
  82. dataIndex: 'type',
  83. key: 'type',
  84. render: (text, record) => {
  85. return (
  86. <span>{[record.typeOther, '高新技术税收优惠政策检查', '加计扣除税收优惠政策检查', '税务常规检查', '税务对研发费用检查', '税务稽查'][text]}</span>
  87. )
  88. }
  89. },
  90. {
  91. title: '检查事项',
  92. dataIndex: 'inspectionItems',
  93. key: 'inspectionItems',
  94. width: '10%',
  95. render: (text, record) => {
  96. return (
  97. <span>{[record.inspectionItemsOther, '高新产品收入不达标', '人员人工费用问题检查', '研发费用占比不达标', '属于多个类别', '其他事项检查'][text]}</span>
  98. )
  99. }
  100. },
  101. {
  102. title: '企业问题点',
  103. dataIndex: 'enterpriseProblems',
  104. key: 'enterpriseProblems',
  105. width: '10%',
  106. },
  107. {
  108. title: '解决方式',
  109. dataIndex: 'solution',
  110. key: 'solution',
  111. width: '10%',
  112. },
  113. {
  114. title: '检查后结论',
  115. dataIndex: 'inspectionConclusion',
  116. key: 'inspectionConclusion',
  117. width: '10%',
  118. render: (text, record) => {
  119. return (
  120. <span>{['其他', '被取消高新认定资格', '不通过', '合规通过', '通过', '无结论', '要求整改'][text]}</span>
  121. )
  122. }
  123. },
  124. {
  125. title: '是否提醒企业专人跟进事宜',
  126. dataIndex: 'remindFollow',
  127. key: 'remindFollow',
  128. width: 90,
  129. render: (text, record) => {
  130. return (
  131. <span>{['未提醒', '已提醒'][text]}</span>
  132. )
  133. }
  134. },
  135. {
  136. title: '备注',
  137. dataIndex: 'remarks',
  138. key: 'remarks',
  139. width: '10%',
  140. },
  141. ],
  142. logcolumns: [
  143. {
  144. title: '序号',
  145. dataIndex: 'id',
  146. key: 'id',
  147. },
  148. {
  149. title: '修改人',
  150. dataIndex: 'aname',
  151. key: 'aname',
  152. },
  153. {
  154. title: '修改时间',
  155. dataIndex: 'createTime',
  156. key: 'createTime',
  157. },
  158. {
  159. title: '操作',
  160. dataIndex: 'op',
  161. key: 'op',
  162. render: (text, record) => {
  163. return (
  164. <MyComponent id={record.id} />
  165. )
  166. }
  167. },
  168. ],
  169. pagination: {
  170. defaultCurrent: 1,
  171. defaultPageSize: 10,
  172. showQuickJumper: true,
  173. pageSize: 10,
  174. onChange: function (page) {
  175. this.logList(page);
  176. }.bind(this),
  177. showTotal: function (total) {
  178. return "共" + total + "条数据";
  179. },
  180. },
  181. projectV: false,
  182. HYlist: [],
  183. }
  184. this.onSubmit = this.onSubmit.bind(this);
  185. this.handleOk = this.handleOk.bind(this);
  186. this.handleCancel = this.handleCancel.bind(this);
  187. this.onRowDoubleClick = this.onRowDoubleClick.bind(this);
  188. this.deleteTaskFeature = this.deleteTaskFeature.bind(this);
  189. }
  190. componentDidMount() {
  191. this.getByTid()
  192. }
  193. // 项目进度详情
  194. getByTid() {
  195. this.setState({
  196. loading: true,
  197. })
  198. $.ajax({
  199. method: 'get',
  200. dataType: 'json',
  201. crossDomain: false,
  202. url: globalConfig.context + '/api/admin/taskDetails/getByTid',
  203. data: {
  204. id: this.props.tid,
  205. },
  206. success: function (data) {
  207. if (data.error && data.error.length) {
  208. message.warning(data.error[0].message)
  209. } else {
  210. let obj = data.data
  211. obj.phasedContent = !obj.phasedContent ? [] : obj.phasedContent.split(',')
  212. this.setState({
  213. data: obj,
  214. })
  215. if (!obj.projectId) {
  216. this.setState({
  217. projectV: true
  218. })
  219. }
  220. }
  221. }.bind(this),
  222. }).always(
  223. function () {
  224. this.setState({
  225. loading: false,
  226. })
  227. }.bind(this)
  228. )
  229. }
  230. // 创建、编辑项目进度表
  231. onSubmit() {
  232. const { data } = this.state
  233. const { tid } = this.props
  234. if (data.torchStatus == 0 && !data.torchOther) {
  235. message.warning("请填写火炬统计其他说明!")
  236. return
  237. }
  238. if (data.statisticsStatus == 0 && !data.statisticsOther) {
  239. message.warning("请填写统计年报其他说明!")
  240. return
  241. }
  242. if (data.chStatus == 0 && !data.chOther) {
  243. message.warning("请填写高企年报其他说明!")
  244. return
  245. }
  246. if (data.finalSettlementStatus == 0 && !data.finalSettlementOther) {
  247. message.warning("请填写汇算清缴其他说明!")
  248. return
  249. }
  250. if (data.rdReservesStatus == 0 && !data.rdReservesOther) {
  251. message.warning("请填写研发准备金备案其他说明!")
  252. return
  253. }
  254. if (data.rdAwardCompensationStatus == 0 && !data.rdAwardCompensationOther) {
  255. message.warning("请填写研发奖补申请其他说明!")
  256. return
  257. }
  258. if (data.adDeliverStatus == 0 && !data.adDeliverOther) {
  259. message.warning("请填写加扣备查交付其他说明!")
  260. return
  261. }
  262. if (data.htDeliverStatus == 0 && !data.htDeliverOther) {
  263. message.warning("请填写高新备查交付其他说明!")
  264. return
  265. }
  266. if (data.closeMeetingStatus == 0 && !data.closeMeetingOther) {
  267. message.warning("请填写召开上年度总结及本年工作计划其他说明!")
  268. return
  269. }
  270. if (data.adPrepareJulyStatus == 0 && !data.adPrepareJulyOther) {
  271. message.warning("请填写加计预申报7月其他说明!")
  272. return
  273. }
  274. if (data.adPrepareOctoberStatus == 0 && !data.adPrepareOctoberOther) {
  275. message.warning("请填写加计预申报10月其他说明!")
  276. return
  277. }
  278. if (data.reviewProvince == 1 && !data.reviewProvinceNumber) {
  279. message.warning("请填写公示序号!")
  280. return
  281. }
  282. if (data.reviewCountry == 1 && !data.reviewCountryNumber) {
  283. message.warning("请填写高企编号!")
  284. return
  285. }
  286. data.tid = tid;
  287. data.phasedContent = data.phasedContent.toString();
  288. this.setState({
  289. loading: true,
  290. })
  291. $.ajax({
  292. method: 'POST',
  293. dataType: 'json',
  294. crossDomain: false,
  295. url: globalConfig.context + (!data.id ? '/api/admin/taskDetails/add' : '/api/admin/taskDetails/update'),
  296. data,
  297. }).done(
  298. function (data) {
  299. this.setState({
  300. loading: false,
  301. })
  302. if (!data.error.length) {
  303. message.success('保存成功!')
  304. this.getByTid()
  305. } else {
  306. message.warning(data.error[0].message)
  307. }
  308. }.bind(this)
  309. )
  310. }
  311. // 下载图片
  312. download() {
  313. const canvas2 = document.createElement('canvas');
  314. let _canvas = document.getElementById('count'); // 指定要截图的DOM元素
  315. const w = parseInt(window.getComputedStyle(_canvas).width);
  316. const h = parseInt(window.getComputedStyle(_canvas).height);
  317. // 设置画布大小,可以根据需要调整
  318. canvas2.width = w * 3.3;
  319. canvas2.height = h * 2.3;
  320. const context = canvas2.getContext('2d');
  321. context.fillStyle = '#fff'
  322. context.scale(2, 2);
  323. window.scrollTo(0, 0); // 确保页面滚动到顶部,避免截图偏移
  324. this.updateDownload(this.state.data.id);
  325. html2canvas(_canvas, { canvas: canvas2 }).then(function (canvas) {
  326. const imgUri = canvas.toDataURL('image/png').replace('image/png', 'image/octet-stream');
  327. const timestamp = Date.now();
  328. // 此处可以添加下载图片的逻辑,如创建一个下载链接并触发点击事件
  329. const link = document.createElement("a");
  330. link.href = imgUri;
  331. link.download = `schedule${timestamp}.png`;
  332. document.body.appendChild(link);
  333. link.click();
  334. document.body.removeChild(link);
  335. });
  336. }
  337. // 数字判定
  338. onChange(e, lable) {
  339. const { data } = this.state
  340. const { value } = e.target;
  341. const reg = /^-?(0|[1-9][0-9]*)(\.[0-9]*)?$/;
  342. if ((!isNaN(value) && reg.test(value)) || value === '' || value === '-') {
  343. this.setState({
  344. data: Object.assign(data, {
  345. [lable]: value,
  346. }),
  347. })
  348. }
  349. }
  350. // 计算长度
  351. handleChange(lable, width = 40, type = "number") {
  352. const { data } = this.state
  353. let newWidth = width
  354. if (type == "number") {
  355. newWidth = !!data[lable] ? Math.max(width, data[lable].toString().length * 8) : width;
  356. } else {
  357. newWidth = !!data[lable] ? Math.max(width, data[lable].toString().length * 14) : width;
  358. }
  359. if (newWidth > 150) {
  360. return "150px"
  361. } else {
  362. return newWidth + "px"
  363. }
  364. }
  365. // 特色工作
  366. addTaskFeature() {
  367. const { obj, data } = this.state
  368. if (obj.type == 0 && !obj.typeOther) {
  369. message.warning("请填写检查类别其他说明!")
  370. return
  371. }
  372. if (obj.inspectionItems == 0 && !obj.inspectionItemsOther) {
  373. message.warning("请填写检查事项其他说明!")
  374. return
  375. }
  376. if (obj.id) {
  377. delete obj.createTime
  378. delete obj.startTime
  379. delete obj.endTime
  380. } else {
  381. obj.tdid = data.id
  382. }
  383. this.setState({
  384. loading: true,
  385. })
  386. $.ajax({
  387. method: 'POST',
  388. dataType: 'json',
  389. crossDomain: false,
  390. url: globalConfig.context + (!obj.id ? '/api/admin/taskDetails/addTaskFeature' : '/api/admin/taskDetails/updateTaskFeature'),
  391. data: obj,
  392. }).done(
  393. function (data) {
  394. this.setState({
  395. loading: false,
  396. })
  397. if (!data.error.length) {
  398. message.success('操作成功!')
  399. this.getByTid()
  400. this.handleCancel()
  401. } else {
  402. message.warning(data.error[0].message)
  403. }
  404. }.bind(this)
  405. )
  406. }
  407. // 删除特色工作
  408. deleteTaskFeature(id) {
  409. $.ajax({
  410. method: 'POST',
  411. dataType: 'json',
  412. crossDomain: false,
  413. url: '/api/admin/taskDetails/deleteTaskFeature',
  414. data: {
  415. id
  416. },
  417. }).done(
  418. function (data) {
  419. this.setState({
  420. loading: false,
  421. })
  422. if (!data.error.length) {
  423. message.success('删除成功!')
  424. this.getByTid()
  425. this.handleCancel()
  426. } else {
  427. message.warning(data.error[0].message)
  428. }
  429. }.bind(this)
  430. )
  431. }
  432. // 修改下载时间
  433. updateDownload(id) {
  434. $.ajax({
  435. method: 'POST',
  436. dataType: 'json',
  437. crossDomain: false,
  438. url: '/api/admin/taskDetails/updateDownload',
  439. data: {
  440. id
  441. },
  442. }).done(
  443. function (data) {
  444. this.setState({
  445. loading: false,
  446. })
  447. if (!data.error.length) {
  448. this.getByTid()
  449. } else {
  450. message.warning(data.error[0].message)
  451. }
  452. }.bind(this)
  453. )
  454. }
  455. // 日志
  456. logList(pageNo) {
  457. const { pagination } = this.state;
  458. let datas = {
  459. pageNo: pageNo || 1,
  460. pageSize: pagination.pageSize,
  461. id: this.state.data.id,
  462. };
  463. $.ajax({
  464. method: 'get',
  465. dataType: 'json',
  466. crossDomain: false,
  467. url: globalConfig.context + '/api/admin/taskDetails/logList',
  468. data: datas,
  469. success: function (data) {
  470. if (data.data.list) {
  471. pagination.current = data.data.pageNo;
  472. pagination.total = data.data.totalCount;
  473. if (data.data && data.data.list && !data.data.list.length) {
  474. pagination.current = 0;
  475. pagination.total = 0;
  476. }
  477. this.setState({
  478. logData: data.data.list,
  479. pagination: this.state.pagination,
  480. pageNo: data.data.pageNo,
  481. });
  482. } else {
  483. this.setState({
  484. logData: data.data,
  485. pagination: false,
  486. });
  487. }
  488. }.bind(this),
  489. }).always(
  490. function () {
  491. this.setState({
  492. loading: false,
  493. })
  494. }.bind(this)
  495. )
  496. }
  497. // 双击
  498. onRowDoubleClick(record) {
  499. let row = {}
  500. row.startTimeStr = record.startTime
  501. row.endTimeStr = record.endTime
  502. this.setState({
  503. obj: Object.assign(record, row),
  504. visible: true,
  505. })
  506. }
  507. // 占比计算
  508. getProportion(lable, num1, num2) {
  509. const { data } = this.state
  510. let formattedPercentage = 0
  511. if (!num1 || !num2) {
  512. formattedPercentage = 0
  513. } else {
  514. let percentage = (num1 / num2) * 100;
  515. formattedPercentage = percentage.toFixed(2);
  516. }
  517. // return formattedPercentage
  518. this.setState({
  519. data: Object.assign(data, {
  520. [lable]: formattedPercentage,
  521. }),
  522. })
  523. }
  524. // 查询订单负责人列表
  525. followUpHY(e) {
  526. this.setState({
  527. projectDirector: e
  528. });
  529. $.ajax({
  530. method: "get",
  531. dataType: "json",
  532. crossDomain: false,
  533. url: globalConfig.context + "/api/admin/customer/listAdminByName",
  534. data: {
  535. adminName: e,
  536. },
  537. success: function (data) {
  538. let thedata = data.data;
  539. if (!thedata) {
  540. if (data.error && data.error.length) {
  541. message.warning(data.error[0].message);
  542. }
  543. thedata = {};
  544. }
  545. this.setState({
  546. HYlist: thedata,
  547. });
  548. }.bind(this),
  549. }).always(
  550. function () {
  551. this.setState({
  552. loading: false,
  553. });
  554. }.bind(this)
  555. );
  556. }
  557. // 选中订单负责人
  558. selectHY(value) {
  559. const { HYlist } = this.state;
  560. const newdataSources = JSON.stringify(HYlist) == "{}" ? [] : HYlist;
  561. this.setState({
  562. projectId: newdataSources.find((item) => item.name == value).id,
  563. });
  564. }
  565. addProjectName() {
  566. const { data } = this.state
  567. data.phasedContent = data.phasedContent.toString();
  568. if (!this.state.data.id) {
  569. $.ajax({
  570. method: 'POST',
  571. dataType: 'json',
  572. crossDomain: false,
  573. url: globalConfig.context + '/api/admin/taskDetails/add',
  574. data,
  575. }).done(
  576. function (data) {
  577. if (!data.error.length) {
  578. this.updateProjectName(data.data.id)
  579. } else {
  580. message.warning(data.error[0].message)
  581. }
  582. }.bind(this)
  583. )
  584. } else {
  585. this.updateProjectName()
  586. }
  587. }
  588. updateProjectName(id) {
  589. $.ajax({
  590. url: globalConfig.context + '/api/admin/taskDetails/update',
  591. method: 'post',
  592. data: {
  593. id: this.state.data.id || id,
  594. tid: this.state.data.tid,
  595. projectName: this.state.projectDirector,
  596. projectId: this.state.projectId,
  597. },
  598. }).done(
  599. function (data) {
  600. if (!data.error.length) {
  601. this.setState({
  602. projectV: false,
  603. })
  604. this.getByTid()
  605. } else {
  606. message.warning(data.error[0].message)
  607. }
  608. }.bind(this)
  609. )
  610. }
  611. handleOk() {
  612. this.addTaskFeature()
  613. }
  614. handleCancel() {
  615. this.setState({
  616. visible: false,
  617. obj: {}
  618. })
  619. }
  620. render() {
  621. const { columns, data, visible, obj } = this.state
  622. const radioStyle = {
  623. // display: 'block',
  624. // height: '30px',
  625. // lineHeight: '30px',
  626. };
  627. const formItemLayout = {
  628. labelCol: { span: 8 },
  629. wrapperCol: { span: 14 },
  630. }
  631. const mothOptions = [
  632. { label: '1月', value: '1' },
  633. { label: '2月', value: '2' },
  634. { label: '3月', value: '3' },
  635. { label: '4月', value: '4' },
  636. { label: '5月', value: '5' },
  637. { label: '6月', value: '6' },
  638. { label: '7月', value: '7' },
  639. { label: '8月', value: '8' },
  640. { label: '9月', value: '9' },
  641. { label: '10月', value: '10' },
  642. { label: '11月', value: '11' },
  643. { label: '12月', value: '12' },
  644. ]
  645. const dataSources = this.state.HYlist || [];
  646. const options = dataSources.map((group) => (
  647. <Select.Option key={group.id} value={group.name}>
  648. {group.name}
  649. </Select.Option>
  650. ));
  651. return (
  652. <div className="progress" >
  653. {data.updateStatus == 0 && <div className="popup"></div>}
  654. <Spin spinning={this.state.loading}>
  655. <div
  656. id="count"
  657. className="pro-content"
  658. ref={ref => {
  659. this.printTemp = ref;
  660. }}
  661. >
  662. <div className="pc-title">{data.userName}</div>
  663. <div className="pc-row">
  664. <div className="pr-item">
  665. <div><span>合同编号:</span>{data.contractNo}</div>
  666. <div>&nbsp;</div>
  667. <div>
  668. <span>会员等级:</span>{['', 'A', 'AA', 'AAA'][data.memberLvl]}&nbsp;&nbsp;&nbsp;&nbsp;
  669. <Tag color="#2db7f5"><span style={{ color: "#fff" }}>会员</span></Tag>
  670. </div>
  671. </div>
  672. <div className="pr-item">
  673. <div className="pi-tit">服务内容</div>
  674. {
  675. !!data.taskList && data.taskList.map(item =>
  676. <div key={item.id}>{item.taskName}&nbsp;{item.serviceYear}</div>
  677. )
  678. }
  679. </div>
  680. <div className="pr-itemsss">
  681. <div className="pi-tit">服务团队</div>
  682. <div>
  683. <span>业务负责人:</span>
  684. <Input
  685. style={{ width: this.handleChange('taskName', 60, 'string') }}
  686. value={data.taskName}
  687. onChange={e => {
  688. this.setState({
  689. data: Object.assign(data, {
  690. taskName: e.target.value,
  691. }),
  692. })
  693. }}
  694. />
  695. {/* &nbsp;&nbsp;&nbsp;&nbsp; */}
  696. </div>
  697. <div>
  698. <span>项目负责人:</span>
  699. <Input
  700. style={{ width: this.handleChange('projectName', 60, 'string') }}
  701. value={data.projectName}
  702. onChange={e => {
  703. this.setState({
  704. data: Object.assign(data, {
  705. projectName: e.target.value,
  706. }),
  707. })
  708. }}
  709. onClick={() => {
  710. this.setState({
  711. projectV: true
  712. })
  713. }}
  714. />
  715. </div>
  716. <div>
  717. <span>技术咨询师:</span>
  718. <Input
  719. style={{ width: this.handleChange('technologyName', 60, 'string') }}
  720. value={data.technologyName}
  721. onChange={e => {
  722. this.setState({
  723. data: Object.assign(data, {
  724. technologyName: e.target.value,
  725. }),
  726. })
  727. }}
  728. />
  729. {/* &nbsp;&nbsp;&nbsp;&nbsp; */}
  730. </div>
  731. <div>
  732. <span>财税咨询师:</span>
  733. <Input
  734. style={{ width: this.handleChange('financeTaxationName', 60, 'string') }}
  735. value={data.financeTaxationName}
  736. onChange={e => {
  737. this.setState({
  738. data: Object.assign(data, {
  739. financeTaxationName: e.target.value,
  740. }),
  741. })
  742. }}
  743. />
  744. </div>
  745. </div>
  746. {
  747. !this.state.isPrint &&
  748. <div className="pr-item no-print">
  749. <div style={{ display: 'flex', justifyContent: 'center' }}>
  750. <ReactToPrint
  751. trigger={() => (
  752. <Button
  753. type="primary"
  754. >
  755. 打印
  756. </Button>
  757. )}
  758. content={() => this.printTemp}
  759. onAfterPrint={() => {
  760. this.updateDownload(data.id)
  761. }}
  762. />
  763. <Button
  764. type="primary"
  765. onClick={() => {
  766. const _this = this
  767. this.setState({
  768. isPrint: true
  769. }, () => {
  770. this.download()
  771. })
  772. setTimeout(function () {
  773. _this.setState({
  774. isPrint: false
  775. })
  776. }, 2000)
  777. }}
  778. >
  779. 下载整图
  780. </Button>
  781. <Button
  782. type="primary"
  783. onClick={() => {
  784. this.setState({
  785. logvisible: true
  786. })
  787. this.logList()
  788. }}
  789. >
  790. 日志
  791. </Button>
  792. </div>
  793. <div className="pi-record">最近更新时间</div>
  794. <div className="pi-record">{data.updateTime}</div>
  795. <div className="pi-record">下载/打印时间</div>
  796. <div className="pi-record">{data.downloadTime}</div>
  797. </div>
  798. }
  799. </div>
  800. <div className="pc-tit">基础数据</div>
  801. <div className="pc-row">
  802. <div className="pr-item">
  803. <div className="pi-tit">上年度(<Input style={{ width: this.handleChange('lastYear', 40) }} value={data.lastYear} onChange={e => { this.onChange(e, "lastYear") }} />年)</div>
  804. <div>销售收入:<Input
  805. style={{ width: this.handleChange('lastRdSalesAmount', 40) }}
  806. value={data.lastRdSalesAmount}
  807. onChange={e => { this.onChange(e, "lastRdSalesAmount") }}
  808. onBlur={e => {
  809. this.getProportion('threeYearsRdBudgetRate',
  810. (Number(data.rdBudget) + Number(data.lastRdBudget) + Number(data.beforeLastRdBudget)),
  811. (Number(data.rdSalesAmount) + Number(data.lastRdSalesAmount) + Number(data.beforeLastRdSalesAmount)))
  812. this.getProportion('threeYearsActualRdRate',
  813. (Number(data.actualRdAmount) + Number(data.lastRdBudget) + Number(data.beforeLastRdBudget)),
  814. (Number(data.actualSalesAmount) + Number(data.lastRdSalesAmount) + Number(data.beforeLastRdSalesAmount)))
  815. }}
  816. />万元</div>
  817. <div>高新研发费用:<Input
  818. style={{ width: this.handleChange('lastRdBudget', 40) }}
  819. value={data.lastRdBudget}
  820. onChange={e => { this.onChange(e, "lastRdBudget") }}
  821. onBlur={e => {
  822. this.getProportion('threeYearsRdBudgetRate',
  823. (Number(data.rdBudget) + Number(data.lastRdBudget) + Number(data.beforeLastRdBudget)),
  824. (Number(data.rdSalesAmount) + Number(data.lastRdSalesAmount) + Number(data.beforeLastRdSalesAmount)))
  825. this.getProportion('threeYearsActualRdRate',
  826. (Number(data.actualRdAmount) + Number(data.lastRdBudget) + Number(data.beforeLastRdBudget)),
  827. (Number(data.actualSalesAmount) + Number(data.lastRdSalesAmount) + Number(data.beforeLastRdSalesAmount)))
  828. }}
  829. />万元</div>
  830. </div>
  831. <div className="pr-item">
  832. <div className="pi-tit">上上年度(<Input style={{ width: this.handleChange('beforeLastYear', 40) }} value={data.beforeLastYear} onChange={e => { this.onChange(e, "beforeLastYear") }} />年)</div>
  833. <div>销售收入:<Input
  834. style={{ width: this.handleChange('beforeLastRdSalesAmount', 40) }}
  835. value={data.beforeLastRdSalesAmount}
  836. onChange={e => { this.onChange(e, "beforeLastRdSalesAmount") }}
  837. onBlur={e => {
  838. this.getProportion('threeYearsRdBudgetRate',
  839. (Number(data.rdBudget) + Number(data.lastRdBudget) + Number(data.beforeLastRdBudget)),
  840. (Number(data.rdSalesAmount) + Number(data.lastRdSalesAmount) + Number(data.beforeLastRdSalesAmount)))
  841. this.getProportion('threeYearsActualRdRate',
  842. (Number(data.actualRdAmount) + Number(data.lastRdBudget) + Number(data.beforeLastRdBudget)),
  843. (Number(data.actualSalesAmount) + Number(data.lastRdSalesAmount) + Number(data.beforeLastRdSalesAmount)))
  844. }}
  845. />万元</div>
  846. <div>高新研发费用:<Input
  847. style={{ width: this.handleChange('beforeLastRdBudget', 40) }}
  848. value={data.beforeLastRdBudget}
  849. onChange={e => { this.onChange(e, "beforeLastRdBudget") }}
  850. onBlur={e => {
  851. this.getProportion('threeYearsRdBudgetRate',
  852. (Number(data.rdBudget) + Number(data.lastRdBudget) + Number(data.beforeLastRdBudget)),
  853. (Number(data.rdSalesAmount) + Number(data.lastRdSalesAmount) + Number(data.beforeLastRdSalesAmount)))
  854. this.getProportion('threeYearsActualRdRate',
  855. (Number(data.actualRdAmount) + Number(data.lastRdBudget) + Number(data.beforeLastRdBudget)),
  856. (Number(data.actualSalesAmount) + Number(data.lastRdSalesAmount) + Number(data.beforeLastRdSalesAmount)))
  857. }}
  858. />万元</div>
  859. </div>
  860. <div className="pr-items">
  861. <div className="pi-tit">本年度企业人员情况</div>
  862. <div>职工总数:<Input
  863. style={{ width: this.handleChange('workersNumber', 25) }}
  864. value={data.workersNumber}
  865. onChange={e => { this.onChange(e, "workersNumber") }}
  866. onBlur={e => {
  867. this.getProportion('workersRate', Number(data.technologyNumber), Number(data.workersNumber))
  868. }}
  869. />人
  870. &nbsp;&nbsp;
  871. 科技人员:<Input
  872. style={{ width: this.handleChange('technologyNumber', 25) }}
  873. value={data.technologyNumber}
  874. onChange={e => { this.onChange(e, "technologyNumber") }}
  875. onBlur={e => {
  876. this.getProportion('workersRate', Number(data.technologyNumber), Number(data.workersNumber))
  877. }}
  878. />人
  879. </div>
  880. <div>占比:{data.workersRate || 0}%</div>
  881. </div>
  882. </div>
  883. <div className="pc-tit">科研立项与研发投入</div>
  884. <div className="pc-row">
  885. <div className="pr-item">
  886. <div className="pi-tit">立项和预算</div>
  887. <div>研发立项数量:<Input
  888. style={{ width: this.handleChange('projectApprovalNumber', 25) }}
  889. value={data.projectApprovalNumber}
  890. onChange={e => { this.onChange(e, "projectApprovalNumber") }}
  891. onBlur={e => {
  892. this.getProportion('projectApprovalWriteRate', Number(data.projectApprovalWriteNumber), Number(data.projectApprovalNumber))
  893. }}
  894. />个</div>
  895. <div>年度研发预算总额:
  896. <Input
  897. style={{ width: this.handleChange('rdBudget', 40) }}
  898. value={data.rdBudget}
  899. onChange={e => { this.onChange(e, "rdBudget") }}
  900. onBlur={e => {
  901. this.getProportion('rdCompletionProgress', Number(data.actualRdAmount), Number(data.rdBudget))
  902. this.getProportion('rdBudgetRate', Number(data.rdBudget), Number(data.rdSalesAmount))
  903. this.getProportion('threeYearsRdBudgetRate',
  904. (Number(data.rdBudget) + Number(data.lastRdBudget) + Number(data.beforeLastRdBudget)),
  905. (Number(data.rdSalesAmount) + Number(data.lastRdSalesAmount) + Number(data.beforeLastRdSalesAmount)))
  906. }}
  907. />万元</div>
  908. <div>年度销售收入预计:
  909. <Input
  910. style={{ width: this.handleChange('rdSalesAmount', 40) }}
  911. value={data.rdSalesAmount}
  912. onChange={e => { this.onChange(e, "rdSalesAmount") }}
  913. onBlur={e => {
  914. this.getProportion('rdBudgetRate', Number(data.rdBudget), Number(data.rdSalesAmount))
  915. this.getProportion('threeYearsRdBudgetRate',
  916. (Number(data.rdBudget) + Number(data.lastRdBudget) + Number(data.beforeLastRdBudget)),
  917. (Number(data.rdSalesAmount) + Number(data.lastRdSalesAmount) + Number(data.beforeLastRdSalesAmount)))
  918. }}
  919. />万元</div>
  920. </div>
  921. <div className="pr-item">
  922. <div className="pi-tit">&nbsp;</div>
  923. <div>&nbsp;</div>
  924. <div>本年度研发费用预算占比:{data.rdBudgetRate || 0}%</div>
  925. <div>三年研发费用占比预估:{data.threeYearsRdBudgetRate || 0}%</div>
  926. </div>
  927. </div>
  928. <div className="p-line"></div>
  929. <div className="pc-row">
  930. <div className="pr-items">
  931. <div className="pi-tit">实际情况</div>
  932. <div>数据周期(累计):
  933. <RadioGroup
  934. onChange={e => {
  935. this.setState({
  936. data: Object.assign(data, {
  937. dataCycle: e.target.value,
  938. }),
  939. });
  940. }}
  941. value={data.dataCycle}
  942. >
  943. <Radio style={radioStyle} value={0}>第1季度</Radio>
  944. <Radio style={radioStyle} value={1}>上半年</Radio>
  945. <Radio style={radioStyle} value={2}>前3季度</Radio>
  946. <Radio style={radioStyle} value={3}>全年</Radio>
  947. </RadioGroup>
  948. </div>
  949. <div>
  950. 已立项RD数量:<Input style={{ width: this.handleChange('actualRdNumber', 25) }} value={data.actualRdNumber} onChange={e => { this.onChange(e, "actualRdNumber") }} />个,
  951. 其中委外项目<Input style={{ width: this.handleChange('actualOutsourcingNumber', 25) }} value={data.actualOutsourcingNumber} onChange={e => { this.onChange(e, "actualOutsourcingNumber") }} />个,
  952. 合作项目<Input style={{ width: this.handleChange('actualCooperateNumber', 25) }} value={data.actualCooperateNumber} onChange={e => { this.onChange(e, "actualCooperateNumber") }} />个,
  953. 完成技术合同登记<Input style={{ width: this.handleChange('actualRegistrationNumber', 25) }} value={data.actualRegistrationNumber} onChange={e => { this.onChange(e, "actualRegistrationNumber") }} />个
  954. </div>
  955. <div>已归集研发费用总额:
  956. <Input
  957. style={{ width: this.handleChange('actualRdAmount', 40) }}
  958. value={data.actualRdAmount}
  959. onChange={e => { this.onChange(e, "actualRdAmount") }}
  960. onBlur={e => {
  961. this.getProportion('rdCompletionProgress', Number(data.actualRdAmount), Number(data.rdBudget))
  962. this.getProportion('actualRdRate', Number(data.actualRdAmount), Number(data.actualSalesAmount))
  963. this.getProportion('threeYearsActualRdRate',
  964. (Number(data.actualRdAmount) + Number(data.lastRdBudget) + Number(data.beforeLastRdBudget)),
  965. (Number(data.actualSalesAmount) + Number(data.lastRdSalesAmount) + Number(data.beforeLastRdSalesAmount)))
  966. }}
  967. />万元</div>
  968. <div>研发预算完成进度:{data.rdCompletionProgress || 0}%</div>
  969. </div>
  970. <div className="pr-items">
  971. <div className="pi-tit">&nbsp;</div>
  972. <div>年度实际销售收入:
  973. <Input
  974. style={{ width: this.handleChange('actualSalesAmount', 40) }}
  975. value={data.actualSalesAmount}
  976. onChange={e => { this.onChange(e, "actualSalesAmount") }}
  977. onBlur={e => {
  978. this.getProportion('actualRdRate', Number(data.actualRdAmount), Number(data.actualSalesAmount))
  979. this.getProportion('threeYearsActualRdRate',
  980. (Number(data.actualRdAmount) + Number(data.lastRdBudget) + Number(data.beforeLastRdBudget)),
  981. (Number(data.actualSalesAmount) + Number(data.lastRdSalesAmount) + Number(data.beforeLastRdSalesAmount)))
  982. }}
  983. />万元</div>
  984. <div>本年度研发费用占比:{data.actualRdRate || 0}%</div>
  985. <div>三年研发费用占比:{data.threeYearsActualRdRate || 0}%</div>
  986. </div>
  987. </div>
  988. <div className="pc-tit">报表报送</div>
  989. <div className="pc-row">
  990. <div className="pr-items">
  991. <div>
  992. <span>火炬统计:</span>
  993. <RadioGroup
  994. onChange={e => {
  995. this.setState({
  996. data: Object.assign(data, {
  997. torchStatus: e.target.value,
  998. }),
  999. });
  1000. }}
  1001. value={data.torchStatus}
  1002. >
  1003. <Radio style={radioStyle} value={1}>待完成</Radio>
  1004. <Radio style={radioStyle} value={2}>已完成</Radio>
  1005. <Radio style={radioStyle} value={3}>合同无此项</Radio>
  1006. <Radio style={radioStyle} value={0}>
  1007. 其他
  1008. {data.torchStatus === 0 ?
  1009. <Input
  1010. style={{ width: 100, marginLeft: 10, textAlign: 'left' }}
  1011. value={data.torchOther}
  1012. onChange={e => {
  1013. this.setState({
  1014. data: Object.assign(data, {
  1015. torchOther: e.target.value,
  1016. }),
  1017. })
  1018. }}
  1019. /> : null}
  1020. </Radio>
  1021. </RadioGroup>
  1022. </div>
  1023. <div>
  1024. <span>统计年报:</span>
  1025. <RadioGroup
  1026. onChange={e => {
  1027. this.setState({
  1028. data: Object.assign(data, {
  1029. statisticsStatus: e.target.value,
  1030. }),
  1031. });
  1032. }}
  1033. value={data.statisticsStatus}
  1034. >
  1035. <Radio style={radioStyle} value={1}>待完成</Radio>
  1036. <Radio style={radioStyle} value={2}>已完成</Radio>
  1037. <Radio style={radioStyle} value={3}>合同无此项</Radio>
  1038. <Radio style={radioStyle} value={0}>
  1039. 其他
  1040. {data.statisticsStatus === 0 ?
  1041. <Input
  1042. style={{ width: 100, marginLeft: 10, textAlign: 'left' }}
  1043. value={data.statisticsOther}
  1044. onChange={e => {
  1045. this.setState({
  1046. data: Object.assign(data, {
  1047. statisticsOther: e.target.value,
  1048. }),
  1049. })
  1050. }}
  1051. /> : null}
  1052. </Radio>
  1053. </RadioGroup>
  1054. </div>
  1055. </div>
  1056. <div className="pr-items">
  1057. <div>
  1058. <span>高企年报:</span>
  1059. <RadioGroup
  1060. onChange={e => {
  1061. this.setState({
  1062. data: Object.assign(data, {
  1063. chStatus: e.target.value,
  1064. }),
  1065. });
  1066. }}
  1067. value={data.chStatus}
  1068. >
  1069. <Radio style={radioStyle} value={1}>待完成</Radio>
  1070. <Radio style={radioStyle} value={2}>已完成</Radio>
  1071. <Radio style={radioStyle} value={3}>合同无此项</Radio>
  1072. <Radio style={radioStyle} value={0}>
  1073. 其他
  1074. {data.chStatus === 0 ?
  1075. <Input
  1076. style={{ width: 100, marginLeft: 10, textAlign: 'left' }}
  1077. value={data.chOther}
  1078. onChange={e => {
  1079. this.setState({
  1080. data: Object.assign(data, {
  1081. chOther: e.target.value,
  1082. }),
  1083. })
  1084. }}
  1085. /> : null}
  1086. </Radio>
  1087. </RadioGroup>
  1088. </div>
  1089. <div>
  1090. <span>汇算清缴:</span>
  1091. <RadioGroup
  1092. onChange={e => {
  1093. this.setState({
  1094. data: Object.assign(data, {
  1095. finalSettlementStatus: e.target.value,
  1096. }),
  1097. });
  1098. }}
  1099. value={data.finalSettlementStatus}
  1100. >
  1101. <Radio style={radioStyle} value={1}>待完成</Radio>
  1102. <Radio style={radioStyle} value={2}>已完成</Radio>
  1103. <Radio style={radioStyle} value={3}>合同无此项</Radio>
  1104. <Radio style={radioStyle} value={0}>
  1105. 其他
  1106. {data.finalSettlementStatus === 0 ?
  1107. <Input
  1108. style={{ width: 100, marginLeft: 10, textAlign: 'left' }}
  1109. value={data.finalSettlementOther}
  1110. onChange={e => {
  1111. this.setState({
  1112. data: Object.assign(data, {
  1113. finalSettlementOther: e.target.value,
  1114. }),
  1115. })
  1116. }}
  1117. /> : null}
  1118. </Radio>
  1119. </RadioGroup>
  1120. </div>
  1121. <div>加扣RD<Input style={{ width: this.handleChange('reportFormsRdNumber', 25) }} value={data.reportFormsRdNumber} onChange={e => { this.onChange(e, "reportFormsRdNumber") }} />个,其中有知识产权的加扣费用
  1122. <Input style={{ width: this.handleChange('intellectualPropertyAmount', 40) }} value={data.intellectualPropertyAmount} onChange={e => { this.onChange(e, "intellectualPropertyAmount") }} />万元,加扣研发费用金额
  1123. <Input style={{ width: this.handleChange('reportRdAmount', 40) }} value={data.reportRdAmount} onChange={e => { this.onChange(e, "reportRdAmount") }} />万元</div>
  1124. </div>
  1125. </div>
  1126. <div className="pc-tit">研发奖补</div>
  1127. <div className="pc-row">
  1128. <div className="pr-items">
  1129. <div>
  1130. <span>研发准备金备案:</span>
  1131. <RadioGroup
  1132. onChange={e => {
  1133. this.setState({
  1134. data: Object.assign(data, {
  1135. rdReservesStatus: e.target.value,
  1136. }),
  1137. });
  1138. }}
  1139. value={data.rdReservesStatus}
  1140. >
  1141. <Radio style={radioStyle} value={1}>待完成</Radio>
  1142. <Radio style={radioStyle} value={2}>已完成</Radio>
  1143. <Radio style={radioStyle} value={3}>合同无此项</Radio>
  1144. <Radio style={radioStyle} value={0}>
  1145. 其他
  1146. {data.rdReservesStatus === 0 ?
  1147. <Input
  1148. style={{ width: 100, marginLeft: 10, textAlign: 'left' }}
  1149. value={data.rdReservesOther}
  1150. onChange={e => {
  1151. this.setState({
  1152. data: Object.assign(data, {
  1153. rdReservesOther: e.target.value,
  1154. }),
  1155. })
  1156. }}
  1157. /> : null}
  1158. </Radio>
  1159. </RadioGroup>
  1160. </div>
  1161. </div>
  1162. <div className="pr-items">
  1163. <div>
  1164. <span>研发奖补申请:</span>
  1165. <RadioGroup
  1166. onChange={e => {
  1167. this.setState({
  1168. data: Object.assign(data, {
  1169. rdAwardCompensationStatus: e.target.value,
  1170. }),
  1171. });
  1172. }}
  1173. value={data.rdAwardCompensationStatus}
  1174. >
  1175. <Radio style={radioStyle} value={1}>待完成</Radio>
  1176. <Radio style={radioStyle} value={2}>已完成</Radio>
  1177. <Radio style={radioStyle} value={3}>合同无此项</Radio>
  1178. <Radio style={radioStyle} value={0}>
  1179. 其他
  1180. {data.rdAwardCompensationStatus === 0 ?
  1181. <Input
  1182. style={{ width: 100, marginLeft: 10, textAlign: 'left' }}
  1183. value={data.rdAwardCompensationOther}
  1184. onChange={e => {
  1185. this.setState({
  1186. data: Object.assign(data, {
  1187. rdAwardCompensationOther: e.target.value,
  1188. }),
  1189. })
  1190. }}
  1191. /> : null}
  1192. </Radio>
  1193. </RadioGroup>
  1194. </div>
  1195. <div>
  1196. <span>申请金额:</span><Input style={{ width: this.handleChange('rdApplicationFee', 40) }} value={data.rdApplicationFee} onChange={e => { this.onChange(e, "rdApplicationFee") }} />万元,
  1197. <span>公示金额:</span><Input style={{ width: this.handleChange('rdAnnouncementAmount', 40) }} value={data.rdAnnouncementAmount} onChange={e => { this.onChange(e, "rdAnnouncementAmount") }} />万元,
  1198. 其他<Input
  1199. style={{ width: this.handleChange('rdAnnouncementOther', 40, 'string') }}
  1200. value={data.rdAnnouncementOther}
  1201. onChange={e => {
  1202. this.setState({
  1203. data: Object.assign(data, {
  1204. rdAnnouncementOther: e.target.value,
  1205. }),
  1206. })
  1207. }}
  1208. />
  1209. </div>
  1210. </div>
  1211. </div>
  1212. <div className="pc-tit">备查交付与归档</div>
  1213. <div className="pc-row">
  1214. <div className="pr-items">
  1215. <div>
  1216. <span>加扣备查交付:</span>
  1217. <RadioGroup
  1218. onChange={e => {
  1219. this.setState({
  1220. data: Object.assign(data, {
  1221. adDeliverStatus: e.target.value,
  1222. }),
  1223. });
  1224. }}
  1225. value={data.adDeliverStatus}
  1226. >
  1227. <Radio style={radioStyle} value={1}>待完成</Radio>
  1228. <Radio style={radioStyle} value={2}>已完成</Radio>
  1229. <Radio style={radioStyle} value={3}>合同无此项</Radio>
  1230. <Radio style={radioStyle} value={0}>
  1231. 其他
  1232. {data.adDeliverStatus === 0 ?
  1233. <Input
  1234. style={{ width: 100, marginLeft: 10, textAlign: 'left' }}
  1235. value={data.adDeliverOther}
  1236. onChange={e => {
  1237. this.setState({
  1238. data: Object.assign(data, {
  1239. adDeliverOther: e.target.value,
  1240. }),
  1241. })
  1242. }}
  1243. /> : null}
  1244. </Radio>
  1245. </RadioGroup>
  1246. </div>
  1247. <div>
  1248. <span>是否归档:</span>
  1249. <RadioGroup
  1250. onChange={e => {
  1251. this.setState({
  1252. data: Object.assign(data, {
  1253. adDeliverFinish: e.target.value,
  1254. }),
  1255. });
  1256. }}
  1257. value={data.adDeliverFinish}
  1258. >
  1259. <Radio style={radioStyle} value={0}>未归档</Radio>
  1260. <Radio style={radioStyle} value={1}>已归档</Radio>
  1261. </RadioGroup>
  1262. </div>
  1263. </div>
  1264. <div className="pr-items">
  1265. <div>
  1266. <span>高新备查交付:</span>
  1267. <RadioGroup
  1268. onChange={e => {
  1269. this.setState({
  1270. data: Object.assign(data, {
  1271. htDeliverStatus: e.target.value,
  1272. }),
  1273. });
  1274. }}
  1275. value={data.htDeliverStatus}
  1276. >
  1277. <Radio style={radioStyle} value={1}>待完成</Radio>
  1278. <Radio style={radioStyle} value={2}>已完成</Radio>
  1279. <Radio style={radioStyle} value={3}>合同无此项</Radio>
  1280. <Radio style={radioStyle} value={0}>
  1281. 其他
  1282. {data.htDeliverStatus === 0 ?
  1283. <Input
  1284. style={{ width: 100, marginLeft: 10, textAlign: 'left' }}
  1285. value={data.htDeliverOther}
  1286. onChange={e => {
  1287. this.setState({
  1288. data: Object.assign(data, {
  1289. htDeliverOther: e.target.value,
  1290. }),
  1291. })
  1292. }}
  1293. /> : null}
  1294. </Radio>
  1295. </RadioGroup>
  1296. </div>
  1297. <div>
  1298. <span>是否归档:</span>
  1299. <RadioGroup
  1300. onChange={e => {
  1301. this.setState({
  1302. data: Object.assign(data, {
  1303. htDeliverFinish: e.target.value,
  1304. }),
  1305. });
  1306. }}
  1307. value={data.htDeliverFinish}
  1308. >
  1309. <Radio style={radioStyle} value={1}>未归档</Radio>
  1310. <Radio style={radioStyle} value={2}>已归档</Radio>
  1311. </RadioGroup>
  1312. </div>
  1313. </div>
  1314. </div>
  1315. <div className="pc-tit">日常工作</div>
  1316. <div className="pc-row">
  1317. <div className="pr-itemss">
  1318. <div>
  1319. <span>召开上年度总结及本年工作计划:</span>
  1320. <RadioGroup
  1321. onChange={e => {
  1322. this.setState({
  1323. data: Object.assign(data, {
  1324. closeMeetingStatus: e.target.value,
  1325. }),
  1326. });
  1327. }}
  1328. value={data.closeMeetingStatus}
  1329. >
  1330. <Radio style={radioStyle} value={1}>待完成</Radio>
  1331. <Radio style={radioStyle} value={2}>已完成</Radio>
  1332. <Radio style={radioStyle} value={3}>合同无此项</Radio>
  1333. <Radio style={radioStyle} value={0}>
  1334. 其他
  1335. {data.closeMeetingStatus === 0 ?
  1336. <Input
  1337. style={{ width: 100, marginLeft: 10, textAlign: 'left' }}
  1338. value={data.closeMeetingOther}
  1339. onChange={e => {
  1340. this.setState({
  1341. data: Object.assign(data, {
  1342. closeMeetingOther: e.target.value,
  1343. }),
  1344. })
  1345. }}
  1346. /> : null}
  1347. </Radio>
  1348. </RadioGroup>
  1349. </div>
  1350. </div>
  1351. </div>
  1352. <div className="p-line"></div>
  1353. <div className="pc-row">
  1354. <div className="pr-itemss">
  1355. <div>
  1356. <span>阶段性汇报:</span>
  1357. <RadioGroup
  1358. onChange={e => {
  1359. this.setState({
  1360. data: Object.assign(data, {
  1361. phasedType: e.target.value,
  1362. }),
  1363. });
  1364. }}
  1365. value={data.phasedType}
  1366. >
  1367. <Radio style={radioStyle} value={1}>月度</Radio>
  1368. <Radio style={radioStyle} value={2}>季度</Radio>
  1369. </RadioGroup>
  1370. </div>
  1371. <div style={{ margin: '5px 0 0 72px', paddingTop: '5px', borderTop: '1px dashed #000000A6' }}>
  1372. <CheckboxGroup
  1373. options={mothOptions}
  1374. onChange={e => {
  1375. this.setState({
  1376. data: Object.assign(data, {
  1377. phasedContent: e,
  1378. }),
  1379. });
  1380. }}
  1381. value={data.phasedContent}
  1382. />
  1383. </div>
  1384. </div>
  1385. </div>
  1386. <div className="p-line"></div>
  1387. <div className="pc-row">
  1388. <div className="pr-itemss">
  1389. <div>
  1390. <span>立项资料编写:</span>
  1391. 完成数<Input
  1392. style={{ width: this.handleChange('projectApprovalWriteNumber', 25) }}
  1393. value={data.projectApprovalWriteNumber}
  1394. onChange={e => { this.onChange(e, "projectApprovalWriteNumber") }}
  1395. onBlur={e => {
  1396. this.getProportion('projectApprovalWriteRate', Number(data.projectApprovalWriteNumber), Number(data.projectApprovalNumber))
  1397. }}
  1398. />个
  1399. &nbsp;&nbsp;&nbsp;完成率(系统自动计算){data.projectApprovalWriteRate}%</div>
  1400. </div>
  1401. </div>
  1402. <div className="p-line"></div>
  1403. <div className="pc-row">
  1404. <div className="pr-itemss">
  1405. <div>
  1406. <span>加计预申报:</span>
  1407. 7月:
  1408. <RadioGroup
  1409. onChange={e => {
  1410. this.setState({
  1411. data: Object.assign(data, {
  1412. adPrepareJulyStatus: e.target.value,
  1413. }),
  1414. });
  1415. }}
  1416. value={data.adPrepareJulyStatus}
  1417. >
  1418. <Radio style={radioStyle} value={1}>待完成</Radio>
  1419. <Radio style={radioStyle} value={2}>已完成</Radio>
  1420. <Radio style={radioStyle} value={3}>合同无此项</Radio>
  1421. <Radio style={radioStyle} value={0}>
  1422. 其他
  1423. {data.adPrepareJulyStatus === 0 ?
  1424. <Input
  1425. style={{ width: 100, marginLeft: 10, textAlign: 'left' }}
  1426. value={data.adPrepareJulyOther}
  1427. onChange={e => {
  1428. this.setState({
  1429. data: Object.assign(data, {
  1430. adPrepareJulyOther: e.target.value,
  1431. }),
  1432. })
  1433. }}
  1434. /> : null}
  1435. </Radio>
  1436. </RadioGroup>
  1437. &nbsp;&nbsp;
  1438. 10月:
  1439. <RadioGroup
  1440. onChange={e => {
  1441. this.setState({
  1442. data: Object.assign(data, {
  1443. adPrepareOctoberStatus: e.target.value,
  1444. }),
  1445. });
  1446. }}
  1447. value={data.adPrepareOctoberStatus}
  1448. >
  1449. <Radio style={radioStyle} value={1}>待完成</Radio>
  1450. <Radio style={radioStyle} value={2}>已完成</Radio>
  1451. <Radio style={radioStyle} value={3}>合同无此项</Radio>
  1452. <Radio style={radioStyle} value={0}>
  1453. 其他
  1454. {data.adPrepareOctoberStatus === 0 ?
  1455. <Input
  1456. style={{ width: 100, marginLeft: 10, textAlign: 'left' }}
  1457. value={data.adPrepareOctoberOther}
  1458. onChange={e => {
  1459. this.setState({
  1460. data: Object.assign(data, {
  1461. adPrepareOctoberOther: e.target.value,
  1462. }),
  1463. })
  1464. }}
  1465. /> : null}
  1466. </Radio>
  1467. </RadioGroup>
  1468. </div>
  1469. </div>
  1470. </div>
  1471. <div className="p-line"></div>
  1472. <div className="pc-row">
  1473. <div className="pr-itemss">
  1474. <div><span>知识产权情况:</span></div>
  1475. <div>
  1476. <span>发明专利:</span>
  1477. 当年申报数量<Input style={{ width: this.handleChange('ipInventionPatentDeclare', 25) }} value={data.ipInventionPatentDeclare} onChange={e => { this.onChange(e, "ipInventionPatentDeclare") }} />个,
  1478. 当年授权数量<Input style={{ width: this.handleChange('ipInventionPatentAuthorize', 25) }} value={data.ipInventionPatentAuthorize} onChange={e => { this.onChange(e, "ipInventionPatentAuthorize") }} />个,
  1479. 企业累计授权数量<Input style={{ width: this.handleChange('ipInventionPatentAuthorizeCount', 25) }} value={data.ipInventionPatentAuthorizeCount} onChange={e => { this.onChange(e, "ipInventionPatentAuthorizeCount") }} />个。</div>
  1480. <div>
  1481. <span>实用新型专利:</span>
  1482. 当年申报数量<Input style={{ width: this.handleChange('ipUtilityModelDeclare', 25) }} value={data.ipUtilityModelDeclare} onChange={e => { this.onChange(e, "ipUtilityModelDeclare") }} />个,
  1483. 当年授权数量<Input style={{ width: this.handleChange('ipUtilityModelAuthorize', 25) }} value={data.ipUtilityModelAuthorize} onChange={e => { this.onChange(e, "ipUtilityModelAuthorize") }} />个,
  1484. 企业累计授权数量<Input style={{ width: this.handleChange('ipUtilityModelAuthorizeCount', 25) }} value={data.ipUtilityModelAuthorizeCount} onChange={e => { this.onChange(e, "ipUtilityModelAuthorizeCount") }} />个。
  1485. </div>
  1486. <div><span>软著:</span>
  1487. 当年申请数量<Input style={{ width: this.handleChange('ipSoftwareWorksDeclare', 25) }} value={data.ipSoftwareWorksDeclare} onChange={e => { this.onChange(e, "ipSoftwareWorksDeclare") }} />个,
  1488. 当年下证数量<Input style={{ width: this.handleChange('ipSoftwareWorksAuthorize', 25) }} value={data.ipSoftwareWorksAuthorize} onChange={e => { this.onChange(e, "ipSoftwareWorksAuthorize") }} />个,
  1489. 企业累计下证数量<Input style={{ width: this.handleChange('ipSoftwareWorksAuthorizeCount', 25) }} value={data.ipSoftwareWorksAuthorizeCount} onChange={e => { this.onChange(e, "ipSoftwareWorksAuthorizeCount") }} />个。
  1490. </div>
  1491. <div>
  1492. 截止本年末可用于下次高新认定数量<Input style={{ width: this.handleChange('ipHt', 25) }} value={data.ipHt} onChange={e => { this.onChange(e, "ipHt") }} />个,
  1493. 其中I类<Input style={{ width: this.handleChange('ipHtI', 25) }} value={data.ipHtI} onChange={e => { this.onChange(e, "ipHtI") }} />个,
  1494. II类<Input style={{ width: this.handleChange('ipHtIi', 25) }} value={data.ipHtIi} onChange={e => { this.onChange(e, "ipHtIi") }} />个。
  1495. </div>
  1496. </div>
  1497. </div>
  1498. <div className="p-line"></div>
  1499. <div className="pc-row">
  1500. <div className="pr-itemss">
  1501. <div>
  1502. <span>公出指标(本年度):</span>
  1503. 合同约定次数:<Input style={{ width: this.handleChange('publicReleaseStipulation', 25) }} value={data.publicReleaseStipulation} onChange={e => { this.onChange(e, "publicReleaseStipulation") }} />次&nbsp;&nbsp;&nbsp;
  1504. 实际次数:<Input style={{ width: this.handleChange('publicReleaseActual', 25) }} value={data.publicReleaseActual} onChange={e => { this.onChange(e, "publicReleaseActual") }} />次&nbsp;&nbsp;&nbsp;
  1505. </div>
  1506. </div>
  1507. </div>
  1508. <div className="p-line"></div>
  1509. <div className="pc-row">
  1510. <div className="pr-itemss">
  1511. <div>
  1512. <span>培训指标(本年度):</span>
  1513. 合同约定次数:<Input style={{ width: this.handleChange('trainingStipulation', 25) }} value={data.trainingStipulation} onChange={e => { this.onChange(e, "trainingStipulation") }} />次&nbsp;&nbsp;&nbsp;
  1514. 实际次数:<Input style={{ width: this.handleChange('trainingActual', 25) }} value={data.trainingActual} onChange={e => { this.onChange(e, "trainingActual") }} />次&nbsp;&nbsp;&nbsp;
  1515. 其他:<Input
  1516. style={{ width: this.handleChange('trainingOther', 40, 'string') }}
  1517. value={data.trainingOther}
  1518. onChange={e => {
  1519. this.setState({
  1520. data: Object.assign(data, {
  1521. trainingOther: e.target.value,
  1522. }),
  1523. })
  1524. }}
  1525. />
  1526. </div>
  1527. </div>
  1528. </div>
  1529. <div className="pc-tit">
  1530. 特色工作
  1531. {
  1532. !this.state.isPrint &&
  1533. <div className="pt-bt no-print">
  1534. <Button
  1535. type="primary"
  1536. size="small"
  1537. onClick={() => {
  1538. // if (!this.state.data.id) {
  1539. // this.onSubmit()
  1540. // }
  1541. this.onSubmit()
  1542. this.setState({
  1543. visible: true
  1544. })
  1545. }}
  1546. >
  1547. + 新增
  1548. </Button>
  1549. </div>
  1550. }
  1551. </div>
  1552. <div className="patent-table">
  1553. <Spin spinning={this.state.loading}>
  1554. <Table
  1555. bordered
  1556. columns={columns}
  1557. dataSource={data.featureList}
  1558. onRowDoubleClick={this.onRowDoubleClick}
  1559. pagination={false}
  1560. />
  1561. </Spin>
  1562. </div>
  1563. <div className="pc-tit">高新认定</div>
  1564. <div className="pc-row">
  1565. <div className="pr-itemss">
  1566. <div>
  1567. <span>1.基础情况:</span>
  1568. 创新能力评价估分<Input style={{ width: this.handleChange('htScore', 25) }} value={data.htScore} onChange={e => { this.onChange(e, "htScore") }} />分,
  1569. 实际申报批次:
  1570. <RadioGroup
  1571. onChange={e => {
  1572. this.setState({
  1573. data: Object.assign(data, {
  1574. htBatch: e.target.value,
  1575. }),
  1576. });
  1577. }}
  1578. value={data.htBatch}
  1579. >
  1580. <Radio style={radioStyle} value={1}>第1批</Radio>
  1581. <Radio style={radioStyle} value={2}>第2批</Radio>
  1582. <Radio style={radioStyle} value={3}>第3批</Radio>
  1583. </RadioGroup>
  1584. ,是否重点关注:
  1585. <RadioGroup
  1586. onChange={e => {
  1587. this.setState({
  1588. data: Object.assign(data, {
  1589. htFocus: e.target.value,
  1590. }),
  1591. });
  1592. }}
  1593. value={data.htFocus}
  1594. >
  1595. <Radio style={radioStyle} value={1}>是</Radio>
  1596. <Radio style={radioStyle} value={0}>否</Radio>
  1597. </RadioGroup>
  1598. </div>
  1599. <div>
  1600. <span>2.申报提交:</span>
  1601. 网上系统提交:
  1602. <RadioGroup
  1603. onChange={e => {
  1604. this.setState({
  1605. data: Object.assign(data, {
  1606. webSubmit: e.target.value,
  1607. }),
  1608. });
  1609. }}
  1610. value={data.webSubmit}
  1611. >
  1612. <Radio style={radioStyle} value={1}>待完成</Radio>
  1613. <Radio style={radioStyle} value={2}>已完成</Radio>
  1614. <Radio style={radioStyle} value={3}>合同无此项</Radio>
  1615. <Radio style={radioStyle} value={0}>
  1616. 其他
  1617. {data.webSubmit === 0 ?
  1618. <Input
  1619. style={{ width: 100, marginLeft: 10, textAlign: 'left' }}
  1620. value={data.webSubmitOther}
  1621. onChange={e => {
  1622. this.setState({
  1623. data: Object.assign(data, {
  1624. webSubmitOther: e.target.value,
  1625. }),
  1626. })
  1627. }}
  1628. /> : null}
  1629. </Radio>
  1630. </RadioGroup>
  1631. 纸质材料提交:
  1632. <RadioGroup
  1633. onChange={e => {
  1634. this.setState({
  1635. data: Object.assign(data, {
  1636. paperSubmit: e.target.value,
  1637. }),
  1638. });
  1639. }}
  1640. value={data.paperSubmit}
  1641. >
  1642. <Radio style={radioStyle} value={1}>待完成</Radio>
  1643. <Radio style={radioStyle} value={2}>已完成</Radio>
  1644. <Radio style={radioStyle} value={3}>合同无此项</Radio>
  1645. <Radio style={radioStyle} value={0}>
  1646. 其他
  1647. {data.paperSubmit === 0 ?
  1648. <Input
  1649. style={{ width: 100, marginLeft: 10, textAlign: 'left' }}
  1650. value={data.paperSubmitOther}
  1651. onChange={e => {
  1652. this.setState({
  1653. data: Object.assign(data, {
  1654. paperSubmitOther: e.target.value,
  1655. }),
  1656. })
  1657. }}
  1658. /> : null}
  1659. </Radio>
  1660. </RadioGroup>
  1661. </div>
  1662. <div>
  1663. <span>3.评审情况:</span>
  1664. 省级:
  1665. <RadioGroup
  1666. onChange={e => {
  1667. this.setState({
  1668. data: Object.assign(data, {
  1669. reviewProvince: e.target.value,
  1670. }),
  1671. });
  1672. }}
  1673. value={data.reviewProvince}
  1674. >
  1675. <Radio style={radioStyle} value={0}>淘汰</Radio>
  1676. <Radio style={radioStyle} value={1}>公示,公示序号:
  1677. <Input
  1678. style={{ width: 100, marginLeft: 10, textAlign: 'left' }}
  1679. value={data.reviewProvinceNumber}
  1680. onChange={e => {
  1681. this.setState({
  1682. data: Object.assign(data, {
  1683. reviewProvinceNumber: e.target.value,
  1684. }),
  1685. })
  1686. }}
  1687. />
  1688. </Radio>
  1689. </RadioGroup>
  1690. 国家级:
  1691. <RadioGroup
  1692. onChange={e => {
  1693. this.setState({
  1694. data: Object.assign(data, {
  1695. reviewCountry: e.target.value,
  1696. }),
  1697. });
  1698. }}
  1699. value={data.reviewCountry}
  1700. >
  1701. <Radio style={radioStyle} value={0}>淘汰</Radio>
  1702. <Radio style={radioStyle} value={1}>公示,高企编号:
  1703. <Input
  1704. style={{ width: 100, marginLeft: 10, textAlign: 'left' }}
  1705. value={data.reviewCountryNumber}
  1706. onChange={e => {
  1707. this.setState({
  1708. data: Object.assign(data, {
  1709. reviewCountryNumber: e.target.value,
  1710. }),
  1711. })
  1712. }}
  1713. />
  1714. </Radio>
  1715. </RadioGroup>
  1716. </div>
  1717. </div>
  1718. </div>
  1719. <div className="pc-tit">其他事项说明</div>
  1720. <div className="pc-row">
  1721. <TextArea
  1722. rows={2}
  1723. value={data.remarks}
  1724. onChange={e => {
  1725. this.setState({
  1726. data: Object.assign(data, {
  1727. remarks: e.target.value,
  1728. }),
  1729. })
  1730. }}
  1731. />
  1732. </div>
  1733. <div className="pc-tit">客户签字</div>
  1734. <div className="pc-row">
  1735. <div className="pr-itemss">
  1736. <div style={{ paddingBottom: 80 }}><span>授权代表(签字或盖章):</span></div>
  1737. </div>
  1738. </div>
  1739. </div>
  1740. </Spin>
  1741. <div className="pro-bottom">
  1742. <Button
  1743. type="primary"
  1744. onClick={() => {
  1745. this.onSubmit()
  1746. }}
  1747. style={{ margin: 25 }}
  1748. >
  1749. 保存
  1750. </Button>
  1751. {/* <Button
  1752. type="ghost"
  1753. onClick={() => {
  1754. console.log("--------", data)
  1755. }}
  1756. style={{ margin: 25 }}
  1757. >
  1758. 取消
  1759. </Button> */}
  1760. </div>
  1761. <Modal
  1762. maskClosable={false}
  1763. title="特色工作"
  1764. visible={visible}
  1765. width={600}
  1766. footer=""
  1767. onCancel={this.handleCancel}
  1768. >
  1769. <Form
  1770. layout="horizontal"
  1771. >
  1772. <Spin spinning={this.state.loading}>
  1773. <div>
  1774. <Form.Item
  1775. {...formItemLayout}
  1776. label="检查开始时间">
  1777. <DatePicker
  1778. style={{ width: 200 }}
  1779. value={obj.startTimeStr ? moment(obj.startTimeStr) : null}
  1780. onChange={(date, dateString) => {
  1781. this.setState({
  1782. obj: Object.assign(obj, {
  1783. startTimeStr: dateString,
  1784. }),
  1785. })
  1786. }}
  1787. />
  1788. </Form.Item>
  1789. </div>
  1790. <div>
  1791. <Form.Item
  1792. {...formItemLayout}
  1793. label="检查结束时间">
  1794. <DatePicker
  1795. style={{ width: 200 }}
  1796. value={obj.endTimeStr ? moment(obj.endTimeStr) : null}
  1797. onChange={(date, dateString) => {
  1798. this.setState({
  1799. obj: Object.assign(obj, {
  1800. endTimeStr: dateString,
  1801. }),
  1802. })
  1803. }}
  1804. />
  1805. </Form.Item>
  1806. </div>
  1807. <div>
  1808. <Form.Item
  1809. {...formItemLayout}
  1810. label="检查部门">
  1811. <Input
  1812. style={{ width: 200 }}
  1813. value={obj.depName}
  1814. onChange={e => {
  1815. this.setState({
  1816. obj: Object.assign(obj, {
  1817. depName: e.target.value,
  1818. }),
  1819. })
  1820. }}
  1821. />
  1822. </Form.Item>
  1823. </div>
  1824. <div>
  1825. <Form.Item
  1826. {...formItemLayout}
  1827. label="被检查年度">
  1828. <Input
  1829. style={{ width: 200 }}
  1830. value={obj.yearFeature}
  1831. onChange={e => {
  1832. this.setState({
  1833. obj: Object.assign(obj, {
  1834. yearFeature: e.target.value,
  1835. }),
  1836. })
  1837. }}
  1838. />
  1839. </Form.Item>
  1840. </div>
  1841. <div>
  1842. <Form.Item
  1843. {...formItemLayout}
  1844. label="检查方式">
  1845. <RadioGroup
  1846. style={{ width: 200 }}
  1847. value={obj.inspectWay}
  1848. onChange={(e) => {
  1849. this.setState({
  1850. obj: Object.assign(obj, {
  1851. inspectWay: e.target.value,
  1852. }),
  1853. })
  1854. }}
  1855. >
  1856. <Radio value={0}>线上</Radio>
  1857. <Radio value={1}>线下</Radio>
  1858. </RadioGroup>
  1859. </Form.Item>
  1860. </div>
  1861. <div>
  1862. <Form.Item
  1863. {...formItemLayout}
  1864. label="检查类别">
  1865. <Select
  1866. style={{ width: 200 }}
  1867. value={obj.type}
  1868. onChange={(e) => {
  1869. this.setState({
  1870. obj: Object.assign(obj, {
  1871. type: e,
  1872. }),
  1873. })
  1874. }}
  1875. >
  1876. <Select.Option value={1}>高新技术税收优惠政策检查</Select.Option>
  1877. <Select.Option value={2}>加计扣除税收优惠政策检查</Select.Option>
  1878. <Select.Option value={3}>税务常规检查</Select.Option>
  1879. <Select.Option value={4}>税务对研发费用检查</Select.Option>
  1880. <Select.Option value={5}>税务稽查</Select.Option>
  1881. <Select.Option value={0}>其他</Select.Option>
  1882. </Select>
  1883. </Form.Item>
  1884. </div>
  1885. {
  1886. obj.type == 0 &&
  1887. <div>
  1888. <Form.Item
  1889. {...formItemLayout}
  1890. label="检查类别其他说明">
  1891. <TextArea
  1892. rows={2}
  1893. style={{ width: 200 }}
  1894. placeholder="检查类别其他说明"
  1895. value={obj.typeOther}
  1896. onChange={e => {
  1897. this.setState({
  1898. obj: Object.assign(obj, {
  1899. typeOther: e.target.value,
  1900. }),
  1901. })
  1902. }}
  1903. />
  1904. </Form.Item>
  1905. </div>
  1906. }
  1907. <div>
  1908. <Form.Item
  1909. {...formItemLayout}
  1910. label="检查事项">
  1911. <Select
  1912. style={{ width: 200 }}
  1913. value={obj.inspectionItems}
  1914. onChange={(e) => {
  1915. this.setState({
  1916. obj: Object.assign(obj, {
  1917. inspectionItems: e,
  1918. }),
  1919. })
  1920. }}
  1921. >
  1922. <Select.Option value={1}>高新产品收入不达标</Select.Option>
  1923. <Select.Option value={2}>人员人工费用问题检查</Select.Option>
  1924. <Select.Option value={3}>研发费用占比不达标</Select.Option>
  1925. <Select.Option value={4}>属于多个类别</Select.Option>
  1926. <Select.Option value={5}>其他事项检查</Select.Option>
  1927. <Select.Option value={0}>其他</Select.Option>
  1928. </Select>
  1929. </Form.Item>
  1930. </div>
  1931. {
  1932. obj.inspectionItems == 0 &&
  1933. <div>
  1934. <Form.Item
  1935. {...formItemLayout}
  1936. label="检查事项其他说明">
  1937. <TextArea
  1938. rows={2}
  1939. style={{ width: 200 }}
  1940. placeholder="检查事项其他说明"
  1941. value={obj.inspectionItemsOther}
  1942. onChange={e => {
  1943. this.setState({
  1944. obj: Object.assign(obj, {
  1945. inspectionItemsOther: e.target.value,
  1946. }),
  1947. })
  1948. }}
  1949. />
  1950. </Form.Item>
  1951. </div>
  1952. }
  1953. <div>
  1954. <Form.Item
  1955. {...formItemLayout}
  1956. label="企业问题点">
  1957. <TextArea
  1958. rows={2}
  1959. style={{ width: 200 }}
  1960. placeholder="企业问题点"
  1961. value={obj.enterpriseProblems}
  1962. onChange={e => {
  1963. this.setState({
  1964. obj: Object.assign(obj, {
  1965. enterpriseProblems: e.target.value,
  1966. }),
  1967. })
  1968. }}
  1969. />
  1970. </Form.Item>
  1971. </div>
  1972. <div>
  1973. <Form.Item
  1974. {...formItemLayout}
  1975. label="解决方式">
  1976. <TextArea
  1977. rows={2}
  1978. style={{ width: 200 }}
  1979. placeholder="解决方式"
  1980. value={obj.solution}
  1981. onChange={e => {
  1982. this.setState({
  1983. obj: Object.assign(obj, {
  1984. solution: e.target.value,
  1985. }),
  1986. })
  1987. }}
  1988. />
  1989. </Form.Item>
  1990. </div>
  1991. <div>
  1992. <Form.Item
  1993. {...formItemLayout}
  1994. label="检查后结论">
  1995. <Select
  1996. style={{ width: 200 }}
  1997. value={obj.inspectionConclusion}
  1998. onChange={(e) => {
  1999. this.setState({
  2000. obj: Object.assign(obj, {
  2001. inspectionConclusion: e,
  2002. }),
  2003. })
  2004. }}
  2005. >
  2006. <Select.Option value={1}>被取消高新认定资格</Select.Option>
  2007. <Select.Option value={2}>不通过</Select.Option>
  2008. <Select.Option value={3}>合规通过</Select.Option>
  2009. <Select.Option value={4}>通过</Select.Option>
  2010. <Select.Option value={5}>无结论</Select.Option>
  2011. <Select.Option value={6}>要求整改</Select.Option>
  2012. </Select>
  2013. </Form.Item>
  2014. </div>
  2015. <div>
  2016. <Form.Item
  2017. {...formItemLayout}
  2018. label="是否提醒企业专人跟进事宜">
  2019. <RadioGroup
  2020. style={{ width: 200 }}
  2021. value={obj.remindFollow}
  2022. onChange={(e) => {
  2023. this.setState({
  2024. obj: Object.assign(obj, {
  2025. remindFollow: e.target.value,
  2026. }),
  2027. })
  2028. }}
  2029. >
  2030. <Radio value={0}>未提醒</Radio>
  2031. <Radio value={1}>已提醒</Radio>
  2032. </RadioGroup>
  2033. </Form.Item>
  2034. </div>
  2035. <div>
  2036. <Form.Item
  2037. {...formItemLayout}
  2038. label="备注">
  2039. <TextArea
  2040. rows={2}
  2041. style={{ width: 200 }}
  2042. placeholder="备注"
  2043. value={obj.remarks}
  2044. onChange={e => {
  2045. this.setState({
  2046. obj: Object.assign(obj, {
  2047. remarks: e.target.value,
  2048. }),
  2049. })
  2050. }}
  2051. />
  2052. </Form.Item>
  2053. </div>
  2054. <div>
  2055. <div style={{ margin: '20px 0 50px 0', display: 'flex', flexDirection: 'row', justifyContent: 'center' }}>
  2056. <Button
  2057. type="primary"
  2058. style={{ margin: '0 25px' }}
  2059. onClick={this.handleOk}
  2060. >
  2061. 保存
  2062. </Button>
  2063. {
  2064. this.state.obj.id &&
  2065. <Popconfirm
  2066. placement="top"
  2067. title="确定要删除吗?"
  2068. onConfirm={(e) => {
  2069. e.stopPropagation();
  2070. this.deleteTaskFeature(obj.id);
  2071. }}
  2072. okText="确定"
  2073. cancelText="取消"
  2074. >
  2075. <Button
  2076. type="primary"
  2077. style={{ margin: '0 25px', borderColor: 'red', background: 'red', color: '#fff' }}
  2078. >
  2079. 删除
  2080. </Button>
  2081. </Popconfirm>
  2082. }
  2083. <Button
  2084. type="ghost"
  2085. style={{ margin: '0 25px' }}
  2086. onClick={this.handleCancel}
  2087. >
  2088. 取消
  2089. </Button>
  2090. </div>
  2091. </div>
  2092. </Spin>
  2093. </Form>
  2094. </Modal>
  2095. <Modal
  2096. title="记录"
  2097. visible={this.state.logvisible}
  2098. width={400}
  2099. footer=""
  2100. onCancel={() => {
  2101. this.setState({
  2102. logvisible: false
  2103. })
  2104. }}
  2105. >
  2106. <Table
  2107. bordered
  2108. columns={this.state.logcolumns}
  2109. dataSource={this.state.logData}
  2110. pagination={this.state.pagination}
  2111. />
  2112. </Modal>
  2113. <Modal
  2114. // closable={!data.id ? false : true}
  2115. maskClosable={false}
  2116. title="项目负责人"
  2117. visible={this.state.projectV}
  2118. width={240}
  2119. footer=""
  2120. onCancel={() => {
  2121. this.setState({
  2122. projectV: false,
  2123. })
  2124. }}
  2125. >
  2126. <div style={{
  2127. width: 200,
  2128. display: 'flex',
  2129. flexDirection: 'column',
  2130. alignItems: 'center',
  2131. }}
  2132. >
  2133. <div
  2134. style={{
  2135. textAlign: 'center',
  2136. color: 'black',
  2137. fontSize: '18px',
  2138. marginBottom: 15,
  2139. }}
  2140. >请设置会员负责人</div>
  2141. <AutoComplete
  2142. className="certain-category-search"
  2143. dropdownClassName="certain-category-search-dropdown"
  2144. dropdownMatchSelectWidth={false}
  2145. style={{ width: "200px", textAlign: 'center', marginBottom: 15 }}
  2146. dataSource={options}
  2147. placeholder="请输入会员负责人姓名"
  2148. value={this.state.projectDirector}
  2149. onChange={this.followUpHY.bind(this)}
  2150. filterOption={true}
  2151. onSelect={this.selectHY.bind(this)}
  2152. >
  2153. <Input />
  2154. </AutoComplete>
  2155. <Button
  2156. type="primary"
  2157. size='large'
  2158. onClick={() => {
  2159. if (!this.state.projectId) {
  2160. message.warning('请先设置会员负责人')
  2161. return
  2162. } else {
  2163. this.addProjectName()
  2164. }
  2165. }}>
  2166. 确定
  2167. </Button>
  2168. </div>
  2169. </Modal>
  2170. </div>
  2171. )
  2172. }
  2173. }
  2174. export default Progress;