billing.jsx 58 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642
  1. import React from 'react';
  2. import ReactDom from 'react-dom';
  3. import ajax from 'jquery/src/ajax/xhr.js';
  4. import $ from 'jquery/src/ajax';
  5. import { Form,Radio, Icon, Button, Input, Select, Spin, Table, Switch, message, DatePicker, Checkbox ,Modal, Upload ,Popconfirm,Cascader,Tabs} from 'antd';
  6. import NewService from "./addService.jsx";
  7. import moment from 'moment';
  8. import '../userMangagement.less';
  9. import {projectProgress,specially,province,invoiceStatus,approval,approvalA} from '../../../dataDic.js';
  10. import {areaSelect, getProvince} from '@/NewDicProvinceList';
  11. import {getApprovedState,getApprovalA,getprovince,getProcessStatus,getLiquidationStatus,getNewOrderStatus,beforeUploadFile,getProvinceA,getInvoiceStatus,splitUrl} from '../../../tools.js';
  12. const PicturesWall = React.createClass({
  13. getInitialState() {
  14. return {
  15. previewVisible: false,
  16. previewImage: '',
  17. fileList: this.props.pictureUrl,
  18. }
  19. },
  20. getDefaultProps(){
  21. return{
  22. changeClick:this.modifyChange
  23. }
  24. },
  25. handleCancel() {
  26. this.setState({ previewVisible: false })
  27. },
  28. handlePreview(file) {
  29. this.setState({
  30. previewImage: file.url || file.thumbUrl,
  31. previewVisible: true,
  32. });
  33. },
  34. handleChange(info) {
  35. let fileList = info.fileList;
  36. this.setState({ fileList });
  37. this.props.fileList(fileList);
  38. },
  39. componentWillReceiveProps(nextProps) {
  40. this.state.fileList = nextProps.pictureUrl;
  41. },
  42. render() {
  43. const { previewVisible, previewImage, fileList } = this.state;
  44. const uploadButton = (
  45. <div>
  46. <Icon type="plus" />
  47. <div className="ant-upload-text">点击上传</div>
  48. </div>
  49. );
  50. return (
  51. <div style={{display:"inline-block"}}>
  52. <Upload
  53. beforeUpload={beforeUploadFile}
  54. action={globalConfig.context + "/api/admin/orderInvoice/uploadOrderInvoiceFile"}
  55. data={{ 'sign': '' }}
  56. listType="picture-card"
  57. fileList={fileList}
  58. onPreview={this.handlePreview}
  59. onChange={this.handleChange} >
  60. {fileList.length >= 18 ? null : uploadButton}
  61. </Upload>
  62. <Modal maskClosable={false} visible={previewVisible} footer={null} onCancel={this.handleCancel}>
  63. <img alt="example" style={{ width: '100%' }} src={previewImage} />
  64. </Modal>
  65. </div>
  66. );
  67. }
  68. });
  69. const MyService=Form.create()(React.createClass({
  70. loadData(pageNo) {
  71. this.state.data = [];
  72. this.setState({
  73. loading: true
  74. });
  75. $.ajax({
  76. method: "get",
  77. dataType: "json",
  78. crossDomain: false,
  79. url: globalConfig.context + '/api/admin/newOrder/orderNewList',
  80. data: {
  81. pageNo: pageNo || 1,
  82. pageSize: this.state.pagination.pageSize,
  83. specially:0,
  84. name:this.state.customerName,
  85. orderNo:this.state.searchOrderNo,
  86. depId: this.state.departmenttSearch,
  87. starTime: this.state.releaseDate[0],
  88. endTime: this.state.releaseDate[1],
  89. },
  90. success: function (data) {
  91. let theArr = [];
  92. if (!data.data) {
  93. if (data.error && data.error.length) {
  94. message.warning(data.error[0].message);
  95. };
  96. } else {
  97. for (let i = 0; i < data.data.list.length; i++) {
  98. let thisdata = data.data.list[i];
  99. theArr.push({
  100. key: i,
  101. id: thisdata.id,
  102. orderNo: thisdata.orderNo,//订单编号
  103. totalAmount:thisdata.totalAmount,//签单金额
  104. processStatus:thisdata.processStatus,//流程状态
  105. liquidationStatus:thisdata.liquidationStatus,//结算状态
  106. approval:thisdata.approval,//特批状态
  107. signDate:thisdata.signDate,//签单时间
  108. userName:thisdata.userName,//客户名称
  109. salesmanName:thisdata.salesmanName,//营销员名称
  110. financeName:thisdata.financeName,//财务名称
  111. createDate:thisdata.createDate,//下单时间
  112. orderStatus:thisdata.orderStatus,//订单状态
  113. depName:thisdata.depName,//部门名称
  114. contractNo:thisdata.contractNo
  115. });
  116. };
  117. this.state.pagination.current = data.data.pageNo;
  118. this.state.pagination.total = data.data.totalCount;
  119. };
  120. if(!data.data.list.length){
  121. this.state.pagination.current=0
  122. this.state.pagination.total=0
  123. }
  124. this.setState({
  125. pageNo:pageNo,
  126. dataSource: theArr,
  127. pagination: this.state.pagination,
  128. selectedRowKeys:[],
  129. });
  130. }.bind(this),
  131. }).always(function () {
  132. this.setState({
  133. loading: false
  134. });
  135. }.bind(this));
  136. },
  137. getInitialState() {
  138. return {
  139. datauser:{},
  140. orgCodeUrl:[],
  141. selectedRowKeys: [],
  142. releaseDate: [],
  143. departmentArr: [],
  144. signBillState:false,
  145. signBillVisible:false,
  146. selectedRows: [],
  147. recordData:[],
  148. flag:false,
  149. searchMore: true,
  150. loading: false,
  151. intentOrder:true,
  152. formalOrder:true,
  153. pagination: {
  154. defaultCurrent: 1,
  155. defaultPageSize: 10,
  156. showQuickJumper: true,
  157. pageSize: 10,
  158. onChange: function (page) {
  159. this.loadData(page);
  160. }.bind(this),
  161. showTotal: function (total) {
  162. return '共' + total + '条数据';
  163. }
  164. },
  165. columns: [
  166. {
  167. title: '订单编号',
  168. dataIndex: 'orderNo',
  169. key: 'orderNo'
  170. },{
  171. title: '客户名称',
  172. dataIndex: 'userName',
  173. key: 'userName',
  174. render:(text)=>{
  175. return (text&&text.length>9?text.substr(0,9)+'...':text)
  176. }
  177. }, {
  178. title: '下单时间',
  179. dataIndex: 'createDate',
  180. key: 'createTime'
  181. },{
  182. title: '合同签订时间',
  183. dataIndex: 'signDate',
  184. key: 'signDate'
  185. }, {
  186. title: '流程状态',
  187. dataIndex: 'processStatus',
  188. key: 'processStatus',
  189. render:text=>{return getProcessStatus(text)}
  190. }, {
  191. title: '签单金额(万元)',
  192. dataIndex: 'totalAmount',
  193. key: 'totalAmount'
  194. },{
  195. title: '结算状态',
  196. dataIndex: 'liquidationStatus',
  197. key: 'liquidationStatus',
  198. render:text=>{return getLiquidationStatus(text)}
  199. }, {
  200. title: '是否特批',
  201. dataIndex: 'approval',
  202. key: 'approval',
  203. render:text=>{return getApprovedState(text)}
  204. },{
  205. title: '订单状态',
  206. dataIndex: 'orderStatus',
  207. key: 'orderStatus',
  208. render:text=>{return getNewOrderStatus(text)}
  209. },{
  210. title: '财务负责人',
  211. dataIndex: 'financeName',
  212. key: 'financeName'
  213. }, {
  214. title: '操作',
  215. dataIndex: 'abc',
  216. key: 'abc',
  217. render: (text, record, index) => {
  218. return <div>
  219. {<Button type="primary" style={{marginRight:'10px',color:'#ffffff',border:'none',marginTop:'5px',background:'red'}} onClick={(e) =>{ e.stopPropagation(), this.visit(record,index)}}>开票</Button>}
  220. {<Button type="primary" onClick={(e) =>{ e.stopPropagation(), this.inRecord(record,index)}} style={{border:'none',background:'orangered',marginRight:'10px'}}>开票记录</Button>}
  221. {record.liquidationStatus==2?<Popconfirm title="是否结项?" onConfirm={(e)=>{this.delectRow(record)}} okText="是" cancelText="否">
  222. <Button type="primary" style={{marginRight:'10px',color:'#ffffff',border:'none'}} onClick={(e) =>{ e.stopPropagation()}}>结项</Button>
  223. </Popconfirm>:''}
  224. </div>
  225. }
  226. }
  227. ],
  228. columnsDate:[
  229. {
  230. title: '编号',
  231. dataIndex: 'id',
  232. key: 'id'
  233. },{
  234. title: '订单编号',
  235. dataIndex: 'orderno',
  236. key: 'orderno'
  237. },{
  238. title: '开票金额(万元)',
  239. dataIndex: 'amount',
  240. key: 'amount'
  241. },{
  242. title: '申请时间',
  243. dataIndex: 'createTime',
  244. key: 'createTime'
  245. },{
  246. title: '开票状态',
  247. dataIndex: 'status',
  248. key: 'status',
  249. render:(text,record)=>{
  250. return <div>
  251. {record.status === 3?<Button type="danger" onClick={(e) =>{ e.stopPropagation(),this.reject(record)}}>被拒,查看原因</Button>
  252. :getInvoiceStatus(text)}
  253. {record.status === 3?<Button type="primary" onClick={(e) =>{ e.stopPropagation(),this.recompose(record)}} style={{marginLeft:"10px"}}>修改开票</Button>
  254. :''}
  255. </div>
  256. }
  257. }
  258. ],
  259. dataSource: [],
  260. };
  261. },
  262. invoiceData(record) {
  263. let theorgCodeUrl = [];
  264. if (this.state.orgCodeUrl.length) {
  265. let picArr = [];
  266. this.state.orgCodeUrl.map(function (item) {
  267. if ( item.response && item.response.data && item.response.data.length ){
  268. picArr.push(item.response.data);
  269. }
  270. });
  271. theorgCodeUrl = picArr.join(",");
  272. };
  273. let api = '',
  274. api1 = '',
  275. method = '',
  276. fdata = {
  277. orderNo:this.state.orderNo3,
  278. type:this.state.type,
  279. status:this.state.status,
  280. approval:this.state.ordapproval,
  281. remarks:this.state.remarks,
  282. invoiceType:this.state.invoiceType,
  283. unitName:this.state.unitName,
  284. taxNumber:this.state.taxNumber,
  285. amount:this.state.amount,
  286. banks:this.state.banks,
  287. content:this.state.content,
  288. unitAddress:this.state.unitAddress,
  289. invoiceRemarks:this.state.invoiceRemarks,
  290. unitMobile:this.state.unitMobile,
  291. voucherUrl:theorgCodeUrl.length?theorgCodeUrl:'',
  292. post:this.state.post,
  293. addressee:this.state.addressee,
  294. addresseeMobile:this.state.addresseeMobile,
  295. addresseeProvince:this.state.post === 0?this.state.ProvinceCity[0]:'',
  296. addresseeCity:this.state.post === 0?this.state.ProvinceCity[1]:'',
  297. addresseeArea:this.state.post === 0?this.state.ProvinceCity[2]:'',
  298. recipientAddress:this.state.recipientAddress},
  299. sumData = {},
  300. sumData1 = {};
  301. switch (this.state.status) {
  302. case 0:api = '/api/admin/orderInvoice/createOrderInvoice';
  303. sumData = fdata;
  304. method = 'post'
  305. break;
  306. case 1:api = '/api/admin/orderInvoice/createOrderInvoice';
  307. api1 = '/api/admin/orderInvoice/updateOrderInvoice'
  308. sumData = fdata;
  309. sumData1 = fdata;
  310. sumData1.id = this.state.id;
  311. method = 'post'
  312. break;
  313. case 3:api = '/api/admin/orderInvoice/selectByIdOrderInvoice'
  314. sumData.id = record.id;
  315. method='get';
  316. break;
  317. default: api=''
  318. break;
  319. }
  320. if (this.state.status === 1 || this.state.status === 0) {
  321. if (typeof(this.state.type) !== 'number') {
  322. message.warning('省内/外不能为空')
  323. return
  324. }
  325. if (typeof(this.state.invoiceType) !== 'number') {
  326. message.warning('发票类型不能为空')
  327. return
  328. }
  329. if(typeof theorgCodeUrl !== 'string'){
  330. message.warning('未上传图片');
  331. return
  332. }
  333. if (!this.state.unitName) {
  334. message.warning('单位名称不能为空')
  335. return
  336. }
  337. if (!this.state.taxNumber) {
  338. message.warning('税号不能为空')
  339. return
  340. }
  341. if (!this.state.amount) {
  342. message.warning('金额不能为空')
  343. return
  344. }
  345. if (!this.state.banks) {
  346. message.warning('开户行不能为空')
  347. return
  348. }
  349. if (!this.state.content) {
  350. message.warning('开票内容及说明不能为空')
  351. return
  352. }
  353. if (!this.state.unitAddress) {
  354. message.warning('单位地址不能为空')
  355. return
  356. }
  357. if (!this.state.unitMobile) {
  358. message.warning('单位电话不能为空')
  359. return
  360. }
  361. }
  362. this.setState({
  363. loading: true
  364. });
  365. $.ajax({
  366. method: method,
  367. dataType: "json",
  368. crossDomain: false,
  369. url: globalConfig.context + (this.state.flag?api1:api),
  370. data: this.state.flag?sumData1:sumData,
  371. success:function (data) {
  372. if(this.state.status === 3 && typeof data.data === 'object'){
  373. let thisdata = data.data;
  374. let ProvinceCityArr = [];
  375. let ProvinceS = thisdata.addresseeProvince; //省
  376. let citys = thisdata.addresseeCity;//市
  377. let Areas = thisdata.addresseeArea;//区
  378. ProvinceCityArr.push(ProvinceS, citys, Areas);
  379. this.setState({
  380. orderNo:thisdata.orderNo,
  381. type:thisdata.type,
  382. status:thisdata.status,
  383. ordapproval:thisdata.approval,
  384. remarks:thisdata.remarks,
  385. invoiceType:thisdata.invoiceType,
  386. unitName:thisdata.unitName,
  387. taxNumber:thisdata.taxNumber,
  388. amount:thisdata.amount,
  389. banks:thisdata.banks,
  390. content:thisdata.content,
  391. unitAddress:thisdata.unitAddress,
  392. invoiceRemarks:thisdata.invoiceRemarks,
  393. unitMobile:thisdata.unitMobile,
  394. post:thisdata.post,
  395. addressee:thisdata.addressee,
  396. addresseeMobile:thisdata.addresseeMobile,
  397. addresseeProvince:thisdata.addresseeProvince,
  398. addresseeCity:thisdata.addresseeCity,
  399. addresseeArea:thisdata.addresseeArea,
  400. ProvinceCity: ProvinceCityArr[0]!=null?ProvinceCityArr:undefined,//省市区
  401. recipientAddress:thisdata.recipientAddress,
  402. orgCodeUrl: thisdata.voucherUrl ? splitUrl(thisdata.voucherUrl, ',', globalConfig.avatarHost + '/upload') : [],
  403. })
  404. }
  405. }.bind(this)
  406. }).done(function(data) {
  407. this.setState({
  408. loading: false
  409. });
  410. if(!data.error.length) {
  411. if(this.state.status === 1){
  412. message.success('提交成功!');
  413. this.inRecordData()
  414. this.visitCancels()
  415. }else if(this.state.status === 0){
  416. message.success('保存成功!');
  417. this.visitCancels()
  418. }else if(this.state.status === 3){
  419. this.setState({
  420. flag:true
  421. })
  422. }
  423. } else {
  424. message.warning(data.error[0].message);
  425. }
  426. }.bind(this));
  427. },
  428. areset(){
  429. this.setState({
  430. remarks:'',
  431. type:undefined,
  432. orgCodeUrl:'',
  433. invoiceType:undefined,
  434. unitName:'',
  435. taxNumber:'',
  436. unitName:'',
  437. amount:'',
  438. banks:'',
  439. content:'',
  440. unitAddress:'',
  441. invoiceRemarks:'',
  442. unitMobile:'',
  443. post:undefined,
  444. addressee:'',
  445. addresseeMobile:'',
  446. addresseeProvince:'',
  447. addresseeCity:'',
  448. addresseeArea:'',
  449. recipientAddress:'',
  450. ordapproval:undefined,
  451. ProvinceCity:[]
  452. })
  453. },
  454. recompose(record){
  455. console.log(record)
  456. this.setState({
  457. avisible:true,
  458. orderNo3:record.orderno,
  459. id:record.id
  460. })
  461. this.setState({
  462. status:3,
  463. cvisible:true,
  464. flag:false
  465. },()=>{
  466. this.invoiceData(record)
  467. })
  468. },
  469. submitApp(){
  470. if (this.state.status === 3) {
  471. this.setState({
  472. flag:true
  473. })
  474. }
  475. this.setState({
  476. status:1
  477. },()=>{
  478. this.invoiceData()
  479. })
  480. },
  481. saveApp(){
  482. this.setState({
  483. status:0
  484. },()=>{
  485. this.invoiceData()
  486. })
  487. },
  488. reject(record){
  489. this.setState({
  490. visibleR:true,
  491. reason:record.rejectReason
  492. });
  493. },
  494. rejectCancels(){
  495. this.setState({
  496. visibleR:false
  497. })
  498. },
  499. //开票
  500. visit(record,index){
  501. this.areset()
  502. this.setState({
  503. contractNo:this.state.dataSource[index].contractNo,
  504. orderNo3:record.orderNo,
  505. avisible:true,
  506. flag:false,
  507. type:0,
  508. invoiceType:0,
  509. unitName:this.state.dataSource[index].userName,
  510. ordapproval:0,
  511. post:1
  512. })
  513. },
  514. visitCancels(){
  515. this.setState({
  516. avisible:false,
  517. cvisible:false
  518. })
  519. },
  520. //查看开票历史记录详情
  521. dtableRowClick(record,index){
  522. this.setState({
  523. dvisible:true
  524. })
  525. this.setState({
  526. loading: true
  527. });
  528. $.ajax({
  529. method: "get",
  530. dataType: "json",
  531. crossDomain: false,
  532. url: globalConfig.context + '/api/admin/orderInvoice/selectByIdOrderInvoice',
  533. data:{
  534. id:record.id
  535. },
  536. success:function (data) {
  537. let thisdata = data.data;
  538. this.setState({
  539. contractNo:thisdata.contractNo,
  540. orderNo:thisdata.orderNo,
  541. ordapproval:thisdata.approval,
  542. type:thisdata.type,
  543. status:thisdata.status,
  544. remarks:thisdata.remarks,
  545. invoiceType:thisdata.invoiceType,
  546. unitName:thisdata.unitName,
  547. taxNumber:thisdata.taxNumber,
  548. amount:thisdata.amount,
  549. banks:thisdata.banks,
  550. content:thisdata.content,
  551. unitAddress:thisdata.unitAddress,
  552. invoiceRemarks:thisdata.invoiceRemarks,
  553. unitMobile:thisdata.unitMobile,
  554. post:thisdata.post,
  555. addressee:thisdata.addressee,
  556. addresseeMobile:thisdata.addresseeMobile,
  557. addresseeProvince:thisdata.addresseeProvince,
  558. addresseeCity:thisdata.addresseeCity,
  559. addresseeArea:thisdata.addresseeArea,
  560. recipientAddress:thisdata.recipientAddress,
  561. orgCodeUrl: thisdata.voucherUrl ? splitUrl(thisdata.voucherUrl, ',', globalConfig.avatarHost + '/upload') : [],
  562. })
  563. }.bind(this)
  564. }).done(function(data) {
  565. this.setState({
  566. loading: false
  567. });
  568. }.bind(this));
  569. },
  570. //关闭开票历史记录详情
  571. dvisitCancels(){
  572. this.setState({
  573. dvisible:false
  574. })
  575. },
  576. inRecordData(){
  577. this.setState({
  578. loading: true
  579. });
  580. $.ajax({
  581. method: "get",
  582. dataType: "json",
  583. crossDomain: false,
  584. url: globalConfig.context + '/api/admin/orderInvoice/salesmanOrderInvoiceList',
  585. data: {
  586. orderNo:this.state.orderNo2
  587. },
  588. success: function (data) {
  589. let theArr = [];
  590. let sum = 0;
  591. if (!data.data) {
  592. if (data.error && data.error.length) {
  593. message.warning(data.error[0].message);
  594. };
  595. } else {
  596. for (let i = 0; i < data.data.list.length; i++) {
  597. let thisdata = data.data.list[i];
  598. sum += parseFloat(thisdata.amount);
  599. theArr.push({
  600. id: thisdata.id,
  601. orderno: thisdata.orderno,//订单编号
  602. amount:thisdata.amount,//签单金额
  603. createTime:thisdata.createTime,//流程状态
  604. status:thisdata.status,//结算状态
  605. rejectReason:thisdata.rejectReason
  606. });
  607. };
  608. };
  609. this.setState({
  610. recordData:theArr,
  611. sum:sum.toFixed(4)
  612. })
  613. }.bind(this),
  614. }).done(function(data) {
  615. this.setState({
  616. loading: false
  617. });
  618. }.bind(this));
  619. },
  620. inRecord(record,index){
  621. this.setState({
  622. bvisible:true,
  623. orderNo2:record.orderNo,
  624. },() => {this.inRecordData()})
  625. },
  626. inRecordCanl(){
  627. this.setState({
  628. bvisible:false
  629. })
  630. },
  631. //结项
  632. delectRow(record) {
  633. this.setState({
  634. loading: true
  635. });
  636. $.ajax({
  637. method: "get",
  638. dataType: "json",
  639. crossDomain: false,
  640. url: globalConfig.context + "/api/admin/newOrder/OrderOver",
  641. data: {
  642. orderNo:record.orderNo
  643. }
  644. }).done(function (data) {
  645. if (!data.error.length) {
  646. message.success('该项目已成功结项!');
  647. this.loadData();
  648. } else {
  649. message.warning(data.error[0].message);
  650. };
  651. this.setState({
  652. loading: false,
  653. });
  654. }.bind(this));
  655. },
  656. //是否退款
  657. refundCancel(record){
  658. this.refund(record,0)
  659. },
  660. refundOk(record){
  661. this.refund(record,1)
  662. },
  663. refund(record,index){
  664. this.setState({
  665. signBillVisible:false,
  666. selectedRowKeys: [],
  667. loading: true,
  668. userDetaile:false
  669. });
  670. $.ajax({
  671. method: "get",
  672. dataType: "json",
  673. crossDomain: false,
  674. url: globalConfig.context + '/api/admin/order/confirmRefund',
  675. data: {
  676. orderNo:record.orderNo,
  677. confirm:index
  678. }
  679. }).done(function (data) {
  680. if (!data.error.length) {
  681. message.success('操作成功!');
  682. this.setState({
  683. loading: false,
  684. showDesc:false
  685. });
  686. }
  687. this.loadData(this.state.pageNo);
  688. }.bind(this));
  689. },
  690. //受理订单
  691. admissibleOrderOk(e){
  692. this.admissibleOrder(e,true)
  693. },
  694. admissibleOrderCancel(e){
  695. this.admissibleOrder(e,false)
  696. },
  697. admissibleOrder(record,index) {
  698. this.setState({
  699. signBillVisible:false,
  700. selectedRowKeys: [],
  701. loading: true,
  702. userDetaile:false
  703. });
  704. $.ajax({
  705. method: "POST",
  706. dataType: "json",
  707. crossDomain: false,
  708. url: globalConfig.context + '/api/admin/order/confirmIntention',
  709. data: {
  710. orderNo:record.orderNo,
  711. confirm:index
  712. }
  713. }).done(function (data) {
  714. if (!data.error.length) {
  715. message.success('操作成功!');
  716. this.setState({
  717. loading: false,
  718. showDesc:false
  719. });
  720. } else {
  721. message.warning(data.error[0].message);
  722. this.setState({
  723. showDesc:true
  724. })
  725. };
  726. this.loadData(this.state.pageNo);
  727. }.bind(this));
  728. },
  729. //取消订单
  730. cancelOrder(e){
  731. this.operation(e,3)
  732. },
  733. //作废订单
  734. scrapOrder(e){
  735. this.operation(e,2)
  736. },
  737. //锁定订单
  738. lockOrder(e){
  739. this.operation(e,0)
  740. },
  741. //解锁订单
  742. unlockOrder(e){
  743. this.operation(e,1)
  744. },
  745. //签单
  746. signBill(ids){
  747. this.setState({
  748. uid:ids,
  749. signBillVisible:true
  750. })
  751. },
  752. componentWillMount() {
  753. this.departmentList();
  754. this.loadData();
  755. let data=localStorage.getItem('newData');
  756. if(data!='{}'&&data){
  757. var newData = JSON.parse(data);
  758. this.tableRowClick(newData);
  759. };
  760. },
  761. tableRowClick(record, index) {
  762. this.state.userDetaile=true;
  763. this.state.datauser = record;
  764. this.setState({
  765. signBillVisible:false,
  766. signBillState:true,
  767. showDesc: true
  768. });
  769. localStorage.setItem('newData','{}');
  770. },
  771. //列表各种骚操作
  772. operation(record,index) {
  773. this.setState({
  774. selectedRowKeys: [],
  775. loading: true,
  776. showDesc:false
  777. });
  778. $.ajax({
  779. method: "get",
  780. dataType: "json",
  781. crossDomain: false,
  782. url: globalConfig.context + '/api/admin/order/lockOrRevokeOrder',
  783. data: {
  784. orderNo:record.orderNo,
  785. operatorType:index
  786. }
  787. }).done(function (data) {
  788. if (!data.error.length) {
  789. message.success('操作成功!');
  790. this.setState({
  791. loading: false,
  792. });
  793. } else {
  794. message.warning(data.error[0].message);
  795. };
  796. this.loadData(this.state.pageNo);
  797. }.bind(this));
  798. },
  799. addClick() {
  800. this.state.userDetaile=false;
  801. this.setState({
  802. signBillVisible:false,
  803. showDesc: true
  804. });
  805. },
  806. closeDesc(e, s) {
  807. this.state.userDetaile=false;
  808. this.state.signBillVisible=false;
  809. this.state.showDesc = e;
  810. if (s) {
  811. this.loadData(this.state.pageNo);
  812. };
  813. },
  814. searchSwitch() {
  815. this.setState({
  816. signBillVisible:false,
  817. searchMore: !this.state.searchMore
  818. });
  819. },
  820. getOrgCodeUrl(e) {
  821. this.setState({ orgCodeUrl: e });
  822. },
  823. search() {
  824. this.setState({
  825. signBillVisible:false
  826. })
  827. this.loadData();
  828. },
  829. reset() {
  830. this.setState({
  831. signBillVisible:false
  832. })
  833. this.state.orderNo='';
  834. this.state.customerName='';
  835. this.state.departmenttSearch=undefined;
  836. this.state.releaseDate[0] = undefined;
  837. this.state.releaseDate[1] = undefined;
  838. this.state.projectProgress = undefined;
  839. this.state.approval= undefined;
  840. this.state.formalOrder=true;
  841. this.state.intentOrder=true;
  842. this.loadData();
  843. },
  844. //部门
  845. departmentList() {
  846. this.setState({
  847. loading: true
  848. });
  849. $.ajax({
  850. method: "get",
  851. dataType: "json",
  852. crossDomain: false,
  853. url: globalConfig.context + "/api/admin/organization/selectSuperId",
  854. data: {
  855. },
  856. success: function(data) {
  857. let thedata = data.data;
  858. let theArr = [];
  859. if(!thedata) {
  860. if(data.error && data.error.length) {
  861. message.warning(data.error[0].message);
  862. };
  863. thedata = {};
  864. } else {
  865. thedata.map(function(item, index) {
  866. theArr.push({
  867. key: index,
  868. name: item.name,
  869. id: item.id,
  870. })
  871. })
  872. }
  873. this.setState({
  874. departmentArr: theArr,
  875. })
  876. }.bind(this),
  877. }).always(function() {
  878. this.setState({
  879. loading: false
  880. });
  881. }.bind(this));
  882. },
  883. render() {
  884. const FormItem = Form.Item;
  885. const formItemLayout = {
  886. labelCol: { span: 8 },
  887. wrapperCol: { span: 14 },
  888. };
  889. const RadioGroup = Radio.Group;
  890. const rowSelection = {
  891. selectedRowKeys: this.state.selectedRowKeys,
  892. onChange: (selectedRowKeys, selectedRows) => {
  893. this.setState({
  894. selectedRows: selectedRows.slice(-1),
  895. selectedRowKeys: selectedRowKeys.slice(-1)
  896. });
  897. },
  898. onSelectAll: (selected, selectedRows, changeRows) => {
  899. this.setState({
  900. selectedRowKeys:[]
  901. })
  902. },
  903. };
  904. const TabPane = Tabs.TabPane;
  905. const hasSelected = this.state.selectedRowKeys.length > 0;
  906. const { RangePicker } = DatePicker;
  907. let departmentArr = this.state.departmentArr || [];
  908. return (
  909. <div className="user-content" >
  910. <div className="content-title">
  911. <span style={{fontSize:'16px'}}>开单与签单</span>
  912. <div className="user-search">
  913. <Input placeholder="客户名称" style={{width:'150px'}}
  914. value={this.state.customerName}
  915. onChange={(e) => { this.setState({ customerName: e.target.value }); }} />
  916. <Input placeholder="订单编号" style={{width:'150px'}}
  917. value={this.state.searchOrderNo}
  918. onChange={(e) => { this.setState({ searchOrderNo: e.target.value }); }} />
  919. <span style={{marginRight:"10px"}}>下单时间 :</span>
  920. <RangePicker
  921. value={[this.state.releaseDate[0] ? moment(this.state.releaseDate[0]) : null,
  922. this.state.releaseDate[1] ? moment(this.state.releaseDate[1]) : null]}
  923. onChange={(data, dataString) => { this.setState({ releaseDate: dataString }); }} />
  924. <Button type="primary" onClick={this.search} style={{marginLeft:'10px'}}>搜索<Icon type="search" /></Button>
  925. <Button onClick={this.reset}>重置 <Icon type="reload" /></Button>
  926. <Button type="primary" className="addButton" onClick={this.addClick} >开单<Icon type="plus" /></Button>
  927. </div>
  928. <div className="patent-table">
  929. <Spin spinning={this.state.loading}>
  930. <Table columns={this.state.columns}
  931. dataSource={this.state.dataSource}
  932. rowSelection={rowSelection}
  933. pagination={this.state.pagination}
  934. onRowClick={this.tableRowClick} />
  935. </Spin>
  936. </div>
  937. <NewService
  938. uid={this.state.uid}
  939. signBillVisible={this.state.signBillVisible}
  940. signBillState={this.state.signBillState}
  941. operation={this.operation}
  942. admissibleOrder={this.admissibleOrder}
  943. userDetaile={this.state.userDetaile}
  944. datauser={this.state.datauser}
  945. showDesc={this.state.showDesc}
  946. closeDesc={this.closeDesc} />
  947. <Modal
  948. className="admin-desc-content"
  949. footer=''
  950. title = '开具发票申请单'
  951. width='900px'
  952. visible={this.state.avisible}
  953. onOk={this.visitOks}
  954. onCancel={this.visitCancels}
  955. style={{zIndex:999}}
  956. >
  957. <Form layout="horizontal" id="demand-form" style={{paddingBottom:'40px'}} >
  958. <Spin spinning={this.state.loading}>
  959. <div className="clearfix">
  960. <div className="clearfix">
  961. <FormItem className="half-item"
  962. {...formItemLayout}
  963. label="合同编号" >
  964. <span>{this.state.contractNo}</span>
  965. </FormItem>
  966. <FormItem className="half-item"
  967. {...formItemLayout}
  968. label="备注" >
  969. {<Input placeholder="填写申请发票原因" value={this.state.remarks}
  970. onChange={(e)=>{this.setState({remarks:e.target.value})}} style={{width:'240px'}} />}
  971. </FormItem>
  972. </div>
  973. <div className="clearfix">
  974. <FormItem className="half-item"
  975. {...formItemLayout}
  976. label="省内/外:" >
  977. <RadioGroup value={this.state.type}
  978. onChange={(e)=>{this.setState({type:e.target.value})}}
  979. >
  980. <Radio value={0}>省内</Radio>
  981. <Radio value={1}>省外</Radio>
  982. </RadioGroup>
  983. </FormItem>
  984. <FormItem className="half-item"
  985. {...formItemLayout}
  986. label="特批:" >
  987. <RadioGroup value={this.state.ordapproval}
  988. onChange={(e)=>{this.setState({ordapproval:e.target.value})}}
  989. >
  990. <Radio value={0}>否</Radio>
  991. <Radio value={1}>是</Radio>
  992. </RadioGroup>
  993. </FormItem>
  994. </div>
  995. <hr style={{border:'1px dashed #aaa', width:"90%",margin:'auto'}}/>
  996. <div style={{marginTop:'13px',marginLeft:'16px'}}>
  997. <span style={{fontSize:'14px'}}>发票内容</span>
  998. </div>
  999. <div className="clearfix">
  1000. <FormItem className="half-item"
  1001. {...formItemLayout}
  1002. label={
  1003. <span>
  1004. <strong style={{ color: '#f00' }}>*</strong>发票类型
  1005. </span>
  1006. } >
  1007. <RadioGroup style={{width:'160%'}}
  1008. onChange={(e)=>{this.setState({invoiceType:e.target.value})}}
  1009. value={this.state.invoiceType}
  1010. >
  1011. <Radio value={0}>增值税专用发票</Radio>
  1012. <Radio value={1}>增值税普通发票</Radio>
  1013. <Radio value={2}>其他</Radio>
  1014. </RadioGroup>
  1015. </FormItem>
  1016. </div>
  1017. <div className="clearfix">
  1018. <FormItem className="half-item"
  1019. {...formItemLayout}
  1020. label={
  1021. <span>
  1022. <strong style={{ color: '#f00' }}>*</strong>单位名称
  1023. </span>
  1024. } >
  1025. {<Input placeholder="请输入单位名称" value={this.state.unitName}
  1026. onChange={(e)=>{this.setState({unitName:e.target.value})}} style={{width:'240px'}} />}
  1027. </FormItem>
  1028. <FormItem className="half-item"
  1029. {...formItemLayout}
  1030. label={
  1031. <span>
  1032. <strong style={{ color: '#f00' }}>*</strong>税号
  1033. </span>
  1034. } >
  1035. {<Input placeholder="请输入税号" value={this.state.taxNumber}
  1036. onChange={(e)=>{this.setState({taxNumber:e.target.value})}} style={{width:'240px'}} />}
  1037. </FormItem>
  1038. <FormItem className="half-item"
  1039. {...formItemLayout}
  1040. label={
  1041. <span>
  1042. <strong style={{ color: '#f00' }}>*</strong>开票金额
  1043. </span>
  1044. } >
  1045. {<Input placeholder="请输入开票金额" value={this.state.amount}
  1046. onChange={(e)=>{this.setState({amount:e.target.value})}} style={{width:'240px'}} />}
  1047. </FormItem>
  1048. <FormItem className="half-item"
  1049. {...formItemLayout}
  1050. label={
  1051. <span>
  1052. <strong style={{ color: '#f00' }}>*</strong>开户行银行账号
  1053. </span>
  1054. } >
  1055. {<Input placeholder="请输入开户行银行账号" value={this.state.banks}
  1056. onChange={(e)=>{this.setState({banks:e.target.value})}} style={{width:'240px'}} />}
  1057. </FormItem>
  1058. <FormItem className="half-item"
  1059. {...formItemLayout}
  1060. label={
  1061. <span>
  1062. <strong style={{ color: '#f00' }}>*</strong>开票内容及说明
  1063. </span>
  1064. } >
  1065. {<Input placeholder="请输入开票内容及说明" value={this.state.content}
  1066. onChange={(e)=>{this.setState({content:e.target.value})}} style={{width:'240px'}} />}
  1067. </FormItem>
  1068. <FormItem className="half-item"
  1069. {...formItemLayout}
  1070. label={
  1071. <span>
  1072. <strong style={{ color: '#f00' }}>*</strong>单位地址
  1073. </span>
  1074. } >
  1075. {<Input placeholder="请输入单位地址" value={this.state.unitAddress}
  1076. onChange={(e)=>{this.setState({unitAddress:e.target.value})}} style={{width:'240px'}} />}
  1077. </FormItem>
  1078. <FormItem className="half-item"
  1079. {...formItemLayout}
  1080. label="备注" >
  1081. {<Input placeholder="请备注开票公司名称" value={this.state.invoiceRemarks}
  1082. onChange={(e)=>{this.setState({invoiceRemarks:e.target.value})}} style={{width:'240px'}} />}
  1083. </FormItem>
  1084. <FormItem className="half-item"
  1085. {...formItemLayout}
  1086. label={
  1087. <span>
  1088. <strong style={{ color: '#f00' }}>*</strong>单位电话
  1089. </span>
  1090. } >
  1091. {<Input placeholder="请输入单位电话" value={this.state.unitMobile}
  1092. onChange={(e)=>{this.setState({unitMobile:e.target.value})}} style={{width:'240px'}} />}
  1093. </FormItem>
  1094. </div>
  1095. <div className="clearfix">
  1096. <FormItem
  1097. labelCol={{ span: 4 }}
  1098. wrapperCol={{ span: 18 }}
  1099. label={
  1100. <span>
  1101. <strong style={{ color: '#f00' }}>*</strong>上传附件
  1102. </span>
  1103. }
  1104. >
  1105. <PicturesWall
  1106. fileList={this.getOrgCodeUrl}
  1107. pictureUrl={this.state.orgCodeUrl} />
  1108. <span style={{paddingTop:'10px',paddingLeft:'10px',color:'red',fontSize:'14px'}}>注:请上传带"公司盖章"的开票申请纸质凭证</span>
  1109. <p>图片建议:要清晰。</p>
  1110. </FormItem>
  1111. </div>
  1112. <hr style={{border:'1px dashed #aaa', width:"90%",margin:'auto'}}/>
  1113. <div className="clearfix" style={{marginTop:'10px'}}>
  1114. <FormItem className="half-item"
  1115. {...formItemLayout}
  1116. label="发票是否邮寄:" >
  1117. <RadioGroup value={this.state.post}
  1118. onChange={(e)=>{this.setState({post:e.target.value})}}
  1119. >
  1120. <Radio value={0}>是</Radio>
  1121. <Radio value={1}>否</Radio>
  1122. </RadioGroup>
  1123. </FormItem>
  1124. </div>
  1125. {this.state.post === 0?<div className="clearfix">
  1126. <FormItem className="half-item"
  1127. {...formItemLayout}
  1128. label="收信人姓名" >
  1129. {<Input placeholder="请输入收信人姓名" value={this.state.addressee}
  1130. onChange={(e)=>{this.setState({addressee:e.target.value})}} style={{width:'240px'}} />}
  1131. </FormItem>
  1132. <FormItem className="half-item"
  1133. {...formItemLayout}
  1134. label="电话" >
  1135. {<Input placeholder="请输入电话" value={this.state.addresseeMobile}
  1136. onChange={(e)=>{this.setState({addresseeMobile:e.target.value})}} style={{width:'240px'}} />}
  1137. </FormItem>
  1138. </div>:''}
  1139. {this.state.post === 0?<div className="clearfix">
  1140. <FormItem className="half-item"
  1141. {...formItemLayout}
  1142. label="省-市-区"
  1143. >
  1144. <Cascader options={areaSelect()} value={this.state.ProvinceCity} placeholder="选择城市" style={{width:'95%'}}
  1145. onChange={(e,pre) => { this.setState({ ProvinceCity: e }) }} />
  1146. </FormItem>
  1147. </div>:''}
  1148. {this.state.post === 0?<div className="clearfix">
  1149. <FormItem className="half-item"
  1150. {...formItemLayout}
  1151. label="详细地址"
  1152. >
  1153. {<Input placeholder="请输入详细地址" value={this.state.recipientAddress}
  1154. onChange={(e)=>{this.setState({recipientAddress:e.target.value})}} style={{width:'240px'}} />}
  1155. </FormItem>
  1156. </div>:''}
  1157. </div>
  1158. <Button className="cancel" type="primary" style={{marginRight:"50px",float:'right'}} size="large" onClick={this.submitApp}>提交申请</Button>
  1159. {/*<Button className="cancel" type="primary" style={{marginRight:"50px",float:'right',background:'deepskyblue',border:'none'}} size="large" onClick={this.saveApp}>保存</Button>*/}
  1160. </Spin>
  1161. </Form>
  1162. </Modal>
  1163. <Modal visible={this.state.bvisible}
  1164. footer=''
  1165. title='开票历史记录'
  1166. className="admin-desc-content"
  1167. width='900px'
  1168. onCancel={this.inRecordCanl}
  1169. style={{zIndex:5}}>
  1170. <Spin spinning={this.state.loading}>
  1171. <div className="patent-table">
  1172. <Table columns={this.state.columnsDate}
  1173. onRowClick={this.dtableRowClick}
  1174. dataSource={this.state.recordData}
  1175. pagination={false}/>
  1176. <div className="clearfix" style={{marginTop:'20px'}}>
  1177. <FormItem className="half-item"
  1178. {...formItemLayout}
  1179. label={
  1180. <span style={{fontSize:'14px'}}>
  1181. 开票总计
  1182. </span>
  1183. } >
  1184. <span>{this.state.sum+'(万元)'}</span>
  1185. </FormItem>
  1186. </div>
  1187. </div>
  1188. </Spin>
  1189. </Modal>
  1190. <Modal visible={this.state.visibleR}
  1191. className="admin-desc-content"
  1192. footer=''
  1193. title = '拒绝理由'
  1194. width='400px'
  1195. onCancel={this.rejectCancels}>
  1196. <Input.TextArea disabled={true}
  1197. rows={4}
  1198. value={this.state.reason}
  1199. style={{color:'black'}}>
  1200. </Input.TextArea>
  1201. </Modal>
  1202. <Modal
  1203. className="admin-desc-content"
  1204. footer=''
  1205. title = '开具发票申请单'
  1206. width='900px'
  1207. visible={this.state.cvisible}
  1208. onOk={this.visitOks}
  1209. onCancel={this.visitCancels}
  1210. style={{zIndex:999}}
  1211. >
  1212. <Form layout="horizontal" id="demand-form" style={{paddingBottom:'40px'}} >
  1213. <Spin spinning={this.state.loading}>
  1214. <div className="clearfix">
  1215. <div className="clearfix">
  1216. <FormItem className="half-item"
  1217. {...formItemLayout}
  1218. label="合同编号" >
  1219. <span>{this.state.contractNo}</span>
  1220. </FormItem>
  1221. <FormItem className="half-item"
  1222. {...formItemLayout}
  1223. label="备注" >
  1224. {<Input placeholder="填写申请发票原因" value={this.state.remarks}
  1225. onChange={(e)=>{this.setState({remarks:e.target.value})}} style={{width:'240px'}} />}
  1226. </FormItem>
  1227. </div>
  1228. <div className="clearfix">
  1229. <FormItem className="half-item"
  1230. {...formItemLayout}
  1231. label="省内/外:" >
  1232. <RadioGroup value={this.state.type}
  1233. onChange={(e)=>{this.setState({type:e.target.value})}}
  1234. >
  1235. <Radio value={0}>省内</Radio>
  1236. <Radio value={1}>省外</Radio>
  1237. </RadioGroup>
  1238. </FormItem>
  1239. <FormItem className="half-item"
  1240. {...formItemLayout}
  1241. label="特批:" >
  1242. <RadioGroup value={this.state.ordapproval}
  1243. onChange={(e)=>{this.setState({ordapproval:e.target.value})}}
  1244. >
  1245. <Radio value={0}>否</Radio>
  1246. <Radio value={1}>是</Radio>
  1247. </RadioGroup>
  1248. </FormItem>
  1249. </div>
  1250. <hr style={{border:'1px dashed #aaa', width:"90%",margin:'auto'}}/>
  1251. <div style={{marginTop:'13px',marginLeft:'16px'}}>
  1252. <span style={{fontSize:'14px'}}>发票内容</span>
  1253. </div>
  1254. <div className="clearfix">
  1255. <FormItem className="half-item"
  1256. {...formItemLayout}
  1257. label={
  1258. <span>
  1259. <strong style={{ color: '#f00' }}>*</strong>发票类型
  1260. </span>
  1261. } >
  1262. <RadioGroup style={{width:'160%'}}
  1263. onChange={(e)=>{this.setState({invoiceType:e.target.value})}}
  1264. value={this.state.invoiceType}
  1265. >
  1266. <Radio value={0}>增值税专用发票</Radio>
  1267. <Radio value={1}>增值税普通发票</Radio>
  1268. <Radio value={2}>其他</Radio>
  1269. </RadioGroup>
  1270. </FormItem>
  1271. </div>
  1272. <div className="clearfix">
  1273. <FormItem className="half-item"
  1274. {...formItemLayout}
  1275. label={
  1276. <span>
  1277. <strong style={{ color: '#f00' }}>*</strong>单位名称
  1278. </span>
  1279. } >
  1280. {<Input placeholder="请输入单位名称" value={this.state.unitName}
  1281. onChange={(e)=>{this.setState({unitName:e.target.value})}} style={{width:'240px'}} />}
  1282. </FormItem>
  1283. <FormItem className="half-item"
  1284. {...formItemLayout}
  1285. label={
  1286. <span>
  1287. <strong style={{ color: '#f00' }}>*</strong>税号
  1288. </span>
  1289. } >
  1290. {<Input placeholder="请输入税号" value={this.state.taxNumber}
  1291. onChange={(e)=>{this.setState({taxNumber:e.target.value})}} style={{width:'240px'}} />}
  1292. </FormItem>
  1293. <FormItem className="half-item"
  1294. {...formItemLayout}
  1295. label={
  1296. <span>
  1297. <strong style={{ color: '#f00' }}>*</strong>开票金额
  1298. </span>
  1299. } >
  1300. {<Input placeholder="请输入开票金额" value={this.state.amount}
  1301. onChange={(e)=>{this.setState({amount:e.target.value})}} style={{width:'240px'}} />}
  1302. </FormItem>
  1303. <FormItem className="half-item"
  1304. {...formItemLayout}
  1305. label={
  1306. <span>
  1307. <strong style={{ color: '#f00' }}>*</strong>开户行银行账号
  1308. </span>
  1309. } >
  1310. {<Input placeholder="请输入开户行银行账号" value={this.state.banks}
  1311. onChange={(e)=>{this.setState({banks:e.target.value})}} style={{width:'240px'}} />}
  1312. </FormItem>
  1313. <FormItem className="half-item"
  1314. {...formItemLayout}
  1315. label={
  1316. <span>
  1317. <strong style={{ color: '#f00' }}>*</strong>开票内容及说明
  1318. </span>
  1319. } >
  1320. {<Input placeholder="请输入开票内容及说明" value={this.state.content}
  1321. onChange={(e)=>{this.setState({content:e.target.value})}} style={{width:'240px'}} />}
  1322. </FormItem>
  1323. <FormItem className="half-item"
  1324. {...formItemLayout}
  1325. label={
  1326. <span>
  1327. <strong style={{ color: '#f00' }}>*</strong>单位地址
  1328. </span>
  1329. } >
  1330. {<Input placeholder="请输入单位地址" value={this.state.unitAddress}
  1331. onChange={(e)=>{this.setState({unitAddress:e.target.value})}} style={{width:'240px'}} />}
  1332. </FormItem>
  1333. <FormItem className="half-item"
  1334. {...formItemLayout}
  1335. label="备注" >
  1336. {<Input placeholder="请备注开票公司名称" value={this.state.invoiceRemarks}
  1337. onChange={(e)=>{this.setState({invoiceRemarks:e.target.value})}} style={{width:'240px'}} />}
  1338. </FormItem>
  1339. <FormItem className="half-item"
  1340. {...formItemLayout}
  1341. label={
  1342. <span>
  1343. <strong style={{ color: '#f00' }}>*</strong>单位电话
  1344. </span>
  1345. } >
  1346. {<Input placeholder="请输入单位电话" value={this.state.unitMobile}
  1347. onChange={(e)=>{this.setState({unitMobile:e.target.value})}} style={{width:'240px'}} />}
  1348. </FormItem>
  1349. </div>
  1350. <div className="clearfix">
  1351. <FormItem
  1352. labelCol={{ span: 4 }}
  1353. wrapperCol={{ span: 18 }}
  1354. label={
  1355. <span>
  1356. <strong style={{ color: '#f00' }}>*</strong>上传附件
  1357. </span>
  1358. }
  1359. >
  1360. <PicturesWall
  1361. fileList={this.getOrgCodeUrl}
  1362. pictureUrl={this.state.orgCodeUrl} />
  1363. <span style={{paddingTop:'10px',paddingLeft:'10px',color:'red',fontSize:'14px'}}>注:请上传带"公司盖章"的开票申请纸质凭证</span>
  1364. <p>图片建议:要清晰。</p>
  1365. </FormItem>
  1366. </div>
  1367. <hr style={{border:'1px dashed #aaa', width:"90%",margin:'auto'}}/>
  1368. <div className="clearfix" style={{marginTop:'10px'}}>
  1369. <FormItem className="half-item"
  1370. {...formItemLayout}
  1371. label="发票是否邮寄:" >
  1372. <RadioGroup value={this.state.post}
  1373. onChange={(e)=>{this.setState({post:e.target.value})}}
  1374. >
  1375. <Radio value={0}>是</Radio>
  1376. <Radio value={1}>否</Radio>
  1377. </RadioGroup>
  1378. </FormItem>
  1379. </div>
  1380. {this.state.post === 0?<div>
  1381. <div className="clearfix">
  1382. <FormItem className="half-item"
  1383. {...formItemLayout}
  1384. label="收信人姓名" >
  1385. {<Input placeholder="请输入收信人姓名" value={this.state.addressee}
  1386. onChange={(e)=>{this.setState({addressee:e.target.value})}} style={{width:'240px'}} />}
  1387. </FormItem>
  1388. <FormItem className="half-item"
  1389. {...formItemLayout}
  1390. label="电话" >
  1391. {<Input placeholder="请输入电话" value={this.state.addresseeMobile}
  1392. onChange={(e)=>{this.setState({addresseeMobile:e.target.value})}} style={{width:'240px'}} />}
  1393. </FormItem>
  1394. </div>
  1395. <div className="clearfix">
  1396. <FormItem className="half-item"
  1397. {...formItemLayout}
  1398. label="省-市-区"
  1399. >
  1400. <Cascader options={areaSelect()} value={this.state.ProvinceCity} placeholder="选择城市" style={{width:'95%'}}
  1401. onChange={(e,pre) => { this.setState({ ProvinceCity: e }) }} />
  1402. </FormItem>
  1403. </div>
  1404. <div className="clearfix">
  1405. <FormItem className="half-item"
  1406. {...formItemLayout}
  1407. label="详细地址"
  1408. >
  1409. {<Input placeholder="请输入详细地址" value={this.state.recipientAddress}
  1410. onChange={(e)=>{this.setState({recipientAddress:e.target.value})}} style={{width:'240px'}} />}
  1411. </FormItem>
  1412. </div>
  1413. </div>:''}
  1414. </div>
  1415. <Button className="cancel" type="primary" style={{marginRight:"50px",float:'right'}} size="large" onClick={this.submitApp}>提交申请</Button>
  1416. {/*<Button className="cancel" type="primary" style={{marginRight:"50px",float:'right',background:'deepskyblue',border:'none'}} size="large" onClick={this.saveApp}>保存</Button>*/}
  1417. </Spin>
  1418. </Form>
  1419. </Modal>
  1420. <Modal
  1421. className="admin-desc-content"
  1422. footer=''
  1423. title = '开具发票申请单'
  1424. width='900px'
  1425. visible={this.state.dvisible}
  1426. onOk={this.visitOks}
  1427. onCancel={this.dvisitCancels}
  1428. >
  1429. <Form layout="horizontal" id="demand-form" style={{paddingBottom:'40px'}} >
  1430. <Spin spinning={this.state.loading}>
  1431. <div className="clearfix">
  1432. <div className="clearfix">
  1433. <FormItem className="half-item"
  1434. {...formItemLayout}
  1435. label="合同编号" >
  1436. <span>{this.state.contractNo}</span>
  1437. </FormItem>
  1438. <FormItem className="half-item"
  1439. {...formItemLayout}
  1440. label="备注" >
  1441. <span>{this.state.remarks}</span>
  1442. </FormItem>
  1443. </div>
  1444. <div className="clearfix">
  1445. <FormItem className="half-item"
  1446. {...formItemLayout}
  1447. label={
  1448. <span>
  1449. <strong style={{ color: '#f00' }}>*</strong>省内/外
  1450. </span>
  1451. } >
  1452. <span>{getProvinceA(this.state.type)}</span>
  1453. </FormItem>
  1454. <FormItem className="half-item"
  1455. {...formItemLayout}
  1456. label={
  1457. <span>
  1458. <strong style={{ color: '#f00' }}>*</strong>特批
  1459. </span>
  1460. } >
  1461. <span>{this.state.ordapproval === 0?'否':'是'}</span>
  1462. </FormItem>
  1463. </div>
  1464. <hr style={{border:'1px dashed #aaa', width:"90%",margin:'auto'}}/>
  1465. <div style={{marginTop:'13px',marginLeft:'16px'}}>
  1466. <span style={{fontSize:'14px'}}>发票内容</span>
  1467. </div>
  1468. <div className="clearfix">
  1469. <FormItem className="half-item"
  1470. {...formItemLayout}
  1471. label={
  1472. <span>
  1473. <strong style={{ color: '#f00' }}>*</strong>发票类型
  1474. </span>
  1475. } >
  1476. <span>{this.state.invoiceType===0?'增值税专用发票':(this.state.invoiceType === 1?'增值税普通发票':'其他')}</span>
  1477. </FormItem>
  1478. </div>
  1479. <div className="clearfix">
  1480. <FormItem className="half-item"
  1481. {...formItemLayout}
  1482. label={
  1483. <span>
  1484. <strong style={{ color: '#f00' }}>*</strong>单位名称
  1485. </span>
  1486. } >
  1487. <span>{this.state.unitName}</span>
  1488. </FormItem>
  1489. <FormItem className="half-item"
  1490. {...formItemLayout}
  1491. label={
  1492. <span>
  1493. <strong style={{ color: '#f00' }}>*</strong>税号
  1494. </span>
  1495. } >
  1496. <span>{this.state.taxNumber}</span>
  1497. </FormItem>
  1498. <FormItem className="half-item"
  1499. {...formItemLayout}
  1500. label={
  1501. <span>
  1502. <strong style={{ color: '#f00' }}>*</strong>开票金额
  1503. </span>
  1504. } >
  1505. <span>{this.state.amount}</span>
  1506. </FormItem>
  1507. <FormItem className="half-item"
  1508. {...formItemLayout}
  1509. label={
  1510. <span>
  1511. <strong style={{ color: '#f00' }}>*</strong>开户行银行账号
  1512. </span>
  1513. } >
  1514. <span>{this.state.banks}</span>
  1515. </FormItem>
  1516. <FormItem className="half-item"
  1517. {...formItemLayout}
  1518. label={
  1519. <span>
  1520. <strong style={{ color: '#f00' }}>*</strong>开票内容及说明
  1521. </span>
  1522. } >
  1523. <span>{this.state.content}</span>
  1524. </FormItem>
  1525. <FormItem className="half-item"
  1526. {...formItemLayout}
  1527. label={
  1528. <span>
  1529. <strong style={{ color: '#f00' }}>*</strong>单位地址
  1530. </span>
  1531. } >
  1532. <span>{this.state.unitAddress}</span>
  1533. </FormItem>
  1534. <FormItem className="half-item"
  1535. {...formItemLayout}
  1536. label="备注" >
  1537. <span>{this.state.invoiceRemarks}</span>
  1538. </FormItem>
  1539. <FormItem className="half-item"
  1540. {...formItemLayout}
  1541. label={
  1542. <span>
  1543. <strong style={{ color: '#f00' }}>*</strong>单位电话
  1544. </span>
  1545. } >
  1546. <span>{this.state.unitMobile}</span>
  1547. </FormItem>
  1548. </div>
  1549. <div className="clearfix">
  1550. <FormItem
  1551. labelCol={{ span: 4 }}
  1552. wrapperCol={{ span: 18 }}
  1553. label={
  1554. <span>
  1555. <strong style={{ color: '#f00' }}>*</strong>附件
  1556. </span>
  1557. }
  1558. >
  1559. <Upload className="demandDetailShow-upload"
  1560. listType="picture-card"
  1561. fileList={this.state.orgCodeUrl}
  1562. onPreview={(file) => {
  1563. this.setState({
  1564. previewImage: file.url || file.thumbUrl,
  1565. previewVisible: true,
  1566. });
  1567. }} >
  1568. </Upload>
  1569. <Modal maskClosable={false} footer={null}
  1570. visible={this.state.previewVisible}
  1571. onCancel={() => { this.setState({ previewVisible: false }) }}>
  1572. <img alt="" style={{ width: '100%' }} src={this.state.previewImage || ''} />
  1573. </Modal>
  1574. </FormItem>
  1575. </div>
  1576. <hr style={{border:'1px dashed #aaa', width:"90%",margin:'auto'}}/>
  1577. <div className="clearfix" style={{marginTop:'10px'}}>
  1578. <FormItem className="half-item"
  1579. {...formItemLayout}
  1580. label="发票是否邮寄:" >
  1581. <span>{this.state.post===0?'是':"否"}</span>
  1582. </FormItem>
  1583. </div>
  1584. {this.state.post === 0?<div>
  1585. <div className="clearfix">
  1586. <FormItem className="half-item"
  1587. {...formItemLayout}
  1588. label="收信人姓名" >
  1589. <span>{this.state.addressee}</span>
  1590. </FormItem>
  1591. <FormItem className="half-item"
  1592. {...formItemLayout}
  1593. label="电话" >
  1594. <span>{this.state.addresseeMobile}</span>
  1595. </FormItem>
  1596. </div>
  1597. <div className="clearfix">
  1598. <FormItem className="half-item"
  1599. {...formItemLayout}
  1600. label="省-市-区"
  1601. >
  1602. <span>{getprovince(this.state.addresseeProvince)}/{getprovince(this.state.addresseeCity)}/{getprovince(this.state.addresseeArea)}</span>
  1603. </FormItem>
  1604. </div>
  1605. <div className="clearfix">
  1606. <FormItem className="half-item"
  1607. {...formItemLayout}
  1608. label="详细地址"
  1609. >
  1610. <span>{this.state.recipientAddress}</span>
  1611. </FormItem>
  1612. </div>
  1613. </div>:''}
  1614. </div>
  1615. </Spin>
  1616. </Form>
  1617. </Modal>
  1618. </div >
  1619. </div>
  1620. );
  1621. }
  1622. }));
  1623. export default MyService;