billing.jsx 58 KB

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