zhanbo.xu

feat: 新增法定单位

......@@ -31,9 +31,16 @@
:pageSizes="[20, 30, 50, 100]"
:totalCount="0"
:loading="tableLoading"
:emptyText="(loadingDatas && !rowData.popoverData.length) ? '数据加载中' : $t('portEntry.emptyText')"
height="350px"
maxHeight="500px"
:emptyText="
loadingDatas &&
rowData &&
rowData.popoverData &&
!rowData.popoverData.length
? '数据加载中'
: $t('portEntry.emptyText')
"
:height="tableHeight + 'px'"
:maxHeight="tableHeight + 'px'"
rowKey="id"
>
</Table>
......@@ -82,20 +89,31 @@ export default {
},
data() {
return {
tableLoading: false
tableLoading: false,
tableHeight: 350,
};
},
computed:{
loadingDatas(){
return this.$store.state.viewOption.loadingDatas
}
computed: {
loadingDatas() {
return this.$store.state.viewOption.loadingDatas;
},
},
mounted() {
this.calculateTableHeight();
window.addEventListener("resize", this.calculateTableHeight);
},
beforeDestroy() {
window.removeEventListener("resize", this.calculateTableHeight);
},
methods: {
calculateTableHeight() {
this.tableHeight = window.innerHeight - 300;
},
//弹框关闭
popoverClose() {
this.$emit("popoverClose");
this.parentDom.$refs.tables.$refs.bodyWrapper.style.overflowY = "auto";
this.$store.dispatch('setLoadingState', true)
this.$store.dispatch("setLoadingState", true);
},
//弹框状态改版
popoverChange(data, type) {
......
<template>
<div style="height: 100%;">
<el-form
class="fedexFormStyle fedexRowEditFormStyle"
ref="editRowForm"
:model="tableRowformData"
:rules="tableRowFormRules"
label-position="top"
size="small"
>
<el-row :gutter="5">
<el-col :span="4">
<Formitem label="企业商品货号" prop="enterpriseProductCode">
<el-input
type="text"
class="inputShadow"
id="inputInner--enterpriseProductCode"
resize="none"
v-model="tableRowformData.enterpriseProductCode"
clearable
placeholder=""
></el-input>
</Formitem>
</el-col>
<el-col :span="4">
<Formitem label="企业商品名称" prop="enterpriseProductName">
<el-input
type="text"
class="inputShadow"
id="inputInner--enterpriseProductName"
resize="none"
v-model="tableRowformData.enterpriseProductName"
clearable
placeholder=""
></el-input>
</Formitem>
</el-col>
<el-col :span="4">
<Formitem label="企业商品描述" prop="enterpriseProductDescribe">
<el-input
type="textarea"
class="inputShadow"
id="inputInner--enterpriseProductDescribe"
resize="none"
v-model="tableRowformData.enterpriseProductDescribe"
clearable
placeholder=""
></el-input>
</Formitem>
</el-col>
<el-col :span="4">
<Formitem label="商品名称" prop="productName">
<el-input
type="text"
class="inputShadow"
id="inputInner--productName"
resize="none"
v-model="tableRowformData.productName"
clearable
placeholder=""
></el-input>
</Formitem>
</el-col>
<el-col :span="4">
<Formitem label="商品编码" prop="productCode">
<el-input
type="text"
class="inputShadow"
id="inputInner--productCode"
resize="none"
v-model="tableRowformData.productCode"
clearable
placeholder=""
></el-input>
</Formitem>
</el-col>
<el-col :span="4">
<Formitem label="规格型号" prop="model">
<el-input
type="text"
class="inputShadow"
id="inputInner--model"
resize="none"
v-model="tableRowformData.model"
clearable
placeholder=""
></el-input>
</Formitem>
</el-col>
</el-row>
<el-row :gutter="5">
<el-col :span="4">
<Formitem label="账册备案料号" prop="accountBookMaterialNumber">
<el-input
type="text"
class="inputShadow"
id="inputInner--accountBookMaterialNumber"
resize="none"
v-model="tableRowformData.accountBookMaterialNumber"
clearable
placeholder=""
></el-input>
</Formitem>
</el-col>
<el-col :span="4">
<Formitem label="条形码" prop="barCode">
<el-input
type="text"
class="inputShadow"
id="inputInner--barCode"
resize="none"
v-model="tableRowformData.barCode"
clearable
placeholder=""
></el-input>
</Formitem>
</el-col>
<el-col :span="4">
<Formitem label="目的国(地区)代码" prop="destinationCountryRegionCode">
<el-select
type="text"
id="inputInner--destinationCountryRegionCode"
v-model="tableRowformData.destinationCountryRegionCode"
clearable
filterable
placeholder=""
>
<el-option
v-for="(item, index) in $store.getters.dict.COUNTRY_REGION_CODE"
:key="index"
:label="item.itemChineseName"
:value="item.itemCode"
></el-option>
</el-select>
</Formitem>
</el-col>
<el-col :span="4">
<Formitem label="计量单位" prop="unit">
<el-select
type="text"
id="inputInner--unit"
v-model="tableRowformData.unit"
clearable
filterable
placeholder=""
>
<el-option
v-for="(item, index) in $store.getters.dict.MEASUREMENT_UNIT"
:key="index"
:label="item.itemChineseName"
:value="item.itemValue"
></el-option>
</el-select>
</Formitem>
</el-col>
<el-col :span="4">
<Formitem label="数量" prop="qty">
<el-input
type="number"
class="inputShadow"
id="inputInner--qty"
resize="none"
v-model.number="tableRowformData.qty"
clearable
placeholder=""
></el-input>
</Formitem>
</el-col>
<el-col :span="4">
<Formitem label="法定数量" prop="legalQty">
<el-input
type="number"
class="inputShadow"
id="inputInner--legalQty"
resize="none"
v-model="tableRowformData.legalQty"
clearable
placeholder=""
></el-input>
</Formitem>
</el-col>
</el-row>
<el-row :gutter="5">
<el-col :span="4">
<Formitem label="币制" prop="currency">
<el-select
type="text"
id="inputInner--currency"
v-model="tableRowformData.currency"
clearable
filterable
placeholder=""
>
<el-option
v-for="(item, index) in $store.getters.dict.CURRENCY"
:key="index"
:label="item.itemChineseName"
:value="item.itemValue"
></el-option>
</el-select>
</Formitem>
</el-col>
<el-col :span="4">
<Formitem label="单价" prop="price">
<el-input
type="number"
class="inputShadow"
id="inputInner--price"
resize="none"
v-model="tableRowformData.price"
clearable
placeholder=""
></el-input>
</Formitem>
</el-col>
<el-col :span="4">
<Formitem label="总价" prop="totalPrice">
<el-input
type="number"
class="inputShadow"
id="inputInner--totalPrice"
resize="none"
v-model="tableRowformData.totalPrice"
clearable
placeholder=""
></el-input>
</Formitem>
</el-col>
<el-col :span="4">
<Formitem label="净重" prop="netWeight">
<el-input
type="number"
class="inputShadow"
id="inputInner--netWeight"
resize="none"
v-model="tableRowformData.netWeight"
clearable
placeholder=""
></el-input>
</Formitem>
</el-col>
<el-col :span="8">
<Formitem label="备注" prop="remark">
<el-input
type="text"
class="inputShadow"
id="inputInner--remark"
resize="none"
v-model="tableRowformData.remark"
clearable
placeholder=""
></el-input>
</Formitem>
</el-col>
</el-row>
</el-form>
<p class="formRowDataOperate"><a @click="cancelEditRowData">取消</a> <a @click="rowFormDataSave">保存</a></p>
</div>
</template>
<div style="height: 100%">
<el-form
class="fedexFormStyle fedexRowEditFormStyle"
ref="editRowForm"
:model="tableRowformData"
:rules="tableRowFormRules"
label-position="top"
size="small"
>
<el-row :gutter="5">
<el-col :span="4">
<Formitem label="企业商品货号" prop="enterpriseProductCode">
<el-input
type="text"
class="inputShadow"
id="inputInner--enterpriseProductCode"
resize="none"
v-model="tableRowformData.enterpriseProductCode"
clearable
placeholder=""
></el-input>
</Formitem>
</el-col>
<el-col :span="4">
<Formitem label="企业商品名称" prop="enterpriseProductName">
<el-input
type="text"
class="inputShadow"
id="inputInner--enterpriseProductName"
resize="none"
v-model="tableRowformData.enterpriseProductName"
clearable
placeholder=""
></el-input>
</Formitem>
</el-col>
<el-col :span="4">
<Formitem label="企业商品描述" prop="enterpriseProductDescribe">
<el-input
type="textarea"
class="inputShadow"
id="inputInner--enterpriseProductDescribe"
resize="none"
v-model="tableRowformData.enterpriseProductDescribe"
clearable
placeholder=""
></el-input>
</Formitem>
</el-col>
<el-col :span="4">
<Formitem label="商品名称" prop="productName">
<el-input
type="text"
class="inputShadow"
id="inputInner--productName"
resize="none"
v-model="tableRowformData.productName"
clearable
placeholder=""
></el-input>
</Formitem>
</el-col>
<el-col :span="4">
<Formitem label="商品编码" prop="productCode">
<el-input
type="text"
class="inputShadow"
id="inputInner--productCode"
resize="none"
v-model="tableRowformData.productCode"
clearable
placeholder=""
></el-input>
</Formitem>
</el-col>
<el-col :span="4">
<Formitem label="规格型号" prop="model">
<el-input
type="text"
class="inputShadow"
id="inputInner--model"
resize="none"
v-model="tableRowformData.model"
clearable
placeholder=""
></el-input>
</Formitem>
</el-col>
</el-row>
<el-row :gutter="5">
<el-col :span="4">
<Formitem label="账册备案料号" prop="accountBookMaterialNumber">
<el-input
type="text"
class="inputShadow"
id="inputInner--accountBookMaterialNumber"
resize="none"
v-model="tableRowformData.accountBookMaterialNumber"
clearable
placeholder=""
></el-input>
</Formitem>
</el-col>
<el-col :span="4">
<Formitem label="条形码" prop="barCode">
<el-input
type="text"
class="inputShadow"
id="inputInner--barCode"
resize="none"
v-model="tableRowformData.barCode"
clearable
placeholder=""
></el-input>
</Formitem>
</el-col>
<el-col :span="4">
<Formitem
label="目的国(地区)代码"
prop="destinationCountryRegionCode"
>
<el-select
type="text"
id="inputInner--destinationCountryRegionCode"
v-model="tableRowformData.destinationCountryRegionCode"
clearable
filterable
placeholder=""
>
<el-option
v-for="(item, index) in $store.getters.dict.COUNTRY_REGION_CODE"
:key="index"
:label="item.itemChineseName"
:value="item.itemCode"
></el-option>
</el-select>
</Formitem>
</el-col>
<el-col :span="4">
<Formitem label="计量单位" prop="unit">
<el-select
type="text"
id="inputInner--unit"
v-model="tableRowformData.unit"
clearable
filterable
placeholder=""
>
<el-option
v-for="(item, index) in $store.getters.dict.MEASUREMENT_UNIT"
:key="index"
:label="item.itemChineseName"
:value="item.itemValue"
></el-option>
</el-select>
</Formitem>
</el-col>
<el-col :span="4">
<Formitem label="数量" prop="qty">
<el-input
type="number"
class="inputShadow"
id="inputInner--qty"
resize="none"
v-model.number="tableRowformData.qty"
clearable
placeholder=""
></el-input>
</Formitem>
</el-col>
<el-col :span="4">
<Formitem label="法定数量" prop="legalQty">
<el-input
type="number"
class="inputShadow"
id="inputInner--legalQty"
resize="none"
v-model="tableRowformData.legalQty"
clearable
placeholder=""
></el-input>
</Formitem>
</el-col>
</el-row>
<el-row :gutter="5">
<el-col :span="4">
<Formitem label="法定单位">
<el-input
class="inputShadow"
id="inputInner--unitLegalFirstCode"
resize="none"
:disabled="true"
:value="
mapDicDatas(
$store.getters.dict.MEASUREMENT_UNIT,
tableRowformData.unitLegalFirstCode
)
"
></el-input>
</Formitem>
</el-col>
<el-col :span="4">
<Formitem label="币制" prop="currency">
<el-select
type="text"
id="inputInner--currency"
v-model="tableRowformData.currency"
clearable
filterable
placeholder=""
>
<el-option
v-for="(item, index) in $store.getters.dict.CURRENCY"
:key="index"
:label="item.itemChineseName"
:value="item.itemValue"
></el-option>
</el-select>
</Formitem>
</el-col>
<el-col :span="4">
<Formitem label="单价" prop="price">
<el-input
type="number"
class="inputShadow"
id="inputInner--price"
resize="none"
v-model="tableRowformData.price"
clearable
placeholder=""
></el-input>
</Formitem>
</el-col>
<el-col :span="4">
<Formitem label="总价" prop="totalPrice">
<el-input
type="number"
class="inputShadow"
id="inputInner--totalPrice"
resize="none"
v-model="tableRowformData.totalPrice"
clearable
placeholder=""
></el-input>
</Formitem>
</el-col>
<el-col :span="4">
<Formitem label="净重" prop="netWeight">
<el-input
type="number"
class="inputShadow"
id="inputInner--netWeight"
resize="none"
v-model="tableRowformData.netWeight"
clearable
placeholder=""
></el-input>
</Formitem>
</el-col>
<el-col :span="8">
<Formitem label="备注" prop="remark">
<el-input
type="text"
class="inputShadow"
id="inputInner--remark"
resize="none"
v-model="tableRowformData.remark"
clearable
placeholder=""
></el-input>
</Formitem>
</el-col>
</el-row>
</el-form>
<p class="formRowDataOperate">
<a @click="cancelEditRowData">取消</a>
<a @click="rowFormDataSave">保存</a>
</p>
</div>
</template>
<script>
export default {
props: {
rowDatas: {
type: Object,
default: ()=>({}),
},
<script>
export default {
props: {
rowDatas: {
type: Object,
default: () => ({}),
},
data() {
var checkFractionalPart = (rule, value, callback) => {
if (value < 0) {
callback(new Error('数值不能为负'));
}
if (value !== '' && value !== undefined) {
const regex = /^\d{0,14}(\.\d{1,5})?$/;
if (!regex.test(value)) {
callback(new Error('整数最多14位,小数最多5位'));
} else {
callback();
}
},
data() {
var checkFractionalPart = (rule, value, callback) => {
if (value < 0) {
callback(new Error("数值不能为负"));
}
if (value !== "" && value !== undefined) {
const regex = /^\d{0,14}(\.\d{1,5})?$/;
if (!regex.test(value)) {
callback(new Error("整数最多14位,小数最多5位"));
} else {
callback();
}
};
var checkNegativeNum = (rule, value, callback) => {
if (value < 0) {
callback(new Error('数值不能为负'));
} else {
callback();
}
};
var checkQty = (rule, value, callback) => {
if (!Number.isInteger(value)) {
callback(new Error('请输入整数值'));
} else {
callback();
}
};
var checkNegativeNum = (rule, value, callback) => {
if (value < 0) {
callback(new Error("数值不能为负"));
} else {
callback();
}
};
var checkQty = (rule, value, callback) => {
if (!Number.isInteger(value)) {
callback(new Error("请输入整数值"));
} else {
if (value < 0) {
callback(new Error("数值不能为负"));
} else {
if (value < 0) {
callback(new Error('数值不能为负'));
const valueStr = value.toString();
if (valueStr.length > 14) {
callback(new Error("最多14位"));
} else {
const valueStr = value.toString();
if (valueStr.length > 14) {
callback(new Error('最多14位'));
} else {
callback();
}
callback();
}
}
};
return {
tableRowformData:{},
tableRowFormRules:{
enterpriseProductCode: [
{ required: true, message: '请输入企业商品货号', trigger: 'blur' },
{ max: 30, message: '长度不能超过30个字符', trigger: 'blur' }
],
enterpriseProductName: [
{ required: true, message: '请输入企业商品名称', trigger: 'blur' },
{ max: 250, message: '长度不能超过250个字符', trigger: 'blur' }
],
enterpriseProductDescribe: [
{ max: 1000, message: '长度不能超过1000个字符', trigger: 'blur' }
],
productName: [
{ required: true, message: '请输入商品名称', trigger: 'blur' },
{ max: 250, message: '长度不能超过250个字符', trigger: 'blur' }
],
productCode: [
{ required: true, message: '请输入商品编码', trigger: 'blur' },
{ max: 10, message: '长度不能超过10个字符', trigger: 'blur' }
],
model: [
{ required: true, message: '请输入规格型号', trigger: 'blur' },
{ max: 250, message: '长度不能超过250个字符', trigger: 'blur' }
],
accountBookMaterialNumber: [
{ max: 30, message: '长度不能超过30个字符', trigger: 'blur' }
],
barCode: [
{ max: 50, message: '长度不能超过50个字符', trigger: 'blur' }
],
destinationCountryRegionCode: [
{ required: true, message: '请选择目的国(地区)代码', trigger: 'change' }
],
unit: [
{ required: true, message: '请选择计量单位', trigger: 'change' }
],
qty: [
{ required: true, message: '请输入数量', trigger: 'blur' },
{ validator: checkQty, trigger: 'blur' }
],
legalQty: [
{ required: true, message: '请输入法定数量', trigger: 'blur' },
{ validator: checkFractionalPart, trigger: 'blur' }
],
currency: [
{ required: true, message: '请选择币制', trigger: 'change' }
],
price: [
{ required: true, message: '请输入单价', trigger: 'blur' },
{ validator: checkNegativeNum, trigger: 'blur' }
],
totalPrice: [
{ required: true, message: '请输入总价', trigger: 'blur' },
{ validator: checkNegativeNum, trigger: 'blur' }
],
netWeight: [
{ required: true, message: '请输入净重', trigger: 'blur' },
{ validator: checkFractionalPart, trigger: 'blur' }
],
remark: [
{ max: 1000, message: '长度不能超过1000个字符', trigger: 'blur' }
],
}
};
},
methods: {
rowFormDataSave(){
this.$refs.editRowForm.validate((valid) => {
if (valid) {
this.$emit('rowFormDataSave', {gnum: this.rowDatas.row.gnum, tableRowformData: this.tableRowformData})
this.tableRowformData = {}
} else {
return false;
}
})
}
};
return {
tableRowformData: {},
tableRowFormRules: {
enterpriseProductCode: [
{ required: true, message: "请输入企业商品货号", trigger: "blur" },
{ max: 30, message: "长度不能超过30个字符", trigger: "blur" },
],
enterpriseProductName: [
{ required: true, message: "请输入企业商品名称", trigger: "blur" },
{ max: 250, message: "长度不能超过250个字符", trigger: "blur" },
],
enterpriseProductDescribe: [
{ max: 1000, message: "长度不能超过1000个字符", trigger: "blur" },
],
productName: [
{ required: true, message: "请输入商品名称", trigger: "blur" },
{ max: 250, message: "长度不能超过250个字符", trigger: "blur" },
],
productCode: [
{ required: true, message: "请输入商品编码", trigger: "blur" },
{ max: 10, message: "长度不能超过10个字符", trigger: "blur" },
],
model: [
{ required: true, message: "请输入规格型号", trigger: "blur" },
{ max: 250, message: "长度不能超过250个字符", trigger: "blur" },
],
accountBookMaterialNumber: [
{ max: 30, message: "长度不能超过30个字符", trigger: "blur" },
],
barCode: [
{ max: 50, message: "长度不能超过50个字符", trigger: "blur" },
],
destinationCountryRegionCode: [
{
required: true,
message: "请选择目的国(地区)代码",
trigger: "change",
},
],
unit: [
{ required: true, message: "请选择计量单位", trigger: "change" },
],
qty: [
{ required: true, message: "请输入数量", trigger: "blur" },
{ validator: checkQty, trigger: "blur" },
],
legalQty: [
{ required: true, message: "请输入法定数量", trigger: "blur" },
{ validator: checkFractionalPart, trigger: "blur" },
],
currency: [
{ required: true, message: "请选择币制", trigger: "change" },
],
price: [
{ required: true, message: "请输入单价", trigger: "blur" },
{ validator: checkNegativeNum, trigger: "blur" },
],
totalPrice: [
{ required: true, message: "请输入总价", trigger: "blur" },
{ validator: checkNegativeNum, trigger: "blur" },
],
netWeight: [
{ required: true, message: "请输入净重", trigger: "blur" },
{ validator: checkFractionalPart, trigger: "blur" },
],
remark: [
{ max: 1000, message: "长度不能超过1000个字符", trigger: "blur" },
],
},
cancelEditRowData(){
this.tableRowformData = {}
this.$emit('cancelEditRowData',this.rowDatas.row.gnum-1)
},
// validate() {
// return this.$refs.editRowForm.validate((valid)=>{
// if(valid){
// console.log("tg2")
// this.$emit('updateLastItemValid', true);
// }else {
// console.log("wtg2")
// this.$emit('updateLastItemValid', false); // 通知父组件校验未通过
// }
// });
// },
async validate() {
return new Promise((resolve, reject) => {
this.$refs.editRowForm.validate((valid) => {
if (valid) {
// console.log("tg2")
this.$emit('rowFormDataSave', {gnum: this.rowDatas.row.gnum, tableRowformData: this.tableRowformData})
this.tableRowformData = {}
this.$emit('updateLastItemValid', true);
resolve(true);
} else {
// console.log("wtg2")
this.$emit('updateLastItemValid', false);
resolve(false);
}
};
},
methods: {
mapDicDatas(dicArr, code) {
if (code != "" && code) {
return dicArr.filter((item) => item.itemCode == code)[0]
.itemChineseName;
} else {
return "";
}
},
rowFormDataSave() {
this.$refs.editRowForm.validate((valid) => {
if (valid) {
this.$emit("rowFormDataSave", {
gnum: this.rowDatas.row.gnum,
tableRowformData: this.tableRowformData,
});
this.tableRowformData = {};
} else {
return false;
}
});
},
cancelEditRowData() {
this.tableRowformData = {};
this.$emit("cancelEditRowData", this.rowDatas.row.gnum - 1);
},
// validate() {
// return this.$refs.editRowForm.validate((valid)=>{
// if(valid){
// console.log("tg2")
// this.$emit('updateLastItemValid', true);
// }else {
// console.log("wtg2")
// this.$emit('updateLastItemValid', false); // 通知父组件校验未通过
// }
// });
// },
async validate() {
return new Promise((resolve, reject) => {
this.$refs.editRowForm.validate((valid) => {
if (valid) {
// console.log("tg2")
this.$emit("rowFormDataSave", {
gnum: this.rowDatas.row.gnum,
tableRowformData: this.tableRowformData,
});
this.tableRowformData = {};
this.$emit("updateLastItemValid", true);
resolve(true);
} else {
// console.log("wtg2")
this.$emit("updateLastItemValid", false);
resolve(false);
}
});
},
});
},
};
</script>
},
};
</script>
<style lang="scss" scoped>
.addNewItem{
display: flex;
justify-content: flex-start;
align-items: center;
color:#007AB7;
line-height: 38px;
cursor: pointer;
i{
margin-right: 3px;
}
span{
font-size: 13px;
font-weight: 500;
}
}
.formRowDataOperate{
text-align: center;
padding: 0 20px;
a{
color: #007AB7;
font-weight: 600;
&:first-child{
margin-right: 5px;
}
}
}
.fedexRowEditFormStyle .el-form-item{
background-color: #ffffff;
box-shadow: 0 2px 4px 0 #E5F2F8CC;
border-left: 1px solid #E5F2F8CC;
// margin-bottom: 30px;
<style lang="scss" scoped>
.addNewItem {
display: flex;
justify-content: flex-start;
align-items: center;
color: #007ab7;
line-height: 38px;
cursor: pointer;
i {
margin-right: 3px;
}
.fedexRowEditFormStyle .el-form-item:has(.formError){
margin-bottom: 25px!important;
span {
font-size: 13px;
font-weight: 500;
}
.fedexRowEditFormStyle .activeBorder{
border-left: 3px solid #007AB7;
}
.formRowDataOperate {
text-align: center;
padding: 0 20px;
a {
color: #007ab7;
font-weight: 600;
&:first-child {
margin-right: 5px;
}
}
</style>
}
.fedexRowEditFormStyle .el-form-item {
background-color: #ffffff;
box-shadow: 0 2px 4px 0 #e5f2f8cc;
border-left: 1px solid #e5f2f8cc;
// margin-bottom: 30px;
}
.fedexRowEditFormStyle .el-form-item:has(.formError) {
margin-bottom: 25px !important;
}
.fedexRowEditFormStyle .activeBorder {
border-left: 3px solid #007ab7;
}
</style>
......
......@@ -868,7 +868,7 @@ export default {
},
methods: {
mapDicDatas(dicArr, code) {
if (code != "") {
if (code != "" && code) {
return dicArr.filter((item) => item.itemCode == code)[0]
.itemChineseName;
} else {
......
......@@ -178,7 +178,9 @@
type="primary"
class="dropdown-style-button"
:loading="loadings.departureLoading"
@click="declareData('departureLoading', '离境单申报', 'logisticsDeparture')"
@click="
declareData('departureLoading', '离境单申报', 'logisticsDeparture')
"
>
<svg-icon
class="el-icon-user-solid"
......@@ -192,7 +194,7 @@
type="primary"
class="dropdown-style-button"
:loading="loadings.revokeLoading"
@click="declareData('revokeLoading', '撤销单申报' ,'cancellation')"
@click="declareData('revokeLoading', '撤销单申报', 'cancellation')"
>
<svg-icon
class="el-icon-user-solid"
......@@ -211,7 +213,7 @@
</el-button>
</div>
</div>
<section style="position:fixed;top:350px;left: 500px;">
<section style="position: fixed; top: 350px; left: 500px">
<TablePopover
ref="allLogDataReceiptStatusPopover"
dataKey="allLogDataReceiptStatus"
......@@ -237,7 +239,8 @@
ref="entryTable"
:data="tableData"
:headerData="headerData"
:maxHeight="tableMaxheight"
:height="tableMaxheight + 'px'"
:maxHeight="tableMaxheight + 'px'"
:border="true"
:pagination="true"
:order="false"
......@@ -364,7 +367,9 @@
<el-table-column align="center" label="操作" width="150">
<template slot-scope="scope">
<el-button type="text" @click="update(scope.row)"> 修改 </el-button>
<el-button type="text" @click="showTotalLog(scope.row)">日志</el-button>
<el-button type="text" @click="showTotalLog(scope.row)"
>日志</el-button
>
</template>
</el-table-column>
</template>
......@@ -375,26 +380,27 @@
@dwonloadModelFile="dwonloadModelFile"
@close="close"
/>
<RevokeDialog
:showDialog="revokeVisible"
:selectedDatas="selected"
:dropdownCode="dropdownCode"
@cancelRevoke="cancelRevoke" />
<TemplateDownloadDialog
:showDialog="templateDownloadVisible"
@cancelDownload="cancelDownload"
/>
<ExportDialog
ref="exportDialog"
:showDialog="datasExportVisible"
@cancelDatasExport="cancelDatasExport"
@startDatasExport="startDatasExport"
/>
<BatchModify
:selectedDatas="selected"
:showDialog="batchModifyVisible"
@cancelBatchModify="cancelBatchModify"
/>
<RevokeDialog
:showDialog="revokeVisible"
:selectedDatas="selected"
:dropdownCode="dropdownCode"
@cancelRevoke="cancelRevoke"
/>
<TemplateDownloadDialog
:showDialog="templateDownloadVisible"
@cancelDownload="cancelDownload"
/>
<ExportDialog
ref="exportDialog"
:showDialog="datasExportVisible"
@cancelDatasExport="cancelDatasExport"
@startDatasExport="startDatasExport"
/>
<BatchModify
:selectedDatas="selected"
:showDialog="batchModifyVisible"
@cancelBatchModify="cancelBatchModify"
/>
</div>
</template>
......@@ -408,9 +414,9 @@ import {
getTotalReceipt,
getLogisticsReceipt,
getDeclarationLog,
exportDeclareData
exportDeclareData,
} from "@/api/declareData-api.js";
import { getDictData } from '@/api/system/dict-api.js'
import { getDictData } from "@/api/system/dict-api.js";
import DialogVue from "./dialog.vue";
import RevokeDialog from "./revokeDialog.vue";
import TemplateDownloadDialog from "./templateDownloadDialog.vue";
......@@ -423,7 +429,7 @@ export default {
RevokeDialog,
TemplateDownloadDialog,
ExportDialog,
BatchModify
BatchModify,
},
data() {
return {
......@@ -577,30 +583,30 @@ export default {
dwonloadModelLoading: false,
dropDownLoading: false,
logTableLoading: false,
exportDeclareLoading:false,
exportDeclareLoading: false,
revokeLoading: false, // 撤销单申报加载状态
departureLoading: false, // 离境单申报加载状态
},
textareaVisible: {},
tableMaxheight: null,
tableMaxheight: 500,
outerVisible: false,
dropdownName: "一键申报",
dropdownCode: "full",
revokeVisible:false,
templateDownloadVisible:false,
datasExportVisible:false,
batchModifyVisible:false
revokeVisible: false,
templateDownloadVisible: false,
datasExportVisible: false,
batchModifyVisible: false,
};
},
created() {
this.search(0);
// this.getCancellationReasons()
this.calculateTableHeight();
},
mounted() {
this.tableMaxheight = window.innerHeight - 355;
window.addEventListener('resize',()=>{
this.tableMaxheight = window.innerHeight - 355;
},false)
window.addEventListener("resize", this.calculateTableHeight);
},
beforeDestroy() {
window.removeEventListener("resize", this.calculateTableHeight);
},
watch: {
$route(val, oldval) {
......@@ -608,7 +614,7 @@ export default {
},
},
beforeRouteEnter(to, from, next) {
next(vm => {
next((vm) => {
// 检查标志是否需要刷新数据
if (to.meta.needsRefresh) {
vm.search(0);
......@@ -618,6 +624,9 @@ export default {
});
},
methods: {
calculateTableHeight() {
this.tableMaxheight = window.innerHeight - 300;
},
//查询申报数据
search(val) {
this.loadings.sreachLoading = true;
......@@ -678,140 +687,147 @@ export default {
//下载模板
dwonloadModelFile() {
this.loadings.dwonloadModelLoading = true;
this.$store.dispatch("GetInfo").then(res =>{
console.log('res====', res)
if (res.code == 200) {
console.log('port===', res.data?.port?.split(','))
if (res.data?.port?.split(',').length == 2) {
this.templateDownloadVisible = true
} else {
this.$store
.dispatch("GetInfo")
.then((res) => {
console.log("res====", res);
if (res.code == 200) {
console.log("port===", res.data?.port?.split(","));
if (res.data?.port?.split(",").length == 2) {
this.templateDownloadVisible = true;
} else {
this.fileDownload
.downLoadZip(
"api",
"declareDataModel",
"申报数据模板.xlsx",
"xlsx",
"get",
{type: res.data?.port}
)
.finally(() => {
this.cancelDownload()
});
}
}
}).catch(err =>{
console.log(err)
})
.downLoadZip(
"api",
"declareDataModel",
"申报数据模板.xlsx",
"xlsx",
"get",
{ type: res.data?.port }
)
.finally(() => {
this.cancelDownload();
});
}
}
})
.catch((err) => {
console.log(err);
});
},
datasDownload(dataSource){
datasDownload(dataSource) {
let obj = {
billNo: this.sreachFormData.billNo,
declareId: [],
logisticsNo: this.sreachFormData.logisticsNo,
orderNo: this.sreachFormData.orderNo,
receiptStatus: this.sreachFormData.receiptStatus,
dataSource
};
obj.startCreateTime = "";
obj.endCreateTime = "";
if (this.sreachFormData.createTime.length > 0) {
obj.startCreateTime = this.sreachFormData.createTime[0];
obj.endCreateTime = this.sreachFormData.createTime[1];
}
this.selected.forEach((item) => {
obj.declareId.push(item.declareId);
});
exportDeclareData(obj).then((res)=>{
// if (res.code === "200") {
// // this.alertSuccessMsg(res.message);
// } else {
// console.log(res.message);
// this.alertWarningMsg(res.message);
// }
}).catch((err)=>{
console.log(err);
this.alertErrorMsg(err);
}).finally(res =>{
this.loadings.exportDeclareLoading = false;
this.datasExportVisible = false
this.$refs.exportDialog.datasExportVisible = false
})
billNo: this.sreachFormData.billNo,
declareId: [],
logisticsNo: this.sreachFormData.logisticsNo,
orderNo: this.sreachFormData.orderNo,
receiptStatus: this.sreachFormData.receiptStatus,
dataSource,
};
obj.startCreateTime = "";
obj.endCreateTime = "";
if (this.sreachFormData.createTime.length > 0) {
obj.startCreateTime = this.sreachFormData.createTime[0];
obj.endCreateTime = this.sreachFormData.createTime[1];
}
this.selected.forEach((item) => {
obj.declareId.push(item.declareId);
});
exportDeclareData(obj)
.then((res) => {
// if (res.code === "200") {
// // this.alertSuccessMsg(res.message);
// } else {
// console.log(res.message);
// this.alertWarningMsg(res.message);
// }
})
.catch((err) => {
console.log(err);
this.alertErrorMsg(err);
})
.finally((res) => {
this.loadings.exportDeclareLoading = false;
this.datasExportVisible = false;
this.$refs.exportDialog.datasExportVisible = false;
});
},
//导出
downloadData() {
this.loadings.exportDeclareLoading = true;
this.$store.dispatch("GetInfo").then(res =>{
console.log('res====', res)
if (res.code == 200) {
console.log('port===', res.data?.port?.split(','))
if (res.data?.port?.split(',').length == 2) {
this.datasExportVisible = true
} else {
this.datasDownload(res.data?.port)
}
}
}).catch(err =>{
console.log(err)
})
this.$store
.dispatch("GetInfo")
.then((res) => {
console.log("res====", res);
if (res.code == 200) {
console.log("port===", res.data?.port?.split(","));
if (res.data?.port?.split(",").length == 2) {
this.datasExportVisible = true;
} else {
this.datasDownload(res.data?.port);
}
}
})
.catch((err) => {
console.log(err);
});
},
startDatasExport(dataSource){
this.datasDownload(dataSource)
startDatasExport(dataSource) {
this.datasDownload(dataSource);
},
cancelDatasExport(){
this.datasExportVisible = false
cancelDatasExport() {
this.datasExportVisible = false;
this.loadings.exportDeclareLoading = false;
},
/**
* 通用申报方法
* @param {string} loadingKey - 加载状态的 key(如 'dropDownLoading', 'departureLoading', 'revokeLoading')
* @param {string} dropdownName - 当前操作名称(如 '撤销单申报')
* @param {string} dropdownCode - 当前操作代码(如 'full')
*/
declareData(loadingKey, dropdownName, dropdownCode) {
if (this.selected.length === 0) {
this.alertWarningMsg("请选择数据!");
return;
}
/**
* 通用申报方法
* @param {string} loadingKey - 加载状态的 key(如 'dropDownLoading', 'departureLoading', 'revokeLoading')
* @param {string} dropdownName - 当前操作名称(如 '撤销单申报')
* @param {string} dropdownCode - 当前操作代码(如 'full')
*/
declareData(loadingKey, dropdownName, dropdownCode) {
if (this.selected.length === 0) {
this.alertWarningMsg("请选择数据!");
return;
}
// 设置加载状态
this.$set(this.loadings, loadingKey, true);
// 构造请求参数
const obj = {
declareIds: this.selected.map(item => item.declareId),
type: dropdownCode,
};
// 设置加载状态
this.$set(this.loadings, loadingKey, true);
// 构造请求参数
const obj = {
declareIds: this.selected.map((item) => item.declareId),
type: dropdownCode,
};
// 如果是撤销单申报,显示弹窗并返回
if (dropdownName === '撤销单申报') {
this.revokeVisible = true;
this.$set(this.loadings, loadingKey, false);
this.dropdownCode = dropdownCode;
return;
}
// 如果是撤销单申报,显示弹窗并返回
if (dropdownName === "撤销单申报") {
this.revokeVisible = true;
this.$set(this.loadings, loadingKey, false);
this.dropdownCode = dropdownCode;
return;
}
// 提交申报数据
declareDataUpload(obj)
.then((res) => {
if (res.code === "200") {
this.alertSuccessMsg("数据已成功提交申报,请等待海关回执。");
} else {
this.alertWarningMsg(res.message);
}
})
.catch((err) => {
console.error(err);
this.alertWarningMsg("申报失败,请稍后重试。");
})
.finally(() => {
// 无论成功或失败,都重置加载状态并刷新数据
this.$set(this.loadings, loadingKey, false);
this.search(0);
});
},
// 提交申报数据
declareDataUpload(obj)
.then((res) => {
if (res.code === "200") {
this.alertSuccessMsg("数据已成功提交申报,请等待海关回执。");
} else {
this.alertWarningMsg(res.message);
}
})
.catch((err) => {
console.error(err);
this.alertWarningMsg("申报失败,请稍后重试。");
})
.finally(() => {
// 无论成功或失败,都重置加载状态并刷新数据
this.$set(this.loadings, loadingKey, false);
this.search(0);
});
},
//切换申报模式
dropdownChange(val) {
this.dropdownName = val.name;
......@@ -823,8 +839,8 @@ export default {
// }
this.search(1);
this.outerVisible = false;
this.tableMaxheight = window.innerHeight - 355;
this.$forceUpdate()
this.tableMaxheight = window.innerHeight - 300;
this.$forceUpdate();
},
popoverChange(val) {
this.tableData = val.tableData;
......@@ -839,7 +855,7 @@ export default {
})
.finally(() => {
this.$nextTick(() => {
this.$store.dispatch('setLoadingState', false)
this.$store.dispatch("setLoadingState", false);
this.$refs.orderReceiptStatusPopover.tableLoading = false;
this.$refs.wayBillReceiptPopover.tableLoading = false;
this.$refs.listReceiptStatusPopover.tableLoading = false;
......@@ -905,8 +921,7 @@ export default {
console.log(err);
reject();
});
}
else if (type == "logisticsReceiptStatus") {
} else if (type == "logisticsReceiptStatus") {
getLogisticsReceipt(obj)
.then((res) => {
if (res.code === "200") {
......@@ -919,8 +934,7 @@ export default {
console.log(err);
reject();
});
}
else if (type == "allLogDataReceiptStatus") {
} else if (type == "allLogDataReceiptStatus") {
getDeclarationLog(id)
.then((res) => {
if (res.code === "200") {
......@@ -980,13 +994,13 @@ export default {
});
}
},
cancelRevoke(){
cancelRevoke() {
this.loadings.dropDownLoading = false;
this.revokeVisible = false
this.dropdownCode = 'full'
this.revokeVisible = false;
this.dropdownCode = "full";
},
update(val) {
this.$router.push({
this.$router.push({
name: "EditReportingData",
params: { data: val },
});
......@@ -995,42 +1009,43 @@ export default {
showTotalLog(row) {
this.$store.state.viewOption.loadingDatas = true;
this.selectedLogRow = row;
this.$set(row, 'logLoading', true);
this.$set(row, "logLoading", true);
this.receiptApi(row.declareId, "allLogDataReceiptStatus")
.then((logData) => {
this.$set(row, 'popoverData', logData);
this.receiptApi(row.declareId, "allLogDataReceiptStatus").then(
(logData) => {
this.$set(row, "popoverData", logData);
if(!this.selectedLogRow.popoverData.length){
if (!this.selectedLogRow.popoverData.length) {
this.$store.state.viewOption.loadingDatas = false;
}
// 手动触发状态更新
this.$nextTick(() => {
// 强制设置弹窗状态为true
row.allLogDataReceiptStatusPopoverType = true
row.allLogDataReceiptStatusPopoverType = true;
// 强制更新表格
this.tableData = [...this.tableData];
});
})
}
);
},
cancelDownload(){
cancelDownload() {
this.loadings.dwonloadModelLoading = false;
this.templateDownloadVisible = false
this.templateDownloadVisible = false;
},
batchModify(){
batchModify() {
if (!this.selected.length) {
this.alertWarningMsg("请选择数据!");
return
return;
}
this.batchModifyVisible = true
this.batchModifyVisible = true;
},
cancelBatchModify(val){
this.batchModifyVisible = false
if(val === 1){
cancelBatchModify(val) {
this.batchModifyVisible = false;
if (val === 1) {
this.search(0);
}
}
},
},
};
</script>
......@@ -1087,9 +1102,9 @@ export default {
transform: translate(0, -50%);
z-index: 10;
}
.revokeOperation{
margin-bottom:25px;
.revokeSubmitBtn{
.revokeOperation {
margin-bottom: 25px;
.revokeSubmitBtn {
margin-right: 30px;
}
}
......