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.
143 lines
3.8 KiB
143 lines
3.8 KiB
<script>
|
|
import {queryQuoteDetailReportByTP} from "../../../../api/quote/quoteDetail";
|
|
|
|
export default {
|
|
name: "tpCost",
|
|
props:{
|
|
quoteDetail:{
|
|
type:Object,
|
|
required:true
|
|
},
|
|
height:{
|
|
type:[String,Number],
|
|
default:300
|
|
}
|
|
},
|
|
data(){
|
|
return{
|
|
queryLoading:false,
|
|
dataList:[],
|
|
}
|
|
},
|
|
methods:{
|
|
handleQuery(){
|
|
let params = {
|
|
id:this.quoteDetail.id
|
|
}
|
|
this.queryLoading = true;
|
|
queryQuoteDetailReportByTP(params).then(({data})=>{
|
|
if (data && data.code === 0){
|
|
this.dataList = data.rows
|
|
}else {
|
|
this.queryLoading = false;
|
|
}
|
|
this.queryLoading = false;
|
|
}).catch((error)=>{
|
|
this.queryLoading = false;
|
|
this.$message.error(error);
|
|
})
|
|
},
|
|
alignIsNan(key,arr){
|
|
for (let i = 0; i < arr.length; i++) {
|
|
let item = arr[i];
|
|
if (isNaN(item[key])){
|
|
return 'left';
|
|
}
|
|
}
|
|
return 'right';
|
|
},
|
|
flexColumnWidth (str, arr1, flag = 'max') {
|
|
str = str + ''
|
|
let columnContent = ''
|
|
if (flag === 'equal') {
|
|
// 获取该列中第一个不为空的数据(内容)
|
|
for (let i = 0; i < arr1.length; i++) {
|
|
if (arr1[i][str].length > 0) {
|
|
// console.log('该列数据[0]:', arr1[0][str])
|
|
columnContent = arr1[i][str]
|
|
break
|
|
}
|
|
}
|
|
} else {
|
|
// 获取该列中最长的数据(内容)
|
|
let index = 0
|
|
for (let i = 0; i < arr1.length; i++) {
|
|
if (arr1[i][str] === null) {
|
|
continue
|
|
}
|
|
const now_temp = arr1[i][str] + ''
|
|
const max_temp = arr1[index][str] + ''
|
|
if (now_temp.length > max_temp.length) {
|
|
index = i
|
|
}
|
|
}
|
|
columnContent = arr1[index][str]+''
|
|
}
|
|
let flexWidth = 0
|
|
if (columnContent && columnContent.length > 0){
|
|
for (const char of columnContent) {
|
|
if ((char >= 'A' && char <= 'Z') || (char >= 'a' && char <= 'z')) {
|
|
// 如果是英文字符,为字符分配8个单位宽度
|
|
flexWidth += 8
|
|
} else if (char >= '\u4e00' && char <= '\u9fa5') {
|
|
// 如果是中文字符,为字符分配15个单位宽度
|
|
flexWidth += 15
|
|
} else {
|
|
// 其他种类字符,为字符分配8个单位宽度
|
|
flexWidth += 8
|
|
}
|
|
}
|
|
}
|
|
let flexWidthStr = 0
|
|
for (const char of str){
|
|
if ((char >= 'A' && char <= 'Z') || (char >= 'a' && char <= 'z')) {
|
|
// 如果是英文字符,为字符分配8个单位宽度
|
|
flexWidthStr += 8
|
|
} else if (char >= '\u4e00' && char <= '\u9fa5') {
|
|
// 如果是中文字符,为字符分配15个单位宽度
|
|
flexWidthStr += 15
|
|
} else {
|
|
// 其他种类字符,为字符分配8个单位宽度
|
|
flexWidthStr += 8
|
|
}
|
|
}
|
|
if (flexWidthStr > flexWidth){
|
|
flexWidth = flexWidthStr
|
|
}
|
|
if (flexWidth < 120) {
|
|
// 设置最小宽度
|
|
flexWidth = 120
|
|
}
|
|
return flexWidth + 'px'
|
|
}
|
|
},
|
|
watch:{
|
|
quoteDetail(newVal,oldVal){
|
|
if (newVal){
|
|
this.handleQuery();
|
|
}else {
|
|
this.dataList = [];
|
|
}
|
|
},
|
|
},
|
|
computed:{
|
|
objectKeys:{
|
|
get(){
|
|
return Object.keys(this.dataList[0] || {});
|
|
}
|
|
}
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<template>
|
|
<div>
|
|
<el-table :data="dataList" border :height="height" v-loading="queryLoading">
|
|
<el-table-column v-for="key in objectKeys" :align="alignIsNan(key,dataList)" header-align="center" :width="flexColumnWidth(key,dataList)" :key="key" :prop="key" :label="key"></el-table-column>
|
|
</el-table>
|
|
</div>
|
|
</template>
|
|
|
|
<style scoped>
|
|
|
|
</style>
|