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.

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