Commit ab30e4b3 authored by 我在何方's avatar 我在何方

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

parents 598cc544 1df51fc2
......@@ -6,7 +6,7 @@ VUE_APP_TITLE = 捷道管理系统-测试站
# 捷道管理系统/开发环境
VUE_APP_BASE_API = 'https://api.sit.jdshangmen.com'
VUE_APP_BASE_API = 'https://api.jd.jdshangmen.com'
# 路由懒加载
VUE_CLI_BABEL_TRANSPILE_MODULES = true
......
......@@ -59,7 +59,7 @@ export default {
padding-right: 30px;
padding-left: 5px;
}
$sizes: 0, 10,20,30,50,75,100,150,200,300,500,800,1000;
$sizes: 0, 5, 10,20,30,50,75,100,150,200,300,500,800,1000;
@for $i from 1 through length($sizes){
$item: nth($sizes, $i);
.ml-#{$item}{
......
......@@ -49,7 +49,7 @@ export function exportboxExcel(query) {
url: "/shipment/box/export-excel",
method: "get",
params: query,
timeout: 5 * 60000,
timeout: 20 * 60000,
responseType: "blob",
});
}
......@@ -350,3 +350,22 @@ export function dealCustomsSplitNotify(notifyId){
method: "get",
})
}
// 自编号报表分页
export function boxSettlementPage(params) {
return request({
url: "/shipment/box/pageSettlement",
method: "get",
params,
});
}
// 导出自编号汇总excel
export function exportSettlementExcel(params) {
return request({
url: "/shipment/box/export-shipment-summary",
method: "get",
responseType: "blob",
params,
});
}
import request from '@/utils/request'
// 创建汇率管理
export function createExchangeRate(data) {
return request({
url: '/ecw/exchange-rate/create',
method: 'post',
data: data
})
}
// 更新汇率管理
export function updateExchangeRate(data) {
return request({
url: '/ecw/exchange-rate/update',
method: 'put',
data: data
})
}
// 删除汇率管理
export function deleteExchangeRate(id) {
return request({
url: '/ecw/exchange-rate/delete?id=' + id,
method: 'delete'
})
}
// 获得汇率管理
export function getExchangeRate(id) {
return request({
url: '/ecw/exchange-rate/get?id=' + id,
method: 'get'
})
}
// 获得汇率管理分页
export function getExchangeRatePage(query) {
return request({
url: '/ecw/exchange-rate/page',
method: 'get',
params: query
})
}
// 汇率日志查询
export function getExchangeRateLogList(params){
return request({
url:'/ecw/exchange-rate-log/page',
method:'get',
params,
})
}
// 导出汇率管理 Excel
export function exportExchangeRateExcel(query) {
return request({
url: '/ecw/exchange-rate/export-excel',
method: 'get',
params: query,
responseType: 'blob'
})
}
......@@ -62,7 +62,14 @@ export function getReceivableDiscountLogById(query) {
params: query
})
}
// 根据订单ID获得需要预付应收款列表
export function getReceivableByOrderId(query) {
return request({
url: '/ecw/receivable/getReceivableByOrderId',
method: 'get',
params: query
})
}
// 根据订单ID获得需要预付应收款列表
export function getFirstReceivableListByOrderId(query) {
return request({
......
......@@ -413,6 +413,33 @@ export function getOrderSpecialByApproveId(approveId) {
})
}
// 特价申请-批量
export function createOrderSpecialBatch(data) {
return request({
url: '/ecw/order/special/apply/batch',
method: 'put',
data: data
})
}
// 获得订单特价申请详情-批量
export function getOrderSpecialBatch(orderId, type) {
console.log(orderId, type)
return request({
url: '/ecw/order/special/info/batch/' + orderId + '/' + type,
method: 'get'
})
}
// 根据订单项商品ID与审批类型获得订单商品的特价申请详情-批量
export function getOrderSpecialByApproveIdBatch(approveId) {
return request({
url: '/ecw/order/special/batch/info?approveId=' + approveId,
method: 'get'
})
}
// 订单号检索功能
export function getOrderNoSearch(params) {
return request({
......@@ -515,19 +542,6 @@ export function warehousePictureList(data){
data
})
}
export function warehousePictureCreate(data){
return request({
url: '/order/warehouse-picture/create',
method: 'post',
data
})
}
export function warehousePictureDelete(id){
return request({
url: '/order/warehouse-picture/delete?id=' + id,
method: 'delete'
})
}
// 获得部门订单分页
export function deptOrderPage(params){
......@@ -761,4 +775,78 @@ export function splitItemUpdate(data){
data
})
}
// 上传报关资料
export function warehousePictureCreate(data) {
return request({
url: '/order/warehouse-picture/create',
method: 'post',
data
})
}
// 删除报关资料
export function warehousePictureDelete(id) {
return request({
url: '/order/warehouse-picture/delete?id=' + id,
method: 'delete'
})
}
//上传
export function uploadFile(data) {
return request({
url: '/infra/file/up',
method: 'post',
data: data
})
}
//上传
export function uploadOrgname(data) {
return request({
url: '/infra/file/org-name/up',
method: 'post',
data: data
})
}
/*根据订单ID查询目的国*/
export function getDestCountryByOrderId(params){
return request({
url: '/ecw/order/getDestCountryByOrderId',
method: 'get',
params:params
})
}
// 订单费用汇总
export function orderSummary(orderId){
return request({
url: '/ecw/orderCount/orderSummary/' + orderId,
method: 'get'
})
}
// 订单明细汇总
export function orderDetailSummary(orderId){
return request({
url: '/ecw/orderCount/orderDetailSummary/' + orderId,
method: 'get'
})
}
// 自编号的订单费用汇总
export function orderSummaryByContainerNumber(params){
return request({
url: '/ecw/orderCount/containerNumber/orderSummary',
method: 'get',
params
})
}
// 导出自编号订单汇总列表
export function exportOrderSummaryByContainerNumber(params){
return request({
url: '/ecw/order/export/export-order-summary',
method: 'get',
params,
timeout: 5 * 60000,
responseType: 'blob'
})
}
......@@ -148,4 +148,12 @@ export function exportCargoControl(params){
responseType: 'arraybuffer',
params
})
}
\ No newline at end of file
}
// 控货日志
export function getControlLogList(orderId){
return request({
url: '/order/order-control-log/list/' + orderId,
method: 'get'
})
}
......@@ -56,7 +56,14 @@ export function getOrderExceptionPage(query) {
params: query
})
}
// 获得新订单异常分页
export function getExceptionPage(query) {
return request({
url: '/ecw/order-exception/exceptionPage',
method: 'get',
params: query
})
}
// 导出订单异常 Excel
export function exportOrderExceptionExcel(query) {
return request({
......@@ -107,7 +114,7 @@ export function exportExcel(params) {
return request({
url: '/ecw/order-exception/export-excel',
method: 'get',
timeout: 3*60*1000,
timeout: 30*60*1000,
params,
// timeout: 3*60*1000,
responseType: 'arraybuffer'
......@@ -120,4 +127,13 @@ export function getOrderExcptionResult(query) {
method: 'get',
params: query
})
}
// 参数查询获得订单统计
export function getStatistics(query) {
return request({
url: '/ecw/order-exception/statistics',
method: 'get',
params: query
})
}
\ No newline at end of file
......@@ -145,3 +145,12 @@ export function deleteAllSplit(orderId) {
params: {orderId}
})
}
// 获取拆单订单的总货值与箱数拆分记录
export function splitItemWorthCheck(orderId, orderSplitItemId) {
return request({
url: '/order/split-item/worth/check',
method: 'get',
params: {orderId, orderSplitItemId}
})
}
......@@ -5,10 +5,11 @@
<el-image @click="dialogImageUrl = item.url; dialogVisible = true; " style="height: 148px; width:148px;" fit="fit" :src="item.url">
<video controls width="148px" height="148px" slot="error" :src="item.url" ></video>
</el-image>
<div @click="handleRemove(index)" class="el-icon-error" style="font-size: 25px;cursor: pointer;position: absolute;right: -10px; top: -10px" ></div>
<div v-if="!readonly" @click="handleRemove(index)" class="el-icon-error" style="font-size: 25px;cursor: pointer;position: absolute;right: -10px; top: -10px" ></div>
</div>
<div>
<el-upload
v-if="!readonly"
multiple
:action="uploadImgUrl"
list-type="picture-card"
......@@ -23,7 +24,7 @@
<i class="el-icon-plus"></i>
</el-upload>
<!-- 上传提示 -->
<div class="el-upload__tip" slot="tip" v-if="showTip">
<div class="el-upload__tip" slot="tip" v-if="showTip && !readonly">
{{ $t('请上传') }}
<template v-if="fileSize">{{ $t('大小不超过') }}<b style="color: #f56c6c">{{ fileSize }}MB</b> </template> <br>
<template v-if="fileType">{{ $t('格式为') }}<b style="color: #f56c6c">{{ fileType.join("/") }}</b> </template>{{ $t('的文件') }}</div>
......@@ -73,6 +74,10 @@ export default {
id: {
type: Number,
default: undefined
},
readonly: {
type: Boolean,
default: false
}
},
data() {
......@@ -126,9 +131,11 @@ export default {
methods: {
// 删除图片
handleRemove(index) {
if (this.id && this.type) {
this.$emit("delete", this.fileList[index].url);
}
this.fileList.splice(index, 1);
this.$emit("input", this.listToString(this.fileList));
this.$emit("delete", index);
},
// 上传成功回调
handleUploadSuccess(res) {
......@@ -138,15 +145,21 @@ export default {
this.fileList = this.fileList.concat(this.uploadList);
this.uploadList = [];
this.number = 0;
warehousePictureCreate({
"bizId": this.id,
"type": this.type,
"url": res.data
}).then(() => {
if (this.id && this.type) {
warehousePictureCreate({
"bizId": this.id,
"type": this.type,
"url": res.data
}).then(() => {
this.$emit("input", this.listToString(this.fileList));
this.$emit("refresh");
this.$modal.closeLoading();
})
} else {
this.$emit("input", this.listToString(this.fileList));
this.$emit("refresh");
this.$modal.closeLoading();
})
}
}
}else {
this.handleUploadError();
......
......@@ -13,8 +13,8 @@
<el-button type="primary" @click="reLoad">{{$t('搜索')}}</el-button>
<div v-if="showAll">
<el-checkbox :label="$t('全选(最多500)')" @change="toggleAll" :disabled="isAllProduct"></el-checkbox>
<el-checkbox :label="$t('全选库内商品(共{cnt}个)', {cnt: total})" v-model="isAllProduct"></el-checkbox>
<el-checkbox :label="$t('全选') + `(${total > 500 ? $t('最多500') : $t('{total}个', {total})})`" @change="toggleAll" :disabled="isAllProduct"></el-checkbox>
<el-checkbox :label="$t('全选库内商品(共{cnt}个)', {cnt: allTotal})" v-model="isAllProduct"></el-checkbox>
</div>
</div>
<div class="list">
......@@ -61,7 +61,8 @@ export default {
list: [],
page: 1,
pages: 1,
total: 0, // 商品总数
total: 0, // 当前筛选条件的商品总数
allTotal: 0, // 全库商品总数
queryParams: {
pageNo: 1,
pageSize: 500,
......@@ -115,6 +116,11 @@ export default {
if(this.defaultIds.length){
this.loadDefaultProds()
}
// 获取全库商品总数
getProductPage({pageNo: 1, pageSize: 1}).then(res => {
this.allTotal = res.data.total
})
},
methods: {
/* setAllProduct(status){
......@@ -209,4 +215,4 @@ export default {
text-overflow: ellipsis;
}
}
</style>
\ No newline at end of file
</style>
......@@ -5,7 +5,7 @@
:clearable="clearable"
remote
reserve-keyword
placeholder="请选择"
:placeholder="placeholder ? placeholder : $t('请选择')"
:loading="loading">
<el-option
v-for="(item, index) in list"
......@@ -22,6 +22,7 @@ export default {
props:{
value: [String, Number],
clearable: Boolean,
placeholder: String,
manage:{
type:Boolean,
default:false
......
This diff is collapsed.
......@@ -2,7 +2,11 @@ import router from '@/router'
const state = {
visitedViews: [],
cachedViews: []
cachedViews: [],
}
// 获取页面的缓存名称
const getViewName = (view) => {
return view.meta.componentPath.split('/').map(item => item.substring(0, 1).toUpperCase() + item.substring(1).toLowerCase()).join('')
}
const mutations = {
......@@ -16,7 +20,7 @@ const mutations = {
},
ADD_CACHED_VIEW: (state, view) => {
if (view.meta && view.meta.componentPath) {
let cacheName = view.meta.componentPath.split('/').map(item => item.substring(0, 1).toUpperCase() + item.substring(1).toLowerCase()).join('')
let cacheName = getViewName(view)
if (state.cachedViews.includes(cacheName)) return
state.cachedViews.push(cacheName)
}
......@@ -31,7 +35,9 @@ const mutations = {
}
},
DEL_CACHED_VIEW: (state, view) => {
const index = state.cachedViews.indexOf(view.name)
console.log('DEL_CACHED_VIEW', view)
const viewName = getViewName(view)
const index = state.cachedViews.indexOf(viewName)
index > -1 && state.cachedViews.splice(index, 1)
},
......
......@@ -120,6 +120,7 @@ export const DICT_TYPE = {
ECW_CUSTOMER_TRANSPORT_TYPE: 'customer_transport_type', // 客户出货渠道(跟运输方式相同,但是显示全部)
ECW_ORDER_APPROVAL_TYPE: 'order_approval_type', // 订单相关审批类型
ECW_FEE_SOURCE: 'fee_source', // 费用来源
RECEIPT_FEE_TYPE:'receipt_fee_type',
//--------ecw---------
CUSTOMER_STATUS: 'customer_status',
CUSTOMER_SOURCE: 'customer_source',
......@@ -217,8 +218,10 @@ export const DICT_TYPE = {
BOX_CUSTOMS_ERROR_TYPE: "customs_error_type",// 报关异常状态
BOX_SHIPPING_ERROR_TYPE: "shipping_error_type",// 起运异常状态
BOX_ARRIVAL_ERROR_TYPE: "arrival_error_type",// 到港异常状态
SETTLEMENT_STATUS: 'settlement_status', // 结算状态
APP_TYPE:"app_type", //系统类型
AIR_SHIPMENT_PROCESS:'air_shipment_process'
}
/**
......
......@@ -6,6 +6,7 @@ import errorCode from '@/utils/errorCode'
import Cookies from "js-cookie";
import {getTenantEnable} from "@/utils/ruoyi";
import { getLocale } from '@/utils/db';
import i18n from "@/i18n";
// 是否显示重新登录
export let isRelogin = { show: false };
......@@ -114,9 +115,15 @@ service.interceptors.response.use(res => {
// 额外情况
return Promise.reject(res.data)
} else if (code !== 200) {
Notification.error({
title: msg
})
// 如果内容很长则用alert提示,不然可能显示不全,自动隐藏也会导致看不完整就消失了
if(msg.length > 300){
MessageBox.alert(msg, i18n.t('错误提示'), i18n.t('确定'))
}else{
Notification.error({
title: msg
})
}
return Promise.reject(msg || 'error')
} else {
return res.data
......
......@@ -55,6 +55,12 @@
</el-option>
</el-select>
</el-form-item>
<el-form-item :label="$t('提单制作')" prop="ladingBillStatus">
<el-select v-model="queryParams.ladingBillStatus" :placeholder="$t('请选择提单制作状态')" clearable size="small">
<el-option v-for="(item,index) in ladingBillStatusData" :key="index" :label="item" :value="index">
</el-option>
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" @click="handleQuery">{{$t('搜索')}}</el-button>
......@@ -107,6 +113,12 @@
<el-table-column :label="$t('状态')" align="center" prop="shipmentStatusText" />
<el-table-column :label="$t('提单状态')" align="center" prop="ladingBillStatus" width="180">
<template slot-scope="scope">
<span>{{ ladingBillStatusData[scope.row.ladingBillStatus] }}</span>
</template>
</el-table-column>
<el-table-column :label="$t('日期')" align="center" prop="createTime" width="180">
<template slot-scope="scope">
<span>{{ new Date(scope.row.createTime).format('yyyy-MM-dd hh:mm:ss') }}</span>
......@@ -232,6 +244,11 @@ export default {
{ value: "5", label: this.$t("清关时间") },
{ value: "6", label: this.$t("卸柜时间") },
],
ladingBillStatusData: [
this.$t("未完成"),
this.$t("部分完成"),
this.$t("已完成"),
],
// 遮罩层
loading: true,
// 导出遮罩层
......
......@@ -110,7 +110,7 @@
<div class="status-line"></div>
<div class="status-number">{{logList.length - index}}</div>
<div class="status-info">
<div>{{$l(item, 'title')}}</div>
<div>{{$l(item, 'title')}} <el-button v-if="item.approvalId>0" type="text" @click="handleApproval(item.bpmProcessId)">{{$t('查看审批')}}</el-button></div>
<div>
<p>{{formatDate(item.createTime)}}</p>
<p>{{item.operator}}</p>
......@@ -574,6 +574,9 @@ export default {
);
}
},
handleApproval(id) {
this.$router.push({path: '/bpm/process-instance/detail', query: {id: id}})
}
},
computed: {
visitedViews() {
......@@ -636,7 +639,7 @@ export default {
} else {
return getTotlContent(secStatistics);
}
},
}
},
};
</script>
......
......@@ -10,13 +10,14 @@
</el-select>
</el-form-item>
<el-form-item :label="$t('装柜时间')" prop="ldBoxTime">
<!-- {{cabinetObj.ldBoxTime?new Date(cabinetObj.ldBoxTime).format('yyyy-MM-dd hh:mm:ss'):new Date().format('yyyy-MM-dd hh:mm:ss')}} -->
<el-date-picker type="datetime" :placeholder="$t('请选择日期')" v-model="cabinetObj.ldBoxTime" value-format="yyyy-MM-dd HH:mm:ss"></el-date-picker>
</el-form-item>
<el-form-item :label="$t('出仓时间')">
<el-date-picker type="datetime" :placeholder="$t('请选择日期')" v-model="cabinetObj.ldOutWarehouseTime" value-format="yyyy-MM-dd HH:mm:ss"></el-date-picker>
</el-form-item>
<el-form-item :label="$t('装柜图片')">
<ImageUpload :limit="1" :isShowTip=false v-model="cabinetObj.ldPictures" />
<ImageUpload :limit="1" :isShowTip=false v-model="cabinetObj.ldPictures" @input="saveImage" />
</el-form-item>
</el-form>
......@@ -55,11 +56,7 @@ export default {
// 装柜对象
cabinetObj: {},
// 校验
rules: {
ldBoxTime: [
{ required: true, message: this.$t("必填"), trigger: "change" },
],
},
rules: {},
};
},
created() {
......@@ -136,6 +133,27 @@ export default {
startCabinet() {
this.dialogVisible = true;
},
//自动保存图片
saveImage() {
const { ldPictures } = this.cabinetObj;
let pictures = ldPictures?.split(",") ?? [];
let newPictures = [];
for (const item of pictures) {
if (item) {
newPictures.push({
type: "image",
url: item,
});
}
}
cabinetCreate({
shipmentId: this.$attrs.shipmentObj.id,
ldPictures: newPictures.length ? JSON.stringify(newPictures) : "",
operateType: 1,
}).then(()=>{
this.$emit("getBoxInfo");
})
}
},
computed: {
isStartCabinet() {
......
......@@ -50,6 +50,11 @@
<el-form-item :label="$t('始发地')">
<p>{{importCityName(queryParams.startWarehouseId)}}</p>
</el-form-item>
<el-form-item :label="$t('国家')" prop="destination">
<el-select v-model="queryParams.destCountryId" :placeholder="$t('请选择国家')" @change="clearDestWarehouseIdList">
<el-option v-for="item in countryList" :key="item.id" :label="$l(item, 'title')" :value="item.id" />
</el-select>
</el-form-item>
<el-form-item :label="$t('目的地')" prop="destination">
<el-select v-model="queryParams.destWarehouseIdList" :placeholder="$t('请选择目的地')" multiple>
<el-option v-for="item in importWarehouseList" :label="item.titleZh" :value="item.id" :key="item.id"></el-option>
......@@ -154,6 +159,7 @@ import {
createGoods,
remove,
} from "@/api/ecw/boxSea";
import { getWarehouseList } from "@/api/ecw/warehouse"
import {
formatDate,
getTotlContent,
......@@ -161,6 +167,7 @@ import {
getCapacity,
sumStatistics,
} from "../../utils";
import { getListTree } from "@/api/ecw/region";
/**
* 补单
*/
......@@ -169,6 +176,10 @@ export default {
inheritAttrs: false,
data() {
return {
//国家列表
countryList:[],
//仓库列表
warehouseList: [],
// 二维码/条码编号
cabinetNo: "",
// 表格数据
......@@ -192,9 +203,22 @@ export default {
};
},
created() {
this.queryAllData();
this.getCountry()
},
methods: {
//获取国家
async getCountry() {
let countryList = await getListTree({treeType: 1})
this.countryList = countryList.data
let warehouseList = await getWarehouseList()
this.warehouseList = warehouseList.data
let warehouse = this.warehouseList.find(item=>item.id == this.$attrs.shipmentObj.destWarehouseId)
console.log(warehouse,'warehouse')
if(warehouse){
this.$set(this.queryParams,'destCountryId', warehouse.guojia)
}
this.queryAllData();
},
/* 查询已预装 */
getSecGoods() {
loadSecGoodsList({ shipmentId: this.$attrs.shipmentObj.id }).then(
......@@ -440,12 +464,16 @@ export default {
formatDate,
getTotlContent,
sumStatistics,
//切换国家时清除目的仓
clearDestWarehouseIdList() {
this.queryParams.destWarehouseIdList = []
}
},
computed: {
/** 目的地 */
importWarehouseList() {
return this.$attrs.warehouseList.filter(
(item) => item.tradeType == "1" || item.type == "3"
(item) => (item.tradeType == "1" || item.type == "3") && item.guojia == this.queryParams.destCountryId
);
},
/* 容量 */
......
......@@ -35,7 +35,7 @@
</el-form-item>
<el-form-item :label="$t('包装数量与单位')" class="two-element">
<el-input v-model="subMaterialObj.packageNum" :placeholder="$t('请输入包装数量')"></el-input>
<dict-selector v-model="subMaterialObj.packageUnit" type="packaging_type" />
<dict-selector v-model="subMaterialObj.packageUnit" type="goods_package_type" />
</el-form-item>
<el-form-item :label="$t('货物毛重(KGS)')">
<el-input v-model="subMaterialObj.kgs" :placeholder="$t('请输入货物毛重') + '(KGS)'"></el-input>
......
......@@ -59,7 +59,7 @@
<el-table-column :label="$t('发布人') + '/' + $t('发布时间')" align="center" prop="startTime" width="180">
<template slot-scope="scope">
<div>{{ scope.row.creatorName }}</div>
<div>{{ parseTime(scope.row.createTime, '{y}-{m}-{d}') }}</div>
<div>{{ parseTime(scope.row.createTime) }}</div>
</template>
</el-table-column>
<el-table-column :label="$t('开始时间')" align="center" prop="startTime" width="180">
......@@ -73,7 +73,7 @@
<div v-if="row.overdueStatus == 0" style="color: red">{{ $t('已过期') }}</div>
</template>
</el-table-column>
<!--
<!--
<el-table-column :label="$t('创建时间')" align="center" prop="createTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime) }}</span>
......@@ -82,7 +82,7 @@
<el-table-column :label="$t('更新人') + '/' + $t('更新时间')" align="center" width="180">
<template slot-scope="scope">
<div>{{ scope.row.updaterName }}</div>
<div>{{ parseTime(scope.row.updateTime, '{y}-{m}-{d}') }}</div>
<div>{{ parseTime(scope.row.updateTime)}}</div>
</template>
</el-table-column>
<el-table-column :label="$t('状态')" align="center" prop="createTime" width="180">
......@@ -108,7 +108,7 @@
<!-- 分页组件 -->
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNo" :limit.sync="queryParams.pageSize"
@pagination="getList"/>
<el-dialog :title="$t('延期活动时间')" :visible="!!updateEndtimeItem" :before-close="() => updateEndtimeItem=null">
<div v-if="updateEndtimeItem">
{{$t('优惠活动“{name}”的当前结束时间:{time}',{
......@@ -312,4 +312,4 @@ export default {
}
}
};
</script>
\ No newline at end of file
</script>
......@@ -42,12 +42,12 @@
v-hasPermi="['ecw:currency:create']">{{ $t('新增') }}</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport" :loading="exportLoading"
v-hasPermi="['ecw:currency:export']">{{ $t('导出') }}</el-button>
<!-- <el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport" :loading="exportLoading"-->
<!-- v-hasPermi="['ecw:currency:export']">{{ $t('导出') }}</el-button>-->
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
100外币兑人民币(CNY)汇率表
<!-- 100外币兑人民币(CNY)汇率表-->
<!-- 列表 -->
<el-table v-loading="loading" :data="list">
<el-table-column label="" align="center" prop="id" />
......@@ -59,8 +59,8 @@
<el-switch v-model="scope.row.status" :active-value="0" :inactive-value="1" @change="handleStatusChange(scope.row)" />
</template>
</el-table-column>
<el-table-column label="100外币兑人民币汇率" align="center" prop="huilv" />
<el-table-column label="100人民币兑外币汇率" align="center" prop="exchangeToFc" />
<!-- <el-table-column label="100外币兑人民币汇率" align="center" prop="huilv" />-->
<!-- <el-table-column label="100人民币兑外币汇率" align="center" prop="exchangeToFc" />-->
<el-table-column :label="$t('排序')" align="center" prop="aorder" />
<!-- <el-table-column label="" align="center" prop="createAt" width="180">-->
<!-- <template slot-scope="scope">-->
......@@ -100,12 +100,12 @@
<!-- <el-form-item :label="$t('状态')" prop="show">-->
<!-- <el-input v-model="form.show" :placeholder="$t('请输入状态')" />-->
<!-- </el-form-item>-->
<el-form-item label="100外币兑人民币汇率" prop="huilv">
<el-input v-model="form.huilv" placeholder="请输入100外币兑人民币汇率" />
</el-form-item>
<el-form-item label="100人民币兑外币汇率" prop="exchangeToFc">
<el-input v-model="form.exchangeToFc" placeholder="请输入100人民币兑外币汇率" />
</el-form-item>
<!-- <el-form-item label="100外币兑人民币汇率" prop="huilv">-->
<!-- <el-input v-model="form.huilv" placeholder="请输入100外币兑人民币汇率" />-->
<!-- </el-form-item>-->
<!-- <el-form-item label="100人民币兑外币汇率" prop="exchangeToFc">-->
<!-- <el-input v-model="form.exchangeToFc" placeholder="请输入100人民币兑外币汇率" />-->
<!-- </el-form-item>-->
<!-- <el-form-item label="100人民币兑外币汇率" prop="huilv">
{{ form.huilv ? (10000 / form.huilv).toFixed(6) : ''}}
</el-form-item> -->
......@@ -179,6 +179,9 @@ export default {
form: {},
// 表单校验
rules: {
titleZh:{required:true,message:'请输入中文名称',target:'blur'},
titleEn:{required:true,message:'请输入英文名称',target:'blur'},
fuhao:{required:true,message:'请输入货币符号 ',target:'blur'},
},
statusDictDatas: getDictDatas(DICT_TYPE.COMMON_STATUS),
......@@ -228,7 +231,18 @@ export default {
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.queryParams = {
pageNo: 1,
pageSize: 10,
titleZh: null,
titleEn: null,
fuhao: null,
status: null,
huilv: null,
aorder: null,
createAt: null,
updateAt: null,
};
this.handleQuery();
},
/** 新增按钮操作 */
......@@ -309,6 +323,36 @@ export default {
this.exportLoading = false;
}).catch(() => {});
}
},
watch:{
'queryParams.titleZh':{
handler(value){
if(value === ''){
this.queryParams.titleZh = undefined
}
}
},
'queryParams.titleEn':{
handler(value){
if(value === ''){
this.queryParams.titleEn = undefined
}
},
},
'queryParams.fuhao':{
handler(value){
if(value === ''){
this.queryParams.fuhao = undefined
}
},
},
'queryParams.status':{
handler(value){
if(value === ''){
this.queryParams.status = undefined
}
}
}
}
};
</script>
......@@ -47,7 +47,9 @@
<el-descriptions-item :label="$t('主营类别')">{{ $l(customer,'productTypeName') }}</el-descriptions-item>
<el-descriptions-item :label="$t('常提货网点')">{{ $l(customer,'pickupPointName') }}</el-descriptions-item>
<el-descriptions-item :label="$t('图片')">
<el-image v-show="!!customer.picture" :src="customer.picture" style="width: 100px;height: 100px"></el-image>
<el-image v-if="customer.picture" :src="customer.picture" style="width: 100px;height: 100px">
<span slot="error">加载失败</span>
</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>
......
This diff is collapsed.
......@@ -13,7 +13,7 @@
</div>
</el-form-item>
<el-form-item :label="$t('收款账户')" prop="accountNo">
<span>{{ addForm.accountNo+'('+addForm.accountName+')' }}</span>
<span>{{ addForm.accountNo}}{{'('+addForm.accountName+')' }}</span>
</el-form-item>
<el-form-item :label="$t('实收日期')" prop="amountDate">
<span>{{ addForm.amountDate }}</span>
......@@ -39,7 +39,7 @@
<template slot="label">
{{ $t('兑核销基准币种金额') }}{{getCurrencyLabel(showCurrencyId)}}
</template>
<span>{{ addForm.writeOffAmount?parseFloat(addForm.writeOffAmount).toFixed(6):'' }}</span>
<span>{{ addForm.writeOffAmount?parseFloat(addForm.writeOffAmount).toFixed(2):'' }}</span>
</el-form-item>
<el-form-item :label="$t('水单附件')" prop="attr">
<div>
......@@ -114,11 +114,12 @@
this.detailed = res.data.map(v => ({
...v,
amountDate: this.parseTime(v.amountDate, '{y}-{m}-{d}'),
accountNo: +v.accountNo,
rate:parseFloat(v.rate).toFixed(6),
rate:parseFloat(v.rate).toFixed(2),
attr: v.attr ? v.attr.split(',').map(t => ({ name: t.slice(t.lastIndexOf('/') + 1), url: t })) : []
}))
console.log(this.detailed)
this.addForm = this.detailed.find((itt) => itt.id == this.bankId);
console.log(this.addForm)
this.handleAddReceiptItem()
})
},
......
......@@ -213,7 +213,7 @@
<el-table-column :label="$t('应付金额')" align="center" prop="totalAmount"/>
<el-table-column :label="$t('币种')" align="center" prop="currencyId">
<template slot-scope="scope">
{{ getCurrencyLabel(scope.row.currencyId) }}
{{ getCurrencyLabel(scope.row.currencyId) }}
<!-- <dict-tag :type="DICT_TYPE.BOX_SHIPPING_PRICE_UNIT" :value="scope.row.currencyId" /> -->
</template>
</el-table-column>
......@@ -474,6 +474,7 @@ import {getWarehouseList} from '@/api/ecw/warehouse'
import WorkFlow from '@/components/WorkFlow/'
import {getCustomer, getCustomerPage} from "@/api/ecw/customer";
import Template from "@/views/cms/template/index.vue";
import {getExchangeRatePage} from "@/api/ecw/exchangeRate";
export default {
name: "commission-requestFunds",
......@@ -515,10 +516,12 @@ export default {
dialogVisible: false,
interdict:false,
bankAccountList:[],
rateList:[],
};
},
async created() {
await getCurrencyPage(this.params).then(res => this.currencyList = res.data.list)
await getExchangeRatePage({page:1,rows: 100}).then(res => this.rateList = res.data.list)
getWarehouseList().then(res => this.warehouseList = res.data)
let that = this;
if (that.$route.query.payableId && that.$route.query.payableId !== '0') {
......@@ -742,8 +745,8 @@ export default {
},
handleSelectionChange(val) {
this.multipleSelection = val.map(v => {
var rate = NP.divide(this.currencyList.find(vs => vs.id === v.currencyId).huilv, 100).toFixed(6)
return Object.assign(v, {exchangeRate: rate})
let p = this.rateList.find(i =>i.sourceCurrencyId === v.currencyId && i.targetCurrencyId === 3)
return Object.assign(v, {exchangeRate: p.currencyRate})
});
},
hiddenDialog() {
......
......@@ -10,7 +10,9 @@
<el-descriptions-item :label="$t('业务员')">{{ form.salesmanName }}</el-descriptions-item>
<el-descriptions-item :label="$t('期望收款金额')">
<template>
<div sytle="display:flex">
<div v-for="itemAmount in collectionAmount" :key="itemAmount.currencyNameZh">{{ itemAmount.amount}}{{$i18n.locale=='zh_CN'?itemAmount.currencyNameZh:itemAmount.currencyNameEn}}</div>
</div>
</template>
</el-descriptions-item>
<el-descriptions-item v-if="reason" :label="$t('申请理由')">{{reason}}</el-descriptions-item>
......
......@@ -16,7 +16,7 @@
</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 >
......@@ -50,6 +50,7 @@
{{ WriteOffProportion }}%
</el-descriptions-item>
</el-descriptions>
<div style="margin: 20px 0;font-size:16px" v-if="form.financeRemark">{{$t('备注')}}:{{form.financeRemark}}</div>
<div class="btn">
<el-button
size="mini"
......
This diff is collapsed.
......@@ -454,6 +454,7 @@ import { getCurrencyPage } from "@/api/ecw/currency";
import NP from 'number-precision'
import {getWarehouseList} from '@/api/ecw/warehouse'
import WorkFlow from '@/components/WorkFlow/'
import { getExchangeRatePage } from "@/api/ecw/exchangeRate";
export default {
name: "EcwFinancialCreatpayment",
......@@ -492,18 +493,46 @@ export default {
currencyList: [],
warehouseList:[],
selectedUsers:[],
dialogVisible:false
dialogVisible:false,
rateList:[],
};
},
activated(){
console.log(11)
// this.getList();
if (this.$route.query.payableId && this.$route.query.payableId != 0) {
this.payableId = this.$route.query.payableId;
getPayableInfoByIds({ id: this.payableId }).then(res => {
this.handleSelectionChange([res.data])
this.list = this.multipleSelection
this.$set(this.form, 'supplierId', res.data.supplierId)
this.selectChange(this.form.supplierId)
})
}
if (this.$route.query.id && this.$route.query.id !== '0') {
this.id = this.$route.query.id;
getPaymentInfoByIds({ id: this.id }).then(res => {
this.form = {
...res.data,
latestPayAt: this.parseTime(res.data.latestPayAt, '{y}-{m}-{d}'),
applicationAt: this.parseTime(res.data.applicationAt, '{y}-{m}-{d}'),
invoiceStatus: String(res.data.invoiceStatus),
}
this.$set(this.form,'supplierBankAccount',res.data.supplierBankAccount)
console.log(this.form)
})
getPaymentItem({ id: this.id }).then(res => {
this.list = [...res.data]
this.defaultList = [...res.data]
})
}
},
async created() {
await getCurrencyPage(this.params).then(res => this.currencyList = res.data.list)
await getExchangeRatePage({page:1,rows: 100}).then(res => this.rateList = res.data.list)
getWarehouseList().then(res => this.warehouseList = res.data)
let that = this;
if (that.$route.query.payableId && that.$route.query.payableId !== '0') {
if (that.$route.query.payableId && that.$route.query.payableId != 0) {
this.payableId = this.$route.query.payableId;
getPayableInfoByIds({ id: this.payableId }).then(res => {
this.handleSelectionChange([res.data])
......@@ -714,10 +743,18 @@ export default {
},
handleSelectionChange(val) {
this.multipleSelection = val.map(v => {
var rate = NP.divide(this.currencyList.find(vs => vs.id === v.currencyId).huilv, 100).toFixed(6)
// var rate = NP.divide(this.currencyList.find(vs => vs.id === v.currencyId).huilv, 100).toFixed(6)
var rate = this.getRate(v.currencyId)
return Object.assign(v, { exchangeRate: rate })
});
},
//获取汇率
getRate(sourceCurrencyId){
var targetCurrencyId = this.currencyList.find(vs=>vs.titleEn=='RMB').id
var rate = this.rateList.find(v=>(v.sourceCurrencyId === sourceCurrencyId&&v.targetCurrencyId===targetCurrencyId))
if(rate) return rate.currencyRate
return ''
},
hiddenDialog() {
this.open = false;
},
......
......@@ -2,7 +2,11 @@
<div class="app-container" >
<div id="print" style="font-size: 18px;">
<div style="text-align: center;font-weight: bold;font-size: 26px;padding: 22px 0;border-top: 1px solid #666;border-left:1px solid #666;border-right: 1px solid #666;">{{$t('捷道货运收款单')}}</div>
<div style="position:relative;text-align: center;font-weight: bold;font-size: 26px;padding: 22px 0;border-top: 1px solid #666;border-left:1px solid #666;border-right: 1px solid #666;">
<div style="position:absolute;left:4px;top:4px">{{$t('广州市捷道国际货运代理有限公司')}}
</div>
<span>{{$t('收款单')}}</span>
</div>
<table border="1" style="width: 100%;text-align: center;border-collapse: collapse; ">
<tr>
<td style="font-weight: bold;width:12.5%">{{$t('部门')}}</td>
......@@ -27,26 +31,26 @@
<th style="width: 12.5%;">{{$t('序号')}}</th>
<th style="width: 12.5%;">{{$t('提单号')}}</th>
<th style="width: 12.5%;">{{$t('订单号')}}</th>
<th style="width: 12.5%;">{{$t('品名')}}</th>
<!-- <th style="width: 12.5%;">{{$t('品名')}}</th> -->
<th style="width: 12.5%;">{{$t('收入类型')}}</th>
<th style="width: 12.5%;">{{$t('金额')}}</th>
<th style="width: 12.5%;">{{$t('币种')}}</th>
<th style="width: 12.5%;">{{$t('金额')}}</th>
<th style="width: 12.5%;">{{$t('优惠金额')}}</th>
</tr>
<tr v-for="(item, index) in list" :key="index">
<tr v-for="(item, index) in list" :key="item.id">
<td>{{ index + 1 }}</td>
<td>{{ orderData.tidanNo||''}}</td>
<td>{{ item.orderNo }}</td>
<td>{{ $i18n.locale=='zh_CN'?item.titleZh:item.titleEn }}</td>
<td><dict-tag :value="item.feeType" :type="DICT_TYPE.FEE_TYPE"></dict-tag></td>
<td> {{item.totalAmount}}</td>
<!-- <td>{{ $i18n.locale=='zh_CN'?item.titleZh:item.titleEn }}</td> -->
<td><dict-tag :value="item.feeType" :type="DICT_TYPE.RECEIPT_FEE_TYPE"></dict-tag></td>
<td>{{getCurrencyLabel(item.currencyId)}}</td>
<td> {{item.totalAmount}}</td>
<td>{{ item.discountTotal||0 }}</td>
</tr>
<tr v-for="(items, indexs) in receiptAccountList" :key="indexs">
<td>{{getCurrencyLabel(items.currencyId)}}{{$t('应收合计')}}</td>
<td ><span v-if="items.discountTotal>0">{{ `${items.receivableAmount - items.discountTotal }(${items.receivableAmount} - ${items.discountTotal})` }}</span>
<span v-else>{{ `${items.receivableAmount - items.discountTotal }` }}</span>
<span v-else>{{ `${items.receivableAmount}` }}</span>
</td>
<td>{{$t('汇率')}}</td>
<td>{{ items.collectionRate}}</td>
......@@ -64,7 +68,7 @@
<p style="margin: 0;word-break: break-all;">A/C NO{{bankTiem.accountNo}}</p>
</div>
<div style="padding:6px 0;width: 87.5%;text-align: center;">
<p style="margin: 0;">{{$t('实收')}}{{getCurrencyLabel(bankTiem.currencyId)}}{{bankTiem.amount}}¥</p>
<p style="margin: 0;">{{$t('实收')}}{{getCurrencyLabel(bankTiem.currencyId)}}{{bankTiem.amount}}{{getCurrencyFuhao(bankTiem.currencyId)}}</p>
<!-- <p style="margin: 0;">未收:¥{{bankTiem.noReceipt}}</p> -->
</div>
</div>
......@@ -212,6 +216,11 @@
if(label.length>0) return this.$i18n.locale=='zh_CN'?label[0].titleZh:label[0].titleEn
return ''
},
getCurrencyFuhao(id){
var label = this.currencyList.filter(item=>item.id == id)
if(label.length>0) return label[0].fuhao
return ''
},
getList() {
getReceivableItem({ id: this.id }).then(res => {
this.detailed = res.data
......
This diff is collapsed.
......@@ -233,7 +233,7 @@
class-name="small-padding fixed-width"
>
<template slot-scope="scope">
<el-button size="mini" type="text" v-hasPermi="['ecw:receivable:collection']" @click="handleAdd(scope.row.id)" >{{ $t('收款') }}</el-button>
<el-button size="mini" type="text" v-hasPermi="['ecw:receivable:collection']" @click="handleAdd(scope.row)" >{{ $t('收款') }}</el-button>
</template>
</el-table-column>
</el-table>
......@@ -350,8 +350,9 @@ export default {
this.getList();
},
/** 新增按钮操作 */
handleAdd(id) {
return this.$router.push("creatCollection?receiptId=" + id);
handleAdd(row) {
if(!row) return this.$router.push("creatCollection");
return this.$router.push("creatCollection?orderId=" + row.orderId);
},
submitForm() {},
},
......
This diff is collapsed.
This diff is collapsed.
......@@ -64,6 +64,15 @@
</el-date-picker>
</el-form-item>
</el-col>
<el-form-item :label="$t('编号')">
<el-input
style="max-width: 188px"
v-model="queryParams.numberNo"
:placeholder="$t('订单号和提单号,自编号')"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="handleQuery">{{ $t('查找') }}</el-button>
</el-form-item>
......
......@@ -145,6 +145,7 @@
<el-button type="text" size="mini" @click="cargoTransfer(scope.row)" v-hasPermi="['ecw:cargo_control:cargo_transfer']">{{$t('调货')}}</el-button>
<el-button type="text" size="mini" @click="showFallbackOrder=scope.row" v-if="scope.row.isReleaseAfterGoods" v-hasPermi="['ecw:cargo_control:fallback']">{{$t('反复核')}}</el-button>
</template>
<el-button type="text" size="mini" @click="showLogOrderId=scope.row.orderId" v-hasPermi="['ecw:cargo_control:log']">{{$t('控货日志')}}</el-button>
<el-button type="text" size="mini" @click="toDetail(scope.row)" v-hasPermi="['ecw:cargo_control:show']">{{$t('查看')}}</el-button>
</template>
</el-table-column>
......@@ -157,6 +158,8 @@
<release v-if="showReleaseOrderId" :order-id="showReleaseOrderId" @close="showReleaseOrderId=null" @success="onReleaseSuccess" />
<transfer-cargo v-if="showTransferCargoOrderId" :order-id="showTransferCargoOrderId" @close="showTransferCargoOrderId=null" @success="onTransferCargoSuccess" :cargoControlPickId="pickInfo ? pickInfo.id : 0" />
<fallback v-if="showFallbackOrder !== null" :order="showFallbackOrder" @close="showFallbackOrder=null" @success="onFallbackSuccess" :index="null" />
<!--控货日志-->
<cargo-log-list v-if="showLogOrderId" :order-id="showLogOrderId" @close="showLogOrderId=null" />
</div>
</template>
......@@ -173,9 +176,11 @@ import { getCargoControlOrderPage, batchReview, orderReview, getPickRleaseInfo,
import TransferCargo from '@/views/ecw/order/components/TransferCargo'
import Fallback from './components/Fallback'
import {getWarehouseList} from '@/api/ecw/warehouse'
import CargoLogList from "@/views/ecw/order/components/CargoLogList.vue";
export default {
name: "EcwOrderCargocontrol",
components: {
CargoLogList,
CustomerSelector, ProductSelector, Selector, Transfer, Release,CargoControlEdit, TransferCargo, Fallback
},
data() {
......@@ -215,6 +220,7 @@ export default {
showTransferCargoOrderId: null, // 调货ID
showFallbackOrder: null, // 调货订单
pickInfo: null, // 当前操作的提货信息
showLogOrderId: null, // 显示控货日志的订单ID
};
},
computed: {
......
......@@ -53,11 +53,16 @@
<el-table-column :label="$t('提单号')" prop="tidanNo"></el-table-column>
<el-table-column :label="$t('备注')" prop="remarks"></el-table-column>
<el-table-column :label="$t('操作人')" prop="operator"></el-table-column>
<el-table-column :label="$t('日期')" prop="createTime">
<el-table-column :label="$t('放货日期')" prop="createTime">
<template slot-scope="{row}">
{{row.createTime|parseTime}}
</template>
</el-table-column>
<el-table-column :label="$t('复核日期')" prop="createTime">
<template slot-scope="{row}">
{{row.checkTime|parseTime}}
</template>
</el-table-column>
<el-table-column :label="$t('状态')" prop="status">
<template slot-scope="{row}">
<dict-tag :type="DICT_TYPE.ECW_RELEASE_STATUS" :value="row.status" />
......@@ -70,7 +75,7 @@
<el-button v-if="scope.row.status == 1" type="success" size="mini" @click="review(scope.row.id)">{{$t('放货复核')}}</el-button>
<el-button v-if="scope.row.status == 3" type="danger" size="mini" @click="fallbackIndex=scope.$index">{{$t('反复核')}}</el-button>
<el-button v-if="scope.row.status == 3" type="success" size="mini" @click="cargoControlPickId=scope.row.id">{{$t('调货')}}</el-button>
<el-button v-if="[2,4, 5, 6].indexOf(scope.row.status) > -1" type="primary" size="mini" @click="showApprovalDetail(scope.row.formId)">{{$t('审核详情')}}</el-button>
<el-button v-if="[2,4, 5, 6].indexOf(scope.row.status) > -1" type="danger" size="mini" @click="cancelApproval(scope.row.id)">{{$t('取消审核')}}</el-button>
</template>
......
......@@ -33,7 +33,20 @@
</div>
</div>
</el-descriptions-item>
<!-- 优惠申请 -->
<el-descriptions-item :label="$t('申请理由')" v-if="type == 31 || type == 32" :span="4">
<div class="bold" v-for="(item,index) in detail.batchApplyOrderItemDetailVOList" :key="index">
<div>{{index+1}}.【{{$l(item, 'prodTitle')}}</div>
<div>
{{item.charging ? $t('原全包价') : $t('原运费')}}{{item.orgFreight}} {{ currencyMap[item.freightCurrency] }} / {{ unitMap[item.freightVolume] }}
{{item.charging ? $t('新全包价') : $t('新运费')}}{{item.freight}} {{ currencyMap[item.freightCurrency] }} / {{ unitMap[item.freightVolume] }}
</div>
<div v-if="!item.charging">
{{$t('原清关费')}}{{item.orgClearanceFreight}} {{ currencyMap[item.clearanceFreightCurrency] }} / {{ unitMap[item.clearanceFreightVolume] }}
{{$t('新清关费')}}{{item.clearanceFreight}} {{ currencyMap[item.clearanceFreightCurrency] }} / {{ unitMap[item.clearanceFreightVolume] }}
</div>
</div>
</el-descriptions-item>
<!-- 重泡货 -->
<el-descriptions-item :label="$t('申请理由')" v-if="type == 4 || type ==5" :span="4">
<div class="bold" v-if="type == 4">
......@@ -142,7 +155,7 @@ export default {
}
},
type(){
if([1,2,3,4,5].indexOf(this.type) > -1){
if([1,2,3,4,5,31,32].indexOf(this.type) > -1){
// 加载费用体积单位
getUnitList().then(res => this.unitList = res.data)
getCurrencyList().then(res => this.currencyList = res.data)
......@@ -176,6 +189,7 @@ export default {
getApproval(this.id).then(res => {
this.type = res.data.type
this.detail = JSON.parse(res.data.details)
console.log(this.detail)
})
},
getOrder(){
......
......@@ -33,7 +33,7 @@
</el-tab-pane>
</el-tabs>
<el-form-item label="">
<el-button type="primary" @click="submit">{{$t('提交')}}</el-button>
<el-button type="primary" @click="submit" :loading="loading">{{$t('提交')}}</el-button>
</el-form-item>
</el-form>
</el-dialog>
......@@ -47,6 +47,8 @@ export default {
},
data(){
return {
// 提交中状态
loading: false,
current: 'createBatch',
show: false,
form:{
......@@ -94,10 +96,12 @@ export default {
})
}
}
this.loading = true;
({createBatch, createSplitBatch}[this.current])(data).then(res => {
this.$message.success(this.$t("操作成功"));
this.$emit('success')
}).finally(() => {
this.loading = false
})
})
},
......
......@@ -25,18 +25,27 @@
<el-descriptions-item :label="$t('申请原因')" v-if="applyType == 8">
<dict-tag :type="DICT_TYPE.ECW_PICK_RECURRENT_NUCLEAR_TYPE" :value="detail.recurrentNuclearType" />
</el-descriptions-item>
<!-- 调货 -->
<el-descriptions-item :label="$t('申请原因')" v-if="applyType == 9">
{{$l(detail, 'reason')}}
</el-descriptions-item>
<!-- 取消放货 -->
<el-descriptions-item :label="$t('申请原因')" v-if="applyType == 10">
<el-descriptions-item :label="$t('申请原因')" v-if="applyType == 10" :span="2">
<dict-tag :type="DICT_TYPE.ECW_CANCEL_PICK_TYPE" :value="detail.cancelPickType" />
</el-descriptions-item>
<el-descriptions-item v-if="voucherList.length" :label="$t('凭证')" :span="3">
<div v-for="(item, index) in voucherList" :key="index" style="padding:5px">
<video v-if="isVideo(item)" :src="item" @click="playVideo(item)" style="width: 100px; height: 100px;"></video>
<el-image v-else :src="item" style="width: 100px; height: 100px;" :preview-src-list="voucherImages"></el-image>
</div>
</el-descriptions-item>
</el-descriptions>
<el-dialog :visible="!!videoUrl" :before-close="closeVideoPlayer">
<video v-if="!!videoUrl" :src="videoUrl" style="width: 500px; height: 500px" controls></video>
</el-dialog>
</div>
</template>
<script>
......@@ -44,7 +53,9 @@ import {getPickUpdateApproveInfo} from '@/api/ecw/orderCargoControl'
import {getOrder} from '@/api/ecw/order'
import {getChannelListByIds} from '@/api/ecw/channel'
import {parseTime} from '@/utils/ruoyi'
import Template from "@/views/cms/template/index.vue";
export default {
components: {Template},
filters: {parseTime},
props:{
id: [String, Number],
......@@ -55,7 +66,8 @@ export default {
detail: null,
order: null,
channels: [],
channelName: '/'
channelName: '/',
videoUrl: null
}
},
watch:{
......@@ -74,7 +86,24 @@ export default {
let channel = this.channels.find(item => item.channelId == id)
return channel ? channel.nameZh : '/'
}
}
},
// 凭证
voucherList(){
if(!this.detail || !this.detail.voucher) return []
return this.detail.voucher.split(',')
},
// 图片类型的凭证
voucherImages(){
return this.voucherList.filter(item => {
return !this.isVideo(item)
})
},
// 判断是否是视频链接
isVideo(){
return (url) => {
return ['mp4'].indexOf(url.split('.').pop().toLowerCase()) > -1
}
}
},
created(){
if(this.id){
......@@ -92,11 +121,20 @@ export default {
})
},
getChannel(){
if(!this.order || !this.order.channelId) return
if(!this.order || !this.order.channelId) return
getChannel(this.order.channelId).then(res => {
this.channelName = this.$l(res.data, 'name')
})
},
// 播放视频
playVideo(url){
console.log('play video', url)
this.videoUrl = url
},
// 关闭视频播放器
closeVideoPlayer(){
this.videoUrl = null
}
}
}
</script>
......@@ -108,4 +146,4 @@ export default {
font-weight: bold;
}
}
</style>
\ No newline at end of file
</style>
<template>
<el-dialog :title="$t('控货日志')" visible :before-close="closeDialog" :close-on-click-modal="false" width="1000px">
<el-table :data="list">
<el-table-column :label="$t('操作时间')" prop="createTime" width="200">
<template slot-scope="{row}">{{row.createTime|parseTime}}</template>
</el-table-column>
<el-table-column :label="$t('操作人')" prop="creatorName" width="100"></el-table-column>
<el-table-column :label="$t('操作人类型')" prop="content" width="100">
<template slot-scope="{row}">{{row.userType == 1 ? $t('会员') : $t('管理员')}}</template>
</el-table-column>
<el-table-column :label="$t('操作类型')" prop="type" width="200"></el-table-column>
<el-table-column :label="$t('备注')" prop="msg"></el-table-column>
</el-table>
</el-dialog>
</template>
<script>
import {
getControlLogList,
} from '@/api/ecw/orderCargoControl'
import {parseTime} from '@/utils/ruoyi'
export default {
props:{
orderId: Number
},
filters: {parseTime},
data(){
return {
show: false,
list:[]
}
},
created(){
this.show = true
this.loadData()
},
methods:{
loadData(){
getControlLogList(this.orderId).then(res => this.list = res.data)
},
closeDialog(){
this.show = false
this.$emit('close');
}
}
}
</script>
<style lang="scss" scoped>
</style>
<template>
<el-dialog
:title="title"
visible
:before-close="closeDialog"
:close-on-click-modal="false"
width="800px"
>
<div v-for="item in fileList" :key="item.id" class="file-list">
<span>{{ getFileName(item.url) }}</span>
<div @click="deleteFile(item.id)">{{ $t('删除') }}</div>
<div @click="downloadFile(item.url)">{{ $t('下载') }}</div>
</div>
<div style="margin-top: 30px;display:flex;">
<el-upload action="#" accept="png" :http-request="requestUpload" :show-file-list="false" :before-upload="beforeUploadimg1">
<el-button size="small">
{{ $t('上传新附件') }}
<i class="el-icon-upload el-icon--right" />
</el-button>
</el-upload>
<el-button style="margin-left: 60px;" @click="closeDialog">{{ $t('返回') }}</el-button>
</div>
</el-dialog>
</template>
<script>
import { warehousePictureList, warehousePictureCreate, warehousePictureDelete,uploadOrgname } from '@/api/ecw/order'
export default {
props: {
orderId: [String, Number],
orderNo: [String, Number]
},
data() {
return {
show: false,
detail: null,
fileList: []
}
},
computed: {
title() {
let t = this.$t('报关资料')
if (this.orderNo) {
t += '-' + this.orderNo
}
return t
}
},
created() {
this.show = true
this.loadData()
},
methods: {
loadData() {
warehousePictureList({ bizId: this.orderId, type: 6 }).then((res) => {
this.fileList = res.data
})
},
getFileName(url) {
if (!url) return '/'
var file = url.split('/')
return file[file.length - 1]
},
closeDialog() {
this.show = false
this.$emit('close')
},
// 覆盖默认的上传行为
requestUpload() {
},
// 上传预处理
beforeUploadimg1(file) {
if (this.fileList.length >= 10) {
this.$message.error(this.$t('您最多上传10个附件'))
return
}
console.log(file)
var type = file.name.split('.')
if (['xls', 'doc', 'ppt', 'txt', 'pdf', 'jpg', 'png', 'jpeg', 'docx', 'xlsx'].indexOf(type[type.length - 1]) === -1) {
this.$message.error(this.$t('附件仅限doc/xls/ppt/txt/pdf/jpg/png/jpeg/docx/xlsx格式'))
} else {
// 上传
const formData = new FormData()
formData.append('file', file)
// formData.append('path', this.uuid())
uploadOrgname(formData).then(response => {
if (response.data) {
this.createImage(response.data)
}
})
}
},
createImage(url) {
warehousePictureCreate({ bizId: this.orderId, type: 6, url: url }).then(res => {
this.$message.success(this.$t('上传成功'))
this.loadData()
})
},
downloadFile(url) {
window.open(url, '_self')
},
deleteFile(id) {
this.$confirm(this.$t('确定删除附件吗?')).then(function() {
return warehousePictureDelete(id)
}).then(() => {
this.loadData()
this.$message({
message: this.$t('删除成功'),
type: 'success'
})
}).catch(() => {})
},
uuid() {
var s = []
var hexDigits = '0123456789abcdef'
for (var i = 0; i < 36; i++) {
s[i] = hexDigits.substr(Math.floor(Math.random() * 0x10), 1)
}
s[14] = '4' // bits 12-15 of the time_hi_and_version field to 0010
s[19] = hexDigits.substr((s[19] & 0x3) | 0x8, 1) // bits 6-7 of the clock_seq_hi_and_reserved to 01
s[8] = s[13] = s[18] = s[23] = '-'
var uuid = s.join('')
return uuid
}
}
}
</script>
<style lang="scss" scoped>
.title {
font-size: 16px;
margin: 20px 0;
display: flex;
align-items: center;
&:before {
content: '';
width: 5px;
height: 15px;
background: #666;
margin-right: 10px;
}
}
.file-list{
display: flex;
align-items: center;
color: #297CE7;
margin-left: 30px;
font-size:16px;
margin-bottom:10px;
div{
cursor: pointer;
margin-left: 30px;
}
}
</style>
This diff is collapsed.
......@@ -3,7 +3,7 @@
</template>
<script>
import {sendSmsCode} from '@/api/ecw/orderCargoControl'
const timeout = null
let timeout = null
export default {
props:{
orderId: [String, Number],
......@@ -46,10 +46,10 @@ export default {
countDown(){
this.leftTime --
if(this.leftTime <= 0){
return false
return false
}
timeout = setTimeout(this.countDown, 1000)
}
}
}
</script>
\ No newline at end of file
</script>
......@@ -41,6 +41,15 @@
{{getLocationName(row.orderLocationBackVOList)}}
</template>
</el-table-column>
<el-table-column :label="$t('入仓影像')" prop="orderLocationBackVOList" >
<template slot-scope="{row}">
<image-display :pictureUrls="warehouseItem.pictureUrls" :type="5">
<el-button type="text">
查看
</el-button>
</image-display>
</template>
</el-table-column>
</el-table>
</el-dialog>
</template>
......@@ -49,8 +58,10 @@ import { getOrder, getOrderWarehouseIn } from '@/api/ecw/order'
import { DICT_TYPE } from '@/utils/dict'
import { parseTime } from '@/utils/ruoyi'
import WarehouseAreaSelect from "@/components/WarehouseAreaSelect"
import ImageDisplay from "@/views/ecw/order/components/imageDisplay.vue";
export default {
components: {
ImageDisplay,
WarehouseAreaSelect
},
filters: {parseTime},
......
<template>
<div style="display: inline-block">
<div @click="visible = true">
<slot></slot>
</div>
<el-dialog
append-to-body
title="提示"
:visible.sync="visible"
width="80%">
<div style="display: flex;flex-wrap: wrap;">
<el-image style="width: 200px;height: 200px;margin-right: 10px;margin-bottom: 10px" v-for="(item) in list" :src="bizId ? item.url : item">
<video controls width="148px" height="148px" slot="error" :src="bizId ? item.url : item" ></video>
</el-image>
</div>
</el-dialog>
</div>
</template>
<script>
import {warehousePictureList} from "@/api/ecw/order";
export default {
props:{
bizId:[String, Number],
type:[Number],
pictureUrls:{
type: Array,
default:()=>[]
}
},
name: "imageDisplay",
data(){
return {
visible:false,
list:[],
}
},
created() {
},
methods:{
getList(){
warehousePictureList({bizId:this.bizId,type:this.type}).then(r =>{
this.list = r.data
;
})
}
},
watch:{
visible(val){
if(val){
if(this.bizId){
this.getList()
}else {
this.list = this.pictureUrls
}
}
}
}
}
</script>
<style scoped>
</style>
<template>
<div>
<template v-if="charging">
{{$t('全包价')}}:{{freight}}{{currencyMap[freightCurrency]}}
</template>
<template v-else>
<div>{{$t('运费')}}{{freight}}{{currencyMap[freightCurrency]}}</div>
<div>{{$t('清关费')}}{{clearance}}{{currencyMap[clearanceCurrency]}}</div>
</template>
</div>
</template>
<script>
export default {
props:{
// 货币映射
currencyMap:{
type:Object,
default(){
return {}
}
},
// 运费
freight: [String, Number],
// 运费货币
freightCurrency: Number,
// 清关费
clearance: [String, Number],
// 运费货币
clearanceCurrency: Number,
// 是否全包价
charging: Boolean
}
}
</script>
......@@ -12,13 +12,10 @@
</el-form-item>
<el-form-item :label="$t('特殊要求备注')"><el-input type="textarea" style="width: 300px;" v-model="todoDetail"></el-input></el-form-item>
<el-form-item v-for="(item,index) in this.getDictDatas(this.DICT_TYPE.ORDER_SPECIAL_NEEDS)" v-if="advanceType.indexOf(item.value) > -1" :key="item.value" :label="item.label + '预计金额'">
<el-input style="width: 300px;" v-model="specialNeedsList[index].transFee">
<div style="width: 100px;" slot="append" >
<el-select v-model="specialNeedsList[index].transCurrency">
<el-option v-for="item in JSON.parse(currency)" :key="item.id" :label="item.titleZh" :value="item.id" />
</el-select>
</div>
</el-input>
<el-input-number style="width: 300px;" v-model.number="specialNeedsList[index].transFee" type="number" :min="0" step-strictly></el-input-number>
<el-select v-model="specialNeedsList[index].transCurrency">
<el-option v-for="item in JSON.parse(currency)" :key="item.id" :label="item.titleZh" :value="item.id" />
</el-select>
<div style="display: inline-block;margin-left: 20px;">
<span style="margin-right: 10px;">{{ $t('付款类型') }}</span>
<dict-selector :placeholder="$t('请选择付款类型')" v-model="specialNeedsList[index].payType" :type="DICT_TYPE.PAYMENT_TYPE" ></dict-selector>
......
......@@ -7,7 +7,8 @@
:visible.sync="dialogVisible"
width="50%">
<div style="display: flex;flex-wrap: wrap;">
<div v-for="item in list" style="padding: 10px"><el-image
<div v-for="item in list" style="padding: 10px">
<el-image
style="width: 100px; height: 100px"
:src="item"
:preview-src-list="list">
......
......@@ -245,10 +245,15 @@
<el-tab-pane :label="$t('运单资料/提货单')" name="three">
<!--inWarehouseState 1待入库,2多了,3少了,4到齐-->
<el-button v-hasPermi="['ecw:order:show_receipt']" type="text" @click="showWarehouseReceipt=true" :disabled="order.inWarehouseState == 0 && order.shipmentState == 0">{{$t('查看入仓单')}}</el-button>
<image-display :type="1" :biz-id="order.orderId">
<el-button style="margin: 0 15px" type="text">{{$t('入仓影像')}}</el-button>
</image-display>
<el-button v-hasPermi="['ecw:order:show_landing']" type="text" @click.native="showLadingBill=true" :disabled="!order.ladingState">{{$t('查看提货单')}}</el-button>
<el-button v-hasPermi="['ecw:order:show_packing']" :disabled="!order.packingListUrl" type="text" @click="downloadPackingList">{{$t('装箱单')}}</el-button>
<el-button v-hasPermi="['ecw:order:show_customs']" type="text" @click="showDeclaration=true">{{$t('查看报关资料')}}</el-button>
</el-tab-pane>
<el-tab-pane :label="$t('费用明细')" name="four">
<el-button v-has-permi="['order:detail:fee-detail']" type="primary" @click="showFeeSummary=true">{{$t('费用汇总')}}</el-button>
<el-table :data="feeList">
<el-table-column :label="$t('订单号')" prop="orderNo">
<template slot-scope="{row}">
......@@ -266,7 +271,6 @@
</el-table-column>
<el-table-column :label="$t('目的地')">
{{$l(objective, 'title') || '-'}}
{{$l(objective, 'title') || '-'}}
</el-table-column>
<el-table-column :label="$t('品名')" prop="titleZh">
<template slot-scope="{row}">
......@@ -416,12 +420,20 @@
<!--日志详情-->
<operate-log-detail v-if="showLogDetailId" :log-id="showLogDetailId" @close="showLogDetailId=null"></operate-log-detail>
<!-- 报关资料 -->
<declaration-documents v-if="showDeclaration" :order-id="order.orderId" :order-no="order.orderNo" @close="showDeclaration=false" />
<!--费用汇总-->
<fee-detail
v-if="showFeeSummary"
:order-id="order.orderId"
:currency-map="currencyMap"
@close="showFeeSummary=false" />
</div>
</template>
<script>
import { getOrder, operateLogPage } from '@/api/ecw/order'
import {getOrder, operateLogPage} from '@/api/ecw/order'
import { getDictDatas, DICT_TYPE, getDictData } from '@/utils/dict';
import PrintWarehouseReceipt from './components/PrintWarehouseReceipt'
import PrintLadingBill from './components/PrintLadingBill'
......@@ -431,16 +443,20 @@ import {getReceivableListByOrderId} from '@/api/ecw/receipt'
import { getChannel } from '@/api/ecw/channel';
import {listByIds} from '@/api/ecw/region'
import WarehouseDetail from './components/WarehouseDetail';
import {getProductBrank} from '@/api/ecw/productBrank'
import { parseTime } from '@/utils/ruoyi';
import WarehouseAreaSelect from "@/components/WarehouseAreaSelect"
import {checkPermi} from '@/utils/permission'
import OperateLogDetail from "@/views/ecw/order/components/OprateLogDetail";
import DeclarationDocuments from './components/DeclarationDocuments';
import ImageDisplay from "@/views/ecw/order/components/imageDisplay.vue";
import FeeDetail from "@/views/ecw/order/components/FeeDetail.vue";
export default {
name: "detail",
components: {
ImageDisplay,
OperateLogDetail,
PrintWarehouseReceipt, PrintLadingBill, WarehouseDetail, WarehouseAreaSelect
PrintWarehouseReceipt, PrintLadingBill, WarehouseDetail, WarehouseAreaSelect,DeclarationDocuments,
FeeDetail
},
filters: {
customsTypeFilter(e, customsTypeList) {
......@@ -484,7 +500,9 @@ export default {
showText:this.$t('显示更多'),
showMore:false,
consigneeText:this.$t('更多'),
showLogDetailId: null, // 显示日志详情的ID
showLogDetailId: null, // 显示日志详情的ID,
showDeclaration:false, //显示报关资料
showFeeSummary: false, // 是否显示费用汇总
}
},
computed:{
......
......@@ -301,7 +301,8 @@
{{sum.totalWorth.toFixed() || 0}}元
</el-descriptions-item>
<el-descriptions-item :label="$t('保价费')">
{{fee.insuranceFee || 0}} {{$t('美元')}}
{{fee.insuranceFee || 0}}
{{ selectedRouter ? currentcyMap[selectedRouter.currencyUnit || 1] : '' }}
</el-descriptions-item>
</el-descriptions>
</el-card>
......@@ -313,13 +314,21 @@
<el-input v-model="form.marks" ></el-input>
</el-form-item>
<el-form-item :label="$t('是否控货')" prop="isCargoControl" class="ml-20">
<dict-selector :type="DICT_TYPE.INFRA_BOOLEAN_STRING" formatter="bool" v-model="form.isCargoControl" form-type="radio"/>
<dict-selector :type="DICT_TYPE.INFRA_BOOLEAN_STRING"
v-model="form.isCargoControl"
formatter="bool"
form-type="radio"
:filter="(item) => {
return selectedRouter && selectedRouter.controlStatus === 1 && item.value === 'true' ? false : true
}"
/>
</el-form-item>
</div>
<div class="form-section" v-if="collectionProxy">
<el-form-item :label="$t('是否代收货款')" prop="isCollection">
<dict-selector :type="DICT_TYPE.INFRA_BOOLEAN_STRING" formatter="bool" v-model="form.isCollection" form-type="radio" :disabled="false" />
</el-form-item>
<!--代收货款,只有非控货订单、并且线路开通了代收货款后,才显示是否代收货款选项-->
<el-form-item :label="$t('代收货款金额')" v-if="collectionProxy && form.isCollection" prop="collectionProxy" class="ml-20">
<el-input type="number" v-model="form.collectionProxy" class="w-200 mr-10" :disabled="false"></el-input>
......@@ -329,6 +338,8 @@
<div class="form-section">
<el-form-item :label="$t('单证报关')" :span="2" prop="customsType">
<dict-selector :type="DICT_TYPE.ECW_CUSTOMS_TYPE" v-model="form.customsType" form-type="radio" defaultable :disabled="false" />
<!--自单代报显示提示-->
<div v-if="+form.customsType === 2" style="color:red;font-size:14px">{{$t('报关退税,请备齐资料。')}}</div>
</el-form-item>
</div>
<div>
......@@ -550,6 +561,7 @@ import SupplierSelector from '@/components/SupplierSelector'
import Decimal from 'decimal.js'
import WorkFlow from '@/components/WorkFlow'
import { getCustomer } from "@/api/ecw/customer";
import {debounce} from "@/utils";
// 缓存默认的表单数据
let makeDefaultFormData = () => {
......@@ -783,7 +795,7 @@ export default {
console.log('departureId', departureId)
this.getOpenedRouterList()
// 修改始发地后需要重新选择路线
if(oldDepartureId && oldDepartureId != departureId){
if(oldDepartureId && oldDepartureId != departureId && !this.initing){
console.log('修改始发地,重置lineId', oldDepartureId, departureId)
this.$set(this.form, 'lineId', null)
}
......@@ -792,7 +804,7 @@ export default {
'form.objectiveId'(objectiveId, oldObjectiveId){
this.getOpenedRouterList()
// 修改目的地后需要重新选择路线
if(oldObjectiveId && oldObjectiveId != objectiveId){
if(oldObjectiveId && oldObjectiveId != objectiveId && !this.initing){
console.log('修改目的地,重置lineId', oldObjectiveId, objectiveId)
this.$set(this.form, 'lineId', null)
}
......@@ -810,7 +822,7 @@ export default {
})
}
// 更换运输方式之后,之前选择的路线会失效,需要重新选择
if(oldTransportId && oldTransportId != transportId && transportId != this.selectedRouter?.transportType){
if(oldTransportId && oldTransportId != transportId && transportId != this.selectedRouter?.transportType && !this.initing){
console.log('重置路线',oldTransportId, transportId, this.selectedRouter?.transportType)
this.$set(this.form, 'lineId', undefined)
}
......@@ -834,6 +846,17 @@ export default {
this.$set(this.form, 'objectiveId', router.destCityId)
this.calculationPrice()
this.$nextTick(() => {
// 如果开启了默认送货上门,则默认选择送货上门,2是送货上门,10是默认送货上门
this.$set(this.form, 'harvestMethod', this.routeOtherServices.indexOf('2') > -1 && this.routeOtherServices.indexOf('10') > -1 ? '2' : '1')
// controlStatus 0 支持控货,1不支持控货
// 如果不支持控货,则控货不能选择是
if (router.controlStatus === 1) {
this.$set(this.form, 'isCargoControl', false)
}
})
},
/* 'form.packageTypeArr'(val){
console.log('packageType', val, val.length)
......@@ -922,6 +945,7 @@ export default {
// console.warn('onTableMounted', e)
},
getOrder(){
this.initing = true
getUpdateInfo(this.$route.query.id).then(res => {
this.form = Object.assign({}, {...res.data}, {orderItemVOList: []})
......@@ -975,6 +999,7 @@ export default {
// 如果已完成入仓,则需要监听必填内容,发生更改后需要填写审批表单
this.$nextTick(() => {
console.log('nextTick 订单渲染完成')
res.data.orderItemVOList.forEach(item => {
item.prodAttrArr = item.prodAttrIds.split(',').filter(item => item != '').map(attrId => +attrId)
this.form.orderItemVOList.push({...item})
......@@ -990,6 +1015,8 @@ export default {
}
this.initing = false
})
console.log('order数据加载成功')
}).catch(() => {
this.initing = false
})
......@@ -1095,21 +1122,23 @@ export default {
},
// 获取路线
getOpenedRouterList(){
debounce(() => {
let params = {}
if(this.form.departureId){
params.startCityId = this.form.departureId
params.startCityId = this.form.departureId
}
if(this.form.objectiveId){
params.destCityId = this.form.objectiveId
params.destCityId = this.form.objectiveId
}
if(this.form.transportId){
params.transportType = this.form.transportId
params.transportType = this.form.transportId
}
// 始发,目的和运输方式都没有的时候不获取
if(!params.startCityId && !params.destCityId && !params.transportType) return false
getOpenedRouterList(params).then(res => this.routerList = res.data.filter(item => {
return this.exportCityIds.indexOf(item.startCityId) > -1 && this.importCityIds.indexOf(item.destCityId) > -1
return this.exportCityIds.indexOf(item.startCityId) > -1 && this.importCityIds.indexOf(item.destCityId) > -1
}))
}, 100, false)()
},
// 计算体积
calcVolume(row){
......@@ -1130,7 +1159,7 @@ export default {
/** 提交按钮 */
// type 在新建的时候表示状态,0草稿,2带入仓
submitForm(submitType) {
this.$refs["form"].validate((valid, errors) => {
this.$refs["form"].validate(async (valid, errors) => {
if (!valid) {
return this.$showFormValidateErrors(errors)
}
......@@ -1166,6 +1195,13 @@ export default {
}
})
this.form.packageType = this.form.packageTypeArr.join(',')
// 付款人=发货人提示
if (+this.form.drawee === 1) {
await this.$confirm(this.$t('请再次确认运费由您支付还是收货人支付?'))
}
// 修改的提交
if (this.form.orderNo != null) {
let data = Object.assign({}, this.form, {
......
This diff is collapsed.
......@@ -23,7 +23,7 @@
</el-table-column>
<el-table-column :label="$t('金额')">
<template v-slot:default = 'scope'>
<el-input :disabled="isModify[forbidden(scope.row)]" v-model="scope.row.applicationFee" ></el-input>
<el-input :disabled="isModify[forbidden(scope.row)]" v-model.number="scope.row.applicationFee" ></el-input>
</template>
</el-table-column>
<el-table-column :label="$t('货币类型')">
......
......@@ -113,7 +113,7 @@
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" @click="handleQuery">{{$t('搜索')}}</el-button>
<el-button type="primary" icon="el-icon-search" @click="handleQuery" :loading="loading">{{$t('搜索')}}</el-button>
<el-button icon="el-icon-refresh" @click="resetQuery">{{$t('重置')}}</el-button>
</el-form-item>
</el-form>
......
......@@ -127,6 +127,7 @@
<el-button v-else-if="scope.row.orderExceptionStatus==2&&scope.row.orderExceptionType=='order_pick_up_exception'" v-hasPermi="['ecw:exception:pickUp']" size="mini" type="text" icon="el-icon-edit" @click="handEdit(scope.row)">{{$t('查看')}}</el-button>
<el-button v-else-if="scope.row.orderExceptionStatus==2&&scope.row.orderExceptionType=='not_customer_service_exception'" v-hasPermi="['ecw:exception:notCustomer']" size="mini" type="text" icon="el-icon-edit" @click="handEdit(scope.row)">{{$t('查看')}}</el-button>
<el-button v-else-if="scope.row.orderExceptionStatus==2&&scope.row.orderExceptionType=='goods_add_exception'" v-hasPermi="['ecw:exception:goodsAddException']" size="mini" type="text" icon="el-icon-edit" @click="handEdit(scope.row)">{{$t('查看')}}</el-button>
<el-button v-else-if="scope.row.orderExceptionStatus==2&&scope.row.orderExceptionType=='fee_exception'" v-hasPermi="['ecw:exception:feeException']" size="mini" type="text" icon="el-icon-edit" @click="handEdit(scope.row)">{{$t('查看')}}</el-button>
<el-tag style="margin-left:10px" v-if="scope.row.orderExceptionStatus==2">{{$t('已完成')}}</el-tag>
<el-button v-else-if="scope.row.orderExceptionType=='order_superfluous_box_exception'" v-hasPermi="['ecw:exception:superfluousBox']" size="mini" type="text" icon="el-icon-edit" @click="handEdit(scope.row)">{{$t('处理')}}</el-button>
......@@ -146,6 +147,7 @@
<el-button v-else-if="scope.row.orderExceptionType=='order_pick_up_exception'" v-hasPermi="['ecw:exception:pickUp']" size="mini" type="text" icon="el-icon-edit" @click="handEdit(scope.row)">{{$t('处理')}}</el-button>
<el-button v-else-if="scope.row.orderExceptionType=='not_customer_service_exception'" v-hasPermi="['ecw:exception:notCustomer']" size="mini" type="text" icon="el-icon-edit" @click="handEdit(scope.row)">{{$t('处理')}}</el-button>
<el-button v-else-if="scope.row.orderExceptionType=='goods_add_exception'" v-hasPermi="['ecw:exception:goodsAddException']" size="mini" type="text" icon="el-icon-edit" @click="handEdit(scope.row)">{{$t('处理')}}</el-button>
<el-button v-else-if="scope.row.orderExceptionType=='fee_exception'" v-hasPermi="['ecw:exception:feeException']" size="mini" type="text" icon="el-icon-edit" @click="handEdit(scope.row)">{{$t('处理')}}</el-button>
</template>
</el-table-column>
</el-table>
......
......@@ -8,10 +8,13 @@
<el-form v-if="orderData" :model="orderData" ref="queryForm" size="small" :inline="true" label-width="120px" class="card">
<el-row>
<el-form-item :label="$t('订单号')+':'">
{{orderData.orderNo || ''}}
<router-link :to="{path: '/order/detail',query: {orderId: orderData.orderId}}" class="link-type">
<span>{{orderData.orderNo || ''}}</span>
</router-link>
</el-form-item>
</el-row>
<div v-if="shopData&&orderExceptionData.orderExceptionType!='goods_add_exception'">
<div v-if="shopData&&['goods_add_exception','fee_exception',].indexOf(orderExceptionData.orderExceptionType) == -1">
<el-row>
<el-form-item :label="$t('产品名称')+':'" >
{{shopData.prodTitleZh || ''}}
......@@ -31,7 +34,7 @@
</el-row>
<!-- 单证异常,发货人异常,其他异常 不显示这部分内容 -->
<div v-if="['order_doc_exception','order_consignor_exception', 'order_other_exception'].indexOf(orderExceptionData.orderExceptionType) == -1">
<div v-if="['order_doc_exception','order_consignor_exception', 'order_other_exception','fee_exception'].indexOf(orderExceptionData.orderExceptionType) == -1">
<!-- 预付异常,提货异常,代收货款是针对整个订单的 -->
<template v-if="['order_pay_exception','order_pick_up_exception', 'order_cod_exception','not_customer_service_exception'].indexOf(orderExceptionData.orderExceptionType) > -1">
<el-row>
......@@ -159,7 +162,7 @@
</el-table>
<!-- 单证异常,发货人异常,其他异常的表格 -->
<el-table v-if="['order_doc_exception', 'order_consignor_exception', 'order_other_exception'].indexOf(orderExceptionData.orderExceptionType) > -1" v-loading="loading" border :data="orderData.orderItemVOList">
<el-table v-if="['order_doc_exception', 'order_consignor_exception', 'order_other_exception','fee_exception'].indexOf(orderExceptionData.orderExceptionType) > -1" v-loading="loading" border :data="orderData.orderItemVOList">
<el-table-column :label="$t('序号')" align="center" prop="id" type="index">
<template slot-scope="scope">
<span>{{scope.$index + 1}}</span>
......@@ -607,7 +610,7 @@
// that.orderExceptionData.orderExceptionType = 'order_other_exception'
// that.orderExceptionData.orderExceptionType = 'order_miss_exception'
// that.orderExceptionData.orderExceptionType = 'not_customer_service_exception'
// that.orderExceptionData.orderExceptionType = 'goods_add_exception'
// that.orderExceptionData.orderExceptionType = 'fee_exception'
that.loading = false;
that.orderId = response.data.orderId
that.getOrderData()
......
This diff is collapsed.
This diff is collapsed.
......@@ -48,8 +48,8 @@
<div>
{{$t('可拆')}}:
{{maxSplitNum}}{{$t('箱')}},
{{$t('体积')}}:{{leftData('volume')}}{{$t('m³')}}
{{$t('重量')}}:{{leftData('weight')}}{{$t('kg')}}
{{$t('体积')}}:{{leftData('volume')}}
{{$t('重量')}}:{{leftData('weight')}}kg
{{$t('数量')}}:{{leftData('quantity')}}{{$t('个')}}
</div>
</el-card>
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
......@@ -732,14 +732,20 @@ export default {
}else{
// 全包价 的阶段 设置和运费(全包价)不能为空
let stepPriceEmpty = false
this.form.priceStepList.forEach(item => {
this.form.priceStepList.forEach((item, index) => {
let notEmptyFields = ['startNum', 'endNum', 'weightUnit']
notEmptyFields.forEach(field => {
// 第一个阶梯的起始值不判断0
if(index === 0 && field == 'startNum' && item[field] == 0) return
if(!item[field] || item[field].toString().trim() == ''){
console.warn('notEmptyFields', field, item[field])
stepPriceEmpty = true
}
})
if((this.form.priceType == 0 && !item.transportPrice) || (this.form.priceType == 1 && !item.allPrice)){
console.warn('运费或者全包价未设置', index, item.transportPrice, item.allPrice)
stepPriceEmpty = true
}
})
......
This diff is collapsed.
......@@ -44,10 +44,15 @@
</el-form-item>
</div>
<div v-if="formData.areaType==0">
<el-form-item :label="$t('供应商类别')" prop="companyType">
<div>
<el-form-item v-if="formData.areaType==0" :label="$t('供应商类别')" prop="companyType">
<dict-selector v-model="formData.companyTypeArr" type="company_type" multiple disabled />
</el-form-item>
<el-form-item :label="$t('目的港码头')" prop="dockIds">
<el-select v-model="formData.dockIds" filterable multiple clearable disabled>
<el-option v-for="(item) in allDocks" :key="item.id" :label="$l(item, 'title')" :value="item.id"></el-option>
</el-select>
</el-form-item>
</div>
<div>
......@@ -420,6 +425,7 @@ export default {
this.formData = response.data
this.$set(this.formData, 'companyTypeArr', this.strToArray(response.data.companyType))
this.$set(this.formData, 'dockIds', this.strToArray(response.data.dockIds))
this.$set(this.formData, 'priceAdvantage', response.data.priceAdvantage==0?'':response.data.priceAdvantage)
this.$set(this.formData, 'settlementPeriod', response.data.settlementPeriod==0?null:response.data.settlementPeriod)
this.formData.bankList.forEach(item => {
......
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