Commit 498ce1bf authored by wux's avatar wux

Merge remote-tracking branch 'origin/pre-release' into pre-release

parents 89ffcf89 5402f91a
......@@ -7,7 +7,7 @@ VUE_APP_TITLE = 捷道管理系统-测试站
# 捷道管理系统/开发环境
VUE_APP_BASE_API = 'https://devapi.jd.qipx.top'
# VUE_APP_BASE_API = 'https://apitest.groupage.cn'
# VUE_APP_BASE_API = 'http://110.41.143.128:48080'
# VUE_APP_BASE_API = 'http://127.0.0.1:48080'
......
......@@ -10,7 +10,7 @@ ENV = 'staging'
VUE_APP_BASE_API = 'https://api.jd.qipx.top'
# 静态资源地址
# PUBLIC_PATH = 'https://static.jd.qipx.top/'
#PUBLIC_PATH = 'https://static.jd.qipx.top/'
# 多租户的开关
VUE_APP_TENANT_ENABLE = false
......
......@@ -127,7 +127,7 @@ export function getCostList(params) {
});
}
// 收款单表 SELECT * from ecw_payment
// 应付款表 SELECT * from ecw_payable
// 应付款表 SELECT * from ecw_payable
// 根据明细获取主表ID
export function getPaymentId(id) {
return request({
......@@ -214,6 +214,13 @@ export function deleteBillService(id) {
method: "delete",
});
}
// 检查提单状态是否已制作提单
export function checkBillOfLadingService(orderId) {
return request({
url: "/shipment/make-bill-of-lading/check/billOfLading/" + orderId,
method: "post",
});
}
// 获得制作提货单
export function getBillService(params) {
......
......@@ -60,13 +60,22 @@ export function exportCustomerFollowExcel(query) {
})
}
export function getCustomerFollowList(params) {
// 跟进分页列表
export function getCustomerFollowupList(params) {
return request({
url: "/customer/followup/page",
method: "get",
params
})
}
// 数据权限跟进分页列表
export function getDataSpaceCustomerFollowupList(params) {
return request({
url: "/customer/followup/data/space/page",
method: "get",
params
})
}
export function getCustomerFollowDetail(params) {
return request({
......@@ -99,7 +108,7 @@ export function updateCustomerFollowupStatus(data) {
})
}
export function exportCustomerFollow(params) {
export function exportCustomerFollowup(params) {
return request({
url: "/customer/followup/export-excel",
method: "get",
......@@ -107,6 +116,16 @@ export function exportCustomerFollow(params) {
})
}
// 数据权限导出跟进 Excel
export function exportDataSpaceCustomerFollowup(query) {
return request({
url: "/customer/followup/data/space/export-excel",
method: "get",
params: query,
responseType: "blob"
})
}
export function getFollowupNewNumber() {
return request({
url: "/customer/followup/getFollowupNewNumber",
......
......@@ -164,7 +164,7 @@ export function appendApplyWhenShipment(data) {
export function updateApplyWhenShipment(data) {
return request({
url: '/order/order-warehouse-in/update-apply-when-shipment',
method: 'post',
method: 'put',
data
})
}
<template>
<div class="dict-selector">
<selector v-model="valueSync" :options="countryList" value-field="tel" key-field="id" :label-field="item => $l(item, 'name') + ' +' + item.tel" filterable clearable :disabled="disabled"></selector>
</div>
</template>
<script>
import {getCountryListAll} from '@/api/ecw/country'
......
<template>
<template xmlns="http://www.w3.org/1999/html">
<el-dialog
:title="$t('选择联系人')"
visible
......@@ -6,11 +6,18 @@
:close-on-click-modal="false"
>
<div class="header mb-10 flex-center">
<div class="flex-center">{{ $t("关键字") }}</div>
<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-form :model="form" size="small" :inline="true" label-width="80px">
<el-form-item :label="$t('电话')" prop="phone">
<el-input v-model="form.phone" @change="replaceBlank" clearable class="w-160"></el-input>
</el-form-item>
<el-form-item :label="$t('关键字')" prop="searchKey">
<el-input v-model="form.searchKey" @change="replaceBlank" clearable class="w-160"></el-input>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" @click="handleQuery">{{ $t("搜索") }}</el-button>
</el-form-item>
</el-form>
</div>
<div class="list">
<div
......@@ -66,7 +73,9 @@ import {
getCustomerContactsSelect,
getCustomerContactsSelect2,
} from "@/api/ecw/customerContacts";
import UserSelector from "@/components/UserSelector/index.vue";
export default {
components: {UserSelector},
props: {
type: Number,
},
......@@ -89,6 +98,7 @@ export default {
methods: {
handleQuery() {
this.form.pageNo = 1;
this.replaceBlank()
this.loadList();
},
loadList() {
......@@ -112,6 +122,15 @@ export default {
choose(contact) {
this.$emit("choose", contact);
},
replaceBlank(){
// JDAA-177 7.选择联系人弹出页,没有去掉中间和前后空格
if(this.form.phone){
this.form.phone = this.form.phone.replace(/\s+/g, '');
}
if(this.form.searchKey) {
this.form.searchKey = this.form.searchKey.replace(/\s+/g, '');
}
}
},
};
</script>
......
<template>
<div class="dict-selector">
<el-select
v-if="formType == 'select'"
v-model="valueSync"
:placeholder="placeholder || $t('请选择')"
:clearable="clearable"
:multiple="multiple"
:disabled="disabled"
@change="(val) => $emit('change', val)"
>
<el-option
v-for="dict in formattedList"
:key="dict.value"
:label="$l(dict, 'label')"
:value="dict.value"
/>
<el-select v-if="formType == 'select'" v-model="valueSync" filterable :placeholder="placeholder || $t('请选择')" :clearable="clearable" :multiple="multiple" :disabled="disabled" @change="(val) => $emit('change', val)">
<el-option v-for="dict in formattedList" :key="dict.value" :label="$l(dict, 'label')" :value="dict.value" />
</el-select>
<el-radio-group
v-if="formType == 'radio'"
v-model="valueSync"
:disabled="disabled"
>
<el-radio
v-for="dict in formattedList"
:label="dict.value"
:checked="valueSync === dict.value"
:key="dict.value"
>{{ $l(dict, "label") }}</el-radio
>
<el-radio-group v-if="formType == 'radio'" v-model="valueSync" :disabled="disabled">
<el-radio v-for="dict in formattedList" :label="dict.value" :checked="valueSync === dict.value" :key="dict.value">{{ $l(dict, "label") }}</el-radio>
</el-radio-group>
<el-checkbox-group
v-if="formType == 'checkbox'"
v-model="valueSync"
:disabled="disabled"
>
<el-checkbox
v-for="dict in formattedList"
:label="dict.value"
:key="dict.value"
>{{ $l(dict, "label") }}</el-checkbox
>
<el-checkbox-group v-if="formType == 'checkbox'" v-model="valueSync" :disabled="disabled">
<el-checkbox v-for="dict in formattedList" :label="dict.value" :key="dict.value">{{ $l(dict, "label") }}</el-checkbox>
</el-checkbox-group>
</div>
</template>
......@@ -47,31 +15,29 @@
const FORMATTERS = {
string: String,
bool: function (val) {
return [false, "false", 0, "0"].indexOf(val) < 0;
return [false, "false", 0, "0"].indexOf(val) < 0
},
number: Number,
array: function (val) {
return typeof val == "string"
? val.split(",").filter((item) => item && item !== "")
: val;
},
};
return typeof val == "string" ? val.split(",").filter((item) => item && item !== "") : val
}
}
export default {
props: {
placeholder: {
type: String,
default: null,
default: null
},
type: String,
value: [String, Number, Array, Boolean],
multiple: Boolean,
formType: {
type: String,
default: "select",
default: "select"
},
formatter: {
type: [Function, String],
default: String,
default: String
},
defaultable: Boolean, // 是否默认选择第一个
disabled: Boolean,
......@@ -80,104 +46,92 @@ export default {
*/
filter: {
type: Function,
default: () => true,
default: () => true
},
clearable: Boolean,
clearable: Boolean
},
data() {
return {
valueSync: this.multiple ? [] : null,
};
valueSync: this.multiple ? [] : null
}
},
computed: {
dicts() {
return this.getList(this.type);
return this.getList(this.type)
},
dictList() {
return this.dicts.filter(this.filter);
return this.dicts.filter(this.filter)
},
formattedList() {
let arr = [];
let arr = []
this.dictList.forEach((item) => {
arr.push({
label: item.label,
labelEn: item.labelEn,
value: this.format(item.value),
cssClass: item.cssClass,
colorType: item.colorType,
});
});
return arr;
},
colorType: item.colorType
})
})
return arr
}
},
watch: {
valueSync(val) {
this.$emit("input", val);
this.$emit("input", val)
},
value(val) {
if (val != this.valueSync) this.setValueSync();
if (val != this.valueSync) this.setValueSync()
},
dictList() {
this.setDefault();
},
this.setDefault()
}
},
created() {
this.setValueSync();
this.setDefault();
this.setValueSync()
this.setDefault()
},
methods: {
format(val) {
if (val === null || val == undefined || val == "") return val;
if (val === null || val == undefined || val == "") return val
let formatter =
typeof this.formatter == "function"
? this.formatter
: FORMATTERS[this.formatter];
let formatter = typeof this.formatter == "function" ? this.formatter : FORMATTERS[this.formatter]
if (!formatter) {
console.warn("格式器无效", this.formatter);
return val;
console.warn("格式器无效", this.formatter)
return val
}
return formatter(val);
return formatter(val)
},
changeValue(val) {
this.valueSync = val;
this.valueSync = val
},
setValueSync() {
if (
this.value === null ||
this.value === undefined ||
this.value === ""
) {
return (this.valueSync = this.multiple ? [] : this.value);
if (this.value === null || this.value === undefined || this.value === "") {
return (this.valueSync = this.multiple ? [] : this.value)
}
if (this.multiple) {
let value = this.value || [];
let value = this.value || []
if (typeof this.value == "string") {
value = this.value.split(",").filter((item) => item && item != "");
value = this.value.split(",").filter((item) => item && item != "")
}
this.valueSync = value.map((item) => this.format(item));
this.valueSync = value.map((item) => this.format(item))
} else {
this.valueSync = this.format(this.value);
this.valueSync = this.format(this.value)
}
},
getList() {
return this.getDictDatas(this.type);
return this.getDictDatas(this.type)
},
setDefault() {
if (!this.defaultable) return;
if (
this.dictList.length &&
(this.valueSync === null ||
this.valueSync == undefined ||
this.valueSync == "")
) {
this.valueSync = this.multiple ? [] : this.formattedList[0].value;
if (!this.defaultable) return
if (this.dictList.length && (this.valueSync === null || this.valueSync == undefined || this.valueSync == "")) {
this.valueSync = this.multiple ? [] : this.formattedList[0].value
}
},
},
};
}
}
}
</script>
<style scoped>
.dict-selector {
......
This diff is collapsed.
......@@ -3573,6 +3573,8 @@
"待回复": "To be replied",
"已回复": "Replied",
"确认修改": "Confirm modification",
"确认关闭吗?": "Are you sure to close?",
"确认返回吗?": "Are you sure to back?",
"商标{index}分类": "Trademark {index} classification",
"请选择商标{index}分类": "Please select trademark {index} classification",
"商标{index}商品": "Trademark {index} commodity",
......
<template>
<div v-if="!item.hidden">
<template v-if="hasOneShowingChild(item.children,item) && (!onlyOneChild.children||onlyOneChild.noShowingChildren)&&!item.alwaysShow">
<template v-if="hasOneShowingChild(item.children, item) && (!onlyOneChild.children || onlyOneChild.noShowingChildren) && !item.alwaysShow">
<app-link v-if="onlyOneChild.meta" :to="resolvePath(onlyOneChild.path)">
<el-menu-item :index="resolvePath(onlyOneChild.path)" :class="{'submenu-title-noDropdown':!isNest}">
<item :icon="onlyOneChild.meta.icon||(item.meta&&item.meta.icon)" :title="$l(onlyOneChild.meta, 'title')" :badge="badge" />
<el-menu-item :index="resolvePath(onlyOneChild.path)" :class="{ 'submenu-title-noDropdown': !isNest }">
<item :icon="onlyOneChild.meta.icon || (item.meta && item.meta.icon)" :title="$l(onlyOneChild.meta, 'title')" :badge="badge" />
</el-menu-item>
</app-link>
</template>
......@@ -12,27 +12,20 @@
<template slot="title">
<item v-if="item.meta" :icon="item.meta && item.meta.icon" :title="$l(item.meta, 'title')" :badge="badge" />
</template>
<sidebar-item
v-for="child in item.children"
:key="child.path"
:is-nest="true"
:item="child"
:base-path="resolvePath(child.path)"
class="nest-menu"
/>
<sidebar-item v-for="(child, index) in item.children" :key="index" :is-nest="true" :item="child" :base-path="resolvePath(child.path)" class="nest-menu" />
</el-submenu>
</div>
</template>
<script>
import path from 'path'
import { isExternal } from '@/utils/validate'
import Item from './Item'
import AppLink from './Link'
import FixiOSBug from './FixiOSBug'
import path from "path"
import { isExternal } from "@/utils/validate"
import Item from "./Item"
import AppLink from "./Link"
import FixiOSBug from "./FixiOSBug"
export default {
name: 'SidebarItem',
name: "SidebarItem",
components: { Item, AppLink },
mixins: [FixiOSBug],
props: {
......@@ -47,24 +40,24 @@ export default {
},
basePath: {
type: String,
default: ''
default: ""
}
},
data() {
this.onlyOneChild = null
return {}
},
computed:{
badge(){
computed: {
badge() {
return this.$store.getters.badgeData[this.item.meta?.badgeField]
}
},
methods: {
hasOneShowingChild(children = [], parent) {
if (!children) {
children = [];
children = []
}
const showingChildren = children.filter(item => {
const showingChildren = children.filter((item) => {
if (item.hidden) {
return false
} else {
......@@ -81,7 +74,7 @@ export default {
// Show parent if there are no child router to display
if (showingChildren.length === 0) {
this.onlyOneChild = { ... parent, path: '', noShowingChildren: true }
this.onlyOneChild = { ...parent, path: "", noShowingChildren: true }
return true
}
......
<template>
<div id="tags-view-container" class="tags-view-container">
<scroll-pane ref="scrollPane" class="tags-view-wrapper" @scroll="handleScroll">
<router-link
v-for="tag in visitedViews"
ref="tag"
:key="tag.path"
:class="isActive(tag)?'active':''"
:to="{ path: tag.path, query: tag.query, fullPath: tag.fullPath }"
tag="span"
class="tags-view-item"
:style="activeStyle(tag)"
@click.middle.native="!isAffix(tag)?closeSelectedTag(tag):''"
@contextmenu.prevent.native="openMenu(tag,$event)"
>
{{ $l(tag.meta, 'title') }}
<router-link v-for="tag in visitedViews" ref="tag" :key="tag.path" :class="isActive(tag) ? 'active' : ''" :to="{ path: tag.path, query: tag.query, fullPath: tag.fullPath }" tag="span" class="tags-view-item" :style="activeStyle(tag)" @click.middle.native="!isAffix(tag) ? closeSelectedTag(tag) : ''" @contextmenu.prevent.native="openMenu(tag, $event)">
{{ $l(tag.meta, "title") }}
<span v-if="!isAffix(tag)" class="el-icon-close" @click.prevent.stop="closeSelectedTag(tag)" />
</router-link>
</scroll-pane>
<ul v-show="visible" :style="{left:left+'px',top:top+'px'}" class="contextmenu">
<ul v-show="visible" :style="{ left: left + 'px', top: top + 'px' }" class="contextmenu">
<li @click="refreshSelectedTag(selectedTag)"><i class="el-icon-refresh-right"></i> 刷新页面</li>
<li v-if="!isAffix(selectedTag)" @click="closeSelectedTag(selectedTag)"><i class="el-icon-close"></i> 关闭当前</li>
<li @click="closeOthersTags"><i class="el-icon-circle-close"></i> 关闭其他</li>
......@@ -29,8 +18,8 @@
</template>
<script>
import ScrollPane from './ScrollPane'
import path from 'path'
import ScrollPane from "./ScrollPane"
import path from "path"
export default {
components: { ScrollPane },
......@@ -51,7 +40,7 @@ export default {
return this.$store.state.permission.routes
},
theme() {
return this.$store.state.settings.theme;
return this.$store.state.settings.theme
}
},
watch: {
......@@ -62,9 +51,9 @@ export default {
},
visible(value) {
if (value) {
document.body.addEventListener('click', this.closeMenu)
document.body.addEventListener("click", this.closeMenu)
} else {
document.body.removeEventListener('click', this.closeMenu)
document.body.removeEventListener("click", this.closeMenu)
}
}
},
......@@ -77,18 +66,18 @@ export default {
return route.path === this.$route.path
},
activeStyle(tag) {
if (!this.isActive(tag)) return {};
if (!this.isActive(tag)) return {}
return {
"background-color": this.theme,
"border-color": this.theme
};
}
},
isAffix(tag) {
return tag.meta && tag.meta.affix
},
isFirstView() {
try {
return this.selectedTag.fullPath === this.visitedViews[1].fullPath || this.selectedTag.fullPath === '/index'
return this.selectedTag.fullPath === this.visitedViews[1].fullPath || this.selectedTag.fullPath === "/index"
} catch (err) {
return false
}
......@@ -100,9 +89,9 @@ export default {
return false
}
},
filterAffixTags(routes, basePath = '/') {
filterAffixTags(routes, basePath = "/") {
let tags = []
routes.forEach(route => {
routes.forEach((route) => {
if (route.meta && route.meta.affix) {
const tagPath = path.resolve(basePath, route.path)
tags.push({
......@@ -122,18 +111,18 @@ export default {
return tags
},
initTags() {
const affixTags = this.affixTags = this.filterAffixTags(this.routes)
const affixTags = (this.affixTags = this.filterAffixTags(this.routes))
for (const tag of affixTags) {
// Must have tag name
if (tag.name) {
this.$store.dispatch('tagsView/addVisitedView', tag)
this.$store.dispatch("tagsView/addVisitedView", tag)
}
}
},
addTags() {
const { name } = this.$route
if (name) {
this.$store.dispatch('tagsView/addView', this.$route)
this.$store.dispatch("tagsView/addView", this.$route)
}
return false
},
......@@ -145,7 +134,7 @@ export default {
this.$refs.scrollPane.moveToTarget(tag)
// when query is different then update
if (tag.to.fullPath !== this.$route.fullPath) {
this.$store.dispatch('tagsView/updateVisitedView', this.$route)
this.$store.dispatch("tagsView/updateVisitedView", this.$route)
}
break
}
......@@ -153,45 +142,45 @@ export default {
})
},
refreshSelectedTag(view) {
this.$store.dispatch('tagsView/delCachedView', view).then(() => {
this.$store.dispatch("tagsView/delCachedView", view).then(() => {
const { fullPath } = view
this.$nextTick(() => {
this.$router.replace({
path: '/redirect' + fullPath
path: "/redirect" + fullPath
})
})
})
},
closeSelectedTag(view) {
this.$store.dispatch('tagsView/delView', view).then(({ visitedViews }) => {
this.$store.dispatch("tagsView/delView", view).then(({ visitedViews }) => {
if (this.isActive(view)) {
this.toLastView(visitedViews, view)
}
})
},
closeRightTags() {
this.$store.dispatch('tagsView/delRightTags', this.selectedTag).then(visitedViews => {
if (!visitedViews.find(i => i.fullPath === this.$route.fullPath)) {
this.$store.dispatch("tagsView/delRightTags", this.selectedTag).then((visitedViews) => {
if (!visitedViews.find((i) => i.fullPath === this.$route.fullPath)) {
this.toLastView(visitedViews)
}
})
},
closeLeftTags() {
this.$store.dispatch('tagsView/delLeftTags', this.selectedTag).then(visitedViews => {
if (!visitedViews.find(i => i.fullPath === this.$route.fullPath)) {
this.$store.dispatch("tagsView/delLeftTags", this.selectedTag).then((visitedViews) => {
if (!visitedViews.find((i) => i.fullPath === this.$route.fullPath)) {
this.toLastView(visitedViews)
}
})
},
closeOthersTags() {
this.$router.push(this.selectedTag).catch(()=>{});
this.$store.dispatch('tagsView/delOthersViews', this.selectedTag).then(() => {
this.$router.push(this.selectedTag).catch(() => {})
this.$store.dispatch("tagsView/delOthersViews", this.selectedTag).then(() => {
this.moveToCurrentTag()
})
},
closeAllTags(view) {
this.$store.dispatch('tagsView/delAllViews').then(({ visitedViews }) => {
if (this.affixTags.some(tag => tag.path === this.$route.path)) {
this.$store.dispatch("tagsView/delAllViews").then(({ visitedViews }) => {
if (this.affixTags.some((tag) => tag.path === this.$route.path)) {
return
}
this.toLastView(visitedViews, view)
......@@ -204,11 +193,11 @@ export default {
} else {
// now the default is to redirect to the home page if there is no tags-view,
// you can adjust it according to your needs.
if (view.name === 'Dashboard') {
if (view.name === "Dashboard") {
// to reload home page
this.$router.replace({ path: '/redirect' + view.fullPath })
this.$router.replace({ path: "/redirect" + view.fullPath })
} else {
this.$router.push('/')
this.$router.push("/")
}
}
},
......@@ -245,7 +234,7 @@ export default {
width: 100%;
background: #fff;
border-bottom: 1px solid #d8dce5;
box-shadow: 0 1px 3px 0 rgba(0, 0, 0, .12), 0 0 3px 0 rgba(0, 0, 0, .04);
box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.12), 0 0 3px 0 rgba(0, 0, 0, 0.04);
.tags-view-wrapper {
.tags-view-item {
display: inline-block;
......@@ -271,7 +260,7 @@ export default {
color: #fff;
border-color: #42b983;
&::before {
content: '';
content: "";
background: #fff;
display: inline-block;
width: 8px;
......@@ -294,7 +283,7 @@ export default {
font-size: 12px;
font-weight: 400;
color: #333;
box-shadow: 2px 2px 3px 0 rgba(0, 0, 0, .3);
box-shadow: 2px 2px 3px 0 rgba(0, 0, 0, 0.3);
li {
margin: 0;
padding: 7px 16px;
......@@ -317,10 +306,10 @@ export default {
vertical-align: 2px;
border-radius: 50%;
text-align: center;
transition: all .3s cubic-bezier(.645, .045, .355, 1);
transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);
transform-origin: 100% 50%;
&:before {
transform: scale(.6);
transform: scale(0.6);
display: inline-block;
vertical-align: -3px;
}
......
......@@ -163,8 +163,10 @@ export const DICT_TYPE = {
CUSTOMER_GET_METHOD: 'customer_get_method', //获取方式
CUSTOMER_FROM: 'customer_from', //创建入口
CUSTOMER_ROLE: 'customer_role', //角色
PICKUP_POINTS: 'pickup_points', //常用提货网点
CUSTOMER_FOLLOWUP_TYPE: 'customer_followup_type', //跟进类型
CUSTOMER_FOLLOWUP_METHOD: 'customer_followup_method', //跟进方式
CUSTOMER_FOLLOWUP_SALE_STAGE: 'sale_stage', //销售阶段
CUSTOMER_FOLLOWUP_RESULT_TYPE: 'customer_followup_result_type', //跟进结果
CUSTOMER_FOLLOWUP_STATUS: 'customer_followup_status', //跟进状态
CUSTOMER_QUERY_NUMBER_FIELD: "customer_query_number_field", //客户查询数字字段
......
......@@ -5,36 +5,36 @@
<el-form-item :label="$t('自编号')" prop="selfNo">
<el-input v-model="queryParams.selfNo" :placeholder="$t('请输入自编号')" clearable @keyup.enter.native="handleQuery" />
</el-form-item>
<el-form-item :label="$t('出货渠道')" prop="shippingChannelId">
<el-select v-model="queryParams.shippingChannelId" :placeholder="$t('请选择出货渠道')">
<el-form-item :label="$t('出货渠道')" prop="shippingChannelIdList">
<el-select v-model="queryParams.shippingChannelIdList" multiple :placeholder="$t('请选择出货渠道')" clearable>
<el-option v-for="item in channelList" :label="$l(item, 'name')" :value="item.channelId" :key="item.channelId"></el-option>
</el-select>
</el-form-item>
<el-form-item :label="$t('始发仓')" prop="startWarehouseIdList">
<el-select v-model="queryParams.startWarehouseIdList" multiple :placeholder="$t('请选择始发仓')" clearable collapse-tags>
<el-select v-model="queryParams.startWarehouseIdList" multiple :placeholder="$t('请选择始发仓')" clearable>
<el-option v-for="item in exportWarehouseList" :label="$l(item, 'title')" :value="item.id" :key="item.id"></el-option>
</el-select>
</el-form-item>
<el-form-item :label="$t('目的国')" prop="countryIdList">
<el-select v-model="countryIdList" multiple :label="countryIdList" :placeholder="$t('请选择目的国')" clearable collapse-tags>
<el-select v-model="countryIdList" multiple :label="countryIdList" :placeholder="$t('请选择目的国')" clearable>
<el-option v-for="item in AddressProvince" :key="item.guojia" :label="item.guojiaName" :value="item.guojia"></el-option>
</el-select>
</el-form-item>
<el-form-item :label="$t('目的城市')" prop="destCityIdList">
<el-select v-model="destCityIdList" multiple :placeholder="$t('请选择目的城市')" style="width: 200px" clearable collapse-tags>
<el-select v-model="destCityIdList" multiple :placeholder="$t('请选择目的城市')" style="width: 200px" clearable>
<el-option v-for="item in AddressCity" :key="item.shi" :label="item.shiName" :value="item.shi"></el-option>
</el-select>
</el-form-item>
<el-form-item :label="$t('目的仓')" prop="destWarehouseIdList">
<el-select v-model="destWarehouseIdList" multiple :placeholder="$t('请选择目的仓')" style="width: 200px" clearable collapse-tags>
<el-select v-model="destWarehouseIdList" multiple :placeholder="$t('请选择目的仓')" style="width: 200px" clearable>
<el-option v-for="item in AddressTown" :key="item.id" :label="item.titleZh" :value="item.id"></el-option>
</el-select>
</el-form-item>
<el-form-item :label="$t('状态')" prop="shipmentStatusAirList">
<el-select v-model="queryParams.shipmentStatusAirList" :placeholder="$t('请选择状态')" clearable size="small" multiple collapse-tags>
<el-select v-model="queryParams.shipmentStatusAirList" :placeholder="$t('请选择状态')" clearable size="small" multiple>
<el-option v-for="dict in this.getDictDatas(DICT_TYPE.BOX_AIR_SHIPMENT_STATE)" :key="dict.value" :label="$l(dict, 'label')" :value="dict.value" />
</el-select>
</el-form-item>
......@@ -54,10 +54,10 @@
</el-select>
</el-form-item>
<el-form-item :label="$t('起运港')" v-show="showSearch">
<dockSelect v-model="queryParams.bigPortIdList" :placeholder="$t('请选择起运港')" portType="2" :allDocks="allDocks" clearable multiple collapse-tags />
<dockSelect v-model="queryParams.bigPortIdList" :placeholder="$t('请选择起运港')" portType="2" :allDocks="allDocks" clearable multiple />
</el-form-item>
<el-form-item :label="$t('目的港')" v-show="showSearch">
<dockSelect v-model="queryParams.destPortIdList" :placeholder="$t('请选择目的港')" portType="2" :allDocks="allDocks" clearable multiple collapse-tags />
<dockSelect v-model="queryParams.destPortIdList" :placeholder="$t('请选择目的港')" portType="2" :allDocks="allDocks" clearable multiple />
</el-form-item>
<el-form-item :label="$t('目的港清关')" prop="destinationClearance" v-show="showSearch">
<el-select v-model="queryParams.destinationClearance" :placeholder="$t('请选择目的港清关')" clearable size="small">
......@@ -66,7 +66,7 @@
</el-select>
</el-form-item>
<el-form-item :label="$t('发货方式')" prop="deliveryType" v-show="showSearch">
<el-select v-model="queryParams.deliveryType" :placeholder="$t('请选择发货方式')" clearable size="small" multiple collapse-tags>
<el-select v-model="queryParams.deliveryType" :placeholder="$t('请选择发货方式')" clearable size="small" multiple>
<el-option v-for="item in deliveryTypeData" :key="item.value" :label="item.label" :value="item.value">
</el-option>
</el-select>
......@@ -83,21 +83,21 @@
</el-select>
</el-form-item>
<el-form-item :label="$t('订舱代理')" v-show="showSearch">
<supplierSelect v-model="queryParams.shipperId" :companyType="'5'" :placeholder="$t('请选择订舱代理')" :allSupplier="allSupplier" clearable multiple collapse-tags />
<supplierSelect v-model="queryParams.shipperId" :companyType="'5'" :placeholder="$t('请选择订舱代理')" :allSupplier="allSupplier" clearable multiple />
</el-form-item>
<el-form-item :label="$t('航空公司')" v-show="showSearch">
<supplierSelect v-model="queryParams.airlineCompanyIdList" :placeholder="$t('请选择航空公司')" company-type="10" :allSupplier="allSupplier" clearable multiple collapse-tags />
<supplierSelect v-model="queryParams.airlineCompanyIdList" :placeholder="$t('请选择航空公司')" company-type="10" :allSupplier="allSupplier" clearable multiple />
</el-form-item>
<el-form-item :label="$t('代理公司Agent')" v-show="showSearch">
<supplierSelect v-model="queryParams.agentIdList" :placeholder="$t('请选择代理公司')" company-type="1" :allSupplier="allSupplier" clearable multiple collapse-tags />
<supplierSelect v-model="queryParams.agentIdList" :placeholder="$t('请选择代理公司')" company-type="1" :allSupplier="allSupplier" clearable multiple />
</el-form-item>
<el-form-item :label="$t('报关方式')" prop="dcCustomsType" v-show="showSearch">
<el-select v-model="queryParams.dcCustomsType" :placeholder="$t('请选择报关方式')" clearable multiple collapse-tags>
<el-select v-model="queryParams.dcCustomsType" :placeholder="$t('请选择报关方式')" clearable multiple>
<el-option v-for="type in this.getDictDatas(DICT_TYPE.BOX_SHIPPING_CUSTOMS_TYPE)" :key="type.value" :label="$l(type, 'label')" :value="type.value"></el-option>
</el-select>
</el-form-item>
<el-form-item :label="$t('报关公司')" v-show="showSearch">
<supplierSelect v-model="queryParams.dcCompanyId" :companyType="'2'" :placeholder="$t('请选择报关公司')" :allSupplier="allSupplier" clearable multiple collapse-tags />
<supplierSelect v-model="queryParams.dcCompanyId" :companyType="'2'" :placeholder="$t('请选择报关公司')" :allSupplier="allSupplier" clearable multiple />
</el-form-item>
<el-row>
<el-form-item :label="$t('预计起飞时间')" prop="flyTime" v-show="showSearch">
......@@ -758,11 +758,11 @@ export default {
// }
//目的国
if (this.countryIdList != null && this.countryIdList != "") {
obj.countryIdLists = this.countryIdList
obj.countryIdList = this.countryIdList
}
//目的城市
if (this.destCityIdList != null && this.destCityIdList != "") {
obj.destCityIdLists = this.destCityIdList
obj.destCityIdList = this.destCityIdList
}
//目的仓
if (this.destWarehouseIdList != null && this.destWarehouseIdList != "") {
......@@ -913,7 +913,7 @@ export default {
this.handleDelete(row);
break;
case "editLadingBill":
let line = await getLineInfo({startWarehouseId: row.startWarehouseId,destWarehouseIdList: row.destWarehouseIdList,transportType:row.transportType})
let line = await getLineInfo({startWarehouseId: row.startWarehouseId,destWarehouseId: row.destWarehouseId,transportType:row.transportType})
let makeBillNode = line.data.makeBillNode
console.log(row,this.makeBillNodeStatus[makeBillNode])
if(row.shipmentStatusAir<this.makeBillNodeStatus[makeBillNode]){
......
......@@ -56,42 +56,42 @@
</el-form-item>
<el-form-item :label="$t('始发仓')" prop="startWarehouseIdList">
<el-select v-model="queryParams.startWarehouseIdList" multiple :placeholder="$t('请选择始发仓')" clearable collapse-tags>
<el-select v-model="queryParams.startWarehouseIdList" multiple :placeholder="$t('请选择始发仓')" clearable>
<el-option v-for="item in exportWarehouseList" :label="$l(item, 'title')" :value="item.id" :key="item.id"></el-option>
</el-select>
</el-form-item>
<el-form-item :label="$t('目的国')" prop="countryIdList">
<el-select v-model="countryIdList" multiple :label="countryIdList" :placeholder="$t('请选择目的国')" clearable collapse-tags>
<el-select v-model="countryIdList" multiple :label="countryIdList" :placeholder="$t('请选择目的国')" clearable>
<el-option v-for="item in AddressProvince" :key="item.guojia" :label="item.guojiaName" :value="item.guojia"></el-option>
</el-select>
</el-form-item>
<el-form-item :label="$t('目的城市')" prop="destCityIdList">
<el-select v-model="destCityIdList" multiple :placeholder="$t('请选择目的城市')" style="width: 200px" clearable collapse-tags>
<el-select v-model="destCityIdList" multiple :placeholder="$t('请选择目的城市')" style="width: 200px" clearable>
<el-option v-for="item in AddressCity" :key="item.shi" :label="item.shiName" :value="item.shi"></el-option>
</el-select>
</el-form-item>
<el-form-item :label="$t('目的仓')" prop="destWarehouseIdList">
<el-select v-model="destWarehouseIdList" multiple :placeholder="$t('请选择目的仓')" style="width: 200px" clearable collapse-tags>
<el-select v-model="destWarehouseIdList" multiple :placeholder="$t('请选择目的仓')" style="width: 200px" clearable>
<el-option v-for="item in AddressTown" :key="item.id" :label="item.titleZh" :value="item.id"></el-option>
</el-select>
</el-form-item>
<el-form-item :label="$t('国家')" prop="countryId">
<el-select
v-model="queryParams.countryId"
:placeholder="$t('请选择国家')"
clearable
size="small"
>
<el-option
v-for="item in countryList"
:key="item.id"
:label="$l(item, 'title')"
:value="item.id"
>
</el-option>
</el-select>
</el-form-item>
<!-- <el-form-item :label="$t('国家')" prop="countryId">-->
<!-- <el-select-->
<!-- v-model="queryParams.countryId"-->
<!-- :placeholder="$t('请选择国家')"-->
<!-- clearable-->
<!-- size="small"-->
<!-- >-->
<!-- <el-option-->
<!-- v-for="item in countryList"-->
<!-- :key="item.id"-->
<!-- :label="$l(item, 'title')"-->
<!-- :value="item.id"-->
<!-- >-->
<!-- </el-option>-->
<!-- </el-select>-->
<!-- </el-form-item>-->
<el-form-item :label="$t('提单制作')" prop="ladingBillStatus">
<el-select
v-model="queryParams.ladingBillStatus"
......@@ -127,7 +127,7 @@
</el-select>
</el-form-item>
<el-form-item :label="$t('出单方式')" v-show="showSearch">
<el-select v-model="queryParams.cdOutBillType" :placeholder="$t('请选择出单方式')" clearable multiple collapse-tags>
<el-select v-model="queryParams.cdOutBillType" :placeholder="$t('请选择出单方式')" clearable multiple>
<el-option v-for="item in method" :key="item.value" :label="item.label" :value="item.value"></el-option>
</el-select>
</el-form-item>
......@@ -163,24 +163,24 @@
</el-row>
<el-form-item :label="$t('起运港')" v-show="showSearch">
<dockSelect v-model="queryParams.bigPortIdList" :placeholder="$t('请选择起运港')" portType="2" :allDocks="allDocks" clearable multiple collapse-tags />
<dockSelect v-model="queryParams.bigPortIdList" :placeholder="$t('请选择起运港')" portType="2" :allDocks="allDocks" clearable multiple/>
</el-form-item>
<el-form-item :label="$t('目的港')" v-show="showSearch">
<dockSelect v-model="queryParams.destPortIdList" :placeholder="$t('请选择目的港')" portType="2" :allDocks="allDocks" clearable multiple collapse-tags />
<dockSelect v-model="queryParams.destPortIdList" :placeholder="$t('请选择目的港')" portType="2" :allDocks="allDocks" clearable multiple/>
</el-form-item>
<el-form-item :label="$t('驳船港')" v-show="showSearch">
<dockSelect v-model="queryParams.bargePortIdList" :placeholder="$t('请选择驳船港')" portType="2" :allDocks="allDocks" clearable multiple collapse-tags />
<dockSelect v-model="queryParams.bargePortIdList" :placeholder="$t('请选择驳船港')" portType="2" :allDocks="allDocks" clearable multiple/>
</el-form-item>
<el-form-item :label="$t('订舱公司')" v-show="showSearch">
<supplierSelect v-model="queryParams.spaceCompanyIdList" :companyType="'1'" :placeholder="$t('请选择订舱公司')" :allSupplier="allSupplier" clearable multiple collapse-tags />
<supplierSelect v-model="queryParams.spaceCompanyIdList" :companyType="'1'" :placeholder="$t('请选择订舱公司')" :allSupplier="allSupplier" clearable multiple/>
</el-form-item>
<el-form-item :label="$t('报关方式')" prop="dcCustomsType" v-show="showSearch">
<el-select v-model="queryParams.dcCustomsType" :placeholder="$t('请选择报关方式')" clearable multiple collapse-tags>
<el-select v-model="queryParams.dcCustomsType" :placeholder="$t('请选择报关方式')" clearable multiple>
<el-option v-for="type in this.getDictDatas(DICT_TYPE.BOX_SHIPPING_CUSTOMS_TYPE)" :key="type.value" :label="$l(type, 'label')" :value="type.value"></el-option>
</el-select>
</el-form-item>
<el-form-item :label="$t('报关公司')" v-show="showSearch">
<supplierSelect v-model="queryParams.dcCompanyId" :companyType="'2'" :placeholder="$t('请选择报关公司')" :allSupplier="allSupplier" clearable multiple collapse-tags />
<supplierSelect v-model="queryParams.dcCompanyId" :companyType="'2'" :placeholder="$t('请选择报关公司')" :allSupplier="allSupplier" clearable multiple/>
</el-form-item>
<el-form-item :label="$t('预计驳船时间')" v-show="showSearch">
<el-date-picker type="datetimerange" :start-placeholder="$t('预计驳船开始日期')" :end-placeholder="$t('预计驳船结束日期')" value-format="yyyy-MM-dd HH:mm:ss" v-model="queryParams.bargeBeginTime"></el-date-picker>
......@@ -969,11 +969,11 @@ export default {
// }
//目的国
if (this.countryIdList != null && this.countryIdList != "") {
obj.countryIdLists = this.countryIdList
obj.countryIdList = this.countryIdList
}
//目的城市
if (this.destCityIdList != null && this.destCityIdList != "") {
obj.destCityIdLists = this.destCityIdList
obj.destCityIdList = this.destCityIdList
}
//目的仓
if (this.destWarehouseIdList != null && this.destWarehouseIdList != "") {
......
......@@ -92,10 +92,16 @@
{{scope.row.warehouseInAttrNameList?scope.row.warehouseInAttrNameList.toString():""}}
</template>
</el-table-column>
<el-table-column :label="$t('关联单')" align="center" prop="hasRelationOrder" width="120">
<template slot-scope="scope">
<el-link type="primary" v-if="scope.row.hasRelationOrder" @click.native="showRelatedOrder(scope.row)">{{ $t('') }}</el-link>
<span v-else>{{ $t('') }}</span>
</template>
</el-table-column>
<el-table-column :label="$t('计划/已理')" align="center" prop="warehouseInInfo.cartonsNum">
<template slot-scope="scope">
<el-link type="primary" @click.native="orderClick(scope.row)">
{{scope.row.num}}/{{scope.row.installNum}}
{{scope.row.num}}/{{scope.row.installNum}} <span v-if="scope.row.mixStatus === 1">{{$t('混箱')}}</span>
</el-link>
<div style="color:blue;fontWeight:bold;">
{{ scope.row.multiSpecification === true ? '(多规格)' : ''}}
......@@ -230,6 +236,7 @@
</el-row>
</template>
</el-dialog>
<realated-order :order="order" :orderItemId="showRelatedItemId" v-if="showRelatedItemId" @close="showRelatedItemId=null"></realated-order>
</div>
</template>
......@@ -239,6 +246,7 @@ import { getTallyList, tallyRemove, tallyCommit, getOrderDetailByBoxNo } from "@
import { checkInfoSingleCreate, checkInfoBatchCreate, getOrderTagList, checkInfoSingleDelete, checkInfoBatchDelete } from "@/api/ecw/boxAir";
import { formatDate, serviceMsg, getTotlContent } from "../../utils";
import WarehouseDetail from "./warehouseDetail";
import RealatedOrder from "../../../shippingSea/nodePage/tally/realatedOrder.vue";
import {getOrder, orderSpecialNeed} from "@/api/ecw/order";
import Exception from "@/views/ecw/box/components/Exception.vue";
......@@ -249,6 +257,7 @@ export default {
Exception,
batchTally,
WarehouseDetail,
RealatedOrder,
},
props: {
shipmentObj: Object,
......@@ -256,6 +265,7 @@ export default {
data() {
return {
showWarehouseInItemId: null,
showRelatedItemId: null,
order: null,
tallyList: [],
// 理货数据
......@@ -347,6 +357,7 @@ export default {
tallyStatus: item.tallyStatus,
tallyTime: item.tallyTime,
installNum: item.installNum,
hasRelationOrder: item.hasRelationOrder
});
});
});
......@@ -518,6 +529,10 @@ export default {
this.showWarehouseInItemId = row.orderItemId;
});
},
// 显示关联单
showRelatedOrder(row) {
this.showRelatedItemId = row.orderId
},
/** 表格订单号点击 */
orderClick(row) {
getOrderTagList({ orderId: row.orderId, type: 0 }).then((res) => {
......
......@@ -145,8 +145,8 @@
<div class="btns">
<el-button type="danger" size="small" @click="openError(scope.row)">{{ $t("异常") }}</el-button>
<el-button v-if="pageData.boxCustomsBackVO && pageData.boxCustomsBackVO.overMachineStatus == 2 && pageData.boxCustomsBackVO.overMachineAbnormalStatus == 2" plain type="primary" size="small" @click="$router.push('/order/warehousing-update?id=' + scope.row.orderId)">{{ $t("入仓修改 ") }}</el-button>
<el-button type="primary" size="small" @click="order_warehouse_check_revoke(scope.row.orderId)" v-if="scope.row.inWarehouseState == 218">{{ $t("撤销到仓") }}</el-button>
<el-button type="primary" size="small" @click="order_warehouse_check_force(scope.row.orderId)" v-if="scope.row.inWarehouseState == 0 && scope.row.unloadNum > 0 && scope.row.installNum > scope.row.unloadNum">{{ $t("强制到仓") }}</el-button>
<el-button type="primary" size="small" @click="order_warehouse_check_revoke(scope.row.orderId)" v-if="scope.row.inWarehouseState == 218 && !isSuccessReview && !isUnderReview" v-hasPermi="['order:warehouse:check:revoke']">{{ $t("撤销到仓") }}</el-button>
<el-button type="primary" size="small" @click="order_warehouse_check_force(scope.row.orderId)" v-if="scope.row.inWarehouseState == 0 && scope.row.unloadNum > 0 && scope.row.installNum > scope.row.unloadNum" v-hasPermi="['order:warehouse:check:force']">{{ $t("强制到仓") }}</el-button>
<el-button type="primary" size="small" @click="$router.push('/order/warehousingTo-update?id=' + scope.row.orderId)" v-if="scope.row.inWarehouseState == 218">{{ $t("到仓修改") }}</el-button>
</div>
</template>
......@@ -317,14 +317,11 @@ export default {
params.orderId = orderId
params.unloadTime = this.ulWarehouseTime
await order_warehouse_check_force(params).then((res) => {
if (res.data){
this.$router.push('/order/warehousingTo-update?id=' + orderId)
if (res.data) {
this.$router.push("/order/warehousingTo-update?id=" + orderId)
}
})
})
},
getTotlContent,
getOrders(id) {
......@@ -619,6 +616,11 @@ export default {
const { currNode, shipmentObj } = this.$attrs
return shipmentObj[currNode.keyName] === 183 ? true : false
},
/* 是否卸柜审核成功 */
isSuccessReview() {
const { currNode, shipmentObj } = this.$attrs
return shipmentObj[currNode.keyName] === 185 ? true : false
},
// 部分信息
getSectionInfo() {
const { totalStatistics, secStatistics } = this.pageData
......
......@@ -80,10 +80,16 @@
{{scope.row.warehouseInAttrNameList?scope.row.warehouseInAttrNameList.toString():""}}
</template>
</el-table-column>
<el-table-column :label="$t('关联单')" align="center" prop="hasRelationOrder" width="120">
<template slot-scope="scope">
<el-link type="primary" v-if="scope.row.hasRelationOrder" @click.native="showRelatedOrder(scope.row)">{{ $t('') }}</el-link>
<span v-else>{{ $t('') }}</span>
</template>
</el-table-column>
<el-table-column :label="$t('箱数')" align="center" prop="warehouseInInfo.cartonsNum">
<template slot-scope="scope">
<el-link type="primary" @click.native="showWarehouseLogs(scope.row)">
{{scope.row.warehouseInInfo.cartonsNum}}
{{scope.row.warehouseInInfo.cartonsNum}} <span v-if="scope.row.mixStatus === 1">{{$t('混箱')}}</span>
</el-link>
<div style="color:blue;fontWeight:bold;">
{{ scope.row.multiSpecification === true ? '(多规格)' : ''}}
......@@ -133,6 +139,7 @@
<batchTally v-if="dialogConfig.dialogVisible" v-bind="$attrs" @closeDialog="closeDialog" :type="dialogConfig.type" :tallyRows="tallyRows" :shipmentObj="shipmentObj" />
</el-dialog>
<warehouse-detail :order="order" :orderItemId="showWarehouseInItemId" v-if="showWarehouseInItemId" @close="showWarehouseInItemId=null" />
<realated-order :order="order" :orderItemId="showRelatedItemId" v-if="showRelatedItemId" @close="showRelatedItemId=null"></realated-order>
</div>
</template>
......@@ -141,6 +148,7 @@ import batchTally from "./batchTally.vue";
import { getTallyList, tallyRemove, tallyCommit } from "@/api/ecw/boxSea";
import { formatDate, serviceMsg } from "../../utils";
import WarehouseDetail from "./warehouseDetail";
import RealatedOrder from "./realatedOrder.vue";
import {getOrder, orderSpecialNeed} from "@/api/ecw/order";
export default {
......@@ -149,6 +157,7 @@ export default {
components: {
batchTally,
WarehouseDetail,
RealatedOrder,
},
props: {
shipmentObj: Object,
......@@ -156,6 +165,7 @@ export default {
data() {
return {
showWarehouseInItemId: null,
showRelatedItemId: null,
order: null,
tallyList: [],
// 理货数据
......@@ -203,6 +213,7 @@ export default {
positionNo: oItem.positionNo,
tallyStatus: item.tallyStatus,
tallyTime: item.tallyTime,
hasRelationOrder: item.hasRelationOrder
});
});
});
......@@ -359,6 +370,10 @@ export default {
this.showWarehouseInItemId = row.orderItemId;
});
},
// 显示关联单
showRelatedOrder(row) {
this.showRelatedItemId = row.orderId
}
},
computed: {
/* 获取仓库 */
......
<template>
<!-- 订单获取关联单 -->
<el-dialog title="关联单" visible :before-close="closeDialog" :close-on-click-modal="false" width="95%" append-to-body>
<el-table :data="list">
<el-table-column
width="55">
</el-table-column>
<el-table-column type="index" :label="$t('序号')"></el-table-column>
<el-table-column :label="$t('订单号')" prop="orderBackVO.orderNo"></el-table-column>
<el-table-column :label="$t('唛头')" prop="orderBackVO.marks"></el-table-column>
<el-table-column :label="$t('货物数据')">
<template v-slot="{row}">
<div>
{{row.orderBackVO.costVO.totalNum}}{{$t('')}}
</div>
<div>
{{row.orderBackVO.costVO.totalVolume}}
</div>
<div>
{{row.orderBackVO.costVO.totalWeight}}KG
</div>
</template>
</el-table-column>
<el-table-column :label="$t('入仓时间')" prop="orderBackVO.rucangTime">
<template v-slot="{row}">
{{parseTime(row.orderBackVO.rucangTime)}}
</template>
</el-table-column>
<el-table-column :label="$t('状态')" prop="status" >
<template v-slot:default="scope">
{{scope.row.orderBackVO.statusMsg}}
</template>
</el-table-column>
<el-table-column :label="$t('操作人')" prop="creator">
<template v-slot="{row}">
{{(userList.find( i => row.creator == i.id) || {}).nickname}}
</template>
</el-table-column>
<el-table-column :label="$t('操作时间')">
<template v-slot="{row}">
{{parseTime(row.createTime)}}
</template>
</el-table-column>
</el-table>
<pagination v-show="total > 0" :total="total" :page.sync="params.page" :limit.sync="params.rows"
@pagination="getList" />
</el-dialog>
</template>
<script>
import { getOrder, getOrderWarehouseIn } from "@/api/ecw/order";
import { guanlianList } from "@/api/ecw/associatedOrder";
import {listSimpleUsers} from "@/api/system/user";
import WarehouseRecordDetail from '@/views/ecw/order/warehousing/components/WarehouseRecordDetail.vue'
import { parseTime } from "@/utils/ruoyi";
export default {
filters: { parseTime },
components: {
WarehouseRecordDetail
},
props: {
order: Object, // order 和 orderId 二选一
orderId: Number,
orderItemId: Number,
},
data() {
return {
orderDetail: null,
warehouseList: null,
list:[],
userList:[],
total:0,
params:{
orderId:undefined,
relateOrderNo:undefined,
page:1,
rows:10
},
};
},
computed: {
info() {
return this.orderDetail || this.order;
},
orderItem() {
if (!this.info) return null;
return this.info.orderItemVOList.find(
(item) => item.orderItemId == this.orderItemId
);
},
warehouseItem() {
if (!this.warehouseList) return [];
return (
this.warehouseList.find(
(item) => item.orderItemId == this.orderItemId
) || []
);
},
},
created() {
this.show = true;
this.params.orderId = this.orderItemId;
this.getList();
listSimpleUsers().then(r => this.userList = r.data)
},
methods: {
closeDialog() {
this.show = false;
this.$emit("close");
},
getList(){
guanlianList(this.params).then(r => {
if(r.code === 0){
this.list = r.data.list;
this.total = r.data.total;
}
})
},
getOrderWarehouseIn() {
getOrderWarehouseIn(this.info.orderId).then((res) => {
this.warehouseList = res.data;
});
},
},
};
</script>
......@@ -135,8 +135,8 @@
<template slot-scope="scope">
<div class="btns">
<el-button type="danger" size="small" @click="openError(scope.row)">{{ $t("异常") }}</el-button>
<el-button type="primary" size="small" @click="order_warehouse_check_revoke(scope.row.orderId)" v-if="scope.row.inWarehouseState == 218">{{ $t("撤销到仓") }}</el-button>
<el-button type="primary" size="small" @click="order_warehouse_check_force(scope.row.orderId)" v-if="scope.row.inWarehouseState == 0 && scope.row.unloadNum > 0 && scope.row.installNum > scope.row.unloadNum">{{ $t("强制到仓") }}</el-button>
<el-button type="primary" size="small" @click="order_warehouse_check_revoke(scope.row.orderId)" v-if="scope.row.inWarehouseState == 218 && !isSuccessReview && !isUnderReview" v-hasPermi="['order:warehouse:check:revoke']">{{ $t("撤销到仓") }}</el-button>
<el-button type="primary" size="small" @click="order_warehouse_check_force(scope.row.orderId)" v-if="scope.row.inWarehouseState == 0 && scope.row.unloadNum > 0 && scope.row.installNum > scope.row.unloadNum" v-hasPermi="['order:warehouse:check:force']">{{ $t("强制到仓") }}</el-button>
<el-button type="primary" size="small" @click="$router.push('/order/warehousingTo-update?id=' + scope.row.orderId)" v-if="scope.row.inWarehouseState == 218">{{ $t("到仓修改") }}</el-button>
</div>
</template>
......
......@@ -26,7 +26,9 @@
size="small">
<el-option :label="$t('草稿')" value="0" />
<el-option :label="$t('已发布')" value="1" />
<el-option :label="$t('已过期')" value="2" />
<el-option :label="$t('已发布,未投放')" value="2" />
<el-option :label="$t('已发布,投放中')" value="3" />
<el-option :label="$t('已过期')" value="4" />
</el-select>
</el-form-item>
<el-form-item :label="$t('关键字')" prop="searchKey">
......@@ -34,14 +36,15 @@
</el-form-item>
<el-form-item :label="$t('有效期')" prop="validDays">
<el-input
v-model.trim="queryParams.validDays"
:placeholder="$t('请输入有效期')"
clearable
@keyup.enter.native="handleQuery"
onkeyup="this.value=this.value.replace(/(^\s*)|(\s*$)/g,'')"
/>
<el-form-item :label="$t('结束时间')">
<el-date-picker
v-model="dateRangeEndTime"
type="daterange"
:start-placeholder="$t('开始日期')"
value-format="yyyy-MM-dd"
:end-placeholder="$t('结束日期')"
>
</el-date-picker>
</el-form-item>
<el-form-item :label="$t('创建时间')">
......@@ -103,7 +106,6 @@
<div>{{ parseTime(scope.row.createTime) }}</div>
</template>
</el-table-column>
<el-table-column :label="$t('有效期(天)')" align="center" prop="validDays" width="90"/>
<el-table-column :label="$t('开始时间')" align="center" prop="startTime" width="100">
<template slot-scope="scope">
......
<template>
<div class="customer-follow">
<el-dialog append-to-body :title="$t('客户跟进')" :visible.sync="customerFollow.dialogVisible" :before-close="customerFollowClose" width="1200px">
<el-dialog append-to-body :title="$t('客户跟进')" :visible.sync="customerFollow.dialogVisible" :close-on-click-modal="false" :close-on-press-escape="false" :before-close="customerFollowClose" width="1200px">
<el-form class="custom-form-1" ref="customerFollowForm" :model="form" label-width="120px">
<el-row :gutter="10">
<el-col :span="8">
......@@ -49,7 +49,7 @@
<el-col :span="8" v-else>
<el-form-item :label="$t('联系人')" required>
<div class="contact">
<el-input v-model="form.contactName" :value="form.customerContactsId" placeholder="" disabled />
<el-input v-model="form.contactName" placeholder="" disabled />
<img src="@/assets/svg/contacts.svg" class="phonebook" @click="ChooseContactDialog = true" />
</div>
</el-form-item>
......@@ -79,12 +79,19 @@
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item :label="$t('跟进结果')" prop="followMethod">
<el-select v-model="form.resultType" clearable :placeholder="$t('请选择')" :disabled="isView">
<el-option v-for="dict in getDictDatas(DICT_TYPE.CUSTOMER_FOLLOWUP_RESULT_TYPE)" :key="dict.value" :label="isChinese ? dict.label : dict.labelEn" :value="parseInt(dict.value)" />
<el-form-item :label="$t('销售阶段')" prop="saleStage">
<el-select v-model="form.saleStage" clearable :placeholder="$t('请选择')" :disabled="isView">
<el-option v-for="dict in getDictDatas(DICT_TYPE.CUSTOMER_FOLLOWUP_SALE_STAGE)" :key="dict.value" :label="isChinese ? dict.label : dict.labelEn" :value="parseInt(dict.value)" />
</el-select>
</el-form-item>
</el-col>
<!-- <el-col :span="8">-->
<!-- <el-form-item :label="$t('跟进结果')" prop="resultType">-->
<!-- <el-select v-model="form.resultType" clearable :placeholder="$t('请选择')" :disabled="isView">-->
<!-- <el-option v-for="dict in getDictDatas(DICT_TYPE.CUSTOMER_FOLLOWUP_RESULT_TYPE)" :key="dict.value" :label="isChinese ? dict.label : dict.labelEn" :value="parseInt(dict.value)" />-->
<!-- </el-select>-->
<!-- </el-form-item>-->
<!-- </el-col>-->
<el-col :span="24">
<el-form-item :label="$t('目的')" prop="purpose">
<el-input type="textarea" :rows="3" v-model="form.purpose" :placeholder="$t('请输入目的')" maxlength="200" show-word-limit :disabled="isView" />
......@@ -171,9 +178,9 @@
}
</style>
<script>
import { createCustomerFollow, getCustomerFollowPage, getCustomerFollowPage2, addCustomerFollow, getCustomerFollowList, editCustomerFollow, getFollowupNewNumber } from "@/api/ecw/customerFollow"
import { addCustomerFollow, editCustomerFollow, getFollowupNewNumber } from "@/api/ecw/customerFollow"
import { getCustomerContactsSelect } from "@/api/ecw/customerContacts"
import { getOfferPage, getOfferNumber } from "@/api/ecw/offer"
import { getOfferPage, getOfferNumber, getOffer } from "@/api/ecw/offer"
import { DICT_TYPE, getDictDataLabel } from "@/utils/dict"
import { getCustomerContactsListByCustomer } from "@/api/ecw/customerContacts"
import { listAllSimpl, listServiceUser, listSimpleUsers } from "@/api/system/user"
......@@ -259,12 +266,61 @@ export default {
watch: {
"form.offerId"(v) {
if (v) {
getOfferNumber(v).then((r) => {
this.form.offerNumber = r.data
getOffer(v).then((r) => {
let offer = r.data
// 选择了报价单后,需要将报价单中的客户及客户联系人信息回显
this.form.offerNumber = offer.number
this.form.customerId = offer.relationId
this.customerId = offer.relationId
this.form.contactId = offer.relation === 1 ? offer.consignorId : offer.consigneeId
getCustomerContactsListByCustomer({
customerId: this.form.customerId
}).then((res) => {
this.customerContactsList = res.data
this.customerContactsList.forEach((item) => {
if (item.id === this.form.contactId) {
this.form.customerNumber = item.customerNumber
this.form.contactName = item.name
this.form.contactPhone = "+" + item.areaCode + item.phoneNew
this.form.followUserId = item.customerService
}
})
})
})
} else {
this.form.offerNumber = ""
}
},
"form.customerId"(v) {
if (v) {
getCustomerContactsListByCustomer({
customerId: v
}).then((res) => {
this.customerContactsList = res.data
this.customerContactsList.forEach((item) => {
if (item.id === this.form.contactId) {
this.form.customerNumber = item.customerNumber
this.form.contactName = item.name
this.form.contactPhone = "+" + item.areaCode + item.phoneNew
this.form.followUserId = item.customerService
}
})
if (!this.form.contactId) {
this.customerContactsList.some((item) => {
if (item.isDefault) {
this.form.contactId = item.id
this.form.customerNumber = item.customerNumber
this.form.contactName = item.name
this.form.contactPhone = "+" + item.areaCode + item.phoneNew
this.form.followUserId = item.customerService
return true
}
})
}
})
} else {
this.form.customerNumber = ""
}
}
},
methods: {
......@@ -300,6 +356,7 @@ export default {
this.form.contactId = item.customerContactsId
this.form.contactName = item.contactsName
this.form.customerId = item.customerId
this.customerId = item.customerId
this.form.contactPhone = "+" + item.areaCode + item.phoneNew
if (item.customerService) this.form.followUserId = item.customerService
if (item.customerNumber) this.form.customerNumber = item.customerNumber
......@@ -317,6 +374,7 @@ export default {
this.form.contactId = item.id
this.form.contactName = item.name
this.form.customerId = item.customerId
this.customerId = item.customerId
this.form.contactPhone = "+" + item.areaCode + item.phoneNew
if (item.customerService) this.form.followUserId = item.customerService
if (item.customerNumber) this.form.customerNumber = item.customerNumber
......@@ -362,6 +420,7 @@ export default {
parentId: undefined,
parentNumber: undefined,
purpose: undefined,
saleStage: undefined,
resultType: undefined,
status: undefined,
creatorName: this.$store.getters.userId,
......@@ -406,7 +465,7 @@ export default {
this.$modal.msgError(this.$t("请选择跟进方式"))
return
}
if (!this.form.offerId && this.form.followType == 2) {
if (this.form.followType === 2 && !this.form.offerId) {
this.$modal.msgError(this.$t("请选择报价单"))
return
}
......@@ -414,6 +473,35 @@ export default {
if (status === 0) {
this.saveSubmitData(status)
} else {
// 提交结果时,除了附件和上级跟进单为非必填,其他都是必填
if (!this.form.customerId) {
this.$modal.msgError(this.$t("请选择客户"))
return
}
if (!this.form.contactId) {
this.$modal.msgError(this.$t("请选择客户联系人"))
return
}
// if (!this.form.resultType) {
// this.$modal.msgError(this.$t("请选择跟进结果"))
// return
// }
if (!this.form.purpose) {
this.$modal.msgError(this.$t("请填写跟进目的"))
return
}
if (!this.form.feedback) {
this.$modal.msgError(this.$t("请填写跟进情况"))
return
}
if (!this.form.nextTime) {
this.$modal.msgError(this.$t("请选择下次跟进时间"))
return
}
if (!this.form.nextPlan) {
this.$modal.msgError(this.$t("请填写下一步计划"))
return
}
this.$confirm(this.$t("提交后无法修改"), this.$t("提示"), {
confirmButtonText: this.$t("确定"),
cancelButtonText: this.$t("取消"),
......@@ -481,6 +569,7 @@ export default {
...row,
id: null,
parentNumber: row.number,
purpose: row.nextPlan,
followTime: row.nextTime,
nextTime: "",
number: r.data.number,
......@@ -496,7 +585,16 @@ export default {
}
</script>
<style scoped>
<style scoped lang="scss">
.border {
padding: 10px;
border: 1px solid #dcdfe6;
border-radius: 4px;
::v-deep .el-textarea__inner {
padding: 0 4px;
border: 0;
}
}
.text_style {
white-space: pre-wrap;
}
......
......@@ -29,7 +29,7 @@
<script>
import {DICT_TYPE, getDictDatas, getDictDatas2} from "@/utils/dict";
import {getCustomerFollowList, updateCustomerFollowupStatus} from "@/api/ecw/customerFollow";
import {getCustomerFollowupList, updateCustomerFollowupStatus} from "@/api/ecw/customerFollow";
export default {
name: "customerFollowUpdateStatus",
......@@ -61,7 +61,7 @@ export default {
},
methods: {
submit() {
if (!this.status) {
if (this.status == null || this.status == undefined) {
return this.$message.warning(this.$t('请选择修改的状态!'));
}
console.log(this.followupIds, 'this.followupIds')
......@@ -77,17 +77,7 @@ export default {
})
},
getCustomerFollowList() {
this.loading = true
getCustomerFollowList({
...this.followForm,
...this.formatQuery()
}).then((r) => {
this.customerFollowList = r.data.list
this.customerFollowTotal = r.data.total
this.loading = false
})
},
customerFollowUpdateStatusClose() {
this.status = null;
this.$emit('update:show', false)
......
......@@ -191,7 +191,11 @@
</el-table-column>
<el-table-column :label="$t('常用提货网点')">
<template slot-scope="{ row }">
{{ getPickupPointNames(row.pickupPoints) }}
{{
getDictDatas2(DICT_TYPE.PICKUP_POINTS, (row.pickupPoints || "").split(","))
.map((e) => (isChinese ? e.label : e.labelEn))
.join(", ")
}}
</template>
</el-table-column>
<el-table-column :label="$t('年度发货量')" align="center">
......@@ -441,7 +445,7 @@ export default {
this.$message.success(this.$t("保留客户和非主客户不能为同一客户"))
return
}
this.$confirm('保留客户和非主客户,不能在两个不同的客户经理名下,请先确认两个客户在同一个客户经理名下,不允许提交当非主客户/保留客户在移交过程中,不允许合并', '提示', {
this.$confirm('保留客户和非主客户,不能在两个不同的客户经理名下,请先确认两个客户在同一个客户经理名下,不允许提交当非主客户/保留客户在移交过程中,不允许合并', '提示', {
confirmButtonText: this.$t('确定'),
cancelButtonText: this.$t('取消')
}).then(() => {
......
......@@ -15,7 +15,7 @@
<el-col :span="13">
<el-form-item :label="$t('重货标准')" prop="weightUnit">
<el-switch v-model="showZhong" disabled />
<el-switch v-model="showZhong" />
<el-input v-model="form.weightUnit" :placeholder="$t('请输入重货标准')" v-show="showZhong">
<template slot="append">kg/cbm</template>
</el-input>
......@@ -30,7 +30,7 @@
<el-col :span="13">
<el-form-item :label="$t('泡货标准')" prop="lightUnit">
<el-switch v-model="showPao" disabled />
<el-switch v-model="showPao" />
<el-input v-model="form.lightUnit" :placeholder="$t('请输入泡货标准')" v-show="showPao">
<template slot="append">kg/cbm</template>
</el-input>
......@@ -96,11 +96,9 @@ export default {
showZhong1: false,
showPao: false,
showPao1: false,
warehouseList: [],
zhongLines: [],
warehouseList: [], // 仓库列表
importCityList: [], // 进口地址
paoLines: [],
paoLines: []
}
},
......
......@@ -201,6 +201,10 @@ export default {
beginOldEstimateEnterOpenSeaTime:null,
endNewEstimateEnterOpenSeaTime:null,
endOldEstimateEnterOpenSeaTime:null,
memberCode: null,
memberName: null,
memberMobile: null,
memberAreaCode: null,
customerId:this.customerId
}
},
......
This diff is collapsed.
......@@ -37,9 +37,8 @@
</el-col>
<el-col :span="12">
<el-form-item :label="$t('常用提货网点')" prop="pickupPoint">
<el-select v-model="form.pickupPoint" :placeholder="$t('请输入常用提货网点')">
<el-option v-for="node in nodeList"
:key="node.id" :label="isChinese ? node.titleZh : node.titleEn" :value="node.id" />
<el-select filterable multiple v-model="form.pickupPoints" :placeholder="$t('请选择提货网点')">
<el-option v-for="dict in getDictDatas(DICT_TYPE.PICKUP_POINTS)" :key="dict.value" :label="isChinese ? dict.label : dict.labelEn" :value="parseInt(dict.value)" />
</el-select>
</el-form-item>
</el-col>
......
This diff is collapsed.
......@@ -10,13 +10,13 @@
<el-input :placeholder="$t('请输入联系方式')" v-model.trim="queryParams.defaultContactPhone" @keyup.enter.native="handleQuery" onkeyup="this.value=this.value.replace(/(^\s*)|(\s*$)/g,'')"></el-input>
</el-form-item>
<el-form-item :label="$t('客户经理')" prop="customerService">
<el-select clearable v-model="queryParams.customerService" @change="handleQuery" :placeholder="$t('请选择客户经理')" clearable size="small">
<el-select v-model="queryParams.customerService" @change="handleQuery" :placeholder="$t('请选择客户经理')" clearable size="small">
<el-option v-for="dict in customerServiceList"
:key="dict.id" :label="dict.nickname" :value="dict.id"/>
</el-select>
</el-form-item>
<el-form-item :label="$t('客户来源')" prop="source">
<el-select clearable v-model="queryParams.source" :placeholder="$t('请选择客户来源')" @change="handleQuery" clearable size="small">
<el-select v-model="queryParams.source" :placeholder="$t('请选择客户来源')" @change="handleQuery" clearable 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>
......@@ -25,21 +25,14 @@
<el-form-item :label="$t('市场获客')" prop="department">
<dict-selector clearable :type="DICT_TYPE.ECW_CUSTOMER_RESOURCE_TYPE" v-model="queryParams.marketType" formatter="number" @change="handleQuery"></dict-selector>
</el-form-item>
<el-form-item :label="$t('会员电话')" prop="department">
<el-col :span="11">
<area-code-selector style="width: 100%;" v-model="queryParams.memberAreaCode" />
</el-col>
<el-col class="line" :span="2"></el-col>
<el-col :span="11">
<el-input maxlength="11"
width="100%"
class="ml-10 w-200"
clearable
v-model.number="queryParams.memberMobile"
:placeholder="$t('请输入会员电话')"/>
</el-col>
<el-form-item :label="$t('会员电话')" prop="department" label-width="100px" v-show="showSearch">
<el-input :placeholder="$t('请输入会员电话')" class="w-200" clearable v-model.trim="queryParams.memberMobile" @input="queryParams.memberMobile = queryParams.memberMobile.replace(/\s+/g, '')">
<template slot="prepend">
<area-code-selector v-model="queryParams.memberAreaCode" class="w-50"/>
</template>
</el-input>
</el-form-item>
<el-form-item :label="$t('会员编号')" prop="number">
<el-form-item :label="$t('会员编号')" prop="number" v-show="showSearch">
<el-input
v-model.trim="queryParams.memberCode"
:placeholder="$t('请输入会员编号')"
......@@ -47,14 +40,6 @@
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item :label="$t('会员名称')" prop="name">
<el-input
v-model.trim="queryParams.memberName"
:placeholder="$t('请输入会员名称')"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item :label="$t('创建时间')">
<el-date-picker clearable v-model="dateRangeCreateTime" style="width: 240px" value-format="yyyy-MM-dd HH:mm:ss"
type="datetimerange" range-separator="-" :start-placeholder="$t('开始日期')" :end-placeholder="$t('结束日期')" />
......@@ -251,11 +236,7 @@ export default {
pageSize: 10,
name: null,
source: null,
customerService: null,
memberCode: null,
memberName: null,
memberMobile: null,
memberAreaCode: null
customerService: null
}
this.handleQuery();
},
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
......@@ -62,22 +62,21 @@
</el-descriptions>
</div>
</el-card>
<el-card class="card">
<div slot="header" class="card-title">{{ $t("运输") }}</div>
<div style="overflow: auto">
<el-descriptions :column="5" border class="card" v-if="list.consignorId" :labelStyle="{ width: '110px' }">
<el-descriptions-item :label="$t('始发仓')">{{ $l(list.logisticsInfoDto, "startTitle") }}</el-descriptions-item>
<el-descriptions-item :label="$t('目的仓')"> {{ $l(list.logisticsInfoDto, "destCountryTitle") }} - {{ $l(list.logisticsInfoDto, "destCityTitle") }} - {{ $l(list.logisticsInfoDto, "destTitle") }} </el-descriptions-item>
<el-descriptions-item :label="$t('运输方式')">
<el-descriptions :column="4" border class="card" :labelStyle="{ width: '120px' }">
<el-descriptions-item :label="$t('始发仓')" :contentStyle="{ width: '16%' }">{{ $l(list.logisticsInfoDto, "startTitle") }}</el-descriptions-item>
<el-descriptions-item :label="$t('目的仓')" :contentStyle="{ width: '25%' }"> {{ $l(list.logisticsInfoDto, "destCountryTitle") }} - {{ $l(list.logisticsInfoDto, "destCityTitle") }} - {{ $l(list.logisticsInfoDto, "destTitle") }} </el-descriptions-item>
<el-descriptions-item :label="$t('运输方式')" :contentStyle="{ width: '16%' }">
<dict-tag :type="DICT_TYPE.ECW_TRANSPORT_TYPE" :value="list.transportId" />
</el-descriptions-item>
<el-descriptions-item v-if="getDictData(DICT_TYPE.ECW_TRANSPORT_TYPE, list.transportId).cssClass == 'channel'" :label="$t('出货渠道')">{{ list.channelName }}</el-descriptions-item>
<el-descriptions-item :label="$t('服务')">
<el-tag v-if="list.type && list.type.indexOf('1') > -1">
<el-tag v-if="list.serviceType && list.serviceType.indexOf('1') > -1">
{{ $t("集运") }}
</el-tag>
<el-tag v-if="list.type && list.type.indexOf('2') > -1">
<el-tag v-if="list.serviceType && list.serviceType.indexOf('2') > -1">
{{ $t("海外仓") }}
</el-tag>
</el-descriptions-item>
......@@ -340,6 +339,8 @@ export default {
components: { CustomerFollow },
data() {
return {
DICT_TYPE,
getDictData,
customerFollowVisible: false,
// 遮罩层
loading: false,
......@@ -370,9 +371,6 @@ export default {
}
},
computed: {
getDictData() {
return (type, value) => getDictData(type, value) || {}
},
// 根据id获取商品名称(显示优惠列表的时候用)
getProductName() {
return (prodId) => {
......@@ -784,12 +782,12 @@ export default {
margin-top: 20px;
}
/deep/.el-table__fixed-footer-wrapper tbody td.el-table__cell {
font-size: 16px;
/deep/.el-table__fixed-footer-wrapper tbody td.el-table__cell .cell {
font-size: 18px;
font-weight: bold;
}
/deep/.el-table__footer-wrapper tbody td.el-table__cell {
font-size: 20px;
/deep/.el-table__footer-wrapper tbody td.el-table__cell .cell {
font-size: 18px;
font-weight: bold;
}
</style>
......@@ -143,7 +143,7 @@
</div>
<div class="form-section">
<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.serviceType">
<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>
......@@ -394,7 +394,7 @@
<div class="card-title" slot="header">{{ $t("通用") }}</div>
<div class="form-section">
<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" @blur="trimMarks" placeholder="" class="w-200"></el-input>
</el-form-item>
<el-form-item :label="$t('报关方式')" prop="customsType" label-width="200px">
<dict-selector :type="DICT_TYPE.ECW_CUSTOMS_TYPE" v-model="form.customsType" form-type="radio" defaultable />
......@@ -576,7 +576,8 @@ const createDefaultForm = () => {
control: false,
isCargoControl: false,
prodCreateReqVOList: [],
transportVO: {}
transportVO: {},
serviceType: []
}
}
export default {
......@@ -742,6 +743,8 @@ export default {
startTime: [{ required: true, message: this.$t("有效期开始时间不能为空") }],
endTime: [{ required: true, message: this.$t("有效期结束时间不能为空") }],
transportId: [{ required: true, message: this.$t("选择运输方式") }],
// departureId: [{required: true, message: this.$t('请选择始发城市')}],
destCountryId: [{ required: true, message: this.$t("请选择目的国家") }],
channelId: [{ required: true, message: this.$t("选择出货渠道") }],
stopTime: [{ required: true, message: this.$t("不能为空") }],
relation: [{ required: true, message: this.$t("请选择所属人") }],
......@@ -1074,9 +1077,9 @@ export default {
selectedRouter(val) {
if (!val) return
;["1", "4"].forEach((service) => {
if (this.routeOtherServices.indexOf(service) < 0 && this.form.type.indexOf(service) > -1) {
this.form.type.splice(
this.form.type.findIndex((item) => item == service),
if (this.routeOtherServices.indexOf(service) < 0 && this.form.serviceType.indexOf(service == 4 ? 2 : service) > -1) {
this.form.serviceType.splice(
this.form.serviceType.findIndex((item) => item == (service == 4 ? 2 : service)),
1
)
}
......@@ -1084,12 +1087,20 @@ export default {
}
},
activated() {
if (this.form.offerId != this.$route.query.id) {
if (this.$route.query.id && this.form.offerId !== this.$route.query.id) {
console.log("编辑报价单跳转")
// if (this.$route.query.id) {
this.getOffer()
}
if (this.$route.query.copyId && this.form.copyId != this.$route.query.copyId) {
if (this.$route.query.copyId && this.form.copyId !== this.$route.query.copyId) {
console.log("copy报价单跳转")
// if (this.$route.query.copyId) {
this.getOffer()
}
if (this.$route.query.type && this.$route.query.type == 1) {
console.log("客户页面跳转")
this.getCustomerContactsListByCustomer()
}
},
async created() {
await this.getChannelList()
......@@ -1102,29 +1113,18 @@ export default {
getRegionList(4, 4).then((res) => (this.AddressCity = res.data))
competitorListAll().then((res) => (this.competitorList = res.data))
if (this.$route.query.id) {
if (this.$route.query.id || this.$route.query.copyId) {
console.log("编辑或复制报价单转进")
this.getOffer()
} else {
} else if (this.$route.query.type && this.$route.query.type == 1) {
console.log("客户转进")
this.getCustomerContactsListByCustomer()
}else {
console.log("新增报价单转进")
// alert(this.$route.query.customer.defaultContactPhone)
this.addProduct()
}
if (this.$route.query.type == 1) {
let res = await getCustomerContactsListByCustomer({ customerId: parseInt(this.$route.query.customerId || 0) })
this.customer = res.data.find((item) => item.isDefault)
if (this.$route.query.customerType) {
// 客户类型不为空时
const types = this.$route.query.customerType.split(",")
if (types.includes("0")) {
this.form.relation = 1
} else {
this.form.relation = 2
}
}
} else {
this.form.relation = 1
}
},
methods: {
async getChannelList() {
......@@ -1141,12 +1141,31 @@ export default {
}
this.tradeCityList = (await getTradeCityList(query)).data || []
},
getCustomerContactsListByCustomer(){
getCustomerContactsListByCustomer({ customerId: parseInt(this.$route.query.customerId || 0) }).then((res) =>{
this.customer = res.data.find((item) => item.isDefault)
if (this.$route.query.customerType) {
// 客户类型不为空时
const types = this.$route.query.customerType.split(",")
console.log("客户类型:", types)
if (types.includes("0")) {
this.form.relation = 1
} else {
this.form.relation = 2
}
}
})
},
getOffer() {
//加了是否从全部客户列表中报价按钮进来的判断
if (this.$route.query !== 1) {
if (this.$route.query.type !== 1) {
getOffer(this.$route.query.id || this.$route.query.copyId).then((res) => {
console.log("报价单信息", res.data)
let formData = res.data
formData.type = formData.type ? formData.type.split(",").filter((item) => item != "") : []
formData.serviceType = formData.serviceType ? formData.serviceType.split(",").filter((item) => item != "") : []
console.log(formData.serviceType)
console.log(formData)
formData.prodCreateReqVOList = []
if (formData.transportVO && formData.transportVO.packageType) {
formData.transportVO.packageTypeArr = formData.transportVO.packageType.split(",").filter((item) => item && item != "")
......@@ -1179,27 +1198,37 @@ export default {
}
if (this.$route.query.copyId) {
formData.offerId = ""
formData.offerId = null
formData.startTime = ""
formData.endTime = ""
formData.stopTime = ""
// 复制报价单状态重置为草稿
formData.status = 2
}
formData.channelId = formData.channelId || null
this.$set(this, "form", formData)
console.log("报价单归属", this.form.relation == 1? "发货人":"收货人")
// 接口只返回了发货人和收货人ID,还需要调用接口获取详细信息回显
getCustomerContactsSelect({
ids: [res.data.consigneeId, res.data.consignorId].join(",")
}).then(({ data }) => {
this.contactChooseType = "consignee"
this.onContactChoose(data.list.find((item) => item.customerContactsId == res.data.consigneeId))
this.contactChooseType = "consignor"
this.onContactChoose(data.list.find((item) => item.customerContactsId == res.data.consignorId))
this.onContactAssignValueBackToDisplay(data.list.find((item) => item.customerContactsId == res.data.consigneeId), "consignee")
this.onContactAssignValueBackToDisplay(data.list.find((item) => item.customerContactsId == res.data.consignorId), "consignor")
})
})
}
},
onContactAssignValueBackToDisplay(contact, contactChooseType) {
if (!contact) return
this.$set(this.form, contactChooseType + "Company", contact.company)
this.$set(this.form, contactChooseType + "Id", contact.customerContactsId)
this.$set(this.form, contactChooseType + "CountryCode", contact.areaCode)
this.$set(this.form, contactChooseType + "Email", contact.email)
this.$set(this.form, contactChooseType + "Name", contact.contactsName)
this.$set(this.form, contactChooseType + "Phone", contact.phoneNew)
},
onContactChoose(contact) {
if (!contact) return
......@@ -1327,7 +1356,8 @@ export default {
if (this.form.offerId != null) {
let data = Object.assign({}, this.form, {
// transportUpdateReqVOList: this.transportList.filter(item => item._enabled),
prodUpdateReqVOList: this.getProductListWithDefaultValue()
prodUpdateReqVOList: this.getProductListWithDefaultValue(),
serviceType: this.form.serviceType.join(",")
})
if (data.status < 3) {
data.status = status
......@@ -1343,12 +1373,14 @@ export default {
console.log(JSON.stringify(this.contactsList))
data = Object.assign({}, this.form, {
prodCreateReqVOList: this.getProductListWithDefaultValue(),
status
status,
serviceType: this.form.serviceType.join(",")
})
} else {
data = Object.assign({}, this.form, {
prodCreateReqVOList: this.getProductListWithDefaultValue(),
status
status,
serviceType: this.form.serviceType.join(",")
})
}
......@@ -1459,6 +1491,10 @@ export default {
})
})
}
},
// 去掉唛头首尾空格
trimMarks(){
this.form.marks = this.form.marks.trim()
}
}
}
......
......@@ -110,21 +110,31 @@
<!-- 列表 -->
<el-table v-loading="loading" :data="list" border>
<el-table-column :label="$t('报价单号')" align="left" prop="number" width="150">
<el-table-column :label="$t('报价单号')" align="left" prop="number" width="150" fixed>
<template slot-scope="{ row }">
<el-link type="primary" @click.native="$router.push('detail?offerId=' + row.offerId)">{{ row.number }}</el-link>
</template>
</el-table-column>
<el-table-column :label="$t('订单编号')" align="left" width="120">
<el-table-column :label="$t('订单编号')" align="left" width="120" fixed>
<template slot-scope="{ row }">
<a class="el-link el-link--primary is-underline" href="javascript:;" @click="$router.push(`/order/detail?orderId=${row.orderId}`)">{{ row.orderNo }}</a>
</template>
</el-table-column>
<el-table-column :label="$t('最新跟进时间')" width="180">
<template slot-scope="scope" v-if="scope.row.followupBackVO">
{{ parseTime(scope.row.followupBackVO.followTime) }}
</template>
</el-table-column>
<el-table-column :label="$t('最新跟进记录')" width="120">
<template slot-scope="scope" v-if="scope.row.followupBackVO">
<a href="javascript:void(0)" @click="handleCustomerFollowLink(scope.row.followupBackVO)" class="link-type">{{ scope.row.followupBackVO.number }}</a>
</template>
</el-table-column>
<el-table-column :label="$t('联系人')" align="left" prop="relationName" width="120" />
<el-table-column :label="$t('联系电话')" align="left" prop="relationPhone" width="150" />
<el-table-column :label="$t('重要程序')" align="center" prop="importance" />
<el-table-column :label="$t('始发仓')" align="left" prop="startWarehouseName" />
<el-table-column :label="$t('运输方式-渠道/目的仓')">
<el-table-column :label="$t('运输方式-渠道/目的仓')" width="200">
<template slot-scope="{ row }">
<dict-tag :type="DICT_TYPE.ECW_TRANSPORT_TYPE" :value="row.transportId" />
<template v-if="row.channelName"> - {{ row.channelName }} </template>
......@@ -161,7 +171,7 @@
{{ parseTime(row.endTime, "{y}-{m}-{d}") }}
</template>
</el-table-column>
<el-table-column :label="$t('操作')" align="center" class-name="small-padding fixed-width">
<el-table-column :label="$t('操作')" align="center" class-name="small-padding fixed-width" fixed="right">
<template slot-scope="scope">
<!--
0 取消 恢复
......@@ -554,7 +564,12 @@ export default {
this.loading = false
})
},
handleCustomerFollowLink(row) {
this.customerFollowVisible = true
this.$nextTick((_) => {
this.$refs["customerFollow"].handleView(row)
})
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNo = 1
......
......@@ -7,7 +7,7 @@
<script>
import logListCommon from "@/views/ecw/offer/logListCommon"
export default {
name: "offerLogList",
name: "EcwOfferLoglist",
components: { logListCommon },
data() {
return {}
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
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