You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

938 lines
30 KiB

1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
  1. <script>
  2. import QuoteSearch from "./primary/quoteSearch.vue";
  3. import QuoteTable from "./primary/quoteTable.vue";
  4. import {queryQuotePage, queryQuoteRoleUser, removeQuote, saveQuote, updateQuote} from "../../../api/quote/quote";
  5. import {getSiteAndBuByUserName} from "../../../api/eam/eam";
  6. import CustomerTable from "../../../components/selector/table/customerTable.vue";
  7. import BuSelect from "../../../components/selector/select/BuSelect.vue";
  8. import ProjectTable from "../../../components/selector/table/projectTable.vue";
  9. import {queryCustomerList} from "../../../api/customer/customer";
  10. import {queryProjectList} from "../../../api/project/project";
  11. import QuoteDetail from "./detail/quoteDetail.vue";
  12. import ChooseListEam from "../common/Chooselist_eam.vue";
  13. import Quotes from "./quotes.vue";
  14. export default {
  15. name: "quote",
  16. components: {Quotes, ChooseListEam,QuoteDetail, ProjectTable, BuSelect, CustomerTable, QuoteTable, QuoteSearch},
  17. menuId:5011,
  18. data(){
  19. return{
  20. total: 0,
  21. no:1,
  22. size: 20,
  23. quote:{
  24. id: null,
  25. site:"",
  26. quoteNo: "",
  27. customerInquiryNo: "",
  28. insideInquiryNo: "",
  29. buNo: "",
  30. buId: null,
  31. versionNo: "",
  32. status:'',
  33. quoteVersionNo: "",
  34. customerNo: "",
  35. customerDesc: "",
  36. projectNo: "",
  37. projectDesc: "",
  38. currency: "",
  39. quoteDate: "",
  40. quoter: "",
  41. purchase: "",
  42. remark: "",
  43. createBy: "",
  44. createDate: "",
  45. updateBy: "",
  46. updateDate: "",
  47. },
  48. quoteForm:{
  49. },
  50. saveQuote:{
  51. },
  52. dataList:[],
  53. columns: [
  54. {
  55. userId: this.$store.state.user.name,
  56. functionId: 5011,
  57. serialNumber: '5011Table1BuDesc',
  58. tableId: '5011Table1',
  59. tableName: '报价信息表',
  60. columnProp: 'buDesc',
  61. headerAlign: 'center',
  62. align: 'center',
  63. columnLabel: 'BU',
  64. columnHidden: false,
  65. columnImage: false,
  66. columnSortable: false,
  67. sortLv: 0,
  68. status: true,
  69. fixed: '',
  70. columnWidth: 120
  71. },
  72. {
  73. userId: this.$store.state.user.name,
  74. functionId: 5011,
  75. serialNumber: '5011Table1QuoteVersionNo',
  76. tableId: '5011Table1',
  77. tableName: '报价信息表',
  78. columnProp: 'quoteVersionNo',
  79. headerAlign: 'center',
  80. align: 'center',
  81. columnLabel: '报价单号',
  82. columnHidden: false,
  83. columnImage: false,
  84. columnSortable: false,
  85. sortLv: 0,
  86. status: true,
  87. fixed: '',
  88. columnWidth: 180
  89. },
  90. {
  91. userId: this.$store.state.user.name,
  92. functionId: 5011,
  93. serialNumber: '5011Table1QuoteDate',
  94. tableId: '5011Table1',
  95. tableName: '报价信息表',
  96. columnProp: 'quoteDate',
  97. headerAlign: 'center',
  98. align: 'center',
  99. columnLabel: '报价日期',
  100. columnHidden: false,
  101. columnImage: false,
  102. columnSortable: false,
  103. sortLv: 0,
  104. status: true,
  105. fixed: '',
  106. columnWidth: 100
  107. },
  108. {
  109. userId: this.$store.state.user.name,
  110. functionId: 5011,
  111. serialNumber: '5011Table1CustomerNo',
  112. tableId: '5011Table1',
  113. tableName: '报价信息表',
  114. columnProp: 'customerNo',
  115. headerAlign: 'center',
  116. align: 'center',
  117. columnLabel: '客户编码',
  118. columnHidden: false,
  119. columnImage: false,
  120. columnSortable: false,
  121. sortLv: 0,
  122. status: true,
  123. fixed: '',
  124. columnWidth: 120
  125. },
  126. {
  127. userId: this.$store.state.user.name,
  128. functionId: 5011,
  129. serialNumber: '5011Table1CustomerDesc',
  130. tableId: '5011Table1',
  131. tableName: '报价信息表',
  132. columnProp: 'customerDesc',
  133. headerAlign: 'center',
  134. align: 'left',
  135. columnLabel: '客户名称',
  136. columnHidden: false,
  137. columnImage: false,
  138. columnSortable: false,
  139. sortLv: 0,
  140. status: true,
  141. fixed: '',
  142. columnWidth: 120
  143. },
  144. {
  145. userId: this.$store.state.user.name,
  146. functionId: 5011,
  147. serialNumber: '5011Table1ProjectNo',
  148. tableId: '5011Table1',
  149. tableName: '报价信息表',
  150. columnProp: 'projectNo',
  151. headerAlign: 'center',
  152. align: 'left',
  153. columnLabel: '项目编码',
  154. columnHidden: false,
  155. columnImage: false,
  156. columnSortable: false,
  157. sortLv: 0,
  158. status: true,
  159. fixed: '',
  160. columnWidth: 200
  161. }, {
  162. userId: this.$store.state.user.name,
  163. functionId: 5011,
  164. serialNumber: '5011Table1ProjectDesc',
  165. tableId: '5011Table1',
  166. tableName: '报价信息表',
  167. columnProp: 'projectDesc',
  168. headerAlign: 'center',
  169. align: 'left',
  170. columnLabel: '项目名称',
  171. columnHidden: false,
  172. columnImage: false,
  173. columnSortable: false,
  174. sortLv: 0,
  175. status: true,
  176. fixed: '',
  177. columnWidth: 200
  178. },
  179. {
  180. userId: this.$store.state.user.name,
  181. functionId: 5011,
  182. serialNumber: '5011Table1QuoterName',
  183. tableId: '5011Table1',
  184. tableName: '报价信息表',
  185. columnProp: 'quoterName',
  186. headerAlign: 'center',
  187. align: 'left',
  188. columnLabel: '报价专员',
  189. columnHidden: false,
  190. columnImage: false,
  191. columnSortable: false,
  192. sortLv: 0,
  193. status: true,
  194. fixed: '',
  195. columnWidth: 120
  196. },
  197. {
  198. userId: this.$store.state.user.name,
  199. functionId: 5011,
  200. serialNumber: '5011Table1PurchaseName',
  201. tableId: '5011Table1',
  202. tableName: '报价信息表',
  203. columnProp: 'purchaseName',
  204. headerAlign: 'center',
  205. align: 'left',
  206. columnLabel: '采购专员',
  207. columnHidden: false,
  208. columnImage: false,
  209. columnSortable: false,
  210. sortLv: 0,
  211. status: true,
  212. fixed: '',
  213. columnWidth: 120
  214. },
  215. {
  216. userId: this.$store.state.user.name,
  217. functionId: 5011,
  218. serialNumber: '5011Table1Currency',
  219. tableId: '5011Table1',
  220. tableName: '报价信息表',
  221. columnProp: 'currency',
  222. headerAlign: 'center',
  223. align: 'center',
  224. columnLabel: '货币',
  225. columnHidden: false,
  226. columnImage: false,
  227. columnSortable: false,
  228. sortLv: 0,
  229. status: true,
  230. fixed: '',
  231. columnWidth: 120
  232. },
  233. {
  234. userId: this.$store.state.user.name,
  235. functionId: 5011,
  236. serialNumber: '5011Table1Status',
  237. tableId: '5011Table1',
  238. tableName: '报价信息表',
  239. columnProp: 'status',
  240. headerAlign: 'center',
  241. align: 'center',
  242. columnLabel: '状态',
  243. columnHidden: false,
  244. columnImage: false,
  245. columnSortable: false,
  246. sortLv: 0,
  247. status: true,
  248. fixed: '',
  249. columnWidth: 120
  250. },
  251. {
  252. userId: this.$store.state.user.name,
  253. functionId: 5011,
  254. serialNumber: '5011Table1CustomerInquiryNo',
  255. tableId: '5011Table1',
  256. tableName: '报价信息表',
  257. columnProp: 'customerInquiryNo',
  258. headerAlign: 'center',
  259. align: 'center',
  260. columnLabel: '客户报价单号',
  261. columnHidden: false,
  262. columnImage: false,
  263. columnSortable: false,
  264. sortLv: 0,
  265. status: true,
  266. fixed: '',
  267. columnWidth: 120
  268. },
  269. {
  270. userId: this.$store.state.user.name,
  271. functionId: 5011,
  272. serialNumber: '5011Table1InsideInquiryNo',
  273. tableId: '5011Table1',
  274. tableName: '报价信息表',
  275. columnProp: 'insideInquiryNo',
  276. headerAlign: 'center',
  277. align: 'center',
  278. columnLabel: '内部询价单号',
  279. columnHidden: false,
  280. columnImage: false,
  281. columnSortable: false,
  282. sortLv: 0,
  283. status: true,
  284. fixed: '',
  285. columnWidth: 120
  286. },
  287. {
  288. userId: this.$store.state.user.name,
  289. functionId: 5011,
  290. serialNumber: '5011Table1CreateBy',
  291. tableId: '5011Table1',
  292. tableName: '报价信息表',
  293. columnProp: 'createBy',
  294. headerAlign: 'center',
  295. align: 'center',
  296. columnLabel: '创建人',
  297. columnHidden: false,
  298. columnImage: false,
  299. columnSortable: false,
  300. sortLv: 0,
  301. status: true,
  302. fixed: '',
  303. columnWidth: 120
  304. },
  305. {
  306. userId: this.$store.state.user.name,
  307. functionId: 5011,
  308. serialNumber: '5011Table1CreateDate',
  309. tableId: '5011Table1',
  310. tableName: '报价信息表',
  311. columnProp: 'createDate',
  312. headerAlign: 'center',
  313. align: 'center',
  314. columnLabel: '创建时间',
  315. columnHidden: false,
  316. columnImage: false,
  317. columnSortable: false,
  318. sortLv: 0,
  319. status: true,
  320. fixed: '',
  321. columnWidth: 120
  322. },
  323. {
  324. userId: this.$store.state.user.name,
  325. functionId: 5011,
  326. serialNumber: '5011Table1UpdateBy',
  327. tableId: '5011Table1',
  328. tableName: '报价信息表',
  329. columnProp: 'updateBy',
  330. headerAlign: 'center',
  331. align: 'center',
  332. columnLabel: '更新人',
  333. columnHidden: false,
  334. columnImage: false,
  335. columnSortable: false,
  336. sortLv: 0,
  337. status: true,
  338. fixed: '',
  339. columnWidth: 120
  340. },
  341. {
  342. userId: this.$store.state.user.name,
  343. functionId: 5011,
  344. serialNumber: '5011Table1UpdateDate',
  345. tableId: '5011Table1',
  346. tableName: '报价信息表',
  347. columnProp: 'updateDate',
  348. headerAlign: 'center',
  349. align: 'center',
  350. columnLabel: '更新时间',
  351. columnHidden: false,
  352. columnImage: false,
  353. columnSortable: false,
  354. sortLv: 0,
  355. status: true,
  356. fixed: '',
  357. columnWidth: 120
  358. },
  359. ],
  360. searchLoading: false,
  361. saveVisible: false,
  362. saveLoading: false,
  363. activeName:'detail',
  364. userBuList: [],
  365. saveRules: {
  366. buId:[{required: true, message: '请选择BU', trigger: ['blur','change']}],
  367. customerNo:[{required: true, message: '请输入客户编码', trigger: ['blur','change']}],
  368. customerDesc:[{required: true, message: '请输入客户名称', trigger: ['blur','change']}],
  369. projectNo:[{required: true, message: '请输入项目编码', trigger: ['blur','change']}],
  370. projectDesc:[{required: true, message: '请输入项目名称', trigger: ['blur','change']}],
  371. currency:[{required: true, message: '请输入币种', trigger: ['blur','change']}],
  372. quoteDate:[{required: true, message: '请选择报价日期', trigger: ['blur','change']}],
  373. quoter:[{required: true, message: '请输入报价专员', trigger: ['blur','change']}],
  374. purchase:[{required: true, message: '请输入询价专员', trigger: ['blur','change']}],
  375. },
  376. customerVisible:false,
  377. projectVisible:false,
  378. quoterVisible:false,
  379. purchaseVisible:false,
  380. currentQuote:{
  381. },
  382. userVisible:false,
  383. userTitle:'人员信息',
  384. user:{
  385. username:'',
  386. userDisplay:'',
  387. active:'',
  388. buId:null,
  389. roleNo:'',
  390. },
  391. userDataList:[],
  392. tagNo:undefined,
  393. insideInquiryVisible:false,
  394. }
  395. },
  396. methods:{
  397. handleSearch(){
  398. let params = {
  399. ...this.quoteForm,
  400. no: this.no,
  401. size: this.size,
  402. }
  403. this.searchLoading = true
  404. queryQuotePage(params).then(({data})=>{
  405. if (data && data.code === 0){
  406. this.dataList = data.rows
  407. this.total = data.total
  408. if (this.total > 0){
  409. this.currentQuote = {...this.dataList[0]}
  410. }else {
  411. this.currentQuote = {}
  412. }
  413. }else {
  414. this.$message.error(data.msg)
  415. }
  416. this.searchLoading = false
  417. }).catch(error=>{
  418. this.$message.error(error)
  419. this.searchLoading = false
  420. })
  421. },
  422. handleSave(row){
  423. this.$nextTick(()=>{
  424. if (this.$refs.saveForm){
  425. this.$refs.saveForm.clearValidate();
  426. }
  427. })
  428. if (row){
  429. this.saveQuote = {
  430. ...row
  431. }
  432. }else {
  433. this.saveQuote = {
  434. ...this.quote,
  435. }
  436. this.$nextTick(()=>{
  437. this.saveQuote.buId = this.userBuList.length > 0? this.userBuList[0].id:null;
  438. })
  439. }
  440. this.saveVisible = true
  441. },
  442. handleSizeChange(size){
  443. this.size = size
  444. this.handleSearch();
  445. },
  446. handlePageChange(no) {
  447. this.no = no
  448. this.handleSearch();
  449. },
  450. handleQueryBu(){
  451. let params = {
  452. username: this.$store.state.user.name,
  453. }
  454. getSiteAndBuByUserName(params).then(({data}) => {
  455. if (data && data.code === 0) {
  456. this.userBuList = data.rows
  457. }else {
  458. this.$message.warning(data.msg)
  459. }
  460. }).catch((error)=>{
  461. this.$message.error(error)
  462. })
  463. },
  464. handleSaveOrUpdateQuote(){
  465. this.$refs.saveForm.validate((valid,obj) => {
  466. if (valid){
  467. if (this.saveQuote.id){
  468. this.handleUpdateQuote();
  469. }else {
  470. this.handleSaveQuote();
  471. }
  472. }else {
  473. let i = 1;
  474. for (let key in obj){
  475. this.$message.warning(obj[key][0].message)
  476. if (i === 1){
  477. return
  478. }
  479. i++;
  480. }
  481. }
  482. })
  483. },
  484. handleSaveQuote(){
  485. let params = {
  486. ...this.saveQuote,
  487. status: '草稿',
  488. action: 'Y',
  489. createBy: this.$store.state.user.name,
  490. }
  491. this.saveLoading = true
  492. saveQuote(params).then(({data})=>{
  493. if (data && data.code === 0){
  494. this.saveVisible = false
  495. this.$message.success(data.msg)
  496. }else {
  497. this.$message.warning(data.msg)
  498. }
  499. this.handleSearch();
  500. this.saveLoading = false
  501. }).catch((error)=>{
  502. this.$message.error(error)
  503. this.saveLoading = false
  504. })
  505. },
  506. handleUpdateQuote(){
  507. let params = {
  508. ...this.saveQuote,
  509. updateBy: this.$store.state.user.name,
  510. }
  511. this.saveLoading = true
  512. updateQuote(params).then(({data})=>{
  513. if (data && data.code === 0){
  514. this.saveVisible = false
  515. this.$message.success(data.msg)
  516. }else {
  517. this.$message.warning(data.msg)
  518. }
  519. this.handleSearch();
  520. this.saveLoading = false
  521. }).catch((error)=>{
  522. this.$message.error(error)
  523. this.saveLoading = false
  524. })
  525. },
  526. customerDblClick(row){
  527. this.saveQuote.customerNo = row.customerNo
  528. this.saveQuote.customerDesc = row.customerDesc
  529. this.customerVisible = false
  530. },
  531. projectDblClick(row){
  532. this.saveQuote.projectNo = row.projectNo
  533. this.saveQuote.projectDesc = row.projectDesc
  534. this.projectVisible = false
  535. },
  536. handleRemove(row){
  537. this.$alert('确认删除该报价信息吗?', '提示', {
  538. confirmButtonText: '确定',
  539. cancelButtonText: '取消',
  540. type: 'warning'
  541. }).then(() => {
  542. this.handleRemoveQuote(row)
  543. }).catch(() => {
  544. })
  545. },
  546. handleRemoveQuote(row){
  547. let params = {
  548. id: row.id,
  549. }
  550. removeQuote(params).then(({data})=>{
  551. if (data && data.code === 0){
  552. this.$message.success(data.msg)
  553. this.handleSearch();
  554. }else {
  555. this.$message.warning(data.msg)
  556. }
  557. }).catch((error)=>{
  558. this.$message.error(error)
  559. })
  560. },
  561. customerNoBlur(){
  562. let params = {
  563. customerNo: this.saveQuote.customerNo,
  564. createBy: this.$store.state.user.name,
  565. }
  566. queryCustomerList(params).then(({data}) => {
  567. if (data && data.code === 0) {
  568. if (data.rows.length === 1){
  569. this.saveQuote.customerDesc = data.rows[0].customerDesc
  570. }else {
  571. this.saveQuote.projectNo = ''
  572. this.saveQuote.projectDesc = ''
  573. this.saveQuote.customerDesc = ''
  574. }
  575. }else {
  576. this.$message.warning(data.message)
  577. }
  578. }).catch((error) => {
  579. this.$message.error(error)
  580. })
  581. },
  582. projectNoBlur(){
  583. let params = {
  584. projectNo: this.saveQuote.projectNo,
  585. customerNo: this.saveQuote.customerNo,
  586. createBy: this.$store.state.user.name,
  587. buId: this.saveQuote.buId,
  588. }
  589. queryProjectList(params).then(({data})=>{
  590. if (data && data.code === 0) {
  591. if (data.rows.length === 1) {
  592. this.saveQuote.projectDesc = data.rows[0].projectDesc
  593. }else {
  594. this.saveQuote.projectDesc = ''
  595. }
  596. }else {
  597. this.$message.warning(data.msg)
  598. }
  599. }).catch((error)=>{
  600. this.$message.error(error)
  601. })
  602. },
  603. handleRowClick(row){
  604. this.currentQuote = {...row}
  605. },
  606. userDblClick(row){
  607. if (this.quoterVisible){
  608. this.saveQuote.quoter = row.username
  609. this.quoterVisible = false
  610. }else if (this.purchaseVisible){
  611. this.saveQuote.purchase = row.username
  612. this.purchaseVisible = false
  613. }
  614. this.userVisible = false
  615. },
  616. handleQuoterClick(){
  617. this.userTitle = '报价专员'
  618. this.user.username = this.saveQuote.quoter
  619. this.user.userDisplay = ''
  620. this.user.active = ''
  621. this.user.buId = this.saveQuote.buId
  622. this.user.roleNo = 'QUOTER'
  623. this.quoterVisible = true
  624. this.handleQueryQuoteRoleUser();
  625. this.userVisible = true
  626. },
  627. handlePurchaseClick(){
  628. this.userTitle = '采购专员'
  629. this.user.username = this.saveQuote.purchase
  630. this.user.userDisplay = ''
  631. this.user.active = ''
  632. this.user.buId = this.saveQuote.buId
  633. this.user.roleNo = 'PURCHASE'
  634. this.purchaseVisible = true
  635. this.handleQueryQuoteRoleUser();
  636. this.userVisible = true
  637. },
  638. handleQueryQuoteRoleUser(){
  639. let params = {
  640. ...this.user,
  641. }
  642. this.userDataList = []
  643. queryQuoteRoleUser(params).then(({data})=>{
  644. if (data && data.code === 0){
  645. this.userDataList = data.rows
  646. }else {
  647. this.$message.warning(data.msg)
  648. }
  649. }).catch((error)=>{
  650. this.$message.error(error)
  651. })
  652. },
  653. getBaseList(val){
  654. this.tagNo = val
  655. this.$nextTick(()=>{
  656. let strVal = ''
  657. if (val === 512){
  658. strVal = this.saveQuote.currency;
  659. this.$refs.baseList.init(val,strVal)
  660. }
  661. })
  662. },
  663. getBaseData(val){
  664. if (this.tagNo === 512){
  665. this.saveQuote.currency = val.Currency
  666. }
  667. },
  668. handleQueryByIds(){
  669. let params = {
  670. ids:this.$route.params.ids,
  671. no:this.no,
  672. size:this.size,
  673. createBy:this.$store.state.user.name,
  674. }
  675. queryQuotePage(params).then(({data})=>{
  676. if (data && data.code === 0){
  677. this.dataList = data.rows
  678. this.total = data.total
  679. if (this.total > 0){
  680. this.currentQuote = {...this.dataList[0]}
  681. }else {
  682. this.currentQuote = {}
  683. }
  684. }else {
  685. this.$message.error(data.msg)
  686. }
  687. this.searchLoading = false
  688. }).catch(error=>{
  689. this.$message.error(error)
  690. this.searchLoading = false
  691. })
  692. },
  693. handleInquiryDblClick(row){
  694. this.saveQuote.insideInquiryNo = row.quotationNo
  695. this.saveQuote.customerNo = row.customerNo
  696. this.saveQuote.customerDesc = row.customerDesc
  697. this.saveQuote.projectNo = row.projectNo
  698. this.saveQuote.projectDesc = row.projectDesc
  699. this.saveQuote.quoter = row.quoter
  700. this.saveQuote.customerInquiryNo = row.customerQuoteNo
  701. this.insideInquiryVisible = false
  702. }
  703. },
  704. created() {
  705. this.quoteForm = {
  706. ...this.quote,
  707. createBy: this.$store.state.user.name,
  708. }
  709. this.handleQueryBu();// 查询 BU
  710. this.handleSearch();// 查询报价信息
  711. },
  712. watch:{
  713. 'quoteForm.customerNo'(newVal, oldVal){
  714. this.quoteForm.customerNo = newVal.toUpperCase()
  715. },
  716. 'quoteForm.projectNo'(newVal, oldVal){
  717. this.quoteForm.projectNo = newVal.toUpperCase()
  718. },
  719. 'quoteForm.quoteNo'(newVal, oldVal){
  720. this.quoteForm.quoteNo = newVal.toUpperCase()
  721. },
  722. 'saveQuote.customerNo'(newVal, oldVal){
  723. this.saveQuote.customerNo = newVal.toUpperCase()
  724. },
  725. 'saveQuote.projectNo'(newVal, oldVal){
  726. // this.saveQuote.projectNo = newVal.toUpperCase()
  727. },
  728. },
  729. activated() {
  730. if (this.$route.params.ids){
  731. this.handleQueryByIds();
  732. }
  733. }
  734. }
  735. </script>
  736. <template>
  737. <div>
  738. <quote-search v-model:quote="quoteForm" @search="handleSearch" @save="handleSave"></quote-search>
  739. <quote-table v-loading="searchLoading" :current-row="currentQuote" :columns="columns" style="margin-top: 5px"
  740. @save="handleSave" @remove="handleRemove" @rowClick="handleRowClick"
  741. :data-list="dataList" :height="'35vh'">
  742. </quote-table>
  743. <el-pagination @size-change="handleSizeChange"
  744. @current-change="handlePageChange"
  745. :current-page="no"
  746. :page-sizes="[20, 50, 100, 200, 500]"
  747. :page-size="size"
  748. :total="total"
  749. layout="total,sizes, prev, pager, next, jumper">
  750. </el-pagination>
  751. <el-tabs v-model="activeName" >
  752. <el-tab-pane label="报价明细" name="detail">
  753. <quote-detail :quote="currentQuote" :height="'33vh'"></quote-detail>
  754. </el-tab-pane>
  755. </el-tabs>
  756. <el-dialog :title="saveQuote.id? '报价信息:'+ saveQuote.quoteVersionNo : '报价信息'" v-drag :close-on-click-modal="false" :visible.sync="saveVisible" width="500px" >
  757. <el-form ref="saveForm" :model="saveQuote" :rules="saveRules" label-position="top" label-width="100px">
  758. <el-row :gutter="10">
  759. <el-col :span="16">
  760. <el-form-item label="BU" prop="buId" :show-message="false">
  761. <bu-select v-model="saveQuote.buId" :disabled="saveQuote.id > 0"></bu-select>
  762. </el-form-item>
  763. </el-col>
  764. </el-row>
  765. <el-row :gutter="10">
  766. <el-col :span="8">
  767. <el-form-item label="客户询价单号" prop="customerInquiryNo" :show-message="false">
  768. <el-input v-model="saveQuote.customerInquiryNo"></el-input>
  769. </el-form-item>
  770. </el-col>
  771. <el-col :span="8">
  772. <el-form-item label="内部询价单号" prop="insideInquiryNo" :show-message="false">
  773. <span slot="label">
  774. <a @click="insideInquiryVisible = true">内部询价单号</a>
  775. </span>
  776. <el-input v-model="saveQuote.insideInquiryNo"></el-input>
  777. </el-form-item>
  778. </el-col>
  779. </el-row>
  780. <el-row :gutter="10">
  781. <el-col :span="8">
  782. <el-form-item label="客户编码" prop="customerNo" :show-message="false">
  783. <span slot="label">
  784. <a @click="customerVisible = true">客户编码</a>
  785. </span>
  786. <el-input v-model="saveQuote.customerNo" @blur="customerNoBlur"></el-input>
  787. </el-form-item>
  788. </el-col>
  789. <el-col :span="16">
  790. <el-form-item label="客户描述" prop="customerDesc" :show-message="false">
  791. <el-input v-model="saveQuote.customerDesc" disabled></el-input>
  792. </el-form-item>
  793. </el-col>
  794. <el-col :span="8">
  795. <el-form-item label="项目编码" prop="projectNo" :show-message="false">
  796. <span slot="label" v-if="saveQuote.customerNo && saveQuote.customerDesc">
  797. <a @click="projectVisible = true" >项目编码</a>
  798. </span>
  799. <el-input v-model="saveQuote.projectNo" @blur="projectNoBlur"></el-input>
  800. </el-form-item>
  801. </el-col>
  802. <el-col :span="16">
  803. <el-form-item label="项目描述" prop="projectDesc" :show-message="false">
  804. <el-input v-model="saveQuote.projectDesc" disabled></el-input>
  805. </el-form-item>
  806. </el-col>
  807. <el-col :span="8">
  808. <el-form-item label="币种" prop="currency" :show-message="false">
  809. <span slot="label">
  810. <a @click="getBaseList(512)">币种</a>
  811. </span>
  812. <el-input v-model="saveQuote.currency"></el-input>
  813. </el-form-item>
  814. </el-col>
  815. <el-col :span="8">
  816. <el-form-item label="报价日期" prop="quoteDate" :show-message="false">
  817. <el-date-picker style="width: 100%" v-model="saveQuote.quoteDate" type="date" value-format='yyyy-MM-dd' format='yyyy-MM-dd'></el-date-picker>
  818. </el-form-item>
  819. </el-col>
  820. </el-row>
  821. <el-row :gutter="10">
  822. <el-col :span="8">
  823. <el-form-item label="报价专员" prop="quoter" :show-message="false">
  824. <span slot="label">
  825. <a @click="handleQuoterClick" >报价专员</a>
  826. </span>
  827. <el-input v-model="saveQuote.quoter"></el-input>
  828. </el-form-item>
  829. </el-col>
  830. <el-col :span="8">
  831. <el-form-item label="采购专员" prop="purchase" :show-message="false">
  832. <span slot="label">
  833. <a @click="handlePurchaseClick" >采购专员</a>
  834. </span>
  835. <el-input v-model="saveQuote.purchase"></el-input>
  836. </el-form-item>
  837. </el-col>
  838. <el-col :span="24">
  839. <el-form-item label="备注" prop="remark" class="auto" :show-message="false">
  840. <el-input v-model="saveQuote.remark" :rows="3" type="textarea"></el-input>
  841. </el-form-item>
  842. </el-col>
  843. </el-row>
  844. </el-form>
  845. <div slot="footer" class="dialog-footer">
  846. <el-button type="primary" @click="handleSaveOrUpdateQuote"> </el-button>
  847. <el-button @click="saveVisible = false"> </el-button>
  848. </div>
  849. </el-dialog>
  850. <el-dialog :title="userTitle" v-drag :visible.sync="userVisible" width="500px" modal-append-to-body :close-on-click-modal="false">
  851. <el-form :model="user" label-position="top">
  852. <el-row :gutter="10">
  853. <el-col :span="6">
  854. <el-form-item label="用户账号" prop="name">
  855. <el-input v-model="user.username"></el-input>
  856. </el-form-item>
  857. </el-col>
  858. <el-col :span="6">
  859. <el-form-item label="用户名" prop="name">
  860. <el-input v-model="user.userDisplay"></el-input>
  861. </el-form-item>
  862. </el-col>
  863. <el-col :span="6">
  864. <el-form-item label="是否在用">
  865. <el-select filterable v-model="user.active" style="width: 100%">
  866. <el-option label="全部" value=""></el-option>
  867. <el-option label="是" value="1"></el-option>
  868. <el-option label="否" value="0"></el-option>
  869. </el-select>
  870. </el-form-item>
  871. </el-col>
  872. <el-col :span="6">
  873. <el-form-item label=" " >
  874. <el-button type="primary" @click="handleQueryQuoteRoleUser">查询</el-button>
  875. </el-form-item>
  876. </el-col>
  877. </el-row>
  878. </el-form>
  879. <el-table
  880. :height="300"
  881. :data="userDataList"
  882. border
  883. @row-dblclick="userDblClick"
  884. style="width: 100%;">
  885. <el-table-column
  886. prop="username"
  887. header-align="center"
  888. align="center"
  889. label="用户账号">
  890. </el-table-column>
  891. <el-table-column
  892. prop="userDisplay"
  893. header-align="center"
  894. align="center"
  895. label="用户名">
  896. </el-table-column>
  897. <el-table-column
  898. prop="status"
  899. header-align="center"
  900. align="center"
  901. label="是否在用">
  902. <template slot-scope="scope">
  903. <span v-if="scope.row.status === 1"></span>
  904. <span v-if="scope.row.status === 0"></span>
  905. </template>
  906. </el-table-column>
  907. </el-table>
  908. </el-dialog>
  909. <el-dialog title="询价申请" v-drag :visible.sync="insideInquiryVisible" width="1000px" modal-append-to-body :close-on-click-modal="false">
  910. <quotes v-if="insideInquiryVisible" :is-component="true" :height="400" @dblclick="handleInquiryDblClick"></quotes>
  911. </el-dialog>
  912. <customer-table ref="customerTable" v-if="saveVisible" v-model="customerVisible" :height="300" @dblclick="customerDblClick" :customer-no="saveQuote.customerNo"></customer-table>
  913. <project-table ref="projectTable" v-if="saveVisible" v-model="projectVisible" :height="300" @dblclick="projectDblClick" :customer-no="saveQuote.customerNo" :project-no="saveQuote.projectNo" :bu-id="saveQuote.buId"></project-table>
  914. <choose-list-eam ref="baseList" @getBaseData="getBaseData"></choose-list-eam>
  915. </div>
  916. </template>
  917. <style scoped>
  918. .auto /deep/ .el-form-item__content{
  919. height: auto;
  920. line-height: 1.5;
  921. }
  922. .el-table /deep/ .cell{
  923. height: auto;
  924. line-height: 1.5;
  925. }
  926. </style>