| | |
| | | >返回 |
| | | </el-button> |
| | | </template> |
| | | </avue-crud> |
| | | |
| | | <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> |
| | | </avue-crud> |
| | | </template> |
| | | |
| | | |
| | | </avue-crud> |
| | | </basicContainer> |
| | | </template> |
| | | |
| | |
| | | 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(); |
| | |
| | | viewBtn: hasPermission(["tms:tmsQuoteDetail:query"]), |
| | | } |
| | | }) |
| | | |
| | | const {vehicle_type,sys_currency} = |
| | | proxy.useDict("vehicle_type","sys_currency"); |
| | | const data = reactive({ |
| | | form: <TmsQuoteDetailI>{}, |
| | | queryParams: <TmsQuoteDetailI & PageQueryInterface>{}, |
| | |
| | | currentPage: 1, |
| | | }, |
| | | selectionList: [], |
| | | selectionList2: [], |
| | | }) |
| | | const {queryParams, form, page, selectionList} = toRefs(data); |
| | | const {queryParams, form, page, selectionList,selectionList2} = toRefs(data); |
| | | const option = ref({ |
| | | pageKey: 'TmsQuoteDetail', |
| | | rowKey: 'id', |
| | |
| | | editDisplay: false, |
| | | viewDisplay: true, |
| | | }, |
| | | vehicleProviderId: { |
| | | label: '车辆服务商', |
| | | display: true, |
| | | editDisplay: true,row:true, |
| | | viewDisplay: true, |
| | | hide: false, |
| | | search: true, |
| | | rules: [ |
| | | { |
| | | required: true, |
| | | message: "车辆服务商不能为空", trigger: "change" |
| | | } |
| | | ], |
| | | type: 'table', suffixIcon: 'search', |
| | | children: { |
| | | border: true, |
| | | searchLabelWidth: 100, |
| | | searchMenuSpan: 5, |
| | | column: { |
| | | serviceCode: { |
| | | label: '服务商编码', minWidth: 130, |
| | | search: true, |
| | | }, |
| | | serviceShortName: { |
| | | label: '服务商简称', minWidth: 120, |
| | | search: true, |
| | | }, |
| | | serviceType: { |
| | | label: '服务类型', multiple: true, |
| | | type: 'select', dataType: 'string', dicUrl: '/system/dict/data/type/service_type', |
| | | minWidth: 150, |
| | | }, |
| | | isTransport: { |
| | | label: '是否运输服务商', |
| | | type: 'radio', dataType: 'string', dicUrl: '/system/dict/data/type/sys_number_is', |
| | | minWidth: 150, |
| | | }, |
| | | isStorage: { |
| | | label: '是否仓储服务商', |
| | | type: 'radio', dataType: 'string', dicUrl: '/system/dict/data/type/sys_number_is', |
| | | minWidth: 150, |
| | | }, |
| | | isExpress: { |
| | | label: '是否快递服务商', |
| | | type: 'radio', dataType: 'string', dicUrl: '/system/dict/data/type/sys_number_is', |
| | | minWidth: 150, |
| | | }, |
| | | contactName: { |
| | | label: '联系人姓名', minWidth: 120, |
| | | }, |
| | | }, |
| | | |
| | | }, |
| | | props: { |
| | | label: 'serviceShortName', |
| | | value: 'id' |
| | | }, |
| | | onLoad: ({page, value, data}: { page: any, value: any, data: any }, callback: any) => { |
| | | if (value) { |
| | | let id = value; |
| | | if (Array.isArray(value)) { |
| | | id = value[0] |
| | | } |
| | | getTmsServiceProvider(id).then(res => { |
| | | return callback(res.data || {}) |
| | | }) |
| | | } else { |
| | | listTmsServiceProvider({pageSize: page.pageSize, pageNum: page.currentPage, ...data}).then(res => { |
| | | return callback({ |
| | | total: res.total, |
| | | data: res.rows || [], |
| | | }) |
| | | }) |
| | | } |
| | | |
| | | }, |
| | | change: (val: any) => { |
| | | const table = crudRef.value?.getPropRef?.('vehicleProviderId')?.$refs?.temp; |
| | | if (!table) return; |
| | | let active = table.active; |
| | | if (Array.isArray(active)) active = active[0]; |
| | | if (active) { |
| | | Object.assign(form.value, { |
| | | vehicleProviderId: active.id, |
| | | vehicleProviderName: active.serviceShortName, |
| | | }); |
| | | } |
| | | }, |
| | | }, |
| | | // vehicleProviderId: { |
| | | // label: '车辆服务商', |
| | | // display: true, |
| | | // editDisplay: true,row:true, |
| | | // viewDisplay: true, |
| | | // hide: false, |
| | | // search: true, |
| | | // rules: [ |
| | | // { |
| | | // required: true, |
| | | // message: "车辆服务商不能为空", trigger: "change" |
| | | // } |
| | | // ], |
| | | // type: 'table', suffixIcon: 'search', |
| | | // children: { |
| | | // border: true, |
| | | // searchLabelWidth: 100, |
| | | // searchMenuSpan: 5, |
| | | // column: { |
| | | // serviceCode: { |
| | | // label: '服务商编码', minWidth: 130, |
| | | // search: true, |
| | | // }, |
| | | // serviceShortName: { |
| | | // label: '服务商简称', minWidth: 120, |
| | | // search: true, |
| | | // }, |
| | | // serviceType: { |
| | | // label: '服务类型', multiple: true, |
| | | // type: 'select', dataType: 'string', dicUrl: '/system/dict/data/type/service_type', |
| | | // minWidth: 150, |
| | | // }, |
| | | // isTransport: { |
| | | // label: '是否运输服务商', |
| | | // type: 'radio', dataType: 'string', dicUrl: '/system/dict/data/type/sys_number_is', |
| | | // minWidth: 150, |
| | | // }, |
| | | // isStorage: { |
| | | // label: '是否仓储服务商', |
| | | // type: 'radio', dataType: 'string', dicUrl: '/system/dict/data/type/sys_number_is', |
| | | // minWidth: 150, |
| | | // }, |
| | | // isExpress: { |
| | | // label: '是否快递服务商', |
| | | // type: 'radio', dataType: 'string', dicUrl: '/system/dict/data/type/sys_number_is', |
| | | // minWidth: 150, |
| | | // }, |
| | | // contactName: { |
| | | // label: '联系人姓名', minWidth: 120, |
| | | // }, |
| | | // }, |
| | | // |
| | | // }, |
| | | // props: { |
| | | // label: 'serviceShortName', |
| | | // value: 'id' |
| | | // }, |
| | | // onLoad: ({page, value, data}: { page: any, value: any, data: any }, callback: any) => { |
| | | // if (value) { |
| | | // let id = value; |
| | | // if (Array.isArray(value)) { |
| | | // id = value[0] |
| | | // } |
| | | // getTmsServiceProvider(id).then(res => { |
| | | // return callback(res.data || {}) |
| | | // }) |
| | | // } else { |
| | | // listTmsServiceProvider({pageSize: page.pageSize, pageNum: page.currentPage, ...data}).then(res => { |
| | | // return callback({ |
| | | // total: res.total, |
| | | // data: res.rows || [], |
| | | // }) |
| | | // }) |
| | | // } |
| | | // |
| | | // }, |
| | | // change: (val: any) => { |
| | | // const table = crudRef.value?.getPropRef?.('vehicleProviderId')?.$refs?.temp; |
| | | // if (!table) return; |
| | | // let active = table.active; |
| | | // if (Array.isArray(active)) active = active[0]; |
| | | // if (active) { |
| | | // Object.assign(form.value, { |
| | | // vehicleProviderId: active.id, |
| | | // vehicleProviderName: active.serviceShortName, |
| | | // }); |
| | | // } |
| | | // }, |
| | | // }, |
| | | startRegionCode: { |
| | | label: '起点行政区域', |
| | | addDisplay: true, |
| | |
| | | } |
| | | } |
| | | }, |
| | | startWarehouse: { |
| | | label: '起点仓库', |
| | | addDisplay: true, |
| | | editDisplay: true, |
| | | viewDisplay: true, |
| | | type: 'select', dataType: 'string', dicUrl: '/system/dict/data/type/sys_warehouse', |
| | | |
| | | }, |
| | | // startWarehouse: { |
| | | // label: '起点仓库', |
| | | // addDisplay: true, |
| | | // editDisplay: true, |
| | | // viewDisplay: true, |
| | | // type: 'select', dataType: 'string', dicUrl: '/system/dict/data/type/sys_warehouse', |
| | | // |
| | | // }, |
| | | endRegionCode: { |
| | | label: '终点行政区域', |
| | | addDisplay: true, |
| | |
| | | } |
| | | } |
| | | }, |
| | | endWarehouse: { |
| | | label: '终点仓库', |
| | | addDisplay: true, |
| | | editDisplay: true, |
| | | viewDisplay: true, |
| | | type: 'select', dataType: 'string', dicUrl: '/system/dict/data/type/sys_warehouse', |
| | | |
| | | }, |
| | | // 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, |
| | |
| | | }, |
| | | vehicleType: { |
| | | label: '车型', |
| | | addDisplay: true, |
| | | addDisplay: false, |
| | | editDisplay: true, |
| | | viewDisplay: true, |
| | | type: 'select', dataType: 'string', dicUrl: '/system/dict/data/type/vehicle_type', |
| | |
| | | } |
| | | ], |
| | | }, |
| | | 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', |
| | | |
| | | }, |
| | | // 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: true, |
| | | label: '运费报价', addDisplay: false, |
| | | editDisplay: true, |
| | | viewDisplay: true,type: 'number', |
| | | |
| | |
| | | } |
| | | ], |
| | | }, |
| | | 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" |
| | | } |
| | | ], |
| | | }, |
| | | } |
| | | }, |
| | | { |
| | | label: '车型报价', |
| | | prop: 'cxbj', addDisplay: true,editDisplay: false,viewDisplay: false, |
| | | column: { |
| | | items:{ |
| | | label: '',labelWidth:0,span:24, |
| | | } |
| | | } |
| | | }, |
| | | { |
| | |
| | | label: '报价方案编号',minWidth:150, |
| | | display: false, |
| | | }, |
| | | vehicleProviderName: { |
| | | label: '车辆服务商',minWidth:150, |
| | | display: false, |
| | | search: true, |
| | | }, |
| | | // vehicleProviderName: { |
| | | // label: '车辆服务商',minWidth:150, |
| | | // display: false, |
| | | // search: true, |
| | | // }, |
| | | transportRoute: { |
| | | label: '运输线路',minWidth:150, |
| | | display: false,overHidden: true, |
| | |
| | | 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', |
| | | |
| | | }, |
| | | // 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, |
| | | }, |
| | | // 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, |
| | | // 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, |
| | | search: true, |
| | | type: 'select', dataType: 'string', dicUrl: '/system/dict/data/type/transport_mode', |
| | | |
| | | hide: false,minWidth:150, |
| | | }, |
| | | routeType: { |
| | | label: '线路类型', |
| | | currency: { |
| | | label: '币制', |
| | | display: false, |
| | | hide: false,minWidth:150, |
| | | search: true, |
| | | type: 'select', dataType: 'string', dicUrl: '/system/dict/data/type/route_type', |
| | | type: 'select', dataType: 'string', dicUrl: '/system/dict/data/type/sys_currency', |
| | | |
| | | }, |
| | | freightPrice: { |
| | | label: '运费报价', |
| | | taxRate: { |
| | | label: '税点%', |
| | | display: false, |
| | | hide: false,minWidth:150, |
| | | }, |
| | |
| | | }, |
| | | } |
| | | }) |
| | | |
| | | 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 |
| | | }, |
| | | } |
| | | }) |
| | | const itemsCrudRef =ref() |
| | | const { |
| | | tableData, |
| | | pageF, |
| | |
| | | params.quotePlanId = (route.query?.quotePlanId||'') as string; |
| | | return params; |
| | | }, |
| | | rowSaveBegin:(row:any)=>{ |
| | | rowSaveBegin:(row:any,loading:any)=>{ |
| | | row.quotePlanId = (route.query?.quotePlanId||'') as string; |
| | | console.log(row) |
| | | }, |
| | | if (selectionList2.value.length == 0){ |
| | | proxy.$modal.msgError("请至少选择一条车型报价"); |
| | | loading(); |
| | | throw new Error("请至少选择一条车型报价"); |
| | | |
| | | } |
| | | let filter = selectionList2.value.filter((item:any)=>{ |
| | | return !item.freightPrice || !item.currency |
| | | }); |
| | | 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); |
| | | } |
| | | |
| | | </script> |