newSupplier.js 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521
  1. import React,{Component} from 'react';
  2. import {AutoComplete, Button, Form, Input, message, Modal, Radio, Select, Spin} from "antd";
  3. import {
  4. getMaterialStatus,
  5. getUrgentStatus,
  6. } from '@/tools'
  7. import $ from "jquery";
  8. const { Option } = Select
  9. const { TextArea } = Input
  10. const formItemLayout = {
  11. labelCol: { span: 8 },
  12. wrapperCol: { span: 14 },
  13. }
  14. class NewSupplier extends Component{
  15. constructor(props) {
  16. super(props);
  17. this.state={
  18. thirdCompanyName: props.thirdCompanyName && props.thirdCompanyName.split('-')[0],
  19. thirdUnitPrice: props.thirdUnitPrice,
  20. thirdQuantity: props.thirdQuantity,
  21. thirdRemarks: props.thirdRemarks,
  22. thirdMaterial: props.thirdMaterial,
  23. thirdUrgent: props.thirdUrgent,
  24. patentType: props.patentType,
  25. customerArr: [],
  26. loading: false,
  27. officialCost: "", //是否有官费
  28. costReduction: "", //是否有费减
  29. }
  30. }
  31. componentDidMount() {
  32. if(this.props.ThirdId){
  33. this.supervisor(this.state.thirdCompanyName)
  34. }
  35. }
  36. //服务值改变时请求供应商名称
  37. httpChange(e) {
  38. if (e.length >= 1) {
  39. this.supervisor(e)
  40. }
  41. this.props.otherOperations && this.props.otherOperations({
  42. thirdMaterial: this.state.thirdMaterial,
  43. thirdUrgent: this.state.thirdUrgent,
  44. customerArr: this.state.customerArr,
  45. thirdCompanyName: e,
  46. });
  47. this.setState({
  48. thirdCompanyName: e,
  49. })
  50. }
  51. //加载(自动补全)
  52. supervisor(e) {
  53. $.ajax({
  54. method: 'get',
  55. dataType: 'json',
  56. crossDomain: false,
  57. url: globalConfig.context + '/api/admin/company/selectVague',
  58. data: {
  59. name: e,
  60. type: this.props.projectType === 2 ? 0 :
  61. (this.props.projectType === 1 && this.props.patentType === 0) ? 2 : 1 //this.props.projectType 0正常 1专利 2软著 3审计 this.props.patentType 0:专利申请/变更/转让 1:专利买卖
  62. },
  63. success: function (data) {
  64. let thedata = data.data
  65. if (!thedata) {
  66. if (data.error && data.error.length) {
  67. message.warning(data.error[0].message)
  68. }
  69. thedata = {}
  70. }
  71. this.setState({
  72. customerArr: thedata,
  73. })
  74. this.props.otherOperations && this.props.otherOperations({
  75. thirdMaterial: this.state.thirdMaterial,
  76. thirdUrgent: this.state.thirdUrgent,
  77. customerArr: thedata,
  78. thirdCompanyName: this.state.thirdCompanyName,
  79. });
  80. }.bind(this),
  81. }).always(
  82. function () {
  83. this.setState({
  84. loading: false,
  85. })
  86. }.bind(this)
  87. )
  88. }
  89. // 第三方信息自动计算总金额
  90. calculatedAmount() {
  91. let currentTotalPrice
  92. currentTotalPrice = this.state.thirdUnitPrice * this.state.thirdQuantity
  93. currentTotalPrice = currentTotalPrice.toFixed(4)
  94. this.setState({
  95. currentTotalPrice: currentTotalPrice,
  96. })
  97. }
  98. // 保存供应商信息
  99. handleCancelq() {
  100. let api
  101. if (this.props.ThirdId) {
  102. //修改
  103. api = '/api/admin/company/updateCompany'
  104. } else {
  105. //新增
  106. api = '/api/admin/company/addCompany'
  107. }
  108. if(!this.state.thirdCompanyName){
  109. message.warning('请输入供应商名称')
  110. return;
  111. }
  112. if(!this.state.thirdUnitPrice && this.props.projectType !== 2 && !(this.props.projectType === 1 && this.props.patentType ===0)){
  113. message.warning('请输入正确的单价')
  114. return;
  115. }
  116. if(!this.state.thirdQuantity){
  117. message.warning('请输入数量')
  118. return;
  119. }
  120. let customerId = 0;
  121. let isHave =this.state.customerArr.some((value)=>{
  122. if(value.companyName === this.state.thirdCompanyName){
  123. customerId = value.id
  124. return true;
  125. }
  126. });
  127. //软著 必须要使用查询出来第三方名称和对应id
  128. if(!isHave && this.props.projectType === 2){ //projectType 0正常 1专利 2软著 3审计
  129. message.warning('请输入正确的供应商名称')
  130. return;
  131. }
  132. //专利 必须要使用查询出来第三方名称和对应id
  133. if(!isHave && this.props.projectType === 1 && this.props.patentType === 0){ //projectType 0正常 1专利 2软著 3审计 patentType 0:专利申请/变更/转让 1:专利买卖
  134. message.warning('请输入正确的供应商名称')
  135. return;
  136. }
  137. let data = {
  138. id: this.props.ThirdId, //id
  139. tid: this.props.tid, //订单编号
  140. companyName: this.state.thirdCompanyName, //第三方名称
  141. quantity: this.state.thirdQuantity, //数量
  142. remarks: this.state.thirdRemarks, //备注
  143. unitPrice: this.state.thirdUnitPrice, //单价
  144. }
  145. if(isHave){
  146. data.cid = customerId //公司id 只有软著类要传cid,其他类型都是非必填的
  147. }
  148. if(this.props.projectType === 2){
  149. data.material = this.state.thirdMaterial; //材料
  150. data.urgent = this.state.thirdUrgent; //加急
  151. data.calculation = 1; //0 其他 1软著 2专利
  152. }else{ //非软著类需要传总金额
  153. data.totalAmount = this.state.thirdQuantity * this.state.thirdUnitPrice;
  154. data.calculation = 0; //0 其他 1软著 2专利
  155. }
  156. if(this.props.projectType === 1 && this.props.patentType === 0){
  157. data.calculation = 2; //0 其他 1软著 2专利
  158. }
  159. data.type = this.props.projectType === 1 ? (this.props.patentType === 0 ? 1 : 2) : 0 //0其他 1专利申请 2专利买卖
  160. if(this.props.projectType === 3){
  161. if(!this.state.assets){
  162. message.warning("请选择审计!");
  163. return false;
  164. }
  165. if(!this.state.assets){
  166. message.warning("请输入公司资产!");
  167. return false;
  168. }
  169. if(!this.state.assets){
  170. message.warning("请输入收入!");
  171. return false;
  172. }
  173. }
  174. if(this.props.projectType === 3){ //审计
  175. data.assets = this.state.assets; //资产
  176. data.audit = this.state.audit; //0无审计 1年审 2专审
  177. data.income = this.state.income; //收入
  178. }
  179. if(this.props.projectType === 1){ //专利
  180. data.patentType = this.props.patentNameType //专利名称
  181. }
  182. this.setState({
  183. loading: true,
  184. })
  185. $.ajax({
  186. url: globalConfig.context + api,
  187. method: 'post',
  188. dataType: 'json',
  189. crossDomain: false,
  190. data: data,
  191. }).done(
  192. function (data) {
  193. this.setState({
  194. loading: false,
  195. })
  196. if (!data.error.length) {
  197. message.success('保存成功!')
  198. this.setState({
  199. thirdCompanyName: '', //第三方名称
  200. thirdUnitPrice: '', //单价
  201. thirdQuantity: '', //数量
  202. currentTotalPrice: '', //总价
  203. thirdRemarks: '',
  204. thirdUrgent: 0,
  205. })
  206. this.props.onCancel();
  207. } else {
  208. message.warning(data.error[0].message)
  209. }
  210. }.bind(this)
  211. )
  212. }
  213. render() {
  214. return(
  215. <Modal
  216. visible={this.props.visible}
  217. onCancel={this.props.onCancel}
  218. width={800}
  219. title={this.props.ThirdId ? "修改供应商" : "新增供应商"}
  220. footer=""
  221. className="admin-desc-content"
  222. >
  223. <Form
  224. layout="horizontal"
  225. style={{ paddingBottom: '40px' }}
  226. >
  227. <Spin spinning={this.state.loading}>
  228. <div className="clearfix">
  229. <div className="clearfix">
  230. <Form.Item {...formItemLayout} label="供应商名称">
  231. <AutoComplete
  232. className="certain-category-search"
  233. dropdownClassName="certain-category-search-dropdown"
  234. dropdownMatchSelectWidth={false}
  235. dropdownStyle={{ width: 220 }}
  236. style={{ width: '220px' }}
  237. dataSource={(this.state.customerArr || []).map((group) => (
  238. <Select.Option key={group.id} value={group.companyName}>
  239. {group.companyName}
  240. </Select.Option>
  241. ))}
  242. placeholder="请输入供应商名称"
  243. value={this.state.thirdCompanyName}
  244. onChange={(e)=>{
  245. this.httpChange(e)
  246. }}
  247. filterOption={true}
  248. required="required"
  249. />
  250. <span className="mandatory">*</span>
  251. </Form.Item>
  252. </div>
  253. {/*projectType 0正常 1专利 2软著 3审计*/}
  254. {this.props.projectType !== 2 && !(this.props.projectType === 1 && this.props.patentType ===0) ?<div className="clearfix">
  255. <Form.Item {...formItemLayout} label="单价(万元)">
  256. <Input
  257. value={this.state.thirdUnitPrice}
  258. placeholder="请输入金额(必填项)"
  259. required="required"
  260. type={'number'}
  261. onBlur={this.calculatedAmount}
  262. onChange={(e) => {
  263. this.setState({
  264. thirdUnitPrice: e.target.value,
  265. })
  266. }}
  267. style={{ width: '220px' }}
  268. />
  269. <span className="mandatory">*</span>
  270. </Form.Item>
  271. </div> : <div/>}
  272. <div className="clearfix">
  273. <Form.Item {...formItemLayout} label="数量">
  274. <Input
  275. value={this.state.thirdQuantity}
  276. placeholder="请输入数量(必填项)"
  277. onBlur={this.calculatedAmount}
  278. type={'number'}
  279. onChange={(e) => {
  280. this.setState({
  281. thirdQuantity: e.target.value,
  282. })
  283. }}
  284. style={{ width: '220px' }}
  285. />
  286. <span className="mandatory">*</span>
  287. </Form.Item>
  288. </div>
  289. {/*专利 的专利申请 和 软著没有总价*/}
  290. {this.props.projectType !== 2 && this.props.patentType !==0 ?<div className="clearfix">
  291. <Form.Item {...formItemLayout} label="总价(万元)">
  292. <span>{this.state.thirdQuantity * this.state.thirdUnitPrice}</span>
  293. </Form.Item>
  294. </div> : <div/>}
  295. {this.props.projectType === 2 ? <div>
  296. <div className="clearfix">
  297. <Form.Item {...formItemLayout} label="材料">
  298. <Select
  299. value={getMaterialStatus(this.state.thirdMaterial)}
  300. onChange={(val) => {
  301. this.setState({
  302. thirdMaterial: val,
  303. })
  304. this.props.otherOperations && this.props.otherOperations({
  305. thirdMaterial: val,
  306. thirdUrgent: this.state.thirdUrgent,
  307. customerArr: this.state.customerArr,
  308. thirdCompanyName: this.state.thirdCompanyName,
  309. });
  310. }}
  311. style={{ width: '220px' }}
  312. defaultValue="0"
  313. >
  314. <Option value="0">无材料</Option>
  315. <Option value="1">有材料</Option>
  316. </Select>
  317. <span className="mandatory">*</span>
  318. </Form.Item>
  319. </div>
  320. <div className="clearfix">
  321. <Form.Item {...formItemLayout} label="加急">
  322. <Select
  323. value={getUrgentStatus(this.state.thirdUrgent)}
  324. onChange={(val) => {
  325. this.setState({
  326. thirdUrgent: val,
  327. })
  328. this.props.otherOperations && this.props.otherOperations({
  329. thirdMaterial: this.state.thirdMaterial,
  330. thirdUrgent: val,
  331. customerArr: this.state.customerArr,
  332. thirdCompanyName: this.state.thirdCompanyName
  333. });
  334. }}
  335. style={{ width: '220px' }}
  336. defaultValue="0"
  337. >
  338. <Option value="0">无加急</Option>
  339. <Option value="1">加急3天</Option>
  340. <Option value="2">加急4天</Option>
  341. <Option value="3">加急5-10天</Option>
  342. <Option value="4">加急11-15天</Option>
  343. <Option value="5">加急16-20天</Option>
  344. <Option value="6">加急21-25天</Option>
  345. <Option value="7">加急26-30天</Option>
  346. </Select>
  347. <span className="mandatory">*</span>
  348. </Form.Item>
  349. </div>
  350. </div>:<div/>}
  351. {/*{*/}
  352. {/* this.props.patentType === 0 ? <div>*/}
  353. {/* <div className="clearfix">*/}
  354. {/* <Form.Item*/}
  355. {/* {...formItemLayout}*/}
  356. {/* label="官费:"*/}
  357. {/* >*/}
  358. {/* <span style={{ color: "red", marginRight: "27px" }}>*/}
  359. {/* **/}
  360. {/* </span>*/}
  361. {/* <Radio.Group*/}
  362. {/* value={this.state.officialCost}*/}
  363. {/* onChange={(e) => {*/}
  364. {/* this.setState({ officialCost: e.target.value });*/}
  365. {/* }}*/}
  366. {/* >*/}
  367. {/* <Radio value={1}>含官费</Radio>*/}
  368. {/* <Radio value={0}>不含官费</Radio>*/}
  369. {/* </Radio.Group>*/}
  370. {/* </Form.Item>*/}
  371. {/* </div>*/}
  372. {/* <div className="clearfix">*/}
  373. {/* <Form.Item*/}
  374. {/* {...formItemLayout}*/}
  375. {/* label="费减:"*/}
  376. {/* >*/}
  377. {/* <span style={{ color: "red", marginRight: "27px" }}>*/}
  378. {/* **/}
  379. {/* </span>*/}
  380. {/* <Radio.Group*/}
  381. {/* value={this.state.costReduction}*/}
  382. {/* onChange={(e) => {*/}
  383. {/* this.setState({ costReduction: e.target.value });*/}
  384. {/* }}*/}
  385. {/* >*/}
  386. {/* <Radio value={1}>有费减</Radio>*/}
  387. {/* <Radio value={0}>无费减</Radio>*/}
  388. {/* </Radio.Group>*/}
  389. {/* </Form.Item>*/}
  390. {/* </div>*/}
  391. {/* </div> : <div/>*/}
  392. {/*}*/}
  393. {
  394. this.props.projectType === 3 ? <div>
  395. <div className="clearfix">
  396. <Form.Item {...formItemLayout} label="审计">
  397. <Select
  398. value={this.state.audit}
  399. onChange={(val) => {
  400. this.setState({
  401. audit: val,
  402. })
  403. }}
  404. style={{ width: '220px' }}
  405. defaultValue="0"
  406. >
  407. {/*0无审计 1年审 2专审*/}
  408. <Option value={0}>无审计</Option>
  409. <Option value={1}>年审</Option>
  410. <Option value={2}>专审</Option>
  411. </Select>
  412. <span className="mandatory">*</span>
  413. </Form.Item>
  414. </div>
  415. <div className="clearfix">
  416. <Form.Item {...formItemLayout} label="公司资产(万元)">
  417. <Input
  418. value={this.state.assets}
  419. placeholder="请输入公司资产"
  420. required="required"
  421. type={'number'}
  422. onChange={(e) => {
  423. this.setState({
  424. assets: e.target.value,
  425. })
  426. }}
  427. style={{ width: '220px' }}
  428. />
  429. <span className="mandatory">*</span>
  430. </Form.Item>
  431. </div>
  432. <div className="clearfix">
  433. <Form.Item {...formItemLayout} label="收入(万元)">
  434. <Input
  435. value={this.state.income}
  436. placeholder="请输入收入"
  437. required="required"
  438. type={'number'}
  439. onChange={(e) => {
  440. this.setState({
  441. income: e.target.value,
  442. })
  443. }}
  444. style={{ width: '220px' }}
  445. />
  446. <span className="mandatory">*</span>
  447. </Form.Item>
  448. </div>
  449. </div> : <div/>
  450. }
  451. <div className="clearfix">
  452. <Form.Item
  453. style={{ height: 'auto' }}
  454. labelCol={{ span: 4 }}
  455. wrapperCol={{ span: 18 }}
  456. label="备注"
  457. >
  458. <TextArea
  459. rows={4}
  460. placeholder="请输入备注"
  461. ref="signTotalAmount"
  462. style={{ width: '95%' }}
  463. value={this.state.thirdRemarks}
  464. onChange={(e) => {
  465. this.setState({
  466. thirdRemarks: e.target.value,
  467. })
  468. }}
  469. />
  470. </Form.Item>
  471. </div>
  472. <div className="clearfix">
  473. <div className="addSave" style={{ marginTop: '15px' }}>
  474. <Button
  475. className="cancel"
  476. type="primary"
  477. onClick={()=>{
  478. this.handleCancelq();
  479. }}
  480. style={{ marginLeft: '300px' }}
  481. htmlType="submit"
  482. >
  483. 保存
  484. </Button>
  485. <Button
  486. className="cancel"
  487. type="ghost"
  488. onClick={this.props.onCancel}
  489. style={{ marginLeft: '50px' }}
  490. >
  491. 取消
  492. </Button>
  493. </div>
  494. </div>
  495. </div>
  496. </Spin>
  497. </Form>
  498. </Modal>
  499. )
  500. }
  501. }
  502. export default NewSupplier;