Toggle navigation
Toggle navigation
This project
Loading...
Sign in
Fedex
/
EcomWeb
Go to a project
Toggle navigation
Toggle navigation pinning
Projects
Groups
Snippets
Help
Project
Activity
Repository
Pipelines
Graphs
Issues
0
Merge Requests
0
Wiki
Snippets
Network
Create a new issue
Builds
Commits
Issue Boards
Authored by
zhanbo.xu
2025-03-05 15:42:00 +0800
Browse Files
Options
Browse Files
Download
Email Patches
Plain Diff
Commit
a4244d20c3e984f5b5e13bea8832a67aa9118a1d
a4244d20
1 parent
d64fc3e5
feat: 新增法定单位
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
262 additions
and
218 deletions
src/views/editReportingData/index.vue
src/views/editReportingData/index.vue
View file @
a4244d2
...
...
@@ -6,7 +6,7 @@
<el-button class="entrySaveButton" @click="back">返 回</el-button>
</div>
</div>
<section :class="{partsHidden:!isFold
}">
<section :class="{ partsHidden: !isFold
}">
<el-form
class="fedexFormStyle fedexFormEditStyle"
ref="editForm"
...
...
@@ -233,7 +233,6 @@
></el-input>
</Formitem>
</el-col>
</el-row>
<el-row :gutter="5">
<el-col :span="3">
...
...
@@ -273,7 +272,8 @@
placeholder=""
>
<el-option
v-for="(item, index) in $store.getters.dict.COUNTRY_REGION_CODE"
v-for="(item, index) in $store.getters.dict
.COUNTRY_REGION_CODE"
:key="index"
:label="item.itemChineseName"
:value="item.itemCode"
...
...
@@ -292,7 +292,8 @@
placeholder=""
>
<el-option
v-for="(item, index) in $store.getters.dict.COUNTRY_REGION_CODE"
v-for="(item, index) in $store.getters.dict
.COUNTRY_REGION_CODE"
:key="index"
:label="item.itemChineseName"
:value="item.itemCode"
...
...
@@ -364,7 +365,6 @@
></el-input>
</Formitem>
</el-col>
</el-row>
<el-row :gutter="5">
<el-col :span="3">
...
...
@@ -479,11 +479,21 @@
</el-form>
</section>
<div class="fold-unfold">
<img v-if="isFold" src="@/assets/images/fold.png" @click="()=>isFold = false" alt="">
<img v-if="!isFold" src="@/assets/images/unfold.png" @click="()=>isFold = true" alt="">
<img
v-if="isFold"
src="@/assets/images/fold.png"
@click="() => (isFold = false)"
alt=""
/>
<img
v-if="!isFold"
src="@/assets/images/unfold.png"
@click="() => (isFold = true)"
alt=""
/>
</div>
<div class="entryTitle" style="margin-top: 10px">商品明细</div>
<section style="position:
relative">
<section style="position:
relative">
<Table
class="fedexDetialTable fedexSreachTable editableTable"
ref="entryTable"
...
...
@@ -506,19 +516,40 @@
/>
</template>
<template v-slot:destinationCountryRegionCode="scope">
<span>{{ mapDicDatas($store.getters.dict.COUNTRY_REGION_CODE, scope.row.destinationCountryRegionCode) }}</span>
<span>{{
mapDicDatas(
$store.getters.dict.COUNTRY_REGION_CODE,
scope.row.destinationCountryRegionCode
)
}}</span>
</template>
<template v-slot:unit="scope">
<span>{{ mapDicDatas($store.getters.dict.MEASUREMENT_UNIT, scope.row.unit) }}</span>
<span>{{
mapDicDatas($store.getters.dict.MEASUREMENT_UNIT, scope.row.unit)
}}</span>
</template>
<template v-slot:unitLegalFirstCode="scope">
<span>{{
mapDicDatas(
$store.getters.dict.MEASUREMENT_UNIT,
scope.row.unitLegalFirstCode
)
}}</span>
</template>
<template v-slot:currency="scope">
<span>{{ mapCurrencyDatas($store.getters.dict.CURRENCY, scope.row.currency) }}</span>
<span>{{
mapCurrencyDatas($store.getters.dict.CURRENCY, scope.row.currency)
}}</span>
</template>
<template slot="optionColumn">
<el-table-column align="left" label="操作" width="100">
<template slot-scope="scope">
<el-button type="text" @click="updateRow(scope.row)"> 修改 </el-button>
<el-button type="text" @click="deleteRow(scope.row)"> 删除 </el-button>
<el-button type="text" @click="updateRow(scope.row)">
修改
</el-button>
<el-button type="text" @click="deleteRow(scope.row)">
删除
</el-button>
</template>
</el-table-column>
</template>
...
...
@@ -533,39 +564,42 @@
class="entrySaveButton entrySaveButton-background revokeSubmitBtn"
type="primary"
@click="submitEditedReportDatas"
>保存</el-button>
<el-button
class="entrySaveButton"
@click="back"
>返回</el-button>
>保存</el-button
>
<el-button class="entrySaveButton" @click="back">返回</el-button>
</div>
</div>
</template>
</template>
<script>
import RowDataEditForm from "./RowDataEditForm.vue";
import { getCustomerList, getPortList, getDeclareData, updateDeclareData } from "@/api/declareData-api.js";
import { getDictData } from '@/api/system/dict-api.js'
import item from "@/layout/components/Sidebar/Item.vue";
export default {
<script>
import RowDataEditForm from "./RowDataEditForm.vue";
import {
getCustomerList,
getPortList,
getDeclareData,
updateDeclareData,
} from "@/api/declareData-api.js";
import { getDictData } from "@/api/system/dict-api.js";
import item from "@/layout/components/Sidebar/Item.vue";
export default {
name: "",
components: { RowDataEditForm },
data() {
var checkNegativeNum = (rule, value, callback) => {
if (value < 0) {
callback(new Error('数值不能为负'
));
callback(new Error("数值不能为负"
));
} else {
callback();
}
};
var checkInsuredFee = (rule, value, callback) => {
if (value < 0) {
callback(new Error('数值不能为负'
));
callback(new Error("数值不能为负"
));
}
if (value !== ''
&& value !== undefined) {
if (value !== ""
&& value !== undefined) {
const regex = /^\d{0,14}(\.\d{1,5})?$/;
if (!regex.test(value)) {
callback(new Error('整数最多14位,小数最多5位'
));
callback(new Error("整数最多14位,小数最多5位"
));
} else {
callback();
}
...
...
@@ -575,123 +609,119 @@
};
var checkPackNo = (rule, value, callback) => {
if (!Number.isInteger(value)) {
callback(new Error('请输入整数值'
));
callback(new Error("请输入整数值"
));
} else {
if (value < 0) {
callback(new Error('数值不能为负'
));
callback(new Error("数值不能为负"
));
} else {
callback();
}
}
};
return {
ebcDataList:
[],
declareCustomsDataList:
[],
ebcDataList:
[],
declareCustomsDataList:
[],
declareId: null,
formData: {
appType:9610
appType: 9610,
},
formRules:
{
formRules:
{
ebccode: [
{ required: true, message: '请选择电商企业', trigger: 'change'
},
{ required: true, message: "请选择电商企业", trigger: "change"
},
],
logisticsCode: [
{ required: true, message: '请选择物流企业', trigger: 'change'
},
{ required: true, message: "请选择物流企业", trigger: "change"
},
],
orderNo: [
{ required: true, message: '请输入订单编号', trigger: 'blur'
},
{ max: 60, message: '长度不能超过60个字符', trigger: 'blur' }
{ required: true, message: "请输入订单编号", trigger: "blur"
},
{ max: 60, message: "长度不能超过60个字符", trigger: "blur" },
],
logisticsNo: [
{ required: true, message: '请输入物流运单编号', trigger: 'blur'
},
{ max: 80, message: '长度不能超过80个字符', trigger: 'blur' }
{ required: true, message: "请输入物流运单编号", trigger: "blur"
},
{ max: 80, message: "长度不能超过80个字符", trigger: "blur" },
],
declareCustomsCode: [
{ required: true, message: '请选择申报地海关', trigger: 'change' }
],
exportDate: [
{ message: '请选择出口日期', trigger: 'change' }
{ required: true, message: "请选择申报地海关", trigger: "change" },
],
exportDate: [{ message: "请选择出口日期", trigger: "change" }],
goodsValue: [
{ required: true, message: '请输入商品金额', trigger: 'blur' }
{ required: true, message: "请输入商品金额", trigger: "blur" },
],
miscellaneousFreight:
[
{ validator: checkNegativeNum, trigger: 'blur' }
miscellaneousFreight:
[
{ validator: checkNegativeNum, trigger: "blur" },
],
currency: [
{ required: true, message: '请选择币制', trigger: 'change' }
{ required: true, message: "请选择币制", trigger: "change" },
],
mainGoodsInfo: [
{ required: true, message: '请输入主要物品信息', trigger: 'blur'
},
{ max: 200, message: '长度不能超过200个字符', trigger: 'blur' }
{ required: true, message: "请输入主要物品信息", trigger: "blur"
},
{ max: 200, message: "长度不能超过200个字符", trigger: "blur" },
],
flightNumber: [
{ required: true, message: '请输入航班号', trigger: 'blur'
},
{ max: 32, message: '长度不能超过32个字符', trigger: 'blur' }
{ required: true, message: "请输入航班号", trigger: "blur"
},
{ max: 32, message: "长度不能超过32个字符", trigger: "blur" },
],
billno: [
{ required: true, message: '请输入提运单号', trigger: 'blur'
},
{ max: 37, message: '长度不能超过37个字符', trigger: 'blur' }
{ required: true, message: "请输入提运单号", trigger: "blur"
},
{ max: 37, message: "长度不能超过37个字符", trigger: "blur" },
],
totalPackageNo: [
{ max: 37, message: '长度不能超过37个字符', trigger: 'blur' }
{ max: 37, message: "长度不能超过37个字符", trigger: "blur" },
],
regulatoryVenueCode: [
{ max: 10, message: '长度不能超过10个字符', trigger: 'blur' }
{ max: 10, message: "长度不能超过10个字符", trigger: "blur" },
],
licenseKey: [
{ max: 19, message: '长度不能超过19个字符', trigger: 'blur' }
{ max: 19, message: "长度不能超过19个字符", trigger: "blur" },
],
destinationCountryRegion: [
{ required: true, message: '请选择运抵国', trigger: 'change' }
{ required: true, message: "请选择运抵国", trigger: "change" },
],
portCode: [
{ required: true, message: '请选择运指运港代码', trigger: 'change' }
{ required: true, message: "请选择运指运港代码", trigger: "change" },
],
freight: [
{ required: true, message: '请输入运费', trigger: 'blur'
},
{ validator: checkNegativeNum, trigger: 'blur' }
{ required: true, message: "请输入运费", trigger: "blur"
},
{ validator: checkNegativeNum, trigger: "blur" },
],
freightCurrency: [
{ required: true, message: '请选择运费币制', trigger: 'change' }
{ required: true, message: "请选择运费币制", trigger: "change" },
],
freightTag: [
{ required: true, message: '请选择运费标志', trigger: 'change' }
{ required: true, message: "请选择运费标志", trigger: "change" },
],
insuredfee: [
{ required: true, message: '请输入保费', trigger: 'blur'
},
{ validator: checkInsuredFee, trigger: 'blur' }
{ required: true, message: "请输入保费", trigger: "blur"
},
{ validator: checkInsuredFee, trigger: "blur" },
],
insuredfeeCurrency: [
{ required: true, message: '请输入保费币制', trigger: 'blur' }
{ required: true, message: "请输入保费币制", trigger: "blur" },
],
insuredfeeTag: [
{ required: true, message: '请输选择保费标志', trigger: 'change' }
{ required: true, message: "请输选择保费标志", trigger: "change" },
],
packageTypeCode: [
{ required: true, message: '请选择包装种类代码', trigger: 'change' }
{ required: true, message: "请选择包装种类代码", trigger: "change" },
],
packNo: [
{ required: true, message: '请输入件数', trigger: 'blur'
},
{ validator: checkPackNo, trigger: 'blur' }
{ required: true, message: "请输入件数", trigger: "blur"
},
{ validator: checkPackNo, trigger: "blur" },
],
weight: [
{ required: true, message: '请输入毛重', trigger: 'blur' },
{ validator: checkNegativeNum, trigger: 'blur' }
],
netWeight: [
{ required: true, message: '请输入净重', trigger: 'blur' }
{ required: true, message: "请输入毛重", trigger: "blur" },
{ validator: checkNegativeNum, trigger: "blur" },
],
netWeight: [{ required: true, message: "请输入净重", trigger: "blur" }],
remark: [
{ max: 1000, message: '长度不能超过1000个字符', trigger: 'blur' }
]
{ max: 1000, message: "长度不能超过1000个字符", trigger: "blur" },
],
},
detailData: [],
detialHeaderData: [
{
value: "rowDataEdit",
expand:
true,
width:
0,
expand:
true,
width:
0,
},
{
name: "企业商品货号",
...
...
@@ -722,14 +752,12 @@
value: "productCode",
width: "",
align: "left",
},
{
name: "规格型号",
value: "model",
width: "",
align: "left",
},
{
name: "账册备案料号",
...
...
@@ -748,14 +776,14 @@
value: "destinationCountryRegionCode",
width: "",
align: "left",
slot:true
slot: true,
},
{
name: "计量单位",
value: "unit",
width: "",
align: "left",
slot:true
slot: true,
},
{
name: "数量",
...
...
@@ -770,11 +798,18 @@
align: "left",
},
{
name: "法定单位",
value: "unitLegalFirstCode",
width: "",
align: "left",
slot: true,
},
{
name: "币制",
value: "currency",
width: "",
align: "left",
slot:true
slot: true,
},
{
name: "单价",
...
...
@@ -805,7 +840,7 @@
entryLoading: false,
},
logtableType: true,
expandRowKeys:
[],
expandRowKeys:
[],
isFold: false,
// 用于保存原始数据
originalDetailData: {},
...
...
@@ -817,83 +852,88 @@
created() {
if (this.$route.params.data) {
this.declareId = this.$route.params.data.declareId;
this.queryDeclareData(this.declareId)
this.queryCustomerList()
this.queryPortList()
this.queryDeclareData(this.declareId);
this.queryCustomerList();
this.queryPortList();
} else {
this.back();
}
},
beforeRouteLeave(to, from, next) {
if (to.name === 'ReportingData'
) {
if (to.name === "ReportingData"
) {
// 设置一个标志表示需要刷新数据
to.meta.needsRefresh = true;
}
next();
},
methods: {
mapDicDatas(dicArr, code)
{
mapDicDatas(dicArr, code)
{
if (code != "") {
return dicArr.filter(item => item.itemCode == code)[0].itemChineseName
return dicArr.filter((item) => item.itemCode == code)[0]
.itemChineseName;
} else {
return ''
return "";
}
},
mapCurrencyDatas(dicArr, code)
{
mapCurrencyDatas(dicArr, code)
{
if (code != "") {
return dicArr.filter(item => item.itemValue == code)[0].itemChineseName
return dicArr.filter((item) => item.itemValue == code)[0]
.itemChineseName;
} else {
return ''
return "";
}
},
//获取客户下拉列表数据
queryCustomerList(){
getCustomerList().then(res =>{
queryCustomerList() {
getCustomerList()
.then((res) => {
if (res.code == 200) {
this.ebcDataList = res.data.value
this.ebcDataList = res.data.value;
} else {
this.ebcDataList = []
this.ebcDataList = [];
}
}).catch(err =>{
console.log(err)
})
.catch((err) => {
console.log(err);
});
},
//获取口岸表数据
queryPortList(){
getPortList().then(res =>{
queryPortList() {
getPortList()
.then((res) => {
if (res.code == 200) {
this.declareCustomsDataList = res.data.value
this.declareCustomsDataList = res.data.value;
} else {
this.declareCustomsDataList = []
this.declareCustomsDataList = [];
}
}).catch(err =>{
console.log(err)
})
.catch((err) => {
console.log(err);
});
},
//获取申报数据
queryDeclareData(declareId) {
getDeclareData({declareId}).then(res =>{
getDeclareData({ declareId })
.then((res) => {
// console.log(1111, res)
if (res.code == 200) {
res.data.declare.orderNo = res.data.declare.orderno
this.formData = res.data.declare
this.formData.appType=9610
this.detailData = res.data.product.length ? res.data.product.map((item, index) =>{
item.gnum = index+1
return item
}) : []
res.data.declare.orderNo = res.data.declare.orderno;
this.formData = res.data.declare;
this.formData.appType = 9610;
this.detailData = res.data.product.length
? res.data.product.map((item, index) => {
item.gnum = index + 1;
return item;
})
: [];
} else {
this.detailData = []
this.formData = {}
this.detailData = [];
this.formData = {};
}
}).catch(err =>{
console.log(err)
})
.catch((err) => {
console.log(err);
});
},
hiddenLogTable() {
...
...
@@ -926,33 +966,36 @@
if (!isValid) {
// console.log(22)
this.lastItemValid = false; // 标记上一次新增的 item 未通过校验
this.$message.warning('请先完善新增的商品信息'
);
this.$message.warning("请先完善新增的商品信息"
);
return;
}
}
}
// 校验通过,允许新增 item
let orderNum = this.detailData.at(-1) === undefined ? 1 : this.detailData.at(-1).gnum + 1;
let orderNum =
this.detailData.at(-1) === undefined
? 1
: this.detailData.at(-1).gnum + 1;
this.detailData.push({
"gnum":
orderNum,
"accountBookMaterialNumber"
: "",
"barCode"
: "",
"currency"
: "",
"destinationCountryRegionCode"
: "",
"enterpriseProductCode"
: "",
"enterpriseProductDescribe"
: "",
"enterpriseProductName"
: "",
"legalQty"
: 0,
"model"
: "",
"netWeight"
: 0,
"price"
: 0,
"productCode"
: "",
"productName"
: "",
"qty"
: 0,
"remark"
: "",
"totalPrice"
: 0,
"unit"
: "",
"isNew": true
// 添加 isNew 标志
gnum:
orderNum,
accountBookMaterialNumber
: "",
barCode
: "",
currency
: "",
destinationCountryRegionCode
: "",
enterpriseProductCode
: "",
enterpriseProductDescribe
: "",
enterpriseProductName
: "",
legalQty
: 0,
model
: "",
netWeight
: 0,
price
: 0,
productCode
: "",
productName
: "",
qty
: 0,
remark
: "",
totalPrice
: 0,
unit
: "",
isNew: true,
// 添加 isNew 标志
});
this.$nextTick(() => {
...
...
@@ -960,59 +1003,61 @@
this.lastItemValid = true; // 重置标志位
});
},
updateRow(row)
{
if (this.expandRowKeys.length > 0) return
this.expandRowKeys = [row.gnum]
updateRow(row)
{
if (this.expandRowKeys.length > 0) return;
this.expandRowKeys = [row.gnum];
this.currentRowKey = row.gnum; // 设置当前行的 gnum
// 保存原始数据
this.originalDetailData[row.gnum] = { ...row };
let obj = {}
let obj = {};
for (let key in row) {
obj[key] = row[key]
obj[key] = row[key];
}
this.$nextTick(()=>
{
this.$refs.rowEditForm.tableRowformData = obj
this.$nextTick(() =>
{
this.$refs.rowEditForm.tableRowformData = obj;
// const table = this.$refs.entryTable.$el.querySelector('.el-table__body-wrapper');
// table.scrollTop = row.gnum*51+10
})
});
},
getTotalNumber()
{
getTotalNumber()
{
let totalNetWeight = 0;
let totalGoodsValue = 0
for (let i=0; i<
this.detailData.length; i++) {
totalNetWeight += Number(this.detailData[i].netWeight)
totalGoodsValue += Number(this.detailData[i].totalPrice)
let totalGoodsValue = 0;
for (let i = 0; i <
this.detailData.length; i++) {
totalNetWeight += Number(this.detailData[i].netWeight);
totalGoodsValue += Number(this.detailData[i].totalPrice);
}
this.formData.netWeight = totalNetWeight.toFixed(5)
this.formData.goodsValue = totalGoodsValue.toFixed(5)
this.formData.netWeight = totalNetWeight.toFixed(5);
this.formData.goodsValue = totalGoodsValue.toFixed(5);
},
deleteRow(row){
this.detailData = this.detailData.filter(item => item.gnum !=row.gnum).map((item, index) =>{
item.gnum = index+1
return item
})
this.$nextTick(()=>{
this.getTotalNumber()
this.expandRowKeys = []
this.detailData.length
deleteRow(row) {
this.detailData = this.detailData
.filter((item) => item.gnum != row.gnum)
.map((item, index) => {
item.gnum = index + 1;
return item;
});
this.$nextTick(() => {
this.getTotalNumber();
this.expandRowKeys = [];
this.detailData.length;
this.lastItemValid = this.detailData.length === row.index;
})
});
},
rowFormDataSave(props)
{
this.detailData.map(item =>
{
rowFormDataSave(props)
{
this.detailData.map((item) =>
{
if (item.gnum == props.gnum) {
item = Object.assign(item, props.tableRowformData)
return item
item = Object.assign(item, props.tableRowformData);
return item;
}
})
this.expandRowKeys = []
this.$nextTick(()=>
{
});
this.expandRowKeys = [];
this.$nextTick(() =>
{
this.lastItemValid = true;
this.getTotalNumber()
})
this.getTotalNumber();
});
},
cancelEditRowData(index) {
this.lastItemValid = true; // 重置标志位
...
...
@@ -1036,40 +1081,39 @@
this.lastItemValid = isValid;
},
//提交更新数据
submitEditedReportDatas()
{
submitEditedReportDatas()
{
this.$refs.editForm.validate((valid) => {
if (valid) {
let data = {
declare: this.formData,
product: this.detailData
}
updateDeclareData(data).then(res =>{
product: this.detailData,
};
updateDeclareData(data)
.then((res) => {
if (res.code == 200) {
this.msgSuccess("数据更新成功");
this.queryDeclareData(this.declareId)
this.queryDeclareData(this.declareId);
this.lastItemValid = true;
} else {
this.alertWarningMsg(res.message);
}
}).catch(err =>{
console.log(err)
})
.catch((err) => {
console.log(err);
});
} else {
return false;
}
});
},
//取消编辑
cancelEditedReportDatas(){
}
cancelEditedReportDatas() {},
},
};
</script>
};
</script>
<style scoped lang="scss">
.entry {
<style scoped lang="scss">
.entry {
width: 100%;
height: 100%;
padding: 10px;
...
...
@@ -1093,49 +1137,49 @@
.titleBorder {
border-bottom: 1px solid #333;
}
}
.addNewItem
{
}
.addNewItem
{
display: flex;
justify-content: flex-start;
align-items: center;
color:#007AB
7;
color: #007ab
7;
line-height: 38px;
i
{
i
{
margin-right: 3px;
}
span
{
span
{
font-size: 13px;
font-weight: 500;
cursor: pointer;
}
}
.formRowDataOperate
{
}
.formRowDataOperate
{
text-align: right;
padding: 0 20px;
a
{
color: #007AB
7;
a
{
color: #007ab
7;
font-weight: 600;
&:first-child
{
&:first-child
{
margin-right: 5px;
}
}
}
.fedexFormEditStyle .el-form-item:has(.formError) {
}
.fedexFormEditStyle .el-form-item:has(.formError) {
margin-bottom: 30px !important;
}
.fedexFormEditStyle .el-form-item .formError
{
padding:
0 0.9375rem !important;
}
.partsHidden
{
}
.fedexFormEditStyle .el-form-item .formError
{
padding:
0 0.9375rem !important;
}
.partsHidden
{
height: 164px;
overflow: hidden;
}
.fold-unfold
{
}
.fold-unfold
{
display: flex;
justify-content: center;
padding-top:
8px;
img
{
padding-top:
8px;
img
{
width: 22px;
}
}
</style>
}
</style>
...
...
Please
register
or
login
to post a comment