patentSchedule.jsx 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534
  1. import React,{ Component } from 'react';
  2. import {Button, DatePicker, Select, Table, Input, Modal, Spin, message} from "antd";
  3. import moment from "moment";
  4. import $ from "jquery";
  5. const { Option } = Select;
  6. const confirm = Modal.confirm;
  7. class PatentSchedule extends Component{
  8. constructor(props) {
  9. super(props);
  10. this.state={
  11. columns: [
  12. {
  13. title: '批次',
  14. dataIndex: 'key',
  15. key: 'key',
  16. render: (text, record,index) => {
  17. return index+1;
  18. }
  19. },
  20. {
  21. title: '专利号',
  22. dataIndex: 'patentNo',
  23. key: 'patentNo',
  24. render: (text, record,index) => {
  25. return !record.isChange ? text : <Input
  26. value={text}
  27. size={'small'}
  28. style={{
  29. width: '100px'
  30. }}
  31. onChange={(e)=>{
  32. this.changeEvidence(e.target.value,index,'patentNo')
  33. }}/>
  34. }
  35. },
  36. {
  37. title: '专利名称',
  38. dataIndex: 'patentName',
  39. key: 'patentName',
  40. render: (text, record,index) => {
  41. return !record.isChange ? text : <Input
  42. value={text}
  43. style={{width: '100px'}}
  44. size={'small'}
  45. onChange={(e)=>{
  46. this.changeEvidence(e.target.value,index,'patentName')
  47. }}/>
  48. }
  49. },
  50. {
  51. title: '受理时间',
  52. dataIndex: 'acceptTimes',
  53. key: 'acceptTimes',
  54. render: (text, record,index) => {
  55. return !record.isChange ? text : <DatePicker
  56. value={
  57. text ? moment(text) : null
  58. }
  59. size={'small'}
  60. style={{
  61. marginTop: '4px',
  62. width: '100px'
  63. }}
  64. showTime
  65. format="YYYY-MM-DD"
  66. onChange={(data, dataString) => {
  67. this.changeEvidence(dataString,index,'acceptTimes')
  68. }}
  69. />
  70. }
  71. },
  72. {
  73. title: '授权时间',
  74. dataIndex: 'authorizeTimes',
  75. key: 'authorizeTimes',
  76. render: (text, record,index) => {
  77. return !record.isChange ? text : <DatePicker
  78. size={'small'}
  79. style={{
  80. marginTop: '4px',
  81. width: '100px'
  82. }}
  83. value={
  84. text ? moment(text) : null
  85. }
  86. showTime
  87. format="YYYY-MM-DD"
  88. onChange={(data, dataString) => {
  89. this.changeEvidence(dataString,index,'authorizeTimes')
  90. }}
  91. />
  92. }
  93. },
  94. {
  95. title: '下证时间',
  96. dataIndex: 'licenceTimes',
  97. key: 'licenceTimes',
  98. render: (text, record,index) => {
  99. return !record.isChange ? text : <DatePicker
  100. value={
  101. text ? moment(text) : null
  102. }
  103. size={'small'}
  104. style={{
  105. marginTop: '4px',
  106. width: '100px'
  107. }}
  108. showTime
  109. format="YYYY-MM-DD"
  110. onChange={(data, dataString) => {
  111. this.changeEvidence(dataString,index,'licenceTimes')
  112. }}
  113. />
  114. }
  115. },
  116. {
  117. title: '状态',
  118. dataIndex: 'status',
  119. key: 'status',
  120. render: (text, record,index) => {
  121. return !record.isChange ? text === 0 ? '待审核' : text === 1 ? '通过' : '驳回' : <Select style={{width:'80px'}} value={text} size={'small'} onChange={(v)=>{
  122. this.changeEvidence(v,index,'status')
  123. }}>
  124. <Option value={0}>待审核</Option>
  125. <Option value={1}>通过</Option>
  126. <option value={2}>驳回</option>
  127. </Select>
  128. }
  129. },
  130. {
  131. title: '操作',
  132. dataIndex: 'h',
  133. key: 'h',
  134. render: (text, record,index) => {
  135. return (
  136. !props.readOnly ? <span>
  137. <Button
  138. size={'small'}
  139. style={{
  140. marginRight:'10px',
  141. color: '#ffffff',
  142. background: '#f00',
  143. border: 'none',
  144. }}
  145. onClick={()=>{
  146. let _this = this;
  147. if(record.isChange){
  148. this.state.dataSource.splice(index,1)
  149. this.setState({
  150. dataSource: this.state.dataSource
  151. })
  152. }else{
  153. confirm({
  154. title: '提醒',
  155. content: '确定要删除吗?',
  156. onOk() {
  157. _this.delectTaskProgress(record.id)
  158. }
  159. })
  160. }
  161. }}
  162. >
  163. 删除
  164. </Button>
  165. {record.id && !record.isChange && <Button size={'small'} type='primary' onClick={()=>{
  166. this.state.dataSource[index]['isChange'] = true
  167. this.setState({
  168. dataSource: this.state.dataSource
  169. })
  170. }}>修改</Button>}
  171. {record.isChange &&<Button size={'small'} style={{
  172. marginLeft:'10px',
  173. color: '#ffffff',
  174. background: '#4ad028',
  175. border: 'none',
  176. }} onClick={()=>{
  177. if(record.id){
  178. this.changeTaskProgress(record);
  179. }else{
  180. this.createTaskProgress(record);
  181. }
  182. }}>保存</Button> }
  183. </span> : null
  184. )
  185. }
  186. }
  187. ],
  188. dataSource: [],
  189. visible: false,
  190. columnsA: [
  191. {
  192. title: '时间',
  193. dataIndex: 'createTime',
  194. key: 'createTime',
  195. },
  196. {
  197. title: '操作类型',
  198. dataIndex: 'status',
  199. key: 'status',
  200. render: (text, record) => {
  201. return text === 0 ? '新增' : text === 1 ? '删除' : '修改'
  202. }
  203. },
  204. {
  205. title: '专利号',
  206. dataIndex: 'patentName',
  207. key: 'patentName',
  208. }
  209. ],
  210. dataSourceA: [],
  211. progressLogLoading: false,
  212. };
  213. this.changeEvidence = this.changeEvidence.bind(this);
  214. this.createTaskProgress = this.createTaskProgress.bind(this);
  215. this.selectTaskProgressLog = this.selectTaskProgressLog.bind(this);
  216. this.delectTaskProgress = this.delectTaskProgress.bind(this);
  217. this.changeTaskProgress = this.changeTaskProgress.bind(this);
  218. this.loaduserss = this.loaduserss.bind(this);
  219. }
  220. changeEvidence(value,index,key){
  221. this.state.dataSource[index][key] = value;
  222. this.setState({
  223. dataSource: this.state.dataSource
  224. })
  225. }
  226. //新增申报进度
  227. createTaskProgress(record) {
  228. if(!record.patentNo){
  229. message.warning('请填写专利号');
  230. return;
  231. }
  232. if(!record.patentName){
  233. message.warning('请填写专利名称');
  234. return;
  235. }
  236. if(typeof record.status !== 'number'){
  237. message.warning('请选择状态');
  238. return;
  239. }
  240. let _this = this;
  241. let data = Object.assign({},record);
  242. delete data.isChange;
  243. delete data.key;
  244. data.taskId = this.props.taskId;
  245. data.alreadyNumber = 1;
  246. data.type = 1;//0软著 1专利
  247. $.ajax({
  248. method: 'post',
  249. dataType: 'json',
  250. crossDomain: false,
  251. url: globalConfig.context + '/api/admin/orderProject/createTaskProgress',
  252. data: data,
  253. success: function (data) {
  254. if (data.error.length) {
  255. if (data.error && data.error.length) {
  256. message.warning(data.error[0].message)
  257. }
  258. }else{
  259. message.success('添加成功');
  260. delete record.isChange;
  261. delete record.key;
  262. _this.props.refresh && _this.props.refresh();
  263. _this.loaduserss();
  264. }
  265. }.bind(this),
  266. }).always(
  267. function () {
  268. this.setState({
  269. loading: false,
  270. })
  271. }.bind(this)
  272. )
  273. }
  274. //申报进度日志
  275. selectTaskProgressLog() {
  276. this.setState({
  277. loading: true,
  278. })
  279. $.ajax({
  280. method: 'get',
  281. dataType: 'json',
  282. crossDomain: false,
  283. url: globalConfig.context + '/api/admin/orderProject/selectTaskProgressLog',
  284. data: {
  285. tid: this.props.taskId,
  286. },
  287. success: function (data) {
  288. let theArr = []
  289. if (data.error.length || data.data.list === '') {
  290. if (data.error && data.error.length) {
  291. message.warning(data.error[0].message)
  292. }
  293. } else {
  294. for (let i = 0; i < data.data.length; i++) {
  295. let thisdata = data.data[i];
  296. thisdata.key = i;
  297. theArr.push(thisdata)
  298. }
  299. }
  300. this.setState({
  301. dataSourceA: theArr,
  302. })
  303. }.bind(this),
  304. }).always(
  305. function () {
  306. this.setState({
  307. loading: false,
  308. })
  309. }.bind(this)
  310. )
  311. }
  312. //修改申报进度
  313. changeTaskProgress(record) {
  314. if(!record.patentNo){
  315. message.warning('请填写专利号');
  316. return;
  317. }
  318. if(!record.patentName){
  319. message.warning('请填写专利名称');
  320. return;
  321. }
  322. if(typeof record.status !== 'number'){
  323. message.warning('请选择状态');
  324. return;
  325. }
  326. let _this = this;
  327. let data = Object.assign({},record);
  328. delete data.isChange;
  329. delete data.key;
  330. data.taskId = this.props.taskId;
  331. data.alreadyNumber = 1;
  332. data.type = 1;//0软著 1专利
  333. for(let i in data){
  334. if(!data[i]){
  335. delete data[i]
  336. }
  337. }
  338. $.ajax({
  339. method: 'post',
  340. dataType: 'json',
  341. crossDomain: false,
  342. url: globalConfig.context + '/api/admin/orderProject/updateTaskProgress',
  343. data: data,
  344. success: function (data) {
  345. if (data.error.length) {
  346. if (data.error && data.error.length) {
  347. message.warning(data.error[0].message)
  348. }
  349. }else{
  350. message.success('修改成功');
  351. delete record.isChange;
  352. delete record.key;
  353. _this.props.refresh && _this.props.refresh();
  354. _this.loaduserss();
  355. }
  356. }.bind(this),
  357. }).always(
  358. function () {
  359. this.setState({
  360. loading: false,
  361. })
  362. }.bind(this)
  363. )
  364. }
  365. // 删除申报进度
  366. delectTaskProgress(id) {
  367. this.setState({
  368. loading: true,
  369. })
  370. let _this = this;
  371. $.ajax({
  372. method: 'post',
  373. dataType: 'json',
  374. crossDomain: false,
  375. url: globalConfig.context + '/api/admin/orderProject/delectTaskProgress',
  376. data: {
  377. id
  378. },
  379. success: function (data) {
  380. if (data.error.length) {
  381. if (data.error && data.error.length) {
  382. message.warning(data.error[0].message)
  383. }
  384. }else{
  385. message.success('删除成功');
  386. _this.loaduserss();
  387. _this.props.refresh && this.props.refresh();
  388. }
  389. }.bind(this),
  390. }).always(
  391. function () {
  392. this.setState({
  393. loading: false,
  394. })
  395. }.bind(this)
  396. )
  397. }
  398. //查看下证信息
  399. loaduserss() {
  400. $.ajax({
  401. method: 'get',
  402. dataType: 'json',
  403. crossDomain: false,
  404. url: globalConfig.context + '/api/admin/orderProject/selectTaskProgress',
  405. data: {
  406. tid: this.props.taskId,
  407. },
  408. success: function (data) {
  409. let thisData = []
  410. if (!thisData) {
  411. if (data.error && data.error.length) {
  412. message.warning(data.error[0].message)
  413. }
  414. } else {
  415. this.setState({
  416. dataSource: data.data,
  417. })
  418. }
  419. }.bind(this),
  420. }).always(
  421. function () {
  422. this.setState({
  423. loading: false,
  424. })
  425. }.bind(this)
  426. )
  427. }
  428. componentDidMount() {
  429. this.loaduserss();
  430. }
  431. render() {
  432. return (
  433. <div>
  434. <div style={{
  435. display:'flex',
  436. alignItems:'center',
  437. paddingLeft: '3%',
  438. paddingRight: '10%',
  439. color: '#000',
  440. fontWeight: 400,
  441. }}>
  442. <div style={{paddingRight:'10px'}}>派单项目数:{this.props.commodityQuantity}</div>
  443. <div style={{paddingRight:'10px'}}>受理数:{this.props.acceptCount}</div>
  444. <div style={{paddingRight:'10px'}}>下证数(即授权数):{this.props.authorizeCount}</div>
  445. <div>驳回数:{this.props. rejectCount}</div>
  446. <div style={{display:'flex',alignItems:'center',marginLeft:'auto'}}>
  447. {!this.props.readOnly ? <Button
  448. type="primary"
  449. style={{ marginRight: '15px' }}
  450. onClick={()=>{
  451. let arr = this.state.dataSource.filter((v)=>v.isChange)
  452. if(arr.length > 0){
  453. message.warning('已存在未保存项,请先保存!')
  454. return;
  455. }
  456. this.state.dataSource.push({
  457. key: this.state.dataSource.length+1,
  458. isChange: true,
  459. })
  460. this.setState({
  461. dataSource: this.state.dataSource
  462. })
  463. }}
  464. >
  465. 增加专利信息
  466. </Button> : null}
  467. <Button
  468. type="primary"
  469. onClick={()=>{
  470. this.selectTaskProgressLog();
  471. this.setState({
  472. visible: true
  473. })
  474. }}
  475. >
  476. 操作日志
  477. </Button>
  478. </div>
  479. </div>
  480. <div style={{
  481. paddingTop:'10px'
  482. }}>
  483. <Spin spinning={this.state.progressLogLoading}>
  484. <Table
  485. columns={this.state.columns}
  486. scroll={{ x: 'max-content', y: 0 }}
  487. dataSource={this.state.dataSource}
  488. pagination={false}
  489. bordered
  490. size={'small'}
  491. />
  492. </Spin>
  493. </div>
  494. {this.state.visible ? <Modal
  495. width="800px"
  496. visible={this.state.visible}
  497. onCancel={()=>{
  498. this.setState({
  499. visible: false
  500. })
  501. }}
  502. title="操作日志"
  503. footer=""
  504. className="admin-desc-content"
  505. >
  506. <div className="patent-table patent-table-center">
  507. <Spin spinning={this.state.loading}>
  508. <Table
  509. columns={this.state.columnsA}
  510. dataSource={this.state.dataSourceA}
  511. pagination={false}
  512. bordered
  513. size="small"
  514. />
  515. </Spin>
  516. </div>
  517. </Modal> : null}
  518. </div>
  519. )
  520. }
  521. }
  522. export default PatentSchedule;