plm前端
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.
 
 
 
 

1323 lines
42 KiB

<script>
import QuoteSearch from "./primary/quoteSearch.vue";
import QuoteTable from "./primary/quoteTable.vue";
import {
againQuote,
queryQuotePage,
queryQuoteRoleUser,
removeQuote,
saveQuote,
updateQuote,
updateQuoteStatus
} from "../../../api/quote/quote";
import QuoteDetail from "./detail/quoteDetail.vue";
import ChooseList from '@/views/modules/common/Chooselist';
import {queryCustomer} from "../../../api/customer/customerInformation";
import DictDataSelect from "../sys/dict-data-select.vue";
import {queryProjectByCustomer} from "../../../api/project/project";
import quotationCustomerContact from "../quotation/sellForQuotation/quotationCustomerContact.vue";
import CustomerInfo from "../quotation/sellForQuotation/customerInfo.vue";
import OssComponents from "../oss/ossComponents.vue";
import quotationProjectInformation from "../quotation/sellForQuotation/quotationProjectInformation.vue";
import {searchQuotationByQuotationNo} from "../../../api/quotation/quotationInformation";
import PriceCheckProperties from "../quotation/priceCheckProperties.vue";
import ApprovalInformation from "../changeManagement/approvalInformation.vue";
import {getPriceCheckPropertiesList} from "../../../api/quotation/priceCheckProperties";
import {getApprovalList} from "../../../api/changeManagement/changeManagement";
import QuoteGroupDetail from "./detail/quoteGroupDetail.vue";
export default {
name: "quote",
components: {
QuoteGroupDetail,
ApprovalInformation, PriceCheckProperties,
quotationProjectInformation, OssComponents, CustomerInfo, quotationCustomerContact,
DictDataSelect,
QuoteDetail,
ChooseList,
QuoteTable, QuoteSearch
},
props:{
isMenu:{
type:Boolean,
default:true,
},
projectNo:{
type:String,
},
height:{
type:[Number,String],
default:'35vh'
}
},
menuId:5011,
data(){
return{
total: 0,
no:1,
size: 20,
quote:{
id: null,
site:"",
quoteNo: "",
customerInquiryNo: "",
insideInquiryNo: "",
buNo: "",
buId: null,
versionNo: "",
status:'',
quoteVersionNo: "",
customerNo: "",
customerDesc: "",
projectNo: "",
projectDesc: "",
finalCustomerNo: "",
finalCustomerDesc:"",
currency: "",
quoteDate: "",
quoter: "",
quoterName: "",
purchase: "",
purchaseName: "",
remark: "",
createBy: "",
createDate: "",
updateBy: "",
updateDate: "",
application: "",
annualDemand: "",
costModel: "UFIDA",
markup:0,
chipPrice:'',
},
quoteForm:{
},
saveQuote:{
},
dataList:[],
columns: [
{
userId: this.$store.state.user.name,
functionId: 5011,
serialNumber: '5011Table1QuoteVersionNo',
tableId: '5011Table1',
tableName: '报价信息表',
columnProp: 'quoteVersionNo',
headerAlign: 'center',
align: 'center',
columnLabel: '报价单号',
columnHidden: false,
columnImage: false,
columnSortable: false,
sortLv: 0,
status: true,
fixed: '',
columnWidth: 180
},
{
userId: this.$store.state.user.name,
functionId: 5011,
serialNumber: '5011Table1QuoteDate',
tableId: '5011Table1',
tableName: '报价信息表',
columnProp: 'quoteDate',
headerAlign: 'center',
align: 'center',
columnLabel: '报价日期',
columnHidden: false,
columnImage: false,
columnSortable: false,
sortLv: 0,
status: true,
fixed: '',
columnWidth: 100
},
{
userId: this.$store.state.user.name,
functionId: 5011,
serialNumber: '5011Table1CustomerNo',
tableId: '5011Table1',
tableName: '报价信息表',
columnProp: 'customerNo',
headerAlign: 'center',
align: 'center',
columnLabel: '客户编码',
columnHidden: false,
columnImage: false,
columnSortable: false,
sortLv: 0,
status: true,
fixed: '',
columnWidth: 120
},
{
userId: this.$store.state.user.name,
functionId: 5011,
serialNumber: '5011Table1CustomerDesc',
tableId: '5011Table1',
tableName: '报价信息表',
columnProp: 'customerDesc',
headerAlign: 'center',
align: 'left',
columnLabel: '客户名称',
columnHidden: false,
columnImage: false,
columnSortable: false,
sortLv: 0,
status: true,
fixed: '',
columnWidth: 120
},
{
userId: this.$store.state.user.name,
functionId: 5011,
serialNumber: '5011Table1ProjectNo',
tableId: '5011Table1',
tableName: '报价信息表',
columnProp: 'projectNo',
headerAlign: 'center',
align: 'left',
columnLabel: '项目编码',
columnHidden: false,
columnImage: false,
columnSortable: false,
sortLv: 0,
status: true,
fixed: '',
columnWidth: 120
},
{
userId: this.$store.state.user.name,
functionId: 5011,
serialNumber: '5011Table1ProjectDesc',
tableId: '5011Table1',
tableName: '报价信息表',
columnProp: 'projectDesc',
headerAlign: 'center',
align: 'left',
columnLabel: '项目名称',
columnHidden: false,
columnImage: false,
columnSortable: false,
sortLv: 0,
status: true,
fixed: '',
columnWidth: 120
},
{
userId: this.$store.state.user.name,
functionId: 5011,
serialNumber: '5011Table1QuoterName',
tableId: '5011Table1',
tableName: '报价信息表',
columnProp: 'quoterName',
headerAlign: 'center',
align: 'left',
columnLabel: '报价专员',
columnHidden: false,
columnImage: false,
columnSortable: false,
sortLv: 0,
status: true,
fixed: '',
columnWidth: 120
},
{
userId: this.$store.state.user.name,
functionId: 5011,
serialNumber: '5011Table1PurchaseName',
tableId: '5011Table1',
tableName: '报价信息表',
columnProp: 'purchaseName',
headerAlign: 'center',
align: 'left',
columnLabel: '采购专员',
columnHidden: false,
columnImage: false,
columnSortable: false,
sortLv: 0,
status: true,
fixed: '',
columnWidth: 120
},
{
userId: this.$store.state.user.name,
functionId: 5011,
serialNumber: '5011Table1Status',
tableId: '5011Table1',
tableName: '报价信息表',
columnProp: 'status',
headerAlign: 'center',
align: 'center',
columnLabel: '状态',
columnHidden: false,
columnImage: false,
columnSortable: false,
sortLv: 0,
status: true,
fixed: '',
columnWidth: 120
},
{
userId: this.$store.state.user.name,
functionId: 5011,
serialNumber: '5011Table1CustomerInquiryNo',
tableId: '5011Table1',
tableName: '报价信息表',
columnProp: 'customerInquiryNo',
headerAlign: 'center',
align: 'center',
columnLabel: '客户询价单号',
columnHidden: false,
columnImage: false,
columnSortable: false,
sortLv: 0,
status: true,
fixed: '',
columnWidth: 120
},
{
userId: this.$store.state.user.name,
functionId: 5011,
serialNumber: '5011Table1InsideInquiryNo',
tableId: '5011Table1',
tableName: '报价信息表',
columnProp: 'insideInquiryNo',
headerAlign: 'center',
align: 'center',
columnLabel: '内部询价单号',
columnHidden: false,
columnImage: false,
columnSortable: false,
sortLv: 0,
status: true,
fixed: '',
columnWidth: 120
},
{
userId: this.$store.state.user.name,
functionId: 5011,
serialNumber: '5011Table1CreateBy',
tableId: '5011Table1',
tableName: '报价信息表',
columnProp: 'createBy',
headerAlign: 'center',
align: 'center',
columnLabel: '创建人',
columnHidden: false,
columnImage: false,
columnSortable: false,
sortLv: 0,
status: true,
fixed: '',
columnWidth: 120
},
{
userId: this.$store.state.user.name,
functionId: 5011,
serialNumber: '5011Table1CreateDate',
tableId: '5011Table1',
tableName: '报价信息表',
columnProp: 'createDate',
headerAlign: 'center',
align: 'center',
columnLabel: '创建时间',
columnHidden: false,
columnImage: false,
columnSortable: false,
sortLv: 0,
status: true,
fixed: '',
columnWidth: 130
},
{
userId: this.$store.state.user.name,
functionId: 5011,
serialNumber: '5011Table1UpdateBy',
tableId: '5011Table1',
tableName: '报价信息表',
columnProp: 'updateBy',
headerAlign: 'center',
align: 'center',
columnLabel: '更新人',
columnHidden: false,
columnImage: false,
columnSortable: false,
sortLv: 0,
status: true,
fixed: '',
columnWidth: 120
},
{
userId: this.$store.state.user.name,
functionId: 5011,
serialNumber: '5011Table1UpdateDate',
tableId: '5011Table1',
tableName: '报价信息表',
columnProp: 'updateDate',
headerAlign: 'center',
align: 'center',
columnLabel: '更新时间',
columnHidden: false,
columnImage: false,
columnSortable: false,
sortLv: 0,
status: true,
fixed: '',
columnWidth: 130
},
],
searchLoading: false,
saveVisible: false,
saveLoading: false,
activeName:'detail',
userBuList: [],
saveRules: {
buId:[{required: true, message: '请选择BU', trigger: ['blur','change']}],
customerNo:[{required: true, message: '请输入客户编码', trigger: ['blur','change']}],
customerDesc:[{required: true, message: '请输入客户名称', trigger: ['blur','change']}],
projectNo:[{required: true, message: '请输入项目编码', trigger: ['blur','change']}],
projectDesc:[{required: true, message: '请输入项目名称', trigger: ['blur','change']}],
currency:[{required: true, message: '请输入币种', trigger: ['blur','change']}],
quoteDate:[{required: true, message: '请选择报价日期', trigger: ['blur','change']}],
quoter:[{required: true, message: '请输入报价专员', trigger: ['blur','change']}],
},
customerVisible:false,
projectVisible:false,
quoterVisible:false,
purchaseVisible:false,
currentQuote:{
},
userVisible:false,
userTitle:'人员信息',
user:{
username:'',
userDisplay:'',
active:'',
buId:null,
roleNo:'',
},
userDataList:[],
tagNo:undefined,
insideInquiryVisible:false,
detailFlag:false,
ossColumns:[
{
userId: this.$store.state.user.name,
functionId: 5011,
serialNumber: '5011Table2FileName',
tableId: '5011Table2',
tableName: '文件信息表',
columnProp: 'fileName',
headerAlign: 'center',
align: 'left',
columnLabel: '文件名称',
columnHidden: false,
columnImage: false,
columnSortable: false,
sortLv: 0,
status: true,
fixed: '',
columnWidth: 140
},
{
userId: this.$store.state.user.name,
functionId: 5011,
serialNumber: '5011Table2FileRemark',
tableId: '5011Table2',
tableName: '文件信息表',
columnProp: 'fileRemark',
headerAlign: 'center',
align: 'left',
columnLabel: '备注',
columnHidden: false,
columnImage: false,
columnSortable: false,
sortLv: 0,
status: true,
fixed: '',
columnWidth: 240
},
{
userId: this.$store.state.user.name,
functionId: 5011,
serialNumber: '5011Table2CreateDate',
tableId: '5011Table2',
tableName: '文件信息表',
columnProp: 'createDate',
headerAlign: 'center',
align: 'center',
columnLabel: '上传时间',
columnHidden: false,
columnImage: false,
columnSortable: false,
sortLv: 0,
status: true,
fixed: '',
columnWidth: 140
},
{
userId: this.$store.state.user.name,
functionId: 5011,
serialNumber: '5011Table2CreatedBy',
tableId: '5011Table2',
tableName: '文件信息表',
columnProp: 'createBy',
headerAlign: 'center',
align: 'center',
columnLabel: '上传人',
columnHidden: false,
columnImage: false,
columnSortable: false,
sortLv: 0,
status: true,
fixed: '',
columnWidth: 140
}
],
insideInquiry:{
},
insideInquiryList:[],
priceCheckPropertiesList:[],
approvalList:[],
exportData: [],
exportName: '项目报价'+this.dayjs().format('YYYYMMDDHHmmss'),
exportHeader: ["项目报价"],
exportFooter: [],
searchIndex:0,
}
},
methods:{
handleSearch(index){
let params = {
...this.quoteForm,
no: this.no,
size: this.size,
}
this.searchLoading = true
queryQuotePage(params).then(({data})=>{
if (data && data.code === 0){
this.dataList = data.rows
this.total = data.total
if (this.dataList[0] !== undefined){
this.handleSelect(this.dataList[0])
}
// if (index !== undefined){
// this.handleSelect(this.dataList[index])
// }
}else {
this.$message.error(data.msg)
}
this.searchLoading = false
}).catch(error=>{
this.$message.error(error)
this.searchLoading = false
})
},
handleSelect(row){
if (row){
this.currentQuote = {...row}
}else {
this.currentQuote = {}
}
},
handleSave(row){
this.$nextTick(()=>{
if (this.$refs.saveForm){
this.$refs.saveForm.clearValidate();
}
})
if (row){
this.saveQuote = {
...row
}
}else {
this.saveQuote = {
...this.quote,
buNo:'*',
site:this.$store.state.user.site
}
this.$nextTick(()=>{
this.saveQuote.buId = this.userBuList.length > 0? this.userBuList[0].id:null;
})
}
this.saveVisible = true
},
handleSizeChange(size){
this.size = size
this.handleSearch();
},
handlePageChange(no) {
this.no = no
this.handleSearch();
},
handleQueryBu(){
let params = {
username: this.$store.state.user.name,
}
// getSiteAndBuByUserName(params).then(({data}) => {
// if (data && data.code === 0) {
// this.userBuList = data.rows
// }else {
// this.$message.warning(data.msg)
// }
// }).catch((error)=>{
// this.$message.error(error)
// })
},
handleSaveOrUpdateQuote(){
this.$refs.saveForm.validate((valid,obj) => {
if (valid){
if (this.saveQuote.id){
this.handleUpdateQuote();
}else {
this.handleSaveQuote();
}
}else {
let i = 1;
for (let key in obj){
this.$message.warning(obj[key][0].message)
if (i === 1){
return
}
i++;
}
}
})
},
handleSaveQuote(){
let params = {
...this.saveQuote,
status: '草稿',
action: 'Y',
createBy: this.$store.state.user.name,
}
this.saveLoading = true
saveQuote(params).then(({data})=>{
if (data && data.code === 0){
this.saveVisible = false
this.quoteForm.quoteVersionNo = data.quoteVersionNo
this.$message.success(data.msg)
}else {
this.$message.warning(data.msg)
}
this.handleSearch(0);
this.saveLoading = false
}).catch((error)=>{
this.$message.error(error)
this.saveLoading = false
})
},
handleUpdateQuote(){
let params = {
...this.saveQuote,
updateBy: this.$store.state.user.name,
}
this.saveLoading = true
updateQuote(params).then(({data})=>{
if (data && data.code === 0){
this.saveVisible = false
this.currentQuote = {
...this.currentQuote
}
this.$message.success(data.msg)
}else {
this.$message.warning(data.msg)
}
this.handleSearch();
this.saveLoading = false
}).catch((error)=>{
this.$message.error(error)
this.saveLoading = false
})
},
handleRemove(row){
this.$confirm('确认删除该报价信息吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
this.handleRemoveQuote(row)
}).catch(() => {
})
},
handleUpdateStatus(row){
let params = {
...row
}
updateQuoteStatus(params).then(({data})=>{
if (data && data.code === 0){
this.$message.success(data.msg)
this.handleSearch();
this.currentQuote = {
...row
}
}else {
this.$message.warning(data.msg)
}
}).catch((error)=>{
this.$message.error(error)
})
},
handleQueryById(row){
this.saveQuote = {
...row
}
this.detailFlag = true;
this.saveVisible = true;
},
handleRemoveQuote(row){
let params = {
id: row.id,
}
removeQuote(params).then(({data})=>{
if (data && data.code === 0){
this.$message.success(data.msg)
if (row.id === this.currentQuote.id){
this.handleSearch(0);
}else {
this.handleSearch();
}
}else {
this.$message.warning(data.msg)
}
}).catch((error)=>{
this.$message.error(error)
})
},
customerNoBlur(){
let params = {
site:this.$store.state.user.site,
customerNo:this.saveQuote.customerNo
}
queryCustomer(params).then(({data})=>{
if (data && data.code === 0 ) {
if (data.rows && data.rows.length === 1){
this.saveQuote.customerDesc = data.rows[0].customerDesc
}else {
this.saveQuote.customerDesc = ''
}
}else {
this.$message.warning(data.msg)
}
}).catch((error)=>{
this.$message.error(error)
})
},
projectNoBlur(){
let params = {
site:this.$store.state.user.site,
customerId:this.saveQuote.customerNo,
projectId:this.saveQuote.projectNo
}
queryProjectByCustomer(params).then(({data})=>{
if (data && data.code === 0 ){
if (data.rows && data.rows.length === 1){
this.saveQuote.projectDesc = data.rows[0].projectName
this.saveQuote.finalCustomerNo = data.rows[0].finalCustomerId
this.saveQuote.finalCustomerDesc = data.rows[0].finalCustomerName
}else {
this.saveQuote.projectDesc = ''
this.saveQuote.finalCustomerNo = ''
this.saveQuote.finalCustomerDesc = ''
}
}else {
this.$message.warning(data.msg)
}
}).catch((error)=>{
this.$message.error(error)
})
},
handleRowClick(row){
this.currentQuote = {...row}
},
userDblClick(row){
if (this.quoterVisible){
this.saveQuote.quoter = row.username
this.quoterVisible = false
}else if (this.purchaseVisible){
this.saveQuote.purchase = row.username
this.purchaseVisible = false
}
this.userVisible = false
},
handleQuoterClick(){
this.userTitle = '报价专员'
this.user.username = this.saveQuote.quoter
this.user.userDisplay = ''
this.user.active = ''
this.user.buId = this.saveQuote.buId
this.user.roleNo = 'QUOTER'
this.quoterVisible = true
this.handleQueryQuoteRoleUser();
this.userVisible = true
},
handlePurchaseClick(){
this.userTitle = '采购专员'
this.user.username = this.saveQuote.purchase
this.user.userDisplay = ''
this.user.active = ''
this.user.buId = this.saveQuote.buId
this.user.roleNo = 'PURCHASE'
this.purchaseVisible = true
this.handleQueryQuoteRoleUser();
this.userVisible = true
},
handleQueryQuoteRoleUser(){
let params = {
...this.user,
}
this.userDataList = []
queryQuoteRoleUser(params).then(({data})=>{
if (data && data.code === 0){
this.userDataList = data.rows
}else {
this.$message.warning(data.msg)
}
}).catch((error)=>{
this.$message.error(error)
})
},
getBaseList(val){
this.tagNo = val
this.$nextTick(() => {
let strVal = ''
let conSql = ''
if (val === 102) {
strVal = this.saveQuote.customerNo
}
if (val === 104) {
strVal = this.saveQuote.projectNo
conSql = " and customer_id = '" + this.saveQuote.customerNo + "'"
}
if (val === 2000) {
strVal = this.saveQuote.purchase
conSql = " and b.site = '" + this.$store.state.user.site + "'"
}
if (val === 2002) {
strVal = this.saveQuote.quoter
conSql = " and b.site = '" + this.$store.state.user.site + "'"
}
this.$refs.baseList.init(val, strVal, conSql)
})
},
getBaseData(val){
switch (this.tagNo){
case 102:
if (this.saveQuote.customerNo !== val.Customer_no) {
this.saveQuote.projectNo = '';
this.saveQuote.projectDesc = '';
}
this.saveQuote.customerNo = val.Customer_no
this.saveQuote.customerDesc = val.Customer_desc
break;
case 104:
this.saveQuote.projectNo = val.project_id
this.saveQuote.projectDesc = val.project_name
break;
case 2000:
this.saveQuote.purchase = val.username
this.saveQuote.purchaseName = val.user_display
break
case 2002:
this.saveQuote.quoter = val.username
this.saveQuote.quoterName = val.user_display
break;
}
},
handleQueryByIds(){
let params = {
ids:this.$route.params.ids,
no:this.no,
size:this.size,
createBy:this.$store.state.user.name,
}
queryQuotePage(params).then(({data})=>{
if (data && data.code === 0){
this.dataList = data.rows
this.total = data.total
if (this.total > 0){
this.currentQuote = {...this.dataList[0]}
}else {
this.currentQuote = {}
}
}else {
this.$message.error(data.msg)
}
this.searchLoading = false
}).catch(error=>{
this.$message.error(error)
this.searchLoading = false
})
},
handleInquiryBlur(){
let params = {
site:this.$store.state.user.site,
quotationNo:this.saveQuote.insideInquiryNo,
}
searchQuotationByQuotationNo(params).then(({data}) => {
if (data && data.code === 0){
if (data.data.length === 1){
this.dblclickInsideInquiry(data.data[0])
}
}
})
},
handleAgainQuote(row){
let params = {
id: row.id,
createBy: this.$store.state.user.name,
}
this.queryLoading = true
againQuote(params).then(({data}) => {
if (data && data.code === 0) {
this.$message.success(data.msg)
this.handleSearch();
} else {
this.$message.warning(data.msg)
this.queryLoading = false
}
}).catch((error) => {
this.$message.error(error)
this.queryLoading = false
})
},
clearModalData(field){
this.$set(this.saveQuote,field,'')
},
handleQueryInquiry(){
this.insideInquiry = {
site:this.$store.state.user.site,
quotationNo:this.saveQuote.insideInquiryNo,
quotationBatchNo:'',
quotationItemNo:'',
testPartNo:'',
partName:'',
quotationStatus:'审批中',
}
this.searchInsideInquiry();
this.insideInquiryVisible = true
},
dblclickInsideInquiry(row){
this.saveQuote.insideInquiryNo = row.quotationNo
this.saveQuote.customerNo = row.customerNo
this.saveQuote.customerDesc = row.customerDesc
this.saveQuote.projectNo = row.projectId
this.saveQuote.projectDesc = row.projectName
this.saveQuote.quoter = row.quoter
this.saveQuote.quoterName = row.quoterName
this.saveQuote.finalCustomerNo = row.finalCustomerId
this.saveQuote.finalCustomerDesc = row.finalCustomerName
this.saveQuote.purchase = row.tracker
this.saveQuote.purchaseName = row.trackerName
this.insideInquiryVisible = false
},
searchInsideInquiry(){
searchQuotationByQuotationNo(this.insideInquiry).then(({data}) => {
if (data && data.code === 0){
this.insideInquiryList = data.data;
}
})
},
getPriceCheckProperties() {
if (!this.currentQuote && !this.currentQuote.insideInquiryNo){
this.priceCheckPropertiesList = []
return
}
let params = {
site: this.saveQuote.site,
quotationNo: this.currentQuote.insideInquiryNo
}
getPriceCheckPropertiesList(params).then(({data}) => {
if (data && data.code === 0) {
this.priceCheckPropertiesList = data.rows
} else {
this.$message.warning(data.msg)
}
}).catch((error) => {
this.$message.error(error)
})
},
// 查询审批信息
getApprovalList () {
let tempData = {
site: this.$store.state.user.site,
menuId: this.$route.meta.menuId,
documentNo: this.currentQuote.quoteVersionNo
}
getApprovalList(tempData).then(({data}) => {
if (data && data.code === 0) {
this.approvalList = data.rows
} else {
this.approvalList = []
}
})
},
fields() {
let json = "{"
this.columns.forEach((item, index) => {
if (index === this.columns.length - 1) {
json += "\"" + item.columnLabel + "\"" + ":" + "\"" + item.columnProp + "\""
} else {
json += "\"" + item.columnLabel + "\"" + ":" + "\"" + item.columnProp + "\"" + ","
}
})
json += "}"
return eval("(" + json + ")")
},
createExportData() {
return this.dataList;
},
},
created() {
if (this.isMenu && this.searchIndex === 0){
this.quoteForm = {
...this.quote,
site: this.$store.state.user.site,
createBy: this.$store.state.user.name,
}
this.handleQueryBu();// 查询 BU
this.handleSearch(0);// 查询报价信息
}
this.searchIndex++;
},
watch:{
'quoteForm.customerNo'(newVal, oldVal){
this.quoteForm.customerNo = newVal.toUpperCase()
},
'quoteForm.projectNo'(newVal, oldVal){
this.quoteForm.projectNo = newVal.toUpperCase()
},
'quoteForm.quoteNo'(newVal, oldVal){
this.quoteForm.quoteNo = newVal.toUpperCase()
},
'saveQuote.customerNo'(newVal, oldVal){
if (newVal){
this.saveQuote.customerNo = newVal.toUpperCase()
}else {
this.saveQuote.customerDesc = ''
this.saveQuote.projectNo = ''
this.saveQuote.projectDesc = ''
}
},
'saveQuote.projectNo'(newVal, oldVal){
if (newVal){
this.saveQuote.projectNo = newVal.toUpperCase()
this.projectNoBlur();
}else {
this.saveQuote.projectDesc = ''
this.saveQuote.finalCustomerNo = ''
this.saveQuote.finalCustomerDesc = ''
}
},
'saveQuote.quoter'(newVal, oldVal){
if (!newVal){
this.saveQuote.quoterName = ''
}
},
'saveQuote.purchase'(newVal, oldVal){
if (!newVal){
this.saveQuote.purchaseName = ''
}
},
saveVisible(newVal, oldVal){
if (newVal === false){
this.detailFlag = false;
}
},
'saveQuote.currency'(newVal, oldVal){
this.saveQuote.currency = newVal.toUpperCase()
},
'currentQuote'(newVal, oldVal){
if (newVal && this.isMenu){
this.getPriceCheckProperties();
this.getApprovalList();
}
},
projectNo(newVal, oldVal){
if (newVal && !this.isMenu){
this.quoteForm.projectNo = newVal.toUpperCase()
this.quoteForm.site = this.$store.state.user.site
this.handleSearch(0);
}else {
this.dataList = []
this.total = 0
this.no = 1
}
},
},
activated() {
if (!this.isMenu){
return
}
if (this.$route.params.ids){
this.handleQueryByIds();
}else if (this.$route.params.type === 'project'){
this.quoteForm = {
...this.quote,
site: this.$store.state.user.site,
quoteVersionNo: this.$route.params.quoteVersionNo,
}
this.handleSearch(0);
}
}
}
</script>
<template>
<div>
<download-excel v-if="!isMenu"
:fields="fields()"
:data="exportData"
type="xls"
:name="exportName"
:header="exportHeader"
:footer="exportFooter"
:fetch="createExportData"
worksheet="导出信息"
class="el-button el-button--primary el-button--medium">
{{ '导出' }}
</download-excel>
<quote-search v-if="isMenu" v-model:quote="quoteForm" @search="handleSearch" @save="handleSave"></quote-search>
<quote-table v-loading="searchLoading"
:current-row="currentQuote"
:columns="columns"
style="margin-top: 5px"
:is-menu="isMenu"
@save="handleSave"
@remove="handleRemove"
@rowClick="handleRowClick"
@updateStatus="handleUpdateStatus"
@queryById="handleQueryById"
@againQuote="handleAgainQuote"
:data-list="dataList"
:height="height">
</quote-table>
<el-pagination @size-change="handleSizeChange"
@current-change="handlePageChange"
:current-page="no"
:page-sizes="[20, 50, 100, 200, 500]"
:page-size="size"
:total="total"
layout="total,sizes, prev, pager, next, jumper">
</el-pagination>
<el-tabs v-if="isMenu" v-model="activeName" type="border-card" style="margin-top: 0;" class="customer-tab">
<el-tab-pane label="报价明细" name="detail">
<quote-group-detail :quote="currentQuote" :auth-flag="false" :height="'28vh'"></quote-group-detail>
</el-tab-pane>
<el-tab-pane label="条目明细" name="detail2">
<quote-detail v-if="activeName === 'detail2'" :save-auth="false" :quote="currentQuote" :auth-flag="false" :height="'30vh'"></quote-detail>
</el-tab-pane>
<el-tab-pane label="项目信息" name="quotation_project_information">
<quotation-project-information height="31vh" :quotation-header="currentQuote"></quotation-project-information>
</el-tab-pane>
<el-tab-pane label="客户信息" name="quotation_customer_information">
<customer-info height="31vh" :project="currentQuote"></customer-info>
</el-tab-pane>
<el-tab-pane label="客户联系人" name="quotation_customer_contact">
<quotation-customer-contact height="28vh" :quotation-header="currentQuote"></quotation-customer-contact>
</el-tab-pane>
<el-tab-pane label="报价-附件信息" name="quote_oss">
<oss-components
:save-visible="isAuth('5011:tab6:save')"
:download-visible="isAuth('5011:tab6:download')"
:remove-visible="isAuth('5011:tab6:remove')"
:preview-visible="isAuth('5011:tab6:preview')"
label="报价单号"
height="28vh"
:columns="ossColumns"
:order-ref1="currentQuote.site?currentQuote.site:''"
:order-ref2="currentQuote.quoteVersionNo?currentQuote.quoteVersionNo:''">
</oss-components>
</el-tab-pane>
<el-tab-pane label="询价-基本信息" name="request">
<price-check-properties ref="tabProperties"
v-model:data-list="priceCheckPropertiesList"
height="31vh"></price-check-properties>
</el-tab-pane>
<el-tab-pane label="询价-附件信息" name="oss">
<oss-components
:save-visible="isAuth('102001001:tab6:save')"
:download-visible="isAuth('102001001:tab6:download')"
:remove-visible="isAuth('102001001:tab6:remove')"
:preview-visible="isAuth('102001001:tab6:preview')"
label="询价单号"
height="28vh"
:columns="ossColumns"
:order-ref1="currentQuote.site"
:order-ref2="currentQuote.insideInquiryNo?currentQuote.insideInquiryNo.split('-')[0]:''">
</oss-components>
</el-tab-pane>
<!-- 审批信息 -->
<el-tab-pane label="审批信息" name="approvalInformation">
<approval-information ref="approvalTable" v-model:data-list="approvalList" :height="300"></approval-information>
</el-tab-pane>
</el-tabs>
<el-dialog :title="saveQuote.id? '报价信息:'+ saveQuote.quoteVersionNo : '报价信息'" v-drag :close-on-click-modal="false" :visible.sync="saveVisible" width="500px" >
<el-form ref="saveForm" :model="saveQuote" :rules="saveRules" label-position="top" label-width="100px">
<el-row :gutter="10">
<el-col :span="8">
<el-form-item label="内部询价单号" prop="insideInquiryNo" :show-message="false">
<span slot="label" v-if="!detailFlag">
<a @click="handleQueryInquiry">内部询价单号</a>
</span>
<el-input v-model="saveQuote.insideInquiryNo" readonly @change="handleInquiryBlur" :disabled="detailFlag"></el-input>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="报价日期" prop="quoteDate" :show-message="false">
<el-date-picker style="width: 100%" :disabled="detailFlag" v-model="saveQuote.quoteDate" type="date" value-format='yyyy-MM-dd' format='yyyy-MM-dd'></el-date-picker>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="客户询价单号" prop="customerInquiryNo" :show-message="false">
<el-input v-model="saveQuote.customerInquiryNo" :disabled="detailFlag"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="10">
<el-col :span="8">
<el-form-item label="客户编码" prop="customerNo" :show-message="false">
<span slot="label" v-if="!detailFlag">
<a @click="getBaseList(102)">客户编码</a>
</span>
<el-input v-model="saveQuote.customerNo" :disabled="detailFlag" @change="customerNoBlur"></el-input>
</el-form-item>
</el-col>
<el-col :span="16">
<el-form-item label="客户描述" prop="customerDesc" :show-message="false">
<el-input v-model="saveQuote.customerDesc" disabled></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="10">
<el-col :span="8">
<el-form-item label="项目编码" prop="projectNo" :show-message="false">
<span slot="label" v-if="saveQuote.customerNo && !detailFlag">
<a @click="getBaseList(104)">项目编码</a>
</span>
<el-input v-model="saveQuote.projectNo" :disabled="!saveQuote.customerNo || detailFlag"></el-input>
</el-form-item>
</el-col>
<el-col :span="16">
<el-form-item label="项目描述" prop="projectDesc" :show-message="false">
<el-input v-model="saveQuote.projectDesc" disabled></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="10">
<el-col :span="8">
<el-form-item label="终端客户编码" prop="finalCustomerNo" :show-message="false">
<el-input v-model="saveQuote.finalCustomerNo" disabled></el-input>
</el-form-item>
</el-col>
<el-col :span="16">
<el-form-item label="终端客户描述" prop="finalCustomerDesc" :show-message="false">
<el-input v-model="saveQuote.finalCustomerDesc" disabled></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="10">
<el-col :span="8">
<el-form-item label="报价专员" prop="quoter" :show-message="false">
<a slot="label" v-if="!detailFlag" @click="getBaseList(2002)">报价专员</a>
<el-input v-model="saveQuote.quoterName" readonly :disabled="detailFlag">
<span slot="suffix" v-show="saveQuote.quoter && !detailFlag" @click="clearModalData('quoter')"><i class="el-icon-circle-close" style="margin-left: 5px;cursor: pointer;"></i></span>
</el-input>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="采购专员" prop="purchase" :show-message="false">
<a slot="label" v-if="!detailFlag" @click="getBaseList(2000)">采购专员</a>
<el-input v-model="saveQuote.purchaseName" readonly :disabled="detailFlag">
<span slot="suffix" v-show="saveQuote.purchase && !detailFlag" @click="clearModalData('purchase')"><i class="el-icon-circle-close" style="margin-left: 5px;cursor: pointer;"></i></span>
</el-input>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="备注" prop="remark" class="auto" :show-message="false">
<el-input v-model="saveQuote.remark" :disabled="detailFlag" :rows="3" type="textarea"></el-input>
</el-form-item>
</el-col>
</el-row>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" v-if="!detailFlag" @click="handleSaveOrUpdateQuote">确 定</el-button>
<el-button @click="saveVisible = false">取 消</el-button>
</div>
</el-dialog>
<el-dialog title="询价申请" v-drag :visible.sync="insideInquiryVisible" width="1000px" modal-append-to-body :close-on-click-modal="false">
<el-form label-position="top"
:model="insideInquiry"
size="mini">
<el-row :gutter="10">
<el-col :span="3">
<el-form-item label="询价单号">
<el-input v-model="insideInquiry.quotationNo" clearable/>
</el-form-item>
</el-col>
<el-col :span="3">
<el-form-item label="申请批次号">
<el-input v-model="insideInquiry.quotationBatchNo" clearable></el-input>
</el-form-item>
</el-col>
<el-col :span="3">
<el-form-item label="序号">
<el-input v-model="insideInquiry.quotationItemNo" clearable></el-input>
</el-form-item>
</el-col>
<el-col :span="3">
<el-form-item label="状态">
<el-select v-model="insideInquiry.quotationStatus" style="width:100%">
<el-option label="全部" value=""></el-option>
<el-option label="草稿" value="草稿"></el-option>
<el-option label="审批中" value="审批中"></el-option>
<el-option label="已完成" value="已完成"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="2">
<el-form-item label=" ">
<el-button type="primary" style="padding: 3px 12px" @click="searchInsideInquiry">查询</el-button>
</el-form-item>
</el-col>
</el-row>
</el-form>
<el-table :data="insideInquiryList" height="300" stripe border @row-dblclick="dblclickInsideInquiry">
<el-table-column prop="quotationNo" header-align="center" min-width="120" label="询价单号"/>
<el-table-column prop="quotationBatchNo" header-align="center" label="询价批次号"/>
<el-table-column width="60" align="center" header-align="center" prop="quotationItemNo" label="询价序号"/>
<el-table-column prop="projectName" header-align="center" label="项目名称"/>
<el-table-column prop="quotationStatus" header-align="center" label="状态"/>
<el-table-column label="终端客户编码" header-align="center" prop="finalCustomerId"/>
<el-table-column label="终端客户名称" header-align="center" prop="finalCustomerName"/>
</el-table>
<el-footer style="height:30px;margin-top: 20px;text-align:center">
<el-button type="primary" @click="insideInquiryVisible = false">关闭</el-button>
</el-footer>
</el-dialog>
<choose-list ref="baseList" @getBaseData="getBaseData"></choose-list>
</div>
</template>
<style scoped>
.auto /deep/ .el-form-item__content{
height: auto;
line-height: 1.5;
}
</style>