Commit 91ce4ad4 authored by 我在何方's avatar 我在何方

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

parents e13f3da6 340c62b0
...@@ -328,6 +328,18 @@ export function downloadLoadGoodsList(params) { ...@@ -328,6 +328,18 @@ export function downloadLoadGoodsList(params) {
}); });
} }
/**
* 下载空运已装单
*/
export function downloadLoadGoods(params) {
return request({
url: "/ecw/box-preload-goods/downloadAirLoadGoodsList",
method: "get",
timeout: 120000,
params,
})
}
// 下载预装单 // 下载预装单
export function downloadPreloadGoodsList(params) { export function downloadPreloadGoodsList(params) {
return request({ return request({
...@@ -410,3 +422,11 @@ export function exportSettlementExcel(params) { ...@@ -410,3 +422,11 @@ export function exportSettlementExcel(params) {
params, params,
}); });
} }
// 刷新空运提单
export function updateAirBill(id) {
return request({
url: "/shipment/make-bill-of-lading/updateAirBill?ids=" + id,
method: "get"
});
}
...@@ -390,4 +390,16 @@ export function getLineInfo(params) { ...@@ -390,4 +390,16 @@ export function getLineInfo(params) {
method: "get", method: "get",
params params
}); });
}
/**
* 下载空运已装单
*/
export function downloadLoadGoods(params) {
return request({
url: "/ecw/box-preload-goods/downloadAirLoadGoodsList",
method: "get",
timeout: 120000,
params,
})
} }
\ No newline at end of file
...@@ -59,6 +59,15 @@ export function getProductList(params) { ...@@ -59,6 +59,15 @@ export function getProductList(params) {
}) })
} }
// 返回简洁的商品列表
export function getSimpleProductList(params) {
return request({
url: '/ecw/product/simpleList',
method: 'get',
params
})
}
// 获得产品分页 // 获得产品分页
export function getProductPage(query) { export function getProductPage(query) {
return request({ return request({
......
...@@ -207,9 +207,9 @@ export default { ...@@ -207,9 +207,9 @@ export default {
}, },
// 预览 // 预览
handlePictureCardPreview(file) { handlePictureCardPreview(file) {
// this.dialogImageUrl = file.url; this.dialogImageUrl = file.url;
// this.dialogVisible = true; this.dialogVisible = true;
window.open(file.url) // window.open(file.url)
}, },
// 对象转成指定字符串分隔 // 对象转成指定字符串分隔
listToString(list, separator) { listToString(list, separator) {
......
...@@ -12,39 +12,39 @@ ...@@ -12,39 +12,39 @@
<el-input v-model="queryParams.titleZh" :placeholder="$t('产品关键字')" style="width:120px" clearable :disabled="loading"/> <el-input v-model="queryParams.titleZh" :placeholder="$t('产品关键字')" style="width:120px" clearable :disabled="loading"/>
<el-button type="primary" @click="reLoad" :loading="loading">{{$t('搜索')}}</el-button> <el-button type="primary" @click="reLoad" :loading="loading">{{$t('搜索')}}</el-button>
<div v-if="showAll"> <div>
<el-checkbox :label="$t('全选') + `(${total > 500 ? $t('最多500') : $t('{total}个', {total})})`" @change="toggleAll" :disabled="isAllProduct || loading"></el-checkbox> <el-checkbox :label="$t('全选') + `(${$t('{total}个', {total})})`" @change="toggleAll" :disabled="isAllProduct || loading"></el-checkbox>
<el-checkbox :label="$t('全选库内商品(共{cnt}个)', {cnt: allTotal})" v-model="isAllProduct" :disabled="loading"></el-checkbox>
<el-checkbox v-if="showFiltered && enableFiltered" :label="$t('根据商品搜索结果(共{cnt}个)', {cnt: total})" v-model="isAllFiltered" :disabled="loading"></el-checkbox>
</div> </div>
</div> </div>
<div class="list"> <div class="list">
<div class="item" v-for="item in list" :key="item.id"> <div class="item" v-for="item in currentList" :key="item.id">
<el-checkbox @change="toggleCheck(item, $event)" :value="ids.indexOf(item.id) > -1" :disabled="isAllProduct" /> {{item.titleZh}} <el-checkbox @change="toggleCheck(item, $event)" :value="ids.indexOf(item.id) > -1" :disabled="isAllProduct" /> {{item.titleZh}}
<div>{{item.titleEn}}</div> <div>{{item.titleEn}}</div>
</div> </div>
</div> </div>
<el-pagination :total="list.length" :page-sizes="[100, 200, 300, 500]" :page-size="pageSize" @current-change="leftPage = $event" layout="prev, pager, next, total, sizes" :current-page="leftPage" />
</el-card> </el-card>
</div> </div>
<div class="flex-1 ml-10"> <div class="flex-1 ml-10">
<el-card style="height:100%"> <el-card style="height:100%">
<div slot="header" class="header flex"> <div slot="header" class="header flex">
<div class="flex-1 flex items-center">{{$t('已选{cnt}个产品', {cnt: isAllProduct || isAllFiltered ? total : choosedList.length})}}</div> <div class="flex-1 flex items-center">{{$t('已选{cnt}个产品', {cnt: choosedList.length})}}</div>
<el-button :disabled="!choosedList.length" type="text" @click="clearAll">{{$t('全部清除')}}</el-button> <el-button :disabled="!choosedList.length" type="text" @click="clearAll">{{$t('全部清除')}}</el-button>
</div> </div>
<div class="list"> <div class="list">
<div class="item" v-for="(choosed) in choosedList" :key="choosed.id" :data-data="JSON.stringify(choosed)"> <div class="item" v-for="(choosed) in selectedList" :key="choosed.id" :data-data="JSON.stringify(choosed)">
<el-link class="el-icon-delete" @click="remove(choosed)" :disabled="isAllProduct"/> {{choosed.titleZh}} <el-link class="el-icon-delete" @click="remove(choosed)" :disabled="isAllProduct"/> {{choosed.titleZh}}
<div>{{choosed.titleEn}}</div> <div>{{choosed.titleEn}}</div>
</div> </div>
</div> </div>
<el-pagination :total="choosedList.length" :page-sizes="[100, 200, 300, 500]" :page-size="pageSize" @current-change="rightPage = $event" layout="prev, pager, next, total, sizes" :current-page="rightPage" />
</el-card> </el-card>
</div> </div>
</div> </div>
</template> </template>
<script> <script>
import {getProductPage, getProductList, getProductIds} from '@/api/ecw/product' import {getProductPage, getProductList, getProductIds, getSimpleProductList} from '@/api/ecw/product'
import { getProductTypeList } from '@/api/ecw/productType' import { getProductTypeList } from '@/api/ecw/productType'
import { getProductAttrList } from '@/api/ecw/productAttr' import { getProductAttrList } from '@/api/ecw/productAttr'
...@@ -67,11 +67,10 @@ export default { ...@@ -67,11 +67,10 @@ export default {
list: [], list: [],
page: 1, page: 1,
pages: 1, pages: 1,
total: 0, // 当前筛选条件的商品总数
allTotal: 0, // 全库商品总数 allTotal: 0, // 全库商品总数
queryParams: { queryParams: {
pageNo: 1, pageNo: 1,
pageSize: 500, pageSize: 10000,
attrId: null, attrId: null,
titleZh: null, titleZh: null,
typeId: null typeId: null
...@@ -80,12 +79,21 @@ export default { ...@@ -80,12 +79,21 @@ export default {
typeList: [], typeList: [],
attrList: [], attrList: [],
isAllProduct: false, isAllProduct: false,
isAllFiltered: false, // 是否全部搜索结果 //isAllFiltered: false, // 是否全部搜索结果
// 是否显示搜索结果勾选,有筛选条件才显示 // 是否显示搜索结果勾选,有筛选条件才显示
showFiltered: false showFiltered: false,
// 左侧页码
leftPage: 1,
// 右侧页码
rightPage: 1,
// 页大小
pageSize: 100
} }
}, },
computed: { computed: {
total(){
return this.list.length
},
ids: { ids: {
get() { get() {
let arr = [] let arr = []
...@@ -97,6 +105,14 @@ export default { ...@@ -97,6 +105,14 @@ export default {
set(v) { set(v) {
} }
},
// 左侧当前显示的列表
currentList(){
return this.list.slice((this.leftPage - 1) * this.pageSize, this.leftPage * this.pageSize)
},
// 已勾选的显示列表
selectedList(){
return this.choosedList.slice((this.rightPage - 1) * this.pageSize, this.rightPage * this.pageSize)
} }
}, },
watch: { watch: {
...@@ -108,11 +124,11 @@ export default { ...@@ -108,11 +124,11 @@ export default {
this.choosedList = [] this.choosedList = []
this.$emit('setall', isAllProduct) this.$emit('setall', isAllProduct)
}, },
isAllFiltered(isAllFiltered){ /*isAllFiltered(isAllFiltered){
this.choosedList = [] this.choosedList = []
this.isAllProduct = false this.isAllProduct = false
this.$emit('setFiltered', isAllFiltered) this.$emit('setFiltered', isAllFiltered)
}, },*/
defaultIds(newValue, oldValue){ defaultIds(newValue, oldValue){
if(!oldValue || !oldValue.length){ if(!oldValue || !oldValue.length){
this.loadDefaultProds() this.loadDefaultProds()
...@@ -122,27 +138,28 @@ export default { ...@@ -122,27 +138,28 @@ export default {
this.isAllProduct = isall this.isAllProduct = isall
} }
}, },
created() { async created() {
getProductTypeList().then(res => this.typeList = res.data) getProductTypeList().then(res => this.typeList = res.data)
getProductAttrList().then(res => this.attrList = res.data) getProductAttrList().then(res => this.attrList = res.data)
this.reLoad() await this.reLoad()
this.ids = this.defaultIds //数据回显 this.ids = this.defaultIds //数据回显
this.isAllProduct = this.isall this.isAllProduct = this.isall
// 如果有默认商品则获取内容供回显 // 如果有默认商品则获取内容供回显
if(this.defaultIds.length){ if(this.defaultIds.length){
this.loadDefaultProds() this.setDefaultChooseProds()
//this.loadDefaultProds()
} }
// 获取全库商品总数 // 获取全库商品总数
getProductPage({pageNo: 1, pageSize: 1}).then(res => { /*getProductPage({pageNo: 1, pageSize: 1}).then(res => {
this.allTotal = res.data.total this.allTotal = res.data.total
}) })*/
}, },
methods: { methods: {
/* setAllProduct(status){ /* setAllProduct(status){
this.isAllProduct = true this.isAllProduct = true
}, */ }, */
loadDefaultProds(){ /*loadDefaultProds(){
if(!this.defaultIds || !this.defaultIds.length){ if(!this.defaultIds || !this.defaultIds.length){
return false return false
} }
...@@ -151,16 +168,24 @@ export default { ...@@ -151,16 +168,24 @@ export default {
this.choose(item) this.choose(item)
}) })
}) })
},*/
// 设置默认选中的商品
setDefaultChooseProds(){
this.list.forEach(item => {
if(this.defaultIds.indexOf(item.id) > -1){
this.choose(item)
}
})
}, },
toggleAll(status){ toggleAll(status){
this.list.forEach(item => { this.list.forEach(item => {
this.toggleCheck(item, status) this.toggleCheck(item, status)
}) })
}, },
reLoad() { async reLoad() {
this.queryParams.page = 1 this.queryParams.page = 1
this.list = [] this.list = []
this.getList() await this.getList()
}, },
loadNextPage() { loadNextPage() {
if (this.page >= this.pages) { if (this.page >= this.pages) {
...@@ -169,19 +194,11 @@ export default { ...@@ -169,19 +194,11 @@ export default {
this.queryParams.page++ this.queryParams.page++
this.getList() this.getList()
}, },
getList() { async getList() {
this.loading = true this.loading = true
getProductPage(this.queryParams).then(res => { let res = await getSimpleProductList(this.queryParams)
this.list = res.data.list //.concat(res.data.list || []) this.loading = false
this.page = res.data.page this.list = res.data
this.pages = res.data.pages
this.total = res.data.total
// 必须在搜索之后才显示勾选,这个时候才有数量
this.showFiltered = !!this.queryParams.attrId || !!this.queryParams.titleZh || !!this.queryParams.typeId
}).finally(() => {
this.loading = false
})
}, },
// 获得指定条件的商品的全部ID // 获得指定条件的商品的全部ID
getFilteredIds(){ getFilteredIds(){
......
...@@ -191,7 +191,7 @@ export default { ...@@ -191,7 +191,7 @@ export default {
this.$emit('input', data) this.$emit('input', data)
this.dialogVisible = false this.dialogVisible = false
if (this.isEditing || this.warehouseInId) { if ((this.isEditing || this.warehouseInId) && this.warehouseInId) {
updateWarehouseInLocation({ updateWarehouseInLocation({
"orderId": this.orderId, "orderId": this.orderId,
"orderItemId": this.orderItemId, "orderItemId": this.orderItemId,
......
...@@ -3832,7 +3832,7 @@ ...@@ -3832,7 +3832,7 @@
"流程详情": "Flow details", "流程详情": "Flow details",
"收款单核销审核": "The payment voucher verification review", "收款单核销审核": "The payment voucher verification review",
"系统提示": "System prompt", "系统提示": "System prompt",
"合计:{totalNum}箱,{totalVolume}m³(测) {totalChargeVolume}m³(重) {totalWeight}KG": "Total:{totalNum}Box,{totalVolume}m³(Test) {totalChargeVolume}m³(Weight) {totalWeight}KG", "合计:{totalNum}箱,{totalVolume}m³(测) {totalChargeVolume}m³(重) {totalWeight}KG(测), {totalChargeWeight}kg(收费)": "Total:{totalNum}Box,{totalVolume}m³(measure) {totalChargeVolume}m³(Weight) {totalWeight}KG(measure),{totalChargeWeight}kg(charge)",
"确定要取消此报价单么?": "Are you sure you want to cancel this quote?", "确定要取消此报价单么?": "Are you sure you want to cancel this quote?",
"确定要恢复此报价单么?": "Are you sure you want to restore this quote?", "确定要恢复此报价单么?": "Are you sure you want to restore this quote?",
"确定要删除此报价单么?": "Are you sure you want to delete this quote?", "确定要删除此报价单么?": "Are you sure you want to delete this quote?",
......
...@@ -86,7 +86,7 @@ ...@@ -86,7 +86,7 @@
</el-table-column> </el-table-column>
</el-table> </el-table>
<!-- 分页组件 --> <!-- 分页组件 -->
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNo" :limit.sync="queryParams.pageSize" <pagination v-show="total > 0" :total="total" :page.sync="queryParams.page" :limit.sync="queryParams.rows"
@pagination="getList"/> @pagination="getList"/>
<!-- 对话框(添加 / 修改) --> <!-- 对话框(添加 / 修改) -->
...@@ -158,8 +158,10 @@ export default { ...@@ -158,8 +158,10 @@ export default {
dateRangeCreateTime: [], dateRangeCreateTime: [],
// 查询参数 // 查询参数
queryParams: { queryParams: {
pageNo: 1, // pageNo: 1,
pageSize: 10, // pageSize: 10,
page: 1,
rows: 10,
titleZh: null, titleZh: null,
titleEn: null, titleEn: null,
validateStart: null, validateStart: null,
......
...@@ -134,12 +134,12 @@ ...@@ -134,12 +134,12 @@
</el-button> </el-button>
<el-dropdown-menu slot="dropdown"> <el-dropdown-menu slot="dropdown">
<el-dropdown-item command="downloadPreloadGoodsList" v-hasPermi="['shipment:air:download:downloadPreloadGoodsList']">{{$t('预装单')}}</el-dropdown-item> <el-dropdown-item command="downloadPreloadGoodsList" v-hasPermi="['shipment:air:download:downloadPreloadGoodsList']">{{$t('预装单')}}</el-dropdown-item>
<!--el-dropdown-item command="downloadLoadGoodsList" v-hasPermi="['shipment:air:download:downloadLoadGoodsList']">{{$t('已装单')}}</el-dropdown-item-->
<el-dropdown-item command="downloadReceivableList" v-hasPermi="['shipment:air:download:downloadReceivableList']">{{$t('应收汇总表')}}</el-dropdown-item> <el-dropdown-item command="downloadReceivableList" v-hasPermi="['shipment:air:download:downloadReceivableList']">{{$t('应收汇总表')}}</el-dropdown-item>
<el-dropdown-item command="downloadAgentListFiles" v-hasPermi="['shipment:air:download:downloadAgentListFiles']">agent list</el-dropdown-item> <el-dropdown-item command="downloadAgentListFiles" v-hasPermi="['shipment:air:download:downloadAgentListFiles']">agent list</el-dropdown-item>
<el-dropdown-item command="downloadSoncapFiles" v-hasPermi="['shipment:air:download:downloadSoncapFiles']">soncap</el-dropdown-item> <el-dropdown-item command="downloadSoncapFiles" v-hasPermi="['shipment:air:download:downloadSoncapFiles']">soncap</el-dropdown-item>
<el-dropdown-item command="zipDownload" v-hasPermi="['shipment:air:download:zipDownload']">{{$t('提货单')}}</el-dropdown-item> <el-dropdown-item command="zipDownload" v-hasPermi="['shipment:air:download:zipDownload']">{{$t('提货单')}}</el-dropdown-item>
<el-dropdown-item command="downloadLadingCopy" v-hasPermi="['shipment:air:download:downloadLadingCopy']">{{$t('提单Copy')}}</el-dropdown-item> <el-dropdown-item command="downloadLadingCopy" v-hasPermi="['shipment:air:download:downloadLadingCopy']">{{$t('提单Copy')}}</el-dropdown-item>
<el-dropdown-item command="downloadLoadGoods" v-hasPermi="['shipment:air:download:downloadLoadGoods']">{{$t('已装单')}}</el-dropdown-item>
</el-dropdown-menu> </el-dropdown-menu>
</el-dropdown> </el-dropdown>
</template> </template>
...@@ -211,6 +211,7 @@ import { ...@@ -211,6 +211,7 @@ import {
} from '@/api/ecw/box' } from '@/api/ecw/box'
import { getLineInfo } from '@/api/ecw/boxAir' import { getLineInfo } from '@/api/ecw/boxAir'
import { getChannelList } from '@/api/ecw/channel' import { getChannelList } from '@/api/ecw/channel'
import { downloadLoadGoods } from '@/api/ecw/boxAir'
import { getWarehouseList } from '@/api/ecw/warehouse' import { getWarehouseList } from '@/api/ecw/warehouse'
import costForm from './costForm.vue' import costForm from './costForm.vue'
import regError from './regError.vue' import regError from './regError.vue'
...@@ -237,8 +238,8 @@ export default { ...@@ -237,8 +238,8 @@ export default {
cabinetList:[], cabinetList:[],
dateTypes: [ dateTypes: [
{ value: '1', label: this.$t('分拣时间') }, { value: '1', label: this.$t('分拣时间') },
{ value: '2', label: this.$t('装柜时间') }, { value: '7', label: this.$t('出仓时间') },
{ value: '3', label: this.$t('时间') }, { value: '3', label: this.$t('时间') },
{ value: '4', label: this.$t('到港时间') }, { value: '4', label: this.$t('到港时间') },
{ value: '5', label: this.$t('清关时间') }, { value: '5', label: this.$t('清关时间') },
{ value: '6', label: this.$t('提货时间') } { value: '6', label: this.$t('提货时间') }
...@@ -597,6 +598,13 @@ export default { ...@@ -597,6 +598,13 @@ export default {
case "downloadLadingCopy": case "downloadLadingCopy":
downloadFileByUrl(command, {shipmentId: row.id}); downloadFileByUrl(command, {shipmentId: row.id});
break; break;
case "downloadLoadGoods":
if(row.tyStatus < 2112){
this.$message.error('请先完成理货后,再下载已装单')
return
}
this.exportExcel(downloadLoadGoods, { shipmentId: row.id }, this.$t("已装单") + `(${row.selfNo}).xls`)
break;
case "handle": case "handle":
const { noticeType } = row; const { noticeType } = row;
if ([1, 2, 3, 4, 8, 14].includes(noticeType)) { if ([1, 2, 3, 4, 8, 14].includes(noticeType)) {
......
...@@ -101,7 +101,7 @@ ...@@ -101,7 +101,7 @@
<el-dialog :title="dialogCfg.title" :visible.sync="dialogCfg.visible" :width="dialogCfg.width" :fullscreen="dialogCfg.fullscreen" append-to-body class="shippingSea-dialog" @closed="dialogclosed"> <el-dialog :title="dialogCfg.title" :visible.sync="dialogCfg.visible" :width="dialogCfg.width" :fullscreen="dialogCfg.fullscreen" append-to-body class="shippingSea-dialog" @closed="dialogclosed">
<makeLadingBill v-if="dialogCfg.visible && ['makeBill','queryBill','resetBill'].includes(dialogCfg.type)" :currData="currData" :currRow="currRow" :dialogCfg="dialogCfg" @closeDialog="closeDialog" :selfNo="shipmentObj.selfNo" /> <makeLadingBill v-if="dialogCfg.visible && ['makeBill','queryBill','resetBill'].includes(dialogCfg.type)" :currData="currData" :currRow="currRow" :dialogCfg="dialogCfg" @closeDialog="closeDialog" :selfNo="shipmentObj.selfNo" />
<previewBill v-if="dialogCfg.type === 'previewBill'" :contentHtml="currData.billContent" :currRow="currRow" :type="dialogCfg.type" /> <previewBill v-if="dialogCfg.type === 'previewBill'" :contentHtml="currData.billContent" :currRow="currRow" :type="dialogCfg.type" :air="type === 'air'" />
</el-dialog> </el-dialog>
</el-row> </el-row>
</template> </template>
...@@ -248,7 +248,7 @@ export default { ...@@ -248,7 +248,7 @@ export default {
let billContent = `${titleZh}${data.orderInfo}${contentZh}`; let billContent = `${titleZh}${data.orderInfo}${contentZh}`;
this.currData = { this.currData = {
billContent, billContent,
orderNo: this.currRow.orderNo, orderNo: row.orderNo,
}; };
}).catch(() => { }).catch(() => {
throw new Error('制作提单失败') throw new Error('制作提单失败')
......
...@@ -63,7 +63,7 @@ export default { ...@@ -63,7 +63,7 @@ export default {
currData: Object, currData: Object,
currRow: Object, currRow: Object,
dialogCfg: Object, dialogCfg: Object,
selfNo: String selfNo: String,
}, },
data() { data() {
return { return {
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
<el-row v-if="currRow.status === 2 && type === 'previewBill'" style="text-align: center;"> <el-row v-if="currRow.status === 2 && type === 'previewBill'" style="text-align: center;">
<el-button type="primary" @click="download">{{$t('下载')}}</el-button> <el-button type="primary" @click="download">{{$t('下载')}}</el-button>
<el-button type="primary" @click="print">{{$t('打印')}}</el-button> <el-button type="primary" @click="print">{{$t('打印')}}</el-button>
<el-button type="primary" @click="createPdf">{{$t('刷新提单文件')}}</el-button> <el-button type="primary" @click="update">{{$t('刷新提单文件')}}</el-button>
</el-row> </el-row>
</el-row> </el-row>
</template> </template>
...@@ -16,6 +16,7 @@ import FileSaver from "file-saver"; ...@@ -16,6 +16,7 @@ import FileSaver from "file-saver";
import html2canvas from 'html2canvas'; import html2canvas from 'html2canvas';
import { jsPDF } from "jspdf"; import { jsPDF } from "jspdf";
import {uploadFile} from '@/api/infra/file' import {uploadFile} from '@/api/infra/file'
import {updateAirBill} from "@/api/ecw/box";
export default { export default {
name: "previewBill", name: "previewBill",
...@@ -23,8 +24,22 @@ export default { ...@@ -23,8 +24,22 @@ export default {
contentHtml: String, contentHtml: String,
currRow: Object, currRow: Object,
type: String, type: String,
// 是否是空运
air: Boolean,
}, },
methods: { methods: {
// 刷新提单
update(){
if(this.air){
let loading = this.$loading()
return updateAirBill(this.currRow.orderId).then(res => {
this.$message.success(this.$t('刷新成功'))
}).finally(() => {
loading.close()
})
}
this.createPdf()
},
download() { download() {
_BOX["downloadBillService"]({ id: this.currRow.id }).then((res) => { _BOX["downloadBillService"]({ id: this.currRow.id }).then((res) => {
if (res.data && res.data.imgUrl) { if (res.data && res.data.imgUrl) {
...@@ -46,9 +61,9 @@ export default { ...@@ -46,9 +61,9 @@ export default {
} }
const _left = (595.28-_w)/2; const _left = (595.28-_w)/2;
doc.addImage(canvas, 'PNG', _left, 0, _w,_h, '', 'FAST'); doc.addImage(canvas, 'PNG', _left, 0, _w,_h, '', 'FAST');
return _BOX["downloadBillService"]({ id: this.currRow.id }) return _BOX["downloadBillService"]({ id: this.currRow.id })
}).then(res => { }).then(res => {
let form = new FormData() let form = new FormData()
let pathname = (new URL(res.data.imgUrl)).pathname let pathname = (new URL(res.data.imgUrl)).pathname
......
...@@ -573,6 +573,7 @@ export default { ...@@ -573,6 +573,7 @@ export default {
fileFormat ?? "xlsx" fileFormat ?? "xlsx"
); );
} }
this.$message.success(this.$t('已加入导出队列,请稍后在下载日志中下载'))
}, },
handleApproval(id) { handleApproval(id) {
this.$router.push({path: '/bpm/process-instance/detail', query: {id: id}}) this.$router.push({path: '/bpm/process-instance/detail', query: {id: id}})
......
...@@ -166,7 +166,7 @@ ...@@ -166,7 +166,7 @@
</el-table-column> </el-table-column>
<el-table-column prop="billAbnId" :label="$t('异常')" align="center"> <el-table-column prop="billAbnId" :label="$t('异常')" align="center">
<template slot-scope="scope"> <template slot-scope="scope">
<dict-tag :type="DICT_TYPE.BOX_AIR_SHIPMENT_PROCESS" :value="scope.row.billAbnId" /> <dict-tag :type="DICT_TYPE[getregprocess(scope.row.opStep)]" :value="scope.row.billAbnId" />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="abnDetail" :label="$t('异常描述')" align="center" width="300"></el-table-column> <el-table-column prop="abnDetail" :label="$t('异常描述')" align="center" width="300"></el-table-column>
...@@ -321,27 +321,33 @@ export default { ...@@ -321,27 +321,33 @@ export default {
costDetail: {}, costDetail: {},
// 下载 // 下载
downloadList: [ downloadList: [
{ title: this.$t("预装单"), serviceName: "downloadPreloadGoodsList", hasPermi: "shipment:box:download:downloadPreloadGoodsList" }, { title: this.$t("预装单"), serviceName: "downloadPreloadGoodsList", hasPermi: "shipment:air:download:downloadPreloadGoodsList" },
// { title: this.$t("已装单"), serviceName: "downloadLoadGoodsList", hasPermi: "shipment:box:download:downloadLoadGoodsList" }, // { title: this.$t("已装单"), serviceName: "downloadLoadGoodsList", hasPermi: "shipment:box:download:downloadLoadGoodsList" },
{ title: this.$t("应收汇总表"), serviceName: "downloadReceivableList", hasPermi: "shipment:box:download:downloadReceivableList" }, { title: this.$t("应收汇总表"), serviceName: "downloadReceivableList", hasPermi: "shipment:air:download:downloadReceivableList" },
{ {
title: this.$t("提货单"), title: this.$t("提货单"),
serviceName: "zipDownload", serviceName: "zipDownload",
fileFormat: "zip", fileFormat: "zip",
hasPermi: "shipment:box:download:zipDownload" hasPermi: "shipment:air:download:zipDownload"
}, },
{ {
title: "agent list", title: "agent list",
serviceName: "downloadAgentListFiles", serviceName: "downloadAgentListFiles",
type: "url", type: "url",
hasPermi: "shipment:box:download:downloadAgentListFiles" hasPermi: "shipment:air:download:downloadAgentListFiles"
}, },
{ title: "soncap", serviceName: "downloadSoncapFiles", type: "url", hasPermi: "shipment:box:download:downloadSoncapFiles" }, { title: "soncap", serviceName: "downloadSoncapFiles", type: "url", hasPermi: "shipment:air:download:downloadSoncapFiles" },
{ {
title: this.$t("提单Copy"), title: this.$t("提单Copy"),
serviceName: "downloadLadingCopy", serviceName: "downloadLadingCopy",
type: "url", type: "url",
hasPermi: "shipment:box:download:downloadLadingCopy" hasPermi: "shipment:air:download:downloadLadingCopy"
},
{
title: this.$t("已装单"),
serviceName: "downloadLoadGoods",
type: "url",
hasPermi: "shipment:air:download:downloadLoadGoods"
}, },
], ],
// 选中行 // 选中行
...@@ -362,6 +368,24 @@ export default { ...@@ -362,6 +368,24 @@ export default {
}; };
}, },
methods: { methods: {
getregprocess(val) {
var data = ''
switch(val){
case 10:
data = 'FLYING_TICKET_EXCEPTION'
break;
case 12:
data = 'ARRIVAL_TICKET_EXCEPTION'
break
case 13:
data = 'CLEARANCE_TICKET_EXCEPTION'
break
default:
data = 'BOX_SHIPPING_TICKET_EXCEPTION'
break
}
return data
},
selectable(row, index) { selectable(row, index) {
if (row.abnormalDealStatus === 1) return false; if (row.abnormalDealStatus === 1) return false;
return true; return true;
...@@ -655,6 +679,7 @@ export default { ...@@ -655,6 +679,7 @@ export default {
fileFormat ?? "xlsx" fileFormat ?? "xlsx"
); );
} }
this.$message.success(this.$t('已加入导出队列,请稍后在下载日志中下载'))
}, },
handleApproval(id) { handleApproval(id) {
this.$router.push({path: '/bpm/process-instance/detail', query: {id: id}}) this.$router.push({path: '/bpm/process-instance/detail', query: {id: id}})
......
...@@ -27,12 +27,12 @@ ...@@ -27,12 +27,12 @@
<userSelect v-model="errorObj.notifyUsers" :placeholder="$t('请选择通知人')" :allUsers="this.$attrs.allUsers" multiple /> <userSelect v-model="errorObj.notifyUsers" :placeholder="$t('请选择通知人')" :allUsers="this.$attrs.allUsers" multiple />
</el-form-item> </el-form-item>
<!-- <el-form-item :label="$t('是否更新订单状态')"> <el-form-item :label="$t('是否更新订单动态')">
<el-radio-group v-model="errorObj.orderStatus"> <el-radio-group v-model="errorObj.updateStatus">
<el-radio v-for="item in status" :key="item.value" :label="item.value">{{item.label}}</el-radio> <el-radio v-for="item in status" :key="item.value" :label="item.value">{{item.label}}</el-radio>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
<el-form-item :label="$t('中文内容')"> <!-- <el-form-item :label="$t('中文内容')">
<el-input v-model="errorObj.contentZh" type="textarea" rows="2" :placeholder="$t('请输入中文内容')"></el-input> <el-input v-model="errorObj.contentZh" type="textarea" rows="2" :placeholder="$t('请输入中文内容')"></el-input>
</el-form-item> </el-form-item>
<el-form-item :label="$t('英文内容')"> <el-form-item :label="$t('英文内容')">
......
...@@ -48,9 +48,9 @@ ...@@ -48,9 +48,9 @@
</el-table-column> </el-table-column>
<el-table-column :label="$t('订单数')" align="center" prop="orderCount" /> <el-table-column :label="$t('订单数')" align="center" prop="orderCount" />
<el-table-column :label="$t('箱数')" align="center" prop="sumNum" /> <el-table-column :label="$t('箱数')" align="center" prop="sumNum" />
<el-table-column :label="$t('入仓体积')" align="center" prop="sumVolume" /> <el-table-column :label="$t('体积')" align="center" prop="sumVolume" />
<el-table-column :label="$t('入仓重量')" align="center" prop="sumWeight" /> <el-table-column :label="$t('重量')" align="center" prop="sumWeight" />
<el-table-column :label="$t('入仓数量(个)')" align="center" prop="sumQuantity" /> <el-table-column :label="$t('数量(个)')" align="center" prop="sumQuantity" />
<el-table-column :label="$t('状态')" align="center" prop="tallyStatus"> <el-table-column :label="$t('状态')" align="center" prop="tallyStatus">
<template slot-scope="scope"> <template slot-scope="scope">
{{ statusData[scope.row.status] }} {{ statusData[scope.row.status] }}
......
...@@ -18,7 +18,7 @@ ...@@ -18,7 +18,7 @@
</div> </div>
<el-collapse-transition> <el-collapse-transition>
<div v-if="item.fold === false ? true : false"> <div v-if="item.fold === false ? true : false">
<div v-for="(secGoog, index) in item.sectionOrderList" :key="index" class="part-secGoog"> <div v-for="(secGoog, index) in item.sectionOrderList" :key="index" class="part-secGoog-not">
<p>{{secGoog.orderNo}}</p> <p>{{secGoog.orderNo}}</p>
<p>{{secGoog.prodTitleZh}}</p> <p>{{secGoog.prodTitleZh}}</p>
<div> <div>
...@@ -567,6 +567,21 @@ export default { ...@@ -567,6 +567,21 @@ export default {
} }
} }
} }
.part-secGoog-not {
margin-top: 5px;
display: flex;
> p {
margin-right: 10px;
color: #4f9cdd;
}
> div {
flex: 1;
> i {
cursor: pointer;
color: red;
}
}
}
} }
} }
.right-area { .right-area {
......
...@@ -140,7 +140,7 @@ export default { ...@@ -140,7 +140,7 @@ export default {
this.$set(this.subMaterialObj,'soNo',this.shipmentObj.bookAirInfo?.sono||undefined) this.$set(this.subMaterialObj,'soNo',this.shipmentObj.bookAirInfo?.sono||undefined)
this.$set(this.subMaterialObj,'blMblNo',this.shipmentObj.bookAirInfo?.blNo||undefined) this.$set(this.subMaterialObj,'blMblNo',this.shipmentObj.bookAirInfo?.blNo||undefined)
this.$set(this.subMaterialObj,'markNo',"N/M") this.$set(this.subMaterialObj,'markNo',"N/M")
this.$set(this.subMaterialObj,'startPortId',this.shipmentObj.bookAirInfo?.bigPortId||undefined) this.$set(this.subMaterialObj,'startPortId',this.shipmentObj.bookAirInfo?.departurePortId||undefined)
this.$set(this.subMaterialObj,'shipCompanyId',Number(this.shipmentObj.bookAirInfo?.shipCompanyType)||undefined) this.$set(this.subMaterialObj,'shipCompanyId',Number(this.shipmentObj.bookAirInfo?.shipCompanyType)||undefined)
this.$set(this.subMaterialObj,'destPortId',this.shipmentObj.bookAirInfo?.destPortId||undefined) this.$set(this.subMaterialObj,'destPortId',this.shipmentObj.bookAirInfo?.destPortId||undefined)
this.$set(this.subMaterialObj,'kgs',this.shipmentObj.customsInfo?.dcGoodsWgt||undefined) this.$set(this.subMaterialObj,'kgs',this.shipmentObj.customsInfo?.dcGoodsWgt||undefined)
......
...@@ -20,9 +20,21 @@ ...@@ -20,9 +20,21 @@
</el-card> </el-card>
<el-row style="margin-top: 15px"> <el-row style="margin-top: 15px">
<el-row> <el-row class="table-title">
<el-button :disabled="shipmentObj.approvaling" size="small" type="primary" @click="()=>tallyClick('batch')">{{$t('批量理货')}}</el-button> <div>
<el-button :disabled="shipmentObj.approvaling" size="small" type="primary" @click="()=>removeClick('batch')">{{$t('批量移出')}}</el-button> <el-button :disabled="shipmentObj.approvaling" size="small" type="primary" @click="()=>tallyClick('batch')">{{$t('批量理货')}}</el-button>
<el-button :disabled="shipmentObj.approvaling" size="small" type="primary" @click="()=>removeClick('batch')">{{$t('批量移出')}}</el-button>
</div>
<div>
<template>
<el-input v-model="qrCode" :placeholder="$t('请输入二维码/条码编号')" clearable></el-input>
<el-button type="primary" @click="handlerBatchCreate('single')">{{$t('确定')}}</el-button>
<el-button type="primary" @click="handlerClick('batchInput',$t('批量输入'))">{{$t('批量输入')}}</el-button>
<el-button type="primary" @click="handlerClick('correction',$t('理货纠错'))">{{$t('理货纠错')}}</el-button>
<el-button type="primary" @click="handlerClick('correctionOrder',$t('批量理货纠错'))">{{$t('批量理货纠错')}}</el-button>
</template>
</div>
</el-row> </el-row>
<el-row style="margin-top: 5px"> <el-row style="margin-top: 5px">
<el-table border :data="tallyList" @select="checkboxSelect" @select-all="checkboxSelect" max-height="600px"> <el-table border :data="tallyList" @select="checkboxSelect" @select-all="checkboxSelect" max-height="600px">
...@@ -123,13 +135,83 @@ ...@@ -123,13 +135,83 @@
append-to-body append-to-body
@cancel="currentTurnExceptionOrder=null" @cancel="currentTurnExceptionOrder=null"
@success="currentTurnExceptionOrder=null" /> @success="currentTurnExceptionOrder=null" />
<!-- 对话框 -->
<el-dialog custom-class="shipping-dialog" :title="dialogConfig.title" :visible.sync="dialogConfig.dialogVisible" :fullscreen="dialogConfig.fullscreen" :width="dialogConfig.width" :modal-append-to-body=false append-to-body>
<!-- 装柜纠错 -->
<template v-if="dialogConfig.type === 'correction' && dialogConfig.dialogVisible">
<el-form ref="correctionForm" :rules="rules" :model="correctionObj" label-position="top">
<el-form-item :label="$t('装柜纠错(二维码/条形码编号)')" prop="qrCode">
<el-input v-model="correctionObj.qrCode" :placeholder="$t('请输入二维码/条形码编号')" clearable />
</el-form-item>
</el-form>
<el-row class="operate-button">
<el-button type="primary" @click="onSubmit('correctionForm')">{{$t('提交')}}</el-button>
<el-button @click="closeDialog2">{{$t('取消')}}</el-button>
</el-row>
</template>
<!-- 批量装柜纠错(订单号) -->
<template v-if="dialogConfig.type === 'correctionOrder' && dialogConfig.dialogVisible">
<el-form ref="orderForm" :rules="rules" :model="orderObj" label-position="top">
<el-form-item :label="$t('装柜纠错') +'(' + $t('订单号') + ')'" prop="orderNo">
<el-input type="textarea" :rows="3" v-model="orderObj.orderNo" :placeholder="$t('请输入,多个以逗号分隔')" clearable />
</el-form-item>
</el-form>
<el-row class="operate-button">
<el-button type="primary" @click="onSubmit('orderForm')">{{$t('提交')}}</el-button>
<el-button @click="closeDialog2">{{$t('取消')}}</el-button>
</el-row>
</template>
<!-- 装柜批量输入 -->
<template v-if="dialogConfig.type === 'batchInput' && dialogConfig.dialogVisible">
<el-form ref="batchForm" :rules="rules" :model="batchObj">
<el-form-item label="" prop="qrCode" class="two-element">
<el-input v-model="batchObj.qrCode" :placeholder="$t('请输入订单号')" clearable />
<el-button style="marginLeft:10px;" type="primary" @click="queryOrderInfo">{{$t('确定')}}</el-button>
</el-form-item>
<el-row>
<el-col :span="12">
<el-form-item :label="$t('订单号')">
{{boxOrderInfo.orderNo}}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item :label="$t('箱数')">
<el-input-number v-if="boxOrderInfo.isExternalWarehouse === 1" v-model="batchObj.boxNum" :min="0" :max="boxOrderInfo.num" />
<template v-else>
{{boxOrderInfo.num}}
</template>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item :label="$t('方数')">
{{getTotlContent(boxOrderInfo, ['volume'])}}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item :label="$t('重量')">
{{getTotlContent(boxOrderInfo, ['weight'])}}
</el-form-item>
</el-col>
</el-row>
</el-form>
<el-row class="operate-button">
<el-button type="primary" :disabled="boxOrderInfo.orderId ? false : true" @click="batchLoad">{{$t('提交')}}</el-button>
<el-button @click="closeDialog2">{{$t('取消')}}</el-button>
</el-row>
</template>
</el-dialog>
</div> </div>
</template> </template>
<script> <script>
import batchTally from "./batchTally.vue"; import batchTally from "./batchTally.vue";
import { getTallyList, tallyRemove, tallyCommit } from "@/api/ecw/boxSea"; import { getTallyList, tallyRemove, tallyCommit } from "@/api/ecw/boxSea";
import { formatDate, serviceMsg } from "../../utils"; import { formatDate, serviceMsg, getTotlContent } from "../../utils";
import WarehouseDetail from "./warehouseDetail"; import WarehouseDetail from "./warehouseDetail";
import {getOrder, orderSpecialNeed} from "@/api/ecw/order"; import {getOrder, orderSpecialNeed} from "@/api/ecw/order";
import Exception from "@/views/ecw/box/components/Exception.vue"; import Exception from "@/views/ecw/box/components/Exception.vue";
...@@ -163,7 +245,27 @@ export default { ...@@ -163,7 +245,27 @@ export default {
fullscreen: false, fullscreen: false,
}, },
// 当前转异订单 // 当前转异订单
currentTurnExceptionOrder: null currentTurnExceptionOrder: null,
// 二维码/条码编号
qrCode: "",
// 批量输入
batchObj: {
boxNum: 0,
},
// 批量纠错(订单号)
orderObj: {},
// 纠错
correctionObj: {},
// 弹窗配置
dialogConfig: {
title: "",
dialogVisible: false,
width: "30%",
type: "",
fullscreen: false,
},
// 订单信息
boxOrderInfo: {},
}; };
}, },
created() { created() {
...@@ -172,6 +274,7 @@ export default { ...@@ -172,6 +274,7 @@ export default {
methods: { methods: {
// 格式化日期 // 格式化日期
formatDate, formatDate,
getTotlContent,
//去重 //去重
notset(string){ notset(string){
if(!string) return string if(!string) return string
...@@ -357,6 +460,31 @@ export default { ...@@ -357,6 +460,31 @@ export default {
this.showWarehouseInItemId = row.orderItemId; this.showWarehouseInItemId = row.orderItemId;
}); });
}, },
/** 点击事件统一入口 */
handlerClick(type, title) {
this.shwoDialog({ type, title });
},
/** 弹窗事件 */
shwoDialog(config) {
this.$set(this.dialogConfig, "title", config.title);
this.$set(this.dialogConfig, "type", config.type);
switch (config.type) {
case "batchInput":
this.$set(this.dialogConfig, "fullscreen", false);
this.batchObj = { boxNum: 0 };
this.boxOrderInfo = {};
break;
case "correction":
this.$set(this.dialogConfig, "fullscreen", false);
this.correctionObj = {};
break;
case "correctionOrder":
this.$set(this.dialogConfig, "fullscreen", false);
this.orderObj = {};
break;
}
this.$set(this.dialogConfig, "dialogVisible", true);
},
}, },
computed: { computed: {
/* 获取仓库 */ /* 获取仓库 */
...@@ -371,4 +499,19 @@ export default { ...@@ -371,4 +499,19 @@ export default {
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.table-title {
display: flex;
align-items: center;
margin-bottom: 10px;
> div:first-child {
flex: 1;
font-size: 16px;
}
> div:last-child {
display: flex;
> .el-input {
margin-right: 10px;
}
}
}
</style> </style>
...@@ -17,7 +17,7 @@ ...@@ -17,7 +17,7 @@
</div> </div>
<el-collapse-transition> <el-collapse-transition>
<div v-if="item.fold === false ? true : false"> <div v-if="item.fold === false ? true : false">
<div v-for="(secGoog, index) in item.sectionOrderList" :key="index" class="part-secGoog"> <div v-for="(secGoog, index) in item.sectionOrderList" :key="index" class="part-secGoog-not">
<p>{{secGoog.orderNo}}</p> <p>{{secGoog.orderNo}}</p>
<p>{{secGoog.prodTitleZh}}</p> <p>{{secGoog.prodTitleZh}}</p>
<div> <div>
...@@ -538,6 +538,21 @@ export default { ...@@ -538,6 +538,21 @@ export default {
} }
} }
} }
.part-secGoog-not {
margin-top: 5px;
display: flex;
> p {
margin-right: 10px;
color: #4f9cdd;
}
> div {
flex: 1;
> i {
cursor: pointer;
color: red;
}
}
}
} }
} }
.right-area { .right-area {
......
...@@ -66,11 +66,15 @@ ...@@ -66,11 +66,15 @@
</el-form> </el-form>
<!-- 操作工具栏 --> <!-- 操作工具栏 -->
<div v-if="path === '/customer/customer'" style="color: red;margin-bottom: 5px;">
注意:创建的客户需接收
</div>
<el-row :gutter="10" class="mb8"> <el-row :gutter="10" class="mb8">
<el-col :span="1.5"> <el-col :span="1.5">
<el-button v-if="path === '/customer/potential'" type="primary" plain icon="el-icon-plus" size="mini" @click="handleAddPotential">{{$t('新增潜在客户')}}</el-button> <el-button v-if="path === '/customer/potential'" type="primary" plain icon="el-icon-plus" size="mini" @click="handleAddPotential">{{$t('新增潜在客户')}}</el-button>
<el-button v-else type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd" <el-button v-else type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
v-hasPermi="[ selectAuthorityFn('ecw:customer:create')]">{{$t('新增')}}</el-button> v-hasPermi="[ selectAuthorityFn('ecw:customer:create')]">{{$t('新增')}}
</el-button>
</el-col> </el-col>
<el-col :span="1.5" > <el-col :span="1.5" >
<el-button :disabled="selectCustomerList.length === 0" type="primary" size="mini" @click="transferShow = true;" <el-button :disabled="selectCustomerList.length === 0" type="primary" size="mini" @click="transferShow = true;"
...@@ -170,6 +174,7 @@ ...@@ -170,6 +174,7 @@
<el-button size="mini" v-has-permi="[selectAuthorityFn('ecw:customer:follow-up')]" type="text" icon="el-icon-collection" @click="followUp(scope.row)">{{$t('跟进')}}</el-button> <el-button size="mini" v-has-permi="[selectAuthorityFn('ecw:customer:follow-up')]" type="text" icon="el-icon-collection" @click="followUp(scope.row)">{{$t('跟进')}}</el-button>
<el-button size="mini" v-has-permi="[selectAuthorityFn('ecw:customer:customer-complaint')]" type="text" icon="el-icon-user" @click="complaint(scope.row)">{{$t('客诉')}}</el-button> <el-button size="mini" v-has-permi="[selectAuthorityFn('ecw:customer:customer-complaint')]" type="text" icon="el-icon-user" @click="complaint(scope.row)">{{$t('客诉')}}</el-button>
<el-button :disabled="scope.row.isInOpenSea" v-has-permi="[selectAuthorityFn('ecw:customer:postpone')]" size="mini" type="text" icon="el-icon-user" @click="delay(scope.row)">{{$t('延期')}}</el-button> <el-button :disabled="scope.row.isInOpenSea" v-has-permi="[selectAuthorityFn('ecw:customer:postpone')]" size="mini" type="text" icon="el-icon-user" @click="delay(scope.row)">{{$t('延期')}}</el-button>
<el-button v-has-permi="['ecw:customer:treat-recovery']" v-if="scope.row.customerService !== null && scope.row.customerServiceAssignedTime !== null && !scope.row.isCustomerServiceConfirmed && !scope.row.isInOpenSea && path === '/customer/customer'" size="mini" type="text" @click="recovery(scope.row)" > {{$t('回收客户')}} </el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
...@@ -541,7 +546,7 @@ import { ...@@ -541,7 +546,7 @@ import {
getCustomerDeptPage, getCustomerDeptPage,
changeCustomerAir, changeCustomerAir,
getPotential, getPotential,
setChangeCustomerFcl, potentialExportExcel, deptExportExcel setChangeCustomerFcl, potentialExportExcel, deptExportExcel, recycleUnconfirmedCustomer
} from "@/api/ecw/customer"; } from "@/api/ecw/customer";
import { getDictDatas, DICT_TYPE } from '@/utils/dict'; import { getDictDatas, DICT_TYPE } from '@/utils/dict';
import {CommonStatusEnum} from '@/utils/constants' import {CommonStatusEnum} from '@/utils/constants'
...@@ -688,6 +693,20 @@ export default { ...@@ -688,6 +693,20 @@ export default {
this.getList(); this.getList();
}, },
methods: { methods: {
recovery(row){
this.$confirm(this.$t('是否要回收当前{name}',row), '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
recycleUnconfirmedCustomer({customerId:row.id}).then(r =>{
this.$message.success(this.$t('回收成功。'))
this.getList()
})
}).catch(() => {
this.$message.info(this.$t('已取消'))
});
},
// 设置整柜 // 设置整柜
setFullContainerLoad(isFcl){ setFullContainerLoad(isFcl){
setChangeCustomerFcl({ setChangeCustomerFcl({
......
...@@ -137,7 +137,7 @@ ...@@ -137,7 +137,7 @@
</router-link> </router-link>
<el-button size="mini" type="text" @click="handleUpdate(scope.row)" <el-button size="mini" type="text" @click="handleUpdate(scope.row)"
v-hasPermi="['ecw:customer:treat-perfect']">{{$t('完善')}}</el-button> v-hasPermi="['ecw:customer:treat-perfect']">{{$t('完善')}}</el-button>
<el-button v-has-permi="['ecw:customer:treat-recovery']" size="mini" type="text" @click="recovery(scope.row)" > {{$t('回收客户')}} </el-button> <!-- <el-button v-has-permi="['ecw:customer:treat-recovery']" size="mini" type="text" @click="recovery(scope.row)" > {{$t('回收客户')}} </el-button>-->
</template> </template>
</el-table-column> </el-table-column>
...@@ -458,20 +458,20 @@ export default { ...@@ -458,20 +458,20 @@ export default {
}) })
}, },
methods: { methods: {
recovery(row){ // recovery(row){
console.log(row,'row') // console.log(row,'row')
this.$confirm(this.$t('是否要回收当前{name}',row), '提示', { // this.$confirm(this.$t('是否要回收当前{name}',row), '提示', {
confirmButtonText: '确定', // confirmButtonText: '确定',
cancelButtonText: '取消', // cancelButtonText: '取消',
type: 'warning' // type: 'warning'
}).then(() => { // }).then(() => {
recycleUnconfirmedCustomer({customerId:row.id}).then(r =>{ // recycleUnconfirmedCustomer({customerId:row.id}).then(r =>{
this.$message.success(this.$t('回收成功。')) // this.$message.success(this.$t('回收成功。'))
}) // })
}).catch(() => { // }).catch(() => {
this.$message.info(this.$t('已取消')) // this.$message.info(this.$t('已取消'))
}); // });
}, // },
getDictDatas, getDictDatas,
countryFormatter(row, column, cellValue) { countryFormatter(row, column, cellValue) {
const country = this.countryList.find((e) => e.id === cellValue) const country = this.countryList.find((e) => e.id === cellValue)
......
...@@ -48,19 +48,19 @@ ...@@ -48,19 +48,19 @@
<el-form-item :label="$t('联系方式')" prop="key"> <el-form-item :label="$t('联系方式')" prop="key">
<el-input v-model="queryParams.phoneNew" :placeholder="$t('请输入联系方式')" clearable/> <el-input v-model="queryParams.phoneNew" :placeholder="$t('请输入联系方式')" clearable/>
</el-form-item> </el-form-item>
<el-form-item :label="$t('客户经理')" prop="customerService"> <el-form-item :label="$t('客户经理')" prop="userId">
<el-select clearable v-model="queryParams.customerService" :placeholder="$t('请选择客户经理')" clearable size="small"> <el-select clearable v-model="queryParams.userId" :placeholder="$t('请选择客户经理')" clearable size="small">
<el-option v-for="dict in customerServiceList" <el-option v-for="dict in customerServiceList"
:key="dict.id" :label="dict.nickname" :value="dict.id"/> :key="dict.id" :label="dict.nickname" :value="dict.id"/>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item :label="$t('始发仓')" prop="destinationId"> <el-form-item :label="$t('始发仓')" prop="startWarehouseId">
<el-select v-model="queryParams.originId" :placeholder="$t('请选择始发仓')" clearable> <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-option v-for="item in exportWarehouseList" :label="$l(item, 'title')" :value="item.id" :key="item.id"></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item :label="$t('目的仓')" prop="destinationId"> <el-form-item :label="$t('目的仓')" prop="destWarehouseIdArr">
<el-select :multiple="true" v-model="queryParams.destinationId" multiple :placeholder="$t('请选择目的仓')" clearable> <el-select :multiple="true" v-model="queryParams.destWarehouseIdArr" multiple :placeholder="$t('请选择目的仓')" clearable>
<el-option v-for="item in importWarehouseList" :label="$l(item, 'title')" :value="item.id" :key="item.id"></el-option> <el-option v-for="item in importWarehouseList" :label="$l(item, 'title')" :value="item.id" :key="item.id"></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
...@@ -167,7 +167,7 @@ ...@@ -167,7 +167,7 @@
tableList: [], tableList: [],
// 弹出层标题 // 弹出层标题
title: "", title: "",
dateFilter:[], dateFilter:[],
detail: { detail: {
deptName: null, deptName: null,
targetType: null, targetType: null,
...@@ -256,6 +256,9 @@ ...@@ -256,6 +256,9 @@
listServiceUser().then(r=>{ listServiceUser().then(r=>{
this.customerServiceList = r.data; this.customerServiceList = r.data;
}) })
getWarehouseList().then(res => {
this.warehouseList = res.data
})
}, },
methods: { methods: {
getChannelList() { getChannelList() {
...@@ -295,8 +298,12 @@ ...@@ -295,8 +298,12 @@
/** 查询列表 */ /** 查询列表 */
getList() { getList() {
this.loading = true; this.loading = true;
const params = {...this.queryParams}
if(params.destWarehouseIdArr?.length){
params.destWarehouseIds = params.destWarehouseIdArr.join(',')
}
// 执行查询 // 执行查询
myAchievementByPage(this.queryParams).then(response => { myAchievementByPage(params).then(response => {
this.list = response.data.myAchievementDtos.list; this.list = response.data.myAchievementDtos.list;
this.total = response.data.myAchievementDtos.total; this.total = response.data.myAchievementDtos.total;
this.myAchievementData = response.data this.myAchievementData = response.data
......
...@@ -48,19 +48,19 @@ ...@@ -48,19 +48,19 @@
<el-form-item :label="$t('联系方式')" prop="key"> <el-form-item :label="$t('联系方式')" prop="key">
<el-input v-model="queryParams.phoneNew" :placeholder="$t('请输入联系方式')" clearable/> <el-input v-model="queryParams.phoneNew" :placeholder="$t('请输入联系方式')" clearable/>
</el-form-item> </el-form-item>
<el-form-item :label="$t('客户经理')" prop="customerService"> <el-form-item :label="$t('客户经理')" prop="userId">
<el-select clearable v-model="queryParams.customerService" :placeholder="$t('请选择客户经理')" clearable size="small"> <el-select clearable v-model="queryParams.userId" :placeholder="$t('请选择客户经理')" clearable size="small">
<el-option v-for="dict in customerServiceList" <el-option v-for="dict in customerServiceList"
:key="dict.id" :label="dict.nickname" :value="dict.id"/> :key="dict.id" :label="dict.nickname" :value="dict.id"/>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item :label="$t('始发仓')" prop="destinationId"> <el-form-item :label="$t('始发仓')" prop="startWarehouseId">
<el-select v-model="queryParams.originId" :placeholder="$t('请选择始发仓')" clearable> <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-option v-for="item in exportWarehouseList" :label="$l(item, 'title')" :value="item.id" :key="item.id"></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item :label="$t('目的仓')" prop="destinationId"> <el-form-item :label="$t('目的仓')" prop="destWarehouseIdArr">
<el-select :multiple="true" v-model="queryParams.destinationId" multiple :placeholder="$t('请选择目的仓')" clearable> <el-select :multiple="true" v-model="queryParams.destWarehouseIdArr" multiple :placeholder="$t('请选择目的仓')" clearable>
<el-option v-for="item in importWarehouseList" :label="$l(item, 'title')" :value="item.id" :key="item.id"></el-option> <el-option v-for="item in importWarehouseList" :label="$l(item, 'title')" :value="item.id" :key="item.id"></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
...@@ -196,6 +196,7 @@ ...@@ -196,6 +196,7 @@
transportType: null, transportType: null,
shippingChannel: null, shippingChannel: null,
endStartTime: null, endStartTime: null,
destWarehouseIdArr:[]
}, },
tableQueryParams: { tableQueryParams: {
pageNo: 1, pageNo: 1,
...@@ -252,6 +253,9 @@ ...@@ -252,6 +253,9 @@
listServiceUser().then(r=>{ listServiceUser().then(r=>{
this.customerServiceList = r.data; this.customerServiceList = r.data;
}) })
getWarehouseList().then(res => {
this.warehouseList = res.data
})
}, },
methods: { methods: {
getChannelList() { getChannelList() {
...@@ -291,8 +295,12 @@ ...@@ -291,8 +295,12 @@
/** 查询列表 */ /** 查询列表 */
getList() { getList() {
this.loading = true; this.loading = true;
const params = {...this.queryParams}
if(params.destWarehouseIdArr?.length){
params.destWarehouseIds = params.destWarehouseIdArr.join(',')
}
// 执行查询 // 执行查询
myDeptAchievementByPage(this.queryParams).then(response => { myDeptAchievementByPage(params).then(response => {
this.list = response.data.myAchievementDtos.list; this.list = response.data.myAchievementDtos.list;
this.total = response.data.myAchievementDtos.total; this.total = response.data.myAchievementDtos.total;
this.myAchievementData = response.data this.myAchievementData = response.data
......
...@@ -161,6 +161,9 @@ ...@@ -161,6 +161,9 @@
<el-descriptions-item :label="$t('客户经理')"> <el-descriptions-item :label="$t('客户经理')">
{{order.salesmanName}} {{order.salesmanName}}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item :label="$t('提单是否显示价格')">
{{order.displayBillLadingPrice ? $t('是') : $t('否')}}
</el-descriptions-item>
</el-descriptions> </el-descriptions>
</el-card> </el-card>
......
...@@ -514,11 +514,11 @@ ...@@ -514,11 +514,11 @@
</el-form-item> </el-form-item>
</div> </div>
<div v-if="[3,4].indexOf(+form.transportId) > -1"> <!--<div v-if="[3,4].indexOf(+form.transportId) > -1">
<el-form-item :label="$t('航空公司')"> <el-form-item :label="$t('航空公司')">
<supplier-selector v-model="form.airlineCompany" company-type="10" :disabled="false"/> <supplier-selector v-model="form.airlineCompany" company-type="10" :disabled="false"/>
</el-form-item> </el-form-item>
</div> </div>-->
<div v-if="[2].indexOf(+form.transportId) > -1"> <div v-if="[2].indexOf(+form.transportId) > -1">
<el-form-item :label="$t('船公司')"> <el-form-item :label="$t('船公司')">
<supplier-selector v-model="form.shippingCompany" company-type="9" :disabled="false" /> <supplier-selector v-model="form.shippingCompany" company-type="9" :disabled="false" />
......
...@@ -172,7 +172,7 @@ ...@@ -172,7 +172,7 @@
</el-col> </el-col>
<el-col :span="15" v-if="statistics"> <el-col :span="15" v-if="statistics">
<!-- 订单列表显示搜索条件对应箱数、仓库实测、收款方数、重量 --> <!-- 订单列表显示搜索条件对应箱数、仓库实测、收款方数、重量 -->
{{$t('合计:{totalNum}箱,{totalVolume}m³(测) {totalChargeVolume}m³(重) {totalWeight}KG', statistics)}} {{$t('合计:{totalNum}箱,{totalVolume}m³(测) {totalChargeVolume}m³(重) {totalWeight}KG(测), {totalChargeWeight}kg(收费)', statistics)}}
</el-col> </el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar> <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row> </el-row>
......
...@@ -435,7 +435,7 @@ export default { ...@@ -435,7 +435,7 @@ export default {
}, },
// 批量可出 // 批量可出
batchCanShipment(){ batchCanShipment(){
let orderNo = this.multipleSelection.map(item => item.orderNo).join(',') let orderNo = this.multipleSelection.map(item => item.orderNo).join(', ')
this.$confirm(this.$t(`您确定要将订单{orderNo}设置为可出吗?`, {orderNo})).then(() =>{ this.$confirm(this.$t(`您确定要将订单{orderNo}设置为可出吗?`, {orderNo})).then(() =>{
return batchCanShipment(this.ids) return batchCanShipment(this.ids)
}).then(res =>{ }).then(res =>{
......
...@@ -158,17 +158,18 @@ ...@@ -158,17 +158,18 @@
</el-table-column> </el-table-column>
<el-table-column <el-table-column
prop="address" prop="address"
:label="$t('操作')" width="220"> :label="$t('操作')" width="250">
<template v-slot="{ row, column, $index }"> <template v-slot="{ row, column, $index }">
<!--没有入仓记录的不显示打包按钮 https://zentao.test.jdshangmen.com/bug-view-5389.html--> <!--没有入仓记录的不显示打包按钮 https://zentao.test.jdshangmen.com/bug-view-5389.html-->
<el-button-group v-if="orderWarehouseInList(row.orderItemId).length"> <el-button-group v-if="orderWarehouseInList(row.orderItemId).length">
<template v-if="wareItemPackStatus(row.orderItemId) == 1"> <template v-if="wareItemPackStatus(row.orderItemId) == 1">
<el-button size="mini" type="warning" @click="noNeedPack(row)">{{$t('无需打包')}}</el-button> <el-button class="pl-5 pr-5" size="mini" type="warning" @click="noNeedPack(row)">{{$t('无需打包')}}</el-button>
<el-button size="mini" type="primary" @click="package(row, $t('打包'))">{{$t('打包')}}</el-button> <el-button size="mini" type="primary" @click="package(row, $t('打包'))">{{$t('打包')}}</el-button>
</template> </template>
<el-button v-else size="mini" type="primary" @click="package(row, $t('修改打包'))">{{$t('修改打包')}}</el-button> <el-button class="pl-5 pr-5" v-else size="mini" type="primary" @click="package(row, $t('修改打包'))">{{$t('修改打包')}}</el-button>
<el-button size="mini" type="danger" @click="rollback(row)">{{$t('退仓')}}</el-button> <el-button size="mini" type="danger" @click="rollback(row)">{{$t('退仓')}}</el-button>
<el-button class="pl-5 pr-5" size="mini" type="info" @click="printTag">{{$t('打印标签')}}</el-button>
</el-button-group> </el-button-group>
</template> </template>
</el-table-column> </el-table-column>
...@@ -212,6 +213,7 @@ ...@@ -212,6 +213,7 @@
<div style="text-align: center;margin-top: 15px"> <div style="text-align: center;margin-top: 15px">
<el-button @click="escapeBol = true;" type="primary">{{$t('转异')}}</el-button> <el-button @click="escapeBol = true;" type="primary">{{$t('转异')}}</el-button>
<el-button type="primary" @click="handleSubmit">{{$t('完成备货')}}</el-button> <el-button type="primary" @click="handleSubmit">{{$t('完成备货')}}</el-button>
<el-button type="info" @click="printTag">{{$t('打印标签')}}</el-button>
</div> </div>
</el-form> </el-form>
...@@ -249,6 +251,7 @@ ...@@ -249,6 +251,7 @@
@close="onPackageClose" @close="onPackageClose"
></new-product> ></new-product>
<media-dialog v-if="curPictrues" :value="curPictrues" @close="curPictrues=null"></media-dialog> <media-dialog v-if="curPictrues" :value="curPictrues" @close="curPictrues=null"></media-dialog>
<print-tag v-if="showPrintTagDialog" :order-id="orderId" @close="showPrintTagDialog=false" :warehouse-in-num="order.sumNum" />
</div> </div>
</template> </template>
...@@ -363,7 +366,9 @@ export default { ...@@ -363,7 +366,9 @@ export default {
// 当前查看的影像 // 当前查看的影像
curPictrues: null, curPictrues: null,
// 是否显示添加新品弹窗 // 是否显示添加新品弹窗
showNewProductDialog: false showNewProductDialog: false,
// 是否显示打印标签弹层
showPrintTagDialog: false
} }
}, },
...@@ -434,9 +439,11 @@ export default { ...@@ -434,9 +439,11 @@ export default {
form.orderId = this.orderId form.orderId = this.orderId
form.manualExceptionType = form.manualExceptionType.join(',') form.manualExceptionType = form.manualExceptionType.join(',')
finishStock(form).then(res => { finishStock(form).then(res => {
return this.$alert(this.$t('操作成功')) return this.$confirm("备货成功,是否需要打印标签").catch(() => {
this.$tab.closePage()
})
}).then(() => { }).then(() => {
this.$tab.closePage() this.printTag()
}) })
}, },
// 显示打包弹层 // 显示打包弹层
...@@ -496,6 +503,9 @@ export default { ...@@ -496,6 +503,9 @@ export default {
this.$message.success(this.$t('操作成功')) this.$message.success(this.$t('操作成功'))
this.getList() this.getList()
}) })
},
printTag(){
this.showPrintTagDialog = true
} }
}, },
watch: { watch: {
......
...@@ -886,8 +886,14 @@ export default { ...@@ -886,8 +886,14 @@ export default {
let params = {...this.queryParams}; let params = {...this.queryParams};
params.pageNo = undefined; params.pageNo = undefined;
params.pageSize = undefined; params.pageSize = undefined;
if(this.type == 'sea'){
params.transportType = 1
}
if(this.type == 'air'){
params.transportType = 3
}
this.addBeginAndEndTime(params, this.dateRangeCreateTime, 'createTime'); this.addBeginAndEndTime(params, this.dateRangeCreateTime, 'createTime');
// c
this.$modal.confirm(this.$t('是否确认导出所有数据项?')).then(() => { this.$modal.confirm(this.$t('是否确认导出所有数据项?')).then(() => {
this.exportLoading = true; this.exportLoading = true;
return exportProductPriceExcel(params); return exportProductPriceExcel(params);
......
...@@ -102,9 +102,12 @@ ...@@ -102,9 +102,12 @@
<el-option v-for="dict in regionTypeDatas" :key="dict.value" :label="dict.label" :value="dict.value"/> <el-option v-for="dict in regionTypeDatas" :key="dict.value" :label="dict.label" :value="dict.value"/>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item :label="$t('国家代码-城市代码')" prop="labelCode" v-if="form.type == '1' || form.type == '3' "> <el-form-item :label="$t('海运订单国家代码-海运订单城市代码-空运订单国家代码-空运自编号国家代码,没有可填0-')" prop="labelCode" v-if="form.type == '1' || form.type == '3' ">
<el-input v-model="form.labelCode" placeholder="请输入国家代码-城市代码" /> <el-input v-model="form.labelCode" placeholder="请输入海运订单国家代码-海运订单城市代码-空运订单国家代码-空运自编号国家代码" />
</el-form-item> </el-form-item>
<el-tooltip effect="dark" :content="$t('海运目的国家简称-海运目的城市简称-空运订单编号目的国家简称-空运自编号目的国简称,\n注意:如果没有海运业务的城市设置,请将海运目的国家简称-海运目的城市简称设置为->0-0,前置的参数不能为空')" placement="top">
<i class="el-icon-question"></i>
</el-tooltip>
<el-form-item :label="$t('显示顺序')" prop="sort"> <el-form-item :label="$t('显示顺序')" prop="sort">
<el-input v-model="form.sort" :placeholder="$t('请输入显示顺序')" /> <el-input v-model="form.sort" :placeholder="$t('请输入显示顺序')" />
</el-form-item> </el-form-item>
......
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