Commit 80da72cf authored by liuzeheng's avatar liuzeheng
parents f34ae302 31d93922
...@@ -59,6 +59,15 @@ export function getCustomerContactsSelect(query) { ...@@ -59,6 +59,15 @@ export function getCustomerContactsSelect(query) {
params: query params: query
}) })
} }
export function getCustomerContactsSelect2(query) {
return request({
url: '/ecw/customer-contacts/select2',
method: 'get',
params: query
})
}
// 导出客户联系人 Excel // 导出客户联系人 Excel
export function exportCustomerContactsExcel(query) { export function exportCustomerContactsExcel(query) {
return request({ return request({
......
<template> <template>
<el-dialog :title="$t('选择联系人')" visible :before-close="closeDialog" :close-on-click-modal="false"> <el-dialog
:title="$t('选择联系人')"
visible
:before-close="closeDialog"
:close-on-click-modal="false"
>
<div class="header mb-10 flex-center"> <div class="header mb-10 flex-center">
<div class="flex-center">{{$t('关键字')}}</div> <div class="flex-center">{{ $t("关键字") }}</div>
<el-input v-model="form.searchKey" clearable class="w-200"></el-input> <el-input v-model="form.searchKey" clearable class="w-200"></el-input>
<el-button type="primary" class="ml-10" @click="handleQuery">{{$t('搜索')}}</el-button> <el-button type="primary" class="ml-10" @click="handleQuery">{{
$t("搜索")
}}</el-button>
</div> </div>
<div class="list"> <div class="list">
<div class="list-item" v-for="item in list" :key="item.customerContactsId" @click="choose(item)"> <div
class="list-item"
v-for="item in list"
:key="item.customerContactsId"
@click="choose(item)"
>
<div class="item-box"> <div class="item-box">
<div class="line"> <div class="line">
<div class="label">{{$t('姓名')}}</div> <div class="label">{{ $t("姓名") }}</div>
<div class="value">{{item.contactsName}}</div> <div class="value">{{ item.contactsName }}</div>
<el-tag v-if="item.isInOpenSea" type="danger" effect="dark">{{$t('')}}</el-tag> <el-tag v-if="item.isInOpenSea" type="danger" effect="dark">{{
$t("")
}}</el-tag>
</div> </div>
<!-- v1.7新增 --> <!-- v1.7新增 -->
<div class="line"> <div class="line">
<div class="label">{{$t('姓名(英文)')}}</div> <div class="label">{{ $t("姓名(英文)") }}</div>
<div class="value">{{item.contactsNameEn}}</div> <div class="value">{{ item.contactsNameEn }}</div>
</div> </div>
<div class="line"> <div class="line">
<div class="label">{{$t('电话')}}</div> <div class="label">{{ $t("电话") }}</div>
<div class="value">+{{item.areaCode}} {{item.phoneNew}}</div> <div class="value">+{{ item.areaCode }} {{ item.phoneNew }}</div>
</div> </div>
<div class="line"> <div class="line">
<div class="label">{{$t('邮箱')}}</div> <div class="label">{{ $t("邮箱") }}</div>
<div class="value">{{item.email}}</div> <div class="value">{{ item.email }}</div>
</div> </div>
<div class="line"> <div class="line">
<div class="label">{{$t('公司')}}</div> <div class="label">{{ $t("公司") }}</div>
<div class="value">{{item.company}}</div> <div class="value">{{ item.company }}</div>
</div> </div>
<!-- v1.7新增 --> <!-- v1.7新增 -->
<div class="line"> <div class="line">
<div class="label">{{$t('公司(英文)')}}</div> <div class="label">{{ $t("公司(英文)") }}</div>
<div class="value">{{item.companyEn}}</div> <div class="value">{{ item.companyEn }}</div>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
<pagination v-show="total > 0" :total="total" :page.sync="form.pageNo" :limit.sync="form.pageSize" <pagination
@pagination="loadList" /> v-show="total > 0"
:total="total"
:page.sync="form.pageNo"
:limit.sync="form.pageSize"
@pagination="loadList"
/>
</el-dialog> </el-dialog>
</template> </template>
<script> <script>
import {getCustomerContactsSelect} from '@/api/ecw/customerContacts' import {
getCustomerContactsSelect,
getCustomerContactsSelect2,
} from "@/api/ecw/customerContacts";
export default { export default {
props:{ props: {
type: Number type: Number,
}, },
data(){ data() {
return { return {
show: true, show: true,
form:{ form: {
pageNo: 1, pageNo: 1,
pageSize: 10, pageSize: 10,
searchKey: '' searchKey: "",
}, },
list:[], list: [],
total: 0 total: 0,
} };
}, },
created(){ created() {
this.show = true this.show = true;
this.loadList() this.loadList();
}, },
methods:{ methods: {
handleQuery(){ handleQuery() {
this.form.pageNo = 1 this.form.pageNo = 1;
this.loadList() this.loadList();
}, },
loadList(){ loadList() {
getCustomerContactsSelect(this.form).then(res => { //加载联系人数据,怎样使用属性
this.list = res.data.list if (this.type == "1") {
this.total = res.data.total getCustomerContactsSelect2(this.form).then((res) => {
}) this.list = res.data.list;
this.total = res.data.total;
});
} else {
getCustomerContactsSelect(this.form).then((res) => {
this.list = res.data.list;
this.total = res.data.total;
});
}
}, },
closeDialog(){ closeDialog() {
this.show = false this.show = false;
this.$emit('close'); this.$emit("close");
}, },
choose(contact){ choose(contact) {
this.$emit('choose', contact) this.$emit("choose", contact);
} },
},
} };
}
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.header{ .header {
display: flex; display: flex;
} }
.list{ .list {
display: flex; display: flex;
flex-wrap: wrap; flex-wrap: wrap;
justify-content: center; justify-content: center;
&-item{ &-item {
background: #eee; background: #eee;
width: 300px; width: 300px;
margin: 10px; margin: 10px;
padding: 5px; padding: 5px;
border-radius: 10px; border-radius: 10px;
border: 5px solid transparent; border: 5px solid transparent;
background: linear-gradient(white,white) padding-box,repeating-linear-gradient(-45deg, red 0, red 12.5%, transparent 0, transparent 25%, #58a 0, #58a 37.5%, transparent 0, transparent 50%) 0/5em 5em; background: linear-gradient(white, white) padding-box,
.item-box{ repeating-linear-gradient(
-45deg,
red 0,
red 12.5%,
transparent 0,
transparent 25%,
#58a 0,
#58a 37.5%,
transparent 0,
transparent 50%
)
0/5em 5em;
.item-box {
/* background: #fbfaf5; */ /* background: #fbfaf5; */
padding: 20px; padding: 20px;
} }
.line{ .line {
display: flex; display: flex;
/* .label{ /* .label{
width: 100px; width: 100px;
} */ } */
.value{ .value {
flex: 1; flex: 1;
margin-left: 10px; margin-left: 10px;
} }
......
...@@ -224,6 +224,7 @@ import { getCabinetPage } from "@/api/ecw/cabinet"; ...@@ -224,6 +224,7 @@ import { getCabinetPage } from "@/api/ecw/cabinet";
import { getWarehouseList } from "@/api/ecw/warehouse"; import { getWarehouseList } from "@/api/ecw/warehouse";
import { getListTree } from "@/api/ecw/region"; import { getListTree } from "@/api/ecw/region";
import costForm from "./costForm.vue"; import costForm from "./costForm.vue";
//异常登记对话框
import regError from "./regError.vue"; import regError from "./regError.vue";
import editForm from "./editForm.vue"; import editForm from "./editForm.vue";
import ladingBill from "./ladingBill/index.vue"; import ladingBill from "./ladingBill/index.vue";
......
...@@ -228,6 +228,24 @@ ...@@ -228,6 +228,24 @@
:label="$t('报关费用')" :label="$t('报关费用')"
align="center" align="center"
></el-table-column> ></el-table-column>
<!--
<el-table-column
prop=""
:label="$t('异常操作')"
align="center"
width="120px"
>
lanbm 2024-05-23 添加异常登记功能
<template slot-scope="scope">
<el-button
type="primary"
size="small"
@click="() => updateStatus_2('single', scope.row)"
>{{ $t("异常登记") }}</el-button
>
</template>
</el-table-column>-->
<el-table-column <el-table-column
prop="" prop=""
:label="$t('操作')" :label="$t('操作')"
...@@ -476,7 +494,6 @@ ...@@ -476,7 +494,6 @@
</el-tabs> </el-tabs>
</el-col> </el-col>
</el-row> </el-row>
<!-- 对话框(添加 / 修改) --> <!-- 对话框(添加 / 修改) -->
<el-dialog <el-dialog
:title="dialogConfig.title" :title="dialogConfig.title"
...@@ -522,6 +539,23 @@ ...@@ -522,6 +539,23 @@
/> />
</template> </template>
</el-dialog> </el-dialog>
<!-- 对话框 lanbm 2024-05-23 add异常登记对话框 -->
<el-dialog
custom-class="shipping-dialog"
:title="$t('异常')"
:visible.sync="dialogVisible"
width="600px"
:modal-append-to-body="false"
append-to-body
>
<unloadingError
v-if="dialogVisible"
@closeDialog="closeDialog_2"
v-bind="$attrs"
:currRow="currRow"
/>
</el-dialog>
</div> </div>
</template> </template>
...@@ -554,6 +588,7 @@ import updateError from "./updateError.vue"; ...@@ -554,6 +588,7 @@ import updateError from "./updateError.vue";
import { listUser } from "@/api/system/user"; import { listUser } from "@/api/system/user";
//lanbm 2024-05-16 add //lanbm 2024-05-16 add
import { getCurrencyList } from "@/api/ecw/currency"; import { getCurrencyList } from "@/api/ecw/currency";
import unloadingError from "@/views/ecw/box/shippingSea/nodePage/unloading/unloadingError.vue";
export default { export default {
name: "EcwBoxQuery", name: "EcwBoxQuery",
...@@ -565,6 +600,8 @@ export default { ...@@ -565,6 +600,8 @@ export default {
regError, regError,
editForm, editForm,
updateError, updateError,
//lanbm 2024-05-23 异常登记对话框
unloadingError,
}, },
created() { created() {
this.transportTypes = this.getDictDatas( this.transportTypes = this.getDictDatas(
...@@ -677,6 +714,9 @@ export default { ...@@ -677,6 +714,9 @@ export default {
}, },
//币种信息 lanbm 2024-05-16 add //币种信息 lanbm 2024-05-16 add
currencyList: [], currencyList: [],
// 当前行
currRow: {},
dialogVisible: false,
}; };
}, },
methods: { methods: {
...@@ -696,6 +736,15 @@ export default { ...@@ -696,6 +736,15 @@ export default {
handleSelectionChange(selected) { handleSelectionChange(selected) {
this.selectedRows = selected; this.selectedRows = selected;
}, },
closeDialog_2() {
//关闭异常对话框
this.dialogVisible = false;
},
updateStatus_2(type, row) {
//lanbm 2024-05-23 添加的异常登记功能
this.currRow = row;
this.dialogVisible = true;
},
/* 更新状态 */ /* 更新状态 */
updateStatus(type, row) { updateStatus(type, row) {
let orders = []; let orders = [];
......
<template> <template>
<div class="app-container shipping-detail"> <div class="app-container shipping-detail">
<el-row type="flex" style="margin-top: 15px; margin-bottom: 15px" justify="center"> <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-col :xs="24" :sm="24" :md="24" :lg="20" :xl="22">
<div style="display: flex; justify-content: space-between;align-items: flex-end;"> <div
<h2>{{$t('出货详情')}}</h2> style="
display: flex;
justify-content: space-between;
align-items: flex-end;
"
>
<h2>{{ $t("出货详情") }}</h2>
<div> <div>
<!-- <el-button size="small" @click="handleCommand('edit')">{{$t('编辑')}}</el-button> --> <!-- <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
<el-button type="primary" v-hasPermi="['shipment:box:action:error']" size="small" @click="handleCommand('error')">{{$t('异常登记')}}</el-button> size="small"
<el-button type="primary" v-hasPermi="['shipment:box:action:cost']" size="small" @click="handleCommand('cost')">{{$t('费用登记')}}</el-button> 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> --> <!-- <el-button type="danger" size="small" @click="handleCommand('delete')">{{$t('删除')}}</el-button> -->
</div> </div>
</div> </div>
<el-card style="margin-top: 15px"> <el-card style="margin-top: 15px">
<el-descriptions :column="4" border> <el-descriptions :column="4" border>
<el-descriptions-item :label="$t('自编号')"> <el-descriptions-item :label="$t('自编号')">
{{shipmentObj.selfNo}} {{ shipmentObj.selfNo }}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item :label="$t('运输方式')"> <el-descriptions-item :label="$t('运输方式')">
<dict-tag :type="DICT_TYPE.ECW_TRANSPORT_TYPE" :value="shipmentObj.transportType" /> <dict-tag
:type="DICT_TYPE.ECW_TRANSPORT_TYPE"
:value="shipmentObj.transportType"
/>
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item :label="$t('出货渠道')"> <el-descriptions-item :label="$t('出货渠道')">
{{getShipChannelName(shipmentObj.shippingChannelId)}} {{ getShipChannelName(shipmentObj.shippingChannelId) }}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item :label="$t('状态')"> <el-descriptions-item :label="$t('状态')">
{{shipmentObj.shipmentStatusText}} {{ shipmentObj.shipmentStatusText }}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item :label="$t('总计')"> <el-descriptions-item :label="$t('总计')">
{{getBoxSum(shipmentObj.boxStatistics)}} {{ getBoxSum(shipmentObj.boxStatistics) }}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item :label="$t('始发地')"> <el-descriptions-item :label="$t('始发地')">
{{getCityName(shipmentObj.startWarehouseId)}} {{ getCityName(shipmentObj.startWarehouseId) }}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item :label="$t('目的地')"> <el-descriptions-item :label="$t('目的地')">
{{getCityName(shipmentObj.destWarehouseId)}} {{ getCityName(shipmentObj.destWarehouseId) }}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="SO NO"> <el-descriptions-item label="SO NO">
{{shipmentObj.bookSeaInfo ? shipmentObj.bookSeaInfo.sono : '' }} {{ shipmentObj.bookSeaInfo ? shipmentObj.bookSeaInfo.sono : "" }}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item :label="$t('目的港清关')"> <el-descriptions-item :label="$t('目的港清关')">
{{getClearance(shipmentObj.destinationClearance)}} {{ getClearance(shipmentObj.destinationClearance) }}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item :label="$t('发货方式')"> <el-descriptions-item :label="$t('发货方式')">
{{getdeliveryType(shipmentObj.deliveryType)}} {{ getdeliveryType(shipmentObj.deliveryType) }}
</el-descriptions-item> </el-descriptions-item>
</el-descriptions> </el-descriptions>
</el-card> </el-card>
...@@ -50,65 +80,248 @@ ...@@ -50,65 +80,248 @@
<el-tabs style="margin-top: 15px" type="border-card" value="detail"> <el-tabs style="margin-top: 15px" type="border-card" value="detail">
<el-tab-pane :label="$t('明细')" name="detail"> <el-tab-pane :label="$t('明细')" name="detail">
<div class="detail-pane"> <div class="detail-pane">
<div>{{$t('当前部分')}}</div> <div>{{ $t("当前部分") }}</div>
<el-select :placeholder="$t('请选择')" v-model="sectionId" @change="sectionChange"> <el-select
:placeholder="$t('请选择')"
v-model="sectionId"
@change="sectionChange"
>
<el-option key="0" :label="$t('全部')" value="0"></el-option> <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-option
v-for="item in sectionList"
:key="item.id"
:label="item.title"
:value="item.id"
></el-option>
</el-select> </el-select>
<p class="box-weight"> <p class="box-weight">
{{getSectionInfo}} {{ getSectionInfo }}
</p> </p>
<div class="document-status"> <div class="document-status">
<p>{{$t('单证状态')}}</p> <p>{{ $t("单证状态") }}</p>
<template v-for="(item, index) in getDocStatus(sectionObj.sectionOrderList)"> <template
<dict-tag :type="DICT_TYPE.ECW_CUSTOMS_TYPE" :value="item" :key="index" /> v-for="(item, index) in getDocStatus(
sectionObj.sectionOrderList
)"
>
<dict-tag
:type="DICT_TYPE.ECW_CUSTOMS_TYPE"
:value="item"
:key="index"
/>
</template> </template>
</div> </div>
</div> </div>
<div style="margin:20px 0 20px 0;"> <div style="margin: 20px 0 20px 0">
<el-button type="primary" v-hasPermi="['shipment:box:order:select']" size="small" @click="()=>updateStatus('selected')">{{$t('更新所选订单状态')}}</el-button> <el-button
<el-button type="primary" v-hasPermi="['shipment:box:order:all']" size="small" @click="()=>updateStatus('all')">{{$t('更新全部订单状态')}}</el-button> type="primary"
<el-button type="primary" v-if="shipmentObj.sapStatus==152&&(shipmentObj.airArrivalInfo&&shipmentObj.airArrivalInfo.arriveType==1)" v-hasPermi="['shipment:box:order:select']" size="small" @click="()=>updateArrivalStatus('selected')">{{$t('更新所选订单到港状态')}}</el-button> v-hasPermi="['shipment:box:order:select']"
<el-button type="primary" v-if="shipmentObj.sapStatus==152&&(shipmentObj.airArrivalInfo&&shipmentObj.airArrivalInfo.arriveType==1)" v-hasPermi="['shipment:box:order:all']" size="small" @click="()=>updateArrivalStatus('all')">{{$t('更新全部订单到港状态')}}</el-button> size="small"
<el-button type="primary" v-if="shipmentObj.clStatus==132&&(shipmentObj.clearanceInfo&&shipmentObj.clearanceInfo.clearanceType==1)" v-hasPermi="['shipment:box:order:select']" size="small" @click="()=>updateClearStatus('selected')">{{$t('更新所选订单清关状态')}}</el-button> @click="() => updateStatus('selected')"
<el-button type="primary" v-if="shipmentObj.clStatus==132&&(shipmentObj.clearanceInfo&&shipmentObj.clearanceInfo.clearanceType==1)" v-hasPermi="['shipment:box:order:all']" size="small" @click="()=>updateClearStatus('all')">{{$t('更新全部订单清关状态')}}</el-button> >{{ $t("更新所选订单状态") }}</el-button
>
<el-button
type="primary"
v-hasPermi="['shipment:box:order:all']"
size="small"
@click="() => updateStatus('all')"
>{{ $t("更新全部订单状态") }}</el-button
>
<el-button
type="primary"
v-if="
shipmentObj.sapStatus == 152 &&
shipmentObj.airArrivalInfo &&
shipmentObj.airArrivalInfo.arriveType == 1
"
v-hasPermi="['shipment:box:order:select']"
size="small"
@click="() => updateArrivalStatus('selected')"
>{{ $t("更新所选订单到港状态") }}</el-button
>
<el-button
type="primary"
v-if="
shipmentObj.sapStatus == 152 &&
shipmentObj.airArrivalInfo &&
shipmentObj.airArrivalInfo.arriveType == 1
"
v-hasPermi="['shipment:box:order:all']"
size="small"
@click="() => updateArrivalStatus('all')"
>{{ $t("更新全部订单到港状态") }}</el-button
>
<el-button
type="primary"
v-if="
shipmentObj.clStatus == 132 &&
shipmentObj.clearanceInfo &&
shipmentObj.clearanceInfo.clearanceType == 1
"
v-hasPermi="['shipment:box:order:select']"
size="small"
@click="() => updateClearStatus('selected')"
>{{ $t("更新所选订单清关状态") }}</el-button
>
<el-button
type="primary"
v-if="
shipmentObj.clStatus == 132 &&
shipmentObj.clearanceInfo &&
shipmentObj.clearanceInfo.clearanceType == 1
"
v-hasPermi="['shipment:box:order:all']"
size="small"
@click="() => updateClearStatus('all')"
>{{ $t("更新全部订单清关状态") }}</el-button
>
</div> </div>
<el-table :data="sectionObj.sectionOrderList" style="width: 100%" border @selection-change="handleSelectionChange"> <el-table
:data="sectionObj.sectionOrderList"
style="width: 100%"
border
@selection-change="handleSelectionChange"
>
<el-table-column type="selection" width="50"></el-table-column>> <el-table-column type="selection" width="50"></el-table-column>>
<el-table-column align="center" :label="$t('序号')" width="50" prop="tidanNum" /> <el-table-column
<el-table-column prop="orderNo" :label="$t('订单号')" align="center"> align="center"
:label="$t('序号')"
width="50"
prop="tidanNum"
/>
<el-table-column
prop="orderNo"
:label="$t('订单号')"
align="center"
>
<template v-slot="scope"> <template v-slot="scope">
<a href="javascript:void(0)" @click="jumpOrderDetail(scope.row)">{{ scope.row.orderNo }}</a> <a
href="javascript:void(0)"
@click="jumpOrderDetail(scope.row)"
>{{ scope.row.orderNo }}</a
>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="goodsList" :label="$t('货物信息')" width="230px" align="center"> <el-table-column
<template v-slot="{row}"> prop="goodsList"
:label="$t('货物信息')"
width="230px"
align="center"
>
<template v-slot="{ row }">
<section> <section>
<div v-for="(item, index) in row.goodsList" :key="index"> <div v-for="(item, index) in row.goodsList" :key="index">
{{index+1}}{{item.prodTitleZh}} {{ index + 1 }}{{ item.prodTitleZh }}
</div> </div>
</section> </section>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="num" :label="$t('计划箱数')" align="center"></el-table-column> <el-table-column
<el-table-column prop="installNum" :label="$t('实装箱数')" align="center"></el-table-column> prop="num"
<el-table-column prop="unloadNum" :label="$t('卸柜箱数')" align="center"></el-table-column> :label="$t('计划箱数')"
<el-table-column prop="destWarehouseName" :label="$t('提货点')" align="center"></el-table-column> align="center"
<el-table-column prop="volume" :label="$t('体积')" align="center"></el-table-column> ></el-table-column>
<el-table-column prop="weight" :label="$t('重量')" align="center"></el-table-column> <el-table-column
<el-table-column prop="totalWorth" :label="$t('货值')" align="center"></el-table-column> prop="installNum"
<el-table-column prop="customsType" :label="$t('报关方式')" align="center"> :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"> <template slot-scope="scope">
<div :class="scope.row.customsType !== 1 ? 'customsType-red' : ''"> <div
<dict-tag :type="DICT_TYPE.ECW_CUSTOMS_TYPE" :value="scope.row.customsType" /> :class="
scope.row.customsType !== 1 ? 'customsType-red' : ''
"
>
<dict-tag
:type="DICT_TYPE.ECW_CUSTOMS_TYPE"
:value="scope.row.customsType"
/>
</div> </div>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="customsFee" :label="$t('报关费用')" align="center"></el-table-column> <el-table-column
<el-table-column prop="" :label="$t('操作')" align="center" width="120px"> 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"
@click="() => updateStatus_2('single', scope.row)"
style="margin-top: 5px"
>{{ $t("异常登记") }}</el-button
>
</template>
</el-table-column>-->
<el-table-column
prop=""
:label="$t('操作')"
align="center"
width="120px"
>
<template slot-scope="scope"> <template slot-scope="scope">
<el-button type="primary" size="small" :disabled="scope.row.abnormalDealStatus === 1" @click="()=>updateStatus('single', scope.row)" style="margin-top: 5px;">{{$t('更新状态')}}</el-button> <el-button
<el-button type="primary" size="small" style="margin-top: 5px;" :disabled="shipmentObj.clStatus==132|| (shipmentObj.clearanceInfo == null) || (shipmentObj.clearanceInfo&&shipmentObj.clearanceInfo.clearanceOrderList.findIndex(ff=>ff.orderId == scope.row.orderId) == -1)" @click="()=>cancleClear(scope.row)">{{$t('撤销清关申请')}}</el-button> type="primary"
size="small"
:disabled="scope.row.abnormalDealStatus === 1"
@click="() => updateStatus('single', scope.row)"
style="margin-top: 5px"
>{{ $t("更新状态") }}</el-button
>
<el-button
type="primary"
size="small"
style="margin-top: 5px"
:disabled="
shipmentObj.clStatus == 132 ||
shipmentObj.clearanceInfo == null ||
(shipmentObj.clearanceInfo &&
shipmentObj.clearanceInfo.clearanceOrderList.findIndex(
(ff) => ff.orderId == scope.row.orderId
) == -1)
"
@click="() => cancleClear(scope.row)"
>{{ $t("撤销清关申请") }}</el-button
>
<!-- <el-button type="danger" style="margin-top: 5px;" size="small" @click="openError(scope.row)">{{$t('异常')}}</el-button> --> <!-- <el-button type="danger" style="margin-top: 5px;" size="small" @click="openError(scope.row)">{{$t('异常')}}</el-button> -->
</template> </template>
...@@ -116,42 +329,96 @@ ...@@ -116,42 +329,96 @@
</el-table> </el-table>
</el-tab-pane> </el-tab-pane>
<el-tab-pane :label="$t('状态')" name="status"> <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
v-for="(item, index) in logList"
:key="item.id"
:class="`shipping-status ${index === 0 ? 'curr-status' : ''}`"
>
<div class="status-line"></div> <div class="status-line"></div>
<div class="status-number">{{logList.length - index}}</div> <div class="status-number">{{ logList.length - index }}</div>
<div class="status-info"> <div class="status-info">
<div>{{$l(item, 'title')}} <el-button v-if="item.approvalId>0" type="text" @click="handleApproval(item.bpmProcessId)">{{$t('查看审批')}}</el-button></div>
<div> <div>
<p>{{formatDate(item.createTime)}}</p> {{ $l(item, "title") }}
<p>{{item.operator}}</p> <el-button
v-if="item.approvalId > 0"
type="text"
@click="handleApproval(item.bpmProcessId)"
>{{ $t("查看审批") }}</el-button
>
</div>
<div>
<p>{{ formatDate(item.createTime) }}</p>
<p>{{ item.operator }}</p>
</div> </div>
</div> </div>
</div> </div>
</el-tab-pane> </el-tab-pane>
<el-tab-pane :label="$t('费用')" name="fee"> <el-tab-pane :label="$t('费用')" name="fee">
<el-table :data="costList" style="width: 100%" border> <el-table :data="costList" style="width: 100%" border>
<el-table-column type="index" align="center" :label="$t('序号')" width="50" /> <el-table-column
<el-table-column prop="costType" :label="$t('费用类型')" align="center"> type="index"
align="center"
:label="$t('序号')"
width="50"
/>
<el-table-column
prop="costType"
:label="$t('费用类型')"
align="center"
>
<template slot-scope="scope"> <template slot-scope="scope">
<dict-tag :type="DICT_TYPE.FEE_TYPE" :value="scope.row.costType" /> <dict-tag
:type="DICT_TYPE.FEE_TYPE"
:value="scope.row.costType"
/>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="supplierId" :label="$t('供应商')" align="center"> <el-table-column
prop="supplierId"
:label="$t('供应商')"
align="center"
>
<template slot-scope="scope"> <template slot-scope="scope">
{{getSupplier(scope.row.supplierId)}} {{ getSupplier(scope.row.supplierId) }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="price" :label="$t('金额')" align="center"></el-table-column> <el-table-column
prop="price"
:label="$t('金额')"
align="center"
></el-table-column>
<!--lanbm 2024-05-16 修改--> <!--lanbm 2024-05-16 修改-->
<el-table-column prop="priceUnitName" :label="$t('币种')" align="center"></el-table-column> <el-table-column
<el-table-column prop="payPrice" :label="$t('实付金额')" align="center"></el-table-column> prop="priceUnitName"
<el-table-column prop="payPriceBz" :label="$t('实付币种')" align="center"></el-table-column> :label="$t('币种')"
<el-table-column prop="payTime" :label="$t('实付日期')" align="center"> align="center"
></el-table-column>
<el-table-column
prop="payPrice"
:label="$t('实付金额')"
align="center"
></el-table-column>
<el-table-column
prop="payPriceBz"
:label="$t('实付币种')"
align="center"
></el-table-column>
<el-table-column
prop="payTime"
:label="$t('实付日期')"
align="center"
>
<template slot-scope="scope"> <template slot-scope="scope">
<span v-if="scope.row.payTime">{{formatDate(scope.row.payTime)}}</span> <span v-if="scope.row.payTime">{{
formatDate(scope.row.payTime)
}}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="payableNo" :label="$t('付款单号')" align="center"> <el-table-column
prop="payableNo"
:label="$t('付款单号')"
align="center"
>
<template slot-scope="scope"> <template slot-scope="scope">
<span <span
style="color: #1890ff" style="color: #1890ff"
...@@ -160,17 +427,53 @@ ...@@ -160,17 +427,53 @@
> >
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="creator" :label="$t('创建人')" align="center"></el-table-column> <el-table-column
<el-table-column prop="createTime" :label="$t('创建日期')" align="center"></el-table-column> prop="creator"
<el-table-column prop="updater" :label="$t('修改人')" align="center"></el-table-column> :label="$t('创建人')"
<el-table-column prop="updateTime" :label="$t('修改日期')" align="center"></el-table-column> align="center"
></el-table-column>
<el-table-column
prop="createTime"
:label="$t('创建日期')"
align="center"
></el-table-column>
<el-table-column
prop="updater"
:label="$t('修改人')"
align="center"
></el-table-column>
<el-table-column
prop="updateTime"
:label="$t('修改日期')"
align="center"
></el-table-column>
<!--添加备注信息列 lanbm 2024-05-16 add--> <!--添加备注信息列 lanbm 2024-05-16 add-->
<el-table-column prop="remarks" :label="$t('备注')" align="center"></el-table-column> <el-table-column
prop="remarks"
:label="$t('备注')"
align="center"
></el-table-column>
<el-table-column :label="$t('操作')" align="center"> <el-table-column :label="$t('操作')" align="center">
<template slot-scope="scope"> <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-button
<el-popconfirm :title="$t('确定是否删除')" @confirm="deleteCostClick(scope.row)"> type="primary"
<el-button type="danger" size="small" slot="reference" v-hasPermi="['ecw:box-cost:delete']">{{$t('删除')}}</el-button> 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> </el-popconfirm>
</template> </template>
</el-table-column> </el-table-column>
...@@ -178,34 +481,76 @@ ...@@ -178,34 +481,76 @@
</el-tab-pane> </el-tab-pane>
<el-tab-pane :label="$t('异常')" name="error"> <el-tab-pane :label="$t('异常')" name="error">
<el-table :data="errorList" style="width: 100%" border> <el-table :data="errorList" style="width: 100%" border>
<el-table-column type="index" align="center" :label="$t('序号')" width="50" /> <el-table-column
type="index"
align="center"
:label="$t('序号')"
width="50"
/>
<el-table-column prop="opStep" :label="$t('操作')" align="center"> <el-table-column prop="opStep" :label="$t('操作')" align="center">
<template slot-scope="scope"> <template slot-scope="scope">
<dict-tag :type="DICT_TYPE.BOX_AIR_SHIPMENT_PROCESS" :value="scope.row.opStep" /> <dict-tag
:type="DICT_TYPE.BOX_AIR_SHIPMENT_PROCESS"
:value="scope.row.opStep"
/>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="billAbnId" :label="$t('异常')" align="center"> <el-table-column
prop="billAbnId"
:label="$t('异常')"
align="center"
>
<template slot-scope="scope"> <template slot-scope="scope">
<dict-tag :type="DICT_TYPE[getregprocess(scope.row.opStep)]" :value="scope.row.billAbnId" /> <dict-tag
:type="DICT_TYPE[getregprocess(scope.row.opStep)]"
:value="scope.row.billAbnId"
/>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="abnDetail" :label="$t('异常描述')" align="center" width="300"></el-table-column> <el-table-column
<el-table-column prop="delayDays" :label="$t('异常延迟天数')" align="center"></el-table-column> prop="abnDetail"
<el-table-column prop="" :label="$t('异常时间')" align="center" width="200"> :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"> <template slot-scope="scope">
<span v-if="scope.row.abnStartTime">{{formatDate(scope.row.abnStartTime)}} - </span> <span v-if="scope.row.abnStartTime"
<span v-if="scope.row.abnEndTime">{{formatDate(scope.row.abnEndTime)}}</span> >{{ formatDate(scope.row.abnStartTime) }} -
</span>
<span v-if="scope.row.abnEndTime">{{
formatDate(scope.row.abnEndTime)
}}</span>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
</el-tab-pane> </el-tab-pane>
<el-tab-pane :label="$t('表单')" name="download"> <el-tab-pane :label="$t('表单')" name="download">
<el-table :data="downloadList" style="width: 50%"> <el-table :data="downloadList" style="width: 50%">
<el-table-column prop="title" :label="$t('文件类型')"></el-table-column> <el-table-column
prop="title"
:label="$t('文件类型')"
></el-table-column>
<el-table-column prop="" :label="$t('下载链接')"> <el-table-column prop="" :label="$t('下载链接')">
<template slot-scope="scope"> <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> <a
<div v-else>{{$t('未完成')}}</div> 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> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
...@@ -215,40 +560,100 @@ ...@@ -215,40 +560,100 @@
</el-row> </el-row>
<!-- 对话框(添加 / 修改) --> <!-- 对话框(添加 / 修改) -->
<el-dialog :title="dialogConfig.title" :visible.sync="dialogConfig.visible" :width="dialogConfig.width" append-to-body class="shippingSea-dialog"> <el-dialog
:title="dialogConfig.title"
:visible.sync="dialogConfig.visible"
:width="dialogConfig.width"
append-to-body
class="shippingSea-dialog"
>
<template v-if="dialogConfig.type === 'edit'"> <template v-if="dialogConfig.type === 'edit'">
<editForm v-if="dialogConfig.visible" @closeDialog="closeDialog" :shipmentObj="shipmentObj" :warehouseList="warehouseList" :transportTypes="transportTypes" :cabinetList="cabinetList" /> <editForm
v-if="dialogConfig.visible"
@closeDialog="closeDialog"
:shipmentObj="shipmentObj"
:warehouseList="warehouseList"
:transportTypes="transportTypes"
:cabinetList="cabinetList"
/>
</template> </template>
<template v-if="dialogConfig.type === 'cost'"> <template v-if="dialogConfig.type === 'cost'">
<costForm v-if="dialogConfig.visible" @closeDialog="closeDialog" :shipmentObj="shipmentObj" :costDetail="costDetail" flag="air" /> <costForm
v-if="dialogConfig.visible"
@closeDialog="closeDialog"
:shipmentObj="shipmentObj"
:costDetail="costDetail"
flag="air"
/>
</template> </template>
<template v-if="dialogConfig.type === 'error'"> <template v-if="dialogConfig.type === 'error'">
<regError v-if="dialogConfig.visible" @closeDialog="closeDialog" :shipmentObj="shipmentObj" :allUsers="allUsers" flag="air" /> <regError
v-if="dialogConfig.visible"
@closeDialog="closeDialog"
:shipmentObj="shipmentObj"
:allUsers="allUsers"
flag="air"
/>
</template> </template>
<template v-if="dialogConfig.type === 'updateError'"> <template v-if="dialogConfig.type === 'updateError'">
<updateError v-if="dialogConfig.visible" @closeDialog="closeDialog" :shipmentObj="shipmentObj" :errorInfo="errorInfo" /> <updateError
v-if="dialogConfig.visible"
@closeDialog="closeDialog"
:shipmentObj="shipmentObj"
:errorInfo="errorInfo"
/>
</template> </template>
<template v-if="dialogConfig.type === 'updateArrival'"> <template v-if="dialogConfig.type === 'updateArrival'">
<updateArrival v-if="dialogConfig.visible" @closeDialog="closeDialog" :shipmentObj="shipmentObj" :arrivalInfo="arrivalInfo" /> <updateArrival
v-if="dialogConfig.visible"
@closeDialog="closeDialog"
:shipmentObj="shipmentObj"
:arrivalInfo="arrivalInfo"
/>
</template> </template>
<template v-if="dialogConfig.type === 'updateClear'"> <template v-if="dialogConfig.type === 'updateClear'">
<updateClear v-if="dialogConfig.visible" @closeDialog="closeDialog" :shipmentObj="shipmentObj" :clearInfo="clearInfo" /> <updateClear
v-if="dialogConfig.visible"
@closeDialog="closeDialog"
:shipmentObj="shipmentObj"
:clearInfo="clearInfo"
/>
</template> </template>
<template v-if="dialogConfig.type === 'cancelClear'"> <template v-if="dialogConfig.type === 'cancelClear'">
<cancelClear v-if="dialogConfig.visible" @closeDialog="closeDialog" :shipmentObj="shipmentObj" :cancelClearInfo="cancelClearInfo" /> <cancelClear
v-if="dialogConfig.visible"
@closeDialog="closeDialog"
:shipmentObj="shipmentObj"
:cancelClearInfo="cancelClearInfo"
/>
</template> </template>
<template v-if="dialogConfig.type === 'unloadingError'"> <template v-if="dialogConfig.type === 'unloadingError'">
<unloadingError v-if="dialogConfig.visible" @closeDialog="closeDialog" :shipmentObj="shipmentObj" :unloadingError="unloadingError" /> <unloadingError
v-if="dialogConfig.visible"
@closeDialog="closeDialog"
:shipmentObj="shipmentObj"
:unloadingError="unloadingError"
/>
</template> </template>
</el-dialog> </el-dialog>
<!-- 对话框 --> <!-- 对话框 -->
<el-dialog custom-class="shipping-dialog" :title="$t('异常')" :visible.sync="dialogVisible" width="600px" :modal-append-to-body=false append-to-body> <el-dialog
<unloadingError v-if="dialogVisible" @closeDialog="closeDialog1" v-bind="$attrs" :currRow="currRow" /> custom-class="shipping-dialog"
:title="$t('异常')"
:visible.sync="dialogVisible"
width="600px"
:modal-append-to-body="false"
append-to-body
>
<unloadingError
v-if="dialogVisible"
@closeDialog="closeDialog1"
v-bind="$attrs"
:currRow="currRow"
/>
</el-dialog> </el-dialog>
</div> </div>
</template> </template>
...@@ -259,7 +664,8 @@ import { ...@@ -259,7 +664,8 @@ import {
getCostList, getCostList,
getAbnormalList, getAbnormalList,
deleteCost, deleteCost,
deletebox,getPaymentId deletebox,
getPaymentId,
} from "@/api/ecw/box"; } from "@/api/ecw/box";
import { getChannelList } from "@/api/ecw/channel"; import { getChannelList } from "@/api/ecw/channel";
import { getCabinetPage } from "@/api/ecw/cabinet"; import { getCabinetPage } from "@/api/ecw/cabinet";
...@@ -296,7 +702,7 @@ export default { ...@@ -296,7 +702,7 @@ export default {
updateArrival, updateArrival,
updateClear, updateClear,
cancelClear, cancelClear,
unloadingError unloadingError,
}, },
created() { created() {
this.transportTypes = this.getDictDatas( this.transportTypes = this.getDictDatas(
...@@ -361,47 +767,59 @@ export default { ...@@ -361,47 +767,59 @@ export default {
// }, // },
dialogVisible: false, dialogVisible: false,
// 运输方式 // 运输方式
transportTypes: [], transportTypes: [],
// 费用详情 // 费用详情
costDetail: {}, costDetail: {},
// 下载 // 下载
downloadList: [ downloadList: [
{ title: this.$t("预装单"), serviceName: "downloadPreloadGoodsList", hasPermi: "shipment:air:download:downloadPreloadGoodsList" }, {
title: this.$t("预装单"),
serviceName: "downloadPreloadGoodsList",
hasPermi: "shipment:air:download:downloadPreloadGoodsList",
},
// { title: this.$t("已装单"), serviceName: "downloadLoadGoodsList", hasPermi: "shipment:box:download:downloadLoadGoodsList" }, // { title: this.$t("已装单"), serviceName: "downloadLoadGoodsList", hasPermi: "shipment:box:download:downloadLoadGoodsList" },
{ title: this.$t("应收汇总表"), serviceName: "downloadReceivableList", hasPermi: "shipment:air:download:downloadReceivableList" }, {
title: this.$t("应收汇总表"),
serviceName: "downloadReceivableList",
hasPermi: "shipment:air:download:downloadReceivableList",
},
{ {
title: this.$t("提货单"), title: this.$t("提货单"),
serviceName: "zipDownload", serviceName: "zipDownload",
fileFormat: "zip", fileFormat: "zip",
hasPermi: "shipment:air:download:zipDownload" hasPermi: "shipment:air:download:zipDownload",
}, },
{ {
title: "agent list", title: "agent list",
serviceName: "downloadAgentListFiles", serviceName: "downloadAgentListFiles",
type: "url", type: "url",
hasPermi: "shipment:air:download:downloadAgentListFiles" hasPermi: "shipment:air:download:downloadAgentListFiles",
},
{
title: "soncap",
serviceName: "downloadSoncapFiles",
type: "url",
hasPermi: "shipment:air:download:downloadSoncapFiles",
}, },
{ title: "soncap", serviceName: "downloadSoncapFiles", type: "url", hasPermi: "shipment:air:download:downloadSoncapFiles" },
{ {
title: this.$t("AWB文件"), title: this.$t("AWB文件"),
serviceName: "cdAwbFile", serviceName: "cdAwbFile",
type: "url", type: "url",
hasPermi: "shipment:air:download:cdAwbFile" hasPermi: "shipment:air:download:cdAwbFile",
}, },
{ {
title: this.$t("提单Copy"), title: this.$t("提单Copy"),
serviceName: "downloadLadingCopy", serviceName: "downloadLadingCopy",
type: "url", type: "url",
hasPermi: "shipment:air:download:downloadLadingCopy" hasPermi: "shipment:air:download:downloadLadingCopy",
}, },
{ {
title: this.$t("已装单"), title: this.$t("已装单"),
serviceName: "downloadLoadGoods", serviceName: "downloadLoadGoods",
type: "url", type: "url",
hasPermi: "shipment:air:download:downloadLoadGoods" hasPermi: "shipment:air:download:downloadLoadGoods",
}, },
], ],
// 选中行 // 选中行
...@@ -413,12 +831,12 @@ export default { ...@@ -413,12 +831,12 @@ export default {
operate: "", operate: "",
}, },
arrivalInfo: { arrivalInfo: {
orderList: [] orderList: [],
}, },
clearInfo: { clearInfo: {
orderList: [] orderList: [],
}, },
cancelClearInfo: {} cancelClearInfo: {},
}; };
}, },
methods: { methods: {
...@@ -431,22 +849,22 @@ export default { ...@@ -431,22 +849,22 @@ export default {
}); });
}, },
getregprocess(val) { getregprocess(val) {
var data = '' var data = "";
switch(val){ switch (val) {
case 10: case 10:
data = 'FLYING_TICKET_EXCEPTION' data = "FLYING_TICKET_EXCEPTION";
break; break;
case 12: case 12:
data = 'ARRIVAL_TICKET_EXCEPTION' data = "ARRIVAL_TICKET_EXCEPTION";
break break;
case 13: case 13:
data = 'CLEARANCE_TICKET_EXCEPTION' data = "CLEARANCE_TICKET_EXCEPTION";
break break;
default: default:
data = 'BOX_SHIPPING_TICKET_EXCEPTION' data = "BOX_SHIPPING_TICKET_EXCEPTION";
break break;
} }
return data return data;
}, },
selectable(row, index) { selectable(row, index) {
if (row.abnormalDealStatus === 1) return false; if (row.abnormalDealStatus === 1) return false;
...@@ -461,7 +879,7 @@ export default { ...@@ -461,7 +879,7 @@ export default {
/* 打开异常 */ /* 打开异常 */
openError(row) { openError(row) {
console.log(row) console.log(row);
this.currRow = row; this.currRow = row;
this.dialogVisible = true; this.dialogVisible = true;
}, },
...@@ -470,6 +888,12 @@ export default { ...@@ -470,6 +888,12 @@ export default {
handleSelectionChange(selected) { handleSelectionChange(selected) {
this.selectedRows = selected; this.selectedRows = selected;
}, },
updateStatus_2(type, row) {
//异常登记 lanbm 2024-05-23 add
this.$set(this.dialogConfig, "visible", true);
this.$set(this.dialogConfig, "title", this.$t("异常登记"));
this.$set(this.dialogConfig, "type", "error");
},
/* 更新状态 */ /* 更新状态 */
updateStatus(type, row) { updateStatus(type, row) {
let orders = []; let orders = [];
...@@ -491,7 +915,7 @@ export default { ...@@ -491,7 +915,7 @@ export default {
} else if (type === "single") { } else if (type === "single") {
orders = [row]; orders = [row];
} }
console.log('getErrorType', type) console.log("getErrorType", type);
this.getErrorType(); this.getErrorType();
this.$set(this.errorInfo, "orderList", orders); this.$set(this.errorInfo, "orderList", orders);
this.$set(this.errorInfo, "operate", type); this.$set(this.errorInfo, "operate", type);
...@@ -499,8 +923,6 @@ export default { ...@@ -499,8 +923,6 @@ export default {
this.handleCommand("updateError"); this.handleCommand("updateError");
}, },
/* 更新到港状态 */ /* 更新到港状态 */
updateArrivalStatus(type) { updateArrivalStatus(type) {
let orders = []; let orders = [];
...@@ -509,7 +931,9 @@ export default { ...@@ -509,7 +931,9 @@ export default {
this.$message.error("请选择需要更新的订单"); this.$message.error("请选择需要更新的订单");
return; return;
} }
orders = this.selectedRows.map(item=>{return item.orderId}); orders = this.selectedRows.map((item) => {
return item.orderId;
});
} }
this.$set(this.arrivalInfo, "orderList", orders); this.$set(this.arrivalInfo, "orderList", orders);
this.$set(this.arrivalInfo, "type", type); this.$set(this.arrivalInfo, "type", type);
...@@ -523,7 +947,9 @@ export default { ...@@ -523,7 +947,9 @@ export default {
this.$message.error("请选择需要更新的订单"); this.$message.error("请选择需要更新的订单");
return; return;
} }
orders = this.selectedRows.map(item=>{return item.orderId}); orders = this.selectedRows.map((item) => {
return item.orderId;
});
} }
this.$set(this.clearInfo, "orderList", orders); this.$set(this.clearInfo, "orderList", orders);
this.$set(this.clearInfo, "type", type); this.$set(this.clearInfo, "type", type);
...@@ -531,7 +957,7 @@ export default { ...@@ -531,7 +957,7 @@ export default {
}, },
/* 更新清关状态 */ /* 更新清关状态 */
cancleClear(val) { cancleClear(val) {
this.cancelClearInfo = val this.cancelClearInfo = val;
this.handleCommand("cancelClear"); this.handleCommand("cancelClear");
}, },
getErrorType() { getErrorType() {
...@@ -556,7 +982,7 @@ export default { ...@@ -556,7 +982,7 @@ export default {
this.$set(this.errorInfo, "errorType", "flight"); this.$set(this.errorInfo, "errorType", "flight");
this.$set(this.dialogConfig, "title", this.$t("更新起飞异常状态")); this.$set(this.dialogConfig, "title", this.$t("更新起飞异常状态"));
} }
console.log(key, value) console.log(key, value);
} }
}, },
// 初始化字典数据 // 初始化字典数据
...@@ -745,10 +1171,10 @@ export default { ...@@ -745,10 +1171,10 @@ export default {
}, },
formatDate, formatDate,
downloadDetailFile(row) { downloadDetailFile(row) {
if(row.serviceName == 'downloadLoadGoods'){ if (row.serviceName == "downloadLoadGoods") {
if(this.shipmentObj.tyStatus < 2112){ if (this.shipmentObj.tyStatus < 2112) {
this.$message.error('请先完成理货后,再下载已装单') this.$message.error("请先完成理货后,再下载已装单");
return return;
} }
} }
const { fileFormat, type } = row; const { fileFormat, type } = row;
...@@ -765,11 +1191,14 @@ export default { ...@@ -765,11 +1191,14 @@ export default {
fileFormat ?? "xlsx" fileFormat ?? "xlsx"
); );
} }
this.$message.success(this.$t('已加入导出队列,请稍后在下载日志中下载')) this.$message.success(this.$t("已加入导出队列,请稍后在下载日志中下载"));
}, },
handleApproval(id) { handleApproval(id) {
this.$router.push({path: '/bpm/process-instance/detail', query: {id: id}}) this.$router.push({
} path: "/bpm/process-instance/detail",
query: { id: id },
});
},
}, },
computed: { computed: {
visitedViews() { visitedViews() {
...@@ -835,16 +1264,16 @@ export default { ...@@ -835,16 +1264,16 @@ export default {
}, },
getClearance() { getClearance() {
return (id) => { return (id) => {
let data = ['','我司清关','合作方清关','客户'] let data = ["", "我司清关", "合作方清关", "客户"];
return data[id] return data[id];
} };
}, },
getdeliveryType() { getdeliveryType() {
return (id) => { return (id) => {
let data = ['','多票','单票'] let data = ["", "多票", "单票"];
return data[id] return data[id];
} };
} },
}, },
}; };
</script> </script>
......
<template> <template>
<div class="app-container"> <div class="app-container">
<!-- 搜索工作栏 --> <!-- 搜索工作栏 -->
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px"> <el-form
:model="queryParams"
ref="queryForm"
size="small"
:inline="true"
v-show="showSearch"
label-width="68px"
>
<el-form-item :label="$t('客户编号')" prop="number"> <el-form-item :label="$t('客户编号')" prop="number">
<el-input v-model="queryParams.number" :placeholder="$t('请输入客户编号')" clearable @keyup.enter.native="handleQuery"/> <el-input
v-model="queryParams.number"
:placeholder="$t('请输入客户编号')"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item> </el-form-item>
<el-form-item :label="$t('客户名称')" prop="name"> <el-form-item :label="$t('客户名称')" prop="name">
<el-input v-model="queryParams.name" :placeholder="$t('请输入客户名称')" clearable @keyup.enter.native="handleQuery"/> <el-input
v-model="queryParams.name"
:placeholder="$t('请输入客户名称')"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item> </el-form-item>
<el-form-item :label="$t('客户等级')" prop="level"> <el-form-item :label="$t('客户等级')" prop="level">
<el-select clearable v-model="queryParams.level" :placeholder="$t('请选择客户等级')" clearable size="small"> <el-select
<el-option v-for="dict in getDictDatas(DICT_TYPE.CUSTOMER_LEVEL)" clearable
:key="dict.value" :label="isChinese ? dict.label : dict.labelEn" :value="dict.value"/> v-model="queryParams.level"
:placeholder="$t('请选择客户等级')"
clearable
size="small"
>
<el-option
v-for="dict in getDictDatas(DICT_TYPE.CUSTOMER_LEVEL)"
:key="dict.value"
:label="isChinese ? dict.label : dict.labelEn"
:value="dict.value"
/>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item :label="$t('联系方式')"> <el-form-item :label="$t('联系方式')">
<el-input :placeholder="$t('请输入联系方式')" v-model="queryParams.defaultContactPhone"></el-input> <el-input
:placeholder="$t('请输入联系方式')"
v-model="queryParams.defaultContactPhone"
></el-input>
</el-form-item> </el-form-item>
<el-form-item :label="$t('客户类别')" prop="level"> <el-form-item :label="$t('客户类别')" prop="level">
<dict-selector clearable :type="DICT_TYPE.CUSTOMER_TYPE" v-model="queryParams.type" ></dict-selector> <dict-selector
clearable
:type="DICT_TYPE.CUSTOMER_TYPE"
v-model="queryParams.type"
></dict-selector>
</el-form-item> </el-form-item>
<el-form-item :label="$t('客户经理')" prop="customerService"> <el-form-item :label="$t('客户经理')" prop="customerService">
<el-select clearable v-model="queryParams.customerService" :placeholder="$t('请选择客户经理')" clearable size="small"> <el-select
<el-option v-for="dict in customerServiceList" clearable
:key="dict.id" :label="dict.nickname" :value="dict.id"/> v-model="queryParams.customerService"
:placeholder="$t('请选择客户经理')"
clearable
size="small"
>
<el-option
v-for="dict in customerServiceList"
:key="dict.id"
:label="dict.nickname"
:value="dict.id"
/>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item :label="$t('客户来源')" prop="source"> <el-form-item :label="$t('客户来源')" prop="source">
<el-select clearable v-model="queryParams.source" :placeholder="$t('请选择客户来源')" size="small"> <el-select
<el-option v-for="dict in getDictDatas(DICT_TYPE.CUSTOMER_SOURCE)" clearable
:key="dict.value" :label="isChinese ? dict.label : dict.labelEn" :value="dict.value"/> v-model="queryParams.source"
:placeholder="$t('请选择客户来源')"
size="small"
>
<el-option
v-for="dict in getDictDatas(DICT_TYPE.CUSTOMER_SOURCE)"
:key="dict.value"
:label="isChinese ? dict.label : dict.labelEn"
:value="dict.value"
/>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item :label="$t('国家')" prop="source"> <el-form-item :label="$t('国家')" prop="source">
<el-select clearable v-model="queryParams.country" :placeholder="$t('请选择国家')"> <el-select
<el-option v-for="dict in countryList" clearable
:key="dict.id" :label=" isChinese ? dict.nameZh : dict.nameEn" :value="parseInt(dict.id)" /> v-model="queryParams.country"
:placeholder="$t('请选择国家')"
>
<el-option
v-for="dict in countryList"
:key="dict.id"
:label="isChinese ? dict.nameZh : dict.nameEn"
:value="parseInt(dict.id)"
/>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item :label="$t('客户状态')" prop="status"> <el-form-item :label="$t('客户状态')" prop="status">
<el-select clearable v-model="queryParams.status" :placeholder="$t('请选择客户状态')" clearable size="small"> <el-select
<el-option v-for="dict in getDictDatas(DICT_TYPE.CUSTOMER_STATUS)" clearable
:key="dict.value" :label="isChinese ? dict.label : dict.labelEn" :value="dict.value"/> v-model="queryParams.status"
:placeholder="$t('请选择客户状态')"
clearable
size="small"
>
<el-option
v-for="dict in getDictDatas(DICT_TYPE.CUSTOMER_STATUS)"
:key="dict.value"
:label="isChinese ? dict.label : dict.labelEn"
:value="dict.value"
/>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item :label="$t('创建时间')"> <el-form-item :label="$t('创建时间')">
<el-date-picker <el-date-picker
type="datetimerange" type="datetimerange"
clearable v-model="dateRangeCreateTime" style="width: 240px" value-format="yyyy-MM-dd HH:mm:ss" clearable
range-separator="-" :start-placeholder="$t('开始日期')" :end-placeholder="$t('结束日期')" /> v-model="dateRangeCreateTime"
style="width: 240px"
value-format="yyyy-MM-dd HH:mm:ss"
range-separator="-"
:start-placeholder="$t('开始日期')"
:end-placeholder="$t('结束日期')"
/>
</el-form-item> </el-form-item>
<el-form-item :label="$t('信用等级')" prop="department"> <el-form-item :label="$t('信用等级')" prop="department">
<el-select clearable v-model="queryParams.creditLevel" > <el-select clearable v-model="queryParams.creditLevel">
<el-option v-for="(item,index) in creditList" :label="isChinese ? item.nameZh : item.nameEn" :key="index" :value="item.id" ></el-option> <el-option
v-for="(item, index) in creditList"
:label="isChinese ? item.nameZh : item.nameEn"
:key="index"
:value="item.id"
></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item :label="$t('市场获客')" prop="department"> <el-form-item :label="$t('市场获客')" prop="department">
<dict-selector clearable :type="DICT_TYPE.ECW_CUSTOMER_RESOURCE_TYPE" v-model="queryParams.resourceType" formatter="number"></dict-selector> <dict-selector
clearable
:type="DICT_TYPE.ECW_CUSTOMER_RESOURCE_TYPE"
v-model="queryParams.resourceType"
formatter="number"
></dict-selector>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" icon="el-icon-search" @click="handleQuery">{{$t('搜索')}}</el-button> <el-button type="primary" icon="el-icon-search" @click="handleQuery">{{
<el-button icon="el-icon-refresh" @click="resetQuery">{{$t('重置')}}</el-button> $t("搜索")
}}</el-button>
<el-button icon="el-icon-refresh" @click="resetQuery">{{
$t("重置")
}}</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
<!-- 操作工具栏 --> <!-- 操作工具栏 -->
<div v-if="path === '/customer/customer'" style="color: red;margin-bottom: 5px;"> <div
v-if="path === '/customer/customer'"
style="color: red; margin-bottom: 5px"
>
注意:创建的客户需接收 注意:创建的客户需接收
</div> </div>
<el-row :gutter="10" class="mb8"> <el-row :gutter="10" class="mb8">
<el-col :span="1.5"> <el-col :span="1.5">
<el-button v-if="path === '/customer/potential'" type="primary" plain icon="el-icon-plus" size="mini" @click="handleAddPotential">{{$t('新增潜在客户')}}</el-button> <el-button
<el-button v-else type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd" v-if="path === '/customer/potential'"
v-hasPermi="[ selectAuthorityFn('ecw:customer:create')]">{{$t('新增')}} type="primary"
plain
icon="el-icon-plus"
size="mini"
@click="handleAddPotential"
>{{ $t("新增潜在客户") }}</el-button
>
<el-button
v-else
type="primary"
plain
icon="el-icon-plus"
size="mini"
@click="handleAdd"
v-hasPermi="[selectAuthorityFn('ecw:customer:create')]"
>{{ $t("新增") }}
</el-button> </el-button>
</el-col> </el-col>
<el-col :span="1.5" > <el-col :span="1.5">
<el-button :disabled="selectCustomerList.length === 0" type="primary" size="mini" @click="transferShow = true;" <el-button
v-hasPermi="[selectAuthorityFn('ecw:customer:batch-transfer')]">{{$t('批量移交')}}</el-button> :disabled="selectCustomerList.length === 0"
type="primary"
size="mini"
@click="transferShow = true"
v-hasPermi="[selectAuthorityFn('ecw:customer:batch-transfer')]"
>{{ $t("批量移交") }}</el-button
>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport" :loading="exportLoading" <el-button
v-hasPermi="[selectAuthorityFn('ecw:customer:export')]">{{$t('导出')}}</el-button> type="warning"
plain
icon="el-icon-download"
size="mini"
@click="handleExport"
:loading="exportLoading"
v-hasPermi="[selectAuthorityFn('ecw:customer:export')]"
>{{ $t("导出") }}</el-button
>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<!-- <el-button :disabled="!selectCustomerList.length" @click="setChangeCustomerAir(true)" v-if="$route.path === '/customer/customer'" type="primary" plain size="mini" :loading="exportLoading"--> <!-- <el-button :disabled="!selectCustomerList.length" @click="setChangeCustomerAir(true)" v-if="$route.path === '/customer/customer'" type="primary" plain size="mini" :loading="exportLoading"-->
<!-- v-hasPermi="['ecw:customer:transport']" >{{$t('设为空运客户')}}</el-button>--> <!-- v-hasPermi="['ecw:customer:transport']" >{{$t('设为空运客户')}}</el-button>-->
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<!-- <el-button :disabled="!selectCustomerList.length" @click="setChangeCustomerAir(false)" v-if="$route.path === '/customer/customer'" type="primary" plain size="mini" :loading="exportLoading"--> <!-- <el-button :disabled="!selectCustomerList.length" @click="setChangeCustomerAir(false)" v-if="$route.path === '/customer/customer'" type="primary" plain size="mini" :loading="exportLoading"-->
<!-- v-hasPermi="['ecw:customer:transport']">{{$t('设为非空运客户')}}</el-button>--> <!-- v-hasPermi="['ecw:customer:transport']">{{$t('设为非空运客户')}}</el-button>-->
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button v-hasPermi="['ecw:customer:fcl']" :disabled="!selectCustomerList.length" @click="setFullContainerLoad(true)" v-if="$route.path === '/customer/customer'" type="primary" plain size="mini" :loading="exportLoading">{{$t('设置海运整柜客户')}}</el-button> <el-button
v-hasPermi="['ecw:customer:fcl']"
:disabled="!selectCustomerList.length"
@click="setFullContainerLoad(true)"
v-if="$route.path === '/customer/customer'"
type="primary"
plain
size="mini"
:loading="exportLoading"
>{{ $t("设置海运整柜客户") }}</el-button
>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button v-hasPermi="['ecw:customer:fcl-mistake']" :disabled="!selectCustomerList.length" @click="setFullContainerLoad(false)" v-if="$route.path === '/customer/customer'" type="primary" plain size="mini" :loading="exportLoading" <el-button
>{{$t('设置海运非整柜客户')}}</el-button> v-hasPermi="['ecw:customer:fcl-mistake']"
:disabled="!selectCustomerList.length"
@click="setFullContainerLoad(false)"
v-if="$route.path === '/customer/customer'"
type="primary"
plain
size="mini"
:loading="exportLoading"
>{{ $t("设置海运非整柜客户") }}</el-button
>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button v-has-permi="[selectAuthorityFn('ecw:customer:create-potential')]" v-if="path === '/customer/customer'" type="primary" plain icon="el-icon-plus" size="mini" @click="handleAddPotential">{{$t('新增潜在客户')}}</el-button> <el-button
v-has-permi="[selectAuthorityFn('ecw:customer:create-potential')]"
v-if="path === '/customer/customer'"
type="primary"
plain
icon="el-icon-plus"
size="mini"
@click="handleAddPotential"
>{{ $t("新增潜在客户") }}</el-button
>
</el-col> </el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar> <right-toolbar
:showSearch.sync="showSearch"
@queryTable="getList"
></right-toolbar>
</el-row> </el-row>
<!-- 列表 --> <!-- 列表 -->
<el-table ref="multipleTable" v-loading="loading" :data="list" @selection-change="handleSelectionChange"> <el-table
<el-table-column ref="multipleTable"
type="selection" v-loading="loading"
width="55"> :data="list"
</el-table-column> @selection-change="handleSelectionChange"
<el-table-column :label="$t('客户编号')" align="center" prop="number" > >
<template v-slot="{row}"> <el-table-column type="selection" width="55"> </el-table-column>
{{row.number}} <el-table-column :label="$t('客户编号')" align="center" prop="number">
<template v-slot="{ row }">
{{ row.number }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column :label="$t('客户名称')" align="center" prop="name"> <el-table-column :label="$t('客户名称')" align="center" prop="name">
<template slot-scope="{row}"> <template slot-scope="{ row }">
<p style="display:inline-block;white-space:pre-wrap;">{{$l(row, 'name')}}</p> <p style="display: inline-block; white-space: pre-wrap">
<el-tag v-if="row.isInOpenSea" size="mini">{{ $t('') }}</el-tag> {{ $l(row, "name") }}
</p>
<el-tag v-if="row.isInOpenSea" size="mini">{{ $t("") }}</el-tag>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column :label="$t('客户等级')" align="center" prop="vipLevelNameZh"> <el-table-column
:label="$t('客户等级')"
align="center"
prop="vipLevelNameZh"
>
<template slot-scope="scope"> <template slot-scope="scope">
<dict-tag :type="DICT_TYPE.CUSTOMER_LEVEL" :value="scope.row.level" /> <dict-tag :type="DICT_TYPE.CUSTOMER_LEVEL" :value="scope.row.level" />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column :label="$t('信用等级')" :prop="isChinese ? 'creditLevelNameZh' : 'creditLevelNameEn'"></el-table-column> <el-table-column
:label="$t('信用等级')"
:prop="isChinese ? 'creditLevelNameZh' : 'creditLevelNameEn'"
></el-table-column>
<el-table-column :label="$t('客户状态')" align="center" prop="status"> <el-table-column :label="$t('客户状态')" align="center" prop="status">
<template slot-scope="scope"> <template slot-scope="scope">
<dict-tag :type="DICT_TYPE.CUSTOMER_STATUS" :value="scope.row.status" /> <dict-tag
:type="DICT_TYPE.CUSTOMER_STATUS"
:value="scope.row.status"
/>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column :label="$t('主联系人')" prop="defaultContactName"></el-table-column> <el-table-column
:label="$t('主联系人')"
prop="defaultContactName"
></el-table-column>
<el-table-column :label="$t('主联系方式')" prop="defaultContactPhone"> <el-table-column :label="$t('主联系方式')" prop="defaultContactPhone">
<template v-slot="{row}"> <template v-slot="{ row }">
+{{row.defaultContactPhone}} <br/> +{{ row.defaultContactPhone }} <br />
<contacts :id="row.id" > <contacts :id="row.id">
<el-button type="text">更多</el-button> <el-button type="text">更多</el-button>
</contacts> </contacts>
</template> </template>
</el-table-column> </el-table-column>
<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>{{ parseTime(scope.row.createTime) }}</span> <span>{{ parseTime(scope.row.createTime) }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column :label="$t('入公海时间')" align="center" prop="createTime" width="180"> <el-table-column
<template v-slot = {row}> :label="$t('入公海时间')"
<span>{{ parseTime(row.enterOpenSeaTime ? row.enterOpenSeaTime : row.estimateEnterOpenSeaTime ) }}</span> align="center"
prop="createTime"
width="180"
>
<template v-slot="{ row }">
<span>{{
parseTime(
row.enterOpenSeaTime
? row.enterOpenSeaTime
: row.estimateEnterOpenSeaTime
)
}}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column :label="$t('客户经理')" align="center" prop="customerServiceName"> <el-table-column
:label="$t('客户经理')"
align="center"
prop="customerServiceName"
></el-table-column>
<!--
<el-table-column
:label="$t('客户经理ID')"
align="center" v-show="false"
prop="customerService"
>-->
</el-table-column> </el-table-column>
<el-table-column :label="$t('出货渠道')"> <el-table-column :label="$t('出货渠道')">
<template slot-scope="{row}"> <template slot-scope="{ row }">
{{channel(row.transportType)}} {{ channel(row.transportType) }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column :label="$t('国家')" align="center" prop="country" :formatter="countryFormatter"></el-table-column> <el-table-column
<el-table-column width="200px" :label="$t('操作')" align="center" class-name="small-padding fixed-width"> :label="$t('国家')"
align="center"
prop="country"
:formatter="countryFormatter"
></el-table-column>
<el-table-column
width="200px"
:label="$t('操作')"
align="center"
class-name="small-padding fixed-width"
>
<template slot-scope="scope"> <template slot-scope="scope">
<!-- <el-button size="mini" type="text" v-show="'development' === env && scope.row.isInOpenSea" @click="seasPond(scope.row)"--> <!-- <el-button size="mini" type="text" v-show="'development' === env && scope.row.isInOpenSea" @click="seasPond(scope.row)"-->
<!-- v-hasPermi="['ecw:customer:query']">{{$t('掉入公海池')}}</el-button>--> <!-- v-hasPermi="['ecw:customer:query']">{{$t('掉入公海池')}}</el-button>-->
<el-button size="mini" type="text" icon="el-icon-view" @click="handleView(scope.row)" <el-button
v-hasPermi="[selectAuthorityFn('ecw:customer:index-query')]">{{$t('查看')}}</el-button> size="mini"
<el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)" type="text"
v-hasPermi="[selectAuthorityFn('ecw:customer:update')]">{{$t('修改')}}</el-button> icon="el-icon-view"
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)" @click="handleView(scope.row)"
v-hasPermi="[selectAuthorityFn('ecw:customer:delete')]">{{$t('删除')}}</el-button> v-hasPermi="[selectAuthorityFn('ecw:customer:index-query')]"
<el-button size="mini" v-has-permi="[selectAuthorityFn('ecw:customer:follow-up')]" type="text" icon="el-icon-collection" @click="followUp(scope.row)">{{$t('跟进')}}</el-button> >{{ $t("查看") }}</el-button
<el-button size="mini" v-has-permi="[selectAuthorityFn('ecw:customer:customer-complaint')]" type="text" icon="el-icon-user" @click="complaint(scope.row)">{{$t('客诉')}}</el-button> >
<el-button :disabled="scope.row.isInOpenSea" v-has-permi="[selectAuthorityFn('ecw:customer:postpone')]" size="mini" type="text" icon="el-icon-user" @click="delay(scope.row)">{{$t('延期')}}</el-button> <el-button
<el-button v-has-permi="['ecw:customer:treat-recovery']" v-if="scope.row.customerService !== null && scope.row.customerServiceAssignedTime !== null && !scope.row.isCustomerServiceConfirmed && !scope.row.isInOpenSea && path === '/customer/customer'" size="mini" type="text" @click="recovery(scope.row)" > {{$t('回收客户')}} </el-button> size="mini"
<el-button v-has-permi="['ecw:customer:performanceType']" v-if="path === '/customer/customer'" size="mini" type="text" @click="dialogVisible = true; customData = scope.row;currentisNew = scope.row.isNew" > {{$t('业绩类型')}} </el-button> type="text"
icon="el-icon-edit"
<el-button v-has-permi="[selectAuthorityFn('ecw:customer:treat-quoted-price')]" size="mini" type="text" icon="el-icon-user" @click="quote(scope.row)">{{$t('报价')}}</el-button> @click="handleUpdate(scope.row)"
v-hasPermi="[selectAuthorityFn('ecw:customer:update')]"
>{{ $t("修改") }}</el-button
>
<el-button
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
v-hasPermi="[selectAuthorityFn('ecw:customer:delete')]"
>{{ $t("删除") }}</el-button
>
<el-button
size="mini"
v-has-permi="[selectAuthorityFn('ecw:customer:follow-up')]"
type="text"
icon="el-icon-collection"
@click="followUp(scope.row)"
>{{ $t("跟进") }}</el-button
>
<el-button
size="mini"
v-has-permi="[selectAuthorityFn('ecw:customer:customer-complaint')]"
type="text"
icon="el-icon-user"
@click="complaint(scope.row)"
>{{ $t("客诉") }}</el-button
>
<el-button
:disabled="scope.row.isInOpenSea"
v-has-permi="[selectAuthorityFn('ecw:customer:postpone')]"
size="mini"
type="text"
icon="el-icon-user"
@click="delay(scope.row)"
>{{ $t("延期") }}</el-button
>
<el-button
v-has-permi="['ecw:customer:treat-recovery']"
v-if="
scope.row.customerService !== null &&
scope.row.customerServiceAssignedTime !== null &&
!scope.row.isCustomerServiceConfirmed &&
!scope.row.isInOpenSea &&
path === '/customer/customer'
"
size="mini"
type="text"
@click="recovery(scope.row)"
>
{{ $t("回收客户") }}
</el-button>
<el-button
v-has-permi="['ecw:customer:performanceType']"
v-if="path === '/customer/customer'"
size="mini"
type="text"
@click="
dialogVisible = true;
customData = scope.row;
currentisNew = scope.row.isNew;
"
>
{{ $t("业绩类型") }}
</el-button>
<!--lanbm 2024-05-23 添加报价按钮逻辑控制-->
<el-button
v-has-permi="[selectAuthorityFn('ecw:customer:treat-quoted-price')]"
size="mini"
type="text"
icon="el-icon-user"
@click="quote(scope.row)"
>{{ $t("报价") }}</el-button
>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<!-- 分页组件 --> <!-- 分页组件 -->
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNo" :limit.sync="queryParams.pageSize" <pagination
@pagination="getList"/> v-show="total > 0"
:total="total"
:page.sync="queryParams.pageNo"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
<!-- 对话框(添加 / 修改) --> <!-- 对话框(添加 / 修改) -->
<el-dialog :title="title" :visible.sync="open" width="90%" append-to-body :close-on-click-modal="false"> <el-dialog
:title="title"
:visible.sync="open"
width="90%"
append-to-body
:close-on-click-modal="false"
>
<el-form ref="form" :model="form" :rules="rules" label-width="150px"> <el-form ref="form" :model="form" :rules="rules" label-width="150px">
<el-row :gutter="10"> <el-row :gutter="10">
<el-col :span="12"> <el-col :span="12">
<el-form-item :label="$t('客户名称')" prop="name"> <el-form-item :label="$t('客户名称')" prop="name">
<el-input v-model="form.name" :placeholder="$t('请输入客户名称')" /> <el-input
v-model="form.name"
:placeholder="$t('请输入客户名称')"
/>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item :label="$t('国家')" prop="country"> <el-form-item :label="$t('国家')" prop="country">
<el-select v-model="form.country" :placeholder="$t('请选择国家')"> <el-select v-model="form.country" :placeholder="$t('请选择国家')">
<el-option v-for="dict in getDictDatas(DICT_TYPE.COUNTRY)" <el-option
:key="dict.value" :label="isChinese ? dict.label : dict.labelEn" :value="parseInt(dict.value)" /> v-for="dict in getDictDatas(DICT_TYPE.COUNTRY)"
:key="dict.value"
:label="isChinese ? dict.label : dict.labelEn"
:value="parseInt(dict.value)"
/>
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item :label="$t('客户等级')" prop="level"> <el-form-item :label="$t('客户等级')" prop="level">
<el-select v-model="form.level" :placeholder="$t('请选择客户等级')"> <el-select
<el-option v-for="dict in getDictDatas(DICT_TYPE.CUSTOMER_LEVEL)" v-model="form.level"
:key="dict.value" :label="isChinese ? dict.label : dict.labelEn" :value="parseInt(dict.value)" /> :placeholder="$t('请选择客户等级')"
>
<el-option
v-for="dict in getDictDatas(DICT_TYPE.CUSTOMER_LEVEL)"
:key="dict.value"
:label="isChinese ? dict.label : dict.labelEn"
:value="parseInt(dict.value)"
/>
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item :label="$t('联系地址')" prop="address"> <el-form-item :label="$t('联系地址')" prop="address">
<el-input v-model="form.address" :placeholder="$t('请输入联系地址')" /> <el-input
v-model="form.address"
:placeholder="$t('请输入联系地址')"
/>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item :label="$t('客户类别')" prop="type"> <el-form-item :label="$t('客户类别')" prop="type">
<el-select v-model="form.type" :placeholder="$t('请选择客户类别')"> <el-select
<el-option v-for="dict in getDictDatas(DICT_TYPE.CUSTOMER_TYPE)" v-model="form.type"
:key="dict.value" :label="isChinese ? dict.label : dict.labelEn" :value="dict.value" /> :placeholder="$t('请选择客户类别')"
>
<el-option
v-for="dict in getDictDatas(DICT_TYPE.CUSTOMER_TYPE)"
:key="dict.value"
:label="isChinese ? dict.label : dict.labelEn"
:value="dict.value"
/>
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<!-- <el-col :span="12">--> <!-- <el-col :span="12">-->
<!-- <el-form-item :label="$t('所属代理')" prop="agentId">--> <!-- <el-form-item :label="$t('所属代理')" prop="agentId">-->
<!-- <el-select v-model="form.agentId" :placeholder="$t('请选择所属代理')">--> <!-- <el-select v-model="form.agentId" :placeholder="$t('请选择所属代理')">-->
<!-- <el-option v-for="dict in getDictDatas(DICT_TYPE.COMMON_STATUS)"--> <!-- <el-option v-for="dict in getDictDatas(DICT_TYPE.COMMON_STATUS)"-->
<!-- :key="dict.value" :label="dict.label" :value="parseInt(dict.value)" />--> <!-- :key="dict.value" :label="dict.label" :value="parseInt(dict.value)" />-->
<!-- </el-select>--> <!-- </el-select>-->
<!-- </el-form-item>--> <!-- </el-form-item>-->
<!-- </el-col>--> <!-- </el-col>-->
<el-col :span="12"> <el-col :span="12">
<el-form-item :label="$t('常用提货网点')" prop="pickupPoint"> <el-form-item :label="$t('常用提货网点')" prop="pickupPoint">
<el-select v-model="form.pickupPoint" :placeholder="$t('请输入常用提货网点')"> <el-select
<el-option v-for="node in nodeList" v-model="form.pickupPoint"
:key="node.value" :label="node.label" :value="node.value" /> :placeholder="$t('请输入常用提货网点')"
>
<el-option
v-for="node in nodeList"
:key="node.value"
:label="node.label"
:value="node.value"
/>
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item :label="$t('公司名称')" prop="company"> <el-form-item :label="$t('公司名称')" prop="company">
<el-input v-model="form.company" :placeholder="$t('请输入公司名称')" /> <el-input
v-model="form.company"
:placeholder="$t('请输入公司名称')"
/>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item :label="$t('客户生日')" prop="birthday"> <el-form-item :label="$t('客户生日')" prop="birthday">
<el-date-picker <el-date-picker
v-model="form.birthday" v-model="form.birthday"
type="date" type="date"
value-format="timestamp" value-format="timestamp"
:placeholder="$t('请输入客户生日')"> :placeholder="$t('请输入客户生日')"
>
</el-date-picker> </el-date-picker>
</el-form-item> </el-form-item>
</el-col> </el-col>
...@@ -260,13 +583,19 @@ ...@@ -260,13 +583,19 @@
<el-form-item :label="$t('主营类别')" prop="productType"> <el-form-item :label="$t('主营类别')" prop="productType">
<el-row :gutter="10"> <el-row :gutter="10">
<el-col :span="11"> <el-col :span="11">
<el-select v-model="form.productType" :placeholder="$t('请选择产品类别')"> <el-select
<!-- <el-option :label="$t('请选择字典生成')" value="" />--> v-model="form.productType"
:placeholder="$t('请选择产品类别')"
>
<!-- <el-option :label="$t('请选择字典生成')" value="" />-->
</el-select> </el-select>
</el-col> </el-col>
<el-col :span="11"> <el-col :span="11">
<el-select v-model="form.productType" :placeholder="$t('请选择主营类别')"> <el-select
<!-- <el-option :label="$t('请选择字典生成')" value="" />--> v-model="form.productType"
:placeholder="$t('请选择主营类别')"
>
<!-- <el-option :label="$t('请选择字典生成')" value="" />-->
</el-select> </el-select>
</el-col> </el-col>
</el-row> </el-row>
...@@ -274,25 +603,46 @@ ...@@ -274,25 +603,46 @@
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item :label="$t('客户来源')" prop="source"> <el-form-item :label="$t('客户来源')" prop="source">
<el-select v-model="form.source" :placeholder="$t('请选择客户来源')"> <el-select
<el-option v-for="dict in getDictDatas(DICT_TYPE.CUSTOMER_SOURCE)" v-model="form.source"
:key="dict.value" :label="isChinese ? dict.label : dict.labelEn" :value="parseInt(dict.value)" /> :placeholder="$t('请选择客户来源')"
>
<el-option
v-for="dict in getDictDatas(DICT_TYPE.CUSTOMER_SOURCE)"
:key="dict.value"
:label="isChinese ? dict.label : dict.labelEn"
:value="parseInt(dict.value)"
/>
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item :label="$t('结算方式')" prop="balance"> <el-form-item :label="$t('结算方式')" prop="balance">
<el-select v-model="form.balance" :placeholder="$t('请选择结算方式')"> <el-select
<el-option v-for="dict in getDictDatas(DICT_TYPE.CUSTOMER_BALANCE)" v-model="form.balance"
:key="dict.value" :label="isChinese ? dict.label : dict.labelEn" :value="parseInt(dict.value)" /> :placeholder="$t('请选择结算方式')"
>
<el-option
v-for="dict in getDictDatas(DICT_TYPE.CUSTOMER_BALANCE)"
:key="dict.value"
:label="isChinese ? dict.label : dict.labelEn"
:value="parseInt(dict.value)"
/>
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item :label="$t('客户经理')" prop="customerService"> <el-form-item :label="$t('客户经理')" prop="customerService">
<el-select v-model="form.customerService" :placeholder="$t('请选择客户经理')"> <el-select
<el-option v-for="dict in customerServiceList" v-model="form.customerService"
:key="dict.id" :label="dict.nickname" :value="dict.id" /> :placeholder="$t('请选择客户经理')"
>
<el-option
v-for="dict in customerServiceList"
:key="dict.id"
:label="dict.nickname"
:value="dict.id"
/>
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
...@@ -300,25 +650,36 @@ ...@@ -300,25 +650,36 @@
<el-form-item :label="$t('图片')" prop="picture"> <el-form-item :label="$t('图片')" prop="picture">
<upload v-model="form.picture" :limit="1"></upload> <upload v-model="form.picture" :limit="1"></upload>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item :label="$t('客户状态')" prop="status"> <el-form-item :label="$t('客户状态')" prop="status">
<el-select
<el-select v-model="form.status" :placeholder="$t('请选择客户状态')"> v-model="form.status"
<el-option v-for="dict in getDictDatas(DICT_TYPE.CUSTOMER_STATUS)" :placeholder="$t('请选择客户状态')"
:key="dict.value" :label="isChinese ? dict.label : dict.labelEn" :value="parseInt(dict.value)" /> >
<el-option
v-for="dict in getDictDatas(DICT_TYPE.CUSTOMER_STATUS)"
:key="dict.value"
:label="isChinese ? dict.label : dict.labelEn"
:value="parseInt(dict.value)"
/>
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item :label="$t('推介人')" prop="promoter"> <el-form-item :label="$t('推介人')" prop="promoter">
<el-input v-model="form.promoter" :placeholder="$t('请输入推介人')" /> <el-input
v-model="form.promoter"
:placeholder="$t('请输入推介人')"
/>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item :label="$t('创建人')" prop="founder"> <el-form-item :label="$t('创建人')" prop="founder">
<el-input v-model="form.founder" :placeholder="$t('请输入创建人')" /> <el-input
v-model="form.founder"
:placeholder="$t('请输入创建人')"
/>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
...@@ -327,23 +688,34 @@ ...@@ -327,23 +688,34 @@
v-model="form.createTime" v-model="form.createTime"
type="datetime" type="datetime"
value-format="timestamp" value-format="timestamp"
:placeholder="$t('选择创建时间')"> :placeholder="$t('选择创建时间')"
>
</el-date-picker> </el-date-picker>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item :label="$t('备注')" prop="remarks"> <el-form-item :label="$t('备注')" prop="remarks">
<el-input v-model="form.remarks" :placeholder="$t('请输入备注')" /> <el-input
v-model="form.remarks"
:placeholder="$t('请输入备注')"
/>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="24"> <el-col :span="24">
<el-form-item :label="$t('到仓确认')" prop="arrivalConfirm"> <el-form-item :label="$t('到仓确认')" prop="arrivalConfirm">
<el-switch v-model="form.arrivalConfirm" :active-value="0" :inactive-value="1" /> <el-switch
v-model="form.arrivalConfirm"
:active-value="0"
:inactive-value="1"
/>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="24"> <el-col :span="24">
<el-form-item :label="$t('重货标准(CBM)')" prop="weightUnit"> <el-form-item :label="$t('重货标准(CBM)')" prop="weightUnit">
<el-input v-model="form.weightUnit" :placeholder="$t('请输入重货标准(CBM)')" /> <el-input
v-model="form.weightUnit"
:placeholder="$t('请输入重货标准(CBM)')"
/>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="24"> <el-col :span="24">
...@@ -353,14 +725,11 @@ ...@@ -353,14 +725,11 @@
v-show="showLine" v-show="showLine"
border border
:data="form.customerLines" :data="form.customerLines"
style="width: 500px"> style="width: 500px"
<el-table-column >
prop="departureId" <el-table-column prop="departureId" :label="$t('始发地')">
:label="$t('始发地')">
</el-table-column> </el-table-column>
<el-table-column <el-table-column prop="objectiveId" :label="$t('目的地')">
prop="objectiveId"
:label="$t('目的地')">
</el-table-column> </el-table-column>
</el-table> </el-table>
</el-form-item> </el-form-item>
...@@ -369,113 +738,132 @@ ...@@ -369,113 +738,132 @@
<el-card class="box-card"> <el-card class="box-card">
<div slot="header" class="clearfix"> <div slot="header" class="clearfix">
<span>{{ $t('联系人') }}</span> <span>{{ $t("联系人") }}</span>
<el-button style="float: right;" size="small" type="primary" @click="form.customerContacts.push({department: undefined})">+</el-button> <el-button
</div> style="float: right"
<el-table size="small"
:data="form.customerContacts" type="primary"
style="width: 100%" @click="form.customerContacts.push({ department: undefined })"
> >+</el-button
<el-table-column
prop="department"
:label="$t('部门')"
width=""
> >
</div>
<el-table :data="form.customerContacts" style="width: 100%">
<el-table-column prop="department" :label="$t('部门')" width="">
<template v-slot="{ row, column, $index }"> <template v-slot="{ row, column, $index }">
<el-input v-model="row.department" :placeholder="$t('请输入部门')" size="mini"/> <el-input
v-model="row.department"
:placeholder="$t('请输入部门')"
size="mini"
/>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column prop="position" :label="$t('职位')" width="">
prop="position" <template v-slot="{ row }">
:label="$t('职位')" <el-input
width="" v-model="row.position"
> :placeholder="$t('请输入职位')"
<template v-slot="{row}"> size="mini"
<el-input v-model="row.position" :placeholder="$t('请输入职位')" size="mini"/> />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column prop="name" :label="$t('联系人')">
prop="name" <template v-slot:header
:label="$t('联系人')" >{{ $t("联系人") }}<span style="color: #ff0000">*</span>
>
<template v-slot:header>{{ $t('联系人') }}<span style="color: #ff0000">*</span>
</template> </template>
<template v-slot="{row}"> <template v-slot="{ row }">
<el-input v-model="row.name" :placeholder="$t('请输入联系人')" size="mini"/> <el-input
v-model="row.name"
:placeholder="$t('请输入联系人')"
size="mini"
/>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column prop="areaCode" :label="$t('区号')">
prop="areaCode" <template v-slot:header
:label="$t('区号')" >{{ $t("区号") }}<span style="color: #ff0000">*</span>
>
<template v-slot:header>{{ $t('区号') }}<span style="color: #ff0000">*</span>
</template> </template>
<template v-slot="{row}"> <template v-slot="{ row }">
<el-select v-model="row.areaCode" :placeholder="$t('请选择区号')"> <el-select
<el-option v-for="dict in getDictDatas(DICT_TYPE.AREA_CODE)" v-model="row.areaCode"
:key="dict.value" :label="isChinese ? dict.label : dict.labelEn" :value="parseInt(dict.value)" /> :placeholder="$t('请选择区号')"
>
<el-option
v-for="dict in getDictDatas(DICT_TYPE.AREA_CODE)"
:key="dict.value"
:label="isChinese ? dict.label : dict.labelEn"
:value="parseInt(dict.value)"
/>
</el-select> </el-select>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column prop="phoneNew" :label="$t('联系方式')">
prop="phoneNew" <template v-slot:header
:label="$t('联系方式')" >{{ $t("联系方式") }}<span style="color: #ff0000">*</span>
>
<template v-slot:header>{{ $t('联系方式') }}<span style="color: #ff0000">*</span>
</template> </template>
<template v-slot="{row}"> <template v-slot="{ row }">
<el-input v-model="row.phoneNew" :placeholder="$t('请输入联系方式')" size="mini"/> <el-input
v-model="row.phoneNew"
:placeholder="$t('请输入联系方式')"
size="mini"
/>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column prop="" :label="$t('关联账号')"> </el-table-column>
prop="" <el-table-column prop="social" :label="$t('社交软件')">
:label="$t('关联账号')" <template v-slot="{ row }">
<el-select
v-model="row.social"
:placeholder="$t('请选择社交软件')"
> >
</el-table-column> <el-option
<el-table-column v-for="dict in getDictDatas(DICT_TYPE.SOCIAL)"
prop="social" :key="dict.value"
:label="$t('社交软件')" :label="isChinese ? dict.label : dict.labelEn"
> :value="parseInt(dict.value)"
<template v-slot="{row}"> />
<el-select v-model="row.social" :placeholder="$t('请选择社交软件')">
<el-option v-for="dict in getDictDatas(DICT_TYPE.SOCIAL)"
:key="dict.value" :label="isChinese ? dict.label : dict.labelEn" :value="parseInt(dict.value)" />
</el-select> </el-select>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column prop="socialNumber" :label="$t('社交软件号码')">
prop="socialNumber" <template v-slot="{ row }">
:label="$t('社交软件号码')" <el-input
> v-model="row.socialNumber"
<template v-slot="{row}"> :placeholder="$t('请输入社交软件号码')"
<el-input v-model="row.socialNumber" :placeholder="$t('请输入社交软件号码')" size="mini"/> size="mini"
/>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column prop="email" :label="$t('邮箱')">
prop="email" <template v-slot="{ row }">
:label="$t('邮箱')" <el-input
> v-model="row.email"
<template v-slot="{row}"> :placeholder="$t('请输入邮箱')"
<el-input v-model="row.email" :placeholder="$t('请输入邮箱')" size="mini"/> size="mini"
/>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column prop="isDefault" :label="$t('设为默认')">
prop="isDefault" <template v-slot="{ row }">
:label="$t('设为默认')" <el-select
v-model="row.isDefault"
:placeholder="$t('设为默认')"
> >
<template v-slot="{row}"> <el-option
<el-select v-model="row.isDefault" :placeholder="$t('设为默认')"> v-for="dict in getDictDatas(DICT_TYPE.IS_DEFAULT)"
<el-option v-for="dict in getDictDatas(DICT_TYPE.IS_DEFAULT)" :key="dict.value"
:key="dict.value" :label="dict.label" :value="parseInt(dict.isDefault)" /> :label="dict.label"
:value="parseInt(dict.isDefault)"
/>
</el-select> </el-select>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column prop="name" :label="$t('操作')">
prop="name"
:label="$t('操作')"
>
<template v-slot="{ row, column, $index }"> <template v-slot="{ row, column, $index }">
<el-button type="danger" @click="form.customerContacts.splice($index, 1)">{{ $t('删除') }}</el-button> <el-button
type="danger"
@click="form.customerContacts.splice($index, 1)"
>{{ $t("删除") }}</el-button
>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
...@@ -484,12 +872,18 @@ ...@@ -484,12 +872,18 @@
<el-row :gutter="10" style="margin-top: 15px"> <el-row :gutter="10" style="margin-top: 15px">
<el-col :span="12"> <el-col :span="12">
<el-form-item :label="$t('发票抬头')" prop="invoiceTitle"> <el-form-item :label="$t('发票抬头')" prop="invoiceTitle">
<el-input v-model="form.invoiceTitle" :placeholder="$t('请输入发票抬头')" /> <el-input
v-model="form.invoiceTitle"
:placeholder="$t('请输入发票抬头')"
/>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item :label="$t('纳税人识别号')" prop="licenseNumber"> <el-form-item :label="$t('纳税人识别号')" prop="licenseNumber">
<el-input v-model="form.licenseNumber" :placeholder="$t('请输入纳税人识别号')" /> <el-input
v-model="form.licenseNumber"
:placeholder="$t('请输入纳税人识别号')"
/>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
...@@ -499,60 +893,92 @@ ...@@ -499,60 +893,92 @@
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item :label="$t('账户')" prop="bankNumber"> <el-form-item :label="$t('账户')" prop="bankNumber">
<el-input v-model="form.bankNumber" :placeholder="$t('请输入账户')" /> <el-input
v-model="form.bankNumber"
:placeholder="$t('请输入账户')"
/>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item :label="$t('项目')" prop="project"> <el-form-item :label="$t('项目')" prop="project">
<el-input v-model="form.project" :placeholder="$t('请输入项目')" /> <el-input
v-model="form.project"
:placeholder="$t('请输入项目')"
/>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item :label="$t('开票地址')" prop="billingAddress"> <el-form-item :label="$t('开票地址')" prop="billingAddress">
<el-input v-model="form.billingAddress" :placeholder="$t('请输入开票地址')" /> <el-input
v-model="form.billingAddress"
:placeholder="$t('请输入开票地址')"
/>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item :label="$t('开票电话')" prop="billingTell"> <el-form-item :label="$t('开票电话')" prop="billingTell">
<el-input v-model="form.billingTell" :placeholder="$t('请输入开票电话')" /> <el-input
v-model="form.billingTell"
:placeholder="$t('请输入开票电话')"
/>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item :label="$t('税率')" prop="taxRate"> <el-form-item :label="$t('税率')" prop="taxRate">
<el-input v-model="form.taxRate" :placeholder="$t('请输入税率')" /> <el-input
v-model="form.taxRate"
:placeholder="$t('请输入税率')"
/>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
</el-form> </el-form>
<div slot="footer" class="dialog-footer"> <div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm">{{$t('确 定')}}</el-button> <el-button type="primary" @click="submitForm">{{
<el-button @click="cancel">{{$t('取 消')}}</el-button> $t("确 定")
}}</el-button>
<el-button @click="cancel">{{ $t("取 消") }}</el-button>
</div> </div>
</el-dialog> </el-dialog>
<customer-follow-list :customer-id="customerId" :id="customerId" ref="CustomerFollowList"></customer-follow-list> <customer-follow-list
<customer-complaints :customer-id="customerId" ref="customerComplaints"></customer-complaints> :customer-id="customerId"
<transfer-customer :show.sync="transferShow" :customer-ids.sync="selectCustomerList"></transfer-customer> :id="customerId"
<add-potential-custom ref="potentialCustom" @change="getList" ></add-potential-custom> ref="CustomerFollowList"
></customer-follow-list>
<customer-complaints
:customer-id="customerId"
ref="customerComplaints"
></customer-complaints>
<transfer-customer
:show.sync="transferShow"
:customer-ids.sync="selectCustomerList"
></transfer-customer>
<add-potential-custom
ref="potentialCustom"
@change="getList"
></add-potential-custom>
<!--业绩类型 --> <!--业绩类型 -->
<el-dialog <el-dialog title="业绩类型" :visible.sync="dialogVisible" width="30%">
title="业绩类型"
:visible.sync="dialogVisible"
width="30%">
<div> <div>
<el-form> <el-form>
<el-form-item label="客户编号">{{customData.number}}</el-form-item> <el-form-item label="客户编号">{{ customData.number }}</el-form-item>
<el-form-item label="客户名称">{{customData.name}}</el-form-item> <el-form-item label="客户名称">{{ customData.name }}</el-form-item>
<el-form-item label="业绩类型"> <el-form-item label="业绩类型">
<el-radio-group v-model="currentisNew"> <el-radio-group v-model="currentisNew">
<el-radio :label="true" >{{$t('新客户')}}</el-radio> <el-radio :label="true">{{ $t("新客户") }}</el-radio>
<el-radio :label="false" >{{$t('老客户')}}</el-radio> <el-radio :label="false">{{ $t("老客户") }}</el-radio>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
</el-form> </el-form>
</div> </div>
<span slot="footer" class="dialog-footer"> <span slot="footer" class="dialog-footer">
<el-button @click="dialogVisible = false">取 消</el-button> <el-button @click="dialogVisible = false">取 消</el-button>
<el-button :disabled="customData.isNew === currentisNew" type="primary" @click="modifyCustomer">修改</el-button> <el-button
:disabled="customData.isNew === currentisNew"
type="primary"
@click="modifyCustomer"
>修改</el-button
>
</span> </span>
</el-dialog> </el-dialog>
</div> </div>
...@@ -570,24 +996,28 @@ import { ...@@ -570,24 +996,28 @@ import {
getCustomerDeptPage, getCustomerDeptPage,
changeCustomerAir, changeCustomerAir,
getPotential, getPotential,
setChangeCustomerFcl, potentialExportExcel, deptExportExcel, recycleUnconfirmedCustomer, updatecustomerToOld setChangeCustomerFcl,
potentialExportExcel,
deptExportExcel,
recycleUnconfirmedCustomer,
updatecustomerToOld,
} from "@/api/ecw/customer"; } from "@/api/ecw/customer";
import { getDictDatas, DICT_TYPE } from '@/utils/dict'; import { getDictDatas, DICT_TYPE } from "@/utils/dict";
import {CommonStatusEnum} from '@/utils/constants' import { CommonStatusEnum } from "@/utils/constants";
import { uploadFile } from "@/api/infra/file"; import { uploadFile } from "@/api/infra/file";
import upload from "@/components/ImageUpload";
import upload from '@/components/ImageUpload' import { getNodeList } from "@/api/ecw/node";
import {getNodeList} from "@/api/ecw/node" import CustomerFollowList from "@/components/CustomerFollowList";
import CustomerFollowList from "@/components/CustomerFollowList" import customerComplaints from "@/components/customerComplaints";
import customerComplaints from "@/components/customerComplaints" import { listServiceUser } from "@/api/system/user";
import {listServiceUser} from "@/api/system/user"; import { getCountryListAll } from "@/api/ecw/country";
import { getCountryListAll } from '@/api/ecw/country' import { getCreditPage } from "@/api/customer/credit";
import {getCreditPage} from "@/api/customer/credit"; import { customerExportExcel } from "@/api/ecw/customer";
import {customerExportExcel} from "@/api/ecw/customer";
import transferCustomer from "@/views/ecw/customer/transferCustomer"; import transferCustomer from "@/views/ecw/customer/transferCustomer";
import Template from "@/views/cms/template/index.vue"; import Template from "@/views/cms/template/index.vue";
import AddPotentialCustom from "@/views/ecw/customer/addPotentialCustom.vue"; import AddPotentialCustom from "@/views/ecw/customer/addPotentialCustom.vue";
import Contacts from "@/views/ecw/customer/components/contacts.vue"; import Contacts from "@/views/ecw/customer/components/contacts.vue";
import { getUserProfile } from "@/api/system/user";
export default { export default {
name: "EcwCustomerIndex", name: "EcwCustomerIndex",
...@@ -598,11 +1028,11 @@ export default { ...@@ -598,11 +1028,11 @@ export default {
upload, upload,
CustomerFollowList, CustomerFollowList,
customerComplaints, customerComplaints,
transferCustomer transferCustomer,
}, },
data() { data() {
return { return {
env:process.env.NODE_ENV, env: process.env.NODE_ENV,
getDictDatas, getDictDatas,
DICT_TYPE, DICT_TYPE,
// 遮罩层 // 遮罩层
...@@ -631,202 +1061,267 @@ export default { ...@@ -631,202 +1061,267 @@ export default {
customerService: null, customerService: null,
status: null, status: null,
department: null, department: null,
creditLevel:null, creditLevel: null,
country:null, country: null,
resourceType:null, resourceType: null,
}, },
// 表单参数 // 表单参数
form: {}, form: {},
// 表单校验 // 表单校验
rules: { rules: {
name: [{ required: true, message: this.$t('客户名称不能为空'), trigger: "blur" }], name: [
country: [{ required: true, message: this.$t('国家不能为空'), trigger: "blur" }], {
level: [{ required: true, message: this.$t('客户等级不能为空'), trigger: "blur" }], required: true,
type: [{ required: true, message: this.$t('客户类别不能为空'), trigger: "blur" }], message: this.$t("客户名称不能为空"),
trigger: "blur",
},
],
country: [
{ required: true, message: this.$t("国家不能为空"), trigger: "blur" },
],
level: [
{
required: true,
message: this.$t("客户等级不能为空"),
trigger: "blur",
},
],
type: [
{
required: true,
message: this.$t("客户类别不能为空"),
trigger: "blur",
},
],
// createTime: [{ required: true, message: this.$t("创建时间不能为空"), trigger: "blur" }], // createTime: [{ required: true, message: this.$t("创建时间不能为空"), trigger: "blur" }],
source: [{ required: true, message: this.$t('客户来源不能为空'), trigger: "blur" }], source: [
customerService: [{ required: true, message: this.$t('客户经理不能为空'), trigger: "blur" }], {
status: [{ required: true, message: this.$t('客户状态不能为空'), trigger: "blur" }], required: true,
founder: [{ required: true, message: this.$t('创建人不能为空'), trigger: "blur" }], message: this.$t("客户来源不能为空"),
trigger: "blur",
},
],
customerService: [
{
required: true,
message: this.$t("客户经理不能为空"),
trigger: "blur",
},
],
status: [
{
required: true,
message: this.$t("客户状态不能为空"),
trigger: "blur",
},
],
founder: [
{
required: true,
message: this.$t("创建人不能为空"),
trigger: "blur",
},
],
}, },
// 网点 // 网点
nodeList: [], nodeList: [],
showLine: false, showLine: false,
customerId:undefined, customerId: undefined,
customerServiceList:[], customerServiceList: [],
countryList: [], countryList: [],
creditList:[], creditList: [],
selectCustomerList:[], selectCustomerList: [],
transferShow:false, transferShow: false,
dialogVisible:false, dialogVisible: false,
customData:{ customData: {},
currentisNew: false,
}, userId: undefined, //lanbm 2024-05-23 add
currentisNew:false
}; };
}, },
computed:{ computed: {
path(){ path() {
return this.$route.path return this.$route.path;
}, },
channel(){ channel() {
return (val)=>{ return (val) => {
return !!val ? this.getDictDatas(this.DICT_TYPE.ECW_CUSTOMER_TRANSPORT_TYPE).filter(i => (val.split(',') || []).includes(i.value)).map(i => this.isChinese ? i.label : i.labelEn ).join('') :'' return !!val
} ? this.getDictDatas(this.DICT_TYPE.ECW_CUSTOMER_TRANSPORT_TYPE)
.filter((i) => (val.split(",") || []).includes(i.value))
.map((i) => (this.isChinese ? i.label : i.labelEn))
.join("")
: "";
};
}, },
isChinese(){ isChinese() {
return this.$i18n.locale === 'zh_CN' return this.$i18n.locale === "zh_CN";
}, },
authorityFn(){ authorityFn() {
let i = '' let i = "";
switch (this.$route.path){ switch (this.$route.path) {
case '/customer/department-customers': case "/customer/department-customers":
i = 'dep-' i = "dep-";
break; break;
case '/customer/potential': case "/customer/potential":
i = 'pot-' i = "pot-";
break; break;
} }
return i return i;
}, },
selectAuthorityFn(){ selectAuthorityFn() {
return (val)=>{ return (val) => {
let t = val.split(":") let t = val.split(":");
t[t.length - 1] = this.authorityFn + t[t.length - 1] t[t.length - 1] = this.authorityFn + t[t.length - 1];
console.log( t.join(":")) console.log(t.join(":"));
return t.join(":") return t.join(":");
} };
} },
}, },
watch:{ watch: {
selectCustomerList(val){ selectCustomerList(val) {
if(val.length === 0){ if (val.length === 0) {
this.getList() this.getList();
this.$refs.multipleTable.clearSelection(); this.$refs.multipleTable.clearSelection();
} }
}, },
}, },
created() { created() {
getCreditPage({page:1,rows:999}).then(r => { getCreditPage({ page: 1, rows: 999 }).then((r) => {
this.creditList = r.data.list this.creditList = r.data.list;
}) });
this.getList(); this.getList();
listServiceUser().then(r=>{ listServiceUser().then((r) => {
this.customerServiceList = r.data; this.customerServiceList = r.data;
}) });
getCountryListAll().then(r => { getCountryListAll().then((r) => {
this.countryList = r.data this.countryList = r.data;
}) });
//获取用户id信息 lanbm 2024-05-23 add
getUserProfile().then((res) => {
this.userId = res.data.id;
});
}, },
activated(){ activated() {
this.getList(); this.getList();
}, },
methods: { methods: {
recovery(row){ recovery(row) {
this.$confirm(this.$t('是否要回收当前{name}',row), '提示', { this.$confirm(this.$t("是否要回收当前{name}", row), "提示", {
confirmButtonText: '确定', confirmButtonText: "确定",
cancelButtonText: '取消', cancelButtonText: "取消",
type: 'warning' type: "warning",
}).then(() => {
recycleUnconfirmedCustomer({customerId:row.id}).then(r =>{
this.$message.success(this.$t('回收成功。'))
this.getList()
}) })
}).catch(() => { .then(() => {
this.$message.info(this.$t('已取消')) recycleUnconfirmedCustomer({ customerId: row.id }).then((r) => {
this.$message.success(this.$t("回收成功。"));
this.getList();
});
})
.catch(() => {
this.$message.info(this.$t("已取消"));
}); });
}, },
// 设置整柜 // 设置整柜
setFullContainerLoad(isFcl){ setFullContainerLoad(isFcl) {
setChangeCustomerFcl({ setChangeCustomerFcl({
"customerIdList": this.selectCustomerList, customerIdList: this.selectCustomerList,
isFcl isFcl,
}).then(r =>{ }).then((r) => {
if(r.code === 0){ if (r.code === 0) {
this.$message.success(isFcl ? '设置客户为海运整柜成功!' : '设置客户为非海运整柜成功!') this.$message.success(
this.selectCustomerList = [] isFcl ? "设置客户为海运整柜成功!" : "设置客户为非海运整柜成功!"
this.getList() );
this.selectCustomerList = [];
this.getList();
} }
}) });
}, },
// 设置空运客户 // 设置空运客户
setChangeCustomerAir(isAir){ setChangeCustomerAir(isAir) {
changeCustomerAir({ changeCustomerAir({
customerIdList:this.selectCustomerList, customerIdList: this.selectCustomerList,
isAir isAir,
}).then(r =>{ }).then((r) => {
console.log(r) console.log(r);
if(r.code === 0){ if (r.code === 0) {
this.$message.success(isAir ? '设为空运客户成功!' : '设为非空运客户成功!') this.$message.success(
this.selectCustomerList = [] isAir ? "设为空运客户成功!" : "设为非空运客户成功!"
this.getList() );
this.selectCustomerList = [];
this.getList();
} }
}) });
}, },
/** 取消按钮 */ /** 取消按钮 */
cancel() { cancel() {
this.open = false; this.open = false;
this.reset(); this.reset();
}, },
complaint(row){ complaint(row) {
this.customerId = row.id; this.customerId = row.id;
this.$nextTick(()=>{ this.$nextTick(() => {
this.$refs.customerComplaints.handleAdd(); this.$refs.customerComplaints.handleAdd();
}) });
}, },
countryFormatter(row, column, cellValue) { countryFormatter(row, column, cellValue) {
const country = this.countryList.find((e) => e.id === cellValue) const country = this.countryList.find((e) => e.id === cellValue);
return this.isChinese ? country?.nameZh : country?.nameEn return this.isChinese ? country?.nameZh : country?.nameEn;
}, },
delay(row){ delay(row) {
this.$router.push({ path: "/customer/delay", query: { id: row.id } });
this.$router.push({path:'/customer/delay',query:{id:row.id}})
}, },
followUp(row){ followUp(row) {
this.customerId = row.id; this.customerId = row.id;
this.$nextTick(()=>{ this.$nextTick(() => {
this.$refs.CustomerFollowList.customerFollow.dialogVisible = true; this.$refs.CustomerFollowList.customerFollow.dialogVisible = true;
}) });
}, },
//报价 //报价
quote(row){ quote(row) {
//lanbm 2024-05-23 添加报价是判断客户所属客户经理,不是就不能报价
if (row.customerService != this.userId) {
this.$message.error(this.$t("此客户属于其他客户经理名下的客户。"));
return;
}
//this.$router.push({path:'/offer/create',query:{id:row.id}}) //this.$router.push({path:'/offer/create',query:{id:row.id}})
this.$router.push({path:'/offer/create' , query:{customer:row,type:1}}).then({ this.$router
.push({ path: "/offer/create", query: { customer: row, type: 1 } })
.then({
//this.$refs.push({path:'/customer-contacts/select',query:{pageNo:1,pageSize:10,searchKey:row.defaultContactPhone}}) //this.$refs.push({path:'/customer-contacts/select',query:{pageNo:1,pageSize:10,searchKey:row.defaultContactPhone}})
});
})
}, },
/** 查询列表 */ /** 查询列表 */
getList() { getList() {
this.loading = true; this.loading = true;
// 处理查询参数 // 处理查询参数
let params = {...this.queryParams}; let params = { ...this.queryParams };
this.addBeginAndEndTime(params, this.dateRangeCreateTime, 'createTime', false); this.addBeginAndEndTime(
params,
this.dateRangeCreateTime,
"createTime",
false
);
// 执行查询 // 执行查询
switch (this.$route.path){ switch (this.$route.path) {
case '/customer/customer' : case "/customer/customer":
getCustomerPage(params).then(this.setData); getCustomerPage(params).then(this.setData);
break; break;
case '/customer/department-customers': case "/customer/department-customers":
getCustomerDeptPage(params).then(this.setData); getCustomerDeptPage(params).then(this.setData);
break; break;
case '/customer/potential': case "/customer/potential":
getPotential(params).then(this.setData) getPotential(params).then(this.setData);
break; break;
} }
}, },
/** 新增按钮操作 */ /** 新增按钮操作 */
handleAdd() { handleAdd() {
this.$router.push('/customer/add-edit/0') this.$router.push("/customer/add-edit/0");
// this.reset(); // this.reset();
// this.open = true; // this.open = true;
// this.title = this.$t("添加客户"); // this.title = this.$t("添加客户");
}, },
// 新增潜在客户 // 新增潜在客户
handleAddPotential(){ handleAddPotential() {
this.$refs.potentialCustom.dialogTableVisible = true; this.$refs.potentialCustom.dialogTableVisible = true;
}, },
/** 删除按钮操作 */ /** 删除按钮操作 */
...@@ -834,51 +1329,62 @@ export default { ...@@ -834,51 +1329,62 @@ export default {
const id = row.id; const id = row.id;
const name = row.name; const name = row.name;
const number = row.number; const number = row.number;
this.$modal.confirm(this.$t('是否确认删除客户编号为"') + number + this.$t('"的数据项?')).then(function() { this.$modal
.confirm(
this.$t('是否确认删除客户编号为"') + number + this.$t('"的数据项?')
)
.then(function () {
return deleteCustomer(id); return deleteCustomer(id);
}).then(() => { })
.then(() => {
this.getList(); this.getList();
this.$modal.msgSuccess(this.$t('删除成功')); this.$modal.msgSuccess(this.$t("删除成功"));
}).catch(() => {}); })
.catch(() => {});
}, },
/** 导出按钮操作 */ /** 导出按钮操作 */
handleExport() { handleExport() {
let func = null; let func = null;
let title = '' let title = "";
switch (this.$route.path){ switch (this.$route.path) {
case '/customer/customer' : case "/customer/customer":
func = customerExportExcel func = customerExportExcel;
title = '是否确认导出所有客户数据项?' title = "是否确认导出所有客户数据项?";
break; break;
case '/customer/department-customers': case "/customer/department-customers":
func = deptExportExcel func = deptExportExcel;
title = '是否确认导出部门客户数据项?' title = "是否确认导出部门客户数据项?";
break; break;
case '/customer/potential': case "/customer/potential":
func = potentialExportExcel func = potentialExportExcel;
title = '是否确认导出潜在客户数据项?' title = "是否确认导出潜在客户数据项?";
break; break;
} }
// // 执行导出 // // 执行导出
this.$modal.confirm(this.$t(title)).then(() => { this.$modal
func().then(r =>{ .confirm(this.$t(title))
this.$message.success(this.$t('已加入导出队列,请稍后在下载日志中下载')) .then(() => {
func().then((r) => {
this.$message.success(
this.$t("已加入导出队列,请稍后在下载日志中下载")
);
});
}) })
}).catch(() => {}); .catch(() => {});
}, },
/** 搜索按钮操作 */ /** 搜索按钮操作 */
handleQuery() { handleQuery() {
this.queryParams.pageNo = 1; this.queryParams.pageNo = 1;
this.getList(); this.getList();
}, },
handleSelectionChange(val){ handleSelectionChange(val) {
this.selectCustomerList = val.map(i => i.id); this.selectCustomerList = val.map((i) => i.id);
}, },
/** 修改按钮操作 */ /** 修改按钮操作 */
handleUpdate(row) { handleUpdate(row) {
console.log(row.id) console.log(row.id);
this.$router.push('/customer/add-edit/' + row.id) this.$router.push("/customer/add-edit/" + row.id);
// this.reset(); // this.reset();
// const id = row.id; // const id = row.id;
// getCustomer(id).then(response => { // getCustomer(id).then(response => {
...@@ -889,7 +1395,7 @@ export default { ...@@ -889,7 +1395,7 @@ export default {
}, },
/** 查看按钮操作 */ /** 查看按钮操作 */
handleView(row) { handleView(row) {
this.$router.push('/customer/query/' + row.id) this.$router.push("/customer/query/" + row.id);
}, },
/** 表单重置 */ /** 表单重置 */
reset() { reset() {
...@@ -946,66 +1452,72 @@ export default { ...@@ -946,66 +1452,72 @@ export default {
customerService: null, customerService: null,
status: null, status: null,
department: null, department: null,
creditLevel:null, creditLevel: null,
country:null, country: null,
} };
this.handleQuery(); this.handleQuery();
}, },
/** 调入公海池测试用 */ /** 调入公海池测试用 */
seasPond(row) { seasPond(row) {
testEnterToOpenSea(row.id).then(r => { testEnterToOpenSea(row.id).then((r) => {
if(r.code === 0){ if (r.code === 0) {
this.$t('调入公海池成功!') this.$t("调入公海池成功!");
this.getList(); this.getList();
} }
}) });
}, },
setData(response){ setData(response) {
console.log(response,'response') console.log(response, "response");
this.list = response.data.list; this.list = response.data.list;
this.total = response.data.total; this.total = response.data.total;
this.loading = false; this.loading = false;
}, },
/** 提交按钮 */ /** 提交按钮 */
submitForm() { submitForm() {
this.$refs["form"].validate(valid => { this.$refs["form"].validate((valid) => {
if (!valid) { if (!valid) {
// return; // return;
} }
// 修改的提交 // 修改的提交
if (this.form.id != null) { if (this.form.id != null) {
updateCustomer(this.form).then(response => { updateCustomer(this.form).then((response) => {
this.$modal.msgSuccess(this.$t('修改成功')); this.$modal.msgSuccess(this.$t("修改成功"));
this.open = false; this.open = false;
this.getList(); this.getList();
}); });
return; return;
} }
// 添加的提交 // 添加的提交
createCustomer(this.form).then(response => { createCustomer(this.form).then((response) => {
this.$modal.msgSuccess(this.$t('新增成功')); this.$modal.msgSuccess(this.$t("新增成功"));
this.open = false; this.open = false;
this.getList(); this.getList();
}); });
}); });
}, },
// 修改客户类型 // 修改客户类型
modifyCustomer(){ modifyCustomer() {
this.$confirm(this.$t('修改业绩类型后,将会影响客户新订单业绩计算,请问确定吗?'), this.$t('提示'), { this.$confirm(
confirmButtonText: this.$t('确定'), this.$t("修改业绩类型后,将会影响客户新订单业绩计算,请问确定吗?"),
cancelButtonText: this.$t('取消'), this.$t("提示"),
type: 'warning' {
}).then(() => { confirmButtonText: this.$t("确定"),
updatecustomerToOld({customerId:this.customData.id,isNew:this.currentisNew}).then((r) =>{ cancelButtonText: this.$t("取消"),
this.$message.success(this.$t('修改成功')); type: "warning",
this.dialogVisible = false
this.getList()
})
}).catch(() => {
});
}
} }
)
.then(() => {
updatecustomerToOld({
customerId: this.customData.id,
isNew: this.currentisNew,
}).then((r) => {
this.$message.success(this.$t("修改成功"));
this.dialogVisible = false;
this.getList();
});
})
.catch(() => {});
},
},
}; };
</script> </script>
...@@ -90,7 +90,7 @@ ...@@ -90,7 +90,7 @@
v-model="queryParams.dateRangeCreateTime" v-model="queryParams.dateRangeCreateTime"
style="width: 300px" style="width: 300px"
value-format="yyyy-MM-dd" value-format="yyyy-MM-dd"
type="datetimerange" type="daterange"
range-separator="-" range-separator="-"
:start-placeholder="$t('开始日期')" :start-placeholder="$t('开始日期')"
:end-placeholder="$t('结束日期')" :end-placeholder="$t('结束日期')"
...@@ -366,13 +366,15 @@ export default { ...@@ -366,13 +366,15 @@ export default {
page: 1, page: 1,
rows: 20, rows: 20,
dateRangeCreateTime: undefined, dateRangeCreateTime: undefined,
beginCreateTime: undefined,
endCreateTime: undefined,
}, },
allSupplier: [], allSupplier: [],
currencyList: [], currencyList: [],
warehouseList: [], warehouseList: [],
//lanbm 2024-05-17 add //lanbm 2024-05-17 add
dateTypes: [ dateTypes: [
{ value: "0", label: this.$t("费用产生时间") }, { value: "7", label: this.$t("费用产生时间") },
{ value: "1", label: this.$t("预装时间") }, { value: "1", label: this.$t("预装时间") },
{ value: "2", label: this.$t("装柜时间") }, { value: "2", label: this.$t("装柜时间") },
{ value: "3", label: this.$t("起运时间") }, { value: "3", label: this.$t("起运时间") },
...@@ -426,6 +428,13 @@ export default { ...@@ -426,6 +428,13 @@ export default {
let params = { ...this.queryParams }; let params = { ...this.queryParams };
this.addBeginAndEndTime(params, this.dateRangeCreateTime, "createTime"); this.addBeginAndEndTime(params, this.dateRangeCreateTime, "createTime");
// 执行查询 // 执行查询
if (
params.dateRangeCreateTime != null &&
params.dateRangeCreateTime.length == 2
) {
params.beginCreateTime = params.dateRangeCreateTime[0];
params.endCreateTime = params.dateRangeCreateTime[1];
}
getPayableList(params).then((response) => { getPayableList(params).then((response) => {
this.list = response.data.list; this.list = response.data.list;
this.total = response.data.total; this.total = response.data.total;
......
...@@ -77,6 +77,7 @@ ...@@ -77,6 +77,7 @@
<el-button type="primary" @click="handleQuery">{{ <el-button type="primary" @click="handleQuery">{{
$t("查找") $t("查找")
}}</el-button> }}</el-button>
<!--
<el-button type="primary" @click="handleQuery2">{{ <el-button type="primary" @click="handleQuery2">{{
$t("批量反审核") $t("批量反审核")
}}</el-button> }}</el-button>
...@@ -85,7 +86,8 @@ ...@@ -85,7 +86,8 @@
}}</el-button> }}</el-button>
<el-button type="primary" @click="handleQuery3">{{ <el-button type="primary" @click="handleQuery3">{{
$t("批量核销") $t("批量核销")
}}</el-button> }}</el-button>-->
</el-form-item> </el-form-item>
</el-row> </el-row>
</el-form> </el-form>
......
<template> <template>
<div class="app-container"> <div class="app-container">
<el-form
<el-form ref="form" :model="form" :rules="rules" label-width="120px" inline :validate-on-rule-change="false"> ref="form"
:model="form"
:rules="rules"
label-width="120px"
inline
:validate-on-rule-change="false"
>
<el-card> <el-card>
<div slot="header" class="card-title">{{$route.path.indexOf('create') > -1 ? $t('新建报价单') : $t('编辑报价单')}}</div> <div slot="header" class="card-title">
{{
$route.path.indexOf("create") > -1
? $t("新建报价单")
: $t("编辑报价单")
}}
</div>
<el-form-item :label="$t('所属人')" prop="relation"> <el-form-item :label="$t('所属人')" prop="relation">
<!-- <el-radio-group v-model="form.relation" > --> <!-- <el-radio-group v-model="form.relation" > -->
<el-radio-group v-model="form.relation" id="relation"> <el-radio-group v-model="form.relation" id="relation">
<el-radio :label="1" >{{$t('发件人')}}</el-radio> <el-radio :label="1">{{ $t("发件人") }}</el-radio>
<el-radio :label="2" >{{$t('收件人')}}</el-radio> <el-radio :label="2">{{ $t("收件人") }}</el-radio>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
<br/> <br />
<el-form-item :label="$t('订单类型')" v-if="routeOtherServices.indexOf('1') > -1 || routeOtherServices.indexOf('4') > -1"> <el-form-item
:label="$t('订单类型')"
v-if="
routeOtherServices.indexOf('1') > -1 ||
routeOtherServices.indexOf('4') > -1
"
>
<el-checkbox-group v-model="form.type"> <el-checkbox-group v-model="form.type">
<el-checkbox label="1" v-if="routeOtherServices.indexOf('1') > -1">{{$t('集运服务')}}</el-checkbox> <el-checkbox
<el-checkbox label="2" v-if="routeOtherServices.indexOf('4') > -1">{{$t('海外仓')}}</el-checkbox> label="1"
v-if="routeOtherServices.indexOf('1') > -1"
>{{ $t("集运服务") }}</el-checkbox
>
<el-checkbox
label="2"
v-if="routeOtherServices.indexOf('4') > -1"
>{{ $t("海外仓") }}</el-checkbox
>
</el-checkbox-group> </el-checkbox-group>
</el-form-item> </el-form-item>
<div class="form-section"> <div class="form-section">
<el-form-item :label="$t('发货人')" prop="consignorId"> <el-form-item :label="$t('发货人')" prop="consignorId">
<div class="contact"> <div class="contact">
<el-input v-model="form.consignorName" id="defaultContactName" :placeholder="$t('选择或新建')" disabled style="width:120px"/> <el-input
v-model="form.consignorName"
id="defaultContactName"
<img src="@/assets/svg/contacts.svg" class="phonebook" @click="contactChooseType='consignor'" /> :placeholder="$t('选择或新建')"
<img src="@/assets/svg/contact_create.svg" class="phonebook" @click="quickCreateType='0'" /> disabled
style="width: 120px"
/>
<img
src="@/assets/svg/contacts.svg"
class="phonebook"
@click="contactChooseType = 'consignor'"
/>
<img
src="@/assets/svg/contact_create.svg"
class="phonebook"
@click="quickCreateType = '0'"
/>
</div> </div>
</el-form-item> </el-form-item>
<el-form-item :label="$t('发货人电话')" prop="consignorPhone"> <el-form-item :label="$t('发货人电话')" prop="consignorPhone">
<!-- <area-code-selector v-model="form.consignorCountryCode" class="w-200 mr-10" disabled /> --> <!-- <area-code-selector v-model="form.consignorCountryCode" class="w-200 mr-10" disabled /> -->
<el-input id="defaultContactPhone" :value="`${form.consignorCountryCode ? '+' + form.consignorCountryCode : ''} ${form.consignorPhone || ''}`" class="w-200" disabled/> <el-input
id="defaultContactPhone"
:value="`${
form.consignorCountryCode ? '+' + form.consignorCountryCode : ''
} ${form.consignorPhone || ''}`"
class="w-200"
disabled
/>
<!-- <el-input v-if="$route.query.type==1 && form.relation==1" v-model="$route.query.customer.defaultContactPhone" class="w-200" disabled/> <!-- <el-input v-if="$route.query.type==1 && form.relation==1" v-model="$route.query.customer.defaultContactPhone" class="w-200" disabled/>
<el-input v-else :value="`${form.consignorCountryCode ? '+' + form.consignorCountryCode : ''} ${form.consignorPhone || ''}`" class="w-200" disabled/> --> <el-input v-else :value="`${form.consignorCountryCode ? '+' + form.consignorCountryCode : ''} ${form.consignorPhone || ''}`" class="w-200" disabled/> -->
</el-form-item> </el-form-item>
<el-form-item :label="$t('发货人公司')" prop="consignorCompany"> <el-form-item :label="$t('发货人公司')" prop="consignorCompany">
<!-- 修改从客户列表按钮进来的 --> <!-- 修改从客户列表按钮进来的 -->
<el-input v-model="form.consignorCompany" id="company" disabled class="w-200"/> <el-input
v-model="form.consignorCompany"
id="company"
disabled
class="w-200"
/>
<!-- <el-input v-if="$route.query.type==1 && form.relation==1" v-model="$route.query.customer.company" disabled class="w-200"/> <!-- <el-input v-if="$route.query.type==1 && form.relation==1" v-model="$route.query.customer.company" disabled class="w-200"/>
<el-input v-else v-model="form.consignorCompany" disabled class="w-200"/> --> <el-input v-else v-model="form.consignorCompany" disabled class="w-200"/> -->
</el-form-item> </el-form-item>
<el-form-item label="Email" prop="consignorEmail"> <el-form-item label="Email" prop="consignorEmail">
<el-input v-model="form.consignorEmail" id="defaultEmail" disabled class="w-200"/> <el-input
v-model="form.consignorEmail"
id="defaultEmail"
disabled
class="w-200"
/>
<!-- <el-input v-if="$route.query.type==1 && form.relation==1" v-model="$route.query.customer.defaultEmail" disabled class="w-200"/> <!-- <el-input v-if="$route.query.type==1 && form.relation==1" v-model="$route.query.customer.defaultEmail" disabled class="w-200"/>
<el-input v-else v-model="form.consigneeEmail" disabled class="w-200"/> --> <el-input v-else v-model="form.consigneeEmail" disabled class="w-200"/> -->
</el-form-item> </el-form-item>
...@@ -56,24 +109,54 @@ ...@@ -56,24 +109,54 @@
<el-form-item :label="$t('收货人')" prop="consigneeId"> <el-form-item :label="$t('收货人')" prop="consigneeId">
<div class="contact"> <div class="contact">
<!-- <el-input v-model="form.consigneeName" :placeholder="$t('请选择或新建')" :disabled="true" style="width:120px"/> --> <!-- <el-input v-model="form.consigneeName" :placeholder="$t('请选择或新建')" :disabled="true" style="width:120px"/> -->
<el-input v-model="form.consigneeName" id="defaultContactName2" :placeholder="$t('请选择或新建')" :disabled="true" style="width:120px"/> <el-input
v-model="form.consigneeName"
<img src="@/assets/svg/contacts.svg" class="phonebook" @click="contactChooseType='consignee'" /> id="defaultContactName2"
<img src="@/assets/svg/contact_create.svg" class="phonebook" @click="quickCreateType='1'" /> :placeholder="$t('请选择或新建')"
:disabled="true"
style="width: 120px"
/>
<img
src="@/assets/svg/contacts.svg"
class="phonebook"
@click="contactChooseType = 'consignee'"
/>
<img
src="@/assets/svg/contact_create.svg"
class="phonebook"
@click="quickCreateType = '1'"
/>
</div> </div>
</el-form-item> </el-form-item>
<el-form-item :label="$t('收货人电话')" prop="consigneePhone"> <el-form-item :label="$t('收货人电话')" prop="consigneePhone">
<!-- <area-code-selector v-model="form.consigneeCountryCode" class="w-200 mr-10" disabled/> --> <!-- <area-code-selector v-model="form.consigneeCountryCode" class="w-200 mr-10" disabled/> -->
<el-input id="defaultContactPhone2" :value="`${form.consigneeCountryCode ? '+' + form.consigneeCountryCode : ''} ${form.consigneePhone || ''}`" disabled class="w-200"/> <el-input
id="defaultContactPhone2"
:value="`${
form.consigneeCountryCode ? '+' + form.consigneeCountryCode : ''
} ${form.consigneePhone || ''}`"
disabled
class="w-200"
/>
</el-form-item> </el-form-item>
<el-form-item :label="$t('收货人公司')" prop="consigneeCompany"> <el-form-item :label="$t('收货人公司')" prop="consigneeCompany">
<el-input id="company2" v-model="form.consigneeCompany" :disabled="true" class="w-200"/> <el-input
id="company2"
v-model="form.consigneeCompany"
:disabled="true"
class="w-200"
/>
<!-- <el-input v-if="$route.query.type==1 && form.relation==2" v-model="$route.query.customer.company" disabled class="w-200"/> <!-- <el-input v-if="$route.query.type==1 && form.relation==2" v-model="$route.query.customer.company" disabled class="w-200"/>
<el-input v-else v-model="form.consignorCompany" disabled class="w-200"/> --> <el-input v-else v-model="form.consignorCompany" disabled class="w-200"/> -->
</el-form-item> </el-form-item>
<el-form-item label="Email" prop="consigneeEmail"> <el-form-item label="Email" prop="consigneeEmail">
<el-input id="defaultEmail2" v-model="form.consigneeEmail" :disabled="true" class="w-200"/> <el-input
id="defaultEmail2"
v-model="form.consigneeEmail"
:disabled="true"
class="w-200"
/>
<!-- <el-input v-if="$route.query.type==1 && form.relation==2" v-model="$route.query.customer.defaultEmail" disabled class="w-200"/> <!-- <el-input v-if="$route.query.type==1 && form.relation==2" v-model="$route.query.customer.defaultEmail" disabled class="w-200"/>
<el-input v-else v-model="form.consigneeEmail" disabled class="w-200"/> --> <el-input v-else v-model="form.consigneeEmail" disabled class="w-200"/> -->
</el-form-item> </el-form-item>
...@@ -115,11 +198,25 @@ ...@@ -115,11 +198,25 @@
<div class="form-section"> <div class="form-section">
<el-form-item :label="$t('运输方式')" prop="transportId"> <el-form-item :label="$t('运输方式')" prop="transportId">
<dict-selector :type="DICT_TYPE.ECW_TRANSPORT_TYPE" v-model="form.transportId" class="w-200"/> <dict-selector
:type="DICT_TYPE.ECW_TRANSPORT_TYPE"
v-model="form.transportId"
class="w-200"
/>
</el-form-item> </el-form-item>
<el-form-item :label="$t('出货渠道')" v-if="getDictData(DICT_TYPE.ECW_TRANSPORT_TYPE, form.transportId).cssClass == 'channel'" prop="channelId"> <el-form-item
:label="$t('出货渠道')"
v-if="
getDictData(DICT_TYPE.ECW_TRANSPORT_TYPE, form.transportId)
.cssClass == 'channel'
"
prop="channelId"
>
<selector <selector
:disabled="getDictData(DICT_TYPE.ECW_TRANSPORT_TYPE, form.transportId).cssClass != 'channel'" :disabled="
getDictData(DICT_TYPE.ECW_TRANSPORT_TYPE, form.transportId)
.cssClass != 'channel'
"
v-model="form.channelId" v-model="form.channelId"
:options="channelList" :options="channelList"
value-field="channelId" value-field="channelId"
...@@ -131,273 +228,448 @@ ...@@ -131,273 +228,448 @@
<div class="form-section"> <div class="form-section">
<el-form-item :label="$t('始发城市')" prop="departureId"> <el-form-item :label="$t('始发城市')" prop="departureId">
<el-select v-model="form.departureId" :placeholder="$t('请选择始发地')" class="w-200"> <el-select
<el-option v-for="item in exportCityList" :label="$l(item, 'title')" :value="item.id" :key="item.id"></el-option> v-model="form.departureId"
:placeholder="$t('请选择始发地')"
class="w-200"
>
<el-option
v-for="item in exportCityList"
:label="$l(item, 'title')"
:value="item.id"
:key="item.id"
></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item :label="$t('目的城市')" prop="objectiveId"> <el-form-item :label="$t('目的城市')" prop="objectiveId">
<el-select v-model="form.objectiveId" :placeholder="$t('请选择目的地')" class="w-200"> <el-select
<el-option v-for="item in importCityList" :label="$l(item, 'title')" :value="item.id" :key="item.id"></el-option> v-model="form.objectiveId"
:placeholder="$t('请选择目的地')"
class="w-200"
>
<el-option
v-for="item in importCityList"
:label="$l(item, 'title')"
:value="item.id"
:key="item.id"
></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
</div> </div>
<div class="form-section"> <div class="form-section">
<el-form-item :label="$t('选择线路')" prop="lineId"> <el-form-item :label="$t('选择线路')" prop="lineId">
<!-- <el-input :value="getRouterNameById(form.lineId)" readonly :placeholder="$t('请在右侧选择线路')"></el-input> --> <!-- <el-input :value="getRouterNameById(form.lineId)" readonly :placeholder="$t('请在右侧选择线路')"></el-input> -->
<el-input :value="selectedRouter ? $l(selectedRouter, 'startTitle') + ' > ' + $l(selectedRouter, 'destTitle') : ''" disabled :placeholder="$t('请在右侧选择线路')" class="w-200"></el-input> <el-input
:value="
selectedRouter
? $l(selectedRouter, 'startTitle') +
' > ' +
$l(selectedRouter, 'destTitle')
: ''
"
disabled
:placeholder="$t('请在右侧选择线路')"
class="w-200"
></el-input>
</el-form-item> </el-form-item>
<select size="5" v-model="form.lineId" style="min-width: 300px; border:1px solid #DCDFE6; border-radius:4px"> <select
size="5"
v-model="form.lineId"
style="
min-width: 300px;
border: 1px solid #dcdfe6;
border-radius: 4px;
"
>
<template v-for="item in routerList"> <template v-for="item in routerList">
<option :value="item.id" :key="item.id">{{$l(item, 'startTitle')}} >> {{$l(item, 'destTitle')}}</option> <option :value="item.id" :key="item.id">
{{ $l(item, "startTitle") }} >> {{ $l(item, "destTitle") }}
</option>
</template> </template>
</select> </select>
</div> </div>
</el-card> </el-card>
<el-card class="mt-10"> <el-card class="mt-10">
<div slot="header" class="card-title"> <div slot="header" class="card-title">
<div class="card-name">{{$t('商品信息')}}</div> <div class="card-name">{{ $t("商品信息") }}</div>
<el-button type="primary" size="mini" icon="el-icon-plus" @click="addProduct()" :disabled="!canAddProduct"></el-button> <el-button
type="primary"
size="mini"
icon="el-icon-plus"
@click="addProduct()"
:disabled="!canAddProduct"
></el-button>
</div> </div>
<el-table :data="form.prodCreateReqVOList" border class="product-list"> <el-table :data="form.prodCreateReqVOList" border class="product-list">
<el-table-column :label="$t('序号')" width="60px" fixed> <el-table-column :label="$t('序号')" width="60px" fixed>
<template slot-scope="scope"> <template slot-scope="scope">
{{scope.$index + 1}} {{ scope.$index + 1 }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column :label="$t('中文品名')" width="160px"> <el-table-column :label="$t('中文品名')" width="160px">
<template slot="header" slot-scope="scope"> <template slot="header" slot-scope="scope">
{{$t('中文品名')}} <span class="red">*</span> {{ $t("中文品名") }} <span class="red">*</span>
</template> </template>
<template slot-scope="scope"> <template slot-scope="scope">
<el-form-item label="" <el-form-item
label=""
:prop="`prodCreateReqVOList.${scope.$index}.prodId`" :prop="`prodCreateReqVOList.${scope.$index}.prodId`"
:rules="{ :rules="{
required: true, message: $t('请选择产品'), trigger: 'blur' required: true,
message: $t('请选择产品'),
trigger: 'blur',
}" }"
class="mb-0 mr-0" class="mb-0 mr-0"
> >
<product-selector v-model="scope.row.prodId" @change="onProductChange(scope.row, $event)" :disabled="!canAddProduct" /> <product-selector
v-model="scope.row.prodId"
@change="onProductChange(scope.row, $event)"
:disabled="!canAddProduct"
/>
</el-form-item> </el-form-item>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column :label="$t('英文品名')" width="160px"> <el-table-column :label="$t('英文品名')" width="160px">
<template slot="header" slot-scope="scope"> <template slot="header" slot-scope="scope">
{{$t('英文品名')}} <span class="red">*</span> {{ $t("英文品名") }} <span class="red">*</span>
</template> </template>
<template slot-scope="{row}"> <template slot-scope="{ row }">
<product-selector lang="En" v-model="row.prodId" @change="onProductChange(row, $event)" :disabled="!canAddProduct" /> <product-selector
lang="En"
v-model="row.prodId"
@change="onProductChange(row, $event)"
:disabled="!canAddProduct"
/>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column width="100px"> <el-table-column width="100px">
<template slot="header" slot-scope="scope"> <template slot="header" slot-scope="scope">
{{$t('品牌')}} <span class="red">*</span> {{ $t("品牌") }} <span class="red">*</span>
</template> </template>
<template slot-scope="scope"> <template slot-scope="scope">
<el-form-item label="" <el-form-item
label=""
:prop="`prodCreateReqVOList.${scope.$index}.brand`" :prop="`prodCreateReqVOList.${scope.$index}.brand`"
:rules="{ :rules="{
required: true, message: $t('请选择品牌'), trigger: 'blur' required: true,
message: $t('请选择品牌'),
trigger: 'blur',
}" }"
class="mb-0 mr-0" class="mb-0 mr-0"
> >
<dict-selector v-model="scope.row.brand" :type="DICT_TYPE.ECW_IS_BRAND" defaultable @input="calculationPrice" :disabled="!canAddProduct" /> <dict-selector
v-model="scope.row.brand"
:type="DICT_TYPE.ECW_IS_BRAND"
defaultable
@input="calculationPrice"
:disabled="!canAddProduct"
/>
</el-form-item> </el-form-item>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column :label="$t('件数')" width="90px"> <el-table-column :label="$t('件数')" width="90px">
<template slot="header" slot-scope="scope"> <template slot="header" slot-scope="scope">
{{$t('件数')}} <span class="red">*</span> {{ $t("件数") }} <span class="red">*</span>
</template> </template>
<template slot-scope="{row}"> <template slot-scope="{ row }">
<el-input v-model.number="row.num" @input="calculationPrice" :disabled="!canAddProduct" /> <el-input
v-model.number="row.num"
@input="calculationPrice"
:disabled="!canAddProduct"
/>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column :label="$t('包装单位')" width="100px"> <el-table-column :label="$t('包装单位')" width="100px">
<template slot="header" slot-scope="scope"> <template slot="header" slot-scope="scope">
{{$t('包装单位')}} <span class="red">*</span> {{ $t("包装单位") }} <span class="red">*</span>
</template> </template>
<template slot-scope="{row}"> <template slot-scope="{ row }">
<dict-selector v-model="row.unit" :type="DICT_TYPE.ECW_PACKAGING_TYPE" defaultable @input="calculationPrice" :disabled="!canAddProduct" /> <dict-selector
v-model="row.unit"
:type="DICT_TYPE.ECW_PACKAGING_TYPE"
defaultable
@input="calculationPrice"
:disabled="!canAddProduct"
/>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column :label="$t('数量') + '(个)'"> <el-table-column :label="$t('数量') + '(个)'">
<template slot-scope="{row}"> <template slot-scope="{ row }">
<el-input v-model="row.quantity" @input="calculationPrice" :disabled="!canAddProduct" /> <el-input
v-model="row.quantity"
@input="calculationPrice"
:disabled="!canAddProduct"
/>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column :label="$t('总体积') + '(m³)'" width="100px"> <el-table-column :label="$t('总体积') + '(m³)'" width="100px">
<template slot-scope="{row}"> <template slot-scope="{ row }">
<el-input v-model="row.volume" @input="calculationPrice" :disabled="!canAddProduct"/> <el-input
v-model="row.volume"
@input="calculationPrice"
:disabled="!canAddProduct"
/>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column :label="$t('总重量') + '(kg)'" width="100px"> <el-table-column :label="$t('总重量') + '(kg)'" width="100px">
<template slot-scope="{row}"> <template slot-scope="{ row }">
<el-input v-model="row.weight" @input="calculationPrice" :disabled="!canAddProduct" /> <el-input
v-model="row.weight"
@input="calculationPrice"
:disabled="!canAddProduct"
/>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column :label="$t('总货值') + '(RMB)'" width="120px"> <el-table-column :label="$t('总货值') + '(RMB)'" width="120px">
<template slot="header" slot-scope="scope"> <template slot="header" slot-scope="scope">
{{$t('总货值')}}(RMB) <span class="red">*</span> {{ $t("总货值") }}(RMB) <span class="red">*</span>
</template> </template>
<template slot-scope="scope"> <template slot-scope="scope">
<el-form-item label="" <el-form-item
label=""
:prop2="`prodCreateReqVOList.${scope.$index}.worth`" :prop2="`prodCreateReqVOList.${scope.$index}.worth`"
:rules2="{ :rules2="{
// required: true, message: $t('货值不能为空'), trigger: 'blur' // required: true, message: $t('货值不能为空'), trigger: 'blur'
}" }"
class="mb-0 mr-0" class="mb-0 mr-0"
> >
<el-input v-model="scope.row.worth" @input="calculationPrice" :disabled="!canAddProduct" /> <el-input
v-model="scope.row.worth"
@input="calculationPrice"
:disabled="!canAddProduct"
/>
</el-form-item> </el-form-item>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column :label="$t('商品特性')" width="250px"> <el-table-column :label="$t('商品特性')" width="250px">
<template slot-scope="{row}"> <template slot-scope="{ row }">
<el-checkbox-group v-model="row.prodAttrArr" @change="onProductAttrChange(row, $event)" :disabled="!canAddProduct"> <el-checkbox-group
<el-checkbox v-for="item in productAttrList" :label="item.id" :key="item.id">{{$l(item, 'attrName')}}</el-checkbox> v-model="row.prodAttrArr"
@change="onProductAttrChange(row, $event)"
:disabled="!canAddProduct"
>
<el-checkbox
v-for="item in productAttrList"
:label="item.id"
:key="item.id"
>{{ $l(item, "attrName") }}</el-checkbox
>
</el-checkbox-group> </el-checkbox-group>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column :label="$t('运费')" width="200px"> <el-table-column :label="$t('运费')" width="200px">
<template slot-scope="{row}"> <template slot-scope="{ row }">
<template v-if="row.fee && row.fee.charging == 1"> <template v-if="row.fee && row.fee.charging == 1">
<template v-if="!row.fee.oneFreight">{{$t('未报价')}}</template> <template v-if="!row.fee.oneFreight">{{
$t("未报价")
}}</template>
<template v-else> <template v-else>
{{$t('全包价')}}{{row.fee.oneFreight}} {{currencyMap[row.fee.freightCurrency]}} / {{unitMap[row.fee.freightVolume]}} {{ $t("全包价") }}{{ row.fee.oneFreight }}
{{ currencyMap[row.fee.freightCurrency] }} /
{{ unitMap[row.fee.freightVolume] }}
</template> </template>
</template> </template>
<template v-else-if="!row.fee || !row.fee.oneFreight && !row.fee.oneClearanceFee">{{$t('未报价')}}</template> <template
v-else-if="
!row.fee || (!row.fee.oneFreight && !row.fee.oneClearanceFee)
"
>{{ $t("未报价") }}</template
>
<template v-else-if="row.fee"> <template v-else-if="row.fee">
<div> <div>
{{$t('运费')}}{{row.fee.oneFreight}} {{currencyMap[row.fee.freightCurrency]}} / {{unitMap[row.fee.freightVolume]}} {{ $t("运费") }}{{ row.fee.oneFreight }}
{{ currencyMap[row.fee.freightCurrency] }} /
{{ unitMap[row.fee.freightVolume] }}
</div> </div>
<div> <div>
{{$t('清关费')}}{{row.fee.oneClearanceFee}} {{currencyMap[row.fee.clearanceFeeCurrency]}} / {{unitMap[row.fee.clearanceFeeVolume]}} {{ $t("清关费") }}{{ row.fee.oneClearanceFee }}
{{ currencyMap[row.fee.clearanceFeeCurrency] }} /
{{ unitMap[row.fee.clearanceFeeVolume] }}
</div> </div>
</template> </template>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column :label="$t('是否预付')"> <el-table-column :label="$t('是否预付')">
<template slot-scope="{row}"> <template slot-scope="{ row }">
<dict-tag v-if="row.fee" :type="DICT_TYPE.ECW_PAY_ADVANCE" :value="row.fee.isPayAdvance" /> <dict-tag
v-if="row.fee"
:type="DICT_TYPE.ECW_PAY_ADVANCE"
:value="row.fee.isPayAdvance"
/>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column :label="$t('商品链接')" width="200px" align="center"> <el-table-column :label="$t('商品链接')" width="200px" align="center">
<template slot-scope="{row}"> <template slot-scope="{ row }">
<el-link type="primary" :href="row.link" target="_blank" style="display:block">{{row.link}}</el-link> <el-link
<el-button type="primary" size="mini" @click="setLink(row)" :disabled="!canAddProduct"> type="primary"
{{row.link ? $t('编辑商品链接') : $t('添加商品链接')}} :href="row.link"
target="_blank"
style="display: block"
>{{ row.link }}</el-link
>
<el-button
type="primary"
size="mini"
@click="setLink(row)"
:disabled="!canAddProduct"
>
{{ row.link ? $t("编辑商品链接") : $t("添加商品链接") }}
</el-button> </el-button>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column :label="$t('快递单号')" width="100px"> <el-table-column :label="$t('快递单号')" width="100px">
<template slot-scope="{row}"> <template slot-scope="{ row }">
<el-input v-model="row.expressNo" placeholder="" :disabled="!canAddProduct" /> <el-input
v-model="row.expressNo"
placeholder=""
:disabled="!canAddProduct"
/>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column :label="$t('操作')" width="180px" fixed="right"> <el-table-column :label="$t('操作')" width="180px" fixed="right">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button size="mini" type="danger" @click="delProduct(scope.$index)">{{$t('删除')}}</el-button> <el-button
size="mini"
type="danger"
@click="delProduct(scope.$index)"
>{{ $t("删除") }}</el-button
>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<!-- <!--
</el-card> </el-card>
<el-card class="mt-10"> --> <el-card class="mt-10"> -->
<div class="card-title" style="padding:20px 0;">{{$t('合计')}}</div> <div class="card-title" style="padding: 20px 0">{{ $t("合计") }}</div>
<el-descriptions :column="4" border> <el-descriptions :column="4" border>
<el-descriptions-item :label="$t('总件数')"> <el-descriptions-item :label="$t('总件数')">
{{sum.totalNum.toFixed() || 0}} {{ sum.totalNum.toFixed() || 0 }}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item :label="$t('总体积')"> <el-descriptions-item :label="$t('总体积')">
{{sum.totalVolume.toFixed() || 0}}m³ {{ sum.totalVolume.toFixed() || 0 }}m³
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item :label="$t('总重量')"> <el-descriptions-item :label="$t('总重量')">
{{sum.totalWeight.toFixed() || 0}}kg {{ sum.totalWeight.toFixed() || 0 }}kg
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item :label="$t('总数量')"> <el-descriptions-item :label="$t('总数量')">
{{sum.totalQuatity.toFixed() || 0}} {{ sum.totalQuatity.toFixed() || 0 }}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item :label="$t('总货值') + '(RMB)'"> <el-descriptions-item :label="$t('总货值') + '(RMB)'">
{{sum.totalWorth.toFixed() || 0}}{{$t('元')}} {{ sum.totalWorth.toFixed() || 0 }}{{ $t("元") }}
</el-descriptions-item> </el-descriptions-item>
</el-descriptions> </el-descriptions>
</el-card> </el-card>
<el-card class="mt-10"> <el-card class="mt-10">
<div class="card-title" slot="header">{{$t('预计费用')}}</div> <div class="card-title" slot="header">{{ $t("预计费用") }}</div>
<el-descriptions :column="5" border> <el-descriptions :column="5" border>
<el-descriptions-item :label="$t('保价费')"> <el-descriptions-item :label="$t('保价费')">
{{fee.insuranceFee || 0}} {{ selectedRouter ? currencyMap[selectedRouter.currencyUnit || 1] : '' }} {{ fee.insuranceFee || 0 }}
{{
selectedRouter
? currencyMap[selectedRouter.currencyUnit || 1]
: ""
}}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item :label="$t('总运费')"> <el-descriptions-item :label="$t('总运费')">
<template v-for="item in freightFeeList"> <template v-for="item in freightFeeList">
<div :key="item.currencyId">{{item.amount || 0}}{{currencyMap[item.currencyId]}}</div> <div :key="item.currencyId">
{{ item.amount || 0 }}{{ currencyMap[item.currencyId] }}
</div>
</template> </template>
</el-descriptions-item> </el-descriptions-item>
<!--代收货款,只有非控货订单、并且线路开通了代收货款后,才显示是否代收货款选项--> <!--代收货款,只有非控货订单、并且线路开通了代收货款后,才显示是否代收货款选项-->
<el-descriptions-item :label="$t('总清关费')"> <el-descriptions-item :label="$t('总清关费')">
<template v-for="item in clearanceFeeList"> <template v-for="item in clearanceFeeList">
<div :key="item.currencyId">{{item.amount || 0}}{{currencyMap[item.currencyId]}}</div> <div :key="item.currencyId">
{{ item.amount || 0 }}{{ currencyMap[item.currencyId] }}
</div>
</template> </template>
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item :label="$t('其他费用')"> <el-descriptions-item :label="$t('其他费用')">
<el-input v-model="form.otherFee" placeholder="" class="w-100 mr-10"></el-input> <el-input
<selector v-model="form.otherFeeCurrencyId" :options="currencyList" :label-field="$l('title')" value-field="id" defaultable class="w-100" /> v-model="form.otherFee"
placeholder=""
class="w-100 mr-10"
></el-input>
<selector
v-model="form.otherFeeCurrencyId"
:options="currencyList"
:label-field="$l('title')"
value-field="id"
defaultable
class="w-100"
/>
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item :label="$t('原价')" :span="2"> <el-descriptions-item :label="$t('原价')" :span="2">
<template v-for="item in originalFeeList"> <template v-for="item in originalFeeList">
<div :key="item.currencyId">{{item.amount || 0}}{{currencyMap[item.currencyId]}}</div> <div :key="item.currencyId">
{{ item.amount || 0 }}{{ currencyMap[item.currencyId] }}
</div>
</template> </template>
</el-descriptions-item> </el-descriptions-item>
</el-descriptions> </el-descriptions>
<div class="card-title" style="padding: 20px 0">
<div class="card-title" style="padding:20px 0;">{{$t('优惠信息')}}</div> {{ $t("优惠信息") }}
<el-table :data="couponList" :show-header="false" :empty-text="$t('暂无优惠')"> </div>
<el-table
:data="couponList"
:show-header="false"
:empty-text="$t('暂无优惠')"
>
<el-table-column label=""> <el-table-column label="">
<template slot-scope="scope"> <template slot-scope="scope">
{{scope.$index+1}}. {{ scope.$index + 1 }}.
{{$l(productNames[scope.row.prodId], 'title') || $t('未知')}} {{ $l(productNames[scope.row.prodId], "title") || $t("未知") }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label=""> <el-table-column label="">
<template slot-scope="{row}"> <template slot-scope="{ row }">
<dict-tag :type="DICT_TYPE.ECW_COUPON_TYPE" :value="row.type" /> <dict-tag :type="DICT_TYPE.ECW_COUPON_TYPE" :value="row.type" />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label=""> <el-table-column label="">
<template slot-scope="{row}"> <template slot-scope="{ row }">
{{$l(row, 'title')}} {{ $l(row, "title") }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label=""> <el-table-column label="">
<template slot-scope="{row}"> <template slot-scope="{ row }">
-{{row.reduceAmount}} -{{ row.reduceAmount }}
{{currencyMap[row.reduceCurrencyId]}} {{ currencyMap[row.reduceCurrencyId] }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label=""> <el-table-column label="">
<template slot-scope="{row}"> <template slot-scope="{ row }">
{{$t('有效期至')}}{{row.endTime ? row.endTime : $t('永久有效')}} {{ $t("有效期至") }}{{
row.endTime ? row.endTime : $t("永久有效")
}}
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<el-descriptions :column="1" class="mt-20"> <el-descriptions :column="1" class="mt-20">
<el-descriptions-item :label="$t('优惠费用')" v-if="couponTotalAmountList && couponTotalAmountList.length"> <el-descriptions-item
<div v-for="(item, discountIndex) in couponTotalAmountList" :key="discountIndex"> :label="$t('优惠费用')"
{{item.totalAmount}} {{currencyMap[item.currencyId]}} v-if="couponTotalAmountList && couponTotalAmountList.length"
>
<div
v-for="(item, discountIndex) in couponTotalAmountList"
:key="discountIndex"
>
{{ item.totalAmount }} {{ currencyMap[item.currencyId] }}
</div> </div>
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item :label="$t('预计费用')" :span="1"> <el-descriptions-item :label="$t('预计费用')" :span="1">
<div> <div>
<template v-for="item in estimatedCosts"> <template v-for="item in estimatedCosts">
<div :key="item.currencyId">{{item.amount || 0}}{{currencyMap[item.currencyId]}}</div> <div :key="item.currencyId">
{{ item.amount || 0 }}{{ currencyMap[item.currencyId] }}
</div>
</template> </template>
</div> </div>
</el-descriptions-item> </el-descriptions-item>
...@@ -405,29 +677,52 @@ ...@@ -405,29 +677,52 @@
</el-card> </el-card>
<el-card class="mt-10"> <el-card class="mt-10">
<div class="card-title" slot="header">{{$t('通用')}}</div> <div class="card-title" slot="header">{{ $t("通用") }}</div>
<div class="form-section"> <div class="form-section">
<el-form-item :label="$t('唛头')" prop="marks"> <el-form-item :label="$t('唛头')" prop="marks">
<el-input v-model="form.marks" placeholder="" class="w-200"></el-input> <el-input
v-model="form.marks"
placeholder=""
class="w-200"
></el-input>
</el-form-item> </el-form-item>
</div> </div>
<div class="form-section"> <div class="form-section">
<el-form-item :label="$t('报关方式')" prop="customsType"> <el-form-item :label="$t('报关方式')" prop="customsType">
<dict-selector :type="DICT_TYPE.ECW_CUSTOMS_TYPE" v-model="form.customsType" form-type="radio" defaultable /> <dict-selector
:type="DICT_TYPE.ECW_CUSTOMS_TYPE"
v-model="form.customsType"
form-type="radio"
defaultable
/>
</el-form-item> </el-form-item>
</div> </div>
<div class="form-section"> <div class="form-section">
<el-form-item :label="$t('预计结束时间')" prop="stopTime"> <el-form-item :label="$t('预计结束时间')" prop="stopTime">
<!-- <el-date-picker v-model="form.stopTime" value-format="yyyy-MM-dd HH:mm:ss" class="w-200"></el-date-picker> --> <!-- <el-date-picker v-model="form.stopTime" value-format="yyyy-MM-dd HH:mm:ss" class="w-200"></el-date-picker> -->
<el-date-picker v-model="form.stopTime" value-format="yyyy-MM-dd" class="w-200" :picker-options="stopDate" ></el-date-picker> <el-date-picker
v-model="form.stopTime"
value-format="yyyy-MM-dd"
class="w-200"
:picker-options="stopDate"
></el-date-picker>
</el-form-item> </el-form-item>
<el-form-item :label="$t('是否控货')" prop="control"> <el-form-item :label="$t('是否控货')" prop="control">
<dict-selector :type="DICT_TYPE.INFRA_BOOLEAN_STRING" formatter="bool" v-model="form.control" form-type="radio" /> <dict-selector
:type="DICT_TYPE.INFRA_BOOLEAN_STRING"
formatter="bool"
v-model="form.control"
form-type="radio"
/>
</el-form-item> </el-form-item>
</div> </div>
<div class="form-section"> <div class="form-section">
<el-form-item :label="$t('竞争对手')" prop="competitor"> <el-form-item :label="$t('竞争对手')" prop="competitor">
<el-input v-model="form.competitor" placeholder="" class="w-200"></el-input> <el-input
v-model="form.competitor"
placeholder=""
class="w-200"
></el-input>
</el-form-item> </el-form-item>
<el-form-item :label="$t('重要程度')" prop="importance"> <el-form-item :label="$t('重要程度')" prop="importance">
<el-rate v-model="form.importance"></el-rate> <el-rate v-model="form.importance"></el-rate>
...@@ -436,11 +731,23 @@ ...@@ -436,11 +731,23 @@
<div class="form-section"> <div class="form-section">
<el-form-item :label="$t('价格有效时间')" prop="startTime"> <el-form-item :label="$t('价格有效时间')" prop="startTime">
<!-- <el-date-picker v-model="form.startTime" placeholder="" value-format="yyyy-MM-dd HH:mm:ss" class="w-200"></el-date-picker> --> <!-- <el-date-picker v-model="form.startTime" placeholder="" value-format="yyyy-MM-dd HH:mm:ss" class="w-200"></el-date-picker> -->
<el-date-picker v-model="form.startTime" placeholder="" value-format="yyyy-MM-dd" class="w-200" :picker-options="startDate"></el-date-picker> <el-date-picker
v-model="form.startTime"
placeholder=""
value-format="yyyy-MM-dd"
class="w-200"
:picker-options="startDate"
></el-date-picker>
</el-form-item> </el-form-item>
<el-form-item label="" prop="endTime"> <el-form-item label="" prop="endTime">
<!-- <el-date-picker v-model="form.endTime" placeholder="" value-format="yyyy-MM-dd HH:mm:ss" class="w-200"></el-date-picker> --> <!-- <el-date-picker v-model="form.endTime" placeholder="" value-format="yyyy-MM-dd HH:mm:ss" class="w-200"></el-date-picker> -->
<el-date-picker v-model="form.endTime" placeholder="" value-format="yyyy-MM-dd" class="w-200" :picker-options="endDate"></el-date-picker> <el-date-picker
v-model="form.endTime"
placeholder=""
value-format="yyyy-MM-dd"
class="w-200"
:picker-options="endDate"
></el-date-picker>
</el-form-item> </el-form-item>
</div> </div>
...@@ -450,145 +757,236 @@ ...@@ -450,145 +757,236 @@
接口要求数据为整数,所以增加trade_type类型的字典,用1234代码以下不同类型 接口要求数据为整数,所以增加trade_type类型的字典,用1234代码以下不同类型
FOB(离岸价),CIF(到岸价),CNF(成本加运费),EXW(出厂价) FOB(离岸价),CIF(到岸价),CNF(成本加运费),EXW(出厂价)
--> -->
<dict-selector :type="DICT_TYPE.ECW_TRADE_TYPE" fomtter="number" v-model="form.tradeType" class="w-200"/> <dict-selector
:type="DICT_TYPE.ECW_TRADE_TYPE"
fomtter="number"
v-model="form.tradeType"
class="w-200"
/>
</el-form-item> </el-form-item>
<el-form-item :label="$t('交货地址')"> <el-form-item :label="$t('交货地址')">
<el-input v-model="form.tradeAdress" :placeholder="$t('港口或地点')"></el-input> <el-input
v-model="form.tradeAdress"
:placeholder="$t('港口或地点')"
></el-input>
</el-form-item> </el-form-item>
</div> </div>
<div class="form-section"> <div class="form-section">
<el-form-item :label="$t('备注')" :span="2"> <el-form-item :label="$t('备注')" :span="2">
<el-input v-model="form.remarks" type="textarea" placeholder="" style="width:500px; height: 100px"></el-input> <el-input
v-model="form.remarks"
type="textarea"
placeholder=""
style="width: 500px; height: 100px"
></el-input>
</el-form-item> </el-form-item>
</div> </div>
</el-card> </el-card>
<el-card class="mt-10" v-if="transport"> <el-card class="mt-10" v-if="transport">
<div class="card-title" slot="header">{{$l(transport, 'label')}}</div> <div class="card-title" slot="header">{{ $l(transport, "label") }}</div>
<!-- <el-form-item :label="$t('快递单号')"> <!-- <el-form-item :label="$t('快递单号')">
<el-input v-model="form.number" :placeholder="$t('请输入购买商品的快递单号')"></el-input> <el-input v-model="form.number" :placeholder="$t('请输入购买商品的快递单号')"></el-input>
</el-form-item> --> </el-form-item> -->
<el-form-item :label="$t('是否双清')" v-if="[2,3,4].indexOf(+form.transportId) > -1"> <el-form-item
<dict-selector v-model="form.transportVO.doubleClear" form-type="radio" :type="DICT_TYPE.ECW_DOUBLE_CLEAR" /> :label="$t('是否双清')"
v-if="[2, 3, 4].indexOf(+form.transportId) > -1"
>
<dict-selector
v-model="form.transportVO.doubleClear"
form-type="radio"
:type="DICT_TYPE.ECW_DOUBLE_CLEAR"
/>
</el-form-item> </el-form-item>
<el-form-item :label="$t('航空公司')" v-if="[3,4].indexOf(+form.transportId) > -1"> <el-form-item
:label="$t('航空公司')"
v-if="[3, 4].indexOf(+form.transportId) > -1"
>
<!--待查询备选数据--> <!--待查询备选数据-->
<!-- <el-select placeholder="" v-model="form.airlineCompany"> <!-- <el-select placeholder="" v-model="form.airlineCompany">
</el-select> --> </el-select> -->
<supplier-selector v-model="form.transportVO.airlineCompany" companyType="10" /> <supplier-selector
v-model="form.transportVO.airlineCompany"
companyType="10"
/>
</el-form-item> </el-form-item>
<el-form-item :label="$t('船公司')" v-if="[2].indexOf(+form.transportId) > -1"> <el-form-item
:label="$t('船公司')"
v-if="[2].indexOf(+form.transportId) > -1"
>
<!-- <el-select placeholder="" v-model="form.shippingCompany"> <!-- <el-select placeholder="" v-model="form.shippingCompany">
</el-select> --> </el-select> -->
<supplier-selector v-model="form.transportVO.shippingCompany" companyType="9" /> <supplier-selector
v-model="form.transportVO.shippingCompany"
companyType="9"
/>
</el-form-item> </el-form-item>
<el-form-item :label="$t('清关证书')" v-if="[2,3,4].indexOf(+form.transportId) > -1"> <el-form-item
<dict-selector v-model="form.transportVO.customsClearCert" form-type="radio" :type="DICT_TYPE.INFRA_BOOLEAN_STRING" formatter="bool" /> :label="$t('清关证书')"
v-if="[2, 3, 4].indexOf(+form.transportId) > -1"
>
<dict-selector
v-model="form.transportVO.customsClearCert"
form-type="radio"
:type="DICT_TYPE.INFRA_BOOLEAN_STRING"
formatter="bool"
/>
</el-form-item> </el-form-item>
<el-form-item :label="$t('清关证书备注')" v-if="[2,3,4].indexOf(+form.transportId) > -1"> <el-form-item
<el-input v-model="form.transportVO.remarks" ></el-input> :label="$t('清关证书备注')"
v-if="[2, 3, 4].indexOf(+form.transportId) > -1"
>
<el-input v-model="form.transportVO.remarks"></el-input>
</el-form-item> </el-form-item>
<el-form-item :label="$t('是否拆包')" v-if="[3,4].indexOf(+form.transportId) > -1"> <el-form-item
<dict-selector v-model="form.transportVO.isUnpack" form-type="radio" :type="DICT_TYPE.INFRA_BOOLEAN_STRING" formatter="bool" /> :label="$t('是否拆包')"
v-if="[3, 4].indexOf(+form.transportId) > -1"
>
<dict-selector
v-model="form.transportVO.isUnpack"
form-type="radio"
:type="DICT_TYPE.INFRA_BOOLEAN_STRING"
formatter="bool"
/>
</el-form-item> </el-form-item>
<el-form-item :label="$t('单票立刻转运')" v-if="[3,4].indexOf(+form.transportId) > -1"> <el-form-item
<dict-selector v-model="form.transportVO.isSingleTicketTransport" form-type="radio" :type="DICT_TYPE.INFRA_BOOLEAN_STRING" formatter="bool" /> :label="$t('单票立刻转运')"
<span style="margin-left:10px">{{$t('注:若只有一件,货到仓库立即发,选“是”,多件需仓库集运待发,选“否”')}}</span> v-if="[3, 4].indexOf(+form.transportId) > -1"
>
<dict-selector
v-model="form.transportVO.isSingleTicketTransport"
form-type="radio"
:type="DICT_TYPE.INFRA_BOOLEAN_STRING"
formatter="bool"
/>
<span style="margin-left: 10px">{{
$t(
"注:若只有一件,货到仓库立即发,选“是”,多件需仓库集运待发,选“否”"
)
}}</span>
</el-form-item> </el-form-item>
<br/> <br />
<el-form-item :label="$t('特殊要求')" > <el-form-item :label="$t('特殊要求')">
<dict-selector v-model="form.transportVO.packageTypeArr" form-type="checkbox" :type="DICT_TYPE.ORDER_SPECIAL_NEEDS" multiple /> <dict-selector
v-model="form.transportVO.packageTypeArr"
form-type="checkbox"
:type="DICT_TYPE.ORDER_SPECIAL_NEEDS"
multiple
/>
</el-form-item> </el-form-item>
<br/> <br />
<el-form-item :label="$t('特殊要求备注')"> <el-form-item :label="$t('特殊要求备注')">
<el-input v-model="form.transportVO.packageRemarks" ></el-input> <el-input v-model="form.transportVO.packageRemarks"></el-input>
</el-form-item> </el-form-item>
</el-card> </el-card>
<el-form-item label="" class="mt-20"> <el-form-item label="" class="mt-20">
<!-- 非草稿状态显示为编辑按钮 --> <!-- 非草稿状态显示为编辑按钮 -->
<el-button v-if="form.offerId && form.status != 2" type="primary" @click="submitForm(2)">{{$t('编辑')}}</el-button> <el-button
v-if="form.offerId && form.status != 2"
type="primary"
@click="submitForm(2)"
>{{ $t("编辑") }}</el-button
>
<template v-else> <template v-else>
<el-button type="primary" @click="submitForm(2)">{{$t('保存草稿')}}</el-button> <!-- 草稿 --> <el-button type="primary" @click="submitForm(2)">{{
<el-button type="primary" @click="submitForm(3)">{{$t('确认报价')}}</el-button> <!-- 需求确认 --> $t("保存草稿")
}}</el-button>
<!-- 草稿 -->
<el-button type="primary" @click="submitForm(3)">{{
$t("确认报价")
}}</el-button>
<!-- 需求确认 -->
</template> </template>
<el-button @click="$store.dispatch('tagsView/delCurrentView')">{{$t('取消')}}</el-button> <el-button @click="$store.dispatch('tagsView/delCurrentView')">{{
$t("取消")
}}</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
<choose-contact-dialog
<choose-contact-dialog v-if="!!contactChooseType" @choose="onContactChoose" @close="contactChooseType=null" /> v-if="!!contactChooseType"
<quick-create-customer v-if="quickCreateType" :type="quickCreateType" @success="onContactChoose" @close="quickCreateType=null" /> :type="1"
@choose="onContactChoose"
@close="contactChooseType = null"
/>
<quick-create-customer
v-if="quickCreateType"
:type="quickCreateType"
@success="onContactChoose"
@close="quickCreateType = null"
/>
</div> </div>
</template> </template>
<script> <script>
import { createOffer, updateOffer, getOffer} from "@/api/ecw/offer"; import { createOffer, updateOffer, getOffer } from "@/api/ecw/offer";
import ProductSelector from '@/components/ProductSelector' import ProductSelector from "@/components/ProductSelector";
import {getProductAttrList} from '@/api/ecw/productAttr' import { getProductAttrList } from "@/api/ecw/productAttr";
import {getChannelList} from '@/api/ecw/channel' import { getChannelList } from "@/api/ecw/channel";
import Selector from '@/components/Selector' import Selector from "@/components/Selector";
import {openedRouterList as getOpenedRouterList} from '@/api/ecw/warehouse' import { openedRouterList as getOpenedRouterList } from "@/api/ecw/warehouse";
import {getTradeCityList} from '@/api/ecw/region' import { getTradeCityList } from "@/api/ecw/region";
import {getDictData} from '@/utils/dict' import { getDictData } from "@/utils/dict";
import {getCurrencyList} from '@/api/ecw/currency' import { getCurrencyList } from "@/api/ecw/currency";
import {getUnitList} from '@/api/ecw/unit' import { getUnitList } from "@/api/ecw/unit";
import {calculationPrice} from '@/api/ecw/product' import { calculationPrice } from "@/api/ecw/product";
import SupplierSelector from '@/components/SupplierSelector' import SupplierSelector from "@/components/SupplierSelector";
import ChooseContactDialog from '@/components/ChooseContactDialog' import ChooseContactDialog from "@/components/ChooseContactDialog";
import QuickCreateCustomer from '@/components/QuickCreateCustomer' import QuickCreateCustomer from "@/components/QuickCreateCustomer";
import {getCustomerContactsSelect} from '@/api/ecw/customerContacts' import { getCustomerContactsSelect } from "@/api/ecw/customerContacts";
import Decimal from 'decimal.js' import Decimal from "decimal.js";
import getQuote from '@/views/ecw/customer/index.vue' import getQuote from "@/views/ecw/customer/index.vue";
window.Decimal= Decimal window.Decimal = Decimal;
const createDefaultForm = () => { const createDefaultForm = () => {
return { return {
sendstatus:0, sendstatus: 0,
type: [], type: [],
control: false, control: false,
isCargoControl: false, isCargoControl: false,
prodCreateReqVOList:[], prodCreateReqVOList: [],
transportVO: {} transportVO: {},
} };
} };
export default { export default {
name: "EcwOfferEdit", name: "EcwOfferEdit",
components: { components: {
ProductSelector, Selector, SupplierSelector,ChooseContactDialog, QuickCreateCustomer ProductSelector,
Selector,
SupplierSelector,
ChooseContactDialog,
QuickCreateCustomer,
}, },
data() { data() {
return { return {
// 遮罩层 // 遮罩层
form: { form: {
relation: 1, // CustomerLevel 的初始值 relation: 1, // CustomerLevel 的初始值
}, },
type: this.$route.query.type, type: this.$route.query.type,
contacts:null, contacts: null,
contactsList:[], contactsList: [],
loading: true, loading: true,
// productList:[], // 商品信息 // productList:[], // 商品信息
productAttrList:[], // 商品属性 productAttrList: [], // 商品属性
channelList: [], // 出货取到 channelList: [], // 出货取到
routerList: [], routerList: [],
tradeCityList: [], tradeCityList: [],
consignor: {}, // 发货人 consignor: {}, // 发货人
consignee:{}, // 收货人 consignee: {}, // 收货人
transportList: [], transportList: [],
currencyList:[], currencyList: [],
unitList:[], unitList: [],
// couponList: [], // couponList: [],
fee: {}, // 费用 fee: {}, // 费用
// 表单参数 // 表单参数
form: {...createDefaultForm()}, form: { ...createDefaultForm() },
// 表单校验 // 表单校验
labelStyle: 'width:120px', labelStyle: "width:120px",
productNames: {}, // 品名id和名称对应关系 productNames: {}, // 品名id和名称对应关系
couponAvailableGroupDtoList: [], // 可用优惠 couponAvailableGroupDtoList: [], // 可用优惠
couponTotalAmountList: [], // 优惠总额 couponTotalAmountList: [], // 优惠总额
...@@ -596,94 +994,92 @@ export default { ...@@ -596,94 +994,92 @@ export default {
quickCreateType: null, // 快速新建客户类型,1发货人,2收货人 quickCreateType: null, // 快速新建客户类型,1发货人,2收货人
getOpenedRouterListHandler: undefined, getOpenedRouterListHandler: undefined,
//预计结束时间,用于日历框校验 //预计结束时间,用于日历框校验
stopDate:{ stopDate: {
disabledDate: time => { disabledDate: (time) => {
return Date.now() - 8.64e7 >= time.getTime() // 加- 8.64e7则表示包当天 return Date.now() - 8.64e7 >= time.getTime(); // 加- 8.64e7则表示包当天
} },
}, },
//有效起始时间 //有效起始时间
startDate: { startDate: {
disabledDate: time => { disabledDate: (time) => {
return Date.now() - 8.64e7 >= time.getTime() // 加- 8.64e7则表示包当天 return Date.now() - 8.64e7 >= time.getTime(); // 加- 8.64e7则表示包当天
} },
}, },
//有效结束时间 //有效结束时间
endDate: { endDate: {
disabledDate: time => { disabledDate: (time) => {
if (this.form.startTime) { if (this.form.startTime) {
return ( return (
//限制日期范围 //限制日期范围
new Date( this.form.startTime).getTime() - 8.64e7 >=time.getTime() || time.getTime() >= new Date().setDate(new Date().getDate() + 30) new Date(this.form.startTime).getTime() - 8.64e7 >=
time.getTime() ||
) time.getTime() >= new Date().setDate(new Date().getDate() + 30)
);
} else { } else {
// 加- 8.64e7则表示包当天 // 加- 8.64e7则表示包当天
return Date.now() - 8.64e7>= time.getTime() || time.getTime() >= new Date().setDate(new Date().getDate() + 30) return (
Date.now() - 8.64e7 >= time.getTime() ||
} time.getTime() >= new Date().setDate(new Date().getDate() + 30)
} );
} }
},
},
}; };
}, },
computed:{ computed: {
computedStandard() { computedStandard() {
if (this.$route.query.type == 1) {
if(this.$route.query.type==1){
// 使用计算属性动态设置 'Standard' 的值 // 使用计算属性动态设置 'Standard' 的值
switch (this.form.relation) { switch (this.form.relation) {
case 1: case 1:
if(this.$route.query.customer.defaultContactName !=null){ if (this.$route.query.customer.defaultContactName != null) {
this.form.consignorName =
this.form.consignorName = this.$route.query.customer.defaultContactName this.$route.query.customer.defaultContactName;
this.form.consigneeName = "" this.form.consigneeName = "";
this.form.consignorId = this.$route.query.customer.defaultContactId this.form.consignorId =
} this.$route.query.customer.defaultContactId;
if(this.$route.query.customer.company !=null){ }
if (this.$route.query.customer.company != null) {
this.form.consignorCompany = this.$route.query.customer.company;
this.form.consignorCompany = this.$route.query.customer.company this.form.consigneeCompany = "";
this.form.consigneeCompany = "" }
} if (this.$route.query.customer.defaultContactPhone != null) {
if(this.$route.query.customer.defaultContactPhone!=null){ this.form.consignorPhone =
this.form.consignorPhone = this.$route.query.customer.defaultContactPhone this.$route.query.customer.defaultContactPhone;
this.form.consigneePhone = "" this.form.consigneePhone = "";
this.form.consigeeCountryCode ="" this.form.consigeeCountryCode = "";
}
} if (this.$route.query.customer.defaultEmail != null) {
if(this.$route.query.customer.defaultEmail!=null){ this.form.consignorEmail =
this.form.consignorEmail = this.$route.query.customer.defaultEmail; this.$route.query.customer.defaultEmail;
this.form.consigneeEmail = "" this.form.consigneeEmail = "";
} }
return; return;
case 2: case 2:
if(this.$route.query.customer.defaultContactName !=null){ if (this.$route.query.customer.defaultContactName != null) {
this.form.consignorName = "";
this.form.consignorName = "" this.form.consigneeName =
this.form.consigneeName = this.$route.query.customer.defaultContactName this.$route.query.customer.defaultContactName;
this.form.consigneeId = this.$route.query.customer.defaultContactId this.form.consigneeId =
} this.$route.query.customer.defaultContactId;
if(this.$route.query.customer.company !=null){ }
if (this.$route.query.customer.company != null) {
this.form.consignorCompany = "" this.form.consignorCompany = "";
this.form.consigneeCompany = this.$route.query.customer.company this.form.consigneeCompany = this.$route.query.customer.company;
} }
if(this.$route.query.customer.defaultContactPhone!=null){ if (this.$route.query.customer.defaultContactPhone != null) {
this.form.consignorPhone = "" this.form.consignorPhone = "";
this.form.consignorCountryCode ="" this.form.consignorCountryCode = "";
this.form.consigneePhone = this.$route.query.customer.defaultContactPhone this.form.consigneePhone =
this.$route.query.customer.defaultContactPhone;
}
if (this.$route.query.customer.defaultEmail != null) {
this.form.consignorEmail = "";
this.form.consigneeEmail =
this.$route.query.customer.defaultEmail;
} }
if(this.$route.query.customer.defaultEmail!=null){ return;
this.form.consignorEmail = ""
this.form.consigneeEmail = this.$route.query.customer.defaultEmail;
}
return ;
default: default:
return ""; return "";
...@@ -691,36 +1087,42 @@ export default { ...@@ -691,36 +1087,42 @@ export default {
} }
}, },
rules(){ rules() {
let rules = { let rules = {
marks: [ marks: [
{ {
validator: (rule, value, callback) => { validator: (rule, value, callback) => {
if(value && !/[a-zA-Z]/.test(value.charAt(0))){ if (value && !/[a-zA-Z]/.test(value.charAt(0))) {
return callback(new Error(this.$t('唛头必须以字母开头'))) return callback(new Error(this.$t("唛头必须以字母开头")));
} }
callback() callback();
},
trigger: "blur",
}, },
trigger: 'blur'
}
], ],
lineId: [{ required: true, message: this.$t("请选择线路")}], lineId: [{ required: true, message: this.$t("请选择线路") }],
/* consignorId: [{ required: true, message: this.$t("发货人不能为空"),}], /* consignorId: [{ required: true, message: this.$t("发货人不能为空"),}],
consigneeId: [{ required: true, message: this.$t("收货人不能为空")}], */ consigneeId: [{ required: true, message: this.$t("收货人不能为空")}], */
startTime: [{ required: true, message: this.$t("有效期开始时间不能为空")}], startTime: [
endTime: [{ required: true, message: this.$t("有效期结束时间不能为空")}], { required: true, message: this.$t("有效期开始时间不能为空") },
transportId: [{ required: true, message: this.$t("选择运输方式")}], ],
channelId: [{ required: true, message: this.$t("选择出货渠道")}], endTime: [
stopTime: [{ required: true, message: this.$t("不能为空")}], { required: true, message: this.$t("有效期结束时间不能为空") },
relation: [{ required: true, message: this.$t("请选择所属人")}], ],
control: [{ required: true, message: this.$t("请选择是否控货")}], transportId: [{ required: true, message: this.$t("选择运输方式") }],
channelId: [{ required: true, message: this.$t("选择出货渠道") }],
stopTime: [{ required: true, message: this.$t("不能为空") }],
relation: [{ required: true, message: this.$t("请选择所属人") }],
control: [{ required: true, message: this.$t("请选择是否控货") }],
importance: [ importance: [
{ required: true, message: this.$t("请选择重要程度")}, { required: true, message: this.$t("请选择重要程度") },
{ type: 'number', min: 1, message: this.$t("请选择重要程度")} { type: "number", min: 1, message: this.$t("请选择重要程度") },
] ],
} };
if(this.form.relation == 1 ){ if (this.form.relation == 1) {
rules.consignorId = [{ required: true, message: this.$t("发货人不能为空")}] rules.consignorId = [
{ required: true, message: this.$t("发货人不能为空") },
];
// if(this.$route.query.type ==1){ // if(this.$route.query.type ==1){
// if(this.$route.query.customer.defaultContactName==null){ // if(this.$route.query.customer.defaultContactName==null){
// rules.consignorId = [{ required: true, message: this.$t("发货人不能为空")}] // rules.consignorId = [{ required: true, message: this.$t("发货人不能为空")}]
...@@ -735,86 +1137,90 @@ export default { ...@@ -735,86 +1137,90 @@ export default {
// rules.consignorId = [{ required: true, message: this.$t("发货人不能为空")}] // rules.consignorId = [{ required: true, message: this.$t("发货人不能为空")}]
// } // }
} }
if(this.form.relation == 2){ if (this.form.relation == 2) {
rules.consigneeId = [{ required: true, message: this.$t("收货人不能为空")}] rules.consigneeId = [
{ required: true, message: this.$t("收货人不能为空") },
];
} }
return rules return rules;
}, },
exportCityList(){ exportCityList() {
return this.tradeCityList.filter(item => item.type == 2) return this.tradeCityList.filter((item) => item.type == 2);
}, },
importCityList(){ importCityList() {
return this.tradeCityList.filter(item => item.type == 1) return this.tradeCityList.filter((item) => item.type == 1);
}, },
getDictData(){ getDictData() {
return (type, value) => getDictData(type, value) || {} return (type, value) => getDictData(type, value) || {};
}, },
// 根据线路id显示线路名称 // 根据线路id显示线路名称
getRouterNameById(){ getRouterNameById() {
return routerId => { return (routerId) => {
let router = this.routerList.find(item => item.id == routerId) let router = this.routerList.find((item) => item.id == routerId);
if(router){ if (router) {
return router.startTitleZh + ' > ' + router.destTitleZh return router.startTitleZh + " > " + router.destTitleZh;
}
return '-'
} }
return "-";
};
}, },
// 根据渠道id显示渠道名 // 根据渠道id显示渠道名
getChannelNameById(){ getChannelNameById() {
return channelId => { return (channelId) => {
return this.channelList.find(item => item.channelId == channelId) ?. nameZh return this.channelList.find((item) => item.channelId == channelId)
} ?.nameZh;
};
}, },
// 当前运输方式 // 当前运输方式
transport(){ transport() {
return this.transportList.find(item => item.value == this.form.transportId) return this.transportList.find(
(item) => item.value == this.form.transportId
);
}, },
selectedRouter(){ selectedRouter() {
// otherService 1 送货上门,2非控货订单代收货款 // otherService 1 送货上门,2非控货订单代收货款
if(!this.form.lineId)return null if (!this.form.lineId) return null;
return this.routerList.find(item => item.id == this.form.lineId) return this.routerList.find((item) => item.id == this.form.lineId);
}, },
currencyMap(){ currencyMap() {
let map = {} let map = {};
this.currencyList.forEach(item => { this.currencyList.forEach((item) => {
map[item.id] = this.$l(item, 'title') map[item.id] = this.$l(item, "title");
}) });
return map return map;
}, },
unitMap(){ unitMap() {
let map = {} let map = {};
this.unitList.forEach(item => { this.unitList.forEach((item) => {
map[item.id] = this.$l(item, 'title') map[item.id] = this.$l(item, "title");
}) });
return map return map;
}, },
sum(){ sum() {
let sum = { let sum = {
totalNum: new Decimal(0), totalNum: new Decimal(0),
totalVolume: new Decimal(0), totalVolume: new Decimal(0),
totalWeight: new Decimal(0), totalWeight: new Decimal(0),
totalWorth: new Decimal(0), totalWorth: new Decimal(0),
totalQuatity: new Decimal(0) totalQuatity: new Decimal(0),
} };
this.form.prodCreateReqVOList.forEach(item => { this.form.prodCreateReqVOList.forEach((item) => {
sum.totalNum = sum.totalNum.plus(item.num || 0) sum.totalNum = sum.totalNum.plus(item.num || 0);
sum.totalVolume = sum.totalVolume.plus(item.volume || 0) sum.totalVolume = sum.totalVolume.plus(item.volume || 0);
sum.totalWeight = sum.totalWeight.plus(item.weight || 0) sum.totalWeight = sum.totalWeight.plus(item.weight || 0);
sum.totalWorth = sum.totalWorth.plus(item.worth || 0) sum.totalWorth = sum.totalWorth.plus(item.worth || 0);
sum.totalQuatity = sum.totalQuatity.plus(item.quantity || 0) sum.totalQuatity = sum.totalQuatity.plus(item.quantity || 0);
}) });
return sum return sum;
}, },
// 总有优惠金额 // 总有优惠金额
couponList(){ couponList() {
let arr = [] let arr = [];
this.couponAvailableGroupDtoList.forEach(item => { this.couponAvailableGroupDtoList.forEach((item) => {
if(item.couponAvailableDtoList && item.couponAvailableDtoList.length){ if (item.couponAvailableDtoList && item.couponAvailableDtoList.length) {
// 只取第一个 // 只取第一个
let it = item.couponAvailableDtoList[0] let it = item.couponAvailableDtoList[0];
arr.push({ arr.push({
prodId: item.prodId, prodId: item.prodId,
type: it.type, type: it.type,
...@@ -823,307 +1229,370 @@ export default { ...@@ -823,307 +1229,370 @@ export default {
endTime: it.endTime, endTime: it.endTime,
reduceTotalAmount: it.reduceTotalAmount, reduceTotalAmount: it.reduceTotalAmount,
reduceAmount: it.reduceAmount, reduceAmount: it.reduceAmount,
reduceCurrencyId: it.reduceCurrencyId reduceCurrencyId: it.reduceCurrencyId,
}) });
} }
}) });
return arr return arr;
}, },
// 计算返回的费用清单 // 计算返回的费用清单
feeDtoList(){ feeDtoList() {
return this.fee.feeDtoList || [] return this.fee.feeDtoList || [];
}, },
// 清关费 // 清关费
clearanceFeeList(){ clearanceFeeList() {
return this.feeDtoList.filter(item => item.feeType == 2) return this.feeDtoList.filter((item) => item.feeType == 2);
}, },
// 运费 // 运费
freightFeeList(){ freightFeeList() {
return this.feeDtoList.filter(item => item.feeType == 1) return this.feeDtoList.filter((item) => item.feeType == 1);
}, },
// 原价(清关费 + 运费) // 原价(清关费 + 运费)
originalFeeList(){ originalFeeList() {
let arr = [] let arr = [];
this.clearanceFeeList.forEach(item => { this.clearanceFeeList.forEach((item) => {
let it = { let it = {
src: this.$t('清关费'), src: this.$t("清关费"),
currencyId: item.currencyId, currencyId: item.currencyId,
amount: Decimal(item.amount) amount: Decimal(item.amount),
} };
let freight = this.freightFeeList.find(fee => fee.currencyId == item.currencyId) let freight = this.freightFeeList.find(
if(freight){ (fee) => fee.currencyId == item.currencyId
it.amount = it.amount.plus(freight.amount) );
if (freight) {
it.amount = it.amount.plus(freight.amount);
} }
arr.push(it) arr.push(it);
}) });
// 判断是否有运费单位不在清关费里的 // 判断是否有运费单位不在清关费里的
this.freightFeeList.forEach(item => { this.freightFeeList.forEach((item) => {
if(!arr.find(arrItem => arrItem.currencyId == item.currencyId)){ if (!arr.find((arrItem) => arrItem.currencyId == item.currencyId)) {
arr.push({ arr.push({
src: this.$t('未计算的运费'), src: this.$t("未计算的运费"),
currencyId: item.currencyId, currencyId: item.currencyId,
amount: Decimal(item.amount) amount: Decimal(item.amount),
}) });
} }
}) });
return arr return arr;
}, },
// 预计费用(原价 - 优惠金额 + 其他费用 + 保价费) // 预计费用(原价 - 优惠金额 + 其他费用 + 保价费)
estimatedCosts(){ estimatedCosts() {
let arr = [] let arr = [];
this.originalFeeList.forEach(item => { this.originalFeeList.forEach((item) => {
let it = { let it = {
currencyId: item.currencyId, currencyId: item.currencyId,
amount: Decimal(item.amount) amount: Decimal(item.amount),
} };
let coupon = this.couponList.find(coupon => coupon.reduceCurrencyId == item.currencyId) let coupon = this.couponList.find(
if(coupon){ (coupon) => coupon.reduceCurrencyId == item.currencyId
it.amount = it.amount.minus(coupon.reduceTotalAmount) );
if (coupon) {
it.amount = it.amount.minus(coupon.reduceTotalAmount);
} }
arr.push(it) arr.push(it);
}) });
// 累加保价费 // 累加保价费
const insuranceFeeIndex = arr.findIndex(item => item.currencyId == this.insuranceFeeCurrency) const insuranceFeeIndex = arr.findIndex(
if(insuranceFeeIndex > -1){ (item) => item.currencyId == this.insuranceFeeCurrency
arr[insuranceFeeIndex].amount = arr[insuranceFeeIndex].amount.plus(this.fee.insuranceFee || 0) );
}else{ if (insuranceFeeIndex > -1) {
arr[insuranceFeeIndex].amount = arr[insuranceFeeIndex].amount.plus(
this.fee.insuranceFee || 0
);
} else {
arr.push({ arr.push({
currencyId: this.insuranceFeeCurrency, currencyId: this.insuranceFeeCurrency,
amount: Decimal(this.fee.insuranceFee || 0) amount: Decimal(this.fee.insuranceFee || 0),
}) });
} }
// 累加其他费用 // 累加其他费用
const otherFeeIndex = arr.findIndex(item => item.currencyId == this.form.otherFeeCurrencyId) const otherFeeIndex = arr.findIndex(
if(otherFeeIndex > -1){ (item) => item.currencyId == this.form.otherFeeCurrencyId
arr[otherFeeIndex].amount = arr[otherFeeIndex].amount.plus(this.form.otherFee || 0) );
}else{ if (otherFeeIndex > -1) {
if(this.form.otherFee>0){ arr[otherFeeIndex].amount = arr[otherFeeIndex].amount.plus(
this.form.otherFee || 0
);
} else {
if (this.form.otherFee > 0) {
arr.push({ arr.push({
currencyId: this.form.otherFeeCurrencyId, currencyId: this.form.otherFeeCurrencyId,
amount: Decimal(this.form.otherFee || 0) amount: Decimal(this.form.otherFee || 0),
}) });
} }
} }
return arr return arr;
}, },
// 路线开通的服务 // 路线开通的服务
routeOtherServices(){ routeOtherServices() {
if(!this.selectedRouter || !this.selectedRouter.otherService) return [] if (!this.selectedRouter || !this.selectedRouter.otherService) return [];
return this.selectedRouter.otherService.split(',') return this.selectedRouter.otherService.split(",");
}, },
// 保价费单位(路线里设置,默认美元) // 保价费单位(路线里设置,默认美元)
insuranceFeeCurrency() { insuranceFeeCurrency() {
return this.selectedRouter?.currencyUnit || 1; return this.selectedRouter?.currencyUnit || 1;
}, },
// 是否可以添加商品 // 是否可以添加商品
canAddProduct(){ canAddProduct() {
if(!this.form.lineId){ if (!this.form.lineId) {
return false return false;
} }
// 如果是海空联运或者空运专线则必须选择渠道 // 如果是海空联运或者空运专线则必须选择渠道
if(this.transport && this.transport.cssClass == 'channel' && !this.form.channelId ){ if (
return false this.transport &&
} this.transport.cssClass == "channel" &&
return true !this.form.channelId
} ) {
return false;
}
return true;
},
}, },
watch:{ watch: {
"form.relation": function(newVal) { "form.relation": function (newVal) {
this.form.standard = this.computedStandard; this.form.standard = this.computedStandard;
}, },
// 始发地 // 始发地
'form.departureId'(){ "form.departureId"() {
this.getOpenedRouterList() this.getOpenedRouterList();
}, },
// 目的地 // 目的地
async 'form.objectiveId'(){ async "form.objectiveId"() {
await this.$nextTick() await this.$nextTick();
await this.getChannelList() await this.getChannelList();
this.getOpenedRouterList() this.getOpenedRouterList();
}, },
'form.transportId'(transportId, oldTransportId){ "form.transportId"(transportId, oldTransportId) {
// 海空联运默认数据 // 海空联运默认数据
if(transportId == 4){ if (transportId == 4) {
this.$set(this.form.transportVO, Object.assign(this.form.transportVO, { this.$set(
"doubleClear":"1", this.form.transportVO,
"customsClearCert":false, Object.assign(this.form.transportVO, {
"isUnpack":false, doubleClear: "1",
"isSingleTicketTransport":false, customsClearCert: false,
"packageTypeArr":[], isUnpack: false,
"packageType":"" isSingleTicketTransport: false,
})) packageTypeArr: [],
packageType: "",
})
);
} }
this.getOpenedRouterList() this.getOpenedRouterList();
// 更换运输方式之后,之前选择的路线会失效,需要重新选择 // 更换运输方式之后,之前选择的路线会失效,需要重新选择
if(oldTransportId && oldTransportId != transportId && transportId != this.selectedRouter?.transportType){ if (
console.log('重置路线',oldTransportId, transportId, this.selectedRouter?.transportType) oldTransportId &&
this.$set(this.form, 'lineId', undefined) oldTransportId != transportId &&
transportId != this.selectedRouter?.transportType
) {
console.log(
"重置路线",
oldTransportId,
transportId,
this.selectedRouter?.transportType
);
this.$set(this.form, "lineId", undefined);
} }
}, },
async 'form.channelId'(){ async "form.channelId"() {
await this.getTradeCity() await this.getTradeCity();
this.getOpenedRouterList() this.getOpenedRouterList();
this.calculationPrice('form.channelId') this.calculationPrice("form.channelId");
}, },
async 'form.lineId'(lineId){ async "form.lineId"(lineId) {
let router = this.routerList.find(item => item.id == lineId) let router = this.routerList.find((item) => item.id == lineId);
if(router){ if (router) {
this.$set(this.form, 'departureId', router.startCityId) this.$set(this.form, "departureId", router.startCityId);
this.$set(this.form, 'objectiveId', router.destCityId) this.$set(this.form, "objectiveId", router.destCityId);
} }
await this.$nextTick() await this.$nextTick();
await this.getChannelList() await this.getChannelList();
await this.getTradeCity() await this.getTradeCity();
await this.calculationPrice('form.lineId') await this.calculationPrice("form.lineId");
}, },
'form.transportVO.packageTypeArr'(val){ "form.transportVO.packageTypeArr"(val) {
this.$set(this.form.transportVO, 'packageType', (val || []).join(',')) this.$set(this.form.transportVO, "packageType", (val || []).join(","));
}, },
// 选择的路线变化后,需要判断是否开通了对应的服务,如果没开通需要取消对应的服务选择 // 选择的路线变化后,需要判断是否开通了对应的服务,如果没开通需要取消对应的服务选择
selectedRouter(val){ selectedRouter(val) {
if(!val) return if (!val) return;
['1', '4'].forEach(service => { ["1", "4"].forEach((service) => {
if(this.routeOtherServices.indexOf(service) < 0 && this.form.type.indexOf(service) > -1){ if (
this.form.type.splice(this.form.type.findIndex(item => item == service), 1) this.routeOtherServices.indexOf(service) < 0 &&
} this.form.type.indexOf(service) > -1
}) ) {
this.form.type.splice(
this.form.type.findIndex((item) => item == service),
1
);
} }
});
}, },
activated(){ },
if(this.form.offerId != this.$route.query.id){ activated() {
this.getOffer() if (this.form.offerId != this.$route.query.id) {
this.getOffer();
} }
}, },
async created() { async created() {
await this.getChannelList() await this.getChannelList();
await this.getTradeCity() await this.getTradeCity();
getProductAttrList().then(res => this.productAttrList = res.data) getProductAttrList().then((res) => (this.productAttrList = res.data));
getCurrencyList().then(res => this.currencyList = res.data) getCurrencyList().then((res) => (this.currencyList = res.data));
getUnitList().then(res => this.unitList = res.data) getUnitList().then((res) => (this.unitList = res.data));
this.transportList = this.getDictDatas(this.DICT_TYPE.ECW_TRANSPORT_TYPE) this.transportList = this.getDictDatas(this.DICT_TYPE.ECW_TRANSPORT_TYPE);
if(this.$route.query.id){ if (this.$route.query.id) {
this.getOffer() this.getOffer();
}else { } else {
// alert(this.$route.query.customer.defaultContactPhone) // alert(this.$route.query.customer.defaultContactPhone)
this.addProduct() this.addProduct();
} }
}, },
methods: { methods: {
async getChannelList() {
async getChannelList(){
let query = { let query = {
cityId: this.form.objectiveId, cityId: this.form.objectiveId,
lineId: this.form.lineId lineId: this.form.lineId,
} };
this.channelList = (await getChannelList(query)).data || [] this.channelList = (await getChannelList(query)).data || [];
}, },
async getTradeCity(){ async getTradeCity() {
let query = {} let query = {};
if(this.form.channelId){ if (this.form.channelId) {
query.channelId = this.form.channelId query.channelId = this.form.channelId;
} }
this.tradeCityList = (await getTradeCityList(query)).data || [] this.tradeCityList = (await getTradeCityList(query)).data || [];
}, },
getOffer(){ getOffer() {
//加了是否从全部客户列表中报价按钮进来的判断 //加了是否从全部客户列表中报价按钮进来的判断
if(this.$route.query !==1){ if (this.$route.query !== 1) {
getOffer(this.$route.query.id).then((res) => {
let formData = res.data;
getOffer(this.$route.query.id).then(res => { formData.type = formData.type
let formData = res.data ? formData.type.split(",").filter((item) => item != "")
formData.type = formData.type ? formData.type.split(',').filter(item => item != '') : [] : [];
formData.prodCreateReqVOList = [] formData.prodCreateReqVOList = [];
if(formData.transportVO && formData.transportVO.packageType){ if (formData.transportVO && formData.transportVO.packageType) {
formData.transportVO.packageTypeArr = formData.transportVO.packageType.split(",").filter(item => item && item != '') formData.transportVO.packageTypeArr =
} formData.transportVO.packageType
if(res.data.offerProdRespVOList){ .split(",")
res.data.offerProdRespVOList.forEach(item => { .filter((item) => item && item != "");
}
if (res.data.offerProdRespVOList) {
res.data.offerProdRespVOList.forEach((item) => {
formData.prodCreateReqVOList.push({ formData.prodCreateReqVOList.push({
"goodsType": item.goodsType, goodsType: item.goodsType,
"brand": item.brand, brand: item.brand,
"unit": item.unit, unit: item.unit,
"channelId": item.channelId, channelId: item.channelId,
"lineId": item.lineId, lineId: item.lineId,
"prodId": item.prodId, prodId: item.prodId,
"num": item.num, num: item.num,
"quantity": item.quantity, quantity: item.quantity,
"boxGauge": item.boxGauge, boxGauge: item.boxGauge,
"volume": item.volume, volume: item.volume,
"transportId": item.transportId, transportId: item.transportId,
"weight": item.weight, weight: item.weight,
"worth": item.worth, worth: item.worth,
"prodAttrArr": item.prodAttrIds && item.prodAttrIds != '' ? item.prodAttrIds.split(',').filter(item => item != '').map(item => +item) : [] prodAttrArr:
}) item.prodAttrIds && item.prodAttrIds != ""
}) ? item.prodAttrIds
.split(",")
.filter((item) => item != "")
.map((item) => +item)
: [],
});
});
} }
this.$set(this, 'form', formData) this.$set(this, "form", formData);
// 接口只返回了发货人和收货人ID,还需要调用接口获取详细信息回显 // 接口只返回了发货人和收货人ID,还需要调用接口获取详细信息回显
getCustomerContactsSelect({ids: [res.data.consigneeId, res.data.consignorId].join(',')}).then(({data}) => { getCustomerContactsSelect({
ids: [res.data.consigneeId, res.data.consignorId].join(","),
this.contactChooseType = 'consignee' }).then(({ data }) => {
this.onContactChoose(data.list.find(item => item.customerContactsId == res.data.consigneeId)) this.contactChooseType = "consignee";
this.contactChooseType = 'consignor' this.onContactChoose(
this.onContactChoose(data.list.find(item => item.customerContactsId == res.data.consignorId)) data.list.find(
}) (item) => item.customerContactsId == res.data.consigneeId
}) )
);
this.contactChooseType = "consignor";
this.onContactChoose(
data.list.find(
(item) => item.customerContactsId == res.data.consignorId
)
);
});
});
} }
}, },
onContactChoose(contact){ onContactChoose(contact) {
if(!contact) return if (!contact) return;
if(!this.contactChooseType && !this.quickCreateType) return if (!this.contactChooseType && !this.quickCreateType) return;
if(!this.contactChooseType && this.quickCreateType){ if (!this.contactChooseType && this.quickCreateType) {
this.contactChooseType = this.quickCreateType == 0 ? 'consignor' : 'consignee' this.contactChooseType =
} this.quickCreateType == 0 ? "consignor" : "consignee";
}
this.$set(this.form, this.contactChooseType + 'Company', contact.company)
this.$set(this.form, this.contactChooseType + 'Id', contact.customerContactsId) this.$set(this.form, this.contactChooseType + "Company", contact.company);
this.$set(this.form, this.contactChooseType + 'CountryCode', contact.areaCode) this.$set(
this.$set(this.form, this.contactChooseType + 'Email', contact.email) this.form,
this.contactChooseType + "Id",
contact.customerContactsId
);
this.$set(
this.form,
this.contactChooseType + "CountryCode",
contact.areaCode
);
this.$set(this.form, this.contactChooseType + "Email", contact.email);
// this.$set(this.form, this.contactChooseType + 'Id', contact.customerId) // this.$set(this.form, this.contactChooseType + 'Id', contact.customerId)
this.$set(this.form, this.contactChooseType + 'Name', contact.contactsName) this.$set(
this.$set(this.form, this.contactChooseType + 'Phone', contact.phoneNew) this.form,
this.contactChooseType = null this.contactChooseType + "Name",
this.quickCreateType = null contact.contactsName
);
this.$set(this.form, this.contactChooseType + "Phone", contact.phoneNew);
this.contactChooseType = null;
this.quickCreateType = null;
}, },
onProductChange(row, product){ onProductChange(row, product) {
// row.goodsType = product ? product.typeId : null // row.goodsType = product ? product.typeId : null
row.prodAttrArr = !product ? [] : product.attrId.split(',').filter(item => item !== '').map(item => +item) row.prodAttrArr = !product
if(product){ ? []
: product.attrId
.split(",")
.filter((item) => item !== "")
.map((item) => +item);
if (product) {
this.$set(this.productNames, product.id, { this.$set(this.productNames, product.id, {
titleZh: product.titleZh, titleZh: product.titleZh,
titleEn: product.titleEn titleEn: product.titleEn,
}) });
} }
this.calculationPrice('onProductChange') this.calculationPrice("onProductChange");
}, },
/* onLineChange(row){ /* onLineChange(row){
this.calculationPrice() this.calculationPrice()
// this.updateEnabledTransports() // this.updateEnabledTransports()
}, */ }, */
onChannelChange(row){ onChannelChange(row) {
this.calculationPrice('onChannelChange') this.calculationPrice("onChannelChange");
}, },
onProductAttrChange(row, attr){ onProductAttrChange(row, attr) {
this.calculationPrice('onProductAttrChange') this.calculationPrice("onProductAttrChange");
}, },
addProduct(data){ addProduct(data) {
this.form.prodCreateReqVOList.push(data || {prodAttrArr:[]}) this.form.prodCreateReqVOList.push(data || { prodAttrArr: [] });
}, },
// 计算商品运费 // 计算商品运费
/* getProductFee(row){ /* getProductFee(row){
...@@ -1136,223 +1605,240 @@ export default { ...@@ -1136,223 +1605,240 @@ export default {
}) })
}, */ }, */
// 获取路线 // 获取路线
getOpenedRouterList(){ getOpenedRouterList() {
let params = {} let params = {};
if(this.form.departureId){ if (this.form.departureId) {
params.startCityId = this.form.departureId params.startCityId = this.form.departureId;
} }
if(this.form.objectiveId){ if (this.form.objectiveId) {
params.destCityId = this.form.objectiveId params.destCityId = this.form.objectiveId;
} }
if(this.form.transportId){ if (this.form.transportId) {
params.transportType = this.form.transportId params.transportType = this.form.transportId;
} }
if(this.form.channelId){ if (this.form.channelId) {
params.channelId = this.form.channelId params.channelId = this.form.channelId;
} }
// 如果没有任何条件,不请求接口 // 如果没有任何条件,不请求接口
if(!params.startCityId && !params.destCityId && !params.transportType && !params.channelId) return false if (
getOpenedRouterList(params).then(res => this.routerList = res.data) !params.startCityId &&
!params.destCityId &&
!params.transportType &&
!params.channelId
)
return false;
getOpenedRouterList(params).then((res) => (this.routerList = res.data));
}, },
// 计算体积 // 计算体积
calcVolume(row){ calcVolume(row) {
if(!row.boxGauge || !row.num) return false if (!row.boxGauge || !row.num) return false;
try{ try {
row.volume = (eval(row.boxGauge) * row.num).toFixed(2) row.volume = (eval(row.boxGauge) * row.num).toFixed(2);
}catch(e){ } catch (e) {
row.volume = '' row.volume = "";
} }
}, },
// 删除一条产品 // 删除一条产品
delProduct(index){ delProduct(index) {
this.$confirm(this.$t('确定删除此条内容么?')) this.$confirm(this.$t("确定删除此条内容么?")).then((res) => {
.then(res => { this.form.prodCreateReqVOList.splice(index, 1);
this.form.prodCreateReqVOList.splice(index, 1) });
})
}, },
/** 提交按钮 */ /** 提交按钮 */
submitForm(status) { submitForm(status) {
this.$refs["form"].validate((valid, errors) => { this.$refs["form"].validate((valid, errors) => {
if (!valid) { if (!valid) {
return this.$showFormValidateErrors(errors) return this.$showFormValidateErrors(errors);
} }
this.form.prodCreateReqVOList.map(item => { this.form.prodCreateReqVOList.map((item) => {
item.prodAttrIds = item.prodAttrArr.join(',') item.prodAttrIds = item.prodAttrArr.join(",");
item.lineId = this.form.lineId item.lineId = this.form.lineId;
item.channelId = this.form.channelId item.channelId = this.form.channelId;
item.transportId = this.form.transportId item.transportId = this.form.transportId;
}) });
if(this.form.transportVO?.packageTypeArr){ if (this.form.transportVO?.packageTypeArr) {
this.form.transportVO.packageType = this.form.transportVO.packageTypeArr.join(',') this.form.transportVO.packageType =
this.form.transportVO.packageTypeArr.join(",");
} }
let endTime = new Date(this.form.endTime) let endTime = new Date(this.form.endTime);
let startTime = new Date(this.form.startTime) let startTime = new Date(this.form.startTime);
if (endTime.getTime() < startTime.getTime()) {
if(endTime.getTime()<startTime.getTime()){ return this.$message.error(
this.$t("价格有效结束时间不能小于开始时间")
return this.$message.error(this.$t('价格有效结束时间不能小于开始时间')); );
} }
let time2 = new Date().setDate(new Date().getDate() + 30) ; let time2 = new Date().setDate(new Date().getDate() + 30);
if(endTime> time2){ if (endTime > time2) {
return this.$message.error(this.$t('价格有效结束时间不能超过当前时间30天')); return this.$message.error(
this.$t("价格有效结束时间不能超过当前时间30天")
);
} }
// 修改的提交 // 修改的提交
if (this.form.offerId != null) { if (this.form.offerId != null) {
let data = Object.assign({}, this.form, { let data = Object.assign({}, this.form, {
// transportUpdateReqVOList: this.transportList.filter(item => item._enabled), // transportUpdateReqVOList: this.transportList.filter(item => item._enabled),
prodUpdateReqVOList: this.getProductListWithDefaultValue() prodUpdateReqVOList: this.getProductListWithDefaultValue(),
}) });
if(data.status < 3){ if (data.status < 3) {
data.status = status data.status = status;
} }
updateOffer(data).then(response => { updateOffer(data).then((response) => {
this.$modal.msgSuccess(this.$t("修改成功")); this.$modal.msgSuccess(this.$t("修改成功"));
this.$redirect('index') this.$redirect("index");
}); });
return; return;
} }
let data =null ; let data = null;
if(this.$route.query.type ==1){ if (this.$route.query.type == 1) {
console.log(JSON.stringify(this.contactsList));
console.log(JSON.stringify(this.contactsList))
data = Object.assign({}, this.form, { data = Object.assign({}, this.form, {
prodCreateReqVOList: this.getProductListWithDefaultValue(), prodCreateReqVOList: this.getProductListWithDefaultValue(),
consignorId: this.$route.query.customer.defaultContactId, consignorId: this.$route.query.customer.defaultContactId,
status status,
}) });
// data.consignorId = contacts.customerContactsId // data.consignorId = contacts.customerContactsId
}else{ } else {
data = Object.assign({}, this.form, { data = Object.assign({}, this.form, {
prodCreateReqVOList: this.getProductListWithDefaultValue(), prodCreateReqVOList: this.getProductListWithDefaultValue(),
status status,
}) });
} }
// 添加的提交 // 添加的提交
createOffer(data).then(response => { createOffer(data).then((response) => {
// 重置表单内容 // 重置表单内容
this.$set(this, 'form', {...createDefaultForm()}) this.$set(this, "form", { ...createDefaultForm() });
this.routerList = [] this.routerList = [];
this.$nextTick(() => { this.$nextTick(() => {
console.log('清理表单校验和路线') console.log("清理表单校验和路线");
this.addProduct() this.addProduct();
this.$refs.form.clearValidate() this.$refs.form.clearValidate();
}) });
this.$modal.msgSuccess(this.$t("新增成功")); this.$modal.msgSuccess(this.$t("新增成功"));
this.$redirect('index') this.$redirect("index");
}); });
}); });
}, },
setLink(row){ setLink(row) {
this.$prompt(this.$t('请输入商品链接'), {inputValue: row.link}).then(({value}) => { this.$prompt(this.$t("请输入商品链接"), { inputValue: row.link }).then(
({ value }) => {
this.$set(row, 'link', value) this.$set(row, "link", value);
}) }
);
}, },
// 计算商品运费 // 计算商品运费
calculationPrice(tag){ calculationPrice(tag) {
let calcable = true;
let calcable = true if (!this.form.prodCreateReqVOList.length) return;
if(!this.form.prodCreateReqVOList.length) return this.form.prodCreateReqVOList.forEach((item) => {
this.form.prodCreateReqVOList.forEach(item => { if (!item.prodId) {
if(!item.prodId){ console.log("产品未选择", item);
console.log('产品未选择', item) calcable = false;
calcable = false }
} item.brandType = item.brand;
item.brandType = item.brand });
}) if (this.calculating || !calcable) {
if(this.calculating || !calcable){ console.log("不满足费用计算条件,清空已获取的费用信息");
console.log('不满足费用计算条件,清空已获取的费用信息') this.form.prodCreateReqVOList.forEach((item) => {
this.form.prodCreateReqVOList.forEach(item => { delete item.fee;
delete item.fee });
}) this.fee = {};
this.fee = {} return false;
return false
} }
this.calculating = true this.calculating = true;
console.log('calculationPrice') console.log("calculationPrice");
calculationPrice({ calculationPrice({
lineId: this.form.lineId, lineId: this.form.lineId,
transportId: this.form.transportId, transportId: this.form.transportId,
channelId: [3,4].indexOf(this.form.transportId) > -1 ? this.form.channelId : undefined, channelId:
[3, 4].indexOf(this.form.transportId) > -1
? this.form.channelId
: undefined,
prodConditionParamList: this.getProductListWithDefaultValue(), prodConditionParamList: this.getProductListWithDefaultValue(),
consigneeCustomerContactsId: this.form.consigneeCustomerContactsId, consigneeCustomerContactsId: this.form.consigneeCustomerContactsId,
consignorCustomerContactsId: this.form.consignorCustomerContactsId, consignorCustomerContactsId: this.form.consignorCustomerContactsId,
customsType: this.form.customsType, customsType: this.form.customsType,
isCargoControl: this.form.control, isCargoControl: this.form.control,
orderType: this.form.orderType, orderType: this.form.orderType,
}).then(res => { })
this.$set(this, 'fee', res.data.costDto) .then((res) => {
if(res.data.availableDto){ this.$set(this, "fee", res.data.costDto);
this.$set(this, 'couponTotalAmountList', res.data.availableDto.couponTotalAmountList) if (res.data.availableDto) {
this.$set(this, 'couponAvailableGroupDtoList', res.data.availableDto.couponAvailableGroupDtoList) this.$set(
this,
"couponTotalAmountList",
res.data.availableDto.couponTotalAmountList
);
this.$set(
this,
"couponAvailableGroupDtoList",
res.data.availableDto.couponAvailableGroupDtoList
);
} }
this.form.prodCreateReqVOList.map((item, index) => { this.form.prodCreateReqVOList.map((item, index) => {
this.$set(item, 'fee', res.data.prodCostDtoList[index] || null) this.$set(item, "fee", res.data.prodCostDtoList[index] || null);
}) });
}).finally(() => {
this.calculating = false
}) })
.finally(() => {
this.calculating = false;
});
}, },
// 体积。件数,数量,重量为选填,但是接口确实必填,所以生成一个副本并赋予默认值 // 体积。件数,数量,重量为选填,但是接口确实必填,所以生成一个副本并赋予默认值
getProductListWithDefaultValue(){ getProductListWithDefaultValue() {
let arr = [] let arr = [];
this.form.prodCreateReqVOList.forEach(item => { this.form.prodCreateReqVOList.forEach((item) => {
let tmp = {...item} let tmp = { ...item };
tmp.prodAttrIds = tmp.prodAttrArr.join(',') tmp.prodAttrIds = tmp.prodAttrArr.join(",");
if(!tmp.volume)tmp.volume = 0 if (!tmp.volume) tmp.volume = 0;
if(!tmp.weight)tmp.weight = 0 if (!tmp.weight) tmp.weight = 0;
if(!tmp.quantity)tmp.quantity = 0 if (!tmp.quantity) tmp.quantity = 0;
if(!tmp.num)tmp.num = 0 if (!tmp.num) tmp.num = 0;
if(!tmp.worth)tmp.worth = 0 if (!tmp.worth) tmp.worth = 0;
arr.push(tmp) arr.push(tmp);
}) });
return arr return arr;
} },
} },
}; };
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.card-title{ .card-title {
font-size: 18px; font-size: 18px;
display: flex; display: flex;
.card-name{ .card-name {
flex: 1; flex: 1;
} }
} }
.form-section{ .form-section {
.contact{ .contact {
display: flex; display: flex;
align-items: center; align-items: center;
img.phonebook{ img.phonebook {
width: 30px; width: 30px;
height: 30px; height: 30px;
margin-left: 10px; margin-left: 10px;
cursor: pointer; cursor: pointer;
} }
} }
} }
::v-deep .product-list .el-form-item__error{ ::v-deep .product-list .el-form-item__error {
position: static; position: static;
} }
::v-deep th.el-table__cell .cell{ ::v-deep th.el-table__cell .cell {
white-space: nowrap; white-space: nowrap;
.red{ .red {
color: red; color: red;
} }
} }
......
...@@ -694,7 +694,8 @@ export default { ...@@ -694,7 +694,8 @@ export default {
components: { components: {
ImageDisplay, ImageDisplay,
OperateLogDetail, OperateLogDetail,
PrintWarehouseReceipt, PrintLadingBill, WarehouseDetail, WarehouseAreaSelect,DeclarationDocuments, PrintWarehouseReceipt, PrintLadingBill,
WarehouseDetail, WarehouseAreaSelect,DeclarationDocuments,
FeeDetail,PackHistory,PackHistoryDetail FeeDetail,PackHistory,PackHistoryDetail
}, },
filters: { filters: {
......
...@@ -626,7 +626,7 @@ ...@@ -626,7 +626,7 @@
</div> </div>
</el-dialog> </el-dialog>
<choose-contact-dialog v-if="!!contactChooseType" @choose="onContactChoose" @close="contactChooseType=null" /> <choose-contact-dialog v-if="!!contactChooseType" :type="2" @choose="onContactChoose" @close="contactChooseType=null" />
<quick-create-customer v-if="quickCreateType" :type="quickCreateType" @success="onContactChoose" @close="quickCreateType=null" /> <quick-create-customer v-if="quickCreateType" :type="quickCreateType" @success="onContactChoose" @close="quickCreateType=null" />
</div> </div>
</template> </template>
......
...@@ -4,83 +4,97 @@ ...@@ -4,83 +4,97 @@
<order-base-info :order="order"></order-base-info> <order-base-info :order="order"></order-base-info>
<div style="margin-top: 20px;display: none"> <div style="margin-top: 20px; display: none">
<span>{{$t('储位')}}{{ ($refs.area ? $refs.area.selected : []).join(',') }}</span> <span
<el-button type="primary" size="mini" @click="areaVisible = true" style="margin-left: 15px">{{$t('选择')}}</el-button> >{{ $t("储位") }}{{
($refs.area ? $refs.area.selected : []).join(",")
}}</span
>
<el-button
type="primary"
size="mini"
@click="areaVisible = true"
style="margin-left: 15px"
>{{ $t("选择") }}</el-button
>
</div> </div>
<h2>{{$t('货物信息')}}</h2> <h2>{{ $t("货物信息") }}</h2>
<el-table <el-table
v-if="order.orderItemVOList && order.orderItemVOList.length > 0 && orderItemList && orderItemList.length > 0" v-if="
order.orderItemVOList &&
order.orderItemVOList.length > 0 &&
orderItemList &&
orderItemList.length > 0
"
:data="order.orderItemVOList || []" :data="order.orderItemVOList || []"
style="width: 100%"> style="width: 100%"
<el-table-column >
type="index" <el-table-column type="index" width="50" :label="$t('序号')">
width="50"
:label="$t('序号')">
</el-table-column> </el-table-column>
<el-table-column <el-table-column prop="prodTitleZh" :label="$t('品名')">
prop="prodTitleZh" <template v-slot="{ row }">
:label="$t('品名')"> {{ row.prodTitleZh }}<br />
<template v-slot="{row}">
{{ row.prodTitleZh }}<br>
{{ row.prodTitleEn }} {{ row.prodTitleEn }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column :label="$t('填单货物属性')">
:label="$t('填单货物属性')"> <template v-slot="{ row }">
<template v-slot="{row}"> <span v-if="row.isWarehouseInAdd">{{ $t("非填单货物信息") }}</span>
<span v-if="row.isWarehouseInAdd">{{$t('非填单货物信息')}}</span>
<template v-else> <template v-else>
{{$t('品牌')}}{{ [$t('无牌'), $t('有牌'), $t('中性')][row.brandType] }}<br> {{ $t("品牌") }}{{
{{$t('箱数')}}{{ row.num }}<br> [$t("无牌"), $t("有牌"), $t("中性")][row.brandType]
{{$t('体积')}}{{ row.volume }}<br> }}<br />
{{$t('重量')}}{{ row.weight }}Kg {{ $t("箱数") }}{{ row.num }}<br />
{{ $t("体积") }}{{ row.volume }}<br />
{{ $t("重量") }}{{ row.weight }}Kg
</template> </template>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column :label="$t('入库货物属性')">
:label="$t('入库货物属性')"> <template v-slot="{ row }">
<template v-slot="{row}">
<template v-if="row.warehouseInInfoVO"> <template v-if="row.warehouseInInfoVO">
{{$t('品牌')}}{{ row.brandName }}<br> {{ $t("品牌") }}{{ row.brandName }}<br />
{{$t('箱数')}}{{ row.warehouseInInfoVO.cartonsNum }}<br> {{ $t("箱数") }}{{ row.warehouseInInfoVO.cartonsNum }}<br />
{{$t('体积')}}{{ row.warehouseInInfoVO.volume }}<br> {{ $t("体积") }}{{ row.warehouseInInfoVO.volume }}<br />
{{$t('重量')}}{{ row.warehouseInInfoVO.weight }}Kg {{ $t("重量") }}{{ row.warehouseInInfoVO.weight }}Kg
</template> </template>
<span v-else>{{$t('暂无入仓信息')}}</span> <span v-else>{{ $t("暂无入仓信息") }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column
prop="expressNo" prop="expressNo"
v-slot="{row}" v-slot="{ row }"
:label="$t('快递单号')"> :label="$t('快递单号')"
{{ row.expressNo || (row.warehouseInInfoVO ? row.warehouseInInfoVO.expressNo : '') }} >
{{
row.expressNo ||
(row.warehouseInInfoVO ? row.warehouseInInfoVO.expressNo : "")
}}
</el-table-column> </el-table-column>
<el-table-column <el-table-column prop="createTime" :label="$t('最后操作时间')">
prop="createTime" <template v-slot="{ row }">
:label="$t('最后操作时间')">
<template v-slot="{row}">
{{ parseTime(row.updateTime) }} {{ parseTime(row.updateTime) }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column prop="diffType" v-slot="{ row }" :label="$t('状态')">
prop="diffType"
v-slot="{row}"
:label="$t('状态')">
<dict-tag <dict-tag
v-if="row.warehouseInInfoVO && row.warehouseInInfoVO.diffType" v-if="row.warehouseInInfoVO && row.warehouseInInfoVO.diffType"
:type="DICT_TYPE.ORDER_WAREHOUSE_IN_STATUS" :type="DICT_TYPE.ORDER_WAREHOUSE_IN_STATUS"
:value="row.warehouseInInfoVO.diffType" :value="row.warehouseInInfoVO.diffType"
class="red" class="red"
:class="{green: row.warehouseInInfoVO.diffType === 4}" :class="{ green: row.warehouseInInfoVO.diffType === 4 }"
/> />
<span :class="{red: row.itemStatus === 3}" v-else>{{ row.itemStatus === 3 ? ($t('少了') + row.num + $t('箱')) : $t('待入仓') }}</span> <span :class="{ red: row.itemStatus === 3 }" v-else>{{
<span class="red" v-if="row.warehouseInInfoVO && row.warehouseInInfoVO.cartonsNumDiff">{{ row.warehouseInInfoVO.cartonsNumDiff }}{{$t('箱')}}</span> row.itemStatus === 3 ? $t("少了") + row.num + $t("箱") : $t("待入仓")
}}</span>
<span
class="red"
v-if="row.warehouseInInfoVO && row.warehouseInInfoVO.cartonsNumDiff"
>{{ row.warehouseInInfoVO.cartonsNumDiff }}{{ $t("箱") }}</span
>
</el-table-column> </el-table-column>
<el-table-column <el-table-column prop="address" :label="$t('操作')">
prop="address"
:label="$t('操作')">
<template v-slot="{ row, column, $index }"> <template v-slot="{ row, column, $index }">
<warehouse <warehouse
v-if="isEdit" v-if="isEdit"
...@@ -89,21 +103,32 @@ ...@@ -89,21 +103,32 @@
:order-item-b="orderItemList[$index]" :order-item-b="orderItemList[$index]"
:title="$t('修改')" :title="$t('修改')"
:order="order" :order="order"
@close="getList"></warehouse> @close="getList"
<template v-else-if=" ></warehouse>
wareItem(row.orderItemId) <template
&& wareItem(row.orderItemId).orderWarehouseInBackItemDoList v-else-if="
&& wareItem(row.orderItemId).orderWarehouseInBackItemDoList.length > 0"> wareItem(row.orderItemId) &&
<!-- <template v-if="!order.parentOrderId">--> wareItem(row.orderItemId).orderWarehouseInBackItemDoList &&
wareItem(row.orderItemId).orderWarehouseInBackItemDoList.length >
0
"
>
<!-- <template v-if="!order.parentOrderId">-->
<warehouse <warehouse
v-if="!isEdit" v-if="!isEdit"
:order-item-a="order.orderItemVOList[$index]" :order-item-a="order.orderItemVOList[$index]"
:order-item-b="orderItemList[$index]" :order-item-b="orderItemList[$index]"
:title="$t('追加')" :title="$t('追加')"
:order="order" :order="order"
@close="getList"></warehouse> @close="getList"
<el-button size="mini" type="text" @click="handleWarehousingReturn(row)">{{$t('退仓')}}</el-button> ></warehouse>
<!-- </template>--> <el-button
size="mini"
type="text"
@click="handleWarehousingReturn(row)"
>{{ $t("退仓") }}</el-button
>
<!-- </template>-->
</template> </template>
<warehouse <warehouse
v-else v-else
...@@ -111,88 +136,182 @@ ...@@ -111,88 +136,182 @@
:order-item-b="orderItemList[$index]" :order-item-b="orderItemList[$index]"
:title="$t('入仓')" :title="$t('入仓')"
:order="order" :order="order"
@close="getList"></warehouse> @close="getList"
></warehouse>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<el-card v-if="order.parentOrderId" style="margin-top: 20px"> <el-card v-if="order.parentOrderId" style="margin-top: 20px">
<div slot="header" class="clearfix"> <div slot="header" class="clearfix">
<span style="font-size: 18px">{{$t('标签箱号')}}</span> <span style="font-size: 18px">{{ $t("标签箱号") }}</span>
</div> </div>
<div v-for="(item, index) in label.orderLabelDtoList" :key="index" style="margin-bottom: 10px"> <div
<el-input-number v-model="item.start" controls-position="right"></el-input-number> - v-for="(item, index) in label.orderLabelDtoList"
<el-input-number v-model="item.end" controls-position="right"></el-input-number> :key="index"
<el-button icon="el-icon-minus" circle v-show="index !== 0" @click="label.orderLabelDtoList.splice(index, 1)" style="margin-left: 10px"></el-button> style="margin-bottom: 10px"
<el-button icon="el-icon-plus" circle @click="handleLabelAdd(index)"></el-button> >
<el-input-number
v-model="item.start"
controls-position="right"
></el-input-number>
-
<el-input-number
v-model="item.end"
controls-position="right"
></el-input-number>
<el-button
icon="el-icon-minus"
circle
v-show="index !== 0"
@click="label.orderLabelDtoList.splice(index, 1)"
style="margin-left: 10px"
></el-button>
<el-button
icon="el-icon-plus"
circle
@click="handleLabelAdd(index)"
></el-button>
</div> </div>
<div style="text-align: center"> <div style="text-align: center">
<el-button type="primary" @click="handleLabelSubmit">{{$t('修改箱号')}}</el-button> <el-button type="primary" @click="handleLabelSubmit">{{
$t("修改箱号")
}}</el-button>
</div> </div>
</el-card> </el-card>
<h2 v-if="orderSpecialNeeds.length > 0">{{$t('特殊需求')}}</h2> <h2 v-if="orderSpecialNeeds.length > 0">{{ $t("特殊需求") }}</h2>
<el-form ref="form" :model="form" label-width="200px"> <el-form ref="form" :model="form" label-width="200px">
<el-form-item :label="$i18n.locale === 'en_US' ? item.labelEn : item.label" v-for="(item, index) in orderSpecialNeeds" :key="item.value" style="width: 600px"> <el-form-item
<el-input-number v-model="form.orderSpecialNeedReceivableReqVoList[index].receivableMoney" type="number" :min="0" step-strictly :placeholder="$t('请输入') + ($i18n.locale === 'en_US' ? item.labelEn : item.label)"></el-input-number> :label="$i18n.locale === 'en_US' ? item.labelEn : item.label"
<el-select v-model="form.orderSpecialNeedReceivableReqVoList[index].receivableMoneyCurrency" :placeholder="$t('请选择')" style="width: 100px"> v-for="(item, index) in orderSpecialNeeds"
:key="item.value"
style="width: 600px"
>
<el-input-number
v-model="
form.orderSpecialNeedReceivableReqVoList[index].receivableMoney
"
type="number"
:min="0"
step-strictly
:placeholder="
$t('请输入') +
($i18n.locale === 'en_US' ? item.labelEn : item.label)
"
></el-input-number>
<el-select
v-model="
form.orderSpecialNeedReceivableReqVoList[index]
.receivableMoneyCurrency
"
:placeholder="$t('请选择')"
style="width: 100px"
>
<el-option <el-option
v-for="item in currencyList" v-for="item in currencyList"
:key="item.id" :key="item.id"
:label="$i18n.locale === 'en_US' ? item.titleEn : item.titleZh" :label="$i18n.locale === 'en_US' ? item.titleEn : item.titleZh"
:value="item.id"> :value="item.id"
>
</el-option> </el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<h2>{{$t('订单数据')}}</h2> <h2>{{ $t("订单数据") }}</h2>
<el-form-item :label="$t('总方数')" style="width: 380px"> <el-form-item :label="$t('总方数')" style="width: 380px">
<el-input v-model="form.sumVolume" :placeholder="$t('请输入总方数')" readonly> <el-input
v-model="form.sumVolume"
:placeholder="$t('请输入总方数')"
readonly
>
<span slot="append"></span> <span slot="append"></span>
</el-input> </el-input>
</el-form-item> </el-form-item>
<el-form-item :label="$t('总重量')" style="width: 380px"> <el-form-item :label="$t('总重量')" style="width: 380px">
<el-input v-model="form.sumWeight" :placeholder="$t('请输入总重量')" readonly> <el-input
v-model="form.sumWeight"
:placeholder="$t('请输入总重量')"
readonly
>
<span slot="append">kg</span> <span slot="append">kg</span>
</el-input> </el-input>
</el-form-item> </el-form-item>
<el-card style="margin-top: 15px;"> <el-card style="margin-top: 15px">
<div slot="header" class="clearfix"> <div slot="header" class="clearfix">
<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" ></image-and-video-upload> <image-and-video-upload
readonly
:fileSize="50"
:isShowTip="true"
:value="form.urls"
></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
<el-button @click="escapeBol = true;" type="primary">{{$t('转异')}}</el-button> style="text-align: center; margin-top: 15px"
<el-button type="primary" @click="finishVisible = true">{{$t('完成入仓')}}</el-button> v-if="!(order.status !== 3 && isEdit)"
>
<el-button @click="escapeBol = true" type="primary">{{
$t("转异")
}}</el-button>
<el-button type="primary" @click="finishVisible = true">{{
$t("完成入仓")
}}</el-button>
</div> </div>
</el-form> </el-form>
<warehouse-area-dialog ref="area" :visible.sync="areaVisible" v-model="form.orderLocationCreateReqVOList" <warehouse-area-dialog
:order-id="orderId" :warehouse-id="warehouseId" :is-editing="isEdit"></warehouse-area-dialog> ref="area"
:visible.sync="areaVisible"
v-model="form.orderLocationCreateReqVOList"
:order-id="orderId"
:warehouse-id="warehouseId"
:is-editing="isEdit"
></warehouse-area-dialog>
<!-- 完成入仓 --> <!-- 完成入仓 -->
<el-dialog <el-dialog
:title="$t('确认入仓')" :title="$t('确认入仓')"
:visible.sync="finishVisible" :visible.sync="finishVisible"
width="300px"> width="300px"
<div style="text-align: center">{{$t('在完成入仓前,您还可以')}}</div> >
<div style="text-align: center;padding: 15px 0"> <div style="text-align: center">{{ $t("在完成入仓前,您还可以") }}</div>
<!-- <el-button type="info" @click="areaVisible = true">{{$t('选择储位')}}</el-button>--> <div style="text-align: center; padding: 15px 0">
<el-button type="info" @click="isShowPrintTag = true">{{$t('打印标签')}}</el-button> <!-- <el-button type="info" @click="areaVisible = true">{{$t('选择储位')}}</el-button>-->
<el-button type="info" @click="isShowPrintTag = true">{{
$t("打印标签")
}}</el-button>
</div> </div>
<div style="text-align: center"> <div style="text-align: center">
<el-button type="primary" @click="handleSubmit()">{{$t('确 定')}}</el-button> <el-button type="primary" @click="handleSubmit()">{{
$t("确 定")
}}</el-button>
</div> </div>
</el-dialog> </el-dialog>
<el-dialog :title="order.orderNo + $t('订单转异')" center :visible.sync="escapeBol"> <el-dialog
<el-form label-position="top" label-width="200" ref="exceptionForm" :model="form" :rules="exceptionRules"> :title="order.orderNo + $t('订单转异')"
center
:visible.sync="escapeBol"
>
<el-form
label-position="top"
label-width="200"
ref="exceptionForm"
:model="form"
:rules="exceptionRules"
>
<el-form-item :label="$t('原因类型')" prop="manualExceptionType"> <el-form-item :label="$t('原因类型')" prop="manualExceptionType">
<dict-selector v-model="form.manualExceptionType" form-type="checkbox" :type="DICT_TYPE.MANUAL_EXCEPTION_TYPE" multiple ></dict-selector> <dict-selector
v-model="form.manualExceptionType"
form-type="checkbox"
:type="DICT_TYPE.MANUAL_EXCEPTION_TYPE"
multiple
></dict-selector>
</el-form-item> </el-form-item>
<el-form-item :label="$t('附件')"> <el-form-item :label="$t('附件')">
<image-upload v-model="form.exceptionUrls"></image-upload> <image-upload v-model="form.exceptionUrls"></image-upload>
...@@ -202,39 +321,51 @@ ...@@ -202,39 +321,51 @@
</el-form-item> </el-form-item>
</el-form> </el-form>
<span slot="footer" class="dialog-footer"> <span slot="footer" class="dialog-footer">
<el-button type="primary" @click="handleException">{{$t('确认并完成入仓')}}</el-button> <el-button type="primary" @click="handleException">{{
<el-button @click="escapeBol = false">{{$t('取消')}}</el-button> $t("确认并完成入仓")
}}</el-button>
<el-button @click="escapeBol = false">{{ $t("取消") }}</el-button>
</span> </span>
</el-dialog> </el-dialog>
<print-tag v-if="isShowPrintTag" :order-id="orderId" @close="isShowPrintTag = false"></print-tag> <print-tag
v-if="isShowPrintTag"
:order-id="orderId"
@close="isShowPrintTag = false"
></print-tag>
<print-warehouse-receipt v-if="isShowPrint" :order-id="orderId" @close="isShowPrint = false" /> <print-warehouse-receipt
v-if="isShowPrint"
:order-id="orderId"
@close="isShowPrint = false"
/>
</div> </div>
</template> </template>
<script> <script>
import {getCurrencyList} from "@/api/ecw/currency" import { getCurrencyList } from "@/api/ecw/currency";
import { import {
getLabelByOrder, getLabelWaitInByOrder, getLabelByOrder,
getLabelWaitInByOrder,
getOrder, getOrder,
getOrderWarehouseIn, getOrderWarehouseIn,
getSpecialListByOrderId, listByOrderId, getSpecialListByOrderId,
orderWarehouseInFinish, orderWarehouseInUpdateLabel, listByOrderId,
rollbackDelete, warehousePictureList orderWarehouseInFinish,
} from '@/api/ecw/order' orderWarehouseInUpdateLabel,
import orderBaseInfo from "@/components/OrderBaseInfo" rollbackDelete,
import WarehouseAreaDialog from '@/components/WarehouseAreaDialog' warehousePictureList,
import {DICT_TYPE} from "@/utils/dict" } from "@/api/ecw/order";
import PrintTag from "@/views/ecw/order/components/PrintTag" import orderBaseInfo from "@/components/OrderBaseInfo";
import PrintWarehouseReceipt from "@/views/ecw/order/components/PrintWarehouseReceipt" import WarehouseAreaDialog from "@/components/WarehouseAreaDialog";
import { DICT_TYPE } from "@/utils/dict";
import PrintTag from "@/views/ecw/order/components/PrintTag";
import PrintWarehouseReceipt from "@/views/ecw/order/components/PrintWarehouseReceipt";
import imageUpload from "@/components/ImageUpload"; import imageUpload from "@/components/ImageUpload";
import {parseTime} from "@/utils/ruoyi" import { parseTime } from "@/utils/ruoyi";
import ImageAndVideoUpload from '@/components/ImageAndVideoUpload' import ImageAndVideoUpload from "@/components/ImageAndVideoUpload";
import Warehouse from "@/views/ecw/order/warehousing/components/Warehouse" import Warehouse from "@/views/ecw/order/warehousing/components/Warehouse";
export default { export default {
name: "Warehousing", name: "Warehousing",
components: { components: {
orderBaseInfo, orderBaseInfo,
WarehouseAreaDialog, WarehouseAreaDialog,
...@@ -242,28 +373,30 @@ export default { ...@@ -242,28 +373,30 @@ export default {
PrintWarehouseReceipt, PrintWarehouseReceipt,
imageUpload, imageUpload,
ImageAndVideoUpload, ImageAndVideoUpload,
Warehouse Warehouse,
}, },
mounted() { mounted() {
if(this.$route.query.id){ if (this.$route.query.id) {
this.orderId = parseInt(this.$route.query.id || undefined) this.orderId = parseInt(this.$route.query.id || undefined);
this.getOrderItemList() this.getOrderItemList();
getSpecialListByOrderId(this.orderId).then(r => this.specialList = r.data) getSpecialListByOrderId(this.orderId).then(
(r) => (this.specialList = r.data)
);
Promise.all([ Promise.all([
this.getOrder(), this.getOrder(),
listByOrderId({ orderId: this.orderId }).then(r => { listByOrderId({ orderId: this.orderId }).then((r) => {
this.form.orderLocationCreateReqVOList = r.data this.form.orderLocationCreateReqVOList = r.data;
}) }),
]).then(() => { ]).then(() => {
// 等待仓库id和已选的储位后初始化储位信息 // 等待仓库id和已选的储位后初始化储位信息
this.$nextTick(() => { this.$nextTick(() => {
this.$refs.area.updateArea() this.$refs.area.updateArea();
}) });
}) });
} }
getCurrencyList().then(res => this.currencyList = res.data) getCurrencyList().then((res) => (this.currencyList = res.data));
}, },
data() { data() {
...@@ -276,14 +409,14 @@ export default { ...@@ -276,14 +409,14 @@ export default {
form: { form: {
orderSpecialNeedReceivableReqVoList: [], orderSpecialNeedReceivableReqVoList: [],
orderLocationCreateReqVOList: [], orderLocationCreateReqVOList: [],
exceptionUrls:[], exceptionUrls: [],
descZh:'', descZh: "",
manualExceptionType:[], manualExceptionType: [],
urls: [], urls: [],
sumVolume: '', sumVolume: "",
sumWeight: '', sumWeight: "",
}, },
currencyList:[], currencyList: [],
order: {}, order: {},
orderId: undefined, orderId: undefined,
orderItemList: [], orderItemList: [],
...@@ -291,262 +424,287 @@ export default { ...@@ -291,262 +424,287 @@ export default {
warehousing: undefined, warehousing: undefined,
isShowPrintTag: false, isShowPrintTag: false,
isShowPrint: false, isShowPrint: false,
escapeBol:false, escapeBol: false,
label: { label: {
"orderId": 0, orderId: 0,
"orderLabelDtoList": [ orderLabelDtoList: [
{ {
"end": 0, end: 0,
"start": 0 start: 0,
} },
] ],
}, },
exceptionRules: { exceptionRules: {
manualExceptionType: [ manualExceptionType: [
{ required: true, message: '请勾选原因类型', trigger: 'change' }, { required: true, message: "请勾选原因类型", trigger: "change" },
{ {
validator: (rule, value, callback) => { validator: (rule, value, callback) => {
if (value.length <= 0) { if (value.length <= 0) {
callback(new Error('请勾选原因类型')) callback(new Error("请勾选原因类型"));
}
callback()
}, trigger: 'change'
}
]
}
} }
callback();
},
trigger: "change",
},
],
},
};
}, },
methods: { methods: {
getOrderItemList(){ getOrderItemList() {
this.orderItemList = [] this.orderItemList = [];
return getOrderWarehouseIn(this.orderId).then(r => this.orderItemList = r.data) return getOrderWarehouseIn(this.orderId).then(
(r) => (this.orderItemList = r.data)
);
}, },
getList(){ getList() {
this.getOrder() this.getOrder();
this.getOrderItemList() this.getOrderItemList();
}, },
getWarehousePictureList(){ getWarehousePictureList() {
return warehousePictureList({ return warehousePictureList({
bizId: this.order.orderId, bizId: this.order.orderId,
type: 1 type: 1,
}).then(r =>{ }).then((r) => {
this.form.urls = r.data.map(i =>i.url) this.form.urls = r.data.map((i) => i.url);
}) });
}, },
include(){ include() {
return (state, arr) => { return (state, arr) => {
return arr.indexOf(state) > -1 return arr.indexOf(state) > -1;
} };
}, },
exclude(){ exclude() {
return (state, arr) => { return (state, arr) => {
return arr.indexOf(state) == -1 return arr.indexOf(state) == -1;
} };
}, },
handleLabelSubmit(){ handleLabelSubmit() {
orderWarehouseInUpdateLabel({ orderWarehouseInUpdateLabel({
...this.label, ...this.label,
orderId: this.orderId orderId: this.orderId,
}).then(r => { }).then((r) => {
if (r.code === 0){ if (r.code === 0) {
this.$message.success(r.msg || this.$t('修改标签箱号成功')) this.$message.success(r.msg || this.$t("修改标签箱号成功"));
} }
}) });
}, },
// 箱号标签回显 // 箱号标签回显
getLabelByOrder(){ getLabelByOrder() {
getLabelByOrder(this.orderId).then(r => { getLabelByOrder(this.orderId).then((r) => {
if (r.code === 0 && !! r.data && r.data.length > 0) { if (r.code === 0 && !!r.data && r.data.length > 0) {
this.label.orderLabelDtoList = r.data this.label.orderLabelDtoList = r.data;
} else { } else {
// 没有历史数据,查默认值 // 没有历史数据,查默认值
getLabelWaitInByOrder(this.orderId).then(r => { getLabelWaitInByOrder(this.orderId).then((r) => {
console.log(r) console.log(r);
if (r.code === 0 && !! r.data) { if (r.code === 0 && !!r.data) {
this.label.orderLabelDtoList = [r.data] this.label.orderLabelDtoList = [r.data];
} }
}) });
} }
}) });
}, },
handleLabelAdd(index){ handleLabelAdd(index) {
this.label.orderLabelDtoList.splice(index + 1, 0, { this.label.orderLabelDtoList.splice(index + 1, 0, {
"end": '', end: "",
"start": '' start: "",
}) });
}, },
getTowSum(){ getTowSum() {
// let sumVolume = 0 // let sumVolume = 0
// let sumWeight = 0 // let sumWeight = 0
// this.order.orderItemVOList.forEach(e => { // this.order.orderItemVOList.forEach(e => {
// if (e?.warehouseInInfoVO?.volume) sumVolume += e.warehouseInInfoVO.volume // if (e?.warehouseInInfoVO?.volume) sumVolume += e.warehouseInInfoVO.volume
// if (e?.warehouseInInfoVO?.weight) sumWeight += e.warehouseInInfoVO.weight // if (e?.warehouseInInfoVO?.weight) sumWeight += e.warehouseInInfoVO.weight
// }) // })
this.form.sumVolume = this.order.sumVolume// || sumVolume this.form.sumVolume = this.order.sumVolume; // || sumVolume
this.form.sumWeight = this.order.sumWeight// || sumWeight this.form.sumWeight = this.order.sumWeight; // || sumWeight
}, },
getOrder(){ getOrder() {
return getOrder(this.orderId).then(r => { return getOrder(this.orderId)
this.order = r.data .then((r) => {
this.getTowSum() this.order = r.data;
}).then(() => { this.getTowSum();
this.getLabelByOrder()
this.getWarehousePictureList()
}) })
.then(() => {
this.getLabelByOrder();
this.getWarehousePictureList();
});
}, },
specialHas0(){ specialHas0() {
let result = false let result = false;
this.form.orderSpecialNeedReceivableReqVoList.forEach(e => { this.form.orderSpecialNeedReceivableReqVoList.forEach((e) => {
if (e.receivableMoney === '0' || e.receivableMoney === ''){ if (e.receivableMoney === "0" || e.receivableMoney === "") {
result = true result = true;
} }
}) });
return result return result;
}, },
handleException() { handleException() {
this.$refs.exceptionForm.validate((valid) => { this.$refs.exceptionForm.validate((valid) => {
if (valid) { if (valid) {
this.handleSubmit() this.handleSubmit();
} else { } else {
this.$message.warning('请勾选原因类型') this.$message.warning("请勾选原因类型");
} }
}) });
}, },
async handleSubmit() { async handleSubmit() {
if (this.specialHas0()) { if (this.specialHas0()) {
const confirm = await this.$confirm(this.$t('有特需费用为0或未填写,请问是否继续?'), this.$t('注意'), { const confirm = await this.$confirm(
confirmButtonText: this.$t('继续'), this.$t("有特需费用为0或未填写,请问是否继续?"),
cancelButtonText: this.$t('取消'), this.$t("注意"),
type: 'warning' {
}) confirmButtonText: this.$t("继续"),
if (confirm !== 'confirm'){ cancelButtonText: this.$t("取消"),
return type: "warning",
}
);
if (confirm !== "confirm") {
return;
} }
} }
let form = { let form = {
orderSpecialNeedReceivableReqVoList: this.form.orderSpecialNeedReceivableReqVoList, orderSpecialNeedReceivableReqVoList:
"orderLocationCreateReqVOList": this.form.orderLocationCreateReqVOList, this.form.orderSpecialNeedReceivableReqVoList,
"orderId": this.order.orderId, orderLocationCreateReqVOList: this.form.orderLocationCreateReqVOList,
orderId: this.order.orderId,
// urls: this.form.urls, // urls: this.form.urls,
sumVolume: this.form.sumVolume, sumVolume: this.form.sumVolume,
sumWeight: this.form.sumWeight, sumWeight: this.form.sumWeight,
isAppend: this.isAdd isAppend: this.isAdd,
} };
// 标签箱号 // 标签箱号
if (this.order.parentOrderId) { if (this.order.parentOrderId) {
form.labelList = this.label.orderLabelDtoList || [] form.labelList = this.label.orderLabelDtoList || [];
} }
if (this.escapeBol) { if (this.escapeBol) {
form.exceptionUrls = this.form.exceptionUrls.length !== 0 ? this.form.exceptionUrls?.split(',') : [] form.exceptionUrls =
this.form.exceptionUrls.length !== 0
? this.form.exceptionUrls?.split(",")
: [];
form.descZh = this.form.descZh; form.descZh = this.form.descZh;
form.manualExceptionType = this.form.manualExceptionType.join(',') form.manualExceptionType = this.form.manualExceptionType.join(",");
} }
orderWarehouseInFinish(form).then(r => { orderWarehouseInFinish(form).then((r) => {
if (r.code === 0) { if (r.code === 0) {
this.escapeBol = false; this.escapeBol = false;
this.finishVisible = false this.finishVisible = false;
const message = !r.data ? this.$t('该订单已成功入仓,是否打印?') : `<h3>${this.$t('货物已入仓,存在异常')}</h3>${this.$t('该订单已成功入仓,是否打印?')}` const message = !r.data
this.$confirm( ? this.$t("该订单已成功入仓,是否打印?")
message, : `<h3>${this.$t("货物已入仓,存在异常")}</h3>${this.$t(
this.$t('货物已入仓'), "该订单已成功入仓,是否打印?"
{ )}`;
confirmButtonText: this.$t(''), this.$confirm(message, this.$t("货物已入仓"), {
cancelButtonText: this.$t(''), confirmButtonText: this.$t(""),
dangerouslyUseHTMLString: true cancelButtonText: this.$t(""),
} dangerouslyUseHTMLString: true,
).then(() => {
this.isShowPrint = true
}).catch(() => {
// this.$store.dispatch('tagsView/delVisitedView')
this.$message.success(this.$t('入仓成功'))
this.$tab.closePage()
}) })
} .then(() => {
this.isShowPrint = true;
}) })
.catch(() => {
// this.$store.dispatch('tagsView/delVisitedView')
this.$message.success(this.$t("入仓成功"));
this.$tab.closePage();
});
}
});
}, },
handleWarehousingReturn(item){ handleWarehousingReturn(item) {
this.$confirm(item.prodTitleZh + this.$t('退仓后不可恢复,是否确认退仓?'), this.$t('确定要退仓?'), { this.$confirm(
confirmButtonText: this.$t('确定'), item.prodTitleZh + this.$t("退仓后不可恢复,是否确认退仓?"),
cancelButtonText: this.$t('取消'), this.$t("确定要退仓?"),
type: 'warning' {
}).then(() => { confirmButtonText: this.$t("确定"),
cancelButtonText: this.$t("取消"),
type: "warning",
}
)
.then(() => {
rollbackDelete({ rollbackDelete({
"orderId": item.orderId, orderId: item.orderId,
"orderItemId": item.orderItemId orderItemId: item.orderItemId,
}).then(() => { }).then(() => {
this.$message({ this.$message({
type: 'success', type: "success",
message: this.$t('货物退仓成功!') message: this.$t("货物退仓成功!"),
}); });
this.getOrderItemList() this.getOrderItemList();
this.getOrder() this.getOrder();
})
}).catch(e => {
}); });
} })
.catch((e) => {});
},
}, },
watch: { watch: {
orderSpecialNeeds(val){ orderSpecialNeeds(val) {
val.forEach(e => { val.forEach((e) => {
this.form.orderSpecialNeedReceivableReqVoList.push({ this.form.orderSpecialNeedReceivableReqVoList.push({
"id": e.id, id: e.id,
"receivableMoney": e.transFee || '', receivableMoney: e.transFee || "",
"receivableMoneyCurrency": e.transCurrency || 3 receivableMoneyCurrency: e.transCurrency || 3,
}) });
}) });
} },
}, },
computed: { computed: {
// 根据orderItemId获取入仓item // 根据orderItemId获取入仓item
wareItem(){ wareItem() {
return orderItemId => { return (orderItemId) => {
return this.orderItemList.find(item => item.orderItemId == orderItemId) return this.orderItemList.find(
} (item) => item.orderItemId == orderItemId
);
};
}, },
isAdd() { isAdd() {
return this.$route.path === "/order/warehousing-add" return this.$route.path === "/order/warehousing-add";
}, },
isEdit() { isEdit() {
return this.$route.path === "/order/warehousing-update" return this.$route.path === "/order/warehousing-update";
}, },
title() { title() {
return this.$i18n.locale === 'en_US' ? this.$route.meta.titleEn : this.$route.name return this.$i18n.locale === "en_US"
? this.$route.meta.titleEn
: this.$route.name;
}, },
orderSpecialNeedsDict() { orderSpecialNeedsDict() {
return this.$store.state.dict.dictDatas.order_special_needs return this.$store.state.dict.dictDatas.order_special_needs;
},
orderSpecialNeeds(){
const result = []
this.specialList.forEach(e => {
const t = this.orderSpecialNeedsDict.find(f => f.value === e.advanceType)
if(t) {
result.push({...e, label: t.label, labelEn: t.labelEn})
}
})
return result
}, },
warehouseId(){ orderSpecialNeeds() {
return this.order?.logisticsInfoDto?.startWarehouseId const result = [];
} this.specialList.forEach((e) => {
const t = this.orderSpecialNeedsDict.find(
(f) => f.value === e.advanceType
);
if (t) {
result.push({ ...e, label: t.label, labelEn: t.labelEn });
} }
} });
return result;
},
warehouseId() {
return this.order?.logisticsInfoDto?.startWarehouseId;
},
},
};
</script> </script>
<style scoped lang="scss"> <style scoped lang="scss">
@import "src/assets/styles/element-variables"; @import "src/assets/styles/element-variables";
.red{ .red {
color: $--color-danger; color: $--color-danger;
} }
.green{ .green {
color: $--color-success; color: $--color-success;
} }
</style> </style>
<template>
<!-- 订单获取入仓记录 -->
<el-dialog
:title="title"
visible
:before-close="closeDialog"
:close-on-click-modal="false"
width="1000px"
>
<el-table :data="warehouseItem">
<el-table-column type="index" :label="$t('序号')" />
<el-table-column :label="$t('箱数')" prop="cartonsNum">
<template slot-scope="{ row }">
<template
v-if="
row.orderWarehouseInDetailsVOList &&
row.orderWarehouseInDetailsVOList.length
"
>
<WarehouseRecordDetail
v-model="row.orderWarehouseInDetailsVOList"
:num="row.cartonsNum"
text
readonly
/>
</template>
<template v-else>{{ row.cartonsNum }}</template>
</template>
</el-table-column>
<el-table-column :label="$t('入仓类型')" prop="cartonsNum">
<template slot-scope="{ row }">
<dict-tag
:type="DICT_TYPE.WAREHOUSING_SPECIFICATION_TYPE"
:value="row.specificationType"
/>
</template>
</el-table-column>
<el-table-column :label="$t('包装类型')" prop="unit">
<template slot-scope="{ row }">
<dict-tag :type="DICT_TYPE.ECW_PACKAGING_TYPE" :value="row.unit" />
</template>
</el-table-column>
<el-table-column :label="$t('长')" prop="boxGauge">
<template slot-scope="{ row }">
{{ row.boxGauge.split("*")[0] }}
</template>
</el-table-column>
<el-table-column :label="$t('宽')" prop="boxGauge">
<template slot-scope="{ row }">
{{ row.boxGauge.split("*")[1] }}
</template>
</el-table-column>
<el-table-column :label="$t('高')" prop="boxGauge">
<template slot-scope="{ row }">
{{ row.boxGauge.split("*")[2] }}
</template>
</el-table-column>
<el-table-column :label="$t('体积') + '(m³)'" prop="volume" />
<el-table-column :label="$t('重量') + '(kg)'" prop="weight" />
<el-table-column :label="$t('数量(个)')" prop="quantityAll" />
<el-table-column :label="$t('入仓快递单号')" prop="expressNo" />
<el-table-column :label="$t('首次入仓时间')" prop="inTime">
<template slot-scope="{ row }">{{ row.inTime | parseTime }}</template>
</el-table-column>
<el-table-column :label="$t('储位')" prop="orderLocationBackVOList">
<template slot-scope="{ row }">
{{ getLocationName(row.orderLocationBackVOList) }}
</template>
</el-table-column>
<el-table-column :label="$t('入仓影像')" prop="orderLocationBackVOList">
<template slot-scope="{ row }">
<image-display :pictureUrls="warehouseItem.pictureUrls" :type="5">
<el-button type="text"> 查看 </el-button>
</image-display>
</template>
</el-table-column>
<el-table-column :label="$t('备注')" prop="remark">
<template slot-scope="{ row }">
{{ row.remark }}
</template>
</el-table-column>
</el-table>
</el-dialog>
</template>
<script>
import { getOrderWarehouseIn } from "@/api/ecw/order";
import { parseTime } from "@/utils/ruoyi";
import WarehouseAreaSelect from "@/components/WarehouseAreaSelect";
import ImageDisplay from "@/views/ecw/order/components/imageDisplay.vue";
import WarehouseRecordDetail from "@/views/ecw/order/warehousing/components/WarehouseRecordDetail.vue";
export default {
components: {
WarehouseRecordDetail,
ImageDisplay,
WarehouseAreaSelect,
},
filters: { parseTime },
props: {
order: Object, // order 和 orderId 二选一
orderId: Number,
orderItemId: Number,
type: Number,
},
data() {
return {
warehouseItem: [],
};
},
computed: {
title() {
return this.$l(this.order, "orderNo") + " - " + this.$t("入仓记录");
},
},
created() {
this.show = true;
getOrderWarehouseIn(this.order.orderId).then((res) => {
this.warehouseItem = [];
for (var i = 0; i < res.data.length; i++) {
for (
var j = 0;
j < res.data[i].orderWarehouseInBackItemDoList.length;
j++
) {
this.warehouseItem.push(
res.data[i].orderWarehouseInBackItemDoList[j]
);
}
}
});
},
methods: {
// 获取储位名称
getLocationName(locationArr) {
if (!locationArr || !locationArr.length) return "";
let arr = [];
locationArr.forEach((item) => {
arr.push(`${item.areaName}${item.locationName || ""}`);
});
return Array.from(new Set(arr)).join(",");
},
closeDialog() {
this.show = false;
this.$emit("close");
},
seePackLog() {
this.$emit("openPackHistory", this.orderItemId);
},
},
};
</script>
...@@ -318,13 +318,19 @@ ...@@ -318,13 +318,19 @@
<tr> <tr>
<td><div class="cell"></div></td> <td><div class="cell"></div></td>
<td> <td>
<div class="cell">总箱数:{{ StatisticalSummary.sumBox }}</div> <div class="cell">
总箱数:{{ StatisticalSummary.sumBox }}
</div>
</td> </td>
<td> <td>
<div class="cell">总方数:{{ StatisticalSummary.sumM3 }}</div> <div class="cell">
总方数:{{ StatisticalSummary.sumM3 }}
</div>
</td> </td>
<td> <td>
<div class="cell">总重量:{{ StatisticalSummary.sumKG }}</div> <div class="cell">
总重量:{{ StatisticalSummary.sumKG }}
</div>
</td> </td>
<td> <td>
<div class="cell">总V值:{{ StatisticalSummary.sumV }}</div> <div class="cell">总V值:{{ StatisticalSummary.sumV }}</div>
...@@ -333,31 +339,47 @@ ...@@ -333,31 +339,47 @@
<tr> <tr>
<td><div class="cell">新客户</div></td> <td><div class="cell">新客户</div></td>
<td> <td>
<div class="cell">总箱数:{{ StatisticalSummary.sumBoxNew }}</div> <div class="cell">
总箱数:{{ StatisticalSummary.sumBoxNew }}
</div>
</td> </td>
<td> <td>
<div class="cell">总方数:{{ StatisticalSummary.sumM3New }}</div> <div class="cell">
总方数:{{ StatisticalSummary.sumM3New }}
</div>
</td> </td>
<td> <td>
<div class="cell">总重量:{{ StatisticalSummary.sumKGNew }}</div> <div class="cell">
总重量:{{ StatisticalSummary.sumKGNew }}
</div>
</td> </td>
<td> <td>
<div class="cell">总V值:{{ StatisticalSummary.sumVNew }}</div> <div class="cell">
总V值:{{ StatisticalSummary.sumVNew }}
</div>
</td> </td>
</tr> </tr>
<tr> <tr>
<td><div class="cell">旧客户</div></td> <td><div class="cell">旧客户</div></td>
<td> <td>
<div class="cell">总箱数:{{ StatisticalSummary.sumBoxOld }}</div> <div class="cell">
总箱数:{{ StatisticalSummary.sumBoxOld }}
</div>
</td> </td>
<td> <td>
<div class="cell">总方数:{{ StatisticalSummary.sumM3Old }}</div> <div class="cell">
总方数:{{ StatisticalSummary.sumM3Old }}
</div>
</td> </td>
<td> <td>
<div class="cell">总重量:{{ StatisticalSummary.sumKGOld }}</div> <div class="cell">
总重量:{{ StatisticalSummary.sumKGOld }}
</div>
</td> </td>
<td> <td>
<div class="cell">总V值:{{ StatisticalSummary.sumVOld }}</div> <div class="cell">
总V值:{{ StatisticalSummary.sumVOld }}
</div>
</td> </td>
</tr> </tr>
</tbody> </tbody>
...@@ -465,9 +487,15 @@ ...@@ -465,9 +487,15 @@
:limit.sync="queryParams.pageSize" :limit.sync="queryParams.pageSize"
@pagination="getList" @pagination="getList"
/> />
<WarehouseDetail-detail :order="order" :orderItemId="showWarehouseInItemId"
v-if="showWarehouseInItemId" @close="showWarehouseInItemId=null"> <warehouse-detail
</WarehouseDetail-detail> :order="order"
:orderItemId="showWarehouseInItemId"
:type="type"
@openPackHistory="openPackHistory"
v-if="showWarehouseInItemId"
@close="showWarehouseInItemId = null"
/>
</div> </div>
</template> </template>
...@@ -477,13 +505,17 @@ import { getCountryListAll } from "@/api/ecw/country"; ...@@ -477,13 +505,17 @@ import { getCountryListAll } from "@/api/ecw/country";
import Treeselect from "@riophae/vue-treeselect"; import Treeselect from "@riophae/vue-treeselect";
import "@/assets/styles/vue-treeselect.css"; import "@/assets/styles/vue-treeselect.css";
import { getWarehouseList } from "@/api/ecw/warehouse"; import { getWarehouseList } from "@/api/ecw/warehouse";
import { getListPage, exportExcel,getStatisticalSummary } from "@/api/report/salesanalysis"; import {
getListPage,
exportExcel,
getStatisticalSummary,
} from "@/api/report/salesanalysis";
import { getCurUserPermission } from "@/api/report/EcwReportPermission"; import { getCurUserPermission } from "@/api/report/EcwReportPermission";
import { getAllChannelList, getChannelList } from "@/api/ecw/channel"; import { getAllChannelList, getChannelList } from "@/api/ecw/channel";
import { listSimpleDepts } from "@/api/system/dept"; import { listSimpleDepts } from "@/api/system/dept";
import {getOrder} from "@/api/ecw/order"; import { getOrder } from "@/api/ecw/order";
//入仓记录页面 //入仓记录页面
import WarehouseDetail from "@/views/ecw/order/components/WarehouseDetail"; import WarehouseDetail from "@/views/report/WarehouseInDetail/index.vue";
//2024-05-01合并 //2024-05-01合并
export default { export default {
...@@ -509,6 +541,7 @@ export default { ...@@ -509,6 +541,7 @@ export default {
title: "", title: "",
// 是否显示弹出层 // 是否显示弹出层
open: false, open: false,
showDetail: false,
deptOptions: undefined, deptOptions: undefined,
dateRangeCreateTime: [], dateRangeCreateTime: [],
SearchType: [ SearchType: [
...@@ -563,20 +596,20 @@ export default { ...@@ -563,20 +596,20 @@ export default {
showWarehouseInItemId: undefined, showWarehouseInItemId: undefined,
order: null, order: null,
type: 1, type: 1,
StatisticalSummary:{ StatisticalSummary: {
sumBox:0, sumBox: 0,
sumM3:0, sumM3: 0,
sumKG:0, sumKG: 0,
sumV:0, sumV: 0,
sumBoxNew:0, sumBoxNew: 0,
sumM3New:0, sumM3New: 0,
sumKGNew:0, sumKGNew: 0,
sumVNew:0, sumVNew: 0,
sumBoxOld:0, sumBoxOld: 0,
sumM3Old:0, sumM3Old: 0,
sumKGOld:0, sumKGOld: 0,
sumVOld:0, sumVOld: 0,
} },
}; };
}, },
created() { created() {
...@@ -631,7 +664,6 @@ export default { ...@@ -631,7 +664,6 @@ export default {
getStatisticalSummary(params).then((response) => { getStatisticalSummary(params).then((response) => {
this.StatisticalSummary = response.data; this.StatisticalSummary = response.data;
}); });
}, },
/** 表单重置 */ /** 表单重置 */
...@@ -685,10 +717,15 @@ export default { ...@@ -685,10 +717,15 @@ export default {
// 显示入仓记录 // 显示入仓记录
showWarehouseLogs(row, type) { showWarehouseLogs(row, type) {
getOrder(row.orderId).then((response) => { getOrder(row.orderId).then((response) => {
this.order = response.data; this.order = response.data;//组件中只用到了此参数
this.showWarehouseInItemId = row.orderItemId; this.type = 2;
this.showWarehouseInItemId = 1;
}); });
}, },
openPackHistory(id) {
//查询打包历史
//this.shopPackId = id
},
/** 查询部门下拉树结构 + 岗位下拉 */ /** 查询部门下拉树结构 + 岗位下拉 */
getTreeselect() { getTreeselect() {
if (this.objEcwReportPermission.permissionFw == 3) { if (this.objEcwReportPermission.permissionFw == 3) {
......
...@@ -44,7 +44,7 @@ ...@@ -44,7 +44,7 @@
> >
{{ $t("新增") }}</el-button {{ $t("新增") }}</el-button
> >
<el-button type="primary" @click="test" v-show="true">测试</el-button> <el-button type="primary" @click="test" v-show="false">测试</el-button>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button
...@@ -170,6 +170,7 @@ import "@/assets/styles/vue-treeselect.css"; ...@@ -170,6 +170,7 @@ import "@/assets/styles/vue-treeselect.css";
import { MessageBox } from "element-ui"; import { MessageBox } from "element-ui";
//日期库函数 //日期库函数
import dayjs from "dayjs"; import dayjs from "dayjs";
import { getToken } from "@/utils/auth";
//2024-05-01合并 //2024-05-01合并
export default { export default {
...@@ -356,10 +357,13 @@ export default { ...@@ -356,10 +357,13 @@ export default {
}, },
test() { test() {
//单元测试函数 //单元测试函数
/*
var p = 12; var p = 12;
test(p).then((response) => { test(p).then((response) => {
this.$modal.msgSuccess("测试成功"); this.$modal.msgSuccess("测试成功");
}); });*/
var s = getToken();
alert(s);
}, },
TestFun() { TestFun() {
var bR = dayjs("2024-05-11").isBefore(dayjs("2024-05-12")); var bR = dayjs("2024-05-11").isBefore(dayjs("2024-05-12"));
......
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