billing.jsx 58 KB

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