applyPaymentModal.js 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333
  1. import React,{Component} from 'react';
  2. import {Button, Form, Input, message, Modal, Radio, Spin, InputNumber} from "antd";
  3. import $ from "jquery";
  4. const layout = {
  5. labelCol: {
  6. span: 8,
  7. },
  8. wrapperCol: {
  9. span: 16,
  10. },
  11. };
  12. const formItemLayout = {
  13. labelCol: { span: 8 },
  14. wrapperCol: { span: 14 },
  15. };
  16. class ApplyPaymentModal extends Component{
  17. constructor(props) {
  18. super(props);
  19. this.state={
  20. loading: false,
  21. paymentStatus: 0,
  22. }
  23. }
  24. //申请付款
  25. handleSubmit(e){
  26. e.preventDefault();
  27. this.props.form.validateFieldsAndScroll((err, values) => {
  28. if (err) {
  29. return;
  30. }
  31. this.setState({
  32. loading: true
  33. })
  34. values.tid = this.props.tid;
  35. if(this.props.previewPayInfor.nodeId){ //催款
  36. values.nodeId = this.props.previewPayInfor.nodeId;
  37. values.chooseType = 1; //支付选择 0第三方 1催款 2官费
  38. values.tpcId = this.props.previewPayInfor.cid; //第三方机构id
  39. }else{
  40. values.chooseType = 0 //支付选择 0第三方 1催款 2官费
  41. values.tpcId = this.props.previewPayInfor.id; //第三方机构id
  42. }
  43. if(this.props.type === 2){
  44. values.chooseType = 2; //支付类型 0第三方 1催款 2官费
  45. }
  46. values.companyName = values.companyName.split('-')[0];
  47. $.ajax({
  48. method: 'POST',
  49. dataType: 'json',
  50. crossDomain: false,
  51. url: globalConfig.context + '/api/admin/company/addOrderPayment',
  52. data: values,
  53. }).done(
  54. function (data) {
  55. this.setState({
  56. loading: false,
  57. })
  58. if (!data.error.length) {
  59. this.props.changeVisible();
  60. this.props.onRefresh();
  61. message.success('申请成功!')
  62. } else {
  63. message.warning(data.error[0].message)
  64. }
  65. }.bind(this)
  66. )
  67. })
  68. }
  69. render() {
  70. const { getFieldDecorator,setFieldsValue } = this.props.form;
  71. const { previewPayInfor } = this.props;
  72. if(!previewPayInfor){
  73. return;
  74. }
  75. return(
  76. <Modal
  77. maskClosable={false}
  78. footer={null}
  79. visible={this.props.visible}
  80. onCancel={() => {
  81. this.props.changeVisible();
  82. }}
  83. >
  84. <Spin spinning={this.state.loading}>
  85. <div>
  86. <div>
  87. {
  88. this.props.type === 2 ? "支付供应商官费" : "支付供应商费用"
  89. }
  90. </div>
  91. <Form
  92. {...layout}
  93. name="basic"
  94. initialValues={{
  95. remember: true,
  96. }}
  97. onSubmit={(e)=>{
  98. this.handleSubmit(e)
  99. }}
  100. >
  101. <Form.Item
  102. {...formItemLayout}
  103. style={{
  104. display:'flex'
  105. }}
  106. label="付款单位/个人:"
  107. >
  108. {getFieldDecorator('companyName', {
  109. initialValue: previewPayInfor.companyName,
  110. rules: [{
  111. required: true,
  112. message: '请输入付款单位/个人!',
  113. }],
  114. })(
  115. <Input
  116. style={{ width: '200px' }}
  117. placeholder="请输入付款单位/个人"
  118. />
  119. )}
  120. </Form.Item>
  121. {/* 0正常 1专利 2软著 3审计 */}
  122. {this.props.projectType === 1 && this.props.patentType === 1 ?<Form.Item
  123. {...formItemLayout}
  124. style={{
  125. display:'flex'
  126. }}
  127. label="支付状态:"
  128. >
  129. {getFieldDecorator('paymentStatus', {
  130. constructor: this.state.paymentStatus,
  131. rules: [{ required: false, message: '请选择支付状态!' }],
  132. })(
  133. <Radio.Group onChange={(e)=>{
  134. this.setState({
  135. paymentStatus: e.target.value
  136. })
  137. if(e.target.value === 1){
  138. setFieldsValue({
  139. quantity:parseInt(previewPayInfor.quantity),
  140. applicationAmount:(previewPayInfor.partyAmount ?
  141. ((parseFloat(previewPayInfor.totalAmount) * 1000000) - (parseFloat(previewPayInfor.partyAmount) * 1000000)) / 1000000 :
  142. parseFloat(previewPayInfor.totalAmount))/2
  143. });
  144. } else if(e.target.value === 2){
  145. setFieldsValue({
  146. quantity:parseInt(previewPayInfor.quantity),
  147. applicationAmount:(previewPayInfor.partyAmount ?
  148. ((parseFloat(previewPayInfor.totalAmount) * 1000000) - (parseFloat(previewPayInfor.partyAmount) * 1000000)) / 1000000 :
  149. parseFloat(previewPayInfor.totalAmount))
  150. });
  151. }
  152. }}>
  153. <Radio value={0}>自定义</Radio>
  154. <Radio value={1}>半款</Radio>
  155. <Radio value={2}>全款</Radio>
  156. </Radio.Group>
  157. )}
  158. </Form.Item> : <div/>}
  159. {this.props.type !== 2 ? <Form.Item
  160. {...formItemLayout}
  161. style={{
  162. display:'flex'
  163. }}
  164. label="单价(万元):"
  165. >
  166. {/*可以查看单价 正常 审计 专利买卖
  167. 软著 专利申请 打星号 */}
  168. {
  169. isNaN(parseFloat(previewPayInfor.unitPrice)) ? previewPayInfor.unitPrice :
  170. getFieldDecorator('unitPrice', {
  171. initialValue:previewPayInfor.unitPrice,
  172. rules: [{ required: true, message: '请输入单价!' }],
  173. })(
  174. <Input disabled={true} style={{ width: '200px' }} placeholder="请输入单价" type={'number'}/>
  175. )
  176. }
  177. </Form.Item> : <div/>}
  178. {/*{*/}
  179. {/* this.props.type === 2 ?*/}
  180. {/* <Form.Item*/}
  181. {/* {...formItemLayout}*/}
  182. {/* style={{*/}
  183. {/* display:'flex'*/}
  184. {/* }}*/}
  185. {/* label="官费(万元):"*/}
  186. {/* >*/}
  187. {/* /!*costReduction 费减 0否 1 是*!/*/}
  188. {/* /!*reductionAmount 费减金额*!/*/}
  189. {/* /!*officialUnitPrice 官费单价*!/*/}
  190. {/* <div>*/}
  191. {/* {*/}
  192. {/* previewPayInfor.costReduction === 1 ?*/}
  193. {/* (isNaN(parseFloat(previewPayInfor.reductionAmount)) ? previewPayInfor.reductionAmount : parseFloat(previewPayInfor.reductionAmount)):*/}
  194. {/* (isNaN(parseFloat(previewPayInfor.officialUnitPrice)) ? previewPayInfor.officialUnitPrice : parseFloat(previewPayInfor.officialUnitPrice))*/}
  195. {/* }*/}
  196. {/* </div>*/}
  197. {/* </Form.Item> : <div/>*/}
  198. {/*}*/}
  199. <Form.Item
  200. {...formItemLayout}
  201. style={{
  202. display:'flex'
  203. }}
  204. label="数量(个):"
  205. >
  206. {previewPayInfor.quantity}
  207. </Form.Item>
  208. <Form.Item
  209. {...formItemLayout}
  210. style={{
  211. display:'flex'
  212. }}
  213. label="总价(万元):"
  214. >
  215. <div>
  216. {
  217. previewPayInfor.totalAmount
  218. }
  219. </div>
  220. </Form.Item>
  221. <Form.Item
  222. {...formItemLayout}
  223. style={{
  224. display:'flex'
  225. }}
  226. label="本次申请支付数量:"
  227. >
  228. {getFieldDecorator('quantity', {
  229. initialValue: previewPayInfor.quantity,
  230. rules: [{ required: false, message: '请输入本次申请支付数量!' }],
  231. })(
  232. <InputNumber
  233. disabled={previewPayInfor.quantity <= 1 || this.state.paymentStatus !== 0}
  234. style={{ width: '200px' }}
  235. precision={0}
  236. placeholder="请输入本次申请支付数量"
  237. onChange={(e)=>{
  238. //0正常 1专利 2软著 3审计
  239. //软著 专利申请不需要计算,因为单价未知
  240. if(!(this.props.projectType === 2 || (this.props.projectType === 1 && this.props.patentType === 0))){
  241. //官费
  242. if(this.props.type === 2){
  243. this.props.form.setFieldsValue({
  244. applicationAmount: (previewPayInfor.costReduction === 1 ?
  245. previewPayInfor.reductionAmount :
  246. previewPayInfor.officialUnitPrice) * 1000000 * e / 1000000,
  247. });
  248. }else {
  249. let num = previewPayInfor.unitPrice * 1000000 * e / 1000000;
  250. this.props.form.setFieldsValue({
  251. applicationAmount: num,
  252. });
  253. }
  254. }
  255. }}
  256. />
  257. )}
  258. </Form.Item>
  259. {/* 0正常 1专利 2软著 3审计 */}
  260. {this.props.projectType !== 2 && !(this.props.projectType === 1 && this.props.patentType === 0) ? <Form.Item
  261. {...formItemLayout}
  262. style={{
  263. display:'flex'
  264. }}
  265. label="本次申请支付金额(万元):"
  266. >
  267. {getFieldDecorator('applicationAmount', {
  268. initialValue:this.props.type === 2 ?(
  269. ((previewPayInfor.costReduction === 1 ? previewPayInfor.reductionAmount : previewPayInfor.officialUnitPrice) * 1000000 * parseInt(previewPayInfor.quantity)) / 1000000
  270. ): (
  271. !isNaN(parseFloat(previewPayInfor.totalAmount)) && !isNaN(parseFloat(previewPayInfor.partyAmount))?
  272. (
  273. this.state.paymentStatus === 1 ?
  274. (previewPayInfor.partyAmount ?
  275. ((parseFloat(previewPayInfor.totalAmount) * 1000000) - (parseFloat(previewPayInfor.partyAmount) * 1000000)) / 1000000 :
  276. parseFloat(previewPayInfor.totalAmount)) / 2 :
  277. previewPayInfor.partyAmount ?
  278. ((parseFloat(previewPayInfor.totalAmount) * 1000000) - (parseFloat(previewPayInfor.partyAmount) * 1000000)) / 1000000 :
  279. parseFloat(previewPayInfor.totalAmount)
  280. ) : null
  281. ),
  282. rules: [{ required: true, message: '请输入本次申请支付金额!' }],
  283. })(
  284. <InputNumber
  285. min={0}
  286. disabled={this.state.paymentStatus !== 0}
  287. style={{ width: '200px' }}
  288. placeholder="请输入本次申请支付金额"/>
  289. )}
  290. </Form.Item> : <div/>}
  291. <Form.Item
  292. {...formItemLayout}
  293. style={{
  294. display:'flex'
  295. }}
  296. label="备注:"
  297. >
  298. {getFieldDecorator('remarks', {
  299. rules: [{ required: true, message: '请输入备注!' }],
  300. })(
  301. <Input style={{ width: '200px' }} placeholder="请输入备注" type={'textarea'}/>
  302. )}
  303. </Form.Item>
  304. <Form.Item>
  305. <div style={{
  306. display: 'flex',
  307. justifyContent: 'center',
  308. }}>
  309. <Button type="primary" htmlType="submit" style={{width:'60%',height:'40px'}}>
  310. {this.props.type === 2 ? "确定申请付官费" : "确定申请支付"}
  311. </Button>
  312. </div>
  313. </Form.Item>
  314. </Form>
  315. </div>
  316. </Spin>
  317. </Modal>
  318. )
  319. }
  320. }
  321. const WrappedNormalLoginForm = Form.create()(ApplyPaymentModal);
  322. export default WrappedNormalLoginForm