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 = 捷道管理系统-测试站
# 捷道管理系统/开发环境
VUE_APP_BASE_API = 'https://api.jd.jdshangmen.com'
VUE_APP_BASE_API = 'https://api.sit.jdshangmen.com'
# 路由懒加载
VUE_CLI_BABEL_TRANSPILE_MODULES = true
......
......@@ -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){
})
}
//获得客户日志
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) {
})
}
// 我的业绩
// 我的部门业绩
export function myDeptAchievementByPage(data) {
return request({
url: '/sale/dept-target/myDeptAchievementByPage',
......@@ -17,7 +17,7 @@ export function myDeptAchievementByPage(data) {
data: data
})
}
// 我的部门业绩
// 我的业绩
export function myAchievementByPage(data) {
return request({
url: '/sale/dept-target/myAchievementByPage',
......@@ -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) {
return request({
......@@ -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) {
return request({
......@@ -85,3 +103,23 @@ export function exportDeptTargetExcel(query) {
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) {
params: query
})
}
//获取佣金应付款详情
export function getCommissionPayable(params){
return request({
url:'/ecw/commission-payable/get',
method:"get",
params
})
}
// 创建付款单
export function createPayment(data) {
......@@ -282,6 +290,14 @@ export function createPayment(data) {
data: data
})
}
// 创建佣金订单
export function commissionPayment(data){
return request({
url:'/ecw/commission-payment/create',
method:'post',
data
})
}
// 获取付款单列表
export function getPaymentList(query) {
......@@ -300,6 +316,22 @@ export function getPaymentInfoByIds(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) {
......@@ -310,6 +342,7 @@ export function getPaymentItem(query) {
})
}
// 更新付款单
export function updatePayment(data) {
return request({
......@@ -318,6 +351,14 @@ export function updatePayment(data) {
data: data
})
}
// 更新佣金付款单
export function commissionPaymentUpdate(data){
return request({
url:'/ecw/commission-payment/update',
method:'put',
data
})
}
// 删除付款单
export function deletePayment(id) {
......@@ -337,25 +378,278 @@ export function paymentVerify(query) {
}
// 核销付款单
export function paymentVerification(id) {
export function paymentVerification(data) {
return request({
url: '/ecw/payment/verification/' + id,
method: 'GET'
url: '/ecw/payment/verification',
method: 'post',
data
})
}
// 反核销付款单
export function paymentVerificationCancel(id) {
export function paymentVerificationCancel(data) {
return request({
url: '/ecw/payment/verificationCancel/' + id,
method: 'GET'
url: '/ecw/payment/verificationCancel',
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/payment/verifyCancel/' + id,
url:'/ecw/commission-payment/page',
method:'get',
params
})
}
// 根据流程主键获取付款单流程审核信息
export function getPaymentApprove(id) {
return request({
url: '/ecw/payment/getPaymentApprove?id='+id,
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) {
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){
// 入仓修改
export function orderWarehouseInUpdateApply(data){
return request({
url: '/order/order-warehouse-in/update-apply',
url: '/order/order-warehouse-in/update-or-updateApply',
method: 'put',
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) {
return request({
......@@ -329,6 +338,7 @@ export function feeApplicationGet(params){
params
})
}
// 调仓-明细-后台使用
export function getAdjustInfo(params){
return request({
url:'/order/order-warehouse-in/get-adjust-info',
......@@ -657,3 +667,12 @@ export function exportUnload(params){
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) {
return request({
url: '/ecw/order-exception/export-excel',
method: 'get',
timeout: 6*60*1000,
timeout: 3*60*1000,
params,
//timeout: 3*60*1000,
// timeout: 3*60*1000,
responseType: 'arraybuffer'
})
}
......@@ -78,4 +78,12 @@ export function calculationPrice(data){
method: 'post',
data: data
})
}
\ No newline at end of file
}
//新增商品可用优惠信息列表
export function product_coupon_newProd(params){
return request({
url:'/product/coupon/newProd/list',
method:'get',
params
})
}
......@@ -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) {
return request({
......@@ -52,3 +61,30 @@ export function exportSupplierExcel(query) {
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) {
})
}
// 查询当前登陆人的所属部门列表
export function myListDept(query) {
return request({
url: '/system/dept/myListDept',
method: 'get',
params: query
})
}
// 查询部门列表(排除节点)
export function listDeptExcludeChild(deptId) {
return request({
......
......@@ -32,14 +32,14 @@
:key="dict.value" :label="dict.label" :value="parseInt(dict.value)" />
</el-select>
</el-form-item>
<el-form-item :label="$t('创建时间')" prop="createTime">
<!-- <el-form-item :label="$t('创建时间')" prop="createTime">
<el-date-picker
v-model="form.createTime"
type="datetime"
value-format="timestamp"
:placeholder="$t('选择创建时间')">
</el-date-picker>
</el-form-item>
</el-form-item> -->
<el-form-item :label="$t('客户经理')" prop="customerService">
<el-select v-model="form.customerService" :placeholder="$t('请选择客户经理')">
<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>
This diff is collapsed.
......@@ -161,7 +161,7 @@
"目的仓": "目的仓",
"目的地": "目的地",
"确定": "确定",
"确订打印": "确订打印",
"确定打印": "确定打印",
"确认添加": "确认添加",
"税率": "税率",
"箱数": "箱数",
......
import { Message, MessageBox, Notification, Loading } from 'element-ui'
import i18n from "@/i18n";
let loadingInstance;
export default {
// 消息提示
msg(content) {
......@@ -21,19 +20,19 @@ export default {
},
// 弹出提示
alert(content) {
MessageBox.alert(content, "系统提示")
MessageBox.alert(content, i18n.t("系统提示"))
},
// 错误提示
alertError(content) {
MessageBox.alert(content, "系统提示", { type: 'error' })
MessageBox.alert(content, i18n.t("系统提示"), { type: 'error' })
},
// 成功提示
alertSuccess(content) {
MessageBox.alert(content, "系统提示", { type: 'success' })
MessageBox.alert(content, i18n.t("系统提示"), { type: 'success' })
},
// 警告提示
alertWarning(content) {
MessageBox.alert(content, "系统提示", { type: 'warning' })
MessageBox.alert(content, i18n.t("系统提示"), { type: 'warning' })
},
// 通知提示
notify(content) {
......@@ -52,18 +51,19 @@ export default {
Notification.warning(content)
},
// 确认窗体
confirm(content) {
return MessageBox.confirm(content, "系统提示", {
confirmButtonText: '确定',
cancelButtonText: '取消',
return MessageBox.confirm(content, i18n.t("系统提示"), {
confirmButtonText: i18n.t('确定'),
cancelButtonText: i18n.t('取消'),
type: "warning",
})
},
// 提交内容
prompt(content) {
return MessageBox.prompt(content, "系统提示", {
confirmButtonText: '确定',
cancelButtonText: '取消',
return MessageBox.prompt(content, i18n.t("系统提示"), {
confirmButtonText: i18n.t('确定'),
cancelButtonText: i18n.t('取消'),
type: "warning",
})
},
......
......@@ -157,8 +157,8 @@ export const constantRoutes = [
}, {
path: 'process-instance/detail',
component: (resolve) => require(['@/views/bpm/processInstance/detail'], resolve),
name: '流程详情',
meta: {title: '流程详情', activeMenu: '/bpm/task/my'}
name: 'Flow details',
meta: {title: '流程详情',titleEn:'Flow details', activeMenu: '/bpm/task/my'}
}
]
},
......@@ -171,13 +171,13 @@ export const constantRoutes = [
path: 'empAchievement',
component: (resolve) => require(['@/views/ecw/deptTarget/empAchievement'], resolve),
name: '员工业绩',
meta: {title: '员工业绩', activeMenu: '/deptTarget/index'}
meta: {title: '员工业绩',titleEn: 'Emp Achievement', activeMenu: '/deptTarget/index'}
},
{
path: 'myDeptAchievement',
component: (resolve) => require(['@/views/ecw/deptTarget/myDeptAchievement'], resolve),
name: '我的部门业绩',
meta: {title: '我的部门业绩', activeMenu: '/deptTarget/myDeptAchievement'}
meta: {title: '我的部门业绩',titleEn: 'My dept Achievement', activeMenu: '/deptTarget/myDeptAchievement'}
}
]
},
......
......@@ -70,6 +70,7 @@ export const DICT_TYPE = {
ECW_DATA_SOURCE: 'data_source', // 数据来源
ECW_REGION_TYPE: 'region_trade_type', // 区域类型
ECW_TRANSPORT_TYPE: 'transport_type', //货运方式
ECW_KYC_DATA: 'member_control_reuest', //会员控单方式
ECW_CHARGE_TYPE: 'warehouse_charge_type', //仓储收费方式
ECW_SHELF_TYPE: 'shelf_type', //货架类型
ECW_PRODUCT_MATERIAL: 'product_material', //商品材质
......@@ -151,6 +152,7 @@ export const DICT_TYPE = {
CUSTOMER_CREDIT_RULE_TYPE: 'customer_credit_rule_type',
CUSTOMER_LEVEL_RULE_TYPE: 'customer_level_rule_type',
CUSTOMER_ESOURCE_TYPE:'customer_resource_type',//客户资源类型
CUSTOMER_OPERATE_TYPE:'customer_operate_type',
// order
ORDER_TYPE: 'order_type', // 订单类型
PRODUCT_RECORD_ATTRIBUTE: 'product_record_attribute', //产品备案属性
......@@ -193,6 +195,7 @@ export const DICT_TYPE = {
ORDER_SPECIAL_NEEDS:'order_special_needs', // 订单特殊需求
ORDER_ABNORMAL_STATE:'order_abnormal_state',
TARGET_TYPE:'target_type',//部门业绩目标类型
RECEIPT_ITEM_STATE:'receipt_item_state',//收款单明细状态
// ========== 出货模块 ==========
BOX_SHIPPING_TRAILER_STATUS: 'shipping_trailer_status', // 拖车状态
BOX_SHIPPING_CUSTOMS_TYPE: 'shipping_customs_type', // 报关方式
......
......@@ -339,6 +339,54 @@ export default {
id: this.processInstance.businessKey,
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())
return map[this.processInstance.processDefinition.formCustomViewPath.trim()]
......
......@@ -119,7 +119,7 @@
{{$t('操作')}}<i class="el-icon-arrow-down el-icon--right"></i>
</el-button>
<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="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>
......
......@@ -140,9 +140,9 @@
</el-table-column>
<el-table-column :label="$t('操作')" align="center">
<template slot-scope="scope">
<el-button type="primary" size="small" @click="editCostClick(scope.row)" style="marginRight:10px;">{{$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-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>
</template>
</el-table-column>
......
......@@ -2,7 +2,7 @@
<div>
<el-form ref="agentForm" :model="agentObj" :rules="rules" label-width="120px">
<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>
<el-row class="operate-button">
......
......@@ -8,13 +8,13 @@
<supplierSelect v-model="bookingObj.shipCompanyType" :companyType="'9'" :placeholder="$t('请选择船公司类型')" :allSupplier="this.$attrs.allSupplier" />
</el-form-item>
<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 :label="$t('大船港')">
<dockSelect v-model="bookingObj.bigPortId" :placeholder="$t('请选择大船港')" :allDocks="this.$attrs.allDocks" />
<el-form-item :label="$t('起运港')">
<dockSelect v-model="bookingObj.bigPortId" :placeholder="$t('请选择起运港')" portType="2" :allDocks="this.$attrs.allDocks" />
</el-form-item>
<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 :label="$t('订舱公司')">
<supplierSelect v-model="bookingObj.spaceCompanyId" :companyType="'1'" :placeholder="$t('请选择订舱公司')" :allSupplier="this.$attrs.allSupplier" />
......
......@@ -208,9 +208,9 @@
<el-form-item :label="$t('放入箱数')+':'">
{{shopForm.putNum||0}}
</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-form-item>
</el-form-item> -->
<el-form-item :label="$t('备注信息')+':'">
<el-input v-model="shopForm.remarks"></el-input>
</el-form-item>
......
......@@ -147,7 +147,7 @@
<!-- 修改柜信息 -->
<template v-if="dialogConfig.type === 'modifyCabinet' && dialogConfig.dialogVisible">
<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-option v-for="warehouse in $attrs.warehouseList" :key="warehouse.id" :label="$l(warehouse, 'title')" :value="warehouse.id"></el-option>
</el-select>
......@@ -244,6 +244,7 @@
import dayjs from "dayjs";
import supplementOrder from "./supplementOrder.vue";
import { getCabinetPage } from "@/api/ecw/cabinet";
import { getbox } from "@/api/ecw/box";
import {
loadSecGoodsList,
orderTagList,
......@@ -333,6 +334,7 @@ export default {
selectedUsers: [],
// 订单信息
boxOrderInfo: {},
newshipmentObj: {}
};
},
created() {
......@@ -341,9 +343,16 @@ export default {
getCabinetPage(null).then((response) => {
this.cabinetList = response.data.list;
});
// this.getBoxInfo()
},
methods: {
getTotlContent,
getBoxInfo() {
getbox(this.shipmentObj.id).then((res) => {
const { data } = res;
this.newshipmentObj = data ?? {};
});
},
/* 装柜部分列表 */
getLoadSecGoodsList() {
loadSecGoodsList({ shipmentId: this.shipmentObj.id }).then((res) => {
......@@ -419,6 +428,8 @@ export default {
case "modifyCabinet":
this.$set(this.dialogConfig, "fullscreen", false);
this.modifyCabinetObj = {};
this.$set(this.modifyCabinetObj,'cabinetId',this.shipmentObj.cabinetId)
this.$set(this.modifyCabinetObj,'cubNo',this.shipmentObj.cubNo)
break;
case "splitOrder":
this.$set(this.dialogConfig, "fullscreen", true);
......@@ -534,6 +545,8 @@ export default {
};
boxUpdate(params).then((res) => {
serviceMsg(res, this);
// this.getBoxInfo()
this.$emit('getBoxInfo')
this.closeDialog2();
});
},
......
......@@ -107,6 +107,7 @@ export default {
cdOutBillType:
oldData.cdOutBillType === 0 ? undefined : oldData.cdOutBillType,
};
this.$set(this.cDocObj,'cdOutBillType',String(this.$attrs.shipmentObj.ladingBillInfo?.issueType)||undefined)
},
methods: {
/** 提交 */
......
......@@ -14,6 +14,7 @@ export default {
props: {
value: Number,
allDocks: Array,
portType: String
},
model: {
prop: "value",
......@@ -24,7 +25,8 @@ export default {
},
computed: {
getDock() {
return this.allDocks;
if(!this.portType) return this.allDocks;
return this.allDocks.filter(item=>item.portType==this.portType)
},
},
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>
<el-select 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
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>
</template>
......@@ -14,6 +25,10 @@ export default {
companyType: String,
value: Number,
allSupplier: Array,
areaType: {
type: Number,
default: 0
},
},
model: {
prop: "value",
......@@ -24,8 +39,11 @@ export default {
},
computed: {
getSuppliers() {
if (!this.companyType) return this.allSupplier;
return this.allSupplier.filter((item) =>
let allSupplier = this.allSupplier.filter(
(item) => item.areaType == this.areaType
);
if(this.areaType == 1 || !this.companyType) return allSupplier;
return allSupplier.filter((item) =>
item.companyTypes.includes(this.companyType)
);
},
......
......@@ -2,17 +2,16 @@
<div>
<el-form ref="subMaterialForm" :model="subMaterialObj" label-width="140px">
<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 :label="$t('提单号M/BL NO.')" class="two-element">
<el-input v-model="subMaterialObj.blMblNo" :placeholder="$t('请输入提单号')"></el-input>
<el-button type="primary">{{$t('提单确认件')}}</el-button>
</el-form-item>
<el-form-item label="SO NO.">
<el-input v-model="subMaterialObj.soNo" :placeholder="$t('请输入SO NO')"></el-input>
</el-form-item>
<el-form-item :label="$t('装货港')">
<dockSelect v-model="subMaterialObj.startPortId" :placeholder="$t('请选择装货港')" :allDocks="this.$attrs.allDocks" />
<el-form-item :label="$t('起运港')">
<dockSelect v-model="subMaterialObj.startPortId" :placeholder="$t('请选择起运港')" :allDocks="this.$attrs.allDocks" />
</el-form-item>
<el-form-item :label="$t('目的港')">
<dockSelect v-model="subMaterialObj.destPortId" :placeholder="$t('请选择目的港')" :allDocks="this.$attrs.allDocks" />
......@@ -21,31 +20,31 @@
<supplierSelect v-model="subMaterialObj.shipCompanyId" :companyType="'9'" :placeholder="$t('请选择船公司')" :allSupplier="this.$attrs.allSupplier" />
</el-form-item>
<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 :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 :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 label="Mark & No.">
<el-input v-model="subMaterialObj.markNo" placeholder="请输入Mark & No."></el-input>
</el-form-item>
<el-form-item :label="$t('包装数量与单位')" class="two-element">
<el-input v-model="subMaterialObj.packageNum" :placeholder="$t('请输入包装数量')"></el-input>
<el-select v-model="subMaterialObj.packageUnit" :placeholder="$t('请选择单位')">
<el-option v-for="unit in units" :key="unit.id" :value="unit.id" :label="$l(unit, 'title')"></el-option>
</el-select>
<dict-selector v-model="subMaterialObj.packageUnit" type="packaging_type" />
</el-form-item>
<el-form-item :label="$t('毛重(KGS)')">
<el-input v-model="subMaterialObj.kgs" :placeholder="$t('请输入毛重') + '(KGS)'"></el-input>
<el-form-item :label="$t('货物毛重(KGS)')">
<el-input v-model="subMaterialObj.kgs" :placeholder="$t('请输入货物毛重') + '(KGS)'"></el-input>
</el-form-item>
<el-form-item :label="$t('立方数(CBM)')">
<el-input v-model="subMaterialObj.cbm" :placeholder="$t('请输入立方数') + '(CBM)'"></el-input>
</el-form-item>
<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 :label="$t('柜号') + '/' + $t('封条')">
<el-input v-model="subMaterialObj.containerSealNo" :placeholder="$t('请输入柜号') + '/' + $t('封条')"></el-input>
......@@ -67,6 +66,7 @@
<el-button type="primary" @click="onSubmit(1)">{{$t('保存')}}</el-button>
<el-button type="success" @click="onSubmit(2)">{{$t('提交')}}</el-button>
<el-button @click="cancel">{{$t('关闭')}}</el-button>
<el-button :disabled="shipmentObj.ladingBillInfo == null" @click="download">{{$t('下载提单确认件')}}</el-button>
</el-row>
</div>
</template>
......@@ -75,10 +75,13 @@
import supplierSelect from "./common/supplierSelect.vue";
import dockSelect from "./common/dockSelect.vue";
import userSelect from "./common/userSelect.vue";
import ladingSelect from "./common/ladingSelect.vue";
import { getUnitList } from "@/api/ecw/unit";
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 FileSaver from 'file-saver'
/**
* 提单补料
......@@ -86,7 +89,7 @@ import { formatNumberString, constantDict, serviceMsg } from "../utils";
export default {
name: "subMaterial",
inheritAttrs: false,
components: { supplierSelect, dockSelect, userSelect },
components: { supplierSelect, dockSelect, userSelect, ladingSelect },
props: {
shipmentObj: Object,
},
......@@ -117,19 +120,51 @@ export default {
let cabinetItem = cabinetList[index];
if (cabinetItem.id == this.shipmentObj.cabinetId) {
this.cabinetType = cabinetItem.name;
this.$set(this.subMaterialObj,'cbm',cabinetItem.ladingBill)
}
}
});
const voName = this.$attrs.currNode.voName;
let oldData = { ...this.shipmentObj[voName] };
oldData = formatNumberString(oldData, ["issueType"]);
this.subMaterialObj = {
oldData = formatNumberString(oldData, ["issueType"]);this.subMaterialObj = {
...oldData,
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: {
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) {
this.$refs["subMaterialForm"].validate((valid) => {
......@@ -140,6 +175,7 @@ export default {
operateType,
}).then((res) => {
serviceMsg(res, this).then(() => {
if(operateType == 2) this.download()
this.cancel("submit");
});
});
......@@ -150,6 +186,12 @@ export default {
cancel(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>
......
......@@ -73,7 +73,11 @@
<el-table-column :label="$t('重量')" align="center" prop="warehouseInInfo.weight">
</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">
<template slot-scope="scope">
{{scope.row.tallyStatus === 1 ? $t('已理货') : $t('未理货')}}
......@@ -150,6 +154,13 @@ export default {
methods: {
// 格式化日期
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() {
getTallyList({ shipmentId: this.shipmentObj.id }).then((res) => {
......@@ -164,13 +175,22 @@ export default {
list.push({
...oItem,
warehouseInInfo,
multiSpecification: item.multiSpecification,
positionNo: item.positionNo,
// multiSpecification: item.multiSpecification,
positionNo: oItem.positionNo,
tallyStatus: item.tallyStatus,
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;
});
},
......
<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-column type="index" :label="$t('序号')" />
<el-table-column :label="$t('箱数')" prop="cartonsNum" />
......@@ -33,7 +33,10 @@
<el-table-column :label="$t('重量') + '(kg)'" prop="weight" />
<el-table-column :label="$t('数量(个)')" prop="quantityAll" />
<el-table-column :label="$t('快递单号')" prop="expressNo" />
<el-table-column :label="$t('入仓时间')" prop="inTime">
<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>
</el-table-column>
</el-table>
......@@ -77,7 +80,7 @@ export default {
title() {
if (!this.orderItem) return "-";
return this.$l(this.orderItem, "prodTitle") + " - " + this.$t("入仓记录");
},
}
},
created() {
......
......@@ -7,7 +7,7 @@
</el-select>
</el-form-item>
<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 :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>
......@@ -64,7 +64,7 @@ export default {
},
created() {
const { currNode, shipmentObj } = this.$attrs;
const voName = currNode.voName;
const voName = currNode.voName;console.log(shipmentObj[voName])
let oldData = { ...shipmentObj[voName] };
oldData = formatNumberString(oldData, ["tlContainerStatus"]);
oldData = formatStringNumber(oldData, ["tlCompanyId"]);
......
......@@ -46,6 +46,7 @@ import unloadingWidget from "./nodePage/unloading/index.vue";
import settlementWidget from "./nodePage/settlement.vue";
import reviewWidget from "./nodePage/review.vue";
import tallyWidget from "./nodePage/tally/index.vue";
import {checkPermi} from '@/utils/permission'
/**
* 海运流程图
......@@ -131,6 +132,10 @@ export default {
},
/** 节点点击 */
nodeClick(currIndex, node) {
if (!checkPermi(['box:'+node.type+':show'])) {
this.$message.error(this.$t("没有此操作的权限"));
return;
}
if (currIndex > this.currIndex) {
this.$message.error(this.$t("请先完成上一步"));
return;
......
......@@ -2,7 +2,7 @@
<div class="app-seaStepDetail">
<el-scrollbar :vertical="true" viewClass="shipping-step">
<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 v-for="(data, index) in columnsMapping[step.voName]" :key="index" class="step-content">
<p>{{data.title}}</p>
......@@ -17,6 +17,7 @@
<script>
import dayjs from "dayjs";
import * as _C from "./utils";
import {checkPermi} from '@/utils/permission'
export default {
name: "seaStepDetail",
......@@ -32,6 +33,7 @@ export default {
};
},
methods: {
checkPermi, // 检查权限
getObjInfo(voName, data) {
const { key, type } = data;
let val = this.shipmentObj[voName]?.[key] ?? "";
......
......@@ -26,7 +26,7 @@
</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" />
......@@ -43,6 +43,7 @@ import { getWarehouseList } from "@/api/ecw/warehouse";
import { getSupplierPage } from "@/api/ecw/supplier";
import { getDockPage } from "@/api/ecw/dock";
import { listUser } from "@/api/system/user";
import { getLadingShipperPage } from "@/api/ecw/ladingShipper";
// 这里引入的数据切换语言后要刷新才生效,优化办法是label同时配备labelEn字段,然后再页面上用$l函数调用
import { seaBaseData } from "./utils";
......@@ -64,6 +65,8 @@ export default {
warehouseList: [],
// 供应商
allSupplier: [],
// 托运人
allLading: [],
// 码头
allDocks: [],
// 用户
......@@ -90,6 +93,10 @@ export default {
return item;
});
});
// 托运人
getLadingShipperPage({ pageNo: "1", pageSize: "10000" }).then(res=>{
this.allLading = res.data.list
})
// 码头
getDockPage({ pageNo: "1", pageSize: "10000" }).then((res) => {
const { data } = res;
......
......@@ -988,13 +988,12 @@ function getColmnMapping() {
type: "supplier",
},
{
title: i18n.$t("提单品名"),
title: i18n.$t("提单"),
key: "blMblNo",
},
{
title: i18n.$t("通知方"),
key: "notifyingId",
type: "user",
key: "notifyingName",
},
{
title: i18n.$t("提单备注"),
......
......@@ -10,19 +10,19 @@
<el-row>
<el-col :span="12">
<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-col>
<el-col :span="12">
<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-col>
<el-col :span="12">
<el-form-item :label="$t('内部名称中文')" prop="internalNameZh">
<el-input
v-model="form.internalNameZh"
placeholder="请输入内部名称-中文"
:placeholder="$t('请输入内部名称-中文')"
/>
</el-form-item>
</el-col>
......@@ -30,7 +30,7 @@
<el-form-item :label="$t('内部名称英文')" prop="internalNameEn">
<el-input
v-model="form.internalNameEn"
placeholder="请输入内部名称-英文"
:placeholder="$t('请输入内部名称-英文')"
/>
</el-form-item>
</el-col>
......@@ -95,16 +95,16 @@
</el-col> -->
</el-row>
<el-form-item label="备注-中文" prop="remarksZh">
<el-form-item :label="$t('备注-中文')" prop="remarksZh">
<el-input
v-model="form.remarksZh"
placeholder="请输入备注-中文"
:placeholder="$t('请输入备注-中文')"
/>
</el-form-item>
<el-form-item label="备注-英文" prop="remarksEn">
<el-form-item :label="$t('备注-英文')" prop="remarksEn">
<el-input
v-model="form.remarksEn"
placeholder="请输入备注-英文"
:placeholder="$t('请输入备注-英文')"
/>
</el-form-item>
<!-- <el-form-item label="状态(0:禁用 1:启用)" prop="status">
......
......@@ -201,7 +201,7 @@ export default {
/** 删除按钮操作 */
handleDelete(row) {
const channelId = row.channelId;
this.$modal.confirm('是否确认删除渠道管理编号为"' + channelId + '"的数据项?').then(function() {
this.$modal.confirm(this.$t('是否确认删除渠道管理编号为{channelId}的数据项?'),{channelId} ).then(function() {
return deleteChannel(channelId);
}).then(() => {
this.getList();
......
......@@ -214,6 +214,7 @@ export default {
fuhao: undefined,
status: undefined,
huilv: undefined,
exchangeToFc: undefined,
aorder: undefined,
createAt: 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 @@
</el-form-item>
</el-col>
<el-col :span="13">
<el-form-item :label="$t('泡货标准')" prop="weightUnit">
<el-form-item :label="$t('泡货标准')" prop="lightUnit">
<el-switch v-model="showPao"/>
<el-input v-model="form.lightUnit" :placeholder="$t('请输入泡货标准')" v-show="showPao">
<template slot="append">kg/cbm</template>
......@@ -413,6 +413,99 @@
</el-col>
</el-row>
</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">
<el-button type="primary" @click="submitForm">{{$t('确 定')}}</el-button>
<el-button @click="cancel">{{$t('取 消')}}</el-button>
......@@ -450,6 +543,7 @@ import Template from "@/views/cms/template";
import {validatorMobile} from "@/api/ecw/validate"
// import {customerDropDownList} from "@/api/ecw/customerCommissionInfo";
import MemberSelector from '@/components/MemberSelector'
import {getCurrencyList} from "@/api/ecw/currency";
export default {
name: "edit",
......@@ -461,7 +555,10 @@ export default {
MemberSelector
},
created() {
this.isCustomerServiceConfirmed = this.$route.query.isCustomerServiceConfirmed ? true : false
getCurrencyList().then(response => {
this.currecyList = response.data;
})
this.isCustomerServiceConfirmed = this.$route.query.isCustomerServiceConfirmed ? true : false
this.getCustomerSelect()
this.reset()
// this.getUserMemberUserFn()
......@@ -589,11 +686,30 @@ export default {
memberList:[],//会员列表
selectMemberList:[],//选中会员列表
serviceNetworkList:[], //网点列表
allSimplList:[]
allSimplList:[],
currecyList:[]
}
},
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){
userMemberUserList({pageNo:1,pageSize:100,searchKey:val}).then(r => {
this.memberList = r.data.list
......@@ -672,8 +788,10 @@ export default {
}
this.$refs["contactForm"].validate((valid1,err1) => {
this.$refs["form"].validate((valid2,err2) => {
if (!valid1 || !valid2) {
this.$showFormValidateErrors({...err1,...err2})
this.$refs.bankForm.validate((valid3,err3)=>{
console.log(valid3,'valid3')
if (!valid1 || !valid2 || !valid3) {
this.$showFormValidateErrors({...err1,...err2,...err3})
return;
}
if (this.form.customerContacts.length === 0){
......@@ -747,6 +865,7 @@ export default {
})
});
})
})
},
/** 表单重置 */
reset() {
......@@ -792,13 +911,15 @@ export default {
isShowTidanPrice:true,
carName:undefined,
carNo:undefined,
customerBanks:[]
};
this.form.createTime = (new Date()).getTime()
this.resetForm("form");
},
getCustomer(id) {
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.title = this.$t('修改客户');
this.getZhongPao()
......
......@@ -48,6 +48,7 @@
<el-image v-show="!!customer.picture" :src="customer.picture" style="width: 100px;height: 100px"></el-image>
</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.carNo }}</el-descriptions-item>
<!-- <el-descriptions-item :label="$t('信用等级')">{{ customer }}</el-descriptions-item>-->
......@@ -109,6 +110,32 @@
</el-table-column>
</el-table>
</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-tab-pane name="order" :label="$t('订单')">
......@@ -288,9 +315,15 @@
<el-table-column :label="$t('金额')" prop="totalAmount">
</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>
<pagination v-show="infoListReceiptList.length" :total="infoListReceiptTotal" :page.sync="infoListReceiptFrom.pageNo" :limit.sync="infoListReceiptFrom.pageSize"
@pagination="infoListReceiptFn"/>
</el-tab-pane>
<el-tab-pane name="data" :label="$t('数据')">
<el-descriptions :column="2">
......@@ -347,7 +380,7 @@
</template>
</el-table-column>
</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"/>
</el-tab-pane>
<el-tab-pane name="credit" :label="$t('信用日志')">
......@@ -401,6 +434,9 @@
</el-table>
<pagination @pagination="getCustomerGrade" :page.sync="getCustomerGradeFrom.pageNo" :limit.sync="getCustomerGradeFrom.pageSize" :total="getCustomerGradeFrom.total" ></pagination>
</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-col>
</el-row>
......@@ -458,15 +494,23 @@ import {getOrderPage} from "@/api/ecw/order";
import Template from "@/views/cms/template";
import {getCreditRulePage} from "@/api/customer/creditRule";
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 {
name: 'query',
components: {
Template,
CustomerFollow,
CustomerComplaint
CustomerComplaint,
customerLog,
},
created() {
// 获取币种
getCurrencyList().then(response => {
this.currecyList = response.data;
})
//获取信用类型
getCreditRulePage({page:1,rows:999,type:2}).then(r => {
this.creditTypeList = r.data.list
......@@ -476,6 +520,7 @@ export default {
})
getCustomer(this.id).then(response => {
this.customer = { ...this.customer, ...response.data }
console.log( this.customer,'this.customer')
getCustomerContactsListByCustomer({customerId: this.id}).then(r => {
this.customerContacts = r.data
......@@ -513,7 +558,6 @@ export default {
},
watch:{
activeName(val){
console.log(val,'val')
switch (val) {
case 'order':
this.getorderList()//订单
......@@ -532,9 +576,11 @@ export default {
break
case 'credit':
this.creditScoreStatisticFn() //信用日志
this.creditLogPage()
break
case 'grade':
this.creditLogPage()//等级日志
this.getCustomerGrade()
//等级日志
break
}
......@@ -543,6 +589,7 @@ export default {
data() {
return {
activeName:'order',
currecyList:[],
STATUS:{
0:this.$t('取消报价'),
1:this.$t('特价审批中'),
......@@ -684,6 +731,7 @@ export default {
}
},
methods:{
checkPermi,
userIdFormatter(row, column, cellValue){
const member = this.memberList.find(e => e.id === cellValue)
if (member) {
......@@ -705,6 +753,7 @@ export default {
getBrankByCustomerList(){
getBrankByCustomer({...this.brandAuthorizationFrom,customerId:this.id}).then(r => {this.brandAuthorizationList = r.data.list; this.brandAuthorizationTotal = r.data.total})
},
// 信用等级日志
getCustomerGrade(){
levelLogPage({...this.getCustomerGradeFrom,customerId:this.id,total:undefined}).then(r => {
if(r.code === 0){
......@@ -713,7 +762,7 @@ export default {
}
})
},
// 获取信用等级日志列表
// 信用日志
creditLogPage(){
customerCreditLogPage({...this.customerCreditLogFrom,customerId:this.id}).then(r => {
if(r.code === 0){
......
This diff is collapsed.
......@@ -3,13 +3,13 @@
<!-- 搜索工作栏 -->
<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-form-item>
<el-form-item :label="$t('运输方式')" prop="transportType">
<dict-selector :type="DICT_TYPE.ECW_TRANSPORT_TYPE" v-model="queryParams.transportType" formatter="number"/>
</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-form-item>
<el-form-item :label="$t('资源类型')" prop="customerType">
......@@ -410,6 +410,9 @@
data.sumVolume += item.completeVolume
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)
}else{
this.totalData.sumWeight =this.myAchievementData.totalWeight
......
This diff is collapsed.
......@@ -13,7 +13,7 @@
</div>
</el-form-item>
<el-form-item :label="$t('收款账户')" prop="accountNo">
<span>{{ addForm.accountNo }}</span>
<span>{{ addForm.accountNo+'('+addForm.accountName+')' }}</span>
</el-form-item>
<el-form-item :label="$t('实收日期')" prop="amountDate">
<span>{{ addForm.amountDate }}</span>
......@@ -23,14 +23,7 @@
<span>{{ addForm.amount }}</span>
</el-form-item>
<el-form-item label-width="0px" prop="currencyId">
<el-select v-model="addForm.currencyId" :disabled="true">
<el-option
v-for="item in currencyList"
:key="item.id"
:label="$i18n.locale=='zh_CN'?item.titleZh:item.titleEn"
:value="item.id"
/>
</el-select>
<span>({{getCurrencyLabel(showCurrencyId)}})</span>
</el-form-item>
</div>
<el-form-item
......@@ -69,7 +62,7 @@
</template>
<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 WorkFlow from '@/components/WorkFlow/'
import NP from 'number-precision'
......@@ -134,6 +127,17 @@
if(label.length>0) return this.$i18n.locale=='zh_CN'?label[0].titleZh:label[0].titleEn
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() {
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.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
......@@ -102,7 +102,7 @@
<el-form-item :label="$t('供应商名称')">
<el-input
style="max-width: 188px"
v-model="queryParams.orderNo"
v-model="queryParams.supplierName"
:placeholder="$t('请输入供应商名称')"
clearable
@keyup.enter.native="handleQuery"
......@@ -154,9 +154,9 @@
class-name="small-padding fixed-width"
>
<template slot-scope="scope">
<el-button
size="mini"
type="text"
<el-button
size="mini"
type="text"
v-hasPermi="['ecw:payable:edit']"
@click="editClick(scope.row)"
>{{ $t('编辑') }}</el-button>
......
<template>
<div class="app-container">
<el-card>
<div slot="header" class="card-title">{{ $t('付款单详情') }}</div>
<div slot="header" class="card-title">{{ $t('付款单详情') }}{{id ? `-${form.paymentNo}` :''}}</div>
<el-form
ref="form"
:model="form"
......
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