billing.jsx 65 KB

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