Commit aaf02179 authored by 我在何方's avatar 我在何方
parents ddf174c7 dad20b2e
...@@ -69,4 +69,93 @@ export function createGoods(data) { ...@@ -69,4 +69,93 @@ export function createGoods(data) {
method: "post", method: "post",
data, data,
}); });
}
/**
* 获得获得合包箱分页
*
* @export
* @param {*} data
* @return {*}
*/
export function getMergePkgList(params) {
return request({
url: "/ecw/box-merge-pkg/page",
method: "get",
params,
});
}
/**
* 创建合包箱
*
* @export
* @param {*} data
* @return {*}
*/
export function createMergePkg(data) {
return request({
url: "/ecw/box-merge-pkg/create",
method: "post",
data,
});
}
/**
* 更新合包箱
*
* @export
* @param {*} data
* @return {*}
*/
export function updateMergePkg(data) {
return request({
url: "/ecw/box-merge-pkg/update",
method: "put",
data,
});
}
/**
* 删除合包箱
*
* @export
* @param {*} data
* @return {*}
*/
export function deleteMergePkg(id) {
return request({
url: `/ecw/box-merge-pkg/delete?id=`+id,
method: "delete",
});
}
/**
* 获得未装箱列表分页
*
* @export
* @param {*} data
* @return {*}
*/
export function getUnPkgPage(params) {
return request({
url: "/ecw/box-merge-pkg/getUnPkgPage",
method: "get",
params,
});
}
/**
* 获得已装箱列表分页
*
* @export
* @param {*} data
* @return {*}
*/
export function getPkgPageByPkgId(params) {
return request({
url: "/ecw/box-merge-pkg/getPkgPageByPkgId",
method: "get",
params,
});
} }
\ No newline at end of file
...@@ -63,6 +63,10 @@ export default { ...@@ -63,6 +63,10 @@ export default {
value(val){ value(val){
// console.log('初始化内容', val) // console.log('初始化内容', val)
this.init() this.init()
},
// 类型变了,清空内容
productType(){
this.list = []
} }
}, },
created(){ created(){
......
...@@ -48,7 +48,7 @@ ...@@ -48,7 +48,7 @@
{{$l(row, 'destTitle')}} {{$l(row, 'destTitle')}}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column :label="$t('渠道')" prop="startTitleZh"> <el-table-column :label="$t('渠道')" prop="startTitleZh" v-if="type == 'air'">
<template slot-scope="{row}"> <template slot-scope="{row}">
{{$l(row.channel, 'name')}} {{$l(row.channel, 'name')}}
</template> </template>
......
...@@ -474,7 +474,7 @@ export const constantRoutes = [ ...@@ -474,7 +474,7 @@ export const constantRoutes = [
children: [ children: [
{ {
path: 'query/:shipmentId(\\d+)', path: 'query/:shipmentId(\\d+)',
component: (resolve) => import('@/views/ecw/box/query'), component: (resolve) => import('@/views/ecw/box/queryAir'),
props: true, props: true,
name: 'shippingDetail', name: 'shippingDetail',
meta: {titleZh: '出货详情', titleEn: "Shipping Details", icon: '', activeMenu: '/shipment/boxDetail'} meta: {titleZh: '出货详情', titleEn: "Shipping Details", icon: '', activeMenu: '/shipment/boxDetail'}
......
...@@ -200,6 +200,7 @@ export const DICT_TYPE = { ...@@ -200,6 +200,7 @@ export const DICT_TYPE = {
ORDER_SPECIAL_NEEDS:'order_special_needs', // 订单特殊需求 ORDER_SPECIAL_NEEDS:'order_special_needs', // 订单特殊需求
ORDER_ABNORMAL_STATE:'order_abnormal_state', ORDER_ABNORMAL_STATE:'order_abnormal_state',
TARGET_TYPE:'target_type',//部门业绩目标类型 TARGET_TYPE:'target_type',//部门业绩目标类型
CEBE_UNIT:'cube_unit',//目标单位
RECEIPT_ITEM_STATE:'receipt_item_state',//收款单明细状态 RECEIPT_ITEM_STATE:'receipt_item_state',//收款单明细状态
// ========== 出货模块 ========== // ========== 出货模块 ==========
BOX_SHIPPING_TRAILER_STATUS: 'shipping_trailer_status', // 拖车状态 BOX_SHIPPING_TRAILER_STATUS: 'shipping_trailer_status', // 拖车状态
......
...@@ -56,7 +56,11 @@ ...@@ -56,7 +56,11 @@
<!-- 列表 --> <!-- 列表 -->
<el-table v-loading="loading" :data="list"> <el-table v-loading="loading" :data="list">
<el-table-column :label="$t('自编号')" align="center" prop="selfNo" /> <el-table-column :label="$t('自编号')" align="center" prop="selfNo">
<template slot-scope="scope">
<a href="javascript:void(0)" @click="handleCommand(scope.row, 'detail')">{{ scope.row.selfNo }}</a>
</template>
</el-table-column>
<el-table-column :label="$t('运输方式')" align="center" prop="transportType"> <el-table-column :label="$t('运输方式')" align="center" prop="transportType">
<template slot-scope="scope"> <template slot-scope="scope">
<dict-tag :type="DICT_TYPE.ECW_TRANSPORT_TYPE" :value="scope.row.transportType" /> <dict-tag :type="DICT_TYPE.ECW_TRANSPORT_TYPE" :value="scope.row.transportType" />
...@@ -69,15 +73,19 @@ ...@@ -69,15 +73,19 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="方数(预装/已装)" align="center" prop="squareNumber" /> <el-table-column :label="$t('方数(预装/已装)')" align="center" prop="">
<el-table-column label="重量(预装/已装)" align="center" prop="weight" /> <template slot-scope="{row}">
{{row.boxStatistics.volume}}/{{row.boxStatistics.loadVolume}}
<el-table-column :label="$t('状态')" align="center" prop="boxStatus"> </template>
<template slot-scope="scope"> </el-table-column>
<dict-tag :type="DICT_TYPE.BOX_SHIPMENT_STATUS" :value="scope.row.boxStatus" /> <el-table-column :label="$t('重量(预装/已装)')" align="center" prop="weight">
<template slot-scope="{row}">
{{row.boxStatistics.weight}}/{{row.boxStatistics.loadWeight}}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column :label="$t('状态')" align="center" prop="shipmentStatusText" />
<el-table-column :label="$t('日期')" align="center" prop="createTime" width="180"> <el-table-column :label="$t('日期')" align="center" prop="createTime" width="180">
<template slot-scope="scope"> <template slot-scope="scope">
<span>{{ new Date(scope.row.createTime).format('yyyy-MM-dd hh:mm:ss') }}</span> <span>{{ new Date(scope.row.createTime).format('yyyy-MM-dd hh:mm:ss') }}</span>
...@@ -160,12 +168,17 @@ ...@@ -160,12 +168,17 @@
</template> </template>
<script> <script>
import { createbox, updatebox, deletebox, getbox, getboxPage, exportboxExcel } from '@/api/ecw/box' import { deletebox, getbox, getboxPage, exportboxExcel } from '@/api/ecw/box'
import { getChannelList } from '@/api/ecw/channel' import { getChannelList } from '@/api/ecw/channel'
import { getWarehouseList } from '@/api/ecw/warehouse' import { getWarehouseList } from '@/api/ecw/warehouse'
import costForm from './costForm.vue' import costForm from './costForm.vue'
import regError from './regError.vue' import regError from './regError.vue'
import editAirForm from './editAirForm.vue' import editAirForm from './editAirForm.vue'
import {
downloadFile,
downloadFileByUrl,
formatDate,
} from "./shippingAir/utils";
export default { export default {
name: 'indexAir', name: 'indexAir',
...@@ -283,6 +296,7 @@ export default { ...@@ -283,6 +296,7 @@ export default {
this.getChannelList() this.getChannelList()
}, },
methods: { methods: {
formatDate,
getChannelList() { getChannelList() {
getChannelList().then((res) => (this.channelList = res.data)) getChannelList().then((res) => (this.channelList = res.data))
}, },
...@@ -395,6 +409,9 @@ export default { ...@@ -395,6 +409,9 @@ export default {
/** 查看按钮操作 */ /** 查看按钮操作 */
handleCommand(row, command) { handleCommand(row, command) {
switch (command) { switch (command) {
case "detail":
this.$router.push("/boxAir/query/" + row.id);
break;
case 'air': case 'air':
this.$router.push('/boxAir/shippingAir/' + row.id) this.$router.push('/boxAir/shippingAir/' + row.id)
break break
......
<template>
<div class="app-container shipping-detail">
<el-row type="flex" style="margin-top: 15px; margin-bottom: 15px" justify="center">
<el-col :xs="24" :sm="24" :md="24" :lg="20" :xl="22">
<div style="display: flex; justify-content: space-between;align-items: flex-end;">
<h2>{{$t('出货详情')}}</h2>
<div>
<!-- <el-button size="small" @click="handleCommand('edit')">{{$t('编辑')}}</el-button> -->
<el-button size="small" v-hasPermi="['shipment:box:action:sea']" @click="handleCommand('router')">{{$t('操作')}}</el-button>
<el-button type="primary" v-hasPermi="['shipment:box:action:error']" size="small" @click="handleCommand('error')">{{$t('异常登记')}}</el-button>
<el-button type="primary" v-hasPermi="['shipment:box:action:cost']" size="small" @click="handleCommand('cost')">{{$t('费用登记')}}</el-button>
<!-- <el-button type="danger" size="small" @click="handleCommand('delete')">{{$t('删除')}}</el-button> -->
</div>
</div>
<el-card style="margin-top: 15px">
<el-descriptions :column="4" border>
<el-descriptions-item :label="$t('自编号')">
{{shipmentObj.selfNo}}
</el-descriptions-item>
<el-descriptions-item :label="$t('运输方式')">
<dict-tag :type="DICT_TYPE.ECW_TRANSPORT_TYPE" :value="shipmentObj.transportType" />
</el-descriptions-item>
<el-descriptions-item :label="$t('出货渠道')">
{{getShipChannelName(shipmentObj.shippingChannelId)}}
</el-descriptions-item>
<el-descriptions-item :label="$t('状态')">
{{shipmentObj.shipmentStatusText}}
</el-descriptions-item>
<el-descriptions-item :label="$t('总计')">
{{getBoxSum(shipmentObj.boxStatistics)}}
</el-descriptions-item>
<el-descriptions-item :label="$t('始发地')">
{{getCityName(shipmentObj.startWarehouseId)}}
</el-descriptions-item>
<el-descriptions-item :label="$t('目的地')">
{{getCityName(shipmentObj.destWarehouseId)}}
</el-descriptions-item>
<el-descriptions-item label="SO NO">
{{shipmentObj.bookSeaInfo ? shipmentObj.bookSeaInfo.sono : '' }}
</el-descriptions-item>
<el-descriptions-item :label="$t('目的港清关')">
{{getClearance(shipmentObj.destinationClearance)}}
</el-descriptions-item>
<el-descriptions-item :label="$t('发货方式')">
{{getdeliveryType(shipmentObj.deliveryType)}}
</el-descriptions-item>
</el-descriptions>
</el-card>
<el-tabs style="margin-top: 15px" type="border-card" value="detail">
<el-tab-pane :label="$t('明细')" name="detail">
<div class="detail-pane">
<div>{{$t('当前部分')}}</div>
<el-select :placeholder="$t('请选择')" v-model="sectionId" @change="sectionChange">
<el-option key="0" :label="$t('全部')" value="0"></el-option>
<el-option v-for="item in sectionList" :key="item.id" :label="item.title" :value="item.id"></el-option>
</el-select>
<p class="box-weight">
{{getSectionInfo}}
</p>
<div style="margin-left:30px;">
<el-button type="primary" v-hasPermi="['shipment:box:order:select']" size="small" @click="()=>updateStatus('selected')">{{$t('更新所选订单状态')}}</el-button>
<el-button type="primary" v-hasPermi="['shipment:box:order:all']" size="small" @click="()=>updateStatus('all')">{{$t('更新全部订单状态')}}</el-button>
</div>
<div class="document-status">
<p>{{$t('单证状态')}}</p>
<template v-for="(item, index) in getDocStatus(sectionObj.sectionOrderList)">
<dict-tag :type="DICT_TYPE.ECW_CUSTOMS_TYPE" :value="item" :key="index" />
</template>
</div>
</div>
<el-table :data="sectionObj.sectionOrderList" style="width: 100%" border @selection-change="handleSelectionChange">
<el-table-column type="selection" width="50" :selectable="selectable"></el-table-column>>
<el-table-column align="center" :label="$t('序号')" width="50" prop="tidanNum" />
<el-table-column prop="orderNo" :label="$t('订单号')" align="center">
<template v-slot="scope">
<a href="javascript:void(0)" @click="jumpOrderDetail(scope.row)">{{ scope.row.orderNo }}</a>
</template>
</el-table-column>
<el-table-column prop="goodsList" :label="$t('货物信息')" width="230px" align="center">
<template v-slot="{row}">
<section>
<div v-for="(item, index) in row.goodsList" :key="index">
{{index+1}}{{item.prodTitleZh}}
</div>
</section>
</template>
</el-table-column>
<el-table-column prop="num" :label="$t('计划箱数')" align="center"></el-table-column>
<el-table-column prop="installNum" :label="$t('实装箱数')" align="center"></el-table-column>
<el-table-column prop="unloadNum" :label="$t('卸柜箱数')" align="center"></el-table-column>
<el-table-column prop="destWarehouseName" :label="$t('提货点')" align="center"></el-table-column>
<el-table-column prop="volume" :label="$t('体积')" align="center"></el-table-column>
<el-table-column prop="weight" :label="$t('重量')" align="center"></el-table-column>
<el-table-column prop="totalWorth" :label="$t('货值')" align="center"></el-table-column>
<el-table-column prop="customsType" :label="$t('报关方式')" align="center">
<template slot-scope="scope">
<div :class="scope.row.customsType !== 1 ? 'customsType-red' : ''">
<dict-tag :type="DICT_TYPE.ECW_CUSTOMS_TYPE" :value="scope.row.customsType" />
</div>
</template>
</el-table-column>
<el-table-column prop="customsFee" :label="$t('报关费用')" align="center"></el-table-column>
<el-table-column prop="" :label="$t('操作')" align="center" width="120px">
<template slot-scope="scope">
<el-button type="primary" size="small" :disabled="scope.row.abnormalDealStatus === 1" @click="()=>updateStatus('single', scope.row)">{{$t('更新状态')}}</el-button>
</template>
</el-table-column>
</el-table>
</el-tab-pane>
<el-tab-pane :label="$t('状态')" name="status">
<div v-for="(item, index) in logList" :key="item.id" :class="`shipping-status ${index === 0 ? 'curr-status' : '' }`">
<div class="status-line"></div>
<div class="status-number">{{logList.length - index}}</div>
<div class="status-info">
<div>{{$l(item, 'title')}}</div>
<div>
<p>{{formatDate(item.createTime)}}</p>
<p>{{item.operator}}</p>
</div>
</div>
</div>
</el-tab-pane>
<el-tab-pane :label="$t('费用')" name="fee">
<el-table :data="costList" style="width: 100%" border>
<el-table-column type="index" align="center" :label="$t('序号')" width="50" />
<el-table-column prop="costType" :label="$t('费用类型')" align="center">
<template slot-scope="scope">
<dict-tag :type="DICT_TYPE.FEE_TYPE" :value="scope.row.costType" />
</template>
</el-table-column>
<el-table-column prop="supplierId" :label="$t('供应商')" align="center">
<template slot-scope="scope">
{{getSupplier(scope.row.supplierId)}}
</template>
</el-table-column>
<el-table-column prop="price" :label="$t('金额')" align="center"></el-table-column>
<el-table-column prop="payPrice" :label="$t('实付金额')" align="center"></el-table-column>
<el-table-column prop="payTime" :label="$t('实付日期')" align="center">
<template slot-scope="scope">
<span v-if="scope.row.payTime">{{formatDate(scope.row.payTime)}}</span>
</template>
</el-table-column>
<el-table-column :label="$t('操作')" align="center">
<template slot-scope="scope">
<el-button type="primary" size="small" @click="editCostClick(scope.row)" style="marginRight:10px;" v-hasPermi="['ecw:box-cost:update']">{{$t('编辑')}}</el-button>
<el-popconfirm :title="$t('确定是否删除')" @confirm="deleteCostClick(scope.row)">
<el-button type="danger" size="small" slot="reference" v-hasPermi="['ecw:box-cost:delete']">{{$t('删除')}}</el-button>
</el-popconfirm>
</template>
</el-table-column>
</el-table>
</el-tab-pane>
<el-tab-pane :label="$t('异常')" name="error">
<el-table :data="errorList" style="width: 100%" border>
<el-table-column type="index" align="center" :label="$t('序号')" width="50" />
<el-table-column prop="opStep" :label="$t('操作')" align="center">
<template slot-scope="scope">
<dict-tag :type="DICT_TYPE.BOX_SHIPPING_PROCESS" :value="scope.row.opStep" />
</template>
</el-table-column>
<el-table-column prop="billAbnId" :label="$t('异常')" align="center">
<template slot-scope="scope">
<dict-tag :type="DICT_TYPE.BOX_SHIPPING_TICKET_EXCEPTION" :value="scope.row.billAbnId" />
</template>
</el-table-column>
<el-table-column prop="abnDetail" :label="$t('异常描述')" align="center" width="300"></el-table-column>
<el-table-column prop="delayDays" :label="$t('异常延迟天数')" align="center"></el-table-column>
<el-table-column prop="" :label="$t('异常时间')" align="center" width="200">
<template slot-scope="scope">
<span v-if="scope.row.abnStartTime">{{formatDate(scope.row.abnStartTime)}} - </span>
<span v-if="scope.row.abnEndTime">{{formatDate(scope.row.abnEndTime)}}</span>
</template>
</el-table-column>
</el-table>
</el-tab-pane>
<el-tab-pane :label="$t('表单')" name="download">
<el-table :data="downloadList" style="width: 50%">
<el-table-column prop="title" :label="$t('文件类型')"></el-table-column>
<el-table-column prop="" :label="$t('下载链接')">
<template slot-scope="scope">
<a v-if="scope.row.serviceName" href="javascript:void(0)" @click="downloadDetailFile(scope.row)" v-hasPermi="[`${scope.row.hasPermi}`]">{{$t('下载')}}</a>
<div v-else>{{$t('未完成')}}</div>
</template>
</el-table-column>
</el-table>
</el-tab-pane>
</el-tabs>
</el-col>
</el-row>
<!-- 对话框(添加 / 修改) -->
<el-dialog :title="dialogConfig.title" :visible.sync="dialogConfig.visible" :width="dialogConfig.width" append-to-body class="shippingSea-dialog">
<template v-if="dialogConfig.type === 'edit'">
<editForm v-if="dialogConfig.visible" @closeDialog="closeDialog" :shipmentObj="shipmentObj" :warehouseList="warehouseList" :transportTypes="transportTypes" :cabinetList="cabinetList" />
</template>
<template v-if="dialogConfig.type === 'cost'">
<costForm v-if="dialogConfig.visible" @closeDialog="closeDialog" :shipmentObj="shipmentObj" :costDetail="costDetail" />
</template>
<template v-if="dialogConfig.type === 'error'">
<regError v-if="dialogConfig.visible" @closeDialog="closeDialog" :shipmentObj="shipmentObj" :allUsers="allUsers" />
</template>
<template v-if="dialogConfig.type === 'updateError'">
<updateError v-if="dialogConfig.visible" @closeDialog="closeDialog" :shipmentObj="shipmentObj" :errorInfo="errorInfo" />
</template>
</el-dialog>
</div>
</template>
<script>
import {
getbox,
getLogList,
getCostList,
getAbnormalList,
deleteCost,
deletebox,
} from "@/api/ecw/box";
import { getChannelList } from "@/api/ecw/channel";
import { getCabinetPage } from "@/api/ecw/cabinet";
import { getWarehouseList } from "@/api/ecw/warehouse";
import {
getTotlContent,
formatDate,
serviceMsg,
downloadFile,
downloadFileByUrl,
} from "./shippingSea/utils";
import { getSectionList, boxGoodsDetail } from "@/api/ecw/boxSea";
import { getSupplierPage } from "@/api/ecw/supplier";
import costForm from "./costForm.vue";
import regError from "./regError.vue";
import editForm from "./editForm.vue";
import updateError from "./updateError.vue";
import { listUser } from "@/api/system/user";
export default {
name: "boxDetail",
props: {
shipmentId: String,
},
components: {
costForm,
regError,
editForm,
updateError,
},
created() {
this.transportTypes = this.getDictDatas(
this.DICT_TYPE.ECW_TRANSPORT_TYPE
).filter((item) => item.value == "1" || item.value == "2");
this.initData();
this.queryAllData();
// 用户
listUser({ pageNo: "1", pageSize: "10000" }).then((res) => {
const { data } = res;
this.allUsers = data.list ?? [];
});
},
data() {
return {
// 出货对象
shipmentObj: {},
// 渠道
channelList: [],
// 柜型
cabinetList: [],
// 仓库
warehouseList: [],
// 供应商
allSupplier: [],
allUsers: [],
// 部分list
sectionList: [],
// 单证数组
docStatus: [],
// 操作日志
logList: [],
// 费用
costList: [],
// 异常
errorList: [],
// 部分订单商品
sectionObj: {
secStatistics: {},
sectionOrderList: [],
totalStatistics: {},
},
// 部分ID
sectionId: "0",
// 弹窗配置
dialogConfig: {
visible: false,
title: "",
width: "600px",
type: "",
},
// 运输方式
transportTypes: [],
// 费用详情
costDetail: {},
// 下载
downloadList: [
{ title: this.$t("预装单"), serviceName: "downloadPreloadGoodsList", hasPermi: "shipment:box:download:downloadPreloadGoodsList" },
{ title: this.$t("已装单"), serviceName: "downloadLoadGoodsList", hasPermi: "shipment:box:download:downloadLoadGoodsList" },
{ title: this.$t("应收汇总表"), serviceName: "downloadReceivableList", hasPermi: "shipment:box:download:downloadReceivableList" },
{
title: this.$t("提货单"),
serviceName: "zipDownload",
fileFormat: "zip",
hasPermi: "shipment:box:download:zipDownload"
},
{
title: "agent list",
serviceName: "downloadAgentListFiles",
type: "url",
hasPermi: "shipment:box:download:downloadAgentListFiles"
},
{ title: "soncap", serviceName: "downloadSoncapFiles", type: "url", hasPermi: "shipment:box:download:downloadSoncapFiles" },
{
title: this.$t("提单Copy"),
serviceName: "downloadLadingCopy",
type: "url",
hasPermi: "shipment:box:download:downloadLadingCopy"
},
],
// 选中行
selectedRows: [],
// 修改异常
errorInfo: {
orderList: [],
errorType: "",
operate: "",
},
};
},
methods: {
selectable(row, index) {
if (row.abnormalDealStatus === 1) return false;
return true;
},
/* 全选 */
handleSelectionChange(selected) {
this.selectedRows = selected;
},
/* 更新状态 */
updateStatus(type, row) {
let orders = [];
if (type === "selected") {
if (!this.selectedRows.length) {
this.$message.error("请选择需要更新的订单");
return;
}
orders = this.selectedRows;
} else if (type === "all") {
// 筛选未处理的订单
orders = this.sectionObj.sectionOrderList.filter(
(item) => item.abnormalDealStatus === 0
);
if (!orders.length) {
this.$message.error("没有订单需要更新");
return;
}
} else if (type === "single") {
orders = [row];
}
this.getErrorType();
this.$set(this.errorInfo, "orderList", orders);
this.$set(this.errorInfo, "operate", type);
// 判断异常类型
this.handleCommand("updateError");
},
getErrorType() {
for (const [key, value] of Object.entries(this.shipmentObj)) {
// 报关异常 customsHasAbnormal
if (key === "customsHasAbnormal" && value) {
this.$set(this.errorInfo, "errorType", "customs");
this.$set(this.dialogConfig, "title", this.$t("更新报关异常状态"));
}
// 起运异常 shippingHasAbnormal
if (key === "shippingHasAbnormal" && value) {
this.$set(this.errorInfo, "errorType", "shipping");
this.$set(this.dialogConfig, "title", this.$t("更新起运异常状态"));
}
// 到港异常 arrivalHasAbnormal
if (key === "arrivalHasAbnormal" && value) {
this.$set(this.errorInfo, "errorType", "arrival");
this.$set(this.dialogConfig, "title", this.$t("更新到港异常状态"));
}
}
},
// 初始化字典数据
initData() {
// 查询渠道
getChannelList().then((res) => (this.channelList = res.data));
// 查询柜型
getCabinetPage(null).then(
(response) => (this.cabinetList = response.data.list)
);
// 仓库
getWarehouseList().then((r) => {
this.warehouseList = r.data;
});
// 供应商
getSupplierPage({ pageNo: "1", pageSize: "10000" }).then((res) => {
const { data } = res;
this.allSupplier = data.list;
});
},
// 查询详情页所有数据
queryAllData() {
let param = { shipmentId: this.shipmentId };
// 查询出货信息
this.getBoxDetail();
// 部分
getSectionList(param).then((res) => {
this.sectionList = res.data.map((item, index) => {
return {
...item,
title: this.$t("第{index}部分", { index: index + 1 }),
};
});
});
// 明细
this.getBoxGoodsDetail();
// 状态
getLogList(param).then((res) => {
this.logList = res.data;
});
// 费用
this.getCost();
// 异常
getAbnormalList(param).then((res) => {
this.errorList = res.data;
});
//表单
},
// 出货信息
getBoxDetail() {
getbox(this.shipmentId).then((res) => {
const { data } = res;
this.shipmentObj = data ?? {};
});
},
// 获取费用
getCost() {
getCostList({ shipmentId: this.shipmentId }).then((res) => {
this.costList = res.data;
});
},
// 部分切换
sectionChange() {
this.getBoxGoodsDetail();
},
// 获取部分详情以及物品
getBoxGoodsDetail() {
boxGoodsDetail({
shipmentId: this.shipmentId,
secId: this.sectionId,
}).then((res) => {
this.sectionObj = res.data;
});
},
// 供应商
getSupplier(id) {
let arr = this.allSupplier.find((item) => item.id == id) ?? {};
return this.$l(arr, "company");
},
editCostClick(row) {
this.costDetail = row;
this.handleCommand("cost");
},
deleteCostClick(row) {
deleteCost(row.id).then((res) => {
serviceMsg(res, this).then((res) => {
this.getCost();
});
});
},
/* 跳转订单详情 */
jumpOrderDetail(row) {
this.$router.push({
path: "/order/detail",
query: { orderId: row.orderId },
});
},
// 事件执行
handleCommand(type) {
switch (type) {
case "edit":
this.$set(this.dialogConfig, "visible", true);
this.$set(this.dialogConfig, "title", this.$t("修改出货"));
this.$set(this.dialogConfig, "type", "edit");
break;
case "router":
this.$router.push("/boxSea/shippingSea/" + this.shipmentId);
break;
case "cost":
this.$set(this.dialogConfig, "visible", true);
this.$set(this.dialogConfig, "title", this.$t("费用登记"));
this.$set(this.dialogConfig, "type", "cost");
break;
case "error":
this.$set(this.dialogConfig, "visible", true);
this.$set(this.dialogConfig, "title", this.$t("异常登记"));
this.$set(this.dialogConfig, "type", "error");
break;
case "delete":
this.$modal
.confirm(
this.$t("是否确认删除出货编号为 {no} 的数据项?", {
no: this.shipmentObj.selfNo,
})
)
.then(() => {
return deletebox(this.shipmentId);
})
.then((res) => {
serviceMsg(res, this).then((res) => {
// 获取当前path
const currPath = this.$router.currentRoute.path;
// 根据path获取view
const view = this.visitedViews.find(
(item) => item.path === currPath
);
if (view) {
this.$store.dispatch("tagsView/delView", view);
this.$router.push("/shipment/boxSea");
}
});
})
.catch(() => {});
break;
case "updateError":
this.$set(this.dialogConfig, "visible", true);
this.$set(this.dialogConfig, "type", "updateError");
break;
}
},
// 关闭弹框
closeDialog(type) {
this.$set(this.dialogConfig, "visible", false);
if (type === "edit") {
this.getBoxDetail();
}
if (type === "cost") {
this.getCost();
}
if (type === "error") {
getAbnormalList({ shipmentId: this.shipmentId }).then((res) => {
this.errorList = res.data;
});
}
if (type === "detail") {
this.getBoxGoodsDetail();
}
},
formatDate,
downloadDetailFile(row) {
const { fileFormat, type } = row;
if (type === "url") {
downloadFileByUrl(row.serviceName, { shipmentId: this.shipmentId });
} else {
let fileName = `${row.title}(${this.shipmentObj.selfNo}).${
fileFormat ?? "xlsx"
}`;
downloadFile(
row.serviceName,
{ shipmentId: this.shipmentId },
fileName,
fileFormat ?? "xlsx"
);
}
},
},
computed: {
visitedViews() {
return this.$store.state.tagsView.visitedViews;
},
// 单证状态
getDocStatus() {
return (list = []) => {
// 获取类型
let customsTypes = list.map((item) => item.customsType);
// 去重
return Array.from(new Set(customsTypes));
};
},
/* 渠道 */
getShipChannelName() {
return (shippingChannelId) => {
for (const channelItem of this.channelList) {
if (channelItem.channelId == shippingChannelId) {
return this.$l(channelItem, "name");
}
}
};
},
/* 获取柜型 */
getCabinetLabel() {
return (cabinetId) => {
for (const cabinetItem of this.cabinetList) {
if (cabinetItem.id == cabinetId) {
return cabinetItem.name;
}
}
};
},
/* 总计 */
getBoxSum() {
return (boxStatistics) => {
if (boxStatistics) {
return this.$t("{num}箱 {volume}m³ {weight}kg", {
num: boxStatistics.num ?? 0,
volume: boxStatistics.volume ?? 0,
weight: boxStatistics.weight ?? 0,
});
}
return;
};
},
/* 获取仓库 */
getCityName() {
return (id) => {
let arr = this.warehouseList.filter((item) => item.id == id);
return arr.length > 0 ? this.$l(arr[0], "title") : this.$t("无");
};
},
// 部分信息
getSectionInfo() {
const { totalStatistics, secStatistics } = this.sectionObj;
if (!this.sectionId) {
return getTotlContent(totalStatistics);
} else {
return getTotlContent(secStatistics);
}
},
getClearance() {
return (id) => {
let data = ['','我司清关','合作方清关','客户']
return data[id]
}
},
getdeliveryType() {
return (id) => {
let data = ['','多票','单票']
return data[id]
}
}
},
};
</script>
<style lang="scss">
.shipping-detail {
.detail-pane {
display: flex;
align-items: center;
margin-bottom: 5px;
.box-weight {
margin-left: 10px;
}
.document-status {
flex: 1;
justify-content: flex-end;
display: flex;
align-items: center;
> span {
margin-right: 10px;
}
}
}
.el-table__body {
.customsType-red {
color: red;
}
}
.shipping-status {
position: relative;
display: flex;
.status-line {
width: 1px;
height: calc(100% - 35px);
background-color: #e8eaec;
position: absolute;
left: 13px;
top: 30px;
}
.status-number {
width: 26px;
height: 26px;
border: 1px solid #ccc;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
}
.status-info {
color: #999;
margin-left: 20px;
> :first-child {
font-size: 14px;
font-weight: bolder;
line-height: 26px;
}
> :last-child {
line-height: 26px;
display: flex;
> p {
margin: 0;
margin-right: 10px;
}
}
}
&.curr-status {
.status-number {
color: #fff;
background-color: #2d8cf0;
border-color: #2d8cf0;
}
.status-info {
color: #666;
}
}
}
}
</style>
<template>
<div>
<el-row type="flex" style="margin-top: 15px; margin-bottom: 15px" justify="center">
<el-col :xs="24" :sm="24" :md="24" :lg="20" :xl="22">
<el-card>
<el-descriptions :column="4" border>
<el-descriptions-item :label="$t('自编号')">
{{ shipmentObj.selfNo }}
</el-descriptions-item>
<el-descriptions-item :label="$t('运输方式')">
<dict-tag :type="DICT_TYPE.ECW_TRANSPORT_TYPE" :value="shipmentObj.transportType" />
</el-descriptions-item>
<el-descriptions-item :label="$t('始发地')">
{{ getCityName(shipmentObj.startWarehouseId) }}
</el-descriptions-item>
<el-descriptions-item :label="$t('目的地')">
{{ getCityName(shipmentObj.destWarehouseId) }}
</el-descriptions-item>
</el-descriptions>
</el-card>
<el-row style="margin-top: 15px">
<el-row>
<el-button
size="small"
type="primary"
@click="
addMergedialogVisible = true
addMergeForm = {}
mergeTitle = $t('新建合包箱号')
"
>{{ $t('新建合包箱号') }}</el-button
>
</el-row>
<el-row style="margin-top: 5px">
<el-table border :data="pagList" max-height="600px">
<el-table-column align="center" :label="$t('序号')" width="50" prop="tidanNum" />
<el-table-column :label="$t('箱号')" align="center" prop="pkgNum" />
<el-table-column :label="$t('尺寸')" width="250px" align="center">
<template slot-scope="scope"> {{ scope.row.pkgLength }}*{{ scope.row.pkgWidth }}*{{ scope.row.pkgHight }} </template>
</el-table-column>
<el-table-column :label="$t('订单数')" width="250px" align="center" prop="orderCount" />
<el-table-column :label="$t('箱数')" width="250px" align="center" prop="sumCount" />
<el-table-column :label="$t('入仓体积')" width="250px" align="center" prop="sumVolume" />
<el-table-column :label="$t('入仓重量')" align="center" prop="sumWeight" />
<el-table-column :label="$t('入仓数量(个)')" align="center" prop="sumQuantity" />
<el-table-column :label="$t('状态')" align="center" prop="tallyStatus">
<template slot-scope="scope">
{{ statusData[scope.row.status] }}
</template>
</el-table-column>
<el-table-column :label="$t('创建时间')" align="center">
<template slot-scope="scope">
{{ formatDate(scope.row.createTime, 'YYYY-MM-DD HH:mm:ss') }}
</template>
</el-table-column>
<el-table-column :label="$t('操作')" align="center" width="260" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button v-if="scope.row.status == 1" type="text" size="small" @click="editMerge(scope.row)">{{ $t('编辑') }}</el-button>
<el-button type="text" size="small" @click="pkgPage(scope.row)">{{ $t('装箱') }}</el-button>
<el-button v-if="scope.row.status != 2" type="text" size="small" @click="deleteMerge(scope.row.id)">{{ $t('删除') }}</el-button>
<el-button type="text" size="small" @click="removeClick('single', scope.row)">{{ $t('打印标签') }}</el-button>
</template>
</el-table-column>
</el-table>
</el-row>
</el-row>
<!-- 新增合包箱 -->
<el-dialog :title="mergeTitle" :visible.sync="addMergedialogVisible" width="700px" :modal-append-to-body="false" append-to-body>
<el-form ref="addMergeForm" :model="addMergeForm" label-width="100px">
<el-form-item :label="$t('箱号')" prop="pkgNum">
{{ !isMergeEdit ? '自动生成' : addMergeForm.pkgNum }}
</el-form-item>
<el-form-item v-if="!isMergeEdit" :label="$t('数量')" prop="num" :rules="[{ required: true, message: this.$t('数量不能为空'), trigger: 'blur' }]">
<el-input-number v-model="addMergeForm.num" :controls="false" :min="1" :precision="0" />
</el-form-item>
<el-row>
<el-col :span="8">
<el-form-item :label="$t('长')" prop="pkgLength">
<el-input-number v-model="addMergeForm.pkgLength" :controls="false" :precision="2" style="width: 100px" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item :label="$t('宽')" prop="pkgWidth">
<el-input-number v-model="addMergeForm.pkgWidth" :controls="false" :precision="2" style="width: 100px" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item :label="$t('高')" prop="pkgHight">
<el-input-number v-model="addMergeForm.pkgHight" :controls="false" :precision="2" style="width: 100px" />
</el-form-item>
</el-col>
</el-row>
</el-form>
<div style="text-align: center">
<el-button size="small" type="primary" @click="addMerge">{{ $t('确定') }}</el-button>
<el-button size="small" type="primary" @click="addMergedialogVisible = false">{{ $t('取消') }}</el-button>
</div>
</el-dialog>
<!-- 装箱 -->
<el-dialog :title="pkgPageTitle" :visible.sync="pkgPagedialogVisible" :fullscreen="true" :modal-append-to-body="false" append-to-body>
<el-radio-group v-model="pkgPageType">
<el-radio-button :label="1">{{$t('未装箱列表')}}</el-radio-button>
<el-radio-button :label="2">{{$t('已装箱列表')}}</el-radio-button>
</el-radio-group>
<un-pkg-page v-if="pkgPageType == 1" />
<pkg-page v-if="pkgPageType == 2" />
</el-dialog>
<el-row style="margin-top: 15px" class="operate-button">
<el-button size="small" type="primary" @click="finish">{{ $t('完成') }}</el-button>
<el-button size="small" @click="$emit('closeDialog')">{{ $t('取消') }}</el-button>
</el-row>
</el-col>
</el-row>
</div>
</template>
<script>
import { getMergePkgList, createMergePkg, updateMergePkg, deleteMergePkg } from '@/api/ecw/boxAir'
import { formatDate, serviceMsg } from '../../utils'
import unPkgPage from './unPkgPage.vue'
import PkgPage from './pkgPage.vue'
export default {
components: {
unPkgPage,
PkgPage
},
data() {
return {
pagList: [],
statusData: ['', '未装箱', '装箱中', '已封箱'],
// 查询参数
queryParams: {
page: 1,
rows: 10,
shipmentId: this.$attrs.shipmentObj.id
},
// 出货信息
shipmentObj: this.$attrs.shipmentObj,
addMergedialogVisible: false,
addMergeForm: {},
mergeTitle: '',
isMergeEdit: false,
pkgPageType: 1,
pkgPageTitle: '',
pkgPagedialogVisible: false
}
},
created() {
this.getList()
},
computed: {
/* 获取仓库 */
getCityName() {
return (id) => {
let arr = this.$attrs.warehouseList.filter((item) => item.id == id)
return arr.length > 0 ? this.$l(arr[0], 'title') : this.$t('')
}
}
},
methods: {
formatDate,
getList() {
getMergePkgList(this.queryParams).then((res) => {
this.pagList = res.data.list
})
},
editMerge(row) {
this.mergeTitle = this.$t('编辑合包箱号')
this.isMergeEdit = true
this.addMergedialogVisible = true
this.addMergeForm.pkgNum = row.pkgNum
this.addMergeForm.pkgLength = row.pkgLength
this.addMergeForm.pkgWidth = row.pkgWidth
this.addMergeForm.pkgHight = row.pkgHight
this.addMergeForm.id = row.id
},
addMerge() {
this.$refs['addMergeForm'].validate((valid) => {
if (!valid) {
return
}
this.addMergeForm.shipmentId = this.$attrs.shipmentObj.id
if (!this.addMergeForm.id) {
createMergePkg(this.addMergeForm).then((res) => {
serviceMsg(res, this).then(() => {
this.addMergedialogVisible = false
this.getList()
})
})
} else {
updateMergePkg(this.addMergeForm).then((res) => {
serviceMsg(res, this).then(() => {
this.addMergedialogVisible = false
this.getList()
})
})
}
})
},
deleteMerge(id) {
this.$modal
.confirm(this.$t('是否确认删除?'))
.then(function () {
return deleteMergePkg(id)
})
.then(() => {
this.getList()
this.$modal.msgSuccess(this.$t('删除成功'))
})
.catch(() => {})
},
pkgPage(row) {
this.pkgPagedialogVisible = true
this.pkgPageTitle = this.$t('合包箱号: ')+row.pkgNum
},
finish() {}
}
}
</script>
<style>
</style>
\ No newline at end of file
<template>
<div>
22
</div>
</template>
<script>
export default {
}
</script>
<style>
</style>
\ No newline at end of file
<template>
<div>
11
</div>
</template>
<script>
export default {
}
</script>
<style>
</style>
\ No newline at end of file
...@@ -46,6 +46,7 @@ import unloadingWidget from "./nodePage/unloading/index.vue"; ...@@ -46,6 +46,7 @@ import unloadingWidget from "./nodePage/unloading/index.vue";
import settlementWidget from "./nodePage/settlement.vue"; import settlementWidget from "./nodePage/settlement.vue";
import reviewWidget from "./nodePage/review.vue"; import reviewWidget from "./nodePage/review.vue";
import tallyWidget from "./nodePage/tally/index.vue"; import tallyWidget from "./nodePage/tally/index.vue";
import mergePkgWidget from "./nodePage/mergePkg/index.vue";
import {checkPermi} from '@/utils/permission' import {checkPermi} from '@/utils/permission'
/** /**
...@@ -75,6 +76,7 @@ export default { ...@@ -75,6 +76,7 @@ export default {
settlementWidget, settlementWidget,
reviewWidget, reviewWidget,
tallyWidget, tallyWidget,
mergePkgWidget
}, },
props: { props: {
shipmentObj: Object, shipmentObj: Object,
...@@ -133,7 +135,7 @@ export default { ...@@ -133,7 +135,7 @@ export default {
}, },
/** 节点点击 */ /** 节点点击 */
nodeClick(currIndex, node) { nodeClick(currIndex, node) {
if (!checkPermi(['box:'+node.type+':show'])) { if (!checkPermi(['box:'+node.type+':action'])) {
this.$message.error(this.$t("没有此操作的权限")); this.$message.error(this.$t("没有此操作的权限"));
return; return;
} }
...@@ -149,8 +151,12 @@ export default { ...@@ -149,8 +151,12 @@ export default {
switch (node.type) { switch (node.type) {
// 订舱 // 订舱
case "booking": case "booking":
// 驳船 break;
case "barge": // 合包
case "mergePkg":
this.$set(this.dialogConfig, "fullscreen", true);
this.$set(this.dialogConfig, "title", this.$t("合包列表"));
break;
// 清关文件 // 清关文件
case "clrDocument": case "clrDocument":
this.$set(this.dialogConfig, "width", "700px"); this.$set(this.dialogConfig, "width", "700px");
......
...@@ -78,21 +78,21 @@ function airBaseData() { ...@@ -78,21 +78,21 @@ function airBaseData() {
{ {
title: i18n.$t("合包"), title: i18n.$t("合包"),
imgSrc: { imgSrc: {
start: require("@/assets/images/shipping/tc-start.png"), start: require("@/assets/images/shipping/qg-start.png"),
wait: require("@/assets/images/shipping/tc-wait.png"), wait: require("@/assets/images/shipping/qg-wait.png"),
end: require("@/assets/images/shipping/tc-end.png"), end: require("@/assets/images/shipping/qg-end.png"),
}, },
type: "trailer", type: "mergePkg",
dataKey: "3", // 字典数据键值 dataKey: "3", // 字典数据键值
/** /**
* 拖车状态:31、未派车;32、已派车 * 合包状态:161待合包 162已合包
*/ */
voName: "trailerInfo", voName: "trailerInfo",
keyName: "tlStatus", keyName: "mergePkgStatus",
status: { status: {
start: [31], start: [161],
wait: [], wait: [],
end: [32], end: [162],
}, },
}, },
], ],
......
...@@ -96,11 +96,11 @@ export default { ...@@ -96,11 +96,11 @@ export default {
"channelId":'', "channelId":'',
"clearancePrice":'', "clearancePrice":'',
"clearancePriceUnit":'', "clearancePriceUnit":'',
"clearanceVolumeUnit":'', "clearanceVolumeUnit":6,
"endNum":'', "endNum":'',
"packagingId":'', "packagingId":'',
"startNum":'', "startNum":'',
"weightUnit":'' "weightUnit":6
} }
this.value1[this.keyArr].push(p) this.value1[this.keyArr].push(p)
this.$forceUpdate(); this.$forceUpdate();
......
...@@ -294,7 +294,16 @@ export default { ...@@ -294,7 +294,16 @@ export default {
this.form.channelPackagingList[index].channelPriceStepClearanceList[indexx] = p; this.form.channelPackagingList[index].channelPriceStepClearanceList[indexx] = p;
} }
let it = this.form.channelPackagingList[index].channelPriceStepClearanceList[indexx] let it = this.form.channelPackagingList[index].channelPriceStepClearanceList[indexx]
this.form.channelPackagingList[index].channelPriceStepClearanceList[indexx] = {...p,...it,clearancePrice:itemm.clearancePrice,clearancePriceUnit:itemm.clearancePriceUnit,clearanceVolumeUnit:itemm.clearanceVolumeUnit} ; this.form.channelPackagingList[index].channelPriceStepClearanceList[indexx] = {
...p,
...it,
clearancePrice:itemm.clearancePrice,
clearancePriceUnit:itemm.clearancePriceUnit,
clearanceVolumeUnit:itemm.clearanceVolumeUnit,
endNum:itemm.endNum,
startNum:itemm.startNum,
weightUnit:itemm.weightUnit
} ;
}) })
}) })
this.$forceUpdate() this.$forceUpdate()
......
...@@ -99,7 +99,7 @@ ...@@ -99,7 +99,7 @@
<el-table-column :label="$t('重量')" align="center" prop="completeWeight"/> <el-table-column :label="$t('重量')" align="center" prop="completeWeight"/>
<el-table-column :label="$t('方数')" align="center" prop="completeVolume"/> <el-table-column :label="$t('方数')" align="center" prop="completeVolume"/>
<el-table-column :label="$t('下单时间')" align="center" prop="createTime"/> <el-table-column :label="$t('下单时间')" align="center" prop="createTime"/>
<el-table-column :label="$t('装柜时间')" align="center" prop="ldBoxTime"/> <el-table-column :label="$t('业绩创建时间')" align="center" prop="ldBoxTime"/>
<el-table-column :label="$t('客户经理')" align="center" prop="userId" :formatter="customerServiceFn"> <el-table-column :label="$t('客户经理')" align="center" prop="userId" :formatter="customerServiceFn">
</el-table-column> </el-table-column>
</el-table> </el-table>
......
...@@ -98,7 +98,7 @@ ...@@ -98,7 +98,7 @@
<el-table-column :label="$t('重量')" align="center" prop="completeWeight"/> <el-table-column :label="$t('重量')" align="center" prop="completeWeight"/>
<el-table-column :label="$t('方数')" align="center" prop="completeVolume"/> <el-table-column :label="$t('方数')" align="center" prop="completeVolume"/>
<el-table-column :label="$t('下单时间')" align="center" prop="createTime"/> <el-table-column :label="$t('下单时间')" align="center" prop="createTime"/>
<el-table-column :label="$t('装柜时间')" align="center" prop="ldBoxTime"/> <el-table-column :label="$t('业绩创建时间')" align="center" prop="ldBoxTime"/>
<el-table-column :label="$t('客户经理')" align="center" prop="userId" :formatter="customerServiceFn"> <el-table-column :label="$t('客户经理')" align="center" prop="userId" :formatter="customerServiceFn">
</el-table-column> </el-table-column>
</el-table> </el-table>
......
...@@ -124,8 +124,11 @@ ...@@ -124,8 +124,11 @@
:key="item.channelId"></el-option> :key="item.channelId"></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item :label="$t('立方数')" prop="cubeNum"> <el-form-item :label="$t('目标值')" prop="cubeNum">
<el-input v-model="form.cubeNum" :placeholder="$t('请输入立方数')"/> <el-input v-model="form.cubeNum" :placeholder="$t('请输入目标值')"/>
</el-form-item>
<el-form-item :label="$t('目标单位')" prop="cubeUnit">
<dict-selector :type="DICT_TYPE.CEBE_UNIT" v-model="form.cubeUnit" :placeholder="$t('请选择目标单位')" />
</el-form-item> </el-form-item>
</el-form> </el-form>
<div slot="footer" class="dialog-footer"> <div slot="footer" class="dialog-footer">
......
...@@ -931,6 +931,9 @@ export default { ...@@ -931,6 +931,9 @@ export default {
if(updateChannel){ if(updateChannel){
this.$set(this, 'showWorkFlow', true) this.$set(this, 'showWorkFlow', true)
} }
},
'$route.query.transportType'(transportType){
this.$set(this.form, 'transportId', +transportType)
} }
}, },
activated(){ activated(){
......
...@@ -157,10 +157,10 @@ ...@@ -157,10 +157,10 @@
</el-form-item> </el-form-item>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column :label="$t('数量')" width="130px"> <el-table-column :label="$t('数量')" width="140px">
<template v-slot="{r,c,$index}"> <template v-slot="{r,c,$index}">
<el-form-item :rules="tableFormRules.quantityAll"> <el-form-item :rules="tableFormRules.quantityAll">
<el-input :disabled="$index < protectRowCount" v-model.number="form.table[$index].quantityAll" placeholder=""> <el-input :disabled="$index < protectRowCount" v-model.number="form.table[$index].quantityAll" placeholder="" type="number">
<template slot="append">{{ $t('') }}</template> <template slot="append">{{ $t('') }}</template>
</el-input> </el-input>
</el-form-item> </el-form-item>
...@@ -371,11 +371,11 @@ ...@@ -371,11 +371,11 @@
</el-form-item> </el-form-item>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column :label="$t('数量')" width="130px"> <el-table-column :label="$t('数量')" width="140px">
<template v-slot="{r,c,$index}"> <template v-slot="{r,c,$index}">
<el-form-item> <el-form-item>
<span v-if="form1.table[$index].id">{{ form1.table[$index].quantityAll }}</span> <span v-if="form1.table[$index].id">{{ form1.table[$index].quantityAll }}</span>
<el-input v-else v-model.number="form1.table[$index].quantityAll" placeholder=""> <el-input v-else type="number" v-model.number="form1.table[$index].quantityAll" placeholder="">
<template slot="append">{{ $t('') }}</template> <template slot="append">{{ $t('') }}</template>
</el-input> </el-input>
</el-form-item> </el-form-item>
......
...@@ -164,7 +164,7 @@ ...@@ -164,7 +164,7 @@
<span style="font-size: 18px">{{$t('入仓影像')}}</span> <span style="font-size: 18px">{{$t('入仓影像')}}</span>
</div> </div>
<div> <div>
<image-and-video-upload readonly :fileSize="50" :isShowTip="true" :value="[...form.urls, ...this.orderItemList.map(e => e.pictureUrls).flat()]" ></image-and-video-upload> <image-and-video-upload readonly :fileSize="50" :isShowTip="true" :value="[...form.urls, ...this.orderItemList.map(e => e.pictureUrls || []).flat()]" ></image-and-video-upload>
</div> </div>
</el-card> </el-card>
<div style="text-align: center;margin-top: 15px" v-if="!(order.status !== 3 && isEdit)"> <div style="text-align: center;margin-top: 15px" v-if="!(order.status !== 3 && isEdit)">
......
...@@ -232,7 +232,7 @@ ...@@ -232,7 +232,7 @@
复制模板线路价格:{{lineNum}}个 复制模板线路价格:{{lineNum}}个
</span> </span>
<span @click="toPriceManager(formCopy)" style="color: #0a84ff;cursor: pointer;"> <span @click="toPriceManager(formCopy)" style="color: #0a84ff;cursor: pointer;">
查看《#选择空运商品模板名称#》路线价格 查看《#{{$l(formCopy,'title')}}#》路线价格
</span> </span>
</p> </p>
</el-form> </el-form>
...@@ -424,16 +424,19 @@ export default { ...@@ -424,16 +424,19 @@ export default {
this.form.priceStepClearanceList[index].clearancePrice = item.clearancePrice this.form.priceStepClearanceList[index].clearancePrice = item.clearancePrice
this.form.priceStepClearanceList[index].clearancePriceUnit = item.clearancePriceUnit this.form.priceStepClearanceList[index].clearancePriceUnit = item.clearancePriceUnit
this.form.priceStepClearanceList[index].clearanceVolumeUnit = item.clearanceVolumeUnit this.form.priceStepClearanceList[index].clearanceVolumeUnit = item.clearanceVolumeUnit
this.form.priceStepClearanceList[index].endNum = item.endNum
this.form.priceStepClearanceList[index].startNum = item.startNum
this.form.priceStepClearanceList[index].weightUnit = item.weightUnit
}else { }else {
let p = { let p = {
"channelId":'', "channelId":undefined,
"clearancePrice":item.clearancePrice, "clearancePrice":item.clearancePrice,
"clearancePriceUnit":item.clearancePriceUnit, "clearancePriceUnit":item.clearancePriceUnit,
"clearanceVolumeUnit":item.clearanceVolumeUnit, "clearanceVolumeUnit":item.clearanceVolumeUnit,
"endNum":'', "endNum":item.endNum,
"packagingId":'', "packagingId":undefined,
"startNum":'', "startNum":item.startNum,
"weightUnit":'' "weightUnit":item.weightUnit
} }
this.form.priceStepClearanceList.push(p) this.form.priceStepClearanceList.push(p)
} }
......
...@@ -43,7 +43,7 @@ ...@@ -43,7 +43,7 @@
复制模板线路价格:{{lineNum}}个 复制模板线路价格:{{lineNum}}个
</span> </span>
<span @click="toPriceManager(formCopv)" style="color: #0a84ff;cursor: pointer;"> <span @click="toPriceManager(formCopv)" style="color: #0a84ff;cursor: pointer;">
查看《#选择空运商品模板名称#》路线价格 查看《#{{$l(formCopv,'title')}}#》路线价格
</span> </span>
</p> </p>
<el-form-item> <el-form-item>
...@@ -154,16 +154,19 @@ export default { ...@@ -154,16 +154,19 @@ export default {
this.form.priceStepClearanceList[index].clearancePrice = item.clearancePrice this.form.priceStepClearanceList[index].clearancePrice = item.clearancePrice
this.form.priceStepClearanceList[index].clearancePriceUnit = item.clearancePriceUnit this.form.priceStepClearanceList[index].clearancePriceUnit = item.clearancePriceUnit
this.form.priceStepClearanceList[index].clearanceVolumeUnit = item.clearanceVolumeUnit this.form.priceStepClearanceList[index].clearanceVolumeUnit = item.clearanceVolumeUnit
this.form.priceStepClearanceList[index].endNum = item.endNum
this.form.priceStepClearanceList[index].startNum = item.startNum
this.form.priceStepClearanceList[index].weightUnit = item.weightUnit
}else { }else {
let p = { let p = {
"channelId":'', "channelId":'',
"clearancePrice":item.clearancePrice, "clearancePrice":item.clearancePrice,
"clearancePriceUnit":item.clearancePriceUnit, "clearancePriceUnit":item.clearancePriceUnit,
"clearanceVolumeUnit":item.clearanceVolumeUnit, "clearanceVolumeUnit":item.clearanceVolumeUnit,
"endNum":'', "endNum":item.endNum,
"packagingId":'', "packagingId":'',
"startNum":'', "startNum":item.startNum,
"weightUnit":'' "weightUnit":item.weightUnit
} }
this.form.priceStepClearanceList.push(p) this.form.priceStepClearanceList.push(p)
} }
......
...@@ -777,19 +777,24 @@ export default { ...@@ -777,19 +777,24 @@ export default {
} }
}else{ }else{
// 全包价 的阶段 设置和运费(全包价)不能为空 // 全包价 的阶段 设置和运费(全包价)不能为空
let stepPriceEmpty = false let stepPriceEmpty = []
this.form.priceStepList.forEach(item => { this.form.priceStepList.forEach((item, index) => {
let notEmptyFields = ['startNum', 'endNum', 'weightUnit'] let notEmptyFields = ['endNum', 'weightUnit']
// 第一条阶梯的起始值可以是0,其他的不能为0
if(index){
notEmptyFields.push('startNum')
}
notEmptyFields.forEach(field => { notEmptyFields.forEach(field => {
if(!item[field] || item[field].toString().trim() == ''){ if(!item[field] || item[field].toString().trim() == ''){
stepPriceEmpty = true stepPriceEmpty.push({index, field})
} }
}) })
if((this.form.priceType == 0 && !item.transportPrice) || (this.form.priceType == 1 && !item.allPrice)){ if((this.form.priceType == 0 && !item.transportPrice) || (this.form.priceType == 1 && !item.allPrice)){
stepPriceEmpty = true stepPriceEmpty.push({index, field: !item.transportPrice ? 'transportPrice' : 'allPrice'})
} }
}) })
if(stepPriceEmpty){ if(stepPriceEmpty.length){
console.log('stepPriceEmpty', stepPriceEmpty)
return this.$message.error(this.$t('阶梯和价格设置不能留空')) return this.$message.error(this.$t('阶梯和价格设置不能留空'))
} }
} }
...@@ -813,7 +818,7 @@ export default { ...@@ -813,7 +818,7 @@ export default {
this.loading = true this.loading = true
return updateProductPrice(data).then(res => { return updateProductPrice(data).then(res => {
this.$modal.msgSuccess(this.$t("请求成功")); this.$modal.msgSuccess(this.$t("请求成功"));
this.$router.back() this.$tab.closePage()
}).finally(res => this.loading = false) }).finally(res => this.loading = false)
} }
......
...@@ -12,11 +12,11 @@ ...@@ -12,11 +12,11 @@
<el-option v-for="type in typeList" :key="type.id" :label="type.titleZh" :value="type.id"/> <el-option v-for="type in typeList" :key="type.id" :label="type.titleZh" :value="type.id"/>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item :label="$t('运输方式')" prop="transportType"> <el-form-item :label="$t('运输方式')" prop="transportType" v-if="!transportType">
<dict-selector :type="DICT_TYPE.ECW_TRANSPORT_TYPE" v-model="queryParams.transportType" formatter="number" clearable /> <dict-selector :type="DICT_TYPE.ECW_TRANSPORT_TYPE" v-model="queryParams.transportType" formatter="number" clearable />
</el-form-item> </el-form-item>
<!--海运不显示渠道--> <!--海运不显示渠道-->
<el-form-item :label="$t('出货渠道')" prop="shippingChannelId" v-if="type == 'sea'"> <el-form-item :label="$t('出货渠道')" prop="shippingChannelId" v-if="type == 'air'">
<el-select v-model="queryParams.shippingChannelId" clearable> <el-select v-model="queryParams.shippingChannelId" clearable>
<el-option v-for="item in channelList" :key="item.id" :label="$l(item, 'name')" :value="item.channelId" /> <el-option v-for="item in channelList" :key="item.id" :label="$l(item, 'name')" :value="item.channelId" />
</el-select> </el-select>
...@@ -732,7 +732,7 @@ export default { ...@@ -732,7 +732,7 @@ export default {
}, },
// 批量修改单个商品的价格(一条或者多条,后者全部路线) // 批量修改单个商品的价格(一条或者多条,后者全部路线)
batchSetSingleProductPrice(type){ batchSetSingleProductPrice(type){
this.$router.push(`../../lineProject/product-price/edit?action=batchUpdate&type=${type}&product_id=${this.$route.query.product_id}&ids=${this.ids}`) this.$router.push(`../../lineProject/product-price/edit-${type}?action=batchUpdate&type=${type}&product_id=${this.$route.query.product_id}&ids=${this.ids}`)
}, },
// 批量设置路线 // 批量设置路线
handleBatchEdit(type) { handleBatchEdit(type) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment