<template>
|
<basicContainer>
|
<avue-crud
|
:option="option"
|
:table-loading="pageF.loading"
|
:data="tableData"
|
:page="page"
|
:permission="permissionList"
|
:before-open="beforeOpen"
|
v-model="form" v-model:search="queryParams"
|
ref="crudRef"
|
@row-update="rowUpdate"
|
@row-save="rowSave"
|
@refresh-change="refreshChange"
|
@row-del="rowDel"
|
@search-change="searchChange"
|
@search-reset="searchReset"
|
@selection-change="selectionChange"
|
@current-change="currentChange"
|
@size-change="sizeChange"
|
@on-load="onLoad"
|
>
|
<template #menu-left>
|
<el-button
|
type="success"
|
icon="Edit"
|
:disabled="pageF.single"
|
v-hasPermi="['tms:tmsQuoteDetail:edit']"
|
@click="handleUpdate">修改
|
</el-button>
|
<el-button
|
type="danger"
|
icon="Delete"
|
:disabled="pageF.multiple"
|
@click="handleDelete"
|
v-hasPermi="['tms:tmsQuoteDetail:remove']"
|
>删除
|
</el-button>
|
<el-button
|
type="warning"
|
plain
|
icon="Download"
|
@click="handleExport"
|
v-hasPermi="['tms:tmsQuoteDetail:export']"
|
>导出
|
</el-button>
|
<el-button
|
type="default"
|
plain
|
icon="Back"
|
@click="handleBack"
|
>返回
|
</el-button>
|
</template>
|
<template #items-form="scope">
|
<avue-crud
|
:option="{...itemsTableOption,selection: !scope.disabled}" @selection-change="selectionChange2"
|
|
:data="form.items" ref="itemsCrudRef"
|
>
|
<template #freightPrice="{row}">
|
<el-input v-model="row.freightPrice" :min="1" :disabled="scope.disabled || !rowKeys.includes(row.rowKey)" type="number" placeholder="请输入金额"></el-input>
|
</template>
|
<template #currency="{row}">
|
<el-radio-group v-model="row.currency" :disabled="scope.disabled || !rowKeys.includes(row.rowKey)">
|
<el-radio
|
v-for="dict in sys_currency"
|
:key="dict.value"
|
:label="dict.value"
|
>{{ dict.label }}</el-radio>
|
</el-radio-group>
|
</template>
|
<template #taxRate="{row}">
|
<el-input v-model="row.taxRate" :disabled="scope.disabled || !rowKeys.includes(row.rowKey)" type="number" placeholder="请输入税点%"></el-input>
|
</template>
|
|
<template #segment1FreightQuote="{row}">
|
<el-input v-model="row.segment1FreightQuote" @change="(value:any)=>quoteChange(value,row)" :min="1" :disabled="scope.disabled || !rowKeys.includes(row.rowKey)" type="number" placeholder="请输入一段运费报价"></el-input>
|
</template>
|
<template #segment1Currency="{row}">
|
<el-radio-group v-model="row.segment1Currency" @change="(value:any)=>quoteChange(value,row)" :disabled="scope.disabled || !rowKeys.includes(row.rowKey)">
|
<el-radio
|
v-for="dict in sys_currency"
|
:key="dict.value"
|
:label="dict.value"
|
>{{ dict.label }}</el-radio>
|
</el-radio-group>
|
</template>
|
<template #segment1TaxRate="{row}">
|
<el-input v-model="row.segment1TaxRate" @change="(value:any)=>quoteChange(value,row)" :disabled="scope.disabled || !rowKeys.includes(row.rowKey)" type="number" placeholder="请输入一段运费税点%"></el-input>
|
</template>
|
|
<template #segment2FreightQuote="{row}">
|
<el-input v-model="row.segment2FreightQuote" :min="1" @change="(value:any)=>quoteChange(value,row)" :disabled="scope.disabled || !rowKeys.includes(row.rowKey)" type="number" placeholder="请输入二段运费报价"></el-input>
|
</template>
|
<template #segment2Currency="{row}">
|
<el-radio-group v-model="row.segment2Currency" @change="(value:any)=>quoteChange(value,row)" :disabled="scope.disabled || !rowKeys.includes(row.rowKey)">
|
<el-radio
|
v-for="dict in sys_currency"
|
:key="dict.value"
|
:label="dict.value"
|
>{{ dict.label }}</el-radio>
|
</el-radio-group>
|
</template>
|
<template #segment2TaxRate="{row}">
|
<el-input v-model="row.segment2TaxRate" @change="(value:any)=>quoteChange(value,row)" :disabled="scope.disabled || !rowKeys.includes(row.rowKey)" type="number" placeholder="请输入二段运费税点%"></el-input>
|
</template>
|
|
<template #totalFreight="{row}">
|
<div>
|
<div v-if="row.totalFreightCny">{{row.totalFreightCny}}人民币</div>
|
<div v-if="row.totalFreightHkd">{{row.totalFreightHkd}}港币</div>
|
</div>
|
</template>
|
|
|
</avue-crud>
|
</template>
|
</avue-crud>
|
|
|
</basicContainer>
|
</template>
|
|
<script setup name="tmsQuoteDetail" lang="ts">
|
import {
|
TmsQuoteDetailI,
|
addTmsQuoteDetail,
|
delTmsQuoteDetail,
|
exportTmsQuoteDetail,
|
getTmsQuoteDetail,
|
listTmsQuoteDetail,
|
updateTmsQuoteDetail
|
} from "@/api/tms/tmsQuoteDetail";
|
import useCurrentInstance from "@/utils/useCurrentInstance";
|
import {computed, reactive, ref, toRefs,onBeforeMount} from "vue";
|
import {PagesInterface, PageQueryInterface} from "@/utils/globalInterface";
|
import {usePagePlus} from "@/hooks/usePagePlus";
|
import {hasPermission} from "@/utils/permissionUtils";
|
import {getTmsServiceProvider, listTmsServiceProvider} from "@/api/tms/tmsServiceProvider";
|
import {getArea, getCity, getProvince, getStreet} from "@/api/tms/tmsRegion";
|
import {useRoute,useRouter } from "vue-router";
|
import {randomId} from "@smallwei/avue";
|
|
const {proxy} = useCurrentInstance();
|
const crudRef = ref();
|
const route = useRoute();
|
const router = useRouter();
|
|
const {vehicle_type,sys_currency} =
|
proxy.useDict("vehicle_type","sys_currency");
|
|
const permissionList = computed(() => {
|
return {
|
addBtn: hasPermission(["tms:tmsQuoteDetail:add"]),
|
delBtn: hasPermission(["tms:tmsQuoteDetail:remove"]),
|
editBtn: hasPermission(["tms:tmsQuoteDetail:edit"]),
|
viewBtn: hasPermission(["tms:tmsQuoteDetail:query"]),
|
}
|
})
|
|
const data = reactive({
|
form: <TmsQuoteDetailI>{},
|
queryParams: <TmsQuoteDetailI & PageQueryInterface>{},
|
page: <PagesInterface>{
|
pageSize: 10,
|
total: 0,
|
currentPage: 1,
|
},
|
selectionList: [],
|
selectionList2:<any>[]
|
})
|
const {queryParams, form, page, selectionList,selectionList2} = toRefs(data);
|
const option = ref({
|
pageKey: 'TmsQuoteDetail',
|
rowKey: 'id',
|
labelWidth: 150,
|
dialogWidth:'80%',
|
group:[
|
{
|
label:"基础信息",
|
prop: 'jcxx',
|
column:{
|
systemCode: {
|
label: '系统编号',
|
addDisplay: false,
|
editDisplay: false,
|
viewDisplay: true,
|
},
|
quotePlanCode: {
|
label: '关联报价方案编号',
|
addDisplay: false,
|
editDisplay: false,
|
viewDisplay: true,
|
},
|
|
startRegionCode: {
|
label: '起点行政区域',
|
addDisplay: true,
|
editDisplay: true,dataType: 'string',
|
viewDisplay: true,checkStrictly:true,
|
type:'cascader',
|
rules: [
|
{
|
required: true,
|
message: "起点行政区域不能为空", trigger: "blur"
|
}
|
],
|
lazy: true,
|
props: {
|
label: 'name',
|
value: 'code'
|
},
|
change:({value=[]}:{value:any})=>{
|
if (value && value.length>0){
|
const cascader = crudRef.value?.getPropRef?.('startRegionCode')?.$refs?.temp;
|
console.log('cascader.getCheckedNodes()',cascader.getCheckedNodes())
|
if (cascader.getCheckedNodes() && cascader.getCheckedNodes().length >0){
|
|
form.value.startRegionCode= cascader.getCheckedNodes()[0].pathValues.toString();
|
form.value.startRegion= cascader.getCheckedNodes()[0].text!;
|
form.value.transportRoute = `${form.value.startRegion}->${form.value.endRegion}`;
|
}
|
}
|
},
|
lazyLoad (node:any, resolve:any) {
|
const stopLevel = 3;
|
const level = node.level;
|
const data = node.data || {};
|
const code = data.code;
|
let list:any = [];
|
const callback = () => {
|
resolve((list || []).map((ele:any) => ({
|
...ele,
|
leaf: level >= stopLevel
|
})));
|
};
|
if (level === 0) {
|
getProvince().then(res => {
|
list = res.data || [];
|
callback();
|
});
|
} else if (level === 1) {
|
getCity(code).then(res => {
|
list = res.data ||[];
|
callback();
|
});
|
} else if (level === 2) {
|
getArea(code).then(res => {
|
list = res.data || [];
|
callback();
|
});
|
}else if (level === 3) {
|
getStreet(code).then(res => {
|
list = res.data || [];
|
callback();
|
});
|
} else {
|
callback();
|
}
|
}
|
},
|
// startWarehouse: {
|
// label: '起点仓库',
|
// addDisplay: true,
|
// editDisplay: true,
|
// viewDisplay: true,
|
// type: 'select', dataType: 'string', dicUrl: '/system/dict/data/type/sys_warehouse',
|
//
|
// },
|
endRegionCode: {
|
label: '终点行政区域',
|
addDisplay: true,
|
editDisplay: true,
|
viewDisplay: true,dataType: 'string',
|
type:'cascader',checkStrictly:true,
|
rules: [
|
{
|
required: true,
|
message: "终点行政区域不能为空", trigger: "blur"
|
}
|
],
|
lazy: true,
|
props: {
|
label: 'name',
|
value: 'code'
|
},
|
change:({value=[]}:{value:any})=>{
|
if (value && value.length>0){
|
const cascader = crudRef.value?.getPropRef?.('endRegionCode')?.$refs?.temp;
|
if (cascader.getCheckedNodes() && cascader.getCheckedNodes().length >0){
|
form.value.endRegionCode= cascader.getCheckedNodes()[0].pathValues.toString();
|
form.value.endRegion= cascader.getCheckedNodes()[0].text!;
|
form.value.transportRoute = `${form.value.startRegion}->${form.value.endRegion}`;
|
}
|
}
|
},
|
lazyLoad (node:any, resolve:any) {
|
const stopLevel = 3;
|
const level = node.level;
|
const data = node.data || {};
|
const code = data.code;
|
let list:any = [];
|
const callback = () => {
|
resolve((list || []).map((ele:any) => ({
|
...ele,
|
leaf: level >= stopLevel
|
})));
|
};
|
if (level === 0) {
|
getProvince().then(res => {
|
list = res.data || [];
|
callback();
|
});
|
} else if (level === 1) {
|
getCity(code).then(res => {
|
list = res.data ||[];
|
callback();
|
});
|
} else if (level === 2) {
|
getArea(code).then(res => {
|
list = res.data || [];
|
callback();
|
});
|
}else if (level === 3) {
|
getStreet(code).then(res => {
|
list = res.data || [];
|
callback();
|
});
|
} else {
|
callback();
|
}
|
}
|
},
|
// endWarehouse: {
|
// label: '终点仓库',
|
// addDisplay: true,
|
// editDisplay: true,
|
// viewDisplay: true,
|
// type: 'select', dataType: 'string', dicUrl: '/system/dict/data/type/sys_warehouse',
|
//
|
// },
|
transportRoute: {
|
label: '运输线路',span:24,
|
disabled: true,
|
// type: 'textarea', minRows: 3, maxRows: 5,
|
addDisplay: true,
|
editDisplay: true,
|
viewDisplay: true,
|
hide: false,
|
search: true,
|
rules: [
|
{
|
required: true,
|
message: "运输线路不能为空", trigger: "blur"
|
}
|
],
|
},
|
isSegmentedInvoice: {
|
label: '是否分段开票',value: '1',
|
type: 'radio', dataType: 'string', dicUrl: '/system/dict/data/type/sys_number_is',
|
rules: [
|
{
|
required: true,
|
message: "运费报价不能为空", trigger: "blur"
|
}
|
],
|
change:({value}:{value:any})=>{
|
if (value==1){
|
itemsTableOption.value.column.freightPrice.hide = false;
|
itemsTableOption.value.column.currency.hide = false;
|
itemsTableOption.value.column.taxRate.hide = false;
|
itemsTableOption.value.column.segment1FreightQuote.hide = true;
|
itemsTableOption.value.column.segment1Currency.hide = true;
|
itemsTableOption.value.column.segment1TaxRate.hide = true;
|
itemsTableOption.value.column.segment2FreightQuote.hide = true;
|
itemsTableOption.value.column.segment2Currency.hide = true;
|
itemsTableOption.value.column.segment2TaxRate.hide = true;
|
itemsTableOption.value.column.totalFreight.hide = true;
|
|
|
option.value.group.forEach((item:any) =>{
|
if (item.prop == 'jcxx'){
|
item.column.freightPrice.editDisplay = true;
|
item.column.freightPrice.viewDisplay = true;
|
item.column.currency.editDisplay = true;
|
item.column.currency.viewDisplay = true;
|
item.column.taxRate.editDisplay = true;
|
item.column.taxRate.viewDisplay = true;
|
|
item.column.segment1FreightQuote.editDisplay = false;
|
item.column.segment1FreightQuote.viewDisplay = false;
|
|
item.column.segment1Currency.editDisplay = false;
|
item.column.segment1Currency.viewDisplay = false;
|
|
item.column.segment1TaxRate.editDisplay = false;
|
item.column.segment1TaxRate.viewDisplay = false;
|
|
item.column.segment2FreightQuote.editDisplay = false;
|
item.column.segment2FreightQuote.viewDisplay = false;
|
|
item.column.segment2Currency.editDisplay = false;
|
item.column.segment2Currency.viewDisplay = false;
|
|
item.column.segment2TaxRate.editDisplay = false;
|
item.column.segment2TaxRate.viewDisplay = false;
|
|
item.column.totalFreightCny.editDisplay = false;
|
item.column.totalFreightCny.viewDisplay = false;
|
|
item.column.totalFreightHkd.editDisplay = false;
|
item.column.totalFreightHkd.viewDisplay = false;
|
|
}
|
})
|
|
}else{
|
itemsTableOption.value.column.freightPrice.hide = true;
|
itemsTableOption.value.column.currency.hide = true;
|
itemsTableOption.value.column.taxRate.hide = true;
|
itemsTableOption.value.column.segment1FreightQuote.hide = false;
|
itemsTableOption.value.column.segment1Currency.hide = false;
|
itemsTableOption.value.column.segment1TaxRate.hide = false;
|
itemsTableOption.value.column.segment2FreightQuote.hide = false;
|
itemsTableOption.value.column.segment2Currency.hide = false;
|
itemsTableOption.value.column.segment2TaxRate.hide = false;
|
itemsTableOption.value.column.totalFreight.hide = false;
|
|
option.value.group.forEach((item:any) =>{
|
if (item.prop == 'jcxx'){
|
item.column.freightPrice.editDisplay = false;
|
item.column.freightPrice.viewDisplay = false;
|
item.column.currency.editDisplay = false;
|
item.column.currency.viewDisplay = false;
|
item.column.taxRate.editDisplay = false;
|
item.column.taxRate.viewDisplay = false;
|
|
item.column.segment1FreightQuote.editDisplay = true;
|
item.column.segment1FreightQuote.viewDisplay = true;
|
|
item.column.segment1Currency.editDisplay = true;
|
item.column.segment1Currency.viewDisplay = true;
|
|
item.column.segment1TaxRate.editDisplay = true;
|
item.column.segment1TaxRate.viewDisplay = true;
|
|
item.column.segment2FreightQuote.editDisplay = true;
|
item.column.segment2FreightQuote.viewDisplay = true;
|
|
item.column.segment2Currency.editDisplay = true;
|
item.column.segment2Currency.viewDisplay = true;
|
|
item.column.segment2TaxRate.editDisplay = true;
|
item.column.segment2TaxRate.viewDisplay = true;
|
|
item.column.totalFreightCny.editDisplay = true;
|
item.column.totalFreightCny.viewDisplay = true;
|
|
item.column.totalFreightHkd.editDisplay = true;
|
item.column.totalFreightHkd.viewDisplay = true;
|
|
}
|
})
|
|
|
|
|
|
|
}
|
}
|
},
|
vehicleType: {
|
label: '车型',
|
addDisplay: false,
|
editDisplay: true,
|
viewDisplay: true,
|
type: 'select', dataType: 'string', dicUrl: '/system/dict/data/type/vehicle_type',
|
rules: [
|
{
|
required: true,
|
message: "车型不能为空", trigger: "change"
|
}
|
],
|
},
|
// transportMode: {
|
// label: '运输方式',
|
// addDisplay: true,
|
// editDisplay: true,
|
// viewDisplay: true,
|
// type: 'select', dataType: 'string', dicUrl: '/system/dict/data/type/transport_mode',
|
//
|
// },
|
// routeType: {
|
// label: '线路类型',
|
// addDisplay: true,
|
// editDisplay: true,
|
// viewDisplay: true,
|
// type: 'select', dataType: 'string', dicUrl: '/system/dict/data/type/route_type',
|
//
|
// },
|
freightPrice: {
|
label: '运费报价',
|
addDisplay: false,
|
editDisplay: true,
|
viewDisplay: true,type: 'number',
|
rules: [
|
{
|
required: true,
|
message: "运费报价不能为空", trigger: "blur"
|
}
|
],
|
},
|
currency: {
|
label: '币制',addDisplay: false,
|
type: 'radio', dataType: 'string', dicUrl: '/system/dict/data/type/sys_currency',
|
rules: [
|
{
|
required: true,
|
message: "运费报价不能为空", trigger: "blur"
|
}
|
],
|
},
|
taxRate: {
|
label: '税点%',
|
addDisplay: false,
|
editDisplay: true,
|
viewDisplay: true,type: 'number',
|
rules: [
|
{
|
required: true,
|
message: "taxRate不能为空", trigger: "blur"
|
}
|
],
|
},
|
|
segment1FreightQuote:{
|
label: '一段运费报价', addDisplay: false,
|
editDisplay: true,
|
viewDisplay: true,type: 'number',
|
rules: [
|
{
|
required: true,
|
message: "一段运费报价不能为空", trigger: "blur"
|
}
|
],
|
},
|
segment1Currency:{
|
label: '一段运费币制',addDisplay: false,
|
type: 'radio', dataType: 'string', dicUrl: '/system/dict/data/type/sys_currency',
|
rules: [
|
{
|
required: true,
|
message: "一段运费币制不能为空", trigger: "blur"
|
}
|
],
|
},
|
segment1TaxRate:{
|
label: '一段运费税点%', addDisplay: false,
|
editDisplay: true,
|
viewDisplay: true,type: 'number',
|
rules: [
|
{
|
required: true,
|
message: "一段运费税点不能为空", trigger: "blur"
|
}
|
],
|
},
|
segment2FreightQuote:{
|
label: '二段运费报价', addDisplay: false,
|
editDisplay: true,
|
viewDisplay: true,type: 'number',
|
rules: [
|
{
|
required: true,
|
message: "二段运费报价不能为空", trigger: "blur"
|
}
|
],
|
},
|
segment2Currency:{
|
label: '二段运费币制',addDisplay: false,
|
type: 'radio', dataType: 'string', dicUrl: '/system/dict/data/type/sys_currency',
|
rules: [
|
{
|
required: true,
|
message: "二段运费币制不能为空", trigger: "blur"
|
}
|
],
|
},
|
segment2TaxRate:{
|
label: '二段运费税点%',addDisplay: false,
|
editDisplay: true,
|
viewDisplay: true,type: 'number',
|
rules: [
|
{
|
required: true,
|
message: "二段运费税点不能为空", trigger: "blur"
|
}
|
],
|
},
|
totalFreightCny:{
|
label: '总运费人民币报价', disabled: true, addDisplay: false,
|
editDisplay: true,
|
viewDisplay: true,
|
},
|
totalFreightHkd:{
|
label: '总运费港币报价',disabled: true ,addDisplay: false,
|
editDisplay: true,
|
viewDisplay: true
|
}
|
|
|
|
}
|
},
|
{
|
label: '车型报价',
|
prop: 'cxbj', addDisplay: true,editDisplay: false,viewDisplay: false,
|
column: {
|
items:{
|
label: '',labelWidth:0,span:24,
|
}
|
}
|
},
|
|
{
|
label: '其他信息',
|
prop: 'qtxx',
|
column: {
|
status: {
|
label: '状态',
|
type: 'radio', dicUrl: '/system/dict/data/type/sys_normal_disable',
|
addDisplay: false,dataType:'string',
|
editDisplay: true,
|
viewDisplay: true,
|
hide: false,
|
search: true,
|
rules: [
|
{
|
required: true,
|
message: "状态不能为空", trigger: "blur"
|
}
|
],
|
},
|
createBy: {
|
label: '创建人',
|
addDisplay: false,
|
editDisplay: false,
|
viewDisplay: true,
|
hide: true,
|
search: false,
|
},
|
createTime: {
|
label: '创建时间',
|
type: 'date', valueFormat: 'YYYY-MM-DD',
|
addDisplay: false,
|
editDisplay: false,
|
viewDisplay: true,
|
hide: true,
|
search: false,
|
},
|
updateBy: {
|
label: '更新人',
|
addDisplay: false,
|
editDisplay: false,
|
viewDisplay: true,
|
hide: false,
|
search: false,
|
},
|
updateTime: {
|
label: '更新时间',
|
type: 'date', valueFormat: 'YYYY-MM-DD',
|
addDisplay: false,
|
editDisplay: false,
|
viewDisplay: true,
|
hide: false,
|
search: false,
|
},
|
remark: {
|
label: '备注',
|
type: 'textarea', minRows: 3, maxRows: 5,
|
addDisplay: true,span:24,
|
editDisplay: true,
|
viewDisplay: true,
|
hide: true,
|
search: false,
|
},
|
}
|
}
|
],
|
column: {
|
systemCode: {
|
label: '系统编号',minWidth:150,
|
display: false,
|
hide: false,
|
search: true,
|
},
|
quotePlanCode: {
|
label: '报价方案编号',minWidth:150,
|
display: false,
|
},
|
// vehicleProviderName: {
|
// label: '车辆服务商',minWidth:150,
|
// display: false,
|
// hide: quotePlanType.value != 1,
|
// search: quotePlanType.value == 1,
|
// },
|
transportRoute: {
|
label: '运输线路',minWidth:150,
|
display: false,overHidden: true,
|
hide: false,
|
},
|
startRegion: {
|
label: '起点行政区域',
|
display: false,minWidth:150,
|
hide: false,overHidden: true,
|
search: false,
|
},
|
// startWarehouse: {
|
// label: '起点仓库', display: false,
|
// hide: false,minWidth:150,
|
// search: true,
|
// type: 'select', dataType: 'string', dicUrl: '/system/dict/data/type/sys_warehouse',
|
//
|
// },
|
endRegion: {
|
label: '终点行政区域',overHidden: true,
|
display: false,minWidth:150,
|
hide: false,
|
},
|
// endWarehouse: {
|
// label: '终点仓库',
|
// display: false,minWidth:150,
|
// type: 'select', dataType: 'string', dicUrl: '/system/dict/data/type/sys_warehouse',
|
// search: true,
|
// },
|
vehicleType: {
|
label: '车型',
|
display: false,minWidth:150,
|
type: 'select', dataType: 'string', dicUrl: '/system/dict/data/type/vehicle_type',
|
search: true,
|
},
|
// transportMode: {
|
// label: '运输方式',minWidth:150,
|
// display: false,
|
// hide: false,
|
// search: true,
|
// type: 'select', dataType: 'string', dicUrl: '/system/dict/data/type/transport_mode',
|
//
|
// },
|
// routeType: {
|
// label: '线路类型',
|
// display: false,
|
// hide: false,minWidth:150,
|
// search: true,
|
// type: 'select', dataType: 'string', dicUrl: '/system/dict/data/type/route_type',
|
//
|
// },
|
freightPrice: {
|
label: '运费报价',
|
display: false,
|
hide: false,minWidth:150,
|
},
|
currency: {
|
label: '币制',
|
display: false,
|
hide: false,minWidth:150,
|
search: true,
|
type: 'select', dataType: 'string', dicUrl: '/system/dict/data/type/sys_currency',
|
|
},
|
taxRate: {
|
label: '税点%',
|
display: false,
|
hide: false,minWidth:150,
|
},
|
status: {
|
label: '状态',
|
type: 'radio',dataType:'string', dicUrl: '/system/dict/data/type/sys_normal_disable',
|
display: false,
|
hide: false,
|
search: true,minWidth:150,
|
},
|
updateBy: {
|
label: '更新人',
|
display: false,minWidth:150,
|
},
|
updateTime: {
|
label: '更新时间',
|
display: false,minWidth:180,
|
},
|
}
|
})
|
|
const itemsTableOption = ref({
|
pageKey: 'itemsTable',
|
rowKey: 'rowKey',
|
header: false,
|
addBtn: false,menu: false,
|
column:{
|
vehicleType:{
|
label: '车型',
|
type: 'select', dataType: 'string', dicUrl: '/system/dict/data/type/vehicle_type',
|
},
|
freightPrice:{
|
label: '*运费报价', hide: false
|
},
|
currency:{
|
label: '币制',hide: false
|
},
|
taxRate:{
|
label: '税点%',hide: false
|
},
|
|
segment1FreightQuote:{
|
label: '*一段运费报价', hide: true
|
},
|
segment1Currency:{
|
label: '*一段运费币制',hide: true
|
},
|
segment1TaxRate:{
|
label: '*一段运费税点%',hide: true
|
},
|
segment2FreightQuote:{
|
label: '*二段运费报价', hide: true
|
},
|
segment2Currency:{
|
label: '*二段运费币制',hide: true
|
},
|
segment2TaxRate:{
|
label: '*二段运费税点%',hide: true
|
},
|
totalFreight:{
|
label: '总运费报价', hide: true
|
}
|
}
|
})
|
const itemsCrudRef =ref()
|
|
|
const {
|
tableData,
|
pageF,
|
rowSave,
|
rowUpdate,
|
rowDel,
|
beforeOpen,
|
searchChange,
|
searchReset,
|
selectionChange,
|
onLoad,
|
currentChange,
|
sizeChange,
|
handleDelete,
|
handleExport,
|
handleUpdate,
|
refreshChange
|
} = usePagePlus({
|
form: form,
|
option: option,
|
queryParams: queryParams,
|
idKey: 'id',
|
page: page.value,
|
getListApi: listTmsQuoteDetail,
|
getDetailApi: getTmsQuoteDetail,
|
exportApi: exportTmsQuoteDetail,
|
deleteApi: delTmsQuoteDetail,
|
addApi: addTmsQuoteDetail,
|
updateApi: updateTmsQuoteDetail,
|
handleUpdateFunc: () => {
|
crudRef.value.rowEdit(selectionList.value[0]);
|
},
|
handleSelectionChangeFunc: (selection: any) => {
|
selectionList.value = selection;
|
},
|
getBeginListFunc(params:any = {}){
|
params.quotePlanId = (route.query?.quotePlanId||'') as string;
|
return params;
|
},
|
rowSaveBegin:(row:any,loading:any)=>{
|
row.quotePlanId = (route.query?.quotePlanId||'') as string;
|
if (selectionList2.value.length == 0){
|
proxy.$modal.msgError("请至少选择一条车型报价");
|
loading();
|
throw new Error("请至少选择一条车型报价");
|
|
}
|
if (row.isSegmentedInvoice == 1){
|
let filter = selectionList2.value.filter((item:any)=>{
|
return !item.freightPrice || !item.currency
|
});
|
if (filter.length > 0){
|
proxy.$modal.msgError("请填写所有必填项");
|
loading();
|
throw new Error("请填写所有必填项")
|
}
|
|
}else{
|
|
let filter = selectionList2.value.filter((item:any)=>{
|
return !item.segment1FreightQuote || !item.segment1Currency
|
|| !item.segment1TaxRate|| !item.segment2FreightQuote
|
|| !item.segment2Currency|| !item.segment2TaxRate
|
});
|
if (filter.length > 0){
|
proxy.$modal.msgError("请填写所有必填项");
|
loading();
|
throw new Error("请填写所有必填项")
|
}
|
}
|
row.quoteItems = selectionList2.value;
|
},
|
handleBeforeOpenFunc:(type:string)=>{
|
form.value.items = [];
|
if (type === 'add'){
|
form.value.items = vehicle_type.value.map((item:any)=>{
|
return { rowKey: randomId() ,vehicleType: item.value,}
|
})
|
}
|
},
|
|
})
|
const handleBack = () => {
|
router.back()
|
}
|
|
const rowKeys = ref<any>([]);
|
const selectionChange2 = (selection?: any[]) => {
|
selectionList2.value = selection;
|
rowKeys.value = selection?.map((item:any)=>item.rowKey);
|
}
|
|
const quoteChange = (value:any,row:any) => {
|
let segment1FreightQuote = Number(row.segment1FreightQuote) || 0;
|
let segment2FreightQuote = Number(row.segment2FreightQuote) || 0;
|
let totalFreightCny = 0;
|
let totalFreightHkd = 0;
|
if (row.segment1Currency){
|
if (row.segment1Currency == 'RMB'){
|
totalFreightCny = segment1FreightQuote;
|
}else{
|
totalFreightHkd = segment1FreightQuote;
|
}
|
}
|
if (row.segment2Currency){
|
if (row.segment2Currency == 'RMB'){
|
totalFreightCny += segment2FreightQuote;
|
}else{
|
totalFreightHkd += segment2FreightQuote;
|
}
|
}
|
row.totalFreightCny = totalFreightCny;
|
row.totalFreightHkd = totalFreightHkd;
|
}
|
|
</script>
|