修改问题

master
sunzehua 1 year ago
commit 612a7968c1

@ -4,10 +4,10 @@ VUE_APP_PREVIEW=true
# VUE_APP_API_BASE_URL=http://127.0.0.1:5000
# VUE_APP_API_BASE_URL=http://60.209.125.238:25805
# 和川大简云正式
VUE_APP_API_BASE_URL=http://47.104.85.216:12345/api
# VUE_APP_API_BASE_URL=http://47.104.85.216:12345/api
# VUE_APP_API_BASE_URL=http://localhost:5010
# 和川大简云测试
# VUE_APP_API_BASE_URL=http://60.209.125.238:35100
VUE_APP_API_BASE_URL=http://60.209.125.238:35100
# 大简云
# VUE_APP_API_BASE_URL=http://47.104.222.4:5020

@ -7,11 +7,11 @@ VUE_APP_PREVIEW=true
# process.env.VUE_APP_API_BASE_URL
# 和川大简云正式
VUE_APP_API_BASE_URL=http://47.104.85.216:12345/api
VUE_APP_SOCKET_BASE_URL=http://47.104.85.216:12345/api
# VUE_APP_API_BASE_URL=http://47.104.85.216:12345/api
# VUE_APP_SOCKET_BASE_URL=http://47.104.85.216:12345/api
# 和川大简云测试
# VUE_APP_API_BASE_URL=http://60.209.125.238:35100
# VUE_APP_SOCKET_BASE_URL=http://60.209.125.238:35100
VUE_APP_API_BASE_URL=http://60.209.125.238:35100
VUE_APP_SOCKET_BASE_URL=http://60.209.125.238:35100
# # 大简云
# VUE_APP_API_BASE_URL=http://47.104.222.4:5020
# VUE_APP_SOCKET_BASE_URL=http://47.104.222.4:5020

@ -3,13 +3,13 @@ VUE_APP_PREVIEW=true
# VUE_APP_API_BASE_URL=http://60.209.125.238:25805
# VUE_APP_SOCKET_BASE_URL=http://60.209.125.238:25805
# 和川大简云正式
VUE_APP_API_BASE_URL=http://47.104.85.216:12345/api
VUE_APP_SOCKET_BASE_URL=http://47.104.85.216:12345/api
# VUE_APP_API_BASE_URL=http://47.104.85.216:12345/api
# VUE_APP_SOCKET_BASE_URL=http://47.104.85.216:12345/api
# VUE_APP_API_BASE_URL=http://localhost:5010
# VUE_APP_SOCKET_BASE_URL=http://localhost:5010
# 和川大简云测试
# VUE_APP_API_BASE_URL=http://60.209.125.238:35100
# VUE_APP_SOCKET_BASE_URL=http://60.209.125.238:35100
VUE_APP_API_BASE_URL=http://60.209.125.238:35100
VUE_APP_SOCKET_BASE_URL=http://60.209.125.238:35100
# 大简云
# VUE_APP_API_BASE_URL=http://47.104.222.4:5020
# VUE_APP_SOCKET_BASE_URL=http://47.104.222.4:5020

