parent
fb9d0b9ad2
commit
6c3c8b3e66
@ -0,0 +1,28 @@
|
|||||||
|
<template>
|
||||||
|
<span>{{ warehouseName }}</span>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
name: 'WarehouseName',
|
||||||
|
props: {
|
||||||
|
stockCode: {
|
||||||
|
type: String,
|
||||||
|
default: ''
|
||||||
|
}
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
warehouseName() {
|
||||||
|
const stock = this.$store.getters.warehouseData[this.stockCode] || {};
|
||||||
|
return stock.stockName;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
created() {
|
||||||
|
this.$store.dispatch('warehouse/getWarehouse', {})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
|
||||||
|
</style>
|
||||||
@ -0,0 +1,22 @@
|
|||||||
|
export default {
|
||||||
|
inserted: function (el) {
|
||||||
|
const inputs = el.querySelectorAll("input");
|
||||||
|
const inputArray = Array.from(inputs);
|
||||||
|
|
||||||
|
inputArray.forEach((input, index) => {
|
||||||
|
input.setAttribute("keyFocusIndex", index);
|
||||||
|
input.addEventListener("keydown", (ev) => {
|
||||||
|
if (ev.keyCode === 13) {
|
||||||
|
const targetTo = ev.srcElement.getAttribute("keyFocusTo");
|
||||||
|
if (targetTo) {
|
||||||
|
this.$refs[targetTo].$el.focus();
|
||||||
|
} else {
|
||||||
|
const attrIndex = ev.srcElement.getAttribute("keyFocusIndex");
|
||||||
|
const ctlI = parseInt(attrIndex);
|
||||||
|
if (ctlI < inputArray.length - 1) inputArray[ctlI + 1].focus();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
},
|
||||||
|
}
|
||||||
@ -0,0 +1,39 @@
|
|||||||
|
import { listWarehouse } from "@/api/cmwarehouse";
|
||||||
|
|
||||||
|
const state = {
|
||||||
|
warehouse: {}
|
||||||
|
};
|
||||||
|
|
||||||
|
const mutations = {
|
||||||
|
SET_WAREHOUSE: (state, warehouse) => {
|
||||||
|
state.warehouse = warehouse;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const actions = {
|
||||||
|
// 获取仓库列表
|
||||||
|
getWarehouse({ commit }, params) {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
listWarehouse(params)
|
||||||
|
.then(response => {
|
||||||
|
const data = response.data || [];
|
||||||
|
const warehouseMap = {};
|
||||||
|
data.forEach(item => {
|
||||||
|
warehouseMap[item.stockCode] = item;
|
||||||
|
});
|
||||||
|
commit('SET_WAREHOUSE', warehouseMap);
|
||||||
|
resolve(warehouseMap);
|
||||||
|
})
|
||||||
|
.catch(error => {
|
||||||
|
reject(error);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
export default {
|
||||||
|
namespaced: true,
|
||||||
|
state,
|
||||||
|
mutations,
|
||||||
|
actions
|
||||||
|
};
|
||||||
@ -0,0 +1,248 @@
|
|||||||
|
<template>
|
||||||
|
<div style="display: flex;flex-direction: column;" v-loading="loading">
|
||||||
|
|
||||||
|
|
||||||
|
<el-row :gutter="6" type="flex" align="middle">
|
||||||
|
<el-col :span="1.5">
|
||||||
|
<label >备案号</label>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="4">
|
||||||
|
<el-input v-model="searchGdsSeqno" placeholder="请输入备案号" id="gdsSeqno"></el-input>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="2">
|
||||||
|
<el-button type="primary" @click="getList">查询</el-button>
|
||||||
|
</el-col>
|
||||||
|
|
||||||
|
</el-row>
|
||||||
|
|
||||||
|
|
||||||
|
<el-table ref="table" style="flex: 1;" height="70vh" :data="list" @select="select" @select-all="selectAll"
|
||||||
|
@selection-change="selectionChange" @current-change="handleCurrentChange" highlight-current-row border stripe>
|
||||||
|
|
||||||
|
<el-table-column type="selection" width="55" align="center" :selectable="selectable" />
|
||||||
|
|
||||||
|
<el-table-column type="expand" label="更多">
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<el-descriptions class="desc-table" size="mini" :column="5" border>
|
||||||
|
<el-descriptions-item label="仓库名称">
|
||||||
|
{{scope.row.stockName}}/{{scope.row.shelfName}}/{{scope.row.locationName}}
|
||||||
|
</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="HS编号">{{ scope.row.hsCode }}</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="自然序号">{{ scope.row.cargoNumber }}</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="商品料号">{{ scope.row.itemNumber }}</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="电子账册项号">{{ scope.row.bookNumber }}</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="报关单号">{{ scope.row.customsNo }}</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="核注清单号">{{ scope.row.listNumber }}</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="有效期至">{{ scope.row.expiryDate }}</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="规格类型品质">{{ scope.row.cargoSpec }}</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="原产国">{{ scope.row.originCountry }}</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="备案号">{{ scope.row.gdsSeqno }}</el-descriptions-item>
|
||||||
|
|
||||||
|
|
||||||
|
</el-descriptions>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
|
||||||
|
<el-table-column label="单据编号" prop="billNumber">
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<div class="nomal-text">{{ scope.row.billNumber }}</div>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="货物" prop="cargoName">
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<div class="nomal-text">{{ scope.row.cargoName }}</div>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="仓库" prop="stockName">
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<div class="nomal-text">
|
||||||
|
{{scope.row.stockName}}/{{scope.row.shelfName}}/{{scope.row.locationName}}
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="件数" prop="cargoNum">
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<div class="nomal-text">{{ scope.row.cargoNum }}</div>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="重量" prop="cargoWt">
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<div class="nomal-text">{{ scope.row.cargoWt }}</div>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="体积" prop="cargoVol">
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<div class="nomal-text">{{ scope.row.cargoVol }}</div>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="价值" prop="cargoValue">
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<div class="nomal-text">{{ scope.row.cargoValue }}</div>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
</el-table>
|
||||||
|
<div class="stock-btns">
|
||||||
|
<el-button @click="$emit('cancel')">取消</el-button>
|
||||||
|
<el-button type="primary" @click="save">确认</el-button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import { listCkstock } from "@/api/ckcargostock";
|
||||||
|
import WarehouseName from '@/components/WarehouseName';
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: 'StockChoose',
|
||||||
|
components: {
|
||||||
|
WarehouseName,
|
||||||
|
},
|
||||||
|
props: {
|
||||||
|
custId: {
|
||||||
|
type: String | Number,
|
||||||
|
default: ''
|
||||||
|
},
|
||||||
|
disableItems: {
|
||||||
|
type: Array,
|
||||||
|
default() {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
},
|
||||||
|
single: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false,
|
||||||
|
},
|
||||||
|
singleItem: {
|
||||||
|
type: Object,
|
||||||
|
default() {
|
||||||
|
return {};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
list: [],
|
||||||
|
selectedList: [],
|
||||||
|
loading: false,
|
||||||
|
searchGdsSeqno: '',
|
||||||
|
}
|
||||||
|
},
|
||||||
|
watch: {
|
||||||
|
custId() {
|
||||||
|
this.getList();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
created() {
|
||||||
|
this.getList();
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
selectable(row, index) {
|
||||||
|
if (this.disableItems && this.disableItems.length) {
|
||||||
|
return !this.disableItems.some(val => val.outBillNumber === row.billNumber && val.outStockId === row.stockId && val.cargoId === row.cargoId);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
},
|
||||||
|
|
||||||
|
// 点击全选
|
||||||
|
selectAll(selection) {
|
||||||
|
if (this.single) {
|
||||||
|
// 单选时多选框取消选中
|
||||||
|
this.$refs.table.clearSelection();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
select(selection, row) {
|
||||||
|
if (this.single) {
|
||||||
|
// 单选时取消选中所有再选中
|
||||||
|
this.$nextTick(() => {
|
||||||
|
this.$refs.table.clearSelection();
|
||||||
|
this.$nextTick(() => {
|
||||||
|
this.$refs.table.toggleRowSelection(row);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// 选中项变化
|
||||||
|
selectionChange(sel) {
|
||||||
|
console.log('选中项变化', sel);
|
||||||
|
if (sel.length === 0) {
|
||||||
|
// 清空选中
|
||||||
|
this.$refs.table.setCurrentRow();
|
||||||
|
}
|
||||||
|
this.selectedList = sel;
|
||||||
|
},
|
||||||
|
// 当前选中某一项
|
||||||
|
handleCurrentChange(currentRow) {
|
||||||
|
if (this.single) {
|
||||||
|
// 单选时取消选中所有再选中
|
||||||
|
this.$nextTick(() => {
|
||||||
|
this.$refs.table.clearSelection();
|
||||||
|
this.$nextTick(() => {
|
||||||
|
if (currentRow) {
|
||||||
|
this.$refs.table.toggleRowSelection(currentRow);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
},
|
||||||
|
save() {
|
||||||
|
this.$emit('confirm', this.selectedList);
|
||||||
|
},
|
||||||
|
getList() {
|
||||||
|
this.list = [];
|
||||||
|
if (!this.custId) return;
|
||||||
|
this.loading = true;
|
||||||
|
listCkstock({
|
||||||
|
custId: this.custId,
|
||||||
|
gdsSeqno: this.searchGdsSeqno,
|
||||||
|
}).then(res => {
|
||||||
|
this.loading = false;
|
||||||
|
this.list = res || [];
|
||||||
|
if (this.singleItem.stockId) {
|
||||||
|
const findex = this.list.findIndex(val => val.billNumber === this.singleItem.billNumber && val.stockId === this.singleItem.stockId && val.cargoId === this.singleItem.cargoId);
|
||||||
|
if (findex > -1) {
|
||||||
|
this.$nextTick(() => {
|
||||||
|
this.$refs.table.toggleRowSelection(this.list[findex]);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this.$emit('updateList', this.list);
|
||||||
|
}).catch(e => {
|
||||||
|
this.loading = false;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
.stock-btns {
|
||||||
|
margin-top: 10px;
|
||||||
|
display: flex;
|
||||||
|
justify-content: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nomal-text {
|
||||||
|
padding: 8px 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.desc-table {
|
||||||
|
padding: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ::v-deep .el-table td.el-table__cell {
|
||||||
|
padding: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
::v-deep .el-table--border .el-table__cell {
|
||||||
|
padding: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
::v-deep .el-table .cell {
|
||||||
|
padding: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
::v-deep .el-table--border .el-table__cell:first-child .cell {
|
||||||
|
padding-left: 10px;
|
||||||
|
} */</style>
|
||||||
@ -0,0 +1,731 @@
|
|||||||
|
<template>
|
||||||
|
<div class="app-container">
|
||||||
|
<SearchBlock v-model="queryParams" v-show="showSearch" size="mini" :menus="queryOption" @change="handleQuery"></SearchBlock>
|
||||||
|
<!-- <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="100px">
|
||||||
|
<el-form-item label="单据编号" prop="billNumber">
|
||||||
|
<el-input
|
||||||
|
v-model="queryParams.billNumber"
|
||||||
|
placeholder="请输入单据编号"
|
||||||
|
clearable
|
||||||
|
@keyup.enter.native="handleQuery"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="航次号" prop="voyageNo">
|
||||||
|
<el-input
|
||||||
|
v-model="queryParams.voyageNo"
|
||||||
|
placeholder="请输入航次号"
|
||||||
|
clearable
|
||||||
|
@keyup.enter.native="handleQuery"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
|
||||||
|
<el-form-item label="船舶名称" prop="vesselName">
|
||||||
|
<el-input
|
||||||
|
v-model="queryParams.vesselName"
|
||||||
|
placeholder="请输入船舶名称"
|
||||||
|
clearable
|
||||||
|
@keyup.enter.native="handleQuery"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
|
||||||
|
<el-form-item label="货物名称" prop="cargoName">
|
||||||
|
<el-input
|
||||||
|
v-model="queryParams.cargoName"
|
||||||
|
placeholder="请输入货物名称"
|
||||||
|
clearable
|
||||||
|
@keyup.enter.native="handleQuery"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="仓库名称" prop="stockCode" class="search-item">
|
||||||
|
<el-select v-model="queryParams.stockCode" filterable placeholder="请选择">
|
||||||
|
<el-option v-for="dict in warehouses" :key="dict.stockCode" :label="dict.stockName" :value="dict.stockCode">
|
||||||
|
</el-option>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
|
||||||
|
<el-form-item label="仓位名称" prop="stockName" class="search-item">
|
||||||
|
<el-select v-model="queryParams.stockName" filterable placeholder="请选择">
|
||||||
|
<el-option v-for="dict in stockList" :key="dict.stockName" :label="dict.stockName" :value="dict.stockName">
|
||||||
|
</el-option>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
|
||||||
|
<el-form-item label="报关单号" prop="customsNo">
|
||||||
|
<el-input
|
||||||
|
v-model="queryParams.customsNo"
|
||||||
|
placeholder="请输入报关单号"
|
||||||
|
clearable
|
||||||
|
@keyup.enter.native="handleQuery"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="核注清单号" prop="listNumber" >
|
||||||
|
<el-input
|
||||||
|
v-model="queryParams.listNumber"
|
||||||
|
placeholder="请输入核注清单号"
|
||||||
|
clearable
|
||||||
|
@keyup.enter.native="handleQuery"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="项号" prop="bookNumber" >
|
||||||
|
<el-input
|
||||||
|
v-model="queryParams.bookNumber"
|
||||||
|
placeholder="请输入项号"
|
||||||
|
clearable
|
||||||
|
@keyup.enter.native="handleQuery"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="单据日期" prop="queryTime">
|
||||||
|
<el-date-picker clearable
|
||||||
|
v-model="queryTime"
|
||||||
|
type="daterange"
|
||||||
|
:picker-options="pickerOptions"
|
||||||
|
value-format="yyyy-MM-dd"
|
||||||
|
end-placeholder="结束日期"
|
||||||
|
range-separator="-" start-placeholder="开始日期"
|
||||||
|
placeholder="请选择单据日期">
|
||||||
|
</el-date-picker>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="有效期至" prop="queryTime">
|
||||||
|
<el-date-picker clearable
|
||||||
|
v-model="queryTimeTwo"
|
||||||
|
size="small"
|
||||||
|
:picker-options="pickerOptions"
|
||||||
|
end-placeholder="结束日期"
|
||||||
|
range-separator="-" start-placeholder="开始日期" type="daterange"
|
||||||
|
value-format="yyyy-MM-dd"
|
||||||
|
placeholder="请选择有效期至">
|
||||||
|
</el-date-picker>
|
||||||
|
</el-form-item>
|
||||||
|
|
||||||
|
<el-form-item>
|
||||||
|
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
|
||||||
|
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
|
||||||
|
</el-form-item>
|
||||||
|
</el-form> -->
|
||||||
|
|
||||||
|
<el-row :gutter="10" class="mb8">
|
||||||
|
|
||||||
|
|
||||||
|
<el-col :span="1.5">
|
||||||
|
<el-button
|
||||||
|
type="warning"
|
||||||
|
plain
|
||||||
|
icon="el-icon-download"
|
||||||
|
size="mini"
|
||||||
|
@click="handleExport"
|
||||||
|
v-hasPermi="['jxc:ckcargo:export']"
|
||||||
|
>导出</el-button>
|
||||||
|
</el-col>
|
||||||
|
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
|
||||||
|
</el-row>
|
||||||
|
|
||||||
|
<el-table v-loading="loading" highlight-current-row :data="ckcargoList" @sort-change="handleSortChange" @selection-change="handleSelectionChange">
|
||||||
|
<el-table-column type="selection" width="55" align="center" />
|
||||||
|
<el-table-column label="单据编号" align="center" prop="billNumber" sortable='custom' width="100"/>
|
||||||
|
<el-table-column label="单据日期" align="center" prop="billDate" width="180" sortable='custom'>
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<span>{{ parseTime(scope.row.billDate, '{y}-{m}-{d} {h}:{i}:{s}') }}</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="仓库名称" align="center" prop="stockCode" sortable='custom' width="120">
|
||||||
|
<template slot-scope="scope">
|
||||||
|
{{scope.row.stockName}}/{{scope.row.shelfName}}/{{scope.row.locationName}}
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="仓位名称" align="center" prop="stockName" sortable='custom' width="100" v-if="false"/>
|
||||||
|
<el-table-column label="货主名称" align="center" prop="custName" sortable='custom' width="100"/>
|
||||||
|
<el-table-column label="商品编码" align="center" prop="hsCode" sortable='custom' width="100"/>
|
||||||
|
<el-table-column label="货物名称" align="center" prop="cargoName" sortable='custom' width="100"/>
|
||||||
|
<el-table-column label="入库库件数" align="center" prop="cargoNum" sortable='custom' width="130"/>
|
||||||
|
<el-table-column label="入库重量" align="center" prop="cargoWt" sortable='custom' width="130"/>
|
||||||
|
<el-table-column label="入库体积" align="center" prop="cargoVol" sortable='custom' width="130"/>
|
||||||
|
<el-table-column label="入库货物价值" align="center" prop="cargoValue" sortable='custom' width="130"/>
|
||||||
|
<el-table-column label="货物自然序号" align="center" prop="cargoNumber" sortable='custom'width="130" />
|
||||||
|
<el-table-column label="商品料号" align="center" prop="itemNumber" sortable='custom' width="100" />
|
||||||
|
<el-table-column label="电子账册项号" align="center" prop="bookNumber" sortable='custom' width="130"/>
|
||||||
|
<el-table-column label="HS编号" align="center" prop="hsCode" sortable='custom'width="100" />
|
||||||
|
<el-table-column label="货物名称" align="center" prop="cargoName" sortable='custom' width="100"/>
|
||||||
|
<el-table-column label="规格类型品质" show-overflow-tooltip align="center" prop="cargoSpec" sortable='custom' min-width="200"/>
|
||||||
|
<el-table-column label="原产国" align="center" prop="originCountry" sortable='custom' width="100">
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<dict-tag :options="dict.type.sys_origin_country"
|
||||||
|
:value="scope.row.originCountry != null ? scope.row.originCountry : ''"></dict-tag>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="报关单号" align="center" prop="customsNo" sortable='custom' width="100"/>
|
||||||
|
<el-table-column label="核注清单号" align="center" prop="listNumber" sortable='custom' width="130"/>
|
||||||
|
<el-table-column label="提运单号" align="center" prop="billNo" sortable='custom' width="100"/>
|
||||||
|
<el-table-column label="贸易性质" align="center" prop="tradType" sortable='custom' width="100">
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<dict-tag :options="dict.type.sys_trade_nature" :value="scope.row.tradType"/>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<!-- <el-table-column label="船舶信息" align="center">-->
|
||||||
|
<!-- <el-table-column label="航次号" align="center" prop="voyageNo" sortable='custom' width="100"/>-->
|
||||||
|
<!-- <el-table-column label="船舶名称" align="center" prop="vesselName" sortable='custom' width="100"/>-->
|
||||||
|
<!-- </el-table-column>-->
|
||||||
|
<el-table-column label="有效期至" align="center" prop="expiryDate" width="180" sortable='custom'>
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<span>{{ parseTime(scope.row.expiryDate, '{y}-{m}-{d} {h}:{i}:{s}') }}</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
|
||||||
|
|
||||||
|
</el-table>
|
||||||
|
<el-row>
|
||||||
|
<el-col :span="12" class="text-right" style=" margin-top: 10px; margin-left: 10px">
|
||||||
|
<span style="font-size: 16px">总重量: {{ totalWeight }}</span>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
<pagination
|
||||||
|
:total="total"
|
||||||
|
:page.sync="queryParams.pageNum"
|
||||||
|
:limit.sync="queryParams.pageSize"
|
||||||
|
@pagination="getList"
|
||||||
|
/>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import { ckbillcargoListApi as pageListCkcargo, ckbillcargoDetailApi as getCkcargo, ckbillcargoDeleteApi as delCkcargo, ckbillcargoCreateApi as addCkcargo, ckbillcargoUpdateApi as updateCkcargo,selectTotalWt } from "@/api/ckbillcargo";
|
||||||
|
// import { listStock } from "@/api/jxc/stock";
|
||||||
|
import { cmcustListByAll as listCust } from "@/api/cmcust";
|
||||||
|
import { cmcustproductListByAll as listCargo } from "@/api/cmcustproduct";
|
||||||
|
// import {listVessel,} from "@/api/jxc/vessel";
|
||||||
|
// import {listBmvoyage} from "@/api/jxc/bmvoyage";
|
||||||
|
import {listWarehouse} from "@/api/cmwarehouse";
|
||||||
|
import { cmshelfListByAll as listShelf } from "@/api/cmshelf";
|
||||||
|
import { datePickerOpts } from "@/utils";
|
||||||
|
import SearchBlock from '@/components/SearchBlock';
|
||||||
|
import WarehouseName from '@/components/WarehouseName';
|
||||||
|
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: "Instock",
|
||||||
|
components: {
|
||||||
|
SearchBlock,
|
||||||
|
WarehouseName,
|
||||||
|
},
|
||||||
|
dicts: ['sys_business_nature', 'sys_trade_nature','sys_inbound_outbound_type','sys_origin_country'],
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
//仓库名称、项号、核注清单号、有效期至
|
||||||
|
queryOption: [
|
||||||
|
{
|
||||||
|
label: '仓库名称',
|
||||||
|
prop: 'stockCode',
|
||||||
|
type: 'select',
|
||||||
|
getOptions: () => this.warehouses,
|
||||||
|
optionsProp: 'stockCode',
|
||||||
|
optionsLabel: 'stockName',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '项号',
|
||||||
|
prop: 'bookNumber',
|
||||||
|
type: 'text',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '核注清单号',
|
||||||
|
prop: 'listNumber',
|
||||||
|
type: 'text',
|
||||||
|
labelWidth: '90px'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '有效期至',
|
||||||
|
prop: 'excTime',
|
||||||
|
type: 'daterange',
|
||||||
|
options: datePickerOpts()
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '单据编号',
|
||||||
|
prop: 'billNumber',
|
||||||
|
type: 'text',
|
||||||
|
},
|
||||||
|
// {
|
||||||
|
// label: '船舶名称',
|
||||||
|
// prop: 'vesselName',
|
||||||
|
// type: 'text',
|
||||||
|
// },
|
||||||
|
{
|
||||||
|
label: '商品编码',
|
||||||
|
prop: 'hsCode',
|
||||||
|
type: 'text',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '货物名称',
|
||||||
|
prop: 'cargoName',
|
||||||
|
type: 'text',
|
||||||
|
},
|
||||||
|
// {
|
||||||
|
// label: '航次',
|
||||||
|
// prop: 'voyageNo',
|
||||||
|
// type: 'text',
|
||||||
|
// },
|
||||||
|
{
|
||||||
|
label: '货架名称',
|
||||||
|
prop: 'shelfName',
|
||||||
|
type: 'select',
|
||||||
|
getOptions: () => this.shelfList,
|
||||||
|
optionsProp: 'shelfName',
|
||||||
|
optionsLabel: 'shelfName',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '报关单号',
|
||||||
|
prop: 'customsNo',
|
||||||
|
type: 'text',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '单据日期',
|
||||||
|
prop: 'queryTime',
|
||||||
|
type: 'daterange',
|
||||||
|
options: datePickerOpts()
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '货主名称',
|
||||||
|
prop: 'custName',
|
||||||
|
type: 'text',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '贸易性质',
|
||||||
|
prop: 'tradType',
|
||||||
|
type: 'select',
|
||||||
|
getOptions: () => this.dict.type.sys_trade_nature,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
activeName: ['1', '2', '3'],
|
||||||
|
pickerOptions: {
|
||||||
|
shortcuts: [{
|
||||||
|
text: '最近一周',
|
||||||
|
onClick(picker) {
|
||||||
|
const end = new Date();
|
||||||
|
const start = new Date();
|
||||||
|
start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);
|
||||||
|
picker.$emit('pick', [start, end]);
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
text: '最近一个月',
|
||||||
|
onClick(picker) {
|
||||||
|
const end = new Date();
|
||||||
|
const start = new Date();
|
||||||
|
start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);
|
||||||
|
picker.$emit('pick', [start, end]);
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
text: '最近三个月',
|
||||||
|
onClick(picker) {
|
||||||
|
const end = new Date();
|
||||||
|
const start = new Date();
|
||||||
|
start.setTime(start.getTime() - 3600 * 1000 * 24 * 90);
|
||||||
|
picker.$emit('pick', [start, end]);
|
||||||
|
}
|
||||||
|
}]
|
||||||
|
},
|
||||||
|
totalWeight: 0,
|
||||||
|
// 遮罩层
|
||||||
|
loading: true,
|
||||||
|
// 选中数组
|
||||||
|
ids: [],
|
||||||
|
// 选中名字
|
||||||
|
names: [],
|
||||||
|
// 非单个禁用
|
||||||
|
single: true,
|
||||||
|
// 非多个禁用
|
||||||
|
multiple: true,
|
||||||
|
// 显示搜索条件
|
||||||
|
showSearch: true,
|
||||||
|
// 总条数
|
||||||
|
total: 0,
|
||||||
|
// 有效期
|
||||||
|
queryTimeTwo: [],
|
||||||
|
// 单据时间
|
||||||
|
queryTime: [],
|
||||||
|
// 仓库名称数据
|
||||||
|
warehouses: [],
|
||||||
|
// 船舶航次表格数据
|
||||||
|
bmvoyageList: [],
|
||||||
|
// 船舱表格数据
|
||||||
|
vesselList: [],
|
||||||
|
// 客户表格数据
|
||||||
|
custList: [],
|
||||||
|
// 货物表格数据
|
||||||
|
cargoList: [],
|
||||||
|
// 仓库表格数据
|
||||||
|
stockList: [],
|
||||||
|
// 货架表格数据
|
||||||
|
shelfList: [],
|
||||||
|
// 仓库入库管理表格数据
|
||||||
|
ckcargoList: [],
|
||||||
|
// 弹出层标题
|
||||||
|
title: "",
|
||||||
|
// 是否显示弹出层
|
||||||
|
open: false,
|
||||||
|
// 查询参数
|
||||||
|
queryParams: {
|
||||||
|
pageNum: 1,
|
||||||
|
pageSize: 10,
|
||||||
|
billId: null,
|
||||||
|
billDate: null,
|
||||||
|
billNumber: null,
|
||||||
|
inoutType: "1",
|
||||||
|
voyageId: null,
|
||||||
|
voyageNo: null,
|
||||||
|
vesselId: null,
|
||||||
|
vesselName: null,
|
||||||
|
cargoId: null,
|
||||||
|
hsCode: null,
|
||||||
|
cargoName: null,
|
||||||
|
billNo: null,
|
||||||
|
cargoSpec: null,
|
||||||
|
originCountry: null,
|
||||||
|
custId: null,
|
||||||
|
custName: null,
|
||||||
|
opType: null,
|
||||||
|
tradType: null,
|
||||||
|
cargoNum: null,
|
||||||
|
cargoWt: null,
|
||||||
|
cargoVol: null,
|
||||||
|
stockId: null,
|
||||||
|
stockCode: null,
|
||||||
|
stockName: null,
|
||||||
|
shelfName: null,
|
||||||
|
cargoValue:null,
|
||||||
|
customsNo:null,
|
||||||
|
listNumber:null,
|
||||||
|
beginDate: null,
|
||||||
|
endDate: null,
|
||||||
|
beginDateTwo: null,
|
||||||
|
endDateTwo: null,
|
||||||
|
bookNumber: null,
|
||||||
|
},
|
||||||
|
// 表单参数
|
||||||
|
form: {},
|
||||||
|
// 表单校验
|
||||||
|
rules: {
|
||||||
|
stockId: [
|
||||||
|
{ required: true, message: "库场ID不能为空", trigger: "blur" }
|
||||||
|
],
|
||||||
|
billDate: [
|
||||||
|
{ required: true, message: "单据日期不能为空", trigger: "blur" }
|
||||||
|
],
|
||||||
|
billNumber: [
|
||||||
|
{ required: true, message: "单据编号不能为空", trigger: "blur" }
|
||||||
|
],
|
||||||
|
inoutType: [
|
||||||
|
{ required: true, message: "出入库类型不能为空", trigger: "blur" }
|
||||||
|
],
|
||||||
|
voyageNo: [
|
||||||
|
{ required: true, message: "航次号不能为空", trigger: "blur" }
|
||||||
|
],
|
||||||
|
vesselName: [
|
||||||
|
{ required: true, message: "船舶名称不能为空", trigger: "blur" }
|
||||||
|
],
|
||||||
|
cargoName: [
|
||||||
|
{ required: true, message: "货物名称不能为空", trigger: "blur" }
|
||||||
|
],
|
||||||
|
cargoWt: [
|
||||||
|
{ required: true, message: "货物重量不能为空", trigger: "blur" }
|
||||||
|
],
|
||||||
|
cargoNum: [
|
||||||
|
{ required: true, message: "货物件数不能为空", trigger: "blur" }
|
||||||
|
],
|
||||||
|
cargoVol: [
|
||||||
|
{ required: true, message: "货物体积不能为空", trigger: "blur" }
|
||||||
|
],
|
||||||
|
stockName: [
|
||||||
|
{ required: true, message: "库场名称不能为空", trigger: "blur" }
|
||||||
|
],
|
||||||
|
custName: [
|
||||||
|
{ required: true, message: "货主名称不能为空", trigger: "blur" }
|
||||||
|
],
|
||||||
|
}
|
||||||
|
};
|
||||||
|
},
|
||||||
|
created() {
|
||||||
|
this.getList();
|
||||||
|
// this.getStockList();
|
||||||
|
this.getCustList();
|
||||||
|
this.getCargoList();
|
||||||
|
this.getWarehouseList();
|
||||||
|
this.getShelfList();
|
||||||
|
|
||||||
|
// listWarehouse({}).then(response => {
|
||||||
|
// console.log(response)
|
||||||
|
// this.warehouses = response.list;
|
||||||
|
// });
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
getWarehouseList() {
|
||||||
|
let param = {};
|
||||||
|
listWarehouse(param).then(response => {
|
||||||
|
this.warehouses = response || [];
|
||||||
|
}).catch(e => {
|
||||||
|
this.warehouses = [];
|
||||||
|
});
|
||||||
|
},
|
||||||
|
//航次
|
||||||
|
// setBmvoyageDetail(voyageId) {
|
||||||
|
// this.bmvoyageList.forEach(ele => {
|
||||||
|
// if (ele.id == voyageId) {
|
||||||
|
// this.form.voyageNo = ele.voyageNo;
|
||||||
|
// this.form.vesselName = ele.vesselName;
|
||||||
|
// // this.form.berthName = ele.berthName;
|
||||||
|
// this.form.deptId = ele.deptId;
|
||||||
|
// this.form.vesselId = ele.vesselId;
|
||||||
|
// this.form.netTon = ele.netTon;
|
||||||
|
// this.form.opType = ele.opType;
|
||||||
|
// }
|
||||||
|
// })
|
||||||
|
// },
|
||||||
|
// getBmvoyage() {
|
||||||
|
// let param = {};
|
||||||
|
// listBmvoyage(param).then(response => {
|
||||||
|
// this.bmvoyageList = response.data;
|
||||||
|
// }).catch(e => {
|
||||||
|
// });
|
||||||
|
// },
|
||||||
|
//船舶
|
||||||
|
// setVesselDetail(vesselId) {
|
||||||
|
// this.vesselList.forEach(ele => {
|
||||||
|
// if (ele.id == vesselId) {
|
||||||
|
// this.form.vesselName = ele.vesselName;
|
||||||
|
//
|
||||||
|
// }
|
||||||
|
// })
|
||||||
|
// },
|
||||||
|
// getVesselList() {
|
||||||
|
// let param = {};
|
||||||
|
// listVessel(param).then(response => {
|
||||||
|
// this.vesselList = response.data;
|
||||||
|
// }).catch(e => {
|
||||||
|
// });
|
||||||
|
// },
|
||||||
|
//货物
|
||||||
|
setCargoDetail(cargoId) {
|
||||||
|
this.cargoList.forEach(ele => {
|
||||||
|
if (ele.id == cargoId) {
|
||||||
|
this.form.cargoName = ele.cargoName;
|
||||||
|
this.form.hsCode = ele.hsCode;
|
||||||
|
this.form.cargoSpec = ele.cargoSpec;
|
||||||
|
this.form.originCountry = ele.originCountry;
|
||||||
|
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
getCargoList() {
|
||||||
|
let param = {};
|
||||||
|
listCargo(param).then(response => {
|
||||||
|
this.cargoList = response.data;
|
||||||
|
}).catch(e => {
|
||||||
|
});
|
||||||
|
},
|
||||||
|
//客户
|
||||||
|
setCustDetail(custId) {
|
||||||
|
this.custList.forEach(ele => {
|
||||||
|
if (ele.id == custId) {
|
||||||
|
this.form.custName = ele.custName;
|
||||||
|
this.form.custCode = ele.custCode;
|
||||||
|
this.form.custId = ele.id;
|
||||||
|
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
getCustList() {
|
||||||
|
let param = {};
|
||||||
|
listCust(param).then(response => {
|
||||||
|
this.custList = response.data;
|
||||||
|
}).catch(e => {
|
||||||
|
});
|
||||||
|
},
|
||||||
|
//仓库
|
||||||
|
setStockDetail(stockId) {
|
||||||
|
this.stockList.forEach(ele => {
|
||||||
|
if (ele.id == stockId) {
|
||||||
|
// this.form.stockId = ele.stockId;
|
||||||
|
this.form.stockName = ele.stockName;
|
||||||
|
this.form.stockCode = ele.stockCode;
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
// getStockList() {
|
||||||
|
// let param = {};
|
||||||
|
// listStock(param).then(response => {
|
||||||
|
// this.stockList = response.data;
|
||||||
|
// }).catch(e => {
|
||||||
|
// });
|
||||||
|
// },
|
||||||
|
// 货架
|
||||||
|
getShelfList() {
|
||||||
|
let param = {};
|
||||||
|
listShelf(param).then(response => {
|
||||||
|
this.shelfList = response;
|
||||||
|
}).catch(e => {
|
||||||
|
this.shelfList = [];
|
||||||
|
});
|
||||||
|
},
|
||||||
|
/** 查询仓库入库管理列表 */
|
||||||
|
getList() {
|
||||||
|
this.loading = true;
|
||||||
|
this.queryParams.inoutType = "1";
|
||||||
|
if(this.queryParams.queryTime){
|
||||||
|
this.queryParams.beginDate=this.queryParams.queryTime[0];
|
||||||
|
this.queryParams.endDate=this.queryParams.queryTime[1];
|
||||||
|
this.queryParams.queryTime = [];
|
||||||
|
}else{
|
||||||
|
this.queryParams.beginDate=null;
|
||||||
|
this.queryParams.endDate=null;
|
||||||
|
}
|
||||||
|
if(this.queryParams.excTime){
|
||||||
|
this.queryParams.beginDateTwo=this.queryParams.excTime[0];
|
||||||
|
this.queryParams.endDateTwo=this.queryParams.excTime[1];
|
||||||
|
this.queryParams.excTime = [];
|
||||||
|
}else{
|
||||||
|
this.queryParams.beginDateTwo=null;
|
||||||
|
this.queryParams.endDateTwo=null;
|
||||||
|
}
|
||||||
|
pageListCkcargo(this.queryParams).then(response => {
|
||||||
|
this.ckcargoList = response.list;
|
||||||
|
this.total = response.total;
|
||||||
|
this.loading = false;
|
||||||
|
}).catch(e => {
|
||||||
|
this.loading = false;
|
||||||
|
});
|
||||||
|
selectTotalWt(this.queryParams).then(response => {
|
||||||
|
this.totalWeight = response;
|
||||||
|
}).catch(e => {
|
||||||
|
});
|
||||||
|
},
|
||||||
|
// 取消按钮
|
||||||
|
cancel() {
|
||||||
|
this.open = false;
|
||||||
|
this.reset();
|
||||||
|
},
|
||||||
|
// 表单重置
|
||||||
|
reset() {
|
||||||
|
this.form = {
|
||||||
|
id: null,
|
||||||
|
billId: null,
|
||||||
|
billDate: null,
|
||||||
|
billNumber: null,
|
||||||
|
inoutType: "1",
|
||||||
|
voyageId: null,
|
||||||
|
voyageNo: null,
|
||||||
|
vesselId: null,
|
||||||
|
vesselName: null,
|
||||||
|
cargoId: null,
|
||||||
|
hsCode: null,
|
||||||
|
cargoName: null,
|
||||||
|
billNo: null,
|
||||||
|
cargoSpec: null,
|
||||||
|
originCountry: null,
|
||||||
|
custId: null,
|
||||||
|
custName: null,
|
||||||
|
opType: null,
|
||||||
|
tradType: null,
|
||||||
|
cargoNum: null,
|
||||||
|
cargoWt: null,
|
||||||
|
cargoVol: null,
|
||||||
|
stockId: null,
|
||||||
|
stockCode: null,
|
||||||
|
stockName: null,
|
||||||
|
remark: null,
|
||||||
|
cargoValue:null,
|
||||||
|
customsNo:null,
|
||||||
|
listNumber:null,
|
||||||
|
bookNumber:null,
|
||||||
|
};
|
||||||
|
|
||||||
|
this.resetForm("form");
|
||||||
|
},
|
||||||
|
//排序
|
||||||
|
handleSortChange(col) {
|
||||||
|
this.$sortBy(col, this.queryParams);
|
||||||
|
this.getList();
|
||||||
|
},
|
||||||
|
/** 搜索按钮操作 */
|
||||||
|
handleQuery() {
|
||||||
|
this.queryParams.pageNum = 1;
|
||||||
|
if (this.queryParams.pageSize === undefined) {
|
||||||
|
this.queryParams.pageSize = 10;
|
||||||
|
}
|
||||||
|
this.getList();
|
||||||
|
},
|
||||||
|
/** 重置按钮操作 */
|
||||||
|
resetQuery() {
|
||||||
|
this.resetForm("queryForm");
|
||||||
|
this.queryTime = [];
|
||||||
|
this.queryTimeTwo = [];
|
||||||
|
this.queryParams = {
|
||||||
|
...this.queryParams,
|
||||||
|
pageNum: 1,
|
||||||
|
pageSize: 10
|
||||||
|
};
|
||||||
|
this.handleQuery();
|
||||||
|
},
|
||||||
|
// 多选框选中数据
|
||||||
|
handleSelectionChange(selection) {
|
||||||
|
this.ids = selection.map(item => item.id);
|
||||||
|
this.names = selection.map(item => item.id);
|
||||||
|
this.single = selection.length!==1;
|
||||||
|
this.multiple = !selection.length;
|
||||||
|
},
|
||||||
|
/** 新增按钮操作 */
|
||||||
|
handleAdd() {
|
||||||
|
this.reset();
|
||||||
|
this.form.inoutType="入库";
|
||||||
|
|
||||||
|
this.open = true;
|
||||||
|
this.title = "添加仓库入库管理";
|
||||||
|
},
|
||||||
|
/** 修改按钮操作 */
|
||||||
|
handleUpdate(row) {
|
||||||
|
this.reset();
|
||||||
|
|
||||||
|
const id = row.id || this.ids;
|
||||||
|
getCkcargo(id).then(response => {
|
||||||
|
this.form = response.data;
|
||||||
|
this.open = true;
|
||||||
|
this.title = "修改仓库入库管理";
|
||||||
|
});
|
||||||
|
},
|
||||||
|
/** 提交按钮 */
|
||||||
|
submitForm() {
|
||||||
|
this.$refs["form"].validate(valid => {
|
||||||
|
if (valid) {
|
||||||
|
if (this.form.id != null) {
|
||||||
|
updateCkcargo(this.form).then(response => {
|
||||||
|
this.$modal.msgSuccess("修改成功");
|
||||||
|
this.open = false;
|
||||||
|
this.getList();
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
addCkcargo(this.form).then(response => {
|
||||||
|
this.$modal.msgSuccess("新增成功");
|
||||||
|
this.open = false;
|
||||||
|
this.getList();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
/** 删除按钮操作 */
|
||||||
|
handleDelete(row) {
|
||||||
|
const ids = row.id || this.ids;
|
||||||
|
const names = row.id || this.names;
|
||||||
|
this.$modal.confirm('是否确认删除"' + row.billNumber + '"的数据项?').then(function() {
|
||||||
|
return delCkcargo(ids);
|
||||||
|
}).then(() => {
|
||||||
|
this.getList();
|
||||||
|
this.$modal.msgSuccess("删除成功");
|
||||||
|
}).catch(() => {});
|
||||||
|
},
|
||||||
|
/** 导出按钮操作 */
|
||||||
|
handleExport() {
|
||||||
|
this.download('jxc/ckcargo/export', {
|
||||||
|
...this.queryParams
|
||||||
|
}, `仓库入库管理_${new Date().getTime()}.xlsx`)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
</script>
|
||||||
Loading…
Reference in new issue