patentSchedule.jsx 20 KB

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