Commit 0f3a9acd authored by houjn@hikoon.cn's avatar houjn@hikoon.cn

Merge branch 'predev' of http://gitlab.jdshangmen.com/jiedao-app/jiedao-app-operator into dev

 Conflicts:
	src/views/ecw/financial/receivable.vue
	src/views/ecw/financial/voucher.vue
parents 6d96854c 0d949c2c
...@@ -6,7 +6,7 @@ VUE_APP_TITLE = 捷道管理系统-测试站 ...@@ -6,7 +6,7 @@ VUE_APP_TITLE = 捷道管理系统-测试站
# 捷道管理系统/开发环境 # 捷道管理系统/开发环境
VUE_APP_BASE_API = 'https://api.jd.jdshangmen.com' VUE_APP_BASE_API = 'https://api.sit.jdshangmen.com'
# 路由懒加载 # 路由懒加载
VUE_CLI_BABEL_TRANSPILE_MODULES = true VUE_CLI_BABEL_TRANSPILE_MODULES = true
......
...@@ -143,6 +143,18 @@ export function billCreate(data) { ...@@ -143,6 +143,18 @@ export function billCreate(data) {
}); });
} }
/**
* 获得提单补料pdf
*/
export function getBoxLadingBillPdf(params) {
return request({
url: "/ecw/box-lading-bill/getBoxLadingBillPdf",
method: "get",
responseType: 'arraybuffer',
params,
});
}
/** /**
* 驳船 * 驳船
* *
......
...@@ -379,3 +379,19 @@ export function changeCustomerAir(data){ ...@@ -379,3 +379,19 @@ export function changeCustomerAir(data){
}) })
} }
//获得客户日志
export function getCustomerOperatelogPage(params){
return request({
url:'/customer/operate-log/page',
method:'get',
params
})
}
// 获得客户日志详情
export function getCustomerOperatelog(params){
return request({
url:'customer/operate-log/get',
method:'get',
params
})
}
...@@ -9,7 +9,7 @@ export function createDeptTarget(data) { ...@@ -9,7 +9,7 @@ export function createDeptTarget(data) {
}) })
} }
// 我的业绩 // 我的部门业绩
export function myDeptAchievementByPage(data) { export function myDeptAchievementByPage(data) {
return request({ return request({
url: '/sale/dept-target/myDeptAchievementByPage', url: '/sale/dept-target/myDeptAchievementByPage',
...@@ -17,7 +17,7 @@ export function myDeptAchievementByPage(data) { ...@@ -17,7 +17,7 @@ export function myDeptAchievementByPage(data) {
data: data data: data
}) })
} }
// 我的部门业绩 // 我的业绩
export function myAchievementByPage(data) { export function myAchievementByPage(data) {
return request({ return request({
url: '/sale/dept-target/myAchievementByPage', url: '/sale/dept-target/myAchievementByPage',
...@@ -26,6 +26,15 @@ export function myAchievementByPage(data) { ...@@ -26,6 +26,15 @@ export function myAchievementByPage(data) {
}) })
} }
// 全部业绩
export function allAchievementByPage(data) {
return request({
url: '/sale/dept-target/allAchievementByPage',
method: 'post',
data: data
})
}
// 更新部门业绩目标设置 // 更新部门业绩目标设置
export function updateDeptTarget(data) { export function updateDeptTarget(data) {
return request({ return request({
...@@ -67,6 +76,15 @@ export function getDeptTargetPage(query) { ...@@ -67,6 +76,15 @@ export function getDeptTargetPage(query) {
}) })
} }
// 获得我的部门及以下业绩目标设置分页
export function getMyDeptTargetPage(query) {
return request({
url: '/sale/dept-target/deptStatistics/page',
method: 'get',
params: query
})
}
// 获得个人目标进度分页 // 获得个人目标进度分页
export function getPersonTargetPage(query) { export function getPersonTargetPage(query) {
return request({ return request({
...@@ -85,3 +103,23 @@ export function exportDeptTargetExcel(query) { ...@@ -85,3 +103,23 @@ export function exportDeptTargetExcel(query) {
responseType: 'blob' responseType: 'blob'
}) })
} }
// 导出部门业绩目标设置 Excel
export function exportDetailExcel(query) {
return request({
url: '/sale/dept-target/exportDetailExcel',
method: 'get',
params: query,
responseType: 'blob'
})
}
// 导出部门业绩目标设置 Excel
export function exportStatisticsExcel(query) {
return request({
url: '/sale/dept-target/exportStatisticsExcel',
method: 'get',
params: query,
responseType: 'blob'
})
}
...@@ -273,6 +273,14 @@ export function getPayableInfoByIds(query) { ...@@ -273,6 +273,14 @@ export function getPayableInfoByIds(query) {
params: query params: query
}) })
} }
//获取佣金应付款详情
export function getCommissionPayable(params){
return request({
url:'/ecw/commission-payable/get',
method:"get",
params
})
}
// 创建付款单 // 创建付款单
export function createPayment(data) { export function createPayment(data) {
...@@ -282,6 +290,14 @@ export function createPayment(data) { ...@@ -282,6 +290,14 @@ export function createPayment(data) {
data: data data: data
}) })
} }
// 创建佣金订单
export function commissionPayment(data){
return request({
url:'/ecw/commission-payment/create',
method:'post',
data
})
}
// 获取付款单列表 // 获取付款单列表
export function getPaymentList(query) { export function getPaymentList(query) {
...@@ -300,6 +316,22 @@ export function getPaymentInfoByIds(query) { ...@@ -300,6 +316,22 @@ export function getPaymentInfoByIds(query) {
params: query params: query
}) })
} }
// 获得佣金付款单
export function getCommissionPayment(params){
return request({
url:'/ecw/commission-payment/get',
method:'get',
params
})
}
// 获得佣金付款单列表
export function getCommissionPayableList(params){
return request({
url:'/ecw/commission-payable/list',
method:'get',
params
})
}
// 获得付款单付款明细 // 获得付款单付款明细
export function getPaymentItem(query) { export function getPaymentItem(query) {
...@@ -310,6 +342,7 @@ export function getPaymentItem(query) { ...@@ -310,6 +342,7 @@ export function getPaymentItem(query) {
}) })
} }
// 更新付款单 // 更新付款单
export function updatePayment(data) { export function updatePayment(data) {
return request({ return request({
...@@ -318,6 +351,14 @@ export function updatePayment(data) { ...@@ -318,6 +351,14 @@ export function updatePayment(data) {
data: data data: data
}) })
} }
// 更新佣金付款单
export function commissionPaymentUpdate(data){
return request({
url:'/ecw/commission-payment/update',
method:'put',
data
})
}
// 删除付款单 // 删除付款单
export function deletePayment(id) { export function deletePayment(id) {
...@@ -337,25 +378,278 @@ export function paymentVerify(query) { ...@@ -337,25 +378,278 @@ export function paymentVerify(query) {
} }
// 核销付款单 // 核销付款单
export function paymentVerification(id) { export function paymentVerification(data) {
return request({ return request({
url: '/ecw/payment/verification/' + id, url: '/ecw/payment/verification',
method: 'GET' method: 'post',
data
}) })
} }
// 反核销付款单 // 反核销付款单
export function paymentVerificationCancel(id) { export function paymentVerificationCancel(data) {
return request({ return request({
url: '/ecw/payment/verificationCancel/' + id, url: '/ecw/payment/verificationCancel',
method: 'GET' method: 'post',
data
})
}
// 取消付款单反核销
export function paymentCancelFinancePaymentWriteOffNo(data){
return request({
url:'ecw/payment/cancelFinancePaymentWriteOffNo',
method:'post',
data
}) })
} }
// 反审核付款单 // 反审核付款单
export function paymentVerifyCancel(id) { export function paymentVerifyCancel(data) {
return request({
url: '/ecw/payment/verifyCancel',
method: 'post',
data
})
}
//获取佣金应付款
export function payablePage(params){
return request({
url:'/ecw/commission-payable/page',
method:'get',
params
})
}
//获取佣金付款单
export function commissionPaymentPage(params){
return request({
url:'/ecw/commission-payment/page',
method:'get',
params
})
}
// 根据流程主键获取付款单流程审核信息
export function getPaymentApprove(id) {
return request({ return request({
url: '/ecw/payment/verifyCancel/' + id, url: '/ecw/payment/getPaymentApprove?id='+id,
method: 'GET' method: 'GET'
}) })
} }
// 根据流程主键获取收款单流程审核信息
export function getReceiptApprove(id) {
return request({
url: '/ecw/receipt/getReceiptApprove?id='+id,
method: 'GET'
})
}
// 收款单核销
export function financeReceiptWriteOff(query) {
return request({
url: '/ecw/receipt/financeReceiptWriteOff',
method: 'POST',
data: query
})
}
// 收款单银行明细核销
export function financeReceiptItemWriteOff(query) {
return request({
url: '/ecw/receipt-item/financeReceiptItemWriteOff',
method: 'POST',
data: query
})
}
// 收款单银行明细核销反审核
export function financeReceiptItemWriteOffNo(query) {
return request({
url: '/ecw/receipt-item/financeReceiptItemWriteOffNo',
method: 'POST',
data: query
})
}
// 收款单反审核
export function financeApproveNo(query) {
return request({
url: '/ecw/receipt/financeApproveNo',
method: 'POST',
data: query
})
}
// 收款单反核销
export function financeReceiptWriteOffNo(query) {
return request({
url: '/ecw/receipt/financeReceiptWriteOffNo',
method: 'POST',
data: query
})
}
// 收款单取消审核
export function cancelFinanceReceiptApproval(query) {
return request({
url: '/ecw/receipt/cancelFinanceReceiptApproval',
method: 'POST',
data: query
})
}
// 取消收款单反审核
export function cancelFinanceReceiptApprovalNo(query) {
return request({
url: '/ecw/receipt/cancelFinanceReceiptApprovalNo',
method: 'POST',
data: query
})
}
// 取消收款单全部核销审核
export function cancelFinanceReceiptWriteOff(query) {
return request({
url: '/ecw/receipt/cancelFinanceReceiptWriteOff',
method: 'POST',
data: query
})
}
// 取消收款单反核销
export function cancelFinanceReceiptWriteOffNo(query) {
return request({
url: '/ecw/receipt/cancelFinanceReceiptWriteOffNo',
method: 'POST',
data: query
})
}
// 取消收款明细核销
export function cancelFinanceReceiptItemWriteOff(query) {
return request({
url: '/ecw/receipt-item/cancelFinanceReceiptItemWriteOff',
method: 'POST',
data: query
})
}
// 取消收款明细反核销
export function cancelFinanceReceiptItemWriteOffNo(query) {
return request({
url: '/ecw/receipt-item/cancelFinanceReceiptItemWriteOffNo',
method: 'POST',
data: query
})
}
// 取消审核
export function cancelFinancePaymentApproval(data){
return request({
url:'/ecw/payment/cancelFinancePaymentApproval',
method:'post',
data
})
}
// 取消付款单反审核
export function cancelFinancePaymentApprovalNo(data){
return request({
url:'/ecw/payment/cancelFinancePaymentApprovalNo',
method:'post',
data
})
}
// 取消付款单核销
export function cancelFinancePaymentWriteOff(data){
return request({
url:'/ecw/payment/cancelFinancePaymentWriteOff',
method:'post',
data
})
}
// 取消付款单反核销
export function cancelFinancePaymentWriteOffNo(data){
return request({
url:'/ecw/payment/cancelFinancePaymentWriteOffNo',
method:'post',
data
})
}
//删除佣金付款单
export function commissionPaymentDelete(params){
return request({
url:'/ecw/commission-payment/delete',
method:'delete',
params
})
}
//反审核佣金付款单
export function commissionPaymentVerifyCancel(data){
return request({
url:'/ecw/commission-payment/verifyCancel',
method:'post',
data
})
}
// 佣金付款单核销
export function commissionPaymentVerification(data){
return request({
url:'/ecw/commission-payment/verification',
method:'post',
data
})
}
//付款单反核销申请
export function commissionPaymentVerificationCancel(data){
return request({
url:'/ecw/commission-payment/verificationCancel',
method:'post',
data
})
}
// 取消付款单反审核
export function commissionPaymentCancelFinancePaymentApprovalNo(data){
return request({
url:'/ecw/commission-payment/cancelFinancePaymentApprovalNo',
method:'post',
data
})
}
// 取消付款单核销
export function commissionPaymentCancelFinancePaymentWriteOff(data){
return request({
url:'/ecw/commission-payment/cancelFinancePaymentWriteOff',
method:'post',
data
})
}
// 取消付款单反核销
export function commissionPaymentCancelFinancePaymentWriteOffNo(data){
return request({
url:'/ecw/commission-payment/cancelFinancePaymentWriteOffNo',
method:'post',
data,
})
}
//取消付款单审核
export function commissionPaymentCancelFinancePaymentApproval(data){
return request({
url:'/ecw/commission-payment/cancelFinancePaymentApproval',
method:'post',
data
})
}
//根据流程主键获取付款单流程审核信息
export function commissionPaymentGetPaymentApprove(params){
return request({
url:'/ecw/commission-payment/getPaymentApprove',
method:'get',
params
})
}
import request from '@/utils/request'
// 创建提单托运人
export function createLadingShipper(data) {
return request({
url: '/ecw/lading-shipper/create',
method: 'post',
data: data
})
}
// 更新提单托运人
export function updateLadingShipper(data) {
return request({
url: '/ecw/lading-shipper/update',
method: 'put',
data: data
})
}
// 删除提单托运人
export function deleteLadingShipper(id) {
return request({
url: '/ecw/lading-shipper/delete?id=' + id,
method: 'delete'
})
}
// 获得提单托运人
export function getLadingShipper(id) {
return request({
url: '/ecw/lading-shipper/get?id=' + id,
method: 'get'
})
}
// 获得提单托运人分页
export function getLadingShipperPage(query) {
return request({
url: '/ecw/lading-shipper/page',
method: 'get',
params: query
})
}
// 导出提单托运人 Excel
export function exportLadingShipperExcel(query) {
return request({
url: '/ecw/lading-shipper/export-excel',
method: 'get',
params: query,
responseType: 'blob'
})
}
...@@ -133,3 +133,13 @@ export function offerDeptPage(params) { ...@@ -133,3 +133,13 @@ export function offerDeptPage(params) {
params params
}) })
} }
// 导出部分报价单 exportDeptOfferExcel
export function exportDeptOfferExcel(query) {
return request({
url: '/ecw/offer/dept/export-excel',
method: 'get',
params: query,
responseType: 'blob'
})
}
\ No newline at end of file
...@@ -167,7 +167,7 @@ export function orderWarehouseIn(data){ ...@@ -167,7 +167,7 @@ export function orderWarehouseIn(data){
// 入仓修改 // 入仓修改
export function orderWarehouseInUpdateApply(data){ export function orderWarehouseInUpdateApply(data){
return request({ return request({
url: '/order/order-warehouse-in/update-apply', url: '/order/order-warehouse-in/update-or-updateApply',
method: 'put', method: 'put',
data data
}) })
...@@ -213,6 +213,15 @@ export function saveOrUpdateOrderLocation(data){ ...@@ -213,6 +213,15 @@ export function saveOrUpdateOrderLocation(data){
}) })
} }
// 入仓修改储位
export function updateWarehouseInLocation(data){
return request({
url: '/order/location/update-warehouse-in-location',
method: 'put',
data
})
}
// 获取入仓修改审批单详情-审批使用 // 获取入仓修改审批单详情-审批使用
export function getWarehouseUpdateApprovalInfo(id) { export function getWarehouseUpdateApprovalInfo(id) {
return request({ return request({
...@@ -329,6 +338,7 @@ export function feeApplicationGet(params){ ...@@ -329,6 +338,7 @@ export function feeApplicationGet(params){
params params
}) })
} }
// 调仓-明细-后台使用
export function getAdjustInfo(params){ export function getAdjustInfo(params){
return request({ return request({
url:'/order/order-warehouse-in/get-adjust-info', url:'/order/order-warehouse-in/get-adjust-info',
...@@ -657,3 +667,12 @@ export function exportUnload(params){ ...@@ -657,3 +667,12 @@ export function exportUnload(params){
responseType: 'blob' responseType: 'blob'
}) })
} }
// 操作日志分页
export function operateLogPage(params){
return request({
url: '/ecw/order-operate-log/page',
method: 'get',
params: params
})
}
...@@ -107,9 +107,9 @@ export function exportExcel(params) { ...@@ -107,9 +107,9 @@ export function exportExcel(params) {
return request({ return request({
url: '/ecw/order-exception/export-excel', url: '/ecw/order-exception/export-excel',
method: 'get', method: 'get',
timeout: 6*60*1000, timeout: 3*60*1000,
params, params,
//timeout: 3*60*1000, // timeout: 3*60*1000,
responseType: 'arraybuffer' responseType: 'arraybuffer'
}) })
} }
...@@ -79,3 +79,11 @@ export function calculationPrice(data){ ...@@ -79,3 +79,11 @@ export function calculationPrice(data){
data: data data: data
}) })
} }
//新增商品可用优惠信息列表
export function product_coupon_newProd(params){
return request({
url:'/product/coupon/newProd/list',
method:'get',
params
})
}
...@@ -26,6 +26,15 @@ export function deleteSupplier(id) { ...@@ -26,6 +26,15 @@ export function deleteSupplier(id) {
}) })
} }
// 获得供应商列表
export function getSupplierList(query) {
return request({
url: '/ecw/supplier/list',
method: 'get',
params: query
})
}
// 获得供应商 // 获得供应商
export function getSupplier(id) { export function getSupplier(id) {
return request({ return request({
...@@ -52,3 +61,30 @@ export function exportSupplierExcel(query) { ...@@ -52,3 +61,30 @@ export function exportSupplierExcel(query) {
responseType: 'blob' responseType: 'blob'
}) })
} }
// 创建清关文件号码
export function createFileNo(data) {
return request({
url: '/ecw/clearance-file-no/create',
method: 'post',
data: data
})
}
// 更新供应商
export function updateFileNo(data) {
return request({
url: '/ecw/clearance-file-no/update',
method: 'put',
data: data
})
}
// 获得清关文件号码
export function getFileNoPage(query) {
return request({
url: '/ecw/clearance-file-no/page',
method: 'get',
params: query
})
}
\ No newline at end of file
...@@ -9,6 +9,15 @@ export function listDept(query) { ...@@ -9,6 +9,15 @@ export function listDept(query) {
}) })
} }
// 查询当前登陆人的所属部门列表
export function myListDept(query) {
return request({
url: '/system/dept/myListDept',
method: 'get',
params: query
})
}
// 查询部门列表(排除节点) // 查询部门列表(排除节点)
export function listDeptExcludeChild(deptId) { export function listDeptExcludeChild(deptId) {
return request({ return request({
......
...@@ -32,14 +32,14 @@ ...@@ -32,14 +32,14 @@
:key="dict.value" :label="dict.label" :value="parseInt(dict.value)" /> :key="dict.value" :label="dict.label" :value="parseInt(dict.value)" />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item :label="$t('创建时间')" prop="createTime"> <!-- <el-form-item :label="$t('创建时间')" prop="createTime">
<el-date-picker <el-date-picker
v-model="form.createTime" v-model="form.createTime"
type="datetime" type="datetime"
value-format="timestamp" value-format="timestamp"
:placeholder="$t('选择创建时间')"> :placeholder="$t('选择创建时间')">
</el-date-picker> </el-date-picker>
</el-form-item> </el-form-item> -->
<el-form-item :label="$t('客户经理')" prop="customerService"> <el-form-item :label="$t('客户经理')" prop="customerService">
<el-select v-model="form.customerService" :placeholder="$t('请选择客户经理')"> <el-select v-model="form.customerService" :placeholder="$t('请选择客户经理')">
<el-option v-for="item in serviceUserList" <el-option v-for="item in serviceUserList"
......
<template>
<el-select
v-model="valueSync"
multiple
filterable
clearable
remote
reserve-keyword
:disabled="disabled"
placeholder="请输入关键词"
@focus="remoteMethod('')"
:remote-method="remoteMethod"
:loading="loading">
<el-option
v-for="(item) in list"
:key="item.id"
:label="$l(item, 'company') + '('+item.companyCode+')'"
:value="item.id">
</el-option>
</el-select>
</template>
<script>
import {getSupplierList, getSupplierPage} from '@/api/ecw/supplier'
export default {
props:{
companyType: [String, Number],
value: [Array],
disabled: {
type: Boolean,
default: false
}
},
data(){
return {
valueSync: [],
list:[],
loading: false
}
},
computed:{
},
watch:{
valueSync(val){
this.$emit('input', val)
},
value(val){
this.valueSync = this.value
this.init(val)
}
},
created(){
this.valueSync = this.value
this.init(this.value)
},
methods:{
init(val){
if(val === null || val == undefined || val == '') return
let params = {
ids: val.toString()
}
getSupplierList(params).then(res => {
this.list = res.data
})
},
remoteMethod(keyword){
let params = {
pageSize: 500,
companyType: this.companyType
}
params.keyword = keyword
this.loading = true
getSupplierPage(params)
.then(res => this.list = res.data.list)
.finally(() => this.loading = false)
}
}
}
</script>
\ No newline at end of file
<template>
<div>
<div class="area-code">{{ selected.join(', ') }}</div>
<el-button v-show="!readonly" type="primary" size="mini" @click="handleOpen">选择</el-button>
<el-dialog
title="储位"
:visible.sync="dialogVisible"
width="30%"
append-to-body
:before-close="handleClose">
<el-tabs v-model="activeName" type="card" @tab-click="activeWarehouse = {}">
<el-tab-pane :label="item.name" :name="'' + index" v-for="(item, index) in area" :key="index">
<div>
<div style="text-align: center">{{$t('区域')}}</div>
<div style="background-color: #efefef;padding: 10px 10px 0;border: #dcdcdc solid 1px;border-radius: 2px">
<el-row :gutter="20">
<el-col :span="12" v-for="warehouse in item.children" :key="warehouse.id">
<div
class="warehouse-block"
:class="{'warehouse-block-selected': warehouse.selected, 'warehouse-block-active': warehouse.id === activeWarehouse.id}"
@click="handleSelectWarehouse(warehouse)"
>
{{ warehouse.name }}
</div>
</el-col>
</el-row>
</div>
</div>
<div>
<div style="text-align: center">{{$t('仓位')}}</div>
<div class="position-group">
<div class="position" v-for="position in activeWarehouse.positionList" :key="position.id" @click="handleSelectPosition(position)">
<template v-if="position.children">
<div
class="position-item"
v-for="item in position.children"
:key="item.id"
@click.stop="handleSelectPositionChild(item)"
:class="{'position-item-active': item.selected}">
{{ item.code }}
</div>
</template>
<template v-else>
<div
class="position-item"
:class="{'position-item-active': position.selected}">
{{ position.code }}
</div>
</template>
</div>
</div>
</div>
<el-divider></el-divider>
{{$t('已选择')}}:{{ selected.join(', ') }}
<el-divider></el-divider>
</el-tab-pane>
</el-tabs>
<span slot="footer" class="dialog-footer">
<el-button @click="dialogVisible = false">取 消</el-button>
<el-button type="primary" @click="handleSave">确 定</el-button>
</span>
</el-dialog>
</div>
</template>
<script>
import {getByWarehouseId} from "@/api/ecw/warehouseArea"
import { updateWarehouseInLocation } from "@/api/ecw/order"
export default {
name: "WarehouseAreaSelect",
props: {
value: {
type: Array,
default: () => []
},
orderId: Number,
orderItemId: Number,
// 入仓记录id
warehouseInId: Number,
warehouseId: {
type: Number,
default: undefined
},
// 是否入仓修改
isEditing: {
type: Boolean,
default: false
},
readonly: {
type: Boolean,
default: false
}
},
data() {
return {
dialogVisible: false,
activeName: '0',
activeWarehouse: {},
area: [],
}
},
mounted() {
this.initArea()
},
computed: {
// code array
selected() {
const result = []
this.area?.forEach(e => {
// 仓库
e.children?.forEach(f => {
// 区域
if (f.selected) result.push(f.code)
else f.positionList?.forEach(g => {
// 位置
if (g.selected) result.push(f.code + g.code)
else if(g.children) g.children?.forEach(k => {
// 子位置
if (k.selected) result.push(f.code + k.code)
})
})
})
})
return result
},
inputValue(){
const result = []
this.area?.forEach(e => {
// 仓库
e.children?.forEach(f => {
// 区域
if (f.selected) result.push({
orderId: this.orderId,
wareId: f.pid,
areaId: f.id
})
else {
f.positionList?.forEach(g => {
// 位置
if (g.selected) result.push({
orderId: this.orderId,
wareId: g.domainId,
areaId: g.areaId,
locationId: g.id
})
else g.children?.forEach(k => {
// 子位置
if (k.selected) result.push({
orderId: this.orderId,
wareId: k.domainId,
areaId: k.areaId,
locationId: k.id
})
})
})
}
})
})
return result
}
},
methods: {
handleOpen(){
this.dialogVisible = true
// this.initArea()
},
handleSave(){
this.$nextTick(() => {
const data = this.inputValue.map(e => {
return {
...e,
orderItemId: this.orderItemId,
warehouseInId: this.warehouseInId
}
})
this.$emit('input', data)
this.dialogVisible = false
if (this.isEditing || this.warehouseInId) {
updateWarehouseInLocation(data).then(() => {
this.$message.success('储位修改成功')
})
}
})
},
handleClose() {
this.dialogVisible = false
},
handleSelectWarehouse(warehouse) {
this.activeWarehouse = warehouse
if (!!warehouse.selected) {
warehouse.selected = false
return
} else if(this.activeWarehouseId !== warehouse.id) {
this.activeWarehouseId = warehouse.id
if (this.inputValue.find(e => e.areaId === warehouse.id)){
return
}
}
warehouse.selected = true
// 区域被选,清空该区域下的位置
if(warehouse.positionList) warehouse.positionList?.forEach(g => {
g.selected = false
g.children?.forEach(k => {
k.selected = false
})
})
},
handleSelectPositionChild(position) {
if (!!position.selected) {
position.selected = false
// 反选位置时,检查父区域下是否所有位置被反选,若是,选父区域
const parentAre = this.area.find(e => e.id === position.domainId).children.find(f => f.id === position.areaId)
if (!parentAre.selected) {
// 检查父区域下是否所有位置被反选
let hasSelected = false
parentAre.positionList?.forEach(g => {
// 位置
g.children?.forEach(k => {
// 子位置
if (k.selected) hasSelected = true
})
})
// 所有子位置被反选,选父区域
if (!hasSelected) parentAre.selected = true
}
} else {
position.selected = true
// 选位置时,父区域反选
this.area.find(e => e.id === position.domainId).children.find(f => f.id === position.areaId).selected = false
}
},
handleSelectPosition(position) {
if (!!position.selected) {
position.selected = false
} else {
position.selected = true
// 选位置时,父区域反选
this.area.find(e => e.id === position.domainId).children.find(f => f.id === position.areaId).selected = false
}
},
initArea(){
return getByWarehouseId({ warehouseId: this.warehouseId }).then(r => {
const area = r.data
area.forEach(e => {
// 仓库
e.children?.forEach(f => {
// 区域
f.selected = this.isSelected(e.id, f.id)
if(f.positionList) f.positionList.forEach(g => {
// 位置
g.selected = this.isSelected(e.id, f.id, g.id)
g.children?.forEach(k => {
// 子位置
k.selected = this.isSelected(e.id, f.id, k.id)
})
})
})
})
this.area = area
})
},
// 用于储位回显选中
isSelected(warehouse, area, position = 0){
return !!this.value.find(e => warehouse === e.wareId && area === e.areaId && position === e.locationId)
},
}
}
</script>
<style scoped>
.area-code{
display: inline-block;
margin-right: 15px;
}
.warehouse-block{
background-color: white;
border-radius: 5px;
height: 42px;
line-height: 42px;
text-align: center;
margin-bottom: 15px;
cursor: pointer;
transition: 0.5s;
box-shadow: #bfbfbf 3px 3px 14px 0;
user-select: none;
}
.warehouse-block:hover{
opacity: 0.9;
transition: 0.5s;
transform: scale(1.02);
box-shadow: #8f8f8f 7px 5px 14px 0;
}
.warehouse-block-active{
box-shadow: #b1a4cb 7px 5px 14px 0;
transform: scale(1.04);
background-color: #9ab7e1;
color: #ffffff;
}
.warehouse-block-selected{
color: #ffffff;
background-color: #4085e3;
}
.position-group{
display: flex;
background-color: #EFEFEF;
border: 1px #EFEFEF solid;
gap: 1px;
min-height: 64px;
flex-flow: wrap;
}
.position{
width: calc(20% - 1px);
height: 64px;
display: flex;
flex-direction: column;
gap: 1px;
user-select: none;
}
.position-item{
width: 100%;
background-color: #FFFFFF;
flex: 1;
cursor: pointer;
text-align: center;
display: flex;
justify-content: center;
align-items: center;
}
.position-item:hover{
background-color: #d7dbe3;
}
.position-item-active{
background-color: #4085e3;
color: white;
}
.position-item-active:hover{
background-color: #4085e3;
opacity: 0.8;
}
</style>
...@@ -1132,7 +1132,6 @@ ...@@ -1132,7 +1132,6 @@
"会计": "Accounting", "会计": "Accounting",
"出纳": "Cashier", "出纳": "Cashier",
"经手人": "Handler", "经手人": "Handler",
"确订打印": "OK to print",
"收款日期": "Payment Date", "收款日期": "Payment Date",
"应收合计": "Total Receivable", "应收合计": "Total Receivable",
"收款金额": "Receipt Amount", "收款金额": "Receipt Amount",
...@@ -3790,5 +3789,61 @@ ...@@ -3790,5 +3789,61 @@
"版本号不能为空": "Version number cannot be empty", "版本号不能为空": "Version number cannot be empty",
"内部号不能为空": "Internal number cannot be empty", "内部号不能为空": "Internal number cannot be empty",
"版本链接不能为空": "Version link cannot be empty", "版本链接不能为空": "Version link cannot be empty",
"强制更新不能为空": "Forced update cannot be empty" "强制更新不能为空": "Forced update cannot be empty",
"请输入名称-中文": "Please enter a name - Chinese",
"请输入名称-英文": "Please enter a name - English",
"请输入内部名称-中文": "Please enter internal name - Chinese",
"请输入内部名称-英文": "Please enter the internal name - English",
"备注-中文": "Remarks - Chinese",
"备注-英文": "Remarks - English",
"请输入备注-英文": "Please enter remarks - English",
"货物毛重(KGS)": "Gross weight of goods (KGS)",
"请输入货物毛重": "Please enter the gross weight of the goods",
"提单确认件.xlsx": "Bill of Lading Confirmation.xlsx",
"提交佣金付款单反核销申请成功,请耐心等待审核结果": "Successfully submitted the commission payment form cancellation application. Please be patient and wait for the review result",
"客户档案未设置银行账户。": "The customer profile does not have a bank account set up.",
"反核销审核详情": "Details of anti verification approval",
"全部核销审核详情": "Full verification and review details",
"取消全部核销审核": "Cancel All Write-off Review",
"提交收款单反核销": "Submit payment receipt for reverse verification",
"输入金额不对": "Incorrect input amount",
"标签超过1000需要耐心等候标签生成,请稍候": "Tags exceeding 1000 require patience to wait for tag generation, please wait",
"首次入仓时间": "First entry time",
"订单{no}的放货箱数不能大于可放货箱数": "The number of delivery boxes for order {no} cannot be greater than the number of available delivery boxes",
"请填写合作开始时间": "Please fill in the start time of cooperation",
"请填写合作结束时间": "Please fill in the cooperation end time",
"境内外": "domestic and foreign",
"佣金付款单反审核": "De-approval of commission payment documents",
"佣金付款单核销申请": "Commission Payment Document Verification Application",
"佣金付款单反核销申请": "Commission Payment Document Reverse Write-off Application",
"取消佣金付款单反审核": "Cancel the approval of commission payment documents",
"提交取消反审核": "Submit Cancel De-approval",
"取消佣金付款单核销": "Cancel commission payment document verification",
"取消付款单核销": "Cancel Payment Order Write-off",
"取消佣金付款单反核销": "Cancel Commission Payment Document Cancellation",
"取消付款单反核销": "Cancel Payment Document Cancellation Write-off",
"零": "zero",
"玖": "nine",
"仟": "Thousand",
"兆": "Megabyte",
"角": "horn",
"厘": "Centimeters",
"取消付款单反审核": "Cancel Payment Order De-approval",
"提交核销": "Submit for verification",
"是否确认删除渠道管理编号为{channelId}的数据项?": "Are you sure to delete the data item with channel management number {channelId}?",
"流程详情": "Flow details",
"收款单核销审核": "The payment voucher verification review",
"系统提示": "System prompt",
"合计:{totalNum}箱,{totalVolume}m³(测) {totalChargeVolume}m³(重) {totalWeight}KG": "Total:{totalNum}Box,{totalVolume}m³(Test) {totalChargeVolume}m³(Weight) {totalWeight}KG",
"确定要取消此报价单么?": "",
"确定要恢复此报价单么?": "",
"确定要删除此报价单么?": "",
"优质条件": "",
"港口": "",
"出证速度": "Speed of certification",
"快": "fast",
"慢": "slow",
"CTN NO": "",
"请输入CTN NO": "请输入CTN NO",
"境内外类型": "Internal and external types"
} }
\ No newline at end of file
...@@ -161,7 +161,7 @@ ...@@ -161,7 +161,7 @@
"目的仓": "目的仓", "目的仓": "目的仓",
"目的地": "目的地", "目的地": "目的地",
"确定": "确定", "确定": "确定",
"确订打印": "确订打印", "确定打印": "确定打印",
"确认添加": "确认添加", "确认添加": "确认添加",
"税率": "税率", "税率": "税率",
"箱数": "箱数", "箱数": "箱数",
......
import { Message, MessageBox, Notification, Loading } from 'element-ui' import { Message, MessageBox, Notification, Loading } from 'element-ui'
import i18n from "@/i18n";
let loadingInstance; let loadingInstance;
export default { export default {
// 消息提示 // 消息提示
msg(content) { msg(content) {
...@@ -21,19 +20,19 @@ export default { ...@@ -21,19 +20,19 @@ export default {
}, },
// 弹出提示 // 弹出提示
alert(content) { alert(content) {
MessageBox.alert(content, "系统提示") MessageBox.alert(content, i18n.t("系统提示"))
}, },
// 错误提示 // 错误提示
alertError(content) { alertError(content) {
MessageBox.alert(content, "系统提示", { type: 'error' }) MessageBox.alert(content, i18n.t("系统提示"), { type: 'error' })
}, },
// 成功提示 // 成功提示
alertSuccess(content) { alertSuccess(content) {
MessageBox.alert(content, "系统提示", { type: 'success' }) MessageBox.alert(content, i18n.t("系统提示"), { type: 'success' })
}, },
// 警告提示 // 警告提示
alertWarning(content) { alertWarning(content) {
MessageBox.alert(content, "系统提示", { type: 'warning' }) MessageBox.alert(content, i18n.t("系统提示"), { type: 'warning' })
}, },
// 通知提示 // 通知提示
notify(content) { notify(content) {
...@@ -52,18 +51,19 @@ export default { ...@@ -52,18 +51,19 @@ export default {
Notification.warning(content) Notification.warning(content)
}, },
// 确认窗体 // 确认窗体
confirm(content) { confirm(content) {
return MessageBox.confirm(content, "系统提示", { return MessageBox.confirm(content, i18n.t("系统提示"), {
confirmButtonText: '确定', confirmButtonText: i18n.t('确定'),
cancelButtonText: '取消', cancelButtonText: i18n.t('取消'),
type: "warning", type: "warning",
}) })
}, },
// 提交内容 // 提交内容
prompt(content) { prompt(content) {
return MessageBox.prompt(content, "系统提示", { return MessageBox.prompt(content, i18n.t("系统提示"), {
confirmButtonText: '确定', confirmButtonText: i18n.t('确定'),
cancelButtonText: '取消', cancelButtonText: i18n.t('取消'),
type: "warning", type: "warning",
}) })
}, },
......
...@@ -157,8 +157,8 @@ export const constantRoutes = [ ...@@ -157,8 +157,8 @@ export const constantRoutes = [
}, { }, {
path: 'process-instance/detail', path: 'process-instance/detail',
component: (resolve) => require(['@/views/bpm/processInstance/detail'], resolve), component: (resolve) => require(['@/views/bpm/processInstance/detail'], resolve),
name: '流程详情', name: 'Flow details',
meta: {title: '流程详情', activeMenu: '/bpm/task/my'} meta: {title: '流程详情',titleEn:'Flow details', activeMenu: '/bpm/task/my'}
} }
] ]
}, },
...@@ -171,13 +171,13 @@ export const constantRoutes = [ ...@@ -171,13 +171,13 @@ export const constantRoutes = [
path: 'empAchievement', path: 'empAchievement',
component: (resolve) => require(['@/views/ecw/deptTarget/empAchievement'], resolve), component: (resolve) => require(['@/views/ecw/deptTarget/empAchievement'], resolve),
name: '员工业绩', name: '员工业绩',
meta: {title: '员工业绩', activeMenu: '/deptTarget/index'} meta: {title: '员工业绩',titleEn: 'Emp Achievement', activeMenu: '/deptTarget/index'}
}, },
{ {
path: 'myDeptAchievement', path: 'myDeptAchievement',
component: (resolve) => require(['@/views/ecw/deptTarget/myDeptAchievement'], resolve), component: (resolve) => require(['@/views/ecw/deptTarget/myDeptAchievement'], resolve),
name: '我的部门业绩', name: '我的部门业绩',
meta: {title: '我的部门业绩', activeMenu: '/deptTarget/myDeptAchievement'} meta: {title: '我的部门业绩',titleEn: 'My dept Achievement', activeMenu: '/deptTarget/myDeptAchievement'}
} }
] ]
}, },
......
...@@ -70,6 +70,7 @@ export const DICT_TYPE = { ...@@ -70,6 +70,7 @@ export const DICT_TYPE = {
ECW_DATA_SOURCE: 'data_source', // 数据来源 ECW_DATA_SOURCE: 'data_source', // 数据来源
ECW_REGION_TYPE: 'region_trade_type', // 区域类型 ECW_REGION_TYPE: 'region_trade_type', // 区域类型
ECW_TRANSPORT_TYPE: 'transport_type', //货运方式 ECW_TRANSPORT_TYPE: 'transport_type', //货运方式
ECW_KYC_DATA: 'member_control_reuest', //会员控单方式
ECW_CHARGE_TYPE: 'warehouse_charge_type', //仓储收费方式 ECW_CHARGE_TYPE: 'warehouse_charge_type', //仓储收费方式
ECW_SHELF_TYPE: 'shelf_type', //货架类型 ECW_SHELF_TYPE: 'shelf_type', //货架类型
ECW_PRODUCT_MATERIAL: 'product_material', //商品材质 ECW_PRODUCT_MATERIAL: 'product_material', //商品材质
...@@ -151,6 +152,7 @@ export const DICT_TYPE = { ...@@ -151,6 +152,7 @@ export const DICT_TYPE = {
CUSTOMER_CREDIT_RULE_TYPE: 'customer_credit_rule_type', CUSTOMER_CREDIT_RULE_TYPE: 'customer_credit_rule_type',
CUSTOMER_LEVEL_RULE_TYPE: 'customer_level_rule_type', CUSTOMER_LEVEL_RULE_TYPE: 'customer_level_rule_type',
CUSTOMER_ESOURCE_TYPE:'customer_resource_type',//客户资源类型 CUSTOMER_ESOURCE_TYPE:'customer_resource_type',//客户资源类型
CUSTOMER_OPERATE_TYPE:'customer_operate_type',
// order // order
ORDER_TYPE: 'order_type', // 订单类型 ORDER_TYPE: 'order_type', // 订单类型
PRODUCT_RECORD_ATTRIBUTE: 'product_record_attribute', //产品备案属性 PRODUCT_RECORD_ATTRIBUTE: 'product_record_attribute', //产品备案属性
...@@ -193,6 +195,7 @@ export const DICT_TYPE = { ...@@ -193,6 +195,7 @@ export const DICT_TYPE = {
ORDER_SPECIAL_NEEDS:'order_special_needs', // 订单特殊需求 ORDER_SPECIAL_NEEDS:'order_special_needs', // 订单特殊需求
ORDER_ABNORMAL_STATE:'order_abnormal_state', ORDER_ABNORMAL_STATE:'order_abnormal_state',
TARGET_TYPE:'target_type',//部门业绩目标类型 TARGET_TYPE:'target_type',//部门业绩目标类型
RECEIPT_ITEM_STATE:'receipt_item_state',//收款单明细状态
// ========== 出货模块 ========== // ========== 出货模块 ==========
BOX_SHIPPING_TRAILER_STATUS: 'shipping_trailer_status', // 拖车状态 BOX_SHIPPING_TRAILER_STATUS: 'shipping_trailer_status', // 拖车状态
BOX_SHIPPING_CUSTOMS_TYPE: 'shipping_customs_type', // 报关方式 BOX_SHIPPING_CUSTOMS_TYPE: 'shipping_customs_type', // 报关方式
......
...@@ -339,6 +339,54 @@ export default { ...@@ -339,6 +339,54 @@ export default {
id: this.processInstance.businessKey, id: this.processInstance.businessKey,
path: this.processInstance.processDefinition?.formCustomViewPath path: this.processInstance.processDefinition?.formCustomViewPath
}, },
//付款单审核-所有审核流程详情组件
finance_payment_approve:{
component: () => import('@/views/ecw/financial/components/PaymentApproval'),
id: this.processInstance.businessKey,
path: this.processInstance.processDefinition?.formCustomViewPath
},
//收款单审核
finance_receipt_approve:{
component: () => import('@/views/ecw/financial/components/CollectionApproval'),
id: this.processInstance.businessKey,
path: this.processInstance.processDefinition?.formCustomViewPath
},
//收款单核销
finance_receipt_write_off:{
component: () => import('@/views/ecw/financial/components/CollectionWriteoff'),
id: this.processInstance.businessKey,
path: this.processInstance.processDefinition?.formCustomViewPath
},
//收款单反核销审核
finance_receipt_write_off_no:{
component: () => import('@/views/ecw/financial/components/CollectionApproval'),
id: this.processInstance.businessKey,
path: this.processInstance.processDefinition?.formCustomViewPath
},
//收款单核销反审核
finance_receipt_approve_no:{
component: () => import('@/views/ecw/financial/components/CollectionApproval'),
id: this.processInstance.businessKey,
path: this.processInstance.processDefinition?.formCustomViewPath
},
//收款单银行实收明细核销
finance_receipt_item_write_off:{
component: () => import('@/views/ecw/financial/components/CollectionBankDetail'),
id: this.processInstance.businessKey,
path: this.processInstance.processDefinition?.formCustomViewPath
},
//收款单银行实收反核销
finance_receipt_item_write_off_no:{
component: () => import('@/views/ecw/financial/components/CollectionBankDetail'),
id: this.processInstance.businessKey,
path: this.processInstance.processDefinition?.formCustomViewPath
},
//佣金付款单审核详情-关于佣金付款单所有审核详情
commissionPaymentDetails:{
component: ()=>import('@/views/ecw/financial/components/commissionPaymentDetails.vue'),
id: this.processInstance.businessKey,
path: this.processInstance.processDefinition?.formCustomViewPath
}
} }
console.log('formCustomViewPath', this.processInstance.processDefinition.formCustomViewPath.trim()) console.log('formCustomViewPath', this.processInstance.processDefinition.formCustomViewPath.trim())
return map[this.processInstance.processDefinition.formCustomViewPath.trim()] return map[this.processInstance.processDefinition.formCustomViewPath.trim()]
......
...@@ -119,7 +119,7 @@ ...@@ -119,7 +119,7 @@
{{$t('操作')}}<i class="el-icon-arrow-down el-icon--right"></i> {{$t('操作')}}<i class="el-icon-arrow-down el-icon--right"></i>
</el-button> </el-button>
<el-dropdown-menu slot="dropdown"> <el-dropdown-menu slot="dropdown">
<!-- <el-dropdown-item :disabled="scope.row.ldStatus>=46" command="edit">{{$t('编辑')}}</el-dropdown-item> --> <el-dropdown-item :disabled="scope.row.prStatus>21" command="edit" v-hasPermi="['shipment:box:update']">{{$t('编辑')}}</el-dropdown-item>
<el-dropdown-item command="sea" v-hasPermi="['shipment:box:action:sea']">{{$t('操作-海运')}}</el-dropdown-item> <el-dropdown-item command="sea" v-hasPermi="['shipment:box:action:sea']">{{$t('操作-海运')}}</el-dropdown-item>
<el-dropdown-item command="error" v-hasPermi="['shipment:box:action:error']">{{$t('异常登记')}}</el-dropdown-item> <el-dropdown-item command="error" v-hasPermi="['shipment:box:action:error']">{{$t('异常登记')}}</el-dropdown-item>
<el-dropdown-item command="cost" v-hasPermi="['shipment:box:action:cost']">{{$t('费用登记')}}</el-dropdown-item> <el-dropdown-item command="cost" v-hasPermi="['shipment:box:action:cost']">{{$t('费用登记')}}</el-dropdown-item>
......
...@@ -140,9 +140,9 @@ ...@@ -140,9 +140,9 @@
</el-table-column> </el-table-column>
<el-table-column :label="$t('操作')" align="center"> <el-table-column :label="$t('操作')" align="center">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button type="primary" size="small" @click="editCostClick(scope.row)" style="marginRight:10px;">{{$t('编辑')}}</el-button> <el-button type="primary" size="small" @click="editCostClick(scope.row)" style="marginRight:10px;" v-hasPermi="['ecw:box-cost:update']">{{$t('编辑')}}</el-button>
<el-popconfirm :title="$t('确定是否删除')" @confirm="deleteCostClick(scope.row)"> <el-popconfirm :title="$t('确定是否删除')" @confirm="deleteCostClick(scope.row)">
<el-button type="danger" size="small" slot="reference">{{$t('删除')}}</el-button> <el-button type="danger" size="small" slot="reference" v-hasPermi="['ecw:box-cost:delete']">{{$t('删除')}}</el-button>
</el-popconfirm> </el-popconfirm>
</template> </template>
</el-table-column> </el-table-column>
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
<div> <div>
<el-form ref="agentForm" :model="agentObj" :rules="rules" label-width="120px"> <el-form ref="agentForm" :model="agentObj" :rules="rules" label-width="120px">
<el-form-item :label="$t('代理商Agent')" prop="agentId"> <el-form-item :label="$t('代理商Agent')" prop="agentId">
<supplierSelect v-model="agentObj.agentId" :companyType="'1'" :placeholder="$t('请选择代理商')" :allSupplier="this.$attrs.allSupplier" /> <supplierSelect v-model="agentObj.agentId" :companyType="'1'" :areaType="1" :placeholder="$t('请选择代理商')" :allSupplier="this.$attrs.allSupplier" />
</el-form-item> </el-form-item>
</el-form> </el-form>
<el-row class="operate-button"> <el-row class="operate-button">
......
...@@ -8,13 +8,13 @@ ...@@ -8,13 +8,13 @@
<supplierSelect v-model="bookingObj.shipCompanyType" :companyType="'9'" :placeholder="$t('请选择船公司类型')" :allSupplier="this.$attrs.allSupplier" /> <supplierSelect v-model="bookingObj.shipCompanyType" :companyType="'9'" :placeholder="$t('请选择船公司类型')" :allSupplier="this.$attrs.allSupplier" />
</el-form-item> </el-form-item>
<el-form-item :label="$t('驳船港')"> <el-form-item :label="$t('驳船港')">
<dockSelect v-model="bookingObj.bargePortId" :placeholder="$t('请选择驳船港')" :allDocks="this.$attrs.allDocks" /> <dockSelect v-model="bookingObj.bargePortId" :placeholder="$t('请选择驳船港')" portType="2" :allDocks="this.$attrs.allDocks" />
</el-form-item> </el-form-item>
<el-form-item :label="$t('大船港')"> <el-form-item :label="$t('起运港')">
<dockSelect v-model="bookingObj.bigPortId" :placeholder="$t('请选择大船港')" :allDocks="this.$attrs.allDocks" /> <dockSelect v-model="bookingObj.bigPortId" :placeholder="$t('请选择起运港')" portType="2" :allDocks="this.$attrs.allDocks" />
</el-form-item> </el-form-item>
<el-form-item :label="$t('目的港')"> <el-form-item :label="$t('目的港')">
<dockSelect v-model="bookingObj.destPortId" :placeholder="$t('请选择目的港')" :allDocks="this.$attrs.allDocks" /> <dockSelect v-model="bookingObj.destPortId" :placeholder="$t('请选择目的港')" portType="2" :allDocks="this.$attrs.allDocks" />
</el-form-item> </el-form-item>
<el-form-item :label="$t('订舱公司')"> <el-form-item :label="$t('订舱公司')">
<supplierSelect v-model="bookingObj.spaceCompanyId" :companyType="'1'" :placeholder="$t('请选择订舱公司')" :allSupplier="this.$attrs.allSupplier" /> <supplierSelect v-model="bookingObj.spaceCompanyId" :companyType="'1'" :placeholder="$t('请选择订舱公司')" :allSupplier="this.$attrs.allSupplier" />
......
...@@ -208,9 +208,9 @@ ...@@ -208,9 +208,9 @@
<el-form-item :label="$t('放入箱数')+':'"> <el-form-item :label="$t('放入箱数')+':'">
{{shopForm.putNum||0}} {{shopForm.putNum||0}}
</el-form-item> </el-form-item>
<el-form-item :label="$t('放入数量(个)')+':'" prop="putQuantity" v-show="isQuantity"> <!-- <el-form-item :label="$t('放入数量(个)')+':'" prop="putQuantity" v-show="isQuantity">
<el-input-number v-model="shopForm.putQuantity" controls-position="right" :min="0"></el-input-number> <el-input-number v-model="shopForm.putQuantity" controls-position="right" :min="0"></el-input-number>
</el-form-item> </el-form-item> -->
<el-form-item :label="$t('备注信息')+':'"> <el-form-item :label="$t('备注信息')+':'">
<el-input v-model="shopForm.remarks"></el-input> <el-input v-model="shopForm.remarks"></el-input>
</el-form-item> </el-form-item>
......
...@@ -147,7 +147,7 @@ ...@@ -147,7 +147,7 @@
<!-- 修改柜信息 --> <!-- 修改柜信息 -->
<template v-if="dialogConfig.type === 'modifyCabinet' && dialogConfig.dialogVisible"> <template v-if="dialogConfig.type === 'modifyCabinet' && dialogConfig.dialogVisible">
<el-form ref="modifyForm" :rules="rules" :model="modifyCabinetObj" label-width="80px"> <el-form ref="modifyForm" :rules="rules" :model="modifyCabinetObj" label-width="80px">
<el-form-item :label="$t('起运仓库')" prop="startWarehouseId"> <el-form-item v-if="false" :label="$t('起运仓库')" prop="startWarehouseId">
<el-select v-model="modifyCabinetObj.startWarehouseId" :placeholder="$t('请选择仓库')" filterable> <el-select v-model="modifyCabinetObj.startWarehouseId" :placeholder="$t('请选择仓库')" filterable>
<el-option v-for="warehouse in $attrs.warehouseList" :key="warehouse.id" :label="$l(warehouse, 'title')" :value="warehouse.id"></el-option> <el-option v-for="warehouse in $attrs.warehouseList" :key="warehouse.id" :label="$l(warehouse, 'title')" :value="warehouse.id"></el-option>
</el-select> </el-select>
...@@ -244,6 +244,7 @@ ...@@ -244,6 +244,7 @@
import dayjs from "dayjs"; import dayjs from "dayjs";
import supplementOrder from "./supplementOrder.vue"; import supplementOrder from "./supplementOrder.vue";
import { getCabinetPage } from "@/api/ecw/cabinet"; import { getCabinetPage } from "@/api/ecw/cabinet";
import { getbox } from "@/api/ecw/box";
import { import {
loadSecGoodsList, loadSecGoodsList,
orderTagList, orderTagList,
...@@ -333,6 +334,7 @@ export default { ...@@ -333,6 +334,7 @@ export default {
selectedUsers: [], selectedUsers: [],
// 订单信息 // 订单信息
boxOrderInfo: {}, boxOrderInfo: {},
newshipmentObj: {}
}; };
}, },
created() { created() {
...@@ -341,9 +343,16 @@ export default { ...@@ -341,9 +343,16 @@ export default {
getCabinetPage(null).then((response) => { getCabinetPage(null).then((response) => {
this.cabinetList = response.data.list; this.cabinetList = response.data.list;
}); });
// this.getBoxInfo()
}, },
methods: { methods: {
getTotlContent, getTotlContent,
getBoxInfo() {
getbox(this.shipmentObj.id).then((res) => {
const { data } = res;
this.newshipmentObj = data ?? {};
});
},
/* 装柜部分列表 */ /* 装柜部分列表 */
getLoadSecGoodsList() { getLoadSecGoodsList() {
loadSecGoodsList({ shipmentId: this.shipmentObj.id }).then((res) => { loadSecGoodsList({ shipmentId: this.shipmentObj.id }).then((res) => {
...@@ -419,6 +428,8 @@ export default { ...@@ -419,6 +428,8 @@ export default {
case "modifyCabinet": case "modifyCabinet":
this.$set(this.dialogConfig, "fullscreen", false); this.$set(this.dialogConfig, "fullscreen", false);
this.modifyCabinetObj = {}; this.modifyCabinetObj = {};
this.$set(this.modifyCabinetObj,'cabinetId',this.shipmentObj.cabinetId)
this.$set(this.modifyCabinetObj,'cubNo',this.shipmentObj.cubNo)
break; break;
case "splitOrder": case "splitOrder":
this.$set(this.dialogConfig, "fullscreen", true); this.$set(this.dialogConfig, "fullscreen", true);
...@@ -534,6 +545,8 @@ export default { ...@@ -534,6 +545,8 @@ export default {
}; };
boxUpdate(params).then((res) => { boxUpdate(params).then((res) => {
serviceMsg(res, this); serviceMsg(res, this);
// this.getBoxInfo()
this.$emit('getBoxInfo')
this.closeDialog2(); this.closeDialog2();
}); });
}, },
......
...@@ -107,6 +107,7 @@ export default { ...@@ -107,6 +107,7 @@ export default {
cdOutBillType: cdOutBillType:
oldData.cdOutBillType === 0 ? undefined : oldData.cdOutBillType, oldData.cdOutBillType === 0 ? undefined : oldData.cdOutBillType,
}; };
this.$set(this.cDocObj,'cdOutBillType',String(this.$attrs.shipmentObj.ladingBillInfo?.issueType)||undefined)
}, },
methods: { methods: {
/** 提交 */ /** 提交 */
......
...@@ -14,6 +14,7 @@ export default { ...@@ -14,6 +14,7 @@ export default {
props: { props: {
value: Number, value: Number,
allDocks: Array, allDocks: Array,
portType: String
}, },
model: { model: {
prop: "value", prop: "value",
...@@ -24,7 +25,8 @@ export default { ...@@ -24,7 +25,8 @@ export default {
}, },
computed: { computed: {
getDock() { getDock() {
return this.allDocks; if(!this.portType) return this.allDocks;
return this.allDocks.filter(item=>item.portType==this.portType)
}, },
}, },
methods: { methods: {
......
<template>
<el-select filterable :value="value === 0 ? undefined : value" @change="change" v-bind="$attrs" clearable>
<el-option v-for="user in getUser" :key="user.id" :value="user.id" :label="$l(user, 'company')"></el-option>
</el-select>
</template>
<script>
/**
* 用户
*/
export default {
name: "userSelect",
inheritAttrs: false,
props: {
value: Number | Array,
allUsers: Array,
},
model: {
prop: "value",
event: "change",
},
data() {
return {};
},
computed: {
getUser() {
return this.allUsers;
},
},
methods: {
change(val) {
this.$emit("change", val);
},
},
};
</script>
<template> <template>
<el-select filterable :value="value === 0 ? undefined : value" @change="change" v-bind="$attrs" clearable> <el-select
<el-option v-for="supplier in getSuppliers" :key="supplier.id" :label="$l(supplier, 'company')" :value="supplier.id"></el-option> filterable
:value="value === 0 ? undefined : value"
@change="change"
v-bind="$attrs"
clearable
>
<el-option
v-for="supplier in getSuppliers"
:key="supplier.id"
:label="$l(supplier, 'company')"
:value="supplier.id"
></el-option>
</el-select> </el-select>
</template> </template>
...@@ -14,6 +25,10 @@ export default { ...@@ -14,6 +25,10 @@ export default {
companyType: String, companyType: String,
value: Number, value: Number,
allSupplier: Array, allSupplier: Array,
areaType: {
type: Number,
default: 0
},
}, },
model: { model: {
prop: "value", prop: "value",
...@@ -24,8 +39,11 @@ export default { ...@@ -24,8 +39,11 @@ export default {
}, },
computed: { computed: {
getSuppliers() { getSuppliers() {
if (!this.companyType) return this.allSupplier; let allSupplier = this.allSupplier.filter(
return this.allSupplier.filter((item) => (item) => item.areaType == this.areaType
);
if(this.areaType == 1 || !this.companyType) return allSupplier;
return allSupplier.filter((item) =>
item.companyTypes.includes(this.companyType) item.companyTypes.includes(this.companyType)
); );
}, },
......
...@@ -2,17 +2,16 @@ ...@@ -2,17 +2,16 @@
<div> <div>
<el-form ref="subMaterialForm" :model="subMaterialObj" label-width="140px"> <el-form ref="subMaterialForm" :model="subMaterialObj" label-width="140px">
<el-form-item :label="$t('代理商AGENT')"> <el-form-item :label="$t('代理商AGENT')">
<supplierSelect v-model="subMaterialObj.agentId" :companyType="'1'" :placeholder="$t('请选择供应商')" :allSupplier="this.$attrs.allSupplier" /> <supplierSelect v-model="subMaterialObj.agentId" :areaType="1" :placeholder="$t('请选择供应商')" :allSupplier="this.$attrs.allSupplier" disabled />
</el-form-item> </el-form-item>
<el-form-item :label="$t('提单号M/BL NO.')" class="two-element"> <el-form-item :label="$t('提单号M/BL NO.')" class="two-element">
<el-input v-model="subMaterialObj.blMblNo" :placeholder="$t('请输入提单号')"></el-input> <el-input v-model="subMaterialObj.blMblNo" :placeholder="$t('请输入提单号')"></el-input>
<el-button type="primary">{{$t('提单确认件')}}</el-button>
</el-form-item> </el-form-item>
<el-form-item label="SO NO."> <el-form-item label="SO NO.">
<el-input v-model="subMaterialObj.soNo" :placeholder="$t('请输入SO NO')"></el-input> <el-input v-model="subMaterialObj.soNo" :placeholder="$t('请输入SO NO')"></el-input>
</el-form-item> </el-form-item>
<el-form-item :label="$t('装货港')"> <el-form-item :label="$t('起运港')">
<dockSelect v-model="subMaterialObj.startPortId" :placeholder="$t('请选择装货港')" :allDocks="this.$attrs.allDocks" /> <dockSelect v-model="subMaterialObj.startPortId" :placeholder="$t('请选择起运港')" :allDocks="this.$attrs.allDocks" />
</el-form-item> </el-form-item>
<el-form-item :label="$t('目的港')"> <el-form-item :label="$t('目的港')">
<dockSelect v-model="subMaterialObj.destPortId" :placeholder="$t('请选择目的港')" :allDocks="this.$attrs.allDocks" /> <dockSelect v-model="subMaterialObj.destPortId" :placeholder="$t('请选择目的港')" :allDocks="this.$attrs.allDocks" />
...@@ -21,31 +20,31 @@ ...@@ -21,31 +20,31 @@
<supplierSelect v-model="subMaterialObj.shipCompanyId" :companyType="'9'" :placeholder="$t('请选择船公司')" :allSupplier="this.$attrs.allSupplier" /> <supplierSelect v-model="subMaterialObj.shipCompanyId" :companyType="'9'" :placeholder="$t('请选择船公司')" :allSupplier="this.$attrs.allSupplier" />
</el-form-item> </el-form-item>
<el-form-item :label="$t('托运人')"> <el-form-item :label="$t('托运人')">
<userSelect v-model="subMaterialObj.shipperId" :placeholder="$t('请选择托运人')" :allUsers="this.$attrs.allUsers" /> <ladingSelect v-model="subMaterialObj.shipperId" :placeholder="$t('请选择托运人')" :allUsers="this.$attrs.allLading" />
</el-form-item> </el-form-item>
<el-form-item :label="$t('收货人')"> <el-form-item :label="$t('收货人')">
<userSelect v-model="subMaterialObj.consigneeId" :placeholder="$t('请选择收货人')" :allUsers="this.$attrs.allUsers" /> <el-input v-model="subMaterialObj.consigneeName" disabled></el-input>
<!-- <userSelect v-model="subMaterialObj.consigneeId" :placeholder="$t('请选择收货人')" :allUsers="this.$attrs.allUsers" /> -->
</el-form-item> </el-form-item>
<el-form-item :label="$t('通知方')"> <el-form-item :label="$t('通知方')">
<userSelect v-model="subMaterialObj.notifyingId" :placeholder="$t('请选择通知方')" :allUsers="this.$attrs.allUsers" /> <el-input v-model="subMaterialObj.notifyingName" disabled></el-input>
<!-- <userSelect v-model="subMaterialObj.notifyingId" :placeholder="$t('请选择通知方')" :allUsers="this.$attrs.allUsers" /> -->
</el-form-item> </el-form-item>
<el-form-item label="Mark & No."> <el-form-item label="Mark & No.">
<el-input v-model="subMaterialObj.markNo" placeholder="请输入Mark & No."></el-input> <el-input v-model="subMaterialObj.markNo" placeholder="请输入Mark & No."></el-input>
</el-form-item> </el-form-item>
<el-form-item :label="$t('包装数量与单位')" class="two-element"> <el-form-item :label="$t('包装数量与单位')" class="two-element">
<el-input v-model="subMaterialObj.packageNum" :placeholder="$t('请输入包装数量')"></el-input> <el-input v-model="subMaterialObj.packageNum" :placeholder="$t('请输入包装数量')"></el-input>
<el-select v-model="subMaterialObj.packageUnit" :placeholder="$t('请选择单位')"> <dict-selector v-model="subMaterialObj.packageUnit" type="packaging_type" />
<el-option v-for="unit in units" :key="unit.id" :value="unit.id" :label="$l(unit, 'title')"></el-option>
</el-select>
</el-form-item> </el-form-item>
<el-form-item :label="$t('毛重(KGS)')"> <el-form-item :label="$t('货物毛重(KGS)')">
<el-input v-model="subMaterialObj.kgs" :placeholder="$t('请输入毛重') + '(KGS)'"></el-input> <el-input v-model="subMaterialObj.kgs" :placeholder="$t('请输入货物毛重') + '(KGS)'"></el-input>
</el-form-item> </el-form-item>
<el-form-item :label="$t('立方数(CBM)')"> <el-form-item :label="$t('立方数(CBM)')">
<el-input v-model="subMaterialObj.cbm" :placeholder="$t('请输入立方数') + '(CBM)'"></el-input> <el-input v-model="subMaterialObj.cbm" :placeholder="$t('请输入立方数') + '(CBM)'"></el-input>
</el-form-item> </el-form-item>
<el-form-item :label="$t('货物描述')"> <el-form-item :label="$t('货物描述')">
<el-input v-model="subMaterialObj.goodsDesc" :placeholder="$t('请输入货物描述')"></el-input> <el-input v-model="subMaterialObj.goodsDesc" type="textarea" autosize :placeholder="$t('请输入货物描述')"></el-input>
</el-form-item> </el-form-item>
<el-form-item :label="$t('柜号') + '/' + $t('封条')"> <el-form-item :label="$t('柜号') + '/' + $t('封条')">
<el-input v-model="subMaterialObj.containerSealNo" :placeholder="$t('请输入柜号') + '/' + $t('封条')"></el-input> <el-input v-model="subMaterialObj.containerSealNo" :placeholder="$t('请输入柜号') + '/' + $t('封条')"></el-input>
...@@ -67,6 +66,7 @@ ...@@ -67,6 +66,7 @@
<el-button type="primary" @click="onSubmit(1)">{{$t('保存')}}</el-button> <el-button type="primary" @click="onSubmit(1)">{{$t('保存')}}</el-button>
<el-button type="success" @click="onSubmit(2)">{{$t('提交')}}</el-button> <el-button type="success" @click="onSubmit(2)">{{$t('提交')}}</el-button>
<el-button @click="cancel">{{$t('关闭')}}</el-button> <el-button @click="cancel">{{$t('关闭')}}</el-button>
<el-button :disabled="shipmentObj.ladingBillInfo == null" @click="download">{{$t('下载提单确认件')}}</el-button>
</el-row> </el-row>
</div> </div>
</template> </template>
...@@ -75,10 +75,13 @@ ...@@ -75,10 +75,13 @@
import supplierSelect from "./common/supplierSelect.vue"; import supplierSelect from "./common/supplierSelect.vue";
import dockSelect from "./common/dockSelect.vue"; import dockSelect from "./common/dockSelect.vue";
import userSelect from "./common/userSelect.vue"; import userSelect from "./common/userSelect.vue";
import ladingSelect from "./common/ladingSelect.vue";
import { getUnitList } from "@/api/ecw/unit"; import { getUnitList } from "@/api/ecw/unit";
import { getCabinetPage } from "@/api/ecw/cabinet"; import { getCabinetPage } from "@/api/ecw/cabinet";
import { billCreate } from "@/api/ecw/boxSea"; import { billCreate, getBoxLadingBillPdf } from "@/api/ecw/boxSea";
import { getSupplier } from "@/api/ecw/supplier";
import { formatNumberString, constantDict, serviceMsg } from "../utils"; import { formatNumberString, constantDict, serviceMsg } from "../utils";
import FileSaver from 'file-saver'
/** /**
* 提单补料 * 提单补料
...@@ -86,7 +89,7 @@ import { formatNumberString, constantDict, serviceMsg } from "../utils"; ...@@ -86,7 +89,7 @@ import { formatNumberString, constantDict, serviceMsg } from "../utils";
export default { export default {
name: "subMaterial", name: "subMaterial",
inheritAttrs: false, inheritAttrs: false,
components: { supplierSelect, dockSelect, userSelect }, components: { supplierSelect, dockSelect, userSelect, ladingSelect },
props: { props: {
shipmentObj: Object, shipmentObj: Object,
}, },
...@@ -117,19 +120,51 @@ export default { ...@@ -117,19 +120,51 @@ export default {
let cabinetItem = cabinetList[index]; let cabinetItem = cabinetList[index];
if (cabinetItem.id == this.shipmentObj.cabinetId) { if (cabinetItem.id == this.shipmentObj.cabinetId) {
this.cabinetType = cabinetItem.name; this.cabinetType = cabinetItem.name;
this.$set(this.subMaterialObj,'cbm',cabinetItem.ladingBill)
} }
} }
}); });
const voName = this.$attrs.currNode.voName; const voName = this.$attrs.currNode.voName;
let oldData = { ...this.shipmentObj[voName] }; let oldData = { ...this.shipmentObj[voName] };
oldData = formatNumberString(oldData, ["issueType"]); oldData = formatNumberString(oldData, ["issueType"]);this.subMaterialObj = {
this.subMaterialObj = {
...oldData, ...oldData,
packageUnit: oldData.packageUnit === 0 ? undefined : oldData.packageUnit, packageUnit: oldData.packageUnit === 0 ? undefined : oldData.packageUnit,
}; };
if(!this.shipmentObj.ladingBillInfo){
this.$set(this.subMaterialObj,'agentId',this.shipmentObj.agentInfo?.agentId||undefined)
this.$set(this.subMaterialObj,'soNo',this.shipmentObj.bookSeaInfo?.sono||undefined)
this.$set(this.subMaterialObj,'blMblNo',this.shipmentObj.bookSeaInfo?.sono||undefined)
this.$set(this.subMaterialObj,'markNo',"N/M")
this.$set(this.subMaterialObj,'startPortId',this.shipmentObj.bookSeaInfo?.bigPortId||undefined)
this.$set(this.subMaterialObj,'shipCompanyId',Number(this.shipmentObj.bookSeaInfo?.shipCompanyType)||undefined)
this.$set(this.subMaterialObj,'destPortId',this.shipmentObj.bookSeaInfo?.destPortId||undefined)
this.$set(this.subMaterialObj,'kgs',this.shipmentObj.customsInfo?.dcGoodsWgt||undefined)
this.$set(this.subMaterialObj,'containerSealNo',(this.shipmentObj.trailerInfo?.tlContainerNo||'')+'/'+(this.shipmentObj.trailerInfo?.tlStripSeal||'/'))
this.subMaterialObj.containerSealNo = this.subMaterialObj.containerSealNo.replace('//','')
this.getSup(this.subMaterialObj.agentId)
}
}, },
methods: { methods: {
getSup(id) {
getSupplier(id).then(response => {
if(response.data.externalBackVO){
this.$set(this.subMaterialObj,'consigneeName',response.data.externalBackVO?.receiveCompanyName||'/')
this.$set(this.subMaterialObj,'notifyingName',response.data.externalBackVO?.notifyCompanyName||'/')
this.$set(this.subMaterialObj,'packageNum',response.data.externalBackVO?.packNum)
this.$set(this.subMaterialObj,'packageUnit',response.data.externalBackVO?.packUnit)
var goodName = '',baNo = '',fromNo = '',ctnNo = ''
if(response.data.externalBackVO.goodName && response.data.externalBackVO.goodName != '') goodName = response.data.externalBackVO.goodName
if(response.data.externalBackVO.fromNo && response.data.externalBackVO.fromNo != '') fromNo = (goodName!=''?'\n':'')+'FROM M NO:'+response.data.externalBackVO.fromNo
if(response.data.externalBackVO.baNo && response.data.externalBackVO.baNo != '') baNo = '\nBA NO:'+response.data.externalBackVO.baNo
if(response.data.externalBackVO.ctnNo && response.data.externalBackVO.ctnNo != '') ctnNo = '\nCTN NO:'+response.data.externalBackVO.ctnNo
this.$set(this.subMaterialObj,'goodsDesc',goodName+fromNo+baNo+ctnNo)
if(this.subMaterialObj.goodsDesc == null){
this.$set(this.subMaterialObj,'goodsDesc','/')
}
}
})
},
/** 提交 */ /** 提交 */
onSubmit(operateType) { onSubmit(operateType) {
this.$refs["subMaterialForm"].validate((valid) => { this.$refs["subMaterialForm"].validate((valid) => {
...@@ -140,6 +175,7 @@ export default { ...@@ -140,6 +175,7 @@ export default {
operateType, operateType,
}).then((res) => { }).then((res) => {
serviceMsg(res, this).then(() => { serviceMsg(res, this).then(() => {
if(operateType == 2) this.download()
this.cancel("submit"); this.cancel("submit");
}); });
}); });
...@@ -150,6 +186,12 @@ export default { ...@@ -150,6 +186,12 @@ export default {
cancel(type) { cancel(type) {
this.$emit("closeDialog", type); this.$emit("closeDialog", type);
}, },
download() {
getBoxLadingBillPdf({shipmentId: this.shipmentObj.id}).then(res=>{
let blob = new Blob([res], {type: "application/vnd.ms-excel"})
FileSaver.saveAs(blob, this.$t('提单确认件.xlsx'));
})
}
}, },
}; };
</script> </script>
......
...@@ -73,7 +73,11 @@ ...@@ -73,7 +73,11 @@
<el-table-column :label="$t('重量')" align="center" prop="warehouseInInfo.weight"> <el-table-column :label="$t('重量')" align="center" prop="warehouseInInfo.weight">
</el-table-column> </el-table-column>
<el-table-column :label="$t('数量(个)')" align="center" prop="quantity"></el-table-column> <el-table-column :label="$t('数量(个)')" align="center" prop="quantity"></el-table-column>
<el-table-column :label="$t('储位')" align="center" prop="positionNo" width="250px"></el-table-column> <el-table-column :label="$t('储位')" align="center" prop="positionNo" width="250px">
<template slot-scope="scope">
{{notset(scope.row.positionNo)}}
</template>
</el-table-column>
<el-table-column :label="$t('状态')" align="center" prop="tallyStatus"> <el-table-column :label="$t('状态')" align="center" prop="tallyStatus">
<template slot-scope="scope"> <template slot-scope="scope">
{{scope.row.tallyStatus === 1 ? $t('已理货') : $t('未理货')}} {{scope.row.tallyStatus === 1 ? $t('已理货') : $t('未理货')}}
...@@ -150,6 +154,13 @@ export default { ...@@ -150,6 +154,13 @@ export default {
methods: { methods: {
// 格式化日期 // 格式化日期
formatDate, formatDate,
//去重
notset(string){
if(!string) return string
let arr = string.split(',')
arr = arr.filter((item,index)=>{return arr.indexOf(item)==index})
return arr.toString()
},
// 查询理货列表 // 查询理货列表
getList() { getList() {
getTallyList({ shipmentId: this.shipmentObj.id }).then((res) => { getTallyList({ shipmentId: this.shipmentObj.id }).then((res) => {
...@@ -164,13 +175,22 @@ export default { ...@@ -164,13 +175,22 @@ export default {
list.push({ list.push({
...oItem, ...oItem,
warehouseInInfo, warehouseInInfo,
multiSpecification: item.multiSpecification, // multiSpecification: item.multiSpecification,
positionNo: item.positionNo, positionNo: oItem.positionNo,
tallyStatus: item.tallyStatus, tallyStatus: item.tallyStatus,
tallyTime: item.tallyTime, tallyTime: item.tallyTime,
}); });
}); });
}); });
// let relist = []
// list.forEach(l=>{
// let index = relist.findIndex(i=>i.orderId == l.orderId && i.positionNo == l.positionNo)
// if(index == -1){
// relist.push(l)
// }else{
// relist[index].warehouseInInfo.cartonsNum = parseInt(relist[index].warehouseInInfo.cartonsNum)+parseInt(l.warehouseInInfo.cartonsNum)
// }
// })
this.tallyList = list; this.tallyList = list;
}); });
}, },
......
<template> <template>
<!-- 订单获取入仓记录 --> <!-- 订单获取入仓记录 -->
<el-dialog :title="title" visible :before-close="closeDialog" :close-on-click-modal="false" width="1000px" append-to-body> <el-dialog :title="title" visible :before-close="closeDialog" :close-on-click-modal="false" width="95%" append-to-body>
<el-table v-if="warehouseItem && warehouseItem.orderWarehouseInBackItemDoList" :data="warehouseItem.orderWarehouseInBackItemDoList"> <el-table v-if="warehouseItem && warehouseItem.orderWarehouseInBackItemDoList" :data="warehouseItem.orderWarehouseInBackItemDoList">
<el-table-column type="index" :label="$t('序号')" /> <el-table-column type="index" :label="$t('序号')" />
<el-table-column :label="$t('箱数')" prop="cartonsNum" /> <el-table-column :label="$t('箱数')" prop="cartonsNum" />
...@@ -33,7 +33,10 @@ ...@@ -33,7 +33,10 @@
<el-table-column :label="$t('重量') + '(kg)'" prop="weight" /> <el-table-column :label="$t('重量') + '(kg)'" prop="weight" />
<el-table-column :label="$t('数量(个)')" prop="quantityAll" /> <el-table-column :label="$t('数量(个)')" prop="quantityAll" />
<el-table-column :label="$t('快递单号')" prop="expressNo" /> <el-table-column :label="$t('快递单号')" prop="expressNo" />
<el-table-column :label="$t('入仓时间')" prop="inTime"> <el-table-column :label="$t('储位')" align="center" prop="positionNo" width="250px">
<template slot-scope="{row}">{{row.orderLocationBackVOList.map(e => (e.areaName + (e.locationName === null ? '' : e.locationName))).join(',')}}</template>
</el-table-column>
<el-table-column :label="$t('首次入仓时间')" prop="inTime">
<template slot-scope="{row}">{{row.inTime|parseTime}}</template> <template slot-scope="{row}">{{row.inTime|parseTime}}</template>
</el-table-column> </el-table-column>
</el-table> </el-table>
...@@ -77,7 +80,7 @@ export default { ...@@ -77,7 +80,7 @@ export default {
title() { title() {
if (!this.orderItem) return "-"; if (!this.orderItem) return "-";
return this.$l(this.orderItem, "prodTitle") + " - " + this.$t("入仓记录"); return this.$l(this.orderItem, "prodTitle") + " - " + this.$t("入仓记录");
}, }
}, },
created() { created() {
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item :label="$t('拖车公司')"> <el-form-item :label="$t('拖车公司')">
<supplierSelect v-model="trailerObj.tlCompanyId" :companyType="'4'" :placeholder="$t('请选择拖车公司')" :allSupplier="this.$attrs.allSupplier" /> <supplierSelect v-model="trailerObj.tlCompanyId" :companyType="'4'" :areaType="0" :placeholder="$t('请选择拖车公司')" :allSupplier="this.$attrs.allSupplier" />
</el-form-item> </el-form-item>
<el-form-item :label="$t('拖车时间')" prop="tlTime"> <el-form-item :label="$t('拖车时间')" prop="tlTime">
<el-date-picker type="datetime" :placeholder="$t('请选择日期')" value-format="yyyy-MM-dd HH:mm:ss" v-model="trailerObj.tlTime"></el-date-picker> <el-date-picker type="datetime" :placeholder="$t('请选择日期')" value-format="yyyy-MM-dd HH:mm:ss" v-model="trailerObj.tlTime"></el-date-picker>
...@@ -64,7 +64,7 @@ export default { ...@@ -64,7 +64,7 @@ export default {
}, },
created() { created() {
const { currNode, shipmentObj } = this.$attrs; const { currNode, shipmentObj } = this.$attrs;
const voName = currNode.voName; const voName = currNode.voName;console.log(shipmentObj[voName])
let oldData = { ...shipmentObj[voName] }; let oldData = { ...shipmentObj[voName] };
oldData = formatNumberString(oldData, ["tlContainerStatus"]); oldData = formatNumberString(oldData, ["tlContainerStatus"]);
oldData = formatStringNumber(oldData, ["tlCompanyId"]); oldData = formatStringNumber(oldData, ["tlCompanyId"]);
......
...@@ -46,6 +46,7 @@ import unloadingWidget from "./nodePage/unloading/index.vue"; ...@@ -46,6 +46,7 @@ import unloadingWidget from "./nodePage/unloading/index.vue";
import settlementWidget from "./nodePage/settlement.vue"; import settlementWidget from "./nodePage/settlement.vue";
import reviewWidget from "./nodePage/review.vue"; import reviewWidget from "./nodePage/review.vue";
import tallyWidget from "./nodePage/tally/index.vue"; import tallyWidget from "./nodePage/tally/index.vue";
import {checkPermi} from '@/utils/permission'
/** /**
* 海运流程图 * 海运流程图
...@@ -131,6 +132,10 @@ export default { ...@@ -131,6 +132,10 @@ export default {
}, },
/** 节点点击 */ /** 节点点击 */
nodeClick(currIndex, node) { nodeClick(currIndex, node) {
if (!checkPermi(['box:'+node.type+':show'])) {
this.$message.error(this.$t("没有此操作的权限"));
return;
}
if (currIndex > this.currIndex) { if (currIndex > this.currIndex) {
this.$message.error(this.$t("请先完成上一步")); this.$message.error(this.$t("请先完成上一步"));
return; return;
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
<div class="app-seaStepDetail"> <div class="app-seaStepDetail">
<el-scrollbar :vertical="true" viewClass="shipping-step"> <el-scrollbar :vertical="true" viewClass="shipping-step">
<template v-for="(step, index) in flatSeaStep"> <template v-for="(step, index) in flatSeaStep">
<div :key="index" v-if="shipmentObj[step.voName] && columnsMapping[step.voName]" class="step-table"> <div :key="index" v-if="shipmentObj[step.voName] && columnsMapping[step.voName] && checkPermi(['box:'+step.type+':show'])" class="step-table">
<div class="step-title">{{step.title}}</div> <div class="step-title">{{step.title}}</div>
<div v-for="(data, index) in columnsMapping[step.voName]" :key="index" class="step-content"> <div v-for="(data, index) in columnsMapping[step.voName]" :key="index" class="step-content">
<p>{{data.title}}</p> <p>{{data.title}}</p>
...@@ -17,6 +17,7 @@ ...@@ -17,6 +17,7 @@
<script> <script>
import dayjs from "dayjs"; import dayjs from "dayjs";
import * as _C from "./utils"; import * as _C from "./utils";
import {checkPermi} from '@/utils/permission'
export default { export default {
name: "seaStepDetail", name: "seaStepDetail",
...@@ -32,6 +33,7 @@ export default { ...@@ -32,6 +33,7 @@ export default {
}; };
}, },
methods: { methods: {
checkPermi, // 检查权限
getObjInfo(voName, data) { getObjInfo(voName, data) {
const { key, type } = data; const { key, type } = data;
let val = this.shipmentObj[voName]?.[key] ?? ""; let val = this.shipmentObj[voName]?.[key] ?? "";
......
...@@ -26,7 +26,7 @@ ...@@ -26,7 +26,7 @@
</el-card> </el-card>
<!-- 海运流程图 --> <!-- 海运流程图 -->
<seaProcess :seaBaseData="seaBaseData" :shipmentObj="shipmentObj" :allSupplier="allSupplier" :allDocks="allDocks" :allUsers="allUsers" :warehouseList="warehouseList" @getBoxInfo="getBoxInfo" /> <seaProcess :seaBaseData="seaBaseData" :shipmentObj="shipmentObj" :allSupplier="allSupplier" :allDocks="allDocks" :allUsers="allUsers" :allLading="allLading" :warehouseList="warehouseList" @getBoxInfo="getBoxInfo" />
<!-- 海运步骤图 --> <!-- 海运步骤图 -->
<seaStepDetail :seaBaseData="seaBaseData" :shipmentObj="shipmentObj" :allSupplier="allSupplier" :allDocks="allDocks" :allUsers="allUsers" :warehouseList="warehouseList" /> <seaStepDetail :seaBaseData="seaBaseData" :shipmentObj="shipmentObj" :allSupplier="allSupplier" :allDocks="allDocks" :allUsers="allUsers" :warehouseList="warehouseList" />
...@@ -43,6 +43,7 @@ import { getWarehouseList } from "@/api/ecw/warehouse"; ...@@ -43,6 +43,7 @@ import { getWarehouseList } from "@/api/ecw/warehouse";
import { getSupplierPage } from "@/api/ecw/supplier"; import { getSupplierPage } from "@/api/ecw/supplier";
import { getDockPage } from "@/api/ecw/dock"; import { getDockPage } from "@/api/ecw/dock";
import { listUser } from "@/api/system/user"; import { listUser } from "@/api/system/user";
import { getLadingShipperPage } from "@/api/ecw/ladingShipper";
// 这里引入的数据切换语言后要刷新才生效,优化办法是label同时配备labelEn字段,然后再页面上用$l函数调用 // 这里引入的数据切换语言后要刷新才生效,优化办法是label同时配备labelEn字段,然后再页面上用$l函数调用
import { seaBaseData } from "./utils"; import { seaBaseData } from "./utils";
...@@ -64,6 +65,8 @@ export default { ...@@ -64,6 +65,8 @@ export default {
warehouseList: [], warehouseList: [],
// 供应商 // 供应商
allSupplier: [], allSupplier: [],
// 托运人
allLading: [],
// 码头 // 码头
allDocks: [], allDocks: [],
// 用户 // 用户
...@@ -90,6 +93,10 @@ export default { ...@@ -90,6 +93,10 @@ export default {
return item; return item;
}); });
}); });
// 托运人
getLadingShipperPage({ pageNo: "1", pageSize: "10000" }).then(res=>{
this.allLading = res.data.list
})
// 码头 // 码头
getDockPage({ pageNo: "1", pageSize: "10000" }).then((res) => { getDockPage({ pageNo: "1", pageSize: "10000" }).then((res) => {
const { data } = res; const { data } = res;
......
...@@ -988,13 +988,12 @@ function getColmnMapping() { ...@@ -988,13 +988,12 @@ function getColmnMapping() {
type: "supplier", type: "supplier",
}, },
{ {
title: i18n.$t("提单品名"), title: i18n.$t("提单"),
key: "blMblNo", key: "blMblNo",
}, },
{ {
title: i18n.$t("通知方"), title: i18n.$t("通知方"),
key: "notifyingId", key: "notifyingName",
type: "user",
}, },
{ {
title: i18n.$t("提单备注"), title: i18n.$t("提单备注"),
......
...@@ -10,19 +10,19 @@ ...@@ -10,19 +10,19 @@
<el-row> <el-row>
<el-col :span="12"> <el-col :span="12">
<el-form-item :label="$t('中文名称')" prop="nameZh"> <el-form-item :label="$t('中文名称')" prop="nameZh">
<el-input v-model="form.nameZh" placeholder="请输入名称-中文" /> <el-input v-model="form.nameZh" :placeholder="$t('请输入名称-中文')" />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item :label="$t('名称英文')" prop="nameEn"> <el-form-item :label="$t('名称英文')" prop="nameEn">
<el-input v-model="form.nameEn" placeholder="请输入名称-英文" /> <el-input v-model="form.nameEn" :placeholder="$t('请输入名称-英文')" />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item :label="$t('内部名称中文')" prop="internalNameZh"> <el-form-item :label="$t('内部名称中文')" prop="internalNameZh">
<el-input <el-input
v-model="form.internalNameZh" v-model="form.internalNameZh"
placeholder="请输入内部名称-中文" :placeholder="$t('请输入内部名称-中文')"
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
...@@ -30,7 +30,7 @@ ...@@ -30,7 +30,7 @@
<el-form-item :label="$t('内部名称英文')" prop="internalNameEn"> <el-form-item :label="$t('内部名称英文')" prop="internalNameEn">
<el-input <el-input
v-model="form.internalNameEn" v-model="form.internalNameEn"
placeholder="请输入内部名称-英文" :placeholder="$t('请输入内部名称-英文')"
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
...@@ -95,16 +95,16 @@ ...@@ -95,16 +95,16 @@
</el-col> --> </el-col> -->
</el-row> </el-row>
<el-form-item label="备注-中文" prop="remarksZh"> <el-form-item :label="$t('备注-中文')" prop="remarksZh">
<el-input <el-input
v-model="form.remarksZh" v-model="form.remarksZh"
placeholder="请输入备注-中文" :placeholder="$t('请输入备注-中文')"
/> />
</el-form-item> </el-form-item>
<el-form-item label="备注-英文" prop="remarksEn"> <el-form-item :label="$t('备注-英文')" prop="remarksEn">
<el-input <el-input
v-model="form.remarksEn" v-model="form.remarksEn"
placeholder="请输入备注-英文" :placeholder="$t('请输入备注-英文')"
/> />
</el-form-item> </el-form-item>
<!-- <el-form-item label="状态(0:禁用 1:启用)" prop="status"> <!-- <el-form-item label="状态(0:禁用 1:启用)" prop="status">
......
...@@ -201,7 +201,7 @@ export default { ...@@ -201,7 +201,7 @@ export default {
/** 删除按钮操作 */ /** 删除按钮操作 */
handleDelete(row) { handleDelete(row) {
const channelId = row.channelId; const channelId = row.channelId;
this.$modal.confirm('是否确认删除渠道管理编号为"' + channelId + '"的数据项?').then(function() { this.$modal.confirm(this.$t('是否确认删除渠道管理编号为{channelId}的数据项?'),{channelId} ).then(function() {
return deleteChannel(channelId); return deleteChannel(channelId);
}).then(() => { }).then(() => {
this.getList(); this.getList();
......
...@@ -214,6 +214,7 @@ export default { ...@@ -214,6 +214,7 @@ export default {
fuhao: undefined, fuhao: undefined,
status: undefined, status: undefined,
huilv: undefined, huilv: undefined,
exchangeToFc: undefined,
aorder: undefined, aorder: undefined,
createAt: undefined, createAt: undefined,
updateAt: undefined, updateAt: undefined,
......
<template>
<div :style="{padding:customerId ? '0px' : '20px'}">
<el-card style="margin-bottom: 30px" v-show="!customerId" :title="$t('客户操作日志')">
<el-descriptions border :column="3">
<el-descriptions-item :label="$t('订单编号')"><el-input :placeholder="$t('请输入订单编号')" v-model="queryForm.orderNo"></el-input></el-descriptions-item>
<el-descriptions-item :label="$t('操作人')">
<el-select filterable v-model="queryForm.operator">
<el-option v-for="(item) in allSimplList" :value="item.id" :label="item.nickname" :key="item.id"></el-option>
</el-select>
</el-descriptions-item>
<el-descriptions-item :label="$t('老客户经理')">
<el-select filterable v-model="queryForm.oldCustomerService">
<el-option v-for="(item) in customerServiceList" :value="item.id" :label="item.nickname" :key="item.id"></el-option>
</el-select>
<!-- <el-input v-model="queryForm.oldCustomerService"></el-input>-->
</el-descriptions-item>
<!-- <el-descriptions-item label="客户编号"><el-input :placeholder="$t('请输入客户编号')" v-model="queryForm.number"></el-input></el-descriptions-item>-->
<el-descriptions-item :label="$t('新客户经理')">
<el-select clearable filterable v-model="queryForm.newCustomerService">
<el-option v-for="(item) in customerServiceList" :value="item.id" :label="item.nickname" :key="item.id"></el-option>
</el-select>
<!-- <el-input v-model="queryForm.newCustomerService"></el-input>-->
</el-descriptions-item>
<!-- <el-descriptions-item label="客户名称"><el-input :placeholder="$t('请输入客户名称')" style="width: 45%;" v-model="queryForm.name"></el-input></el-descriptions-item>-->
<el-descriptions-item :label="$t('操作类型')">
<dict-selector :type="DICT_TYPE.CUSTOMER_OPERATE_TYPE" v-model="queryForm.operateType">
</dict-selector>
</el-descriptions-item>
<el-descriptions-item :label="$t('新的预计进入公海的时间')">
<el-date-picker
v-model="newEstimateEnterOpenSeaTimeArr"
type="datetimerange"
value-format="yyyy-MM-dd HH:mm:ss"
range-separator="至"
:start-placeholder="$t('开始日期')"
:end-placeholder="$t('结束日期')"
align="right">
</el-date-picker>
</el-descriptions-item>
<el-descriptions-item :label="$t('老的预计进入公海的时间')">
<el-date-picker
v-model="newEstimateEnterOpenSeaTimeArr"
type="datetimerange"
value-format="yyyy-MM-dd HH:mm:ss"
range-separator="至"
:start-placeholder="$t('开始日期')"
:end-placeholder="$t('结束日期')"
align="right">
</el-date-picker>
</el-descriptions-item>
<el-descriptions-item>
<el-button @click="getList">{{$t('搜索')}}</el-button>
<el-button @click="initialize();getList()">{{$t('重置')}}</el-button>
</el-descriptions-item>
</el-descriptions>
</el-card>
<el-table :data="list">
<el-table-column :label="$t('订单编号')" prop="orderNo"></el-table-column>
<el-table-column :label="$t('新客户经理')" prop="newCustomerService">
<template v-slot="{row}">
{{row.newCustomerService ? operatorFn(row.newCustomerService) : '/'}}
</template>
</el-table-column>
<el-table-column :label="$t('老客户经理')" prop="oldCustomerService">
<template v-slot="{row}">
{{row.oldCustomerService ? operatorFn(row.oldCustomerService) : '/'}}
</template>
</el-table-column>
<el-table-column :label="$t('操作类型')">
<template v-slot="{row}">
<dict-tag :type="DICT_TYPE.CUSTOMER_OPERATE_TYPE" :value="row.operateType"></dict-tag>
</template>
</el-table-column>
<el-table-column :label="$t('操作人')" prop="operator">
<template v-slot="{row}">
{{operatorFn(row.operator)}}
</template>
</el-table-column>
<el-table-column :label="$t('操作时间')" prop="operator">
<template v-slot="{row}">
{{parseTime(row.createTime) || '/'}}
</template>
</el-table-column>
<el-table-column :label="$t('新的预计入公海时间')">
<template v-slot="{row}">
{{parseTime(row.newEstimateEnterOpenSeaTime) || '/'}}
</template>
</el-table-column>
<el-table-column :label="$t('老的预计入公海时间')" >
<template v-slot="{row}">
{{parseTime(row.oldEstimateEnterOpenSeaTime) || '/'}}
</template>
</el-table-column>
<el-table-column :label="$t('备注')" prop="remark" >
</el-table-column>
<el-table-column :label="$t('操作')">
<template v-slot="{row}">
<el-button type="text" @click="getCustomerLog(row.id)">
{{$t('详情')}}
</el-button>
</template>
</el-table-column>
</el-table>
<pagination v-show="total > 0" :total="total" :page.sync="queryForm.page" :limit.sync="queryForm.rows"
@pagination="getList"/>
<el-dialog :title="$t('客户日志')" :visible.sync="show">
<el-form>
<el-form-item :label="$t('订单编号')+':'">
{{dataLog.orderNo ? dataLog.orderNo :'/'}}
</el-form-item>
<el-form-item :label="$t('新客户经理')+':'">
{{dataLog.newCustomerService ? operatorFn(dataLog.newCustomerService) : '/'}}
</el-form-item>
<el-form-item :label="$t('老客户经理')+':'">
{{dataLog.oldCustomerService ? operatorFn(dataLog.oldCustomerService) : '/'}}
</el-form-item>
<el-form-item :label="$t('操作类型')+':'">
<dict-tag :type="DICT_TYPE.CUSTOMER_OPERATE_TYPE" :value="dataLog.operateType"></dict-tag>
</el-form-item>
<el-form-item :label="$t('操作人')+':'">
{{operatorFn(dataLog.operator)}}
</el-form-item>
<el-form-item :label="$t('操作时间')+':'">
{{parseTime(dataLog.createTime)}}
</el-form-item>
<el-form-item :label="$t('新预计进入公海时间')+':'">
{{parseTime(dataLog.newEstimateEnterOpenSeaTime) || '/'}}
</el-form-item>
<el-form-item :label="$t('老的预计进入公海时间')+':'">
{{parseTime(dataLog.oldEstimateEnterOpenSeaTime) || '/'}}
</el-form-item>
<el-form-item :label="$t('备注')+':'">
{{dataLog.remark}}
</el-form-item>
</el-form>
</el-dialog>
</div>
</template>
<script>
import {getCustomerOperatelog, getCustomerOperatelogPage} from "@/api/ecw/customer";
import {parseTime} from "../../../utils/ruoyi";
import Template from "@/views/cms/template/index.vue";
import {DICT_TYPE} from "@/utils/dict";
import {listAllSimpl, listServiceUser} from "@/api/system/user";
import {number} from "echarts/lib/export";
export default {
name: "customerLog",
props:{
customerId:{
type:[Number,String],
default:null,
}
},
computed: {
DICT_TYPE() {
return DICT_TYPE
},
operatorFn(){
return (val)=>{
return this.allSimplList.find(item => item.id == val)?.nickname || '/'
}
}
},
components: {Template},
created() {
this.initialize()
this.getList()
listAllSimpl().then(r => {
this.allSimplList = r.data
})
listServiceUser().then(r=>{
this.customerServiceList = r.data;
})
},
data(){
return {
queryForm:{},
newEstimateEnterOpenSeaTimeArr:[],
oldEstimateEnterOpenSeaTimeArr:[],
list:[],
total:0,
show:false,
allSimplList:[],
dataLog:{},
customerServiceList:[],
}
},
methods:{
parseTime,
initialize(){
this.queryForm = {
page:1,
rows:10,
name:null,
oldCustomerService:null,
newCustomerService:null,
operateType:null,
operator:null,
orderNo:null,
newEstimateEnterOpenSeaTime:null,
beginNewEstimateEnterOpenSeaTime:null,
beginOldEstimateEnterOpenSeaTime:null,
endNewEstimateEnterOpenSeaTime:null,
endOldEstimateEnterOpenSeaTime:null,
customerId:this.customerId
}
},
getList(){
this.queryForm.beginNewEstimateEnterOpenSeaTime = this.newEstimateEnterOpenSeaTimeArr[0] || ''
this.queryForm.endNewEstimateEnterOpenSeaTime = this.newEstimateEnterOpenSeaTimeArr[1] || ''
this.beginOldEstimateEnterOpenSeaTime = this.oldEstimateEnterOpenSeaTimeArr[0] || ''
this.endOldEstimateEnterOpenSeaTime = this.oldEstimateEnterOpenSeaTimeArr[1] || ''
getCustomerOperatelogPage(this.queryForm).then(r => {
this.list = r.data.list;
this.total = r.data.total;
})
},
getCustomerLog(val){
getCustomerOperatelog({id:val}).then(r =>{
this.dataLog = r.data
this.show = true;
})
}
}
}
</script>
<style scoped>
</style>
...@@ -200,7 +200,7 @@ ...@@ -200,7 +200,7 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="13"> <el-col :span="13">
<el-form-item :label="$t('泡货标准')" prop="weightUnit"> <el-form-item :label="$t('泡货标准')" prop="lightUnit">
<el-switch v-model="showPao"/> <el-switch v-model="showPao"/>
<el-input v-model="form.lightUnit" :placeholder="$t('请输入泡货标准')" v-show="showPao"> <el-input v-model="form.lightUnit" :placeholder="$t('请输入泡货标准')" v-show="showPao">
<template slot="append">kg/cbm</template> <template slot="append">kg/cbm</template>
...@@ -413,6 +413,99 @@ ...@@ -413,6 +413,99 @@
</el-col> </el-col>
</el-row> </el-row>
</el-form> </el-form>
<el-card>
<div slot="header" class="clearfix">
<span>{{$t('银行信息')}}</span>
<el-button style="float: right;" size="small" type="primary" @click="addBankData">+</el-button>
</div>
<el-form ref="bankForm" :model="form">
<el-table border :data="form.customerBanks">
<el-table-column :label="$t('序号')" type="index"></el-table-column>
<el-table-column>
<div slot="header">
{{$t('账户名称')}} <span style="color: red;">*</span>
</div>
<template v-slot="{row,$index}">
<el-form-item :rules="{required:true,message:$t('请输入账户名称')}" :prop="'customerBanks.'+ $index +'.accountName'">
<el-input size="mini" v-model="row.accountName"></el-input>
</el-form-item>
</template>
</el-table-column>
<el-table-column :label="$t('币别')">
<div slot="header">
{{$t('币别')}} <span style="color: red;">*</span>
</div>
<template v-slot="{row,$index}">
<el-form-item :prop="'customerBanks.'+ $index +'.currency'" :rules="{required:true,message:$t('请输入币别')}" >
<el-select v-model="row.currency">
<el-option v-for="(item) in currecyList" :label="$l(item,'title')" :value="item.id.toString()" :key="item.id"></el-option>
</el-select>
</el-form-item>
</template>
</el-table-column>
<el-table-column :label="$t('银行名称')">
<div slot="header">
{{$t('银行名称')}} <span style="color: red;">*</span>
</div>
<template v-slot="{row,$index}">
<el-form-item :prop="'customerBanks.'+ $index +'.bankName'" :rules="{required:true,message:$t('银行名称')}">
<el-input v-model="row.bankName" size="mini"></el-input>
</el-form-item>
</template>
</el-table-column>
<el-table-column :label="$t('银行账户')">
<div slot="header">
{{$t('银行账户')}} <span style="color: red;">*</span>
</div>
<template v-slot="{row,$index}">
<el-form-item :prop="`customerBanks.${$index}.bankAccount`" :rules="{required:true,message:$t('请输入银行账户')}">
<el-input v-model="row.bankAccount" size="mini"></el-input>
</el-form-item>
</template>
</el-table-column>
<el-table-column :label="$t('银行代码')">
<template v-slot="{row}">
<el-form-item prop="bankCode">
<el-input v-model="row.bankCode" size="mini"></el-input>
</el-form-item>
</template>
</el-table-column>
<el-table-column :label="$t('账户类型')">
<template v-slot="{row}">
<el-form-item>
<el-select v-model="row.accountType">
<el-option value="1" :label="$t('公账')"></el-option>
<el-option value="2" :label="$t('私账')" ></el-option>
</el-select>
</el-form-item>
</template>
</el-table-column>
<el-table-column :label="$t('状态')">
<template v-slot="{row}">
<el-form-item>
<el-select v-model="row.status">
<el-option :value="0" :label="$t('停用')"></el-option>
<el-option :value="1" :label="$t('正常')"></el-option>
</el-select>
</el-form-item>
</template>
</el-table-column>
<el-table-column :label="$t('银行地址')">
<template v-slot="{row}">
<el-form-item prop="baBankAdd">
<el-input v-model="row.bankAddress" size="mini"></el-input>
</el-form-item>
</template>
</el-table-column>
<el-table-column :label="$t('操作')">
<template v-slot="{$index}">
<el-button @click="deleteBankData($index)">{{$t('删除')}}</el-button>
</template>
</el-table-column>
</el-table>
</el-form>
</el-card>
<div style="text-align: center"> <div style="text-align: center">
<el-button type="primary" @click="submitForm">{{$t('确 定')}}</el-button> <el-button type="primary" @click="submitForm">{{$t('确 定')}}</el-button>
<el-button @click="cancel">{{$t('取 消')}}</el-button> <el-button @click="cancel">{{$t('取 消')}}</el-button>
...@@ -450,6 +543,7 @@ import Template from "@/views/cms/template"; ...@@ -450,6 +543,7 @@ import Template from "@/views/cms/template";
import {validatorMobile} from "@/api/ecw/validate" import {validatorMobile} from "@/api/ecw/validate"
// import {customerDropDownList} from "@/api/ecw/customerCommissionInfo"; // import {customerDropDownList} from "@/api/ecw/customerCommissionInfo";
import MemberSelector from '@/components/MemberSelector' import MemberSelector from '@/components/MemberSelector'
import {getCurrencyList} from "@/api/ecw/currency";
export default { export default {
name: "edit", name: "edit",
...@@ -461,6 +555,9 @@ export default { ...@@ -461,6 +555,9 @@ export default {
MemberSelector MemberSelector
}, },
created() { created() {
getCurrencyList().then(response => {
this.currecyList = response.data;
})
this.isCustomerServiceConfirmed = this.$route.query.isCustomerServiceConfirmed ? true : false this.isCustomerServiceConfirmed = this.$route.query.isCustomerServiceConfirmed ? true : false
this.getCustomerSelect() this.getCustomerSelect()
this.reset() this.reset()
...@@ -589,11 +686,30 @@ export default { ...@@ -589,11 +686,30 @@ export default {
memberList:[],//会员列表 memberList:[],//会员列表
selectMemberList:[],//选中会员列表 selectMemberList:[],//选中会员列表
serviceNetworkList:[], //网点列表 serviceNetworkList:[], //网点列表
allSimplList:[] allSimplList:[],
currecyList:[]
} }
}, },
methods: { methods: {
deleteBankData(index){
this.form.customerBanks.splice(index, 1);
},
//添加银行卡
addBankData(){
let p = {
bankName: "",
bankAccount: "",
bankAddress: "",
bankCode: "",
accountType: null,
status: null,
currency:'',
accountName:''
};
this.form.customerBanks = [...this.form.customerBanks,p]
},
/* getUserMemberUserFn(val){ /* getUserMemberUserFn(val){
userMemberUserList({pageNo:1,pageSize:100,searchKey:val}).then(r => { userMemberUserList({pageNo:1,pageSize:100,searchKey:val}).then(r => {
this.memberList = r.data.list this.memberList = r.data.list
...@@ -672,8 +788,10 @@ export default { ...@@ -672,8 +788,10 @@ export default {
} }
this.$refs["contactForm"].validate((valid1,err1) => { this.$refs["contactForm"].validate((valid1,err1) => {
this.$refs["form"].validate((valid2,err2) => { this.$refs["form"].validate((valid2,err2) => {
if (!valid1 || !valid2) { this.$refs.bankForm.validate((valid3,err3)=>{
this.$showFormValidateErrors({...err1,...err2}) console.log(valid3,'valid3')
if (!valid1 || !valid2 || !valid3) {
this.$showFormValidateErrors({...err1,...err2,...err3})
return; return;
} }
if (this.form.customerContacts.length === 0){ if (this.form.customerContacts.length === 0){
...@@ -747,6 +865,7 @@ export default { ...@@ -747,6 +865,7 @@ export default {
}) })
}); });
}) })
})
}, },
/** 表单重置 */ /** 表单重置 */
reset() { reset() {
...@@ -792,13 +911,15 @@ export default { ...@@ -792,13 +911,15 @@ export default {
isShowTidanPrice:true, isShowTidanPrice:true,
carName:undefined, carName:undefined,
carNo:undefined, carNo:undefined,
customerBanks:[]
}; };
this.form.createTime = (new Date()).getTime() this.form.createTime = (new Date()).getTime()
this.resetForm("form"); this.resetForm("form");
}, },
getCustomer(id) { getCustomer(id) {
return getCustomer(id).then(response => { return getCustomer(id).then(response => {
this.form = { ...this.form, ...response.data, id: this.customerId,transportType: response.data.transportType.split(',') }; console.log(response,'response')
this.form = { ...this.form, ...response.data, id: this.customerId,transportType: response.data.transportType.split(','),customerBanks:response.data.customerBankBackVOList };
this.open = true; this.open = true;
this.title = this.$t('修改客户'); this.title = this.$t('修改客户');
this.getZhongPao() this.getZhongPao()
......
...@@ -48,6 +48,7 @@ ...@@ -48,6 +48,7 @@
<el-image v-show="!!customer.picture" :src="customer.picture" style="width: 100px;height: 100px"></el-image> <el-image v-show="!!customer.picture" :src="customer.picture" style="width: 100px;height: 100px"></el-image>
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item :label="$t('备注')">{{ customer.remarks }}</el-descriptions-item> <el-descriptions-item :label="$t('备注')">{{ customer.remarks }}</el-descriptions-item>
<el-descriptions-item :label="$t('新老客户')">{{ customer.isNew ?$t('新客户') : $t('老客户') }}</el-descriptions-item>
<el-descriptions-item v-if="permissions.includes('ecw:customer:query-card')" :label="$t('身份证姓名')">{{ customer.carName }}</el-descriptions-item> <el-descriptions-item v-if="permissions.includes('ecw:customer:query-card')" :label="$t('身份证姓名')">{{ customer.carName }}</el-descriptions-item>
<el-descriptions-item v-if="permissions.includes('ecw:customer:query-card')" :label="$t('身份证号码')">{{ customer.carNo }}</el-descriptions-item> <el-descriptions-item v-if="permissions.includes('ecw:customer:query-card')" :label="$t('身份证号码')">{{ customer.carNo }}</el-descriptions-item>
<!-- <el-descriptions-item :label="$t('信用等级')">{{ customer }}</el-descriptions-item>--> <!-- <el-descriptions-item :label="$t('信用等级')">{{ customer }}</el-descriptions-item>-->
...@@ -109,6 +110,32 @@ ...@@ -109,6 +110,32 @@
</el-table-column> </el-table-column>
</el-table> </el-table>
</el-card> </el-card>
<el-card style="margin-top: 15px;">
<h3>{{$t('银行账户')}}</h3>
<el-table :data="customer.customerBankBackVOList" border>
<el-table-column :label="$t('编号')" type="index"></el-table-column>
<el-table-column :label="$t('账户名称')" prop="accountName"></el-table-column>
<el-table-column :label="$t('币别')">
<template v-slot="{row}">
{{$l(currecyList.find(i => row.currency == i.id),'title')}}
</template>
</el-table-column>
<el-table-column :label="$t('银行名称')" prop="bankName"></el-table-column>
<el-table-column :label="$t('银行账户')" prop="bankAccount"></el-table-column>
<el-table-column :label="$t('银行代码')" prop="bankCode"></el-table-column>
<el-table-column :label="$t('账户类型')">
<template v-slot="{row}">
{{Number(row.accountType) === 1 ? $t('公账') : $t('私账')}}
</template>
</el-table-column>
<el-table-column :label="$t('状态')">
<template v-slot="{row}">
{{row.status ? $t('正常') : $t('停用')}}
</template>
</el-table-column>
<el-table-column :label="$t('银行地址')" prop="bankAddress"></el-table-column>
</el-table>
</el-card>
<el-tabs v-model="activeName" style="margin-top: 15px" type="border-card"> <el-tabs v-model="activeName" style="margin-top: 15px" type="border-card">
<el-tab-pane name="order" :label="$t('订单')"> <el-tab-pane name="order" :label="$t('订单')">
...@@ -288,9 +315,15 @@ ...@@ -288,9 +315,15 @@
<el-table-column :label="$t('金额')" prop="totalAmount"> <el-table-column :label="$t('金额')" prop="totalAmount">
</el-table-column> </el-table-column>
<el-table-column :label="$t('已核销比例')" prop="writeOffScale"></el-table-column> <el-table-column :label="$t('已核销比例')" prop="writeOffScale"></el-table-column>
<el-table-column :label="$t('实收日期')" prop="writeOffAt"></el-table-column> <el-table-column :label="$t('实收日期')">
<template v-slot="{row}">
{{parseTime(row.writeOffAt)}}
</template>
</el-table-column>
<el-table-column :label="$t('业务员')" prop="salesmanName"></el-table-column> <el-table-column :label="$t('业务员')" prop="salesmanName"></el-table-column>
</el-table> </el-table>
<pagination v-show="infoListReceiptList.length" :total="infoListReceiptTotal" :page.sync="infoListReceiptFrom.pageNo" :limit.sync="infoListReceiptFrom.pageSize"
@pagination="infoListReceiptFn"/>
</el-tab-pane> </el-tab-pane>
<el-tab-pane name="data" :label="$t('数据')"> <el-tab-pane name="data" :label="$t('数据')">
<el-descriptions :column="2"> <el-descriptions :column="2">
...@@ -347,7 +380,7 @@ ...@@ -347,7 +380,7 @@
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<pagination v-show="brandAuthorizationTotal > 0" :total="brandAuthorizationTotal" :page.sync="brandAuthorizationFrom.pageNo" :limit.sync="brandAuthorizationFrom.pageSize" <pagination v-show="brandAuthorizationTotal.length" :total="brandAuthorizationTotal" :page.sync="brandAuthorizationFrom.pageNo" :limit.sync="brandAuthorizationFrom.pageSize"
@pagination="getBrankByCustomerList"/> @pagination="getBrankByCustomerList"/>
</el-tab-pane> </el-tab-pane>
<el-tab-pane name="credit" :label="$t('信用日志')"> <el-tab-pane name="credit" :label="$t('信用日志')">
...@@ -401,6 +434,9 @@ ...@@ -401,6 +434,9 @@
</el-table> </el-table>
<pagination @pagination="getCustomerGrade" :page.sync="getCustomerGradeFrom.pageNo" :limit.sync="getCustomerGradeFrom.pageSize" :total="getCustomerGradeFrom.total" ></pagination> <pagination @pagination="getCustomerGrade" :page.sync="getCustomerGradeFrom.pageNo" :limit.sync="getCustomerGradeFrom.pageSize" :total="getCustomerGradeFrom.total" ></pagination>
</el-tab-pane> </el-tab-pane>
<el-tab-pane name="operationLog" v-show="checkPermi('ecw:customer:operation-log')" :label="$t('操作日志')" >
<customer-log :customerId="id" v-if="'operationLog' === activeName"></customer-log>
</el-tab-pane>
</el-tabs> </el-tabs>
</el-col> </el-col>
</el-row> </el-row>
...@@ -458,15 +494,23 @@ import {getOrderPage} from "@/api/ecw/order"; ...@@ -458,15 +494,23 @@ import {getOrderPage} from "@/api/ecw/order";
import Template from "@/views/cms/template"; import Template from "@/views/cms/template";
import {getCreditRulePage} from "@/api/customer/creditRule"; import {getCreditRulePage} from "@/api/customer/creditRule";
import {getCountry} from "@/api/ecw/country" import {getCountry} from "@/api/ecw/country"
import {getCurrencyList} from "@/api/ecw/currency";
import customerLog from "@/views/ecw/customer/customerLog.vue";
import {checkPermi} from "@/utils/permission";
export default { export default {
name: 'query', name: 'query',
components: { components: {
Template, Template,
CustomerFollow, CustomerFollow,
CustomerComplaint CustomerComplaint,
customerLog,
}, },
created() { created() {
// 获取币种
getCurrencyList().then(response => {
this.currecyList = response.data;
})
//获取信用类型 //获取信用类型
getCreditRulePage({page:1,rows:999,type:2}).then(r => { getCreditRulePage({page:1,rows:999,type:2}).then(r => {
this.creditTypeList = r.data.list this.creditTypeList = r.data.list
...@@ -476,6 +520,7 @@ export default { ...@@ -476,6 +520,7 @@ export default {
}) })
getCustomer(this.id).then(response => { getCustomer(this.id).then(response => {
this.customer = { ...this.customer, ...response.data } this.customer = { ...this.customer, ...response.data }
console.log( this.customer,'this.customer')
getCustomerContactsListByCustomer({customerId: this.id}).then(r => { getCustomerContactsListByCustomer({customerId: this.id}).then(r => {
this.customerContacts = r.data this.customerContacts = r.data
...@@ -513,7 +558,6 @@ export default { ...@@ -513,7 +558,6 @@ export default {
}, },
watch:{ watch:{
activeName(val){ activeName(val){
console.log(val,'val')
switch (val) { switch (val) {
case 'order': case 'order':
this.getorderList()//订单 this.getorderList()//订单
...@@ -532,9 +576,11 @@ export default { ...@@ -532,9 +576,11 @@ export default {
break break
case 'credit': case 'credit':
this.creditScoreStatisticFn() //信用日志 this.creditScoreStatisticFn() //信用日志
this.creditLogPage()
break break
case 'grade': case 'grade':
this.creditLogPage()//等级日志 this.getCustomerGrade()
//等级日志
break break
} }
...@@ -543,6 +589,7 @@ export default { ...@@ -543,6 +589,7 @@ export default {
data() { data() {
return { return {
activeName:'order', activeName:'order',
currecyList:[],
STATUS:{ STATUS:{
0:this.$t('取消报价'), 0:this.$t('取消报价'),
1:this.$t('特价审批中'), 1:this.$t('特价审批中'),
...@@ -684,6 +731,7 @@ export default { ...@@ -684,6 +731,7 @@ export default {
} }
}, },
methods:{ methods:{
checkPermi,
userIdFormatter(row, column, cellValue){ userIdFormatter(row, column, cellValue){
const member = this.memberList.find(e => e.id === cellValue) const member = this.memberList.find(e => e.id === cellValue)
if (member) { if (member) {
...@@ -705,6 +753,7 @@ export default { ...@@ -705,6 +753,7 @@ export default {
getBrankByCustomerList(){ getBrankByCustomerList(){
getBrankByCustomer({...this.brandAuthorizationFrom,customerId:this.id}).then(r => {this.brandAuthorizationList = r.data.list; this.brandAuthorizationTotal = r.data.total}) getBrankByCustomer({...this.brandAuthorizationFrom,customerId:this.id}).then(r => {this.brandAuthorizationList = r.data.list; this.brandAuthorizationTotal = r.data.total})
}, },
// 信用等级日志
getCustomerGrade(){ getCustomerGrade(){
levelLogPage({...this.getCustomerGradeFrom,customerId:this.id,total:undefined}).then(r => { levelLogPage({...this.getCustomerGradeFrom,customerId:this.id,total:undefined}).then(r => {
if(r.code === 0){ if(r.code === 0){
...@@ -713,7 +762,7 @@ export default { ...@@ -713,7 +762,7 @@ export default {
} }
}) })
}, },
// 获取信用等级日志列表 // 信用日志
creditLogPage(){ creditLogPage(){
customerCreditLogPage({...this.customerCreditLogFrom,customerId:this.id}).then(r => { customerCreditLogPage({...this.customerCreditLogFrom,customerId:this.id}).then(r => {
if(r.code === 0){ if(r.code === 0){
......
This diff is collapsed.
...@@ -3,13 +3,13 @@ ...@@ -3,13 +3,13 @@
<!-- 搜索工作栏 --> <!-- 搜索工作栏 -->
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px"> <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item :label="$t('关键字')" prop="transportType"> <el-form-item :label="$t('关键字')" prop="key">
<el-input v-model="queryParams.key" :placeholder="$t('请输入关键字查找')" /> <el-input v-model="queryParams.key" :placeholder="$t('请输入关键字查找')" />
</el-form-item> </el-form-item>
<el-form-item :label="$t('运输方式')" prop="transportType"> <el-form-item :label="$t('运输方式')" prop="transportType">
<dict-selector :type="DICT_TYPE.ECW_TRANSPORT_TYPE" v-model="queryParams.transportType" formatter="number"/> <dict-selector :type="DICT_TYPE.ECW_TRANSPORT_TYPE" v-model="queryParams.transportType" formatter="number"/>
</el-form-item> </el-form-item>
<el-form-item :label="$t('唛头')" prop="transportType"> <el-form-item :label="$t('唛头')" prop="marks">
<el-input v-model="queryParams.marks" :placeholder="$t('请输入关键字查找')" /> <el-input v-model="queryParams.marks" :placeholder="$t('请输入关键字查找')" />
</el-form-item> </el-form-item>
<el-form-item :label="$t('资源类型')" prop="customerType"> <el-form-item :label="$t('资源类型')" prop="customerType">
...@@ -410,6 +410,9 @@ ...@@ -410,6 +410,9 @@
data.sumVolume += item.completeVolume data.sumVolume += item.completeVolume
data.sumNum += item.sumNum data.sumNum += item.sumNum
}) })
data.developVolume = data.developVolume.toFixed(2);
data.companyVolume = data.companyVolume.toFixed(2);
data.sumVolume = data.sumVolume.toFixed(2);
this.$set(this,'totalData',data) this.$set(this,'totalData',data)
}else{ }else{
this.totalData.sumWeight =this.myAchievementData.totalWeight this.totalData.sumWeight =this.myAchievementData.totalWeight
......
This diff is collapsed.
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
</div> </div>
</el-form-item> </el-form-item>
<el-form-item :label="$t('收款账户')" prop="accountNo"> <el-form-item :label="$t('收款账户')" prop="accountNo">
<span>{{ addForm.accountNo }}</span> <span>{{ addForm.accountNo+'('+addForm.accountName+')' }}</span>
</el-form-item> </el-form-item>
<el-form-item :label="$t('实收日期')" prop="amountDate"> <el-form-item :label="$t('实收日期')" prop="amountDate">
<span>{{ addForm.amountDate }}</span> <span>{{ addForm.amountDate }}</span>
...@@ -23,14 +23,7 @@ ...@@ -23,14 +23,7 @@
<span>{{ addForm.amount }}</span> <span>{{ addForm.amount }}</span>
</el-form-item> </el-form-item>
<el-form-item label-width="0px" prop="currencyId"> <el-form-item label-width="0px" prop="currencyId">
<el-select v-model="addForm.currencyId" :disabled="true"> <span>({{getCurrencyLabel(showCurrencyId)}})</span>
<el-option
v-for="item in currencyList"
:key="item.id"
:label="$i18n.locale=='zh_CN'?item.titleZh:item.titleEn"
:value="item.id"
/>
</el-select>
</el-form-item> </el-form-item>
</div> </div>
<el-form-item <el-form-item
...@@ -69,7 +62,7 @@ ...@@ -69,7 +62,7 @@
</template> </template>
<script> <script>
import { getReceivableItem ,getInvoicingItem,getReceiptAccountList,getReceiptInfoByIds} from "@/api/ecw/financial"; import { getReceivableItem ,getInvoicingItem,getReceiptAccountList,getReceiptInfoByIds,financeReceiptItemWriteOff} from "@/api/ecw/financial";
import { getCurrencyPage } from "@/api/ecw/currency"; import { getCurrencyPage } from "@/api/ecw/currency";
import WorkFlow from '@/components/WorkFlow/' import WorkFlow from '@/components/WorkFlow/'
import NP from 'number-precision' import NP from 'number-precision'
...@@ -134,6 +127,17 @@ ...@@ -134,6 +127,17 @@
if(label.length>0) return this.$i18n.locale=='zh_CN'?label[0].titleZh:label[0].titleEn if(label.length>0) return this.$i18n.locale=='zh_CN'?label[0].titleZh:label[0].titleEn
return '' return ''
}, },
submitForm(){
this.$modal
.confirm(this.$t('您确认要提交审核吗'+'?'))
.then(() => {
financeReceiptItemWriteOff({receiptId:this.id,receiptNo:this.form.receiptNo,receiptItemId:this.bankId}).then(res=>{
this.$message.success(this.$t("提交成功"));
this.$store.dispatch('tagsView/delCurrentView')
});
})
.catch(() => {});
},
handleAddReceiptItem() { handleAddReceiptItem() {
this.surplusData = [] this.surplusData = []
......
This diff is collapsed.
<template>
<div style="padding: 20px">
<el-card class="box-card">
<div slot="header" class="clearfix" style="font-size: 20px;">
{{$t('应付款佣金')}}
</div>
<el-form label-width="80px" inline>
<el-row :gutter="20">
<el-col :span="6">
<el-form-item :label="$t('订单号')">
<el-input :placeholder="$t('请输入订单号')" v-model="queryParams.orderNo"></el-input>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item :label="$t('客户')">
<el-input :placeholder="$t('请输入客户')" v-model="queryParams.customerName"></el-input>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item :label="$t('始发仓')">
<el-select
v-model="queryParams.startWarehouseId"
: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-col>
<el-col :span="6">
<el-form-item :label="$t('目的仓')">
<el-select
v-model="queryParams.destWarehouseId"
:placeholder="$t('请选择目的仓')"
clearable
>
<el-option
v-for="item in importWarehouseList"
:label="$l(item, 'title')"
:value="item.id"
:key="item.id"
></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="6">
<el-form-item :label="$t('运输方式')">
<dict-selector
:type="DICT_TYPE.ECW_TRANSPORT_TYPE"
v-model="queryParams.transportId"
formatter="number"
clearable
/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item :label="$t('佣金类型')">
<dict-selector
:type="DICT_TYPE.COMMISSION_TYPE"
v-model="queryParams.feeType"
formatter="number"
clearable
/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item :label="$t('状态')">
<el-select clearable v-model="queryParams.state">
<el-option v-for="(item) in STATE" :label="$t(item.title)" :value="item.value" :key="item.value"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item>
<el-button size="mini" type="primary" @click="queryParams.page = 1;getList()">{{$t('查找')}}</el-button>
<el-button size="mini" v-has-permi="['ecw:commission-payable:add']" type="success" @click="$router.push({path:'/financial/commission-requestFunds',query:{payableId:0}})" >{{$t('新增请款单')}}</el-button>
</el-form-item>
</el-col>
</el-row>
</el-form>
</el-card>
<el-table border :data="list" style="margin-top: 30px">
<el-table-column align="center" :label="$t('订单编号')" prop="orderNo" ></el-table-column>
<el-table-column align="center" :label="$t('品名')">
<template v-slot="{row}">
{{row.titleZh}}/{{row.titleEn}}
</template>
</el-table-column>
<el-table-column align="center" :label="$t('客户名称')" prop="customerName" ></el-table-column>
<el-table-column align="center" :label="$t('佣金类型')">
<template v-slot="{row}">
<dict-tag
:type="DICT_TYPE.COMMISSION_TYPE"
:value="row.feeType"
></dict-tag>
</template>
</el-table-column>
<el-table-column align="center" :label="$t('金额')" prop="totalAmount">
<template slot-scope="scope">
<span>{{ scope.row.totalAmount }}</span>
<span>{{getCurrencyLabel(scope.row.currencyId)}}</span>
</template>
</el-table-column>
<el-table-column align="center" :label="$t('应付生成时间')">
<template v-slot="{row}">
{{parseTime(row.createTime)}}
</template>
</el-table-column>
<el-table-column align="center" :label="$t('状态')">
<template v-slot="{row}">
{{$t(STATE.find(r => r.value === row.state).title)}}
</template>
</el-table-column>
<el-table-column align="center" :label="$t('付款单号')" prop="paymentNo"></el-table-column>
<el-table-column :label="$t('备注')" prop="remark" ></el-table-column>
<el-table-column align="center" :label="$t('操作')">
<template v-slot="{row}">
<el-button size="mini" v-has-permi="['ecw:commission-payable:funds']" v-if="!row.state" type="text" @click="$router.push({path:'/financial/commission-requestFunds',query:{payableId:row.id}})" >{{$t('请款')}}</el-button>
</template>
</el-table-column>
</el-table>
<pagination
v-show="total > 0"
:total="total"
:page.sync="queryParams.page"
:limit.sync="queryParams.rows"
@pagination="getList"
/>
</div>
</template>
<script>
import {getWarehouseList} from "@/api/ecw/warehouse";
import item from "@/layout/components/Sidebar/Item.vue";
import {payablePage} from "@/api/ecw/financial";
import Template from "@/views/cms/template/index.vue";
import {getCurrencyPage} from "@/api/ecw/currency";
import {parseTime} from "../../../utils/ruoyi";
export default {
// 应付款佣金
name: "EcwFinancialCommission-payable",
components: {Template},
activated(){
this.getList()
},
created() {
getWarehouseList().then(res => this.warehouseList = res.data)
this.getList()
getCurrencyPage().then(res => this.currencyList = res.data.list)
},
data(){
return {
STATE:[
{
value:0,
title:this.$t('未付款'),
},
{
value:1,
title:this.$t('付款中'),
},
{
value:2,
title:this.$t('已付款'),
}
],
warehouseList:[],
queryParams:{
rows:10,
page:1,
orderNo:'',
customerName:'',
startWarehouseId:'',
destWarehouseId:'',
feeType:'',
state:''
},
list:[],
total:0,
currencyList:[],
}
},
computed:{
exportWarehouseList(){
/* tradeType 1 进口,2出口,3进出口 */
return this.warehouseList.filter(item => item.tradeType == 2 || item.tradeType == 3)
},
importWarehouseList(){
return this.warehouseList.filter(item => item.tradeType == 1 || item.tradeType == 3)
},
},
methods:{
parseTime,
getList(){
payablePage(this.queryParams).then(r =>{
this.list = r.data.list
this.total = r.data.total
})
},
getCurrencyLabel(id){
var label = this.currencyList.filter(item=>item.id == id)
if(label.length>0) return this.$i18n.locale=='zh_CN'?label[0].titleZh:label[0].titleEn
return ''
},
},
}
</script>
<style scoped>
</style>
This diff is collapsed.
<template>
<div class="app-container">
<el-descriptions :column="5" >
<el-descriptions-item :label="$t('收款单编号')">{{ form.receiptNo }}</el-descriptions-item>
<el-descriptions-item :label="$t('客户')">{{ form.customerName }}</el-descriptions-item>
<el-descriptions-item :label="$t('创建时间')">
<template >
<span>{{ parseTime(form.createTime, '{y}-{m}-{d}') }}</span>
</template></el-descriptions-item>
<el-descriptions-item :label="$t('业务员')">{{ form.salesmanName }}</el-descriptions-item>
<el-descriptions-item :label="$t('期望收款金额')">
<template>
<div v-for="itemAmount in collectionAmount" :key="itemAmount.currencyNameZh">{{ itemAmount.amount}}{{$i18n.locale=='zh_CN'?itemAmount.currencyNameZh:itemAmount.currencyNameEn}}</div>
</template>
</el-descriptions-item>
<el-descriptions-item v-if="reason" :label="$t('申请理由')">{{reason}}</el-descriptions-item>
</el-descriptions>
<div class="btn">
<el-button
size="mini"
type="primary"
@click="$router.push('/financial/receiptDetail?id=' + receiptId)"
>{{ $t('查看收款单')}}</el-button>
</div>
</div>
</template>
<script>
import {
getReceiptInfoByIds,
getInvoicingItem,
getReceiptAccountList,
getReceiptApprove
} from "@/api/ecw/financial";
import { getCurrencyPage } from "@/api/ecw/currency";
import NP from 'number-precision'
export default {
props:{
id: [String, Number]
},
data() {
return {
form: {},
collectionAmount: [],
currencyList:[],
list:[],
receiptId:0,
reason:''
}
},
watch:{
id(){
this.getCurrencyData()
},
currencyList(){
this.getData()
},
form(){
this.getListData()
},
list(){
this.getCollectionData()
}
},
created() {
if(this.id){
this.getCurrencyData()
}
},
methods: {
getData(){
console.log(this.id)
getReceiptApprove(this.id).then(res => {
if(res.data.receiptId){
this.receiptId = res.data.receiptId
this.reason = res.data.reason
this.getReceiptInfo()
}
})
},
// 获取汇率
getCurrencyData(){
getCurrencyPage(this.params).then(res => {this.currencyList = res.data.list})
},
getReceiptInfo(){
getReceiptInfoByIds({ id: this.receiptId }).then(res => {
this.form = res.data
})
},
getListData(){
getInvoicingItem({ id: this.receiptId }).then(res => {
this.list = [...res.data]
})
},
getCollectionData(){
getReceiptAccountList({ id: this.receiptId }).then(res => {
var n
// 收款总计
var amountList =[]
this.currencyList.forEach((item,index)=>{
var nairaListByList = this.list.filter(v => v.currencyId === item.id)
if(nairaListByList.length>0){
var discountNaira = nairaListByList.reduce((total, currentValue) => NP.plus(total, currentValue.discountTotal || 0), 0)
n = res.data.find(v => v.currencyId == item.id)
n && (n.discountTotal = discountNaira)
}
var dollarList = res.data.filter(v => v.collectionCurrencyId == item.id)
if(dollarList.length>0){
var dollar = dollarList.reduce((total, currentValue) => NP.plus(total, currentValue.collectionAmount), 0).toFixed(2)
amountList.push({currencyId:item.id,currencyNameEn:item.titleEn,currencyNameZh:item.titleZh,amount:dollar})
}
})
this.$set(this,'collectionAmount',amountList)
})
}
}
}
</script>
<style scoped lang="scss">
.btn{
margin-top: 20px;
}
.app-container {
::v-deep .el-descriptions-item__label {
font-size:16px;
font-weight:600;
}
::v-deep .el-descriptions-item__content {
font-size:16px;
font-weight:600;
}
}
</style>
This diff is collapsed.
<template>
<div>
<div class="app-container">
<el-descriptions :column="5" >
<el-descriptions-item :label="$t('收款单编号')">{{ form.receiptNo }}</el-descriptions-item>
<el-descriptions-item :label="$t('客户')">{{ form.customerName }}</el-descriptions-item>
<el-descriptions-item :label="$t('创建时间')">
<template >
<span>{{ parseTime(form.createTime, '{y}-{m}-{d}') }}</span>
</template></el-descriptions-item>
<el-descriptions-item :label="$t('业务员')">{{ form.salesmanName }}</el-descriptions-item>
<el-descriptions-item :label="$t('期望收款金额')">
<template>
<div v-for="itemAmount in collectionAmount" :key="itemAmount.currencyNameZh">{{$i18n.locale=='zh_CN'?itemAmount.currencyNameZh:itemAmount.currencyNameEn}}: {{ itemAmount.amount}}</div>
</template>
</el-descriptions-item>
<el-descriptions-item v-if="reason" :label="$t('申请理由')">{{reason}}</el-descriptions-item>
</el-descriptions>
</div>
<el-descriptions :column="3" border>
<el-descriptions-item >
<template slot="label">
{{ $t('实收已核销总金额') }}
<span :title="$t('所有银行收款明细中状态为已核销的实收金额,币种根据实收币种分类统计')"><i class="el-icon-question"></i></span>
</template>
<template v-if="!Object.keys(writeOffTotal).length">
0
</template>
<div v-else>
<div v-for="(amount, currency) in writeOffTotal" :key="currency">
{{amount}}{{getCurrencyLabel(currency)}}
</div>
</div>
</el-descriptions-item>
<el-descriptions-item>
<template slot="label">
{{ $t('核销基准币种已核销总金额') }}{{getCurrencyLabel(showCurrencyId)}}
<span :title="$t('为了方便统计收款单核销比例,将所有银行收款明细中状态为已核销的实收金额,转换为核销基准币种的金额累加')"><i class="el-icon-question"></i></span>
</template>
{{ writeOffAmount}}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label">
{{ $t('总核销比例') }}{{getCurrencyLabel(showCurrencyId)}}
<span :title="$t('总核销比例=核销基准币种已核销总金额/核销基准币种应收总金额')"><i class="el-icon-question"></i></span>
</template>
{{ WriteOffProportion }}%
</el-descriptions-item>
</el-descriptions>
<div class="btn">
<el-button
size="mini"
type="primary"
@click="$router.push('/financial/receiptDetail?id=' + receiptId)"
>{{ $t('查看收款单')}}</el-button>
</div>
</div>
</template>
<script>
import { getCustomer } from '@/api/ecw/customer'
import {
getReceiptInfoByIds,
getInvoicingItem,
getReceiptAccountList,
getReceivableItem,
getReceiptApprove
} from "@/api/ecw/financial";
import { getCurrencyPage } from "@/api/ecw/currency";
import NP from 'number-precision'
export default {
props:{
id: [String, Number]
},
data() {
return {
form: {},
collectionAmount: [],
currencyList:[],
list:[],
writeOffAmounts:0,
detailed:[],
showCurrencyId:0,
receiptId:0,
reason:''
}
},
watch:{
id(){
this.getCurrencyData()
},
currencyList(){
this.getData()
},
form(){
this.getListData()
},
list(){
this.getList()
this.getCollectionData()
}
},
created() {
if(this.id){
this.getCurrencyData()
}
},
computed: {
// 已核销总金额
writeOffTotal(){
let total = {}
this.detailed.forEach(item => {
if(item.status){
if(!total[item.currencyId]){
total[item.currencyId] = item.amount
}else total[item.currencyId] = NP.plus(total[item.currencyId], item.amount)
}
})
return total
},
// 已核销总金额
writeOffAmount(){
let total = 0
this.detailed.forEach(item => {
if(item.status){
total = NP.plus(total, item.writeOffAmount)
}
})
return total.toFixed(2)
},
WriteOffProportion(){
let total = 0
if(!this.writeOffAmounts) return 0
let amountTotal = this.writeOffAmounts
this.detailed.forEach(item => {
if(item.status){
total = NP.plus(total, item.writeOffAmount)
}
})
let portion = NP.divide(total,amountTotal)
return (portion*100).toFixed(2)
}
},
methods: {
getData(){
getReceiptApprove(this.id).then(res => {
if(res.data.receiptId){
this.receiptId = res.data.receiptId
this.reason = res.data.reason
this.getReceiptInfo()
}
})
},
getList() {
getReceivableItem({ id: this.receiptId }).then(res => {
this.detailed = res.data.map(v => ({
...v,
amountDate: this.parseTime(v.amountDate, '{y}-{m}-{d}'),
accountNo: +v.accountNo,
rate:parseFloat(v.rate).toFixed(6),
attr: v.attr ? v.attr.split(',').map(t => ({ name: t.slice(t.lastIndexOf('/') + 1), url: t })) : []
}))
})
},
// 获取汇率
getCurrencyData(){
getCurrencyPage(this.params).then(res => {this.currencyList = res.data.list})
},
getReceiptInfo(){
getReceiptInfoByIds({ id: this.receiptId }).then(res => {
this.form = res.data
getCustomer(this.form.customerId).then(res => {
this.form.customerName = res?.data?.name
})
})
},
getListData(){
getInvoicingItem({ id: this.receiptId }).then(res => {
this.list = [...res.data]
let fieldList = [];
let groupList=[];
this.list.map((element)=>{
if(fieldList.indexOf(element['currencyId'])===-1){
fieldList.push(element['currencyId'])
}
})
for(let i=0;i<fieldList.length;i++){
let arr = this.list.filter((element)=>{
return element['currencyId']===fieldList[i];
})
groupList.push({
currencyId:arr[0].currencyId,
list:arr
})
}
this.showCurrencyId = 1
if (groupList.length === 1) this.showCurrencyId = groupList[0].currencyId
})
},
getCollectionData(){
getReceiptAccountList({ id: this.receiptId }).then(res => {
var n
// 收款总计
var amountList =[]
this.currencyList.forEach((item,index)=>{
var nairaListByList = this.list.filter(v => v.currencyId === item.id)
if(nairaListByList.length>0){
var discountNaira = nairaListByList.reduce((total, currentValue) => NP.plus(total, currentValue.discountTotal || 0), 0)
n = res.data.find(v => v.currencyId == item.id)
n && (n.discountTotal = discountNaira)
}
var dollarList = res.data.filter(v => v.collectionCurrencyId == item.id)
if(dollarList.length>0){
var dollar = dollarList.reduce((total, currentValue) => NP.plus(total, currentValue.collectionAmount), 0).toFixed(2)
amountList.push({currencyId:item.id,currencyNameEn:item.titleEn,currencyNameZh:item.titleZh,amount:dollar})
}
})
this.writeOffAmounts = res.data.reduce((total, currentValue) => NP.plus(total, currentValue.writeOffAmount || 0), 0),
console.log(this.writeOffAmounts)
this.$set(this,'collectionAmount',amountList)
})
},
getCurrencyLabel(id){
var label = this.currencyList.filter(item=>item.id == id)
if(label.length>0) return this.$i18n.locale=='zh_CN'?label[0].titleZh:label[0].titleEn
return ''
},
}
}
</script>
<style scoped lang="scss">
.btn{
margin-top: 20px;
}
.app-container {
::v-deep .el-descriptions-item__label {
font-size:16px;
font-weight:600;
}
::v-deep .el-descriptions-item__content {
font-size:16px;
font-weight:600;
}
}
</style>
<template>
<div class="app-container">
<el-descriptions :column="5" >
<el-descriptions-item :label="$t('付款单编号')">{{ form.paymentNo }}</el-descriptions-item>
<el-descriptions-item :label="$t('供应商名称')">{{ form.supplierName }}</el-descriptions-item>
<el-descriptions-item :label="$t('创建时间')">
<template >
<span>{{ parseTime(form.createTime, '{y}-{m}-{d}') }}</span>
</template></el-descriptions-item>
<el-descriptions-item :label="$t('业务员')">{{ form.salesmanName }}</el-descriptions-item>
<el-descriptions-item :label="$t('付款金额')">{{paymentMoney}}{{$t('人民币')}}</el-descriptions-item>
<el-descriptions-item v-if="reason" :label="$t('申请理由')">{{reason}}</el-descriptions-item>
</el-descriptions>
<div class="btn">
<el-button
size="mini"
type="primary"
@click="$router.push('/financial/paymentDetail?id=' + paymentId)"
>{{ $t('查看付款单')}}</el-button>
</div>
</div>
</template>
<script>
import {
getPaymentApprove,
getPaymentInfoByIds,
getPaymentItem
} from "@/api/ecw/financial";
export default {
props:{
id: [String, Number]
},
data() {
return {
form: {},
list:[],
paymentId:0,
paymentMoney:0,
reason:''
}
},
watch:{
id(){
this.getData()
},
form(){
this.getListData()
},
},
created() {
if(this.id){
this.getData()
}
},
methods: {
getData(){
getPaymentApprove(this.id).then(res => {
if(res.data.paymentId){
this.paymentId = res.data.paymentId;
this.reason = res.data.reason;
this.getPayableInfo()
}
})
},
getPayableInfo(){
getPaymentInfoByIds({ id: this.paymentId }).then(res => {
this.form = res.data
})
},
getListData(){
getPaymentItem({ id: this.paymentId }).then(res => {
this.list = [...res.data]
const t = this.list.map(v => v.total).reduce((prev, curr) => {
return parseFloat(prev) + parseFloat(curr);
}, 0)
this.paymentMoney = t
})
},
}
}
</script>
<style scoped lang="scss">
.btn{
margin-top: 20px;
}
.app-container {
::v-deep .el-descriptions-item__label {
font-size:16px;
font-weight:600;
}
::v-deep .el-descriptions-item__content {
font-size:16px;
font-weight:600;
}
}
</style>
<template>
<div>
<el-descriptions :column="5" size="mini">
<el-descriptions-item :label="$t('付款单')">{{record.paymentNo}}</el-descriptions-item>
<el-descriptions-item :label="$t('客户名称')">{{record.customerName}}</el-descriptions-item>
<el-descriptions-item :label="$t('创建时间')">{{parseTime(record.createTime)}}</el-descriptions-item>
<el-descriptions-item :label="$t('业务员')">{{record.salesmanName}}</el-descriptions-item>
<el-descriptions-item :label="$t('付款金额')">{{record.totalAmount}}rmb</el-descriptions-item>
<el-descriptions-item v-if="record.reason" :label="$t('申请理由')">{{record.reason}}</el-descriptions-item>
</el-descriptions>
<router-link :to="{path:'/financial/commission-requestFunds',query:{lookId: this.record.id}}">
<el-button type="primary">{{$t('查看详情')}}</el-button>
</router-link>
</div>
</template>
<script>
import {commissionPaymentGetPaymentApprove, getCommissionPayment} from "@/api/ecw/financial";
import {parseTime} from "../../../../utils/ruoyi";
export default {
name: "commissionPaymentDetails",
methods: {parseTime},
props:{
id:{
type:[Number, String],
default:()=>0
},
},
data(){
return {
record:{}
}
},
watch:{
id:{
handler:function (newVal){
commissionPaymentGetPaymentApprove({id:newVal}).then(r => {
console.log(r,'rrr');
getCommissionPayment({id:r.data.paymentId}).then(res => {
this.record = res.data;
this.record.reason = r.data.reason //申请理由
})
})
},
immediate:true,
}
}
}
</script>
<style scoped lang="scss">
</style>
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.
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.
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