@ -3,7 +3,7 @@ import { axios } from '@/utils/request'
// 分页查询快递主表
export function BookingOrderSFPage(parameter) {
return axios({
url: '/BookingOrderSF/Page',
url: '/ExpressDelivery/Page',
method: 'get',
params: parameter
})
@ -11,15 +11,23 @@ export function BookingOrderSFPage(parameter) {
// 保存并返回数据
export function BookingOrderSFSave(parameter) {
return axios({
url: '/BookingOrderSF/Save',
url: '/ExpressDelivery/Save',
method: 'post',
data: parameter
})
}
// 订单取消接口
export function BookingOrderSFCancelBooking(parameter) {
return axios({
url: '/ExpressDelivery/CancelBooking',
method: 'post',
params: parameter
})
}
// 删除单据
export function BookingOrderSFDelete(parameter) {
return axios({
url: '/BookingOrderSF/Delete',
url: '/ExpressDelivery/Delete',
method: 'post',
params: parameter
})
@ -27,7 +35,7 @@ export function BookingOrderSFDelete(parameter) {
// 获取详情
export function BookingOrderSFGet(parameter) {
return axios({
url: '/BookingOrderSF/Get',
url: '/ExpressDelivery/Get',
method: 'post',
params: parameter
})
@ -35,7 +43,7 @@ export function BookingOrderSFGet(parameter) {
// 发送快递
export function BookingOrderSFSendBooking(parameter) {
return axios({
url: '/BookingOrderSF/SendBooking',
url: '/ExpressDelivery/SendBooking',
method: 'post',
params: parameter
})
@ -59,7 +67,7 @@ export function commondbCodeCityList(parameter) {
// 查询快递进度
export function BookingOrderSFQueryKDSchedule(parameter) {
return axios({
url: `/BookingOrderSF/QueryKDSchedule`,
url: `/ExpressDelivery/QueryKDSchedule`,
method: 'post',
params: parameter
})

@ -0,0 +1,26 @@
import { axios } from '@/utils/request'
// 获取
export function MonthlyPayAccountList(parameter) {
return axios({
url: '/MonthlyPayAccount/List',
method: 'get',
params: parameter
})
}
// 删除
export function MonthlyPayAccountDelete(parameter) {
return axios({
url: '/MonthlyPayAccount/Delete',
method: 'post',
params: parameter
})
}
// 新增或修改
export function MonthlyPayAccountSaveOrUpdate(parameter) {
return axios({
url: '/MonthlyPayAccount/SaveOrUpdate',
method: 'post',
data: parameter
})
}

@ -0,0 +1,26 @@
import { axios } from '@/utils/request'
// 获取快递地址簿列表
export function ExpressDeliveryGetAddressList(parameter) {
return axios({
url: '/ExpressDelivery/GetAddressList',
method: 'get',
params: parameter
})
}
// 删除快递地址簿
export function ExpressDeliveryDeleteAddress(parameter) {
return axios({
url: '/ExpressDelivery/DeleteAddress',
method: 'post',
params: parameter
})
}
// 新增或修改地址簿(根据联系人名称和手机号确定唯一)
export function ExpressDeliverySaveOrUpdateAddress(parameter) {
return axios({
url: '/ExpressDelivery/SaveOrUpdateAddress',
method: 'post',
data: parameter
})
}

@ -3,29 +3,41 @@
<div v-if="visible" class="header-animat">
<a-layout-header
v-if="visible"
:class="[fixedHeader && 'ant-header-fixedHeader', sidebarOpened ? 'ant-header-side-opened' : 'ant-header-side-closed', ]"
:style="{ padding: '0', height: '55px'}">
:class="[
fixedHeader && 'ant-header-fixedHeader',
sidebarOpened ? 'ant-header-side-opened' : 'ant-header-side-closed'
]"
:style="{ padding: '0', height: '55px' }"
>
<div v-if="mode === 'sidemenu'" class="header">
<a-menu
:style="{ height: '55px', backgroundColor: headerColor }"
mode="horizontal"
:default-selected-keys="this.defApp"
>
<a-icon v-if="device==='mobile'" class="trigger" :type="collapsed ? 'menu-fold' : 'menu-unfold'" @click="toggle"/>
<a-icon v-else class="trigger" :type="collapsed ? 'menu-unfold' : 'menu-fold'" @click="toggle"/>
<a-icon
v-if="device === 'mobile'"
class="trigger"
:type="collapsed ? 'menu-fold' : 'menu-unfold'"
@click="toggle"
/>
<a-icon v-else class="trigger" :type="collapsed ? 'menu-unfold' : 'menu-fold'" @click="toggle" />
<a-menu-item v-for="(item) in userInfo.apps" :key="item.code" style="top:0px; line-height: 55px; padding-left: 10px; padding-right: 10px" @click="switchApp(item.code)">
<a-menu-item
v-for="item in userInfo.apps"
:key="item.code"
style="top:0px; line-height: 55px; padding-left: 10px; padding-right: 10px"
@click="switchApp(item.code)"
>
{{ item.name }}
</a-menu-item>
<user-menu></user-menu>
</a-menu>
</div>
<div v-else :class="['top-nav-header-index', theme]">
<div class="header-index-wide">
<div class="header-index-left">
<logo class="top-nav-header" :show-title="device !== 'mobile'"/>
<logo class="top-nav-header" :show-title="device !== 'mobile'" />
<s-menu v-if="device !== 'mobile'" mode="horizontal" :menu="menus" :theme="theme" />
<a-icon v-else class="trigger" :type="collapsed ? 'menu-fold' : 'menu-unfold'" @click="toggle" />
</div>
@ -57,7 +69,7 @@ export default {
computed: {
...mapGetters(['userInfo'])
},
created () {
created() {
this.defApp.push(Vue.ls.get(ALL_APPS_MENU)[0].code)
},
mixins: [mixin],
@ -87,14 +99,14 @@ export default {
default: 'desktop'
}
},
data () {
data() {
return {
visible: true,
oldScrollTop: 0,
defApp: []
}
},
mounted () {
mounted() {
document.addEventListener('scroll', this.handleScroll, { passive: true })
},
methods: {
@ -103,18 +115,20 @@ export default {
/**
* 应用切换
*/
switchApp (appCode) {
switchApp(appCode) {
this.defApp = []
const applicationData = this.userInfo.apps.filter(item => item.code === appCode)
const hideMessage = message.loading('正在切换应用!', 0)
this.MenuChange(applicationData[0]).then((res) => {
this.MenuChange(applicationData[0])
.then(res => {
hideMessage()
// eslint-disable-next-line handle-callback-err
}).catch((err) => {
message.error('应用切换异常')
})
// eslint-disable-next-line handle-callback-err
})
.catch(err => {
message.error('应用切换异常')
})
},
handleScroll () {
handleScroll() {
if (!this.autoHideHeader) {
return
}
@ -135,11 +149,11 @@ export default {
})
}
},
toggle () {
toggle() {
this.$emit('toggle')
}
},
beforeDestroy () {
beforeDestroy() {
document.body.removeEventListener('scroll', this.handleScroll, true)
}
}
@ -147,10 +161,10 @@ export default {
<style lang="less">
@import '../index.less';
.header ul{
.header ul {
color: black;
}
.header-animat{
.header-animat {
position: relative;
z-index: @ant-global-header-zindex;
}
@ -160,7 +174,8 @@ export default {
.showHeader-leave-active {
transition: all 0.5s ease;
}
.showHeader-enter, .showHeader-leave-to {
.showHeader-enter,
.showHeader-leave-to {
opacity: 0;
}
</style>

@ -62,8 +62,8 @@ export default {
}
</script>
<style lang="less">
.s-menu-box{
height:calc(100vh - 55px);
.s-menu-box {
height: calc(100vh - 55px);
overflow-y: auto;
scrollbar-width: none; /* firefox */
-ms-overflow-style: none; /* IE 10+ */

@ -9,17 +9,17 @@
</span>
</a>
<notice-icon class="action"/>
<notice-icon class="action" />
<a-dropdown>
<span class="action ant-dropdown-link user-dropdown-menu">
<a-avatar v-if="avatar" class="avatar" size="small" :src="avatar" :loadError="loadError"/>
<a-avatar v-if="avatar" class="avatar" size="small" :src="avatar" :loadError="loadError" />
<span>{{ nickname }}</span>
</span>
<a-menu slot="overlay" class="user-dropdown-menu-wrapper">
<a-menu-item key="4" v-if="mode === 'sidemenu'">
<a @click="appToggled()" >
<a-icon type="swap"/>
<a @click="appToggled()">
<a-icon type="swap" />
<span>切换应用</span>
</a>
</a-menu-item>
@ -40,14 +40,14 @@
<a-menu-divider/> -->
<a-menu-item key="1">
<router-link :to="{ name: 'settings' }">
<a-icon type="setting"/>
<a-icon type="setting" />
<span>账户设置</span>
</router-link>
</a-menu-item>
<a-menu-divider/>
<a-menu-divider />
<a-menu-item key="3">
<a href="javascript:;" @click="handleLogout">
<a-icon type="logout"/>
<a-icon type="logout" />
<span>退出登录</span>
</a>
</a-menu-item>
@ -61,18 +61,10 @@
:confirm-loading="confirmLoading"
@cancel="handleCancel"
>
<a-form :form="form1" >
<a-form-item
:labelCol="labelCol"
:wrapperCol="wrapperCol"
label="选择应用"
>
<a-menu
mode="inline"
:default-selected-keys="this.defApp"
style="border-bottom:0px;lineHeight:55px;"
>
<a-menu-item v-for="(item) in userInfo.apps" :key="item.code" style="top:0px;" @click="switchApp(item.code)">
<a-form :form="form1">
<a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="选择应用">
<a-menu mode="inline" :default-selected-keys="this.defApp" style="border-bottom:0px;lineHeight:55px;">
<a-menu-item v-for="item in userInfo.apps" :key="item.code" style="top:0px;" @click="switchApp(item.code)">
{{ item.name }}
</a-menu-item>
</a-menu>
@ -103,7 +95,7 @@ export default {
default: 'sidemenu'
}
},
data () {
data() {
return {
production: config.production,
labelCol: {
@ -124,60 +116,63 @@ export default {
computed: {
...mapGetters(['token', 'nickname', 'avatar', 'userInfo'])
},
// signalr
async mounted() {
await this.$socket.authenticate(this.token)
},
// signalr
async mounted() {
await this.$socket.authenticate(this.token)
},
methods: {
...mapActions(['Logout', 'MenuChange']),
loadError() {
console.log('加载失败失败失败')
this.$store.commit('SET_AVATAR', '/avatar2.jpg'); //
this.$store.commit('SET_AVATAR', '/avatar2.jpg') //
},
handleLogout () {
handleLogout() {
this.$confirm({
title: '提示',
content: '真的要注销登录吗 ?',
okText: '确定',
cancelText: '取消',
onOk: () => {
return this.Logout({}).then(() => {
setTimeout(() => {
window.location.reload()
}, 16)
}).catch(err => {
this.$message.error({
title: '错误',
description: err.message
return this.Logout({})
.then(() => {
setTimeout(() => {
window.location.reload()
}, 16)
})
.catch(err => {
this.$message.error({
title: '错误',
description: err.message
})
})
})
},
onCancel () {
}
onCancel() {}
})
},
/**
* 打开切换应用框
*/
appToggled () {
appToggled() {
this.visible = true
this.defApp.push(Vue.ls.get(ALL_APPS_MENU)[0].code)
},
switchApp (appCode) {
switchApp(appCode) {
this.visible = false
this.defApp = []
const applicationData = this.userInfo.apps.filter(item => item.code === appCode)
const hideMessage = message.loading('正在切换应用!', 0)
this.MenuChange(applicationData[0]).then((res) => {
hideMessage()
// eslint-disable-next-line handle-callback-err
}).catch((err) => {
message.error('应用切换异常')
})
this.MenuChange(applicationData[0])
.then(res => {
hideMessage()
// eslint-disable-next-line handle-callback-err
})
.catch(err => {
message.error('应用切换异常')
})
},
handleCancel () {
handleCancel() {
this.form1.resetFields()
this.visible = false
}
@ -186,14 +181,14 @@ export default {
</script>
<style lang="less" scoped>
.appRedio {
border:1px solid #91d5ff;
padding:10px 20px;
background: #e6f7ff;
border-radius:2px;
margin-bottom:10px;
color: #91d5ff;
/*display: inline;
.appRedio {
border: 1px solid #91d5ff;
padding: 10px 20px;
background: #e6f7ff;
border-radius: 2px;
margin-bottom: 10px;
color: #91d5ff;
/*display: inline;
margin-bottom:10px;*/
}
}
</style>

@ -2,7 +2,8 @@
<div class="operation-area">
<a-card
:bordered="false"
:bodyStyle="{ 'padding-top': ' 6px', 'padding-left': '5px', 'padding-bottom': '0px', 'margin-bottom': '4px' }">
:bodyStyle="{ 'padding-top': ' 6px', 'padding-left': '5px', 'padding-bottom': '0px', 'margin-bottom': '4px' }"
>
<div class="btn-list more-view">
<a-popconfirm
placement="bottom"
@ -10,7 +11,8 @@
ok-text="是"
cancel-text="否"
@confirm="refreshPage"
@cancel="cancelRefresh">
@cancel="cancelRefresh"
>
<button><span class="iconfont icon-shuaxin" :style="{ fontSize: '17px' }"></span>刷新</button>
</a-popconfirm>
<button @click="copyBooking"><span class="iconfont icon-fuzhi1"></span>复制</button>
@ -53,7 +55,13 @@
</a-upload>
</div>
<div class="btn-list single-view-1" :style="{ width: '110px' }">
<a-popconfirm title="确定删除当前订舱?" ok-text="" cancel-text="" @confirm="removeOrder" @cancel="cancelRemove">
<a-popconfirm
title="确定删除当前订舱?"
ok-text="是"
cancel-text="否"
@confirm="removeOrder"
@cancel="cancelRemove"
>
<button><span class="iconfont icon-shanchu1"></span>删除</button>
</a-popconfirm>
<button @click="addChild()" v-if="!details.hbList || details.hbList.length === 0">
@ -62,6 +70,7 @@
</div>
<div class="btn-list single-view-4">
<button @click="FnGoSendCar"><span class="iconfont icon-yunshu1"></span>派车</button>
<button @click="FnGoExpress"><span class="iconfont icon-goods"></span>快递</button>
</div>
<div class="btn-list single-view-1" :class="{ inLoad: inChildLoading || !changeFlag }">
<button @click="changePage('prev')"><span class="iconfont icon-shang"></span>上一票</button>
@ -85,7 +94,8 @@
:confirmLoading="bookingModelconfirm"
:maskClosable="false"
@ok="handleModelSubmit"
@cancel="handleModelCancel">
@cancel="handleModelCancel"
>
<template v-if="['bookingSpace', 'cutOff'].includes(modelType)">
<a-form>
<a-row :gutter="16">
@ -95,7 +105,8 @@
:labelCol="{ xs: { span: 24 }, sm: { span: 6 } }"
:wrapperCol="{ xs: { span: 24 }, sm: { span: 15 } }"
has-feedback
class="ant-form-file">
class="ant-form-file"
>
<a-radio-group v-model="bookingModelFrom.fileRole">
<a-radio :style="radioStyle" :value="9"> 原始 </a-radio>
<a-radio :disabled="forwarderFlag" :style="radioStyle" :value="1"> 更新 </a-radio>
@ -107,10 +118,18 @@
</a-form>
<template slot="footer">
<a-button @click="handleModelCancel"></a-button>
<a-button type="primary" @click="handleModelSubmit('save')" :loading="EDISloading">保存 <template
v-if="modelType === 'cutOff'">ESI</template><template v-else>EDI</template></a-button>
<a-button type="primary" @click="handleModelSubmit('send')" :loading="EDIUloading">上传 <template
v-if="modelType === 'cutOff'">ESI</template><template v-else>EDI</template></a-button>
<a-button
type="primary"
@click="handleModelSubmit('save')"
:loading="EDISloading"
>保存 <template v-if="modelType === 'cutOff'">ESI</template><template v-else>EDI</template></a-button
>
<a-button
type="primary"
@click="handleModelSubmit('send')"
:loading="EDIUloading"
>上传 <template v-if="modelType === 'cutOff'">ESI</template><template v-else>EDI</template></a-button
>
</template>
</template>
@ -122,7 +141,8 @@
type="primary"
@click="removeModel"
:loading="DelLoading"
v-if="['initCabin'].includes(modelType) || ['ladingBill'].includes(modelType)">
v-if="['initCabin'].includes(modelType) || ['ladingBill'].includes(modelType)"
>
删除
</a-button>
<template v-if="modelType === 'initCabin' || modelType === 'ladingBill'">
@ -139,7 +159,13 @@
DOCX
</a-button> -->
</template>
<a-button class="btn" type="primary" v-if="modelType == 'initCabin'" @click="sendModel" :loading="SendLoading">
<a-button
class="btn"
type="primary"
v-if="modelType == 'initCabin'"
@click="sendModel"
:loading="SendLoading"
>
发送
</a-button>
<a-button class="btn" type="primary" v-if="modelType == 'initCabin'" @click="handleOpenHis">
@ -160,7 +186,8 @@
:labelCol="{ xs: { span: 24 }, sm: { span: 2 } }"
:wrapperCol="{ xs: { span: 24 }, sm: { span: 21 } }"
has-feedback
:style="{ marginLeft: '-18px' }">
:style="{ marginLeft: '-18px' }"
>
<a-input :allowClear="true" v-model="initCabinFrom.toName" />
</a-form-item>
</a-col>
@ -169,7 +196,8 @@
label="打印格式"
:labelCol="{ xs: { span: 24 }, sm: { span: 6 } }"
:wrapperCol="{ xs: { span: 24 }, sm: { span: 15 } }"
has-feedback>
has-feedback
>
<!-- <a-input :allowClear="true" v-model="initCabinFrom.attn" /> -->
<a-select :allowClear="true" v-model="initCabinFrom.templateId">
<a-select-option v-for="item in initCabinSendData" :value="item.id" :key="item.id">
@ -185,7 +213,8 @@
label="ATTN"
:labelCol="{ xs: { span: 24 }, sm: { span: 5 } }"
:wrapperCol="{ xs: { span: 24 }, sm: { span: 15 } }"
has-feedback>
has-feedback
>
<a-input :allowClear="true" v-model="initCabinFrom.attn" />
</a-form-item>
</a-col>
@ -194,7 +223,8 @@
label="电话"
:labelCol="{ xs: { span: 24 }, sm: { span: 5 } }"
:wrapperCol="{ xs: { span: 24 }, sm: { span: 15 } }"
has-feedback>
has-feedback
>
<a-input :allowClear="true" v-model="initCabinFrom.attnTel" />
</a-form-item>
</a-col>
@ -203,7 +233,8 @@
label="邮箱"
:labelCol="{ xs: { span: 24 }, sm: { span: 6 } }"
:wrapperCol="{ xs: { span: 24 }, sm: { span: 15 } }"
has-feedback>
has-feedback
>
<a-input :allowClear="true" v-model="initCabinFrom.attnMail" />
</a-form-item>
</a-col>
@ -212,7 +243,8 @@
label="手机"
:labelCol="{ xs: { span: 24 }, sm: { span: 6 } }"
:wrapperCol="{ xs: { span: 24 }, sm: { span: 15 } }"
has-feedback>
has-feedback
>
<a-input :allowClear="true" v-model="initCabinFrom.attnPhone" />
</a-form-item>
</a-col>
@ -222,7 +254,8 @@
label="FROM"
:labelCol="{ xs: { span: 24 }, sm: { span: 5 } }"
:wrapperCol="{ xs: { span: 24 }, sm: { span: 15 } }"
has-feedback>
has-feedback
>
<a-input :allowClear="true" v-model="initCabinFrom.fromName" />
</a-form-item>
</a-col>
@ -231,7 +264,8 @@
label="电话"
:labelCol="{ xs: { span: 24 }, sm: { span: 5 } }"
:wrapperCol="{ xs: { span: 24 }, sm: { span: 15 } }"
has-feedback>
has-feedback
>
<a-input :allowClear="true" v-model="initCabinFrom.fromTel" />
</a-form-item>
</a-col>
@ -240,7 +274,8 @@
label="邮箱"
:labelCol="{ xs: { span: 24 }, sm: { span: 6 } }"
:wrapperCol="{ xs: { span: 24 }, sm: { span: 15 } }"
has-feedback>
has-feedback
>
<a-input :allowClear="true" v-model="initCabinFrom.fromMail" />
</a-form-item>
</a-col>
@ -249,7 +284,8 @@
label="手机"
:labelCol="{ xs: { span: 24 }, sm: { span: 6 } }"
:wrapperCol="{ xs: { span: 24 }, sm: { span: 15 } }"
has-feedback>
has-feedback
>
<a-input :allowClear="true" v-model="initCabinFrom.fromPhone" />
</a-form-item>
</a-col>
@ -261,7 +297,8 @@
label="提箱小票链接"
:labelCol="{ xs: { span: 24 }, sm: { span: 3 } }"
:wrapperCol="{ xs: { span: 24 }, sm: { span: 15 } }"
has-feedback>
has-feedback
>
<div class="box-flex">
<a-input class="box-input" :allowClear="true" v-model="initCabinFrom.orderUrl.urlTxxp" />
<span @click="copyFun(initCabinFrom.orderUrl.urlTxxp)"><i class="iconfont icon-fuzhi2"></i></span>
@ -273,7 +310,8 @@
label="VGM链接"
:labelCol="{ xs: { span: 24 }, sm: { span: 3 } }"
:wrapperCol="{ xs: { span: 24 }, sm: { span: 15 } }"
has-feedback>
has-feedback
>
<div class="box-flex">
<a-input class="box-input" :allowClear="true" v-model="initCabinFrom.orderUrl.urlVgm" />
<span @click="copyFun(initCabinFrom.orderUrl.urlVgm)"><i class="iconfont icon-fuzhi2"></i></span>
@ -285,10 +323,14 @@
label="SI&VGM链接"
:labelCol="{ xs: { span: 24 }, sm: { span: 3 } }"
:wrapperCol="{ xs: { span: 24 }, sm: { span: 15 } }"
has-feedback>
has-feedback
>
<div class="box-flex">
<a-input class="box-input" :allowClear="true" v-model="initCabinFrom.orderUrl.urlVgmSi" />
<span @click="copyFun(initCabinFrom.orderUrl.urlVgmSi)"><i class="iconfont icon-fuzhi2"></i></span>
<span
@click="copyFun(initCabinFrom.orderUrl.urlVgmSi)"
><i class="iconfont icon-fuzhi2"></i
></span>
</div>
</a-form-item>
</a-col>
@ -299,7 +341,8 @@
label="场站"
:labelCol="{ xs: { span: 24 }, sm: { span: 8 } }"
:wrapperCol="{ xs: { span: 24 }, sm: { span: 15 } }"
has-feedback>
has-feedback
>
<a-select
class="customer-input"
style="width:195px;"
@ -308,7 +351,8 @@
@change="handleYardChange"
show-search
:filter-option="filterOption"
:dropdownMatchSelectWidth="false">
:dropdownMatchSelectWidth="false"
>
<a-select-option v-for="(yard, yindex) in yardSelectData" :key="yindex" :value="yindex">
{{ yard.selectShowTab }}
</a-select-option>
@ -320,12 +364,14 @@
label="联系人"
:labelCol="{ xs: { span: 24 }, sm: { span: 8 } }"
:wrapperCol="{ xs: { span: 24 }, sm: { span: 15 } }"
has-feedback>
has-feedback
>
<a-input
class="box-input"
style="width:195px;"
:allowClear="true"
v-model="initCabinFrom.yardcontract" />
v-model="initCabinFrom.yardcontract"
/>
</a-form-item>
</a-col>
<a-col :span="8">
@ -333,12 +379,14 @@
label="电话"
:labelCol="{ xs: { span: 24 }, sm: { span: 8 } }"
:wrapperCol="{ xs: { span: 24 }, sm: { span: 15 } }"
has-feedback>
has-feedback
>
<a-input
class="box-input"
style="width:195px;"
:allowClear="true"
v-model="initCabinFrom.yardcontracttel" />
v-model="initCabinFrom.yardcontracttel"
/>
</a-form-item>
</a-col>
<a-col :span="8">
@ -346,14 +394,16 @@
label="截港时间"
:labelCol="{ xs: { span: 24 }, sm: { span: 8 } }"
:wrapperCol="{ xs: { span: 24 }, sm: { span: 15 } }"
has-feedback>
has-feedback
>
<!-- {{ details.closingdate || '--' }} -->
<a-date-picker
:show-time="{ format: 'HH:00:00' }"
style="width:120px;"
format="YYYY-MM-DD HH:00:00"
v-model="initCabinFrom.closingTime"
@change="closingdateChange">
@change="closingdateChange"
>
<a-icon slot="suffixIcon" type="time" style="display: none" />
</a-date-picker>
</a-form-item>
@ -363,14 +413,16 @@
label="截单时间"
:labelCol="{ xs: { span: 24 }, sm: { span: 8 } }"
:wrapperCol="{ xs: { span: 24 }, sm: { span: 15 } }"
has-feedback>
has-feedback
>
<!-- {{ details.closedocdate || '--' }} -->
<a-date-picker
style="width:120px;"
:show-time="{ format: 'HH:00:00' }"
format="YYYY-MM-DD HH:00:00"
v-model="initCabinFrom.closeDocTime"
@change="closedocdateChange">
@change="closedocdateChange"
>
<a-icon slot="suffixIcon" type="time" style="display: none" />
</a-date-picker>
</a-form-item>
@ -380,14 +432,16 @@
label="截VGM时间"
:labelCol="{ xs: { span: 24 }, sm: { span: 8 } }"
:wrapperCol="{ xs: { span: 24 }, sm: { span: 15 } }"
has-feedback>
has-feedback
>
<!-- {{ details.closevgmdate || '--' }} -->
<a-date-picker
show-time
style="width:120px;"
format="YYYY-MM-DD HH:mm:ss"
v-model="initCabinFrom.vgmTime"
@change="closevgmdateChange">
@change="closevgmdateChange"
>
<a-icon slot="suffixIcon" type="time" style="display: none" />
</a-date-picker>
</a-form-item>
@ -399,14 +453,16 @@
label="备注"
:labelCol="{ xs: { span: 24 }, sm: { span: 3 } }"
:wrapperCol="{ xs: { span: 24 }, sm: { span: 15 } }"
has-feedback>
has-feedback
>
<div class="box-flex">
<a-textarea
class="remark-input"
style="width:1000px !important; text-align: left;"
:allowClear="true"
:auto-size="{ minRows: 7, maxRows: 7 }"
v-model="initCabinFrom.remark" />
v-model="initCabinFrom.remark"
/>
</div>
<!-- <div class="box-flex">
<a-input
@ -428,13 +484,18 @@
label="VGM提交地址"
:labelCol="{ xs: { span: 24 }, sm: { span: 3 } }"
:wrapperCol="{ xs: { span: 24 }, sm: { span: 15 } }"
has-feedback>
has-feedback
>
<div class="box-flex">
<a-input
style="width:1000px !important; text-align: left;"
:allowClear="true"
v-model="initCabinFrom.orderUrl.urlVgm" />
<span style="margin-left:7px;"><i class="iconfont icon-fuzhi2"><!--复制--></i></span>
v-model="initCabinFrom.orderUrl.urlVgm"
/>
<span
style="margin-left:7px;"
><i class="iconfont icon-fuzhi2"><!--复制--></i></span
>
</div>
</a-form-item>
</a-col>
@ -445,7 +506,8 @@
label="主提单号"
:labelCol="{ xs: { span: 24 }, sm: { span: 8 } }"
:wrapperCol="{ xs: { span: 24 }, sm: { span: 15 } }"
has-feedback>
has-feedback
>
{{ details.mblno || '--' }}
</a-form-item>
</a-col>
@ -454,7 +516,8 @@
label="分提单号"
:labelCol="{ xs: { span: 24 }, sm: { span: 8 } }"
:wrapperCol="{ xs: { span: 24 }, sm: { span: 15 } }"
has-feedback>
has-feedback
>
{{ details.hblno || '--' }}
</a-form-item>
</a-col>
@ -463,7 +526,8 @@
label="海关航次"
:labelCol="{ xs: { span: 24 }, sm: { span: 8 } }"
:wrapperCol="{ xs: { span: 24 }, sm: { span: 15 } }"
has-feedback>
has-feedback
>
{{ details.voyno || '--' }}
</a-form-item>
</a-col>
@ -472,7 +536,8 @@
label="开船日期"
:labelCol="{ xs: { span: 24 }, sm: { span: 8 } }"
:wrapperCol="{ xs: { span: 24 }, sm: { span: 15 } }"
has-feedback>
has-feedback
>
{{ details.etd || '--' }}
</a-form-item>
</a-col>
@ -481,7 +546,8 @@
label="截港时间"
:labelCol="{ xs: { span: 24 }, sm: { span: 8 } }"
:wrapperCol="{ xs: { span: 24 }, sm: { span: 15 } }"
has-feedback>
has-feedback
>
{{ details.closingdate || '--' }}
</a-form-item>
</a-col>
@ -490,7 +556,8 @@
label="截单时间"
:labelCol="{ xs: { span: 24 }, sm: { span: 8 } }"
:wrapperCol="{ xs: { span: 24 }, sm: { span: 15 } }"
has-feedback>
has-feedback
>
{{ details.closedocdate || '--' }}
</a-form-item>
</a-col>
@ -499,7 +566,8 @@
label="截VGM时间"
:labelCol="{ xs: { span: 24 }, sm: { span: 4 } }"
:wrapperCol="{ xs: { span: 24 }, sm: { span: 15 } }"
has-feedback>
has-feedback
>
{{ details.closevgmdate || '--' }}
</a-form-item>
</a-col>
@ -508,7 +576,8 @@
label="装货港"
:labelCol="{ xs: { span: 24 }, sm: { span: 8 } }"
:wrapperCol="{ xs: { span: 24 }, sm: { span: 15 } }"
has-feedback>
has-feedback
>
{{ details.portload || '--' }}
</a-form-item>
</a-col>
@ -517,7 +586,8 @@
label="卸货港"
:labelCol="{ xs: { span: 24 }, sm: { span: 8 } }"
:wrapperCol="{ xs: { span: 24 }, sm: { span: 15 } }"
has-feedback>
has-feedback
>
{{ details.portdischarge || '--' }}
</a-form-item>
</a-col>
@ -526,7 +596,8 @@
label="目的地"
:labelCol="{ xs: { span: 24 }, sm: { span: 8 } }"
:wrapperCol="{ xs: { span: 24 }, sm: { span: 15 } }"
has-feedback>
has-feedback
>
{{ details.destination || '--' }}
</a-form-item>
</a-col>
@ -535,7 +606,8 @@
label="件重尺"
:labelCol="{ xs: { span: 24 }, sm: { span: 8 } }"
:wrapperCol="{ xs: { span: 24 }, sm: { span: 15 } }"
has-feedback>
has-feedback
>
{{ details.pkgs || '--' }} / {{ details.kgs || '--' }} / {{ details.cbm || '--' }}
</a-form-item>
</a-col>
@ -546,13 +618,15 @@
label="备注"
:labelCol="{ xs: { span: 24 }, sm: { span: 3 } }"
:wrapperCol="{ xs: { span: 24 }, sm: { span: 15 } }"
has-feedback>
has-feedback
>
<div class="box-flex">
<a-textarea
style="width:1000px !important; text-align: left;"
:allowClear="true"
:auto-size="{ minRows: 3, maxRows: 3 }"
v-model="initCabinFrom.remark" />
v-model="initCabinFrom.remark"
/>
</div>
</a-form-item>
</a-col>
@ -602,7 +676,8 @@
@click="FnCilckTemplateType(item.id)"
class="items"
:span="11"
:offset="index % 2 == 0 ? 0 : 1">
:offset="index % 2 == 0 ? 0 : 1"
>
<span>·</span>{{ item.displayName }}
</a-col>
</a-row>
@ -620,7 +695,8 @@
placement="right"
:visible="OcrVisible"
@close="OcrOnClose"
class="OCRBox">
class="OCRBox"
>
<a-row justify="end" :style="{ width: '100%', marginTop: '5px' }">
<a-col :span="6" :offset="18">
<span>缩放比例</span>
@ -642,7 +718,8 @@
@mousedown="mousedown"
@mouseup="mouseup"
@mousemove="mousemove"
:style="{ backgroundImage: `url(${imgSrc})` }"></canvas>
:style="{ backgroundImage: `url(${imgSrc})` }"
></canvas>
<ul class="CvBox" v-if="CvBoxType" :style="{ left: `${Bx}px`, top: `${By}px` }">
<li v-for="item in BCvData" :key="item.name" @click="FnClickCvBox(item)">{{ item.name }}</li>
</ul>
@ -660,13 +737,15 @@
label="请选择订阅内容"
:labelCol="{ xs: { span: 24 }, sm: { span: 6 } }"
:wrapperCol="{ xs: { span: 24 }, sm: { span: 15 } }"
has-feedback>
has-feedback
>
<a-checkbox-group
class="trace-check"
v-model="traceValue"
name="checkboxgroup"
:options="traceOptions"
@change="onTraceChange" />
@change="onTraceChange"
/>
</a-form-item>
</a-col>
</a-row>
@ -697,7 +776,8 @@
:showLabel="['shortName']"
:openSearch="true"
:isCopy="false"
@change="getSelectViewRes"></selectView>
@change="getSelectViewRes"
></selectView>
</a-form-model-item>
</a-col>
</a-row>
@ -733,21 +813,22 @@
@change="tablePaginationChange"
:pagination="pagination"
:columns="columns"
:data-source="data">
<a slot="action" slot-scope="text,record" @click="handleInto(record)"></a>
:data-source="data"
>
<a slot="action" slot-scope="text, record" @click="handleInto(record)"></a>
</a-table>
</a-spin>
</a-modal>
<a-modal width="1100px" ref="form" :maskClosable="false" v-model="historyDataFlag" title="历史信息">
<a-spin :spinning="hisLoading">
<div class="hisBox">
</div>
<div class="hisBox"></div>
<a-table
:scroll="{ x: '900' }"
@change="tablePaginationChange"
:pagination="pagination"
:columns="hisColums"
:data-source="hisData">
:data-source="hisData"
>
</a-table>
</a-spin>
</a-modal>
@ -1066,9 +1147,7 @@ export default {
}
},
computed: {
...mapGetters([
'saveFlag'
])
...mapGetters(['saveFlag'])
},
components: {
preOrder, selectView, textareaView
@ -1672,6 +1751,16 @@ export default {
})
})
},
FnGoExpress() {
console.log(this.id)
this.$router.push({
name: 'ExpressModuleDetails',
query: {
type: 'Add',
Ids: `${this.id}`
}
})
},
// ========== OCR ==========
FnClickCvBox(data) {
const Arr = ['pkgs', 'cbm', 'kgs', 'portdischarge', 'destination', 'kindpkgs']
@ -2041,10 +2130,10 @@ export default {
this.EDISloading = false
this.EDIUloading = false
if (res.data.type === 'application/json') {
const reader = new FileReader();
reader.readAsText(res.data, 'utf-8');
const reader = new FileReader()
reader.readAsText(res.data, 'utf-8')
reader.onload = () => {
const _res = JSON.parse(reader.result);
const _res = JSON.parse(reader.result)
console.log(_res)
this.$message.error(_res.message)
}
@ -2105,7 +2194,7 @@ export default {
_this.sendXHZ()
}
},
onCancel() { },
onCancel() {},
class: 'test'
})
},
@ -2384,7 +2473,7 @@ export default {
this.changeFlag = false
setTimeout(() => {
this.changeFlag = true
}, 4000);
}, 4000)
}
},
copyBooking() {

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

@ -87,6 +87,9 @@
<div class="nav-box">
<div class="nav" @click="FnCopy"><i class="iconfont icon-fuzhi"></i>复制</div>
</div>
<div class="nav-box">
<div class="nav" @click="FnExpressTemplate"><i class="iconfont icon-tuandui"></i>收寄件人管理</div>
</div>
</template>
</vxe-toolbar>
<vxe-table
@ -146,6 +149,10 @@
</a-table>
</a-modal>
</a-card>
<a-modal :visible="TemplateVisible" width="60vw" title="收寄件人管理" @cancel="TemplateCancel">
<ExpressTemplate />
<template #footer> </template>
</a-modal>
</div>
</template>
<script>
@ -166,13 +173,16 @@ import {
// import { tmsTenantRelationList } from '@/api/modular/main/tmsaip/tmsTenantRelationTF'
import check from './check.vue'
import editForm from './editForm.vue'
import ExpressTemplate from '../ExpressTemplate/index.vue'
export default {
components: {
check,
editForm
editForm,
ExpressTemplate
},
data() {
return {
TemplateVisible: false,
visible: false,
KDtableData: [],
MapTimeA: [],
@ -237,7 +247,7 @@ export default {
title: '快递状态',
align: 'center',
width: '80',
dataIndex: 'state'
dataIndex: 'currentStateDesc'
},
{
title: '快递公司',
@ -245,12 +255,6 @@ export default {
width: '80',
dataIndex: 'kdCompany'
},
{
title: '快递类型',
align: 'center',
width: '80',
dataIndex: 'type'
},
{
title: '收件公司',
align: 'center',
@ -314,8 +318,11 @@ export default {
},
methods: {
...mapActions(['setIssuetypeList']),
handleOk() {
console.log('ok')
FnExpressTemplate() {
this.TemplateVisible = true
},
TemplateCancel() {
this.TemplateVisible = false
},
FnCopy() {
let selectRecords = this.$refs.xTable1.getCheckboxRecords()

@ -0,0 +1,90 @@
<template>
<a-modal
title="新增收发通模板"
:width="900"
:visible="visible"
:confirmLoading="confirmLoading"
@ok="handleSubmit"
@cancel="handleCancel"
>
<a-spin :spinning="confirmLoading">
<a-form :form="form">
<a-form-item v-show="false"><a-input v-decorator="['id']"/></a-form-item>
<a-form-item label="月结户头" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
<a-input
placeholder="请输入月结户头"
v-decorator="['account', { rules: [{ required: true, message: '请输入月结户头!' }] }]"
/>
</a-form-item>
<a-form-item label="月结卡号" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
<a-input
placeholder="请输入月结卡号"
v-decorator="['cardNo', { rules: [{ required: true, message: '请输入月结卡号!' }] }]"
/>
</a-form-item>
</a-form>
</a-spin>
</a-modal>
</template>
<script>
import { MonthlyPayAccountSaveOrUpdate } from '@/api/modular/main/ExpressMonthlyPay'
export default {
data() {
return {
labelCol: {
xs: { span: 24 },
sm: { span: 5 }
},
wrapperCol: {
xs: { span: 24 },
sm: { span: 15 }
},
visible: false,
confirmLoading: false,
form: this.$form.createForm(this)
}
},
methods: {
//
add(record) {
this.visible = true
},
/**
* 提交表单
*/
handleSubmit() {
const {
form: { validateFields }
} = this
// this.confirmLoading = true
validateFields((errors, values) => {
if (!errors) {
MonthlyPayAccountSaveOrUpdate({ ...values })
.then(res => {
if (res.success) {
this.$message.success('新增成功')
this.confirmLoading = false
this.$emit('ok', values)
this.handleCancel()
} else {
this.$message.error('新增失败') // + res.message
}
})
.finally(res => {
this.confirmLoading = false
})
} else {
this.confirmLoading = false
}
})
},
handleCancel() {
this.form.resetFields()
this.visible = false
}
}
}
</script>

@ -0,0 +1,98 @@
<template>
<a-modal
title="编辑收发通模板"
:width="900"
:visible="visible"
:confirmLoading="confirmLoading"
@ok="handleSubmit"
@cancel="handleCancel"
>
<a-spin :spinning="confirmLoading">
<a-form :form="form">
<a-form-item v-show="false"><a-input v-decorator="['id']"/></a-form-item>
<a-form-item label="月结户头" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
<a-input
placeholder="请输入月结户头"
v-decorator="['account', { rules: [{ required: true, message: '请输入月结户头!' }] }]"
/>
</a-form-item>
<a-form-item label="月结卡号" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
<a-input
placeholder="请输入月结卡号"
v-decorator="['cardNo', { rules: [{ required: true, message: '请输入月结卡号!' }] }]"
/>
</a-form-item>
</a-form>
</a-spin>
</a-modal>
</template>
<script>
import { MonthlyPayAccountSaveOrUpdate } from '@/api/modular/main/ExpressMonthlyPay'
export default {
data() {
return {
labelCol: {
xs: { span: 24 },
sm: { span: 5 }
},
wrapperCol: {
xs: { span: 24 },
sm: { span: 15 }
},
visible: false,
confirmLoading: false,
form: this.$form.createForm(this),
CityData: []
}
},
methods: {
//
edit(record) {
this.visible = true
setTimeout(() => {
console.log(record)
this.form.setFieldsValue({
id: record.id,
account: record.account,
cardNo: record.cardNo
})
}, 100)
},
handleSubmit() {
const {
form: { validateFields }
} = this
this.confirmLoading = true
validateFields((errors, values) => {
if (!errors) {
console.log(values)
MonthlyPayAccountSaveOrUpdate({ ...values })
.then(res => {
if (res.success) {
this.$message.success('编辑成功')
this.confirmLoading = false
this.$emit('ok', values)
this.handleCancel()
} else {
this.$message.error('编辑失败') // + res.message
}
})
.finally(res => {
this.confirmLoading = false
})
} else {
this.confirmLoading = false
}
})
},
handleCancel() {
this.form.resetFields()
this.visible = false
}
}
}
</script>

@ -0,0 +1,362 @@
<template>
<div>
<!-- <a-card :bordered="false" :bodyStyle="tstyle">
<div class="table-page-search-wrapper">
<a-form layout="inline">
<a-row :gutter="48">
<a-col :md="18">
<a-row :gutter="48">
<a-col :md="8" :sm="24">
<a-form-item label="代码">
<a-input v-model="queryParam.title" allow-clear placeholder="请输入代码" />
</a-form-item>
</a-col>
<a-col :md="8" :sm="24">
<a-form-item label="类型">
<a-select style="width: 100%" v-model="queryParam.type" placeholder="请选择类型">
<a-select-option v-for="(item, index) in typeData" :key="index" :value="item.code"
>{{ item.name }}
</a-select-option>
</a-select>
</a-form-item>
</a-col>
</a-row>
</a-col>
<a-col :md="6" :sm="24">
<span class="table-page-search-submitButtons">
<a-button type="primary" @click="FnGetData"></a-button>
<a-button style="margin-left: 8px" @click="init"></a-button>
</span>
</a-col>
</a-row>
</a-form>
</div>
</a-card> -->
<a-card :bordered="false">
<vxe-toolbar>
<template #buttons>
<div class="nav-box">
<div class="nav" @click="$refs.addForm.add()"><i class="iconfont icon-jiahao2fill"></i>新建</div>
</div>
</template>
</vxe-toolbar>
<vxe-table :data="loadData" stripe resizable round :loading="loading" height="680" empty-text="">
<vxe-column type="seq" width="40" fixed="left"></vxe-column>
<vxe-column
v-for="item in columns"
:key="`${item.dataIndex}3`"
:field="item.dataIndex"
:min-width="item.width"
:title="item.title"
:align="item.align"
>
<template #default="{ row }">
<span>{{ row[item.dataIndex] }}</span>
</template>
</vxe-column>
<vxe-column title="操作" fixed="right" width="160" align="center">
<template #default="{ row }">
<vxe-button type="text" @click="$refs.editForm.edit(row)">
<a-icon type="form" :style="{ color: '#13c2c2' }" />
</vxe-button>
<a-popconfirm
title="请确认删除?"
ok-text="是"
cancel-text="否"
@confirm="
e => {
BookingTemplateDelete(row)
}
"
>
<vxe-button type="text">
<a-icon type="delete" :style="{ color: '#13c2c2' }" />
</vxe-button>
</a-popconfirm>
</template>
</vxe-column>
</vxe-table>
<!-- <vxe-pager
:loading="loading"
:current-page="queryParam.currentPage"
:page-size="queryParam.pageSize"
:total="queryParam.totalResult"
:layouts="['PrevPage', 'JumpNumber', 'NextPage', 'FullJump', 'Sizes', 'Total']"
@page-change="handlePageChange"
>
</vxe-pager> -->
<add-form ref="addForm" @ok="handleOk" />
<edit-form ref="editForm" @ok="handleOk" />
</a-card>
</div>
</template>
<script>
import { STable } from '@/components'
import { MonthlyPayAccountDelete, MonthlyPayAccountList } from '@/api/modular/main/ExpressMonthlyPay'
import addForm from './addForm.vue'
import editForm from './editForm.vue'
import { mapGetters } from 'vuex'
export default {
components: {
STable,
addForm,
editForm
},
data() {
return {
form: {},
queryParam: {},
loading: false,
selectList: [],
inEdit: false,
selectUserId: [],
confirmLoading: false,
selectUserName: [],
columns: [
{
title: '月结户头',
align: 'center',
dataIndex: 'account'
},
{
title: '月结卡号',
align: 'center',
dataIndex: 'cardNo'
}
],
row: {},
visible: false,
tstyle: { 'padding-bottom': '0px', 'margin-bottom': '10px' },
loadData: [],
typeData: [],
searchQuery: { name: '' },
selectedRowKeys: [],
selectedRows: []
}
},
created() {
this.init()
},
computed: {
...mapGetters(['bookingInitData'])
},
methods: {
FnRType(e) {
const fn = e => {
let Rdata = ''
this.typeData.forEach(item => {
if (item.code == e) {
Rdata = item.name
}
})
return Rdata
}
let RData = ''
if (e.split(']').length == 1) {
RData = fn(e.split(']')[0])
} else {
e.split(']').forEach(item => {
if (item) {
if (RData == '') {
RData = fn(item.split('[')[1])
} else {
RData = `${RData},${fn(item.split('[')[1])}`
}
}
})
}
return RData
},
init() {
Object.assign(this.$data, this.$options.data())
// this.columns.push({
// title: '',
// width: '150px',
// dataIndex: 'action',
// scopedSlots: { customRender: 'action' }
// })
this.typeData = [
{
code: 10,
name: '收货人'
},
{
code: 20,
name: '发货人'
},
{
code: 30,
name: '通知人'
},
{
code: 40,
name: '第二通知人'
},
{
code: 50,
name: '境外代理'
}
]
this.FnGetData()
},
FnGetData() {
this.loading = true
MonthlyPayAccountList(this.queryParam).then(res => {
this.loadData = res.data
this.loading = false
this.queryParam.currentPage = res.data.pageNo
this.queryParam.pageSize = res.data.pageSize
this.queryParam.totalResult = res.data.totalRows
})
},
handlePageChange({ currentPage, pageSize }) {
this.queryParam.pageNo = currentPage
this.queryParam.pageSize = pageSize
this.FnGetData()
},
BookingTemplateDelete(record) {
MonthlyPayAccountDelete({ ids: record.id }).then(res => {
if (res.success) {
this.$message.success('删除成功')
this.FnGetData()
} else {
this.$message.error('删除失败') // + res.message
}
})
},
handleOk() {
this.init()
}
}
}
</script>
<style lang="less">
.table-operator {
margin-bottom: 18px;
}
button {
margin-right: 8px;
}
.vxe-table--render-default .vxe-body--row.row--stripe {
background: #f5f9fe;
}
.ant-card-body {
padding-top: 10px;
}
.nav-box {
padding: 0 10px;
.nav {
display: inline-block;
margin-right: 8px;
cursor: pointer;
border: 1px solid rgba(255, 255, 255, 0);
padding: 0 10px;
height: 28px;
line-height: 26px;
.iconfont {
margin-right: 6px;
}
&:hover {
border: 1px solid rgba(255, 255, 255, 0);
border-radius: 4px;
}
&:nth-of-type(1) {
.iconfont {
color: #1d8aff;
}
&:hover {
background: #fff;
box-shadow: 0 0 10px #eee;
}
}
&:nth-of-type(2) {
.iconfont {
color: #865ef8;
}
&:hover {
background: #fff;
box-shadow: 0 0 10px #eee;
}
}
&:nth-of-type(3) {
.iconfont {
color: #ff9702;
}
&:hover {
background: #fff;
box-shadow: 0 0 10px #eee;
}
}
&:nth-of-type(4) {
.iconfont {
color: #1d8aff;
}
&:hover {
background: #fff;
box-shadow: 0 0 10px #eee;
}
}
&:nth-of-type(5) {
.iconfont {
color: #ff1062;
}
&:hover {
background: #fff;
box-shadow: 0 0 10px #eee;
}
}
&:nth-of-type(6) {
.iconfont {
color: #1ebeca;
}
&:hover {
background: #fff;
box-shadow: 0 0 10px #eee;
}
}
&:nth-of-type(7) {
.iconfont {
color: #82c93d;
}
&:hover {
background: #fff;
box-shadow: 0 0 10px #eee;
}
}
&:nth-of-type(8) {
.iconfont {
color: #1d8aff;
}
&:hover {
background: #fff;
box-shadow: 0 0 10px #eee;
}
}
}
}
</style>

@ -0,0 +1,158 @@
<template>
<a-modal
title="新增收发通模板"
:width="900"
:visible="visible"
:confirmLoading="confirmLoading"
@ok="handleSubmit"
@cancel="handleCancel"
>
<a-spin :spinning="confirmLoading">
<a-form :form="form">
<a-form-item label="代码" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
<a-input
placeholder="请输入代码"
v-decorator="['title', { rules: [{ required: true, message: '请输入代码!' }] }]"
/>
</a-form-item>
<a-form-item label="类型" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-select
mode="multiple"
style="width: 100%"
placeholder="请选择类型"
v-decorator="['type', { rules: [{ required: true, message: '请选择类型!' }] }]"
>
<a-select-option v-for="(item, index) in typeData" :key="index" :value="item.code">
{{ item.name }}
</a-select-option>
</a-select>
</a-form-item>
<a-form-item label="名称" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-input placeholder="请输入名称" v-decorator="['name']" />
</a-form-item>
<a-form-item label="地址" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
<a-input placeholder="请输入地址" v-decorator="['addr']" />
</a-form-item>
<a-form-item label="国家" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-input placeholder="请输入国家" v-decorator="['country']" />
</a-form-item>
<a-form-item label="电话" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
<a-input placeholder="请输入电话" v-decorator="['tel']" />
</a-form-item>
<a-form-item label="模板内容" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
<a-textarea placeholder="请输入模板内容" :auto-size="{ minRows: 3, maxRows: 5 }" v-decorator="['content']" />
</a-form-item>
<a-form-item label="备注" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
<a-input placeholder="请输入备注" v-decorator="['remark']" />
</a-form-item>
</a-form>
</a-spin>
</a-modal>
</template>
<script>
import { BookingTemplateAdd } from '@/api/modular/main/BookingTemplateManage'
export default {
data() {
return {
labelCol: {
xs: { span: 24 },
sm: { span: 5 }
},
wrapperCol: {
xs: { span: 24 },
sm: { span: 15 }
},
typeData: [],
visible: false,
confirmLoading: false,
form: this.$form.createForm(this)
}
},
methods: {
//
add(record) {
this.visible = true
this.typeData = [
{
code: '10',
name: '收货人'
},
{
code: '20',
name: '发货人'
},
{
code: '30',
name: '通知人'
},
{
code: '40',
name: '第二通知人'
},
{
code: '50',
name: '境外代理'
}
]
},
/**
* 提交表单
*/
handleSubmit() {
const {
form: { validateFields }
} = this
// this.confirmLoading = true
validateFields((errors, values) => {
if (!errors) {
for (const key in values) {
if (key == 'type') {
let Wtype = ''
values[key].forEach((item, index) => {
if (index == 0) {
Wtype = item
} else {
Wtype = `${Wtype},${item}`
}
})
values[key] = Wtype
}
if (typeof values[key] === 'object' && !(values[key] === null)) {
values[key] = JSON.stringify(values[key])
}
}
let type = ''
console.log(values)
if (values.type) {
values.type.split(',').forEach(item2 => {
type == '' ? (type = `[${item2}]`) : (type = `${type}[${item2}]`)
})
}
BookingTemplateAdd({ ...values, type })
.then(res => {
if (res.success) {
this.$message.success('新增成功')
this.confirmLoading = false
this.$emit('ok', values)
this.handleCancel()
} else {
this.$message.error('新增失败') // + res.message
}
})
.finally(res => {
this.confirmLoading = false
})
} else {
this.confirmLoading = false
}
})
},
handleCancel() {
this.form.resetFields()
this.visible = false
}
}
}
</script>

@ -0,0 +1,198 @@
<template>
<a-modal
title="编辑收发通模板"
:width="900"
:visible="visible"
:confirmLoading="confirmLoading"
@ok="handleSubmit"
@cancel="handleCancel"
>
<a-spin :spinning="confirmLoading">
<a-form :form="form">
<a-form-item v-show="false"><a-input v-decorator="['id']"/></a-form-item>
<a-form-item label="公司名称" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
<a-input
placeholder="请输入公司名称"
v-decorator="['company', { rules: [{ required: true, message: '请输入公司名称!' }] }]"
/>
</a-form-item>
<a-form-item label="联系人姓名" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
<a-input
placeholder="请输入联系人姓名"
disabled
v-decorator="['people', { rules: [{ required: true, message: '请输入联系人姓名!' }] }]"
/>
</a-form-item>
<a-form-item label="省份" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-select
style="width: 100%"
placeholder="请选择省份"
v-decorator="['provinceId', { rules: [{ required: true, message: '请选择省份!' }] }]"
@change="
e => {
FnChangeProvince(e)
}
"
>
<a-select-option v-for="item in ProvinceData" :key="item.code" :value="item.code">
{{ item.cnName }}
</a-select-option>
</a-select>
</a-form-item>
<a-form-item label="城市" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-select
style="width: 100%"
placeholder="请选择城市"
v-decorator="['city', { rules: [{ required: true, message: '请选择城市!' }] }]"
>
<!-- @change="
e => {
FnChangeProvince(e)
}
" -->
<a-select-option v-for="item in CityData" :key="item.cnName" :value="item.cnName">
{{ item.cnName }}
</a-select-option>
</a-select>
</a-form-item>
<a-form-item label="详细地址" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-input placeholder="请输入详细地址" v-decorator="['address']" />
</a-form-item>
<a-form-item label="联系电话" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
<a-input placeholder="请输入联系电话" disabled v-decorator="['tel']" />
</a-form-item>
</a-form>
</a-spin>
</a-modal>
</template>
<script>
// import { BookingTemplate } from '@/api/modular/main/BookingLedger'
import { ExpressDeliverySaveOrUpdateAddress } from '@/api/modular/main/ExpressTemplate'
import { commondbCodeProvinceList, commondbCodeCityList } from '@/api/modular/main/ExpressModule'
export default {
data() {
return {
labelCol: {
xs: { span: 24 },
sm: { span: 5 }
},
wrapperCol: {
xs: { span: 24 },
sm: { span: 15 }
},
typeData: [],
visible: false,
confirmLoading: false,
form: this.$form.createForm(this),
ProvinceData: [],
CityData: []
}
},
methods: {
//
edit(record) {
commondbCodeProvinceList().then(res => {
this.ProvinceData = res.data
})
// BookingTemplate({ pageSize: 99999 }).then(res => {
// console.log(res)
// })
this.visible = true
this.typeData = [
{
code: '10',
name: '收货人'
},
{
code: '20',
name: '发货人'
},
{
code: '30',
name: '通知人'
},
{
code: '40',
name: '第二通知人'
},
{
code: '50',
name: '境外代理'
}
]
let WpropString = []
if (record.type) {
if (record.type.includes(']')) {
record.type.split(']').forEach(item => {
if (item.split('[')[1]) {
WpropString.push(item.split('[')[1])
}
})
} else {
WpropString.push(record.type)
}
}
console.log(WpropString)
// const typeOption = this.$options
// this.typeData = typeOption.filters['dictData']('edi_type')
setTimeout(() => {
this.form.setFieldsValue({
id: record.id,
company: record.company,
people: record.people,
provinceId: record.provinceId,
province: record.province,
city: record.city,
address: record.address,
tel: record.tel
})
}, 100)
},
FnChangeProvince(data) {
commondbCodeCityList({ Provincecode: data }).then(res => {
this.CityData = res.data
})
},
handleSubmit() {
const {
form: { validateFields }
} = this
this.confirmLoading = true
validateFields((errors, values) => {
if (!errors) {
this.ProvinceData.forEach(item => {
if (item.code == values.provinceId) {
console.log(item.cnName)
values = {
...values,
province: item.cnName
}
}
})
ExpressDeliverySaveOrUpdateAddress({ ...values })
.then(res => {
if (res.success) {
this.$message.success('编辑成功')
this.confirmLoading = false
this.$emit('ok', values)
this.handleCancel()
} else {
this.$message.error('编辑失败') // + res.message
}
})
.finally(res => {
this.confirmLoading = false
})
} else {
this.confirmLoading = false
}
})
},
handleCancel() {
this.form.resetFields()
this.visible = false
}
}
}
</script>

@ -0,0 +1,389 @@
<template>
<div>
<!-- <a-card :bordered="false" :bodyStyle="tstyle">
<div class="table-page-search-wrapper">
<a-form layout="inline">
<a-row :gutter="48">
<a-col :md="18">
<a-row :gutter="48">
<a-col :md="8" :sm="24">
<a-form-item label="代码">
<a-input v-model="queryParam.title" allow-clear placeholder="请输入代码" />
</a-form-item>
</a-col>
<a-col :md="8" :sm="24">
<a-form-item label="类型">
<a-select style="width: 100%" v-model="queryParam.type" placeholder="请选择类型">
<a-select-option v-for="(item, index) in typeData" :key="index" :value="item.code"
>{{ item.name }}
</a-select-option>
</a-select>
</a-form-item>
</a-col>
</a-row>
</a-col>
<a-col :md="6" :sm="24">
<span class="table-page-search-submitButtons">
<a-button type="primary" @click="FnGetData"></a-button>
<a-button style="margin-left: 8px" @click="init"></a-button>
</span>
</a-col>
</a-row>
</a-form>
</div>
</a-card> -->
<a-card :bordered="false">
<!-- <vxe-toolbar>
<template #buttons>
<div class="nav-box">
<div class="nav" @click="$refs.addForm.add()"><i class="iconfont icon-jiahao2fill"></i>新建</div>
</div>
</template>
</vxe-toolbar> -->
<vxe-table :data="loadData" stripe resizable round :loading="loading" height="520" empty-text="">
<vxe-column type="seq" width="40" fixed="left"></vxe-column>
<vxe-column
v-for="item in columns"
:key="`${item.dataIndex}3`"
:field="item.dataIndex"
:min-width="item.width"
:title="item.title"
:align="item.align"
>
<template #default="{ row }">
<span>{{ row[item.dataIndex] }}</span>
</template>
</vxe-column>
<vxe-column title="操作" fixed="right" width="160" align="center">
<template #default="{ row }">
<vxe-button type="text" @click="$refs.editForm.edit(row)">
<a-icon type="form" :style="{ color: '#13c2c2' }" />
</vxe-button>
<a-popconfirm
title="请确认删除?"
ok-text="是"
cancel-text="否"
@confirm="
e => {
BookingTemplateDelete(row)
}
"
>
<vxe-button type="text">
<a-icon type="delete" :style="{ color: '#13c2c2' }" />
</vxe-button>
</a-popconfirm>
</template>
</vxe-column>
</vxe-table>
<!-- <vxe-pager
:loading="loading"
:current-page="queryParam.currentPage"
:page-size="queryParam.pageSize"
:total="queryParam.totalResult"
:layouts="['PrevPage', 'JumpNumber', 'NextPage', 'FullJump', 'Sizes', 'Total']"
@page-change="handlePageChange"
>
</vxe-pager> -->
<!-- <add-form ref="addForm" @ok="handleOk" /> -->
<edit-form ref="editForm" @ok="handleOk" />
</a-card>
</div>
</template>
<script>
import { STable } from '@/components'
import {
ExpressDeliveryDeleteAddress,
ExpressDeliveryGetAddressList,
ShareToAll,
CancelShare
} from '@/api/modular/main/ExpressTemplate'
import { GetSysUserPage } from '@/api/modular/main/BookingLedger'
import addForm from './addForm.vue'
import editForm from './editForm.vue'
import { mapGetters } from 'vuex'
let timer
export default {
components: {
STable,
addForm,
editForm
},
data() {
return {
form: {},
queryParam: {},
loading: false,
selectList: [],
inEdit: false,
selectUserId: [],
confirmLoading: false,
selectUserName: [],
columns: [
{
title: '公司名称',
align: 'center',
dataIndex: 'company'
},
{
title: '联系人姓名',
align: 'center',
dataIndex: 'people'
},
{
title: '省份',
align: 'center',
dataIndex: 'province'
},
{
title: '城市',
align: 'center',
dataIndex: 'city'
},
{
title: '详细地址',
align: 'center',
dataIndex: 'address'
},
{
title: '联系电话',
align: 'center',
dataIndex: 'tel'
}
],
row: {},
visible: false,
tstyle: { 'padding-bottom': '0px', 'margin-bottom': '10px' },
loadData: [],
typeData: [],
searchQuery: { name: '' },
selectedRowKeys: [],
selectedRows: []
}
},
created() {
this.init()
},
computed: {
...mapGetters(['bookingInitData'])
},
methods: {
FnRType(e) {
const fn = e => {
let Rdata = ''
this.typeData.forEach(item => {
if (item.code == e) {
Rdata = item.name
}
})
return Rdata
}
let RData = ''
if (e.split(']').length == 1) {
RData = fn(e.split(']')[0])
} else {
e.split(']').forEach(item => {
if (item) {
if (RData == '') {
RData = fn(item.split('[')[1])
} else {
RData = `${RData},${fn(item.split('[')[1])}`
}
}
})
}
return RData
},
init() {
Object.assign(this.$data, this.$options.data())
// this.columns.push({
// title: '',
// width: '150px',
// dataIndex: 'action',
// scopedSlots: { customRender: 'action' }
// })
this.typeData = [
{
code: 10,
name: '收货人'
},
{
code: 20,
name: '发货人'
},
{
code: 30,
name: '通知人'
},
{
code: 40,
name: '第二通知人'
},
{
code: 50,
name: '境外代理'
}
]
this.FnGetData()
},
FnGetData() {
this.loading = true
ExpressDeliveryGetAddressList(this.queryParam).then(res => {
this.loadData = res.data
this.loading = false
this.queryParam.currentPage = res.data.pageNo
this.queryParam.pageSize = res.data.pageSize
this.queryParam.totalResult = res.data.totalRows
})
},
handlePageChange({ currentPage, pageSize }) {
this.queryParam.pageNo = currentPage
this.queryParam.pageSize = pageSize
this.FnGetData()
},
BookingTemplateDelete(record) {
ExpressDeliveryDeleteAddress({ ids: record.id }).then(res => {
if (res.success) {
this.$message.success('删除成功')
this.FnGetData()
} else {
this.$message.error('删除失败') // + res.message
}
})
},
handleOk() {
this.init()
}
}
}
</script>
<style lang="less">
.table-operator {
margin-bottom: 18px;
}
button {
margin-right: 8px;
}
.vxe-table--render-default .vxe-body--row.row--stripe {
background: #f5f9fe;
}
.ant-card-body {
padding-top: 10px;
}
.nav-box {
padding: 0 10px;
.nav {
display: inline-block;
margin-right: 8px;
cursor: pointer;
border: 1px solid rgba(255, 255, 255, 0);
padding: 0 10px;
height: 28px;
line-height: 26px;
.iconfont {
margin-right: 6px;
}
&:hover {
border: 1px solid rgba(255, 255, 255, 0);
border-radius: 4px;
}
&:nth-of-type(1) {
.iconfont {
color: #1d8aff;
}
&:hover {
background: #fff;
box-shadow: 0 0 10px #eee;
}
}
&:nth-of-type(2) {
.iconfont {
color: #865ef8;
}
&:hover {
background: #fff;
box-shadow: 0 0 10px #eee;
}
}
&:nth-of-type(3) {
.iconfont {
color: #ff9702;
}
&:hover {
background: #fff;
box-shadow: 0 0 10px #eee;
}
}
&:nth-of-type(4) {
.iconfont {
color: #1d8aff;
}
&:hover {
background: #fff;
box-shadow: 0 0 10px #eee;
}
}
&:nth-of-type(5) {
.iconfont {
color: #ff1062;
}
&:hover {
background: #fff;
box-shadow: 0 0 10px #eee;
}
}
&:nth-of-type(6) {
.iconfont {
color: #1ebeca;
}
&:hover {
background: #fff;
box-shadow: 0 0 10px #eee;
}
}
&:nth-of-type(7) {
.iconfont {
color: #82c93d;
}
&:hover {
background: #fff;
box-shadow: 0 0 10px #eee;
}
}
&:nth-of-type(8) {
.iconfont {
color: #1d8aff;
}
&:hover {
background: #fff;
box-shadow: 0 0 10px #eee;
}
}
}
}
</style>
Loading…
Cancel
Save