billing.jsx 64 KB

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