billing.jsx 62 KB

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