jinhui.wang

组件增加,回执状态增加,字典表增加

......@@ -55,7 +55,6 @@ export default {
};
},
created() {
this.$store.dispatch("GetLink");
localStorage.getItem("EcomLang")
? (this.$i18n.locale = localStorage.getItem("EcomLang"))
: localStorage.setItem("EcomLang", this.$i18n.locale);
......
<template>
<div>
<el-popover
placement="bottom"
width="320"
trigger="manual"
:popper-class="`popover${dataKey}`"
v-model="textareaVisible"
>
<el-input
:name="`${dataKey}-textarea`"
type="textarea"
:rows="5"
:id="`popoverInput${dataKey}`"
class="inputShadow textareaPopover"
v-model="formData[dataKey]"
resize="none"
maxlength="13000"
placeholder=""
@blur="textareaBlur"
@input="input"
></el-input>
<el-input
slot="reference"
:name="dataKey"
type="textarea"
:rows="1"
class="inputShadow"
:id="`inputInner--${dataKey}`"
v-model="formData[dataKey]"
resize="none"
placeholder=""
@focus="textareaFocus"
@input="input"
></el-input>
</el-popover>
<el-badge
v-if="
!textareaVisible &&
textareaLength({
key: dataKey,
value: formData[dataKey],
}) > 1
"
type="info"
:value="`+${textareaLength({
key: dataKey,
value: formData[dataKey],
})}`"
class="item texttareaTip"
/>
</div>
</template>
<script>
export default {
props: {
formData: {
type: Object,
default: null,
},
dataKey: {
type: String,
default: "",
},
},
data() {
return {
textareaVisible: false,
};
},
methods: {
//文本域展示状态切换
textareaFocus(val) {
this.textareaVisible = true;
this.$nextTick(() => {
document
.querySelector("#popoverInput" + val.target.name.split("-")[0])
.focus();
document.querySelector(
"#inputInner--" + val.target.name.split("-")[0]
).style.display = "none";
});
},
textareaBlur(val) {
let inputInner = document.querySelector(
"#inputInner--" + val.target.name.split("-")[0]
);
this.textareaVisible = false;
inputInner.style.display = "block";
this.$nextTick(() => {
inputInner.blur();
if (
inputInner.value != undefined &&
inputInner.value != "" &&
inputInner.value != null
) {
inputInner.classList.add("inputFocus");
} else {
inputInner.classList.remove("inputFocus");
}
});
let arr = [];
this.formData[val.target.name.split("-")[0]]
.replace(/[\n\,\;\;]/g, ",")
.replace(/[\t]/g, "")
.split(",")
.forEach((str, index) => {
if (str != null && str != "" && index <= 1000) {
arr.push(str.trim());
}
});
this.formData[val.target.name.split("-")[0]] = arr.join("\n");
this.$emit("formChange", this.formData);
this.$forceUpdate();
},
//文本域输入内容数量处理
textareaLength(val) {
if (val.value != "" && val.value != null) {
let arr = [];
val.value
.trim()
.replace(/[\n\,\;\;]/g, ",")
.split(",")
.forEach((item) => {
if (item != "" && item != null) {
arr.push(item);
}
});
return arr.length;
} else {
return 0;
}
},
input() {
this.$forceUpdate();
},
},
};
</script>
<style scoped lang="scss">
@import "@/assets/styles/variables.scss";
.texttareaTip {
position: absolute;
top: 52%;
right: 20px;
transform: translate(0, -50%);
z-index: 10;
}
</style>
<template>
<el-popover
:popper-class="`popper${dataKey}${rowData.declareId} portLogPopper`"
placement="left"
:visible-arrow="false"
title=""
width="750"
trigger="manual"
v-model="rowData[`${dataKey}PopoverType`]"
>
<div style="text-align: right">
<i
class="el-icon-close"
style="cursor: pointer; font-size: 20px; font-weight: 700"
@click.stop="popoverClose"
></i>
</div>
<div v-loading="rowData.popoverLoading">
<slot name="title"></slot>
<Table
class="fedexDetialTable mt20"
:data="rowData[`${dataKey}PopoverData`]"
:headerData="receiptDataHead"
:selection="false"
:selectFixed="false"
:order="false"
:border="true"
:rowSelectDataType="false"
:pagination="false"
:page="1"
:pageSizes="[20, 30, 50, 100]"
:totalCount="0"
:emptyText="$t('portEntry.emptyText')"
height="350px"
maxHeight="500px"
rowKey="id"
>
</Table>
</div>
<el-button
slot="reference"
type="text"
@click.stop="popoverChange(rowData, dataKey)"
>
<slot name="buttonLabel"></slot>
</el-button>
</el-popover>
</template>
<script>
export default {
props: {
dataKey: {
type: String,
default: "",
},
rowData: {
tpye: Object,
default: null,
},
tableData: {
type: Array,
default() {
return [];
},
},
receiptDataHead: {
type: Array,
default() {
return [];
},
},
parentDom: {
type: Object,
default: null,
},
},
data() {
return {};
},
methods: {
//弹框关闭
popoverClose() {
this.$emit("popoverClose");
this.parentDom.$refs.tables.$refs.bodyWrapper.style.overflowY = "auto";
},
//弹框状态改版
popoverChange(data, type) {
this.popoverClose();
let arr = JSON.parse(JSON.stringify(this.tableData));
arr.forEach((item) => {
item[`${type}PopoverData`] = [];
if (data.declareId != item.declareId) {
// item[`${type}PopoverLoading`] = false;
item[`${type}PopoverType`] = false;
} else {
// item[`${type}PopoverLoading`] = true;
item[`${type}PopoverType`] = !JSON.parse(
JSON.stringify(item[`${type}PopoverType`])
);
}
});
if (!data[`${type}PopoverType`]) {
this.parentDom.$refs.tables.$refs.bodyWrapper.style.overflowY =
"hidden";
} else {
this.parentDom.$refs.tables.$refs.bodyWrapper.style.overflowY = "auto";
}
this.$emit("popoverChange", {
tableData: arr,
data: data,
type: !data[`${type}PopoverType`],
status: type,
});
this.$nextTick(() => {
document.getElementsByClassName("el-table__row").forEach((dom1, i) => {
if (i == data.index) {
dom1.classList.add("activeRow");
} else {
dom1.classList.remove("hover-row");
dom1.classList.remove("activeRow");
}
});
let interval = setInterval(() => {
if (
document.getElementsByClassName(`popper${type}${data.declareId}`)
.length == 1
) {
clearInterval(interval);
}
document
.getElementsByClassName(`popper${type}${data.declareId}`)
.forEach((dom, index) => {
if (index > 0) {
dom.style.display = "none";
dom.remove();
}
});
}, 100);
});
},
},
};
</script>
<style></style>
......@@ -19,6 +19,7 @@ import { parseTime, resetForm, addDateRange, selectDictLabel, selectDictLabels,
import { formatDate, debounce, alertWarningMsg, alertSuccessMsg, alertErrorMsg, alertInfoMsg, toHead, compare, createRandom, ctho, base64ConvertFile } from "@/utils/index";
import * as fileDownload from '@/utils/zipdownload.js'
import * as filters from '@/utils/filters.js'
import dictData from '@/utils/dict.js'
import regExp from '@/utils/regExp.js'
import Pagination from "@/components/Pagination";
// 自定义表格工具扩展
......@@ -35,6 +36,8 @@ import CustomTransfer from '@/components/CustomTransfer'
import CustomForm from '@/components/CustomForm'
import CustomTable from '@/components/CustomTable'
import EditTag from '@/components/EditTag'
import TablePopover from '@/components/TablePopover'
import FormTextareaInput from '@/components/FormTextareaInput'
(function () {
if (typeof EventTarget !== "undefined") {
let func = EventTarget.prototype.addEventListener;
......@@ -85,6 +88,7 @@ Vue.prototype.approvalPortType = approvalPortType
Vue.prototype.getSystemOption = getSystemOption
Vue.prototype.currencySystemDisableType = currencySystemDisableType
Vue.prototype.imageTaskStatusShowType = imageTaskStatusShowType
Vue.prototype.dictData = dictData
Vue.prototype.msgSuccess = function (msg) {
this.$message({ showClose: true, message: msg, type: "success" });
......@@ -117,6 +121,8 @@ Vue.component('CustomTransfer', CustomTransfer)
Vue.component('CustomForm', CustomForm)
Vue.component('CustomTable', CustomTable)
Vue.component('EditTag', EditTag)
Vue.component('TablePopover', TablePopover)
Vue.component('FormTextareaInput', FormTextareaInput)
Vue.use(permission)
......
export default {
returnStatus: [
{ code: 'RECEIPT_CUSTOMS_CLEARANCE', name: '结关', value: '899' },
{ code: 'RECEIPT_RELEASE', name: '放行', value: '800' },
{ code: 'RECEIPT_MANUAL_REVIEW', name: '人工审核', value: '300' },
{ code: 'RECEIPT_CUSTOMS_WAREHOUSING', name: '海关入库', value: '120' },
{ code: 'RECEIPT_AUDIT_COMPLETED', name: '海关审结', value: '399' },
{ code: 'RECEIPT_CUSTOMS_REFUND', name: '海关退单', value: '100' },
{ code: 'RECEIPT_FAIL_SEND', name: '发送海关失败', value: '4' },
{ code: 'RECEIPT_SUCCESSFULLY_SENT', name: '发送海关成功', value: '3' },
{ code: 'RECEIPT_DECLARE_IN_PROGRESS', name: '电子口岸申报中', value: '2' },
{ code: 'RECEIPT_TEMPORARILY_STORE', name: '电子口岸已暂存', value: '1' },
],
appType: [
{ code: 'DECLARE_APPTYPE_CHANGE', name: '变更', value: '2' },
{ code: 'DECLARE_APPTYPE_ADD', name: '新增', value: '1' },
],
currency: [
{ code: 'AED', name: '阿联酋迪拉姆', value: '138' },
{ code: 'ZAR', name: '南非兰特', value: '244' },
{ code: 'CAD', name: '加拿大元', value: '501' },
{ code: 'CHF', name: '瑞士法郎', value: '331' },
{ code: 'CNY', name: '人民币', value: '142' },
{ code: 'DKK', name: '丹麦克朗', value: '302' },
{ code: 'EUR', name: '欧元', value: '300' },
{ code: 'GBP', name: '英镑', value: '303' },
{ code: 'HKD', name: '港币', value: '110' },
{ code: 'HUF', name: '匈牙利福林', value: '321' },
{ code: 'JPY', name: '日本元', value: '116' },
{ code: 'KRW', name: '韩国圆', value: '133' },
{ code: 'MOP', name: '澳门元', value: '121' },
{ code: 'MXN', name: '墨西哥比索', value: '429' },
{ code: 'MYR', name: '马来西亚林吉特', value: '122' },
],
unit: [
{
"code": "083",
"name": "盎司"
},
{
"code": "016",
"name": "把"
},
{
"code": "042",
"name": "百把"
},
{
"code": "040",
"name": "百副"
},
{
"code": "043",
"name": "百个"
},
{
"code": "044",
"name": "百片"
},
{
"code": "149",
"name": "百万贝可"
},
{
"code": "049",
"name": "百枝"
},
{
"code": "041",
"name": "百支"
},
{
"code": "076",
"name": "磅"
},
{
"code": "125",
"name": "包"
},
{
"code": "132",
"name": "本"
},
{
"code": "163",
"name": "部"
},
{
"code": "131",
"name": "册"
},
{
"code": "071",
"name": "长吨"
},
{
"code": "089",
"name": "寸"
},
{
"code": "127",
"name": "打"
},
{
"code": "136",
"name": "袋"
},
{
"code": "077",
"name": "担"
},
{
"code": "045",
"name": "刀"
},
{
"code": "079",
"name": "短担"
},
{
"code": "072",
"name": "短吨"
},
{
"code": "026",
"name": "对"
},
{
"code": "070",
"name": "吨"
},
{
"code": "133",
"name": "发"
},
{
"code": "022",
"name": "份"
},
{
"code": "023",
"name": "幅"
},
{
"code": "019",
"name": "副"
},
{
"code": "007",
"name": "个"
},
{
"code": "014",
"name": "根"
},
{
"code": "047",
"name": "公担"
},
{
"code": "116",
"name": "公制马力"
},
{
"code": "122",
"name": "罐"
},
{
"code": "096",
"name": "毫升"
},
{
"code": "141",
"name": "合"
},
{
"code": "140",
"name": "盒"
},
{
"code": "005",
"name": "架"
},
{
"code": "011",
"name": "件"
},
{
"code": "075",
"name": "斤"
},
{
"code": "029",
"name": "井"
},
{
"code": "039",
"name": "具"
},
{
"code": "018",
"name": "卷"
},
{
"code": "027",
"name": "棵"
},
{
"code": "036",
"name": "克"
},
{
"code": "084",
"name": "克拉"
},
{
"code": "017",
"name": "块"
},
{
"code": "128",
"name": "筐"
},
{
"code": "135",
"name": "捆"
},
{
"code": "101",
"name": "立方尺"
},
{
"code": "033",
"name": "立方米"
},
{
"code": "099",
"name": "立方英尺"
},
{
"code": "139",
"name": "粒"
},
{
"code": "080",
"name": "两"
},
{
"code": "003",
"name": "辆"
},
{
"code": "118",
"name": "令"
},
{
"code": "129",
"name": "罗"
},
{
"code": "126",
"name": "箩"
},
{
"code": "086",
"name": "码"
},
{
"code": "134",
"name": "枚"
},
{
"code": "098",
"name": "美加仑"
},
{
"code": "030",
"name": "米"
},
{
"code": "031",
"name": "盘"
},
{
"code": "037",
"name": "盆"
},
{
"code": "121",
"name": "批"
},
{
"code": "130",
"name": "匹"
},
{
"code": "020",
"name": "片"
},
{
"code": "112",
"name": "平方尺"
},
{
"code": "110",
"name": "平方码"
},
{
"code": "032",
"name": "平方米"
},
{
"code": "111",
"name": "平方英尺"
},
{
"code": "142",
"name": "瓶"
},
{
"code": "060",
"name": "千伏安"
},
{
"code": "054",
"name": "千个"
},
{
"code": "052",
"name": "千盒"
},
{
"code": "035",
"name": "千克"
},
{
"code": "051",
"name": "千块"
},
{
"code": "146",
"name": "千粒"
},
{
"code": "147",
"name": "千米"
},
{
"code": "063",
"name": "千升"
},
{
"code": "061",
"name": "千瓦"
},
{
"code": "062",
"ext6": "KWH",
"name": "千瓦时"
},
{
"code": "148",
"name": "千英尺"
},
{
"code": "058",
"name": "千张"
},
{
"code": "053",
"name": "千枝"
},
{
"code": "143",
"name": "千支"
},
{
"code": "050",
"name": "千只"
},
{
"code": "170",
"name": "人份"
},
{
"code": "048",
"name": "扇"
},
{
"code": "095",
"name": "升"
},
{
"code": "085",
"name": "市尺"
},
{
"code": "081",
"name": "市担"
},
{
"code": "025",
"name": "双"
},
{
"code": "073",
"name": "司马担"
},
{
"code": "074",
"name": "司马斤"
},
{
"code": "004",
"name": "艘"
},
{
"code": "001",
"name": "台"
},
{
"code": "006",
"name": "套"
},
{
"code": "015",
"name": "条"
},
{
"code": "123",
"name": "桶"
},
{
"code": "034",
"name": "筒"
},
{
"code": "009",
"name": "头"
},
{
"code": "038",
"name": "万个"
},
{
"code": "145",
"name": "万粒"
},
{
"code": "144",
"name": "万双"
},
{
"code": "057",
"name": "万套"
},
{
"code": "059",
"name": "万张"
},
{
"code": "120",
"name": "箱"
},
{
"code": "056",
"name": "亿个"
},
{
"code": "055",
"name": "亿支"
},
{
"code": "067",
"name": "英尺"
},
{
"code": "088",
"name": "英寸"
},
{
"code": "078",
"name": "英担"
},
{
"code": "097",
"name": "英加仑"
},
{
"code": "115",
"name": "英制马力"
},
{
"code": "124",
"name": "扎"
},
{
"code": "010",
"name": "张"
},
{
"code": "013",
"name": "枝"
},
{
"code": "012",
"name": "支"
},
{
"code": "008",
"name": "只"
},
{
"code": "028",
"name": "株"
},
{
"code": "021",
"name": "组"
},
{
"code": "002",
"name": "座"
},
{
"code": "046",
"name": "疋"
}
]
}
\ No newline at end of file
......@@ -18,7 +18,15 @@
}"
:expandRowKeys="expandRowKeys"
>
<template slot="optionColumn">
<template v-slot:unit="scope">
<span>{{ selectDictLabel(scope.row.unit, "unit", "code") }}</span>
</template>
<template v-slot:currency="scope">
<span>{{
selectDictLabel(scope.row.currency, "currency", "value")
}}</span>
</template>
<!-- <template slot="optionColumn">
<el-table-column
header-align="center"
align="center"
......@@ -26,7 +34,6 @@
width="120"
>
<template slot-scope="scope">
<!-- 展开/收起 -->
<el-button
type="text"
@click="
......@@ -35,12 +42,10 @@
: editDetail(scope.row)
"
>
<!-- 收起 -->
<span v-show="expandRowKeys.includes(scope.row.index)">
<svg-icon icon-class="upIcon" />
{{ $t("entry.detial.form.up") }}
</span>
<!-- 展开 -->
<span v-show="!expandRowKeys.includes(scope.row.index)"
><svg-icon icon-class="downIcon" />
{{ $t("entry.detial.form.down") }}
......@@ -48,7 +53,7 @@
</el-button>
</template>
</el-table-column>
</template>
</template> -->
</Table>
</template>
......@@ -73,7 +78,23 @@ export default {
expandRowKeys: [],
};
},
methods: {},
methods: {
editDetail(val) {
this.expandRowKeys = [val.index];
},
closeEdit() {
this.expandRowKeys = [];
},
selectDictLabel(value, dictkey, key) {
let str = value;
this.dictData[dictkey].forEach((item) => {
if (value == item[key]) {
str = item.name;
}
});
return str;
},
},
};
</script>
......
......@@ -123,15 +123,20 @@
</el-col>
<el-col :span="3">
<Formitem label="币制" prop="currency">
<el-input
<el-select
type="text"
class="inputShadow"
id="inputInner--currency"
resize="none"
v-model="formData.currency"
clearable
placeholder=""
></el-input>
>
<el-option
v-for="(item, index) in dictData.currency"
:key="index"
:label="item.name"
:value="item.value"
></el-option>
</el-select>
</Formitem>
</el-col>
<!-- <el-col :span="3">
......@@ -149,15 +154,20 @@
</el-col> -->
<el-col :span="3">
<Formitem label="申报类型" prop="appType">
<el-input
<el-select
type="text"
class="inputShadow"
id="inputInner--appType"
resize="none"
v-model="formData.appType"
clearable
placeholder=""
></el-input>
>
<el-option
v-for="(item, index) in dictData.appType"
:key="index"
:label="item.name"
:value="item.value"
></el-option>
</el-select>
</Formitem>
</el-col>
<el-col :span="3">
......@@ -250,61 +260,63 @@ export default {
detialHeaderData: [
{
name: "企业商品货号",
value: "",
value: "itemNo",
width: "",
align: "left",
},
{
name: "商品企业商品名称",
value: "",
value: "itemName",
width: "",
align: "left",
},
{
name: "企业商品描述",
value: "",
value: "itemDescribe",
width: "",
align: "left",
},
{
name: "条码",
value: "",
value: "barCode",
width: "",
align: "left",
},
{
name: "计量单位",
value: "",
value: "unit",
width: "",
align: "left",
slot: true,
},
{
name: "币制",
value: "",
value: "currency",
width: "",
align: "left",
slot: true,
},
{
name: "数量",
value: "",
value: "qty",
width: "",
align: "left",
},
{
name: "单价",
value: "",
value: "price",
width: "",
align: "left",
},
{
name: "总价",
value: "",
value: "totalPrice",
width: "",
align: "left",
},
{
name: "备注",
value: "",
value: "note",
width: "",
align: "left",
},
......
......@@ -11,74 +11,25 @@
<!-- 订单编号 -->
<el-col :span="5">
<Formitem label="订单编号" prop="orderNo">
<el-popover
placement="bottom"
width="320"
trigger="manual"
popper-class="popoverorderNo"
v-model="textareaVisible.formItemorderNo"
>
<el-input
name="orderNo-textarea"
type="textarea"
:rows="5"
id="popoverInputorderNo"
class="inputShadow textareaPopover"
v-model="sreachFormData.orderNo"
resize="none"
maxlength="13000"
placeholder=""
@blur="textareaBlur"
@input="input"
></el-input>
<el-input
slot="reference"
name="orderNo"
type="textarea"
:rows="1"
class="inputShadow"
id="inputInner--orderNo"
v-model="sreachFormData.orderNo"
resize="none"
placeholder=""
@focus="textareaFocus"
@input="input"
></el-input>
</el-popover>
<el-badge
v-if="
!textareaVisible.formItemorderNo &&
textareaLength({
key: 'orderNo',
value: sreachFormData.orderNo,
}) > 1
"
type="info"
:value="`+${textareaLength({
key: 'orderNo',
value: sreachFormData.orderNo,
})}`"
class="item texttareaTip"
<FormTextareaInput
:formData="sreachFormData"
dataKey="orderNo"
@formChange="formChange"
/>
</Formitem>
</el-col>
<!-- 电商企业代码 -->
<el-col :span="5">
<Formitem label="电商企业代码" prop="ebccode">
<el-select
<el-input
type="text"
class="inputShadow"
id="inputInner--ebccode"
resize="none"
v-model="sreachFormData.ebccode"
clearable
placeholder=""
>
<el-option
v-for="(item, index) in dictData.ebccode"
:key="index"
:label="item.name"
:value="item.code"
></el-option>
</el-select>
></el-input>
</Formitem>
</el-col>
<!-- 回执状态 -->
......@@ -171,7 +122,23 @@
:rowSelectDataType="false"
>
<template v-slot:returnStatus="scope">
<span>{{ scope.row.returnStatus }}</span>
<TablePopover
dataKey="returnStatus"
:parentDom="$refs.entryTable"
:receiptDataHead="receiptDataHead"
:rowData="scope.row"
:tableData="tableData"
@popoverChange="popoverChange"
@popoverClose="popoverClose"
>
<div slot="title">
<span style="font-weight: 700; color: #515a6e">订单编号:</span
>{{ scope.row.orderno }}
</div>
<div slot="buttonLabel">
{{ scope.row.returnStatus }}
</div>
</TablePopover>
</template>
<template v-slot:orderNo="scope">
<el-button type="text" @click="view(scope.row)">{{
......@@ -259,6 +226,26 @@ export default {
align: "left",
},
],
receiptDataHead: [
{
name: "回执状态",
value: "",
width: "",
align: "left",
},
{
name: "状态时间",
value: "",
width: "",
align: "left",
},
{
name: "回执描述",
value: "",
width: "",
align: "left",
},
],
dictData: {
ebccode: [],
returnStatus: [],
......@@ -304,7 +291,7 @@ export default {
item.index = idx;
item.popoverLoading = false;
item.returnStatusPopoverType = false;
item.returnStatusPopoverData = false;
item.returnStatusPopoverData = [];
});
} else {
this.alertWarningMsg(res.message);
......@@ -334,66 +321,21 @@ export default {
params: { data: val },
});
},
//文本域展示状态切换
textareaFocus(val) {
this.textareaVisible["formItem" + val.target.name.split("-")[0]] = true;
this.$nextTick(() => {
document
.querySelector("#popoverInput" + val.target.name.split("-")[0])
.focus();
document.querySelector(
"#inputInner--" + val.target.name.split("-")[0]
).style.display = "none";
});
popoverChange(val) {
this.tableData = val.tableData;
console.log(this.tableData);
},
textareaBlur(val) {
let inputInner = document.querySelector(
"#inputInner--" + val.target.name.split("-")[0]
);
this.textareaVisible["formItem" + val.target.name.split("-")[0]] = false;
inputInner.style.display = "block";
this.$nextTick(() => {
inputInner.blur();
if (
inputInner.value != undefined &&
inputInner.value != "" &&
inputInner.value != null
) {
inputInner.classList.add("inputFocus");
} else {
inputInner.classList.remove("inputFocus");
}
});
let arr = [];
this.sreachFormData[val.target.name.split("-")[0]]
.replace(/[\n\,\;\;]/g, ",")
.replace(/[\t]/g, "")
.split(",")
.forEach((str, index) => {
if (str != null && str != "" && index <= 1000) {
arr.push(str.trim());
}
popoverClose(val) {
this.tableData.forEach((item) => {
item.popoverLoading = false;
item.returnStatusPopoverType = false;
item.returnStatusPopoverData = [];
});
this.sreachFormData[val.target.name.split("-")[0]] = arr.join("\n");
this.$forceUpdate();
this.$refs.entryTable.$refs.tables.$refs.bodyWrapper.style.overflowY =
"auto";
},
//文本域输入内容数量处理
textareaLength(val) {
if (val.value != "" && val.value != null) {
let arr = [];
val.value
.trim()
.replace(/[\n\,\;\;]/g, ",")
.split(",")
.forEach((item) => {
if (item != "" && item != null) {
arr.push(item);
}
});
return arr.length;
} else {
return 0;
}
formChange(val) {
this.sreachFormData = val;
},
//分页
currentChange(val) {
......
......@@ -12,7 +12,7 @@
>
<div class="modelItem">
<div class="modelItem-title">
<div>数据导入</div>
<div>申报数据导入</div>
<div>
<el-button
type="text"
......@@ -76,6 +76,30 @@
</div>
</div>
</div>
<div class="modelItem-title" v-if="errorData.length > 0">
<div>导入结果</div>
</div>
<Table
v-if="errorData.length > 0"
class="fedexDetialTable"
ref="entryTable"
:data="errorData"
:headerData="headerData"
:maxHeight="200"
:border="false"
:pagination="false"
:order="false"
:page="1"
:pageSizes="[20, 30, 50, 100]"
:totalCount="0"
:selection="false"
:selectFixed="false"
:rowSelectDataType="false"
>
<template v-slot:message="scope">
<div class="errorMessage">{{ scope.row.message }}</div>
</template>
</Table>
</div>
<div class="dialogOption entrySave">
<el-button
......@@ -103,6 +127,34 @@ export default {
file: null,
},
searchForm: {},
errorData: [],
headerData: [
{
name: "sheet",
value: "sheetName",
width: "100",
align: "left",
},
{
name: "行号",
value: "rowIndex",
width: "50",
align: "left",
},
{
name: "清单编号",
value: "orderNo",
width: "150",
align: "left",
},
{
name: "校验结果",
value: "message",
width: "",
align: "left",
slot: true,
},
],
loadings: {
dialogLoading: false,
uploadLoading: false,
......@@ -116,6 +168,7 @@ export default {
watch: {
outerVisible(val) {
if (val) {
this.loadings.dialogLoading = false;
this.uploadType = false;
}
},
......@@ -152,11 +205,22 @@ export default {
uploadDeclareData(obj)
.then((res) => {
if (res.code === "200") {
let arr = [];
res.data.forEach((item) => {
if (item.message != null && item.message != "") {
arr.push(item);
}
});
if (arr.length == 0) {
this.msgSuccess("上传成功!");
this.handleRemove();
this.close();
this.uploadType = true;
} else {
this.errorData = arr;
this.loadings.dialogLoading = false;
}
} else {
this.alertWarningMsg(res.message);
this.loadings.dialogLoading = false;
}
......@@ -268,4 +332,8 @@ export default {
font-size: 20px;
}
}
.errorMessage {
color: $fedexError;
}
</style>
......
......@@ -26,73 +26,24 @@
<el-col :span="5">
<!-- 订单编号 -->
<Formitem label="订单编号" prop="orderNo">
<el-select
<el-input
type="text"
class="inputShadow"
id="inputInner--orderNo"
resize="none"
v-model="sreachFormData.orderNo"
clearable
placeholder=""
>
<el-option
v-for="(item, index) in dictData.logisticsNo"
:key="index"
:label="item.name"
:value="item.code"
></el-option>
</el-select>
></el-input>
</Formitem>
</el-col>
<el-col :span="5">
<!-- 运单编号 -->
<Formitem label="运单编号" prop="logisticsNo">
<el-popover
placement="bottom"
width="320"
trigger="manual"
popper-class="popoverlogisticsNo"
v-model="textareaVisible.formItemlogisticsNo"
>
<el-input
name="logisticsNo-textarea"
type="textarea"
:rows="5"
id="popoverInputlogisticsNo"
class="inputShadow textareaPopover"
v-model="sreachFormData.logisticsNo"
resize="none"
maxlength="13000"
placeholder=""
@blur="textareaBlur"
@input="input"
></el-input>
<el-input
slot="reference"
name="logisticsNo"
type="textarea"
:rows="1"
class="inputShadow"
id="inputInner--logisticsNo"
v-model="sreachFormData.logisticsNo"
resize="none"
placeholder=""
@focus="textareaFocus"
@input="input"
></el-input>
</el-popover>
<el-badge
v-if="
!textareaVisible.formItemlogisticsNo &&
textareaLength({
key: 'logisticsNo',
value: sreachFormData.logisticsNo,
}) > 1
"
type="info"
:value="`+${textareaLength({
key: 'logisticsNo',
value: sreachFormData.logisticsNo,
})}`"
class="item texttareaTip"
<FormTextareaInput
:formData="sreachFormData"
dataKey="logisticsNo"
@formChange="formChange"
/>
</Formitem>
</el-col>
......@@ -138,9 +89,9 @@
</el-col>
</el-row>
<el-row class="backgroundRow">
<el-col :span="5">
<!-- <el-col :span="5"> -->
<!-- 回执类型 -->
<Formitem label="回执类型" prop="receiptType">
<!-- <Formitem label="回执类型" prop="receiptType">
<el-select
type="text"
id="inputInner--receiptType"
......@@ -149,14 +100,14 @@
placeholder=""
>
<el-option
v-for="(item, index) in dictData.receiptType"
v-for="(item, index) in dictData.returnStatus"
:key="index"
:label="item.name"
:value="item.code"
></el-option>
</el-select>
</Formitem>
</el-col>
</Formitem> -->
<!-- </el-col> -->
<el-col :span="5">
<!-- 回执状态 -->
<Formitem label="回执状态" prop="receiptStatus">
......@@ -168,7 +119,7 @@
placeholder=""
>
<el-option
v-for="(item, index) in dictData.receiptStatus"
v-for="(item, index) in dictData.returnStatus"
:key="index"
:label="item.name"
:value="item.code"
......@@ -217,9 +168,9 @@
<el-dropdown-item :command="{ code: 'full', name: '一键申报' }"
>一键申报</el-dropdown-item
>
<el-dropdown-item
:command="{ code: 'order', name: '订单申报' }"
>订单申报</el-dropdown-item>
<el-dropdown-item :command="{ code: 'order', name: '订单申报' }"
>订单申报</el-dropdown-item
>
<el-dropdown-item :command="{ code: 'waybill', name: '物流单申报' }"
>物流单申报</el-dropdown-item
>
......@@ -274,80 +225,61 @@
:selected="selected"
>
<template v-slot:orderReceiptStatus="scope">
<el-popover
:popper-class="`poppercustoms${scope.row.consignmentId} portLogPopper`"
placement="left"
:visible-arrow="false"
title=""
width="750"
trigger="manual"
v-model="scope.row.orderReceiptStatusPopoverType"
<TablePopover
dataKey="orderReceiptStatus"
:parentDom="$refs.entryTable"
:receiptDataHead="receiptDataHead"
:rowData="scope.row"
:tableData="tableData"
@popoverChange="popoverChange"
@popoverClose="popoverClose"
>
<div style="text-align: right">
<i
class="el-icon-close"
style="cursor: pointer; font-size: 20px; font-weight: 700"
@click.stop="popoverClose"
></i>
</div>
<div v-loading="scope.row.popoverLoading">
<div>
<div slot="title">
<span style="font-weight: 700; color: #515a6e">订单编号:</span
>{{ scope.row.orderno }}
</div>
<Table
ref="customsClearanceReceiptStatusTable"
class="fedexDetialTable mt20"
:data="scope.row.orderReceiptStatusPopoverData"
:headerData="receiptDataHead"
:selection="false"
:selectFixed="false"
:order="false"
:border="true"
:rowSelectDataType="false"
:loading="loadings.logTableLoading"
:pagination="false"
:page="1"
:pageSizes="[20, 30, 50, 100]"
:totalCount="0"
:emptyText="$t('portEntry.emptyText')"
height="350px"
maxHeight="500px"
rowKey="id"
>
<template v-slot:createTime="scoped">
<span>{{ formatDate(scoped.row.createTime) }}</span>
</template>
</Table>
<div slot="buttonLabel">
{{ scope.row.orderReceiptStatus }}
</div>
<el-button
slot="reference"
type="text"
@click.stop="popoverChange(scope.row, 'orderReceiptStatus')"
>{{
scope.row.orderReceiptStatus == null ||
scope.row.orderReceiptStatus == ""
? "-"
: scope.row.orderReceiptStatus
}}</el-button
>
</el-popover>
</TablePopover>
</template>
<template v-slot:logisticsReceiptStatus="scope">
<span>{{
scope.row.orderReceiptStatus == null ||
scope.row.orderReceiptStatus == ""
? "-"
: scope.row.orderReceiptStatus
}}</span>
<TablePopover
dataKey="logisticsReceiptStatus"
:parentDom="$refs.entryTable"
:receiptDataHead="receiptDataHead"
:rowData="scope.row"
:tableData="tableData"
@popoverChange="popoverChange"
@popoverClose="popoverClose"
>
<div slot="title">
<span style="font-weight: 700; color: #515a6e">订单编号:</span
>{{ scope.row.orderno }}
</div>
<div slot="buttonLabel">
{{ scope.row.logisticsReceiptStatus }}
</div>
</TablePopover>
</template>
<template v-slot:listReceiptStatus="scope">
<span>{{
scope.row.orderReceiptStatus == null ||
scope.row.orderReceiptStatus == ""
? "-"
: scope.row.orderReceiptStatus
}}</span>
<TablePopover
dataKey="listReceiptStatus"
:parentDom="$refs.entryTable"
:receiptDataHead="receiptDataHead"
:rowData="scope.row"
:tableData="tableData"
@popoverChange="popoverChange"
@popoverClose="popoverClose"
>
<div slot="title">
<span style="font-weight: 700; color: #515a6e">订单编号:</span
>{{ scope.row.orderno }}
</div>
<div slot="buttonLabel">
{{ scope.row.listReceiptStatus }}
</div>
</TablePopover>
</template>
</Table>
<DialogVue
......@@ -464,16 +396,17 @@ export default {
},
],
selected: [],
dictData: {
logisticsNo: [],
receiptStatus: [],
receiptType: [],
},
// dictData: {
// logisticsNo: [],
// receiptStatus: [],
// receiptType: [],
// },
loadings: {
templateLoading: false,
sreachLoading: false,
dwonloadModelLoading: false,
dropDownLoading: false,
logTableLoading: false,
},
textareaVisible: {},
tableMaxheight: null,
......@@ -530,6 +463,36 @@ export default {
this.loadings.sreachLoading = false;
});
},
//查询清关回执
searchLog(data) {
let arr = JSON.parse(JSON.stringify(data.tableData));
if (data.type) {
this.$refs.classCPortEntry.style.overflowY = "hidden";
this.tableData = arr;
if (data.status == "customs") {
arr[data.data.idx][`${data.status}PopoverLoading`] = true;
getClassCPortLog({ chmId: Number(data.data.consignmentId) })
.then((res) => {
if (res.code === "200") {
arr[data.data.idx][`${data.status}PopoverData`] =
this.logDataInfo(res.data.records);
} else {
this.alertWarningMsg(res.message);
}
arr[data.data.idx][`${data.status}PopoverLoading`] = false;
this.tableData = arr;
})
.catch((err) => {
console.log(err);
arr[data.data.idx][`${data.status}PopoverLoading`] = false;
this.tableData = arr;
});
}
} else {
this.$refs.classCPortEntry.style.overflowY = "auto";
this.tableData = arr;
}
},
//重置数据
clear() {
this.sreachFormData = {
......@@ -564,7 +527,7 @@ export default {
downloadData() {},
//申报
declareData() {
if(this.selected.length > 0){
if (this.selected.length > 0) {
this.loadings.dropDownLoading = true;
let obj = {
declareIds: [],
......@@ -586,8 +549,8 @@ export default {
console.log(err);
this.loadings.dropDownLoading = false;
});
}else{
this.alertWarningMsg('请选择数据!')
} else {
this.alertWarningMsg("请选择数据!");
}
},
//切换申报模式
......@@ -601,7 +564,10 @@ export default {
}
this.outerVisible = false;
},
//弹框关闭
popoverChange(val) {
this.tableData = val.tableData;
console.log(this.tableData);
},
popoverClose(val) {
this.tableData.forEach((item) => {
item.popoverLoading = false;
......@@ -615,62 +581,6 @@ export default {
this.$refs.entryTable.$refs.tables.$refs.bodyWrapper.style.overflowY =
"auto";
},
//弹框状态改版
popoverChange(data, type) {
this.popoverClose(type);
let arr = JSON.parse(JSON.stringify(this.tableData));
arr.forEach((item) => {
item[`${type}PopoverData`] = [];
if (data.declareId != item.declareId) {
item[`${type}PopoverLoading`] = false;
item[`${type}PopoverType`] = false;
} else {
item[`${type}PopoverLoading`] = true;
item[`${type}PopoverType`] = !JSON.parse(
JSON.stringify(item[`${type}PopoverType`])
);
}
});
if (!data[`${type}PopoverType`]) {
this.$refs.entryTable.$refs.tables.$refs.bodyWrapper.style.overflowY =
"hidden";
} else {
this.$refs.entryTable.$refs.tables.$refs.bodyWrapper.style.overflowY =
"auto";
}
// this.searchLog({
// tableData: arr,
// data: data,
// type: !data[`${type}PopoverType`],
// status: type,
// });
this.$nextTick(() => {
document.getElementsByClassName("el-table__row").forEach((dom1, i) => {
if (i == data.idx) {
dom1.classList.add("activeRow");
} else {
dom1.classList.remove("hover-row");
dom1.classList.remove("activeRow");
}
});
let interval = setInterval(() => {
if (
document.getElementsByClassName(`popper${type}${data.declareId}`)
.length == 1
) {
clearInterval(interval);
}
document
.getElementsByClassName(`popper${type}${data.declareId}`)
.forEach((dom, index) => {
if (index > 0) {
dom.style.display = "none";
dom.remove();
}
});
}, 100);
});
},
tableSelect(val) {
this.selected = val.selection;
},
......@@ -686,67 +596,11 @@ export default {
this.page.pageSize = val;
this.search(1);
},
cellClick() {},
//文本域展示状态切换
textareaFocus(val) {
this.textareaVisible["formItem" + val.target.name.split("-")[0]] = true;
this.$nextTick(() => {
document
.querySelector("#popoverInput" + val.target.name.split("-")[0])
.focus();
document.querySelector(
"#inputInner--" + val.target.name.split("-")[0]
).style.display = "none";
});
cellClick() {
this.popoverClose();
},
textareaBlur(val) {
let inputInner = document.querySelector(
"#inputInner--" + val.target.name.split("-")[0]
);
this.textareaVisible["formItem" + val.target.name.split("-")[0]] = false;
inputInner.style.display = "block";
this.$nextTick(() => {
inputInner.blur();
if (
inputInner.value != undefined &&
inputInner.value != "" &&
inputInner.value != null
) {
inputInner.classList.add("inputFocus");
} else {
inputInner.classList.remove("inputFocus");
}
});
let arr = [];
this.sreachFormData[val.target.name.split("-")[0]]
.replace(/[\n\,\;\;]/g, ",")
.replace(/[\t]/g, "")
.split(",")
.forEach((str, index) => {
if (str != null && str != "" && index <= 1000) {
arr.push(str.trim());
}
});
this.sreachFormData[val.target.name.split("-")[0]] = arr.join("\n");
this.$forceUpdate();
},
//文本域输入内容数量处理
textareaLength(val) {
if (val.value != "" && val.value != null) {
let arr = [];
val.value
.trim()
.replace(/[\n\,\;\;]/g, ",")
.split(",")
.forEach((item) => {
if (item != "" && item != null) {
arr.push(item);
}
});
return arr.length;
} else {
return 0;
}
formChange(val) {
this.sreachFormData = val;
},
input() {
this.$forceUpdate();
......
......@@ -178,6 +178,7 @@ export default {
dialogClose() {
this.outerVisible = false;
this.activeData = null;
this.search(1);
},
//分页
currentChange(val) {
......