Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
J
jiedao-app-operator-master
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
lanbaoming
jiedao-app-operator-master
Commits
656ca06f
Commit
656ca06f
authored
Aug 03, 2022
by
dragondean@qq.com
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'dev' of
http://gitlab.jdshangmen.com/jiedao-app/jiedao-app-operator
into dev
parents
875d18d0
4b9ea5bb
Changes
15
Hide whitespace changes
Inline
Side-by-side
Showing
15 changed files
with
416 additions
and
381 deletions
+416
-381
arrival.vue
src/views/ecw/box/shippingSea/nodePage/arrival.vue
+11
-8
blCopy.vue
src/views/ecw/box/shippingSea/nodePage/blCopy.vue
+7
-4
booking.vue
src/views/ecw/box/shippingSea/nodePage/booking.vue
+17
-11
index.vue
src/views/ecw/box/shippingSea/nodePage/cabinet/index.vue
+19
-8
clrDocument.vue
src/views/ecw/box/shippingSea/nodePage/clrDocument.vue
+14
-10
cusClearance.vue
src/views/ecw/box/shippingSea/nodePage/cusClearance.vue
+2
-1
cusDeclaration.vue
src/views/ecw/box/shippingSea/nodePage/cusDeclaration.vue
+4
-4
departure.vue
src/views/ecw/box/shippingSea/nodePage/departure.vue
+2
-1
preinstallReview.vue
src/views/ecw/box/shippingSea/nodePage/preinstallReview.vue
+3
-3
ship.vue
src/views/ecw/box/shippingSea/nodePage/ship.vue
+1
-1
subMaterial.vue
src/views/ecw/box/shippingSea/nodePage/subMaterial.vue
+5
-13
index.vue
src/views/ecw/box/shippingSea/nodePage/unloading/index.vue
+2
-2
seaStepDetail.vue
src/views/ecw/box/shippingSea/seaStepDetail.vue
+10
-9
shippingSea.vue
src/views/ecw/box/shippingSea/shippingSea.vue
+1
-1
utils.js
src/views/ecw/box/shippingSea/utils.js
+318
-305
No files found.
src/views/ecw/box/shippingSea/nodePage/arrival.vue
View file @
656ca06f
...
...
@@ -61,11 +61,12 @@ export default {
created
()
{
const
voName
=
this
.
$attrs
.
currNode
.
voName
;
let
oldData
=
{
...
this
.
$attrs
.
shipmentObj
[
voName
]
};
oldData
=
formatDateStr
(
oldData
,
[
"
apRealTime
"
,
"
apConfirmTime
"
,
"
apUnloadPortTime
"
,
]);
oldData
=
formatDateStr
(
oldData
,
[
"
apRealTime
"
,
"
apConfirmTime
"
],
"
YYYY-MM-DD HH:mm:ss
"
);
oldData
=
formatDateStr
(
oldData
,
[
"
apUnloadPortTime
"
]);
this
.
arrivalObj
=
oldData
;
},
watch
:
{
...
...
@@ -77,9 +78,11 @@ export default {
methods
:
{
// 获取预计到港时间
getExpectedTime
()
{
return
dayjs
(
this
.
$attrs
.
shipmentObj
.
shippingInfo
.
dtEstArrivalTime
).
format
(
"
YYYY-MM-DD
"
);
const
{
shippingInfo
}
=
this
.
$attrs
.
shipmentObj
;
if
(
shippingInfo
)
{
return
dayjs
(
shippingInfo
.
dtEstArrivalTime
).
format
(
"
YYYY-MM-DD
"
);
}
return
null
;
},
// 时间比较
compareDate
(
expectedTime
,
apConfirmTime
)
{
...
...
src/views/ecw/box/shippingSea/nodePage/blCopy.vue
View file @
656ca06f
...
...
@@ -2,9 +2,7 @@
<div>
<el-form
ref=
"blCopyForm"
:model=
"blCopyObj"
label-width=
"120px"
>
<el-form-item
label=
"提单Copy"
>
<el-upload
action=
""
:file-list=
"blCopyObj.copyUrl"
>
<el-button
size=
"small"
type=
"primary"
>
选择文件
</el-button>
</el-upload>
<FileUpload
:limit=
"1"
:isShowTip=
false
v-model=
"blCopyObj.copyUrl"
:fileType=
"fileType"
/>
</el-form-item>
</el-form>
<el-row
class=
"operate-button"
>
...
...
@@ -17,23 +15,28 @@
<
script
>
import
{
ladingCopyCreate
,
serviceMsg
}
from
"
@/api/ecw/boxSea
"
;
import
FileUpload
from
"
@/components/FileUpload
"
;
import
{
fileTypes
}
from
"
../utils
"
;
/**
* 提单copy
*/
export
default
{
name
:
"
blCopy
"
,
inheritAttrs
:
false
,
components
:
{
FileUpload
},
data
()
{
return
{
// 提单copy对象
blCopyObj
:
{},
// 文件格式
fileType
:
fileTypes
,
};
},
created
()
{
const
voName
=
this
.
$attrs
.
currNode
.
voName
;
let
oldData
=
{
...
this
.
$attrs
.
shipmentObj
[
voName
]
};
this
.
blCopyObj
=
oldData
;
this
.
blCopyObj
.
copyUrl
=
[];
},
methods
:
{
/** 提交 */
...
...
src/views/ecw/box/shippingSea/nodePage/booking.vue
View file @
656ca06f
...
...
@@ -8,16 +8,16 @@
<supplierSelect
v-model=
"bookingObj.shipCompanyType"
:companyType=
"'9'"
placeholder=
"请选择船公司类型"
:allSupplier=
"this.$attrs.allSupplier"
/>
</el-form-item>
<el-form-item
label=
"驳船港"
>
<dockSelect
v-model=
"bookingObj.bargePort"
placeholder=
"请选择驳船港"
:allDocks=
"this.$attrs.allDocks"
/>
<dockSelect
v-model=
"bookingObj.bargePort
Id
"
placeholder=
"请选择驳船港"
:allDocks=
"this.$attrs.allDocks"
/>
</el-form-item>
<el-form-item
label=
"大船港"
>
<dockSelect
v-model=
"bookingObj.bigPort"
placeholder=
"请选择大船港"
:allDocks=
"this.$attrs.allDocks"
/>
<dockSelect
v-model=
"bookingObj.bigPort
Id
"
placeholder=
"请选择大船港"
:allDocks=
"this.$attrs.allDocks"
/>
</el-form-item>
<el-form-item
label=
"目的港"
>
<dockSelect
v-model=
"bookingObj.destPort"
placeholder=
"请选择目的港"
:allDocks=
"this.$attrs.allDocks"
/>
<dockSelect
v-model=
"bookingObj.destPort
Id
"
placeholder=
"请选择目的港"
:allDocks=
"this.$attrs.allDocks"
/>
</el-form-item>
<el-form-item
label=
"订舱公司"
>
<supplierSelect
v-model=
"bookingObj.spaceCompany"
:companyType=
"'1'"
placeholder=
"请选择订舱公司"
:allSupplier=
"this.$attrs.allSupplier"
/>
<supplierSelect
v-model=
"bookingObj.spaceCompany
Id
"
:companyType=
"'1'"
placeholder=
"请选择订舱公司"
:allSupplier=
"this.$attrs.allSupplier"
/>
</el-form-item>
<el-form-item
label=
"预计驳船时间"
prop=
"bargeTime"
>
<el-date-picker
type=
"date"
placeholder=
"请选择日期"
value-format=
"yyyy-MM-dd"
v-model=
"bookingObj.bargeTime"
></el-date-picker>
...
...
@@ -31,7 +31,7 @@
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"通知人"
label-width=
"80px"
>
<userSelect
v-model=
"bookingObj.
feedTimePerson1
"
placeholder=
"请选择通知人"
:allUsers=
"this.$attrs.allUsers"
/>
<userSelect
v-model=
"bookingObj.
sailNotifyUser
"
placeholder=
"请选择通知人"
:allUsers=
"this.$attrs.allUsers"
/>
</el-form-item>
</el-col>
</el-row>
...
...
@@ -39,12 +39,12 @@
<el-row>
<el-col
:span=
"12"
>
<el-form-item
label=
"预计提单补料时间"
>
<el-date-picker
type=
"date"
placeholder=
"请选择日期"
value-format=
"yyyy-MM-dd"
v-model=
"bookingObj.
feed
Time"
></el-date-picker>
<el-date-picker
type=
"date"
placeholder=
"请选择日期"
value-format=
"yyyy-MM-dd"
v-model=
"bookingObj.
ladingBill
Time"
></el-date-picker>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"通知人"
label-width=
"80px"
>
<userSelect
v-model=
"bookingObj.
feedTimePerson2
"
placeholder=
"请选择通知人"
:allUsers=
"this.$attrs.allUsers"
/>
<userSelect
v-model=
"bookingObj.
ladingBillNotifyUser
"
placeholder=
"请选择通知人"
:allUsers=
"this.$attrs.allUsers"
/>
</el-form-item>
</el-col>
</el-row>
...
...
@@ -52,12 +52,12 @@
<el-row>
<el-col
:span=
"12"
>
<el-form-item
label=
"预计报关时间"
>
<el-date-picker
type=
"date"
placeholder=
"请选择日期"
value-format=
"yyyy-MM-dd"
v-model=
"bookingObj.
declaration
Time"
></el-date-picker>
<el-date-picker
type=
"date"
placeholder=
"请选择日期"
value-format=
"yyyy-MM-dd"
v-model=
"bookingObj.
customs
Time"
></el-date-picker>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"通知人"
label-width=
"80px"
>
<userSelect
v-model=
"bookingObj.
feedTimePerson3
"
placeholder=
"请选择通知人"
:allUsers=
"this.$attrs.allUsers"
/>
<userSelect
v-model=
"bookingObj.
customsNotifyUser
"
placeholder=
"请选择通知人"
:allUsers=
"this.$attrs.allUsers"
/>
</el-form-item>
</el-col>
</el-row>
...
...
@@ -70,7 +70,7 @@
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"通知人"
label-width=
"80px"
>
<userSelect
v-model=
"bookingObj.
feedTimePerson4
"
placeholder=
"请选择通知人"
:allUsers=
"this.$attrs.allUsers"
/>
<userSelect
v-model=
"bookingObj.
cutOffNotifyUser
"
placeholder=
"请选择通知人"
:allUsers=
"this.$attrs.allUsers"
/>
</el-form-item>
</el-col>
</el-row>
...
...
@@ -119,7 +119,13 @@ export default {
const
voName
=
this
.
$attrs
.
currNode
.
voName
;
let
oldData
=
{
...
this
.
shipmentObj
[
voName
]
};
oldData
=
formatStringNumber
(
oldData
,
[
"
shipCompanyType
"
,
"
spaceCompany
"
]);
oldData
=
formatDateStr
(
oldData
,
[
"
sailTime
"
,
"
bargeTime
"
]);
oldData
=
formatDateStr
(
oldData
,
[
"
sailTime
"
,
"
bargeTime
"
,
"
ladingBillTime
"
,
"
customsTime
"
,
"
cutOffTime
"
,
]);
this
.
bookingObj
=
oldData
;
},
methods
:
{
...
...
src/views/ecw/box/shippingSea/nodePage/cabinet/index.vue
View file @
656ca06f
...
...
@@ -16,9 +16,7 @@
<el-date-picker
type=
"date"
placeholder=
"请选择日期"
v-model=
"cabinetObj.ldOutWarehouseTime"
value-format=
"yyyy-MM-dd"
></el-date-picker>
</el-form-item>
<el-form-item
label=
"装柜图片"
>
<el-upload
action=
""
:limit=
"1"
:file-list=
"cabinetObj.ldPictures"
>
<el-button
size=
"small"
type=
"primary"
>
选择文件
</el-button>
</el-upload>
<ImageUpload
:limit=
"1"
:isShowTip=
false
v-model=
"cabinetObj.ldPictures"
/>
</el-form-item>
</el-form>
...
...
@@ -39,8 +37,9 @@
<
script
>
import
startPacking
from
"
./startPacking.vue
"
;
import
{
cabinetCreate
,
serviceMsg
}
from
"
@/api/ecw/boxSea
"
;
import
{
cabinetCreate
,
serviceMsg
,
approvalCreate
}
from
"
@/api/ecw/boxSea
"
;
import
{
formatDateStr
}
from
"
../../utils
"
;
import
ImageUpload
from
"
@/components/ImageUpload
"
;
/**
* 装柜
...
...
@@ -48,7 +47,7 @@ import { formatDateStr } from "../../utils";
export
default
{
name
:
"
cabinet
"
,
inheritAttrs
:
false
,
components
:
{
startPacking
},
components
:
{
startPacking
,
ImageUpload
},
data
()
{
return
{
// 弹窗
...
...
@@ -81,9 +80,21 @@ export default {
...
this
.
cabinetObj
,
operateType
,
}).
then
((
res
)
=>
{
serviceMsg
(
res
,
this
).
then
(()
=>
{
this
.
cancel
(
"
submit
"
);
});
if
(
operateType
===
2
)
{
approvalCreate
({
shipmentId
:
this
.
$attrs
.
shipmentObj
.
id
,
approvalStatus
:
0
,
approvalType
:
2
,
}).
then
((
res
)
=>
{
serviceMsg
(
res
,
this
).
then
(()
=>
{
this
.
cancel
(
"
submit
"
);
});
});
}
else
{
serviceMsg
(
res
,
this
).
then
(()
=>
{
this
.
cancel
(
"
submit
"
);
});
}
});
}
});
...
...
src/views/ecw/box/shippingSea/nodePage/clrDocument.vue
View file @
656ca06f
...
...
@@ -28,9 +28,7 @@
</el-col>
</el-row>
<el-form-item
label=
"电放凭证附件"
>
<el-upload
action=
""
:file-list=
"cDocObj.cdElectricVoucher"
>
<el-button
size=
"small"
type=
"primary"
>
选择文件
</el-button>
</el-upload>
<FileUpload
:limit=
"1"
:isShowTip=
false
v-model=
"cDocObj.cdElectricVoucher"
:fileType=
"fileType"
/>
</el-form-item>
<el-form-item
label=
"agent list"
>
...
...
@@ -42,9 +40,7 @@
<el-date-picker
type=
"date"
placeholder=
"请选择日期"
v-model=
"cDocObj.cdAgentlistTime"
value-format=
"yyyy-MM-dd"
></el-date-picker>
</el-form-item>
<el-form-item>
<el-upload
action=
""
:file-list=
"cDocObj.cdAgentlistFile"
>
<el-button
size=
"small"
type=
"primary"
>
选择文件
</el-button>
</el-upload>
<FileUpload
:limit=
"1"
:isShowTip=
false
v-model=
"cDocObj.cdAgentlistFile"
:fileType=
"fileType"
/>
</el-form-item>
<el-form-item
label=
"soncap"
>
...
...
@@ -56,9 +52,7 @@
<el-date-picker
type=
"date"
placeholder=
"请选择日期"
v-model=
"cDocObj.cdSoncapTime"
value-format=
"yyyy-MM-dd"
></el-date-picker>
</el-form-item>
<el-form-item>
<el-upload
action=
""
:file-list=
"cDocObj.cdSoncapFile"
>
<el-button
size=
"small"
type=
"primary"
>
选择文件
</el-button>
</el-upload>
<FileUpload
:limit=
"1"
:isShowTip=
false
v-model=
"cDocObj.cdSoncapFile"
:fileType=
"fileType"
/>
</el-form-item>
</el-form>
...
...
@@ -72,13 +66,21 @@
<
script
>
import
{
clearanceDocCreate
,
serviceMsg
}
from
"
@/api/ecw/boxSea
"
;
import
{
constantDict
,
formatDateStr
,
formatNumberString
}
from
"
../utils
"
;
import
{
constantDict
,
formatDateStr
,
formatNumberString
,
fileTypes
,
}
from
"
../utils
"
;
import
FileUpload
from
"
@/components/FileUpload
"
;
/**
* 清关文件
*/
export
default
{
name
:
"
clrDocument
"
,
inheritAttrs
:
false
,
components
:
{
FileUpload
},
data
()
{
return
{
// 清关文件对象
...
...
@@ -87,6 +89,8 @@ export default {
method
:
constantDict
.
billingMethod
,
// 选项
status
:
constantDict
.
isFile
,
// 文件类型
fileType
:
fileTypes
,
};
},
created
()
{
...
...
src/views/ecw/box/shippingSea/nodePage/cusClearance.vue
View file @
656ca06f
...
...
@@ -58,7 +58,8 @@ export default {
created
()
{
const
voName
=
this
.
$attrs
.
currNode
.
voName
;
let
oldData
=
{
...
this
.
$attrs
.
shipmentObj
[
voName
]
};
oldData
=
formatDateStr
(
oldData
,
[
"
clEstTime
"
,
"
clClearTime
"
]);
oldData
=
formatDateStr
(
oldData
,
[
"
clEstTime
"
]);
oldData
=
formatDateStr
(
oldData
,
[
"
clClearTime
"
],
"
YYYY-MM-DD HH:mm:ss
"
);
this
.
cusClearanceObj
=
oldData
;
},
watch
:
{
...
...
src/views/ecw/box/shippingSea/nodePage/cusDeclaration.vue
View file @
656ca06f
...
...
@@ -46,9 +46,7 @@
<el-date-picker
type=
"date"
placeholder=
"请选择日期"
v-model=
"cusDeclarationObj.dcCheckTime"
value-format=
"yyyy-MM-dd"
></el-date-picker>
</el-form-item>
<el-form-item
label=
"查验前图片"
>
<el-upload
action=
""
:limit=
"1"
:file-list=
"cusDeclarationObj.dcCheckPreImg"
>
<el-button
size=
"small"
type=
"primary"
>
选择文件
</el-button>
</el-upload>
<ImageUpload
:limit=
"1"
:isShowTip=
false
v-model=
"cusDeclarationObj.dcCheckPreImg"
/>
</el-form-item>
<el-form-item
label=
"新封条"
>
<el-input
v-model=
"cusDeclarationObj.dcStripSeal"
placeholder=
"请输入新封条"
clearable
/>
...
...
@@ -133,13 +131,15 @@
import
supplierSelect
from
"
./common/supplierSelect.vue
"
;
import
{
customsCreate
,
serviceMsg
}
from
"
@/api/ecw/boxSea
"
;
import
{
formatNumberString
,
formatDateStr
}
from
"
../utils
"
;
import
ImageUpload
from
"
@/components/ImageUpload
"
;
/**
* 报关
*/
export
default
{
name
:
"
cusDeclaration
"
,
inheritAttrs
:
false
,
components
:
{
supplierSelect
},
components
:
{
supplierSelect
,
ImageUpload
},
data
()
{
return
{
// 报关对象
...
...
src/views/ecw/box/shippingSea/nodePage/departure.vue
View file @
656ca06f
...
...
@@ -61,7 +61,8 @@ export default {
created
()
{
const
voName
=
this
.
$attrs
.
currNode
.
voName
;
let
oldData
=
{
...
this
.
$attrs
.
shipmentObj
[
voName
]
};
oldData
=
formatDateStr
(
oldData
,
[
"
dtRealShipTime
"
,
"
dtEstArrivalTime
"
]);
oldData
=
formatDateStr
(
oldData
,
[
"
dtRealShipTime
"
],
"
YYYY-MM-DD HH:mm:ss
"
);
oldData
=
formatDateStr
(
oldData
,
[
"
dtEstArrivalTime
"
]);
this
.
departureObj
=
oldData
;
},
watch
:
{
...
...
src/views/ecw/box/shippingSea/nodePage/preinstallReview.vue
View file @
656ca06f
...
...
@@ -2,7 +2,7 @@
<div>
<el-form
ref=
"reviewForm"
:model=
"reviewObj"
label-width=
"120px"
>
<el-form-item
label=
"申请理由"
>
<el-input
v-model=
"reviewObj.
remark
"
type=
"textarea"
rows=
"2"
placeholder=
"请输入申请理由"
></el-input>
<el-input
v-model=
"reviewObj.
applyReason
"
type=
"textarea"
rows=
"2"
placeholder=
"请输入申请理由"
></el-input>
</el-form-item>
</el-form>
<el-row
class=
"operate-button"
>
...
...
@@ -13,7 +13,7 @@
</
template
>
<
script
>
import
{
approvalCreate
}
from
"
@/api/ecw/boxSea
"
;
import
{
approvalCreate
,
serviceMsg
}
from
"
@/api/ecw/boxSea
"
;
/**
* 预装反审
...
...
@@ -36,7 +36,7 @@ export default {
shipmentId
:
this
.
$attrs
.
shipmentObj
.
id
,
...
this
.
reviewObj
,
approvalStatus
:
-
1
,
approvalType
:
1
,
approvalType
:
4
,
}).
then
((
res
)
=>
{
serviceMsg
(
res
,
this
).
then
(()
=>
{
this
.
cancel
(
"
submit
"
);
...
...
src/views/ecw/box/shippingSea/nodePage/ship.vue
View file @
656ca06f
...
...
@@ -7,7 +7,7 @@
</el-radio-group>
</el-form-item>
<el-form-item
label=
"配船时间"
v-show=
"shipObj.saExmtStatus === '2'"
>
<el-date-picker
type=
"date"
placeholder=
"请选择日期"
v-model=
"shipObj.
ship
Time"
value-format=
"yyyy-MM-dd"
></el-date-picker>
<el-date-picker
type=
"date"
placeholder=
"请选择日期"
v-model=
"shipObj.
config
Time"
value-format=
"yyyy-MM-dd"
></el-date-picker>
</el-form-item>
</el-form>
...
...
src/views/ecw/box/shippingSea/nodePage/subMaterial.vue
View file @
656ca06f
...
...
@@ -33,8 +33,8 @@
<el-input
v-model=
"subMaterialObj.markNo"
></el-input>
</el-form-item>
<el-form-item
label=
"包装数量与单位"
class=
"two-element"
>
<el-input
v-model=
"subMaterialObj.
quantity
"
placeholder=
"请输入包装数量"
></el-input>
<el-select
v-model=
"subMaterialObj.
u
nit"
placeholder=
"请选择单位"
>
<el-input
v-model=
"subMaterialObj.
packageNum
"
placeholder=
"请输入包装数量"
></el-input>
<el-select
v-model=
"subMaterialObj.
packageU
nit"
placeholder=
"请选择单位"
>
<el-option
v-for=
"unit in units"
:key=
"unit.id"
:value=
"unit.fuhao"
>
{{
unit
.
titleZh
}}
</el-option>
</el-select>
</el-form-item>
...
...
@@ -42,7 +42,7 @@
<el-input
v-model=
"subMaterialObj.kgs"
placeholder=
"请输入毛重(KGS)"
></el-input>
</el-form-item>
<el-form-item
label=
"立方数(CBM)"
>
<el-input
v-model=
"subMaterialObj.
mesaurement
"
placeholder=
"请输入立方数(CBM)"
></el-input>
<el-input
v-model=
"subMaterialObj.
cbm
"
placeholder=
"请输入立方数(CBM)"
></el-input>
</el-form-item>
<el-form-item
label=
"货物描述"
>
<el-input
v-model=
"subMaterialObj.goodsDesc"
placeholder=
"请输入货物描述"
></el-input>
...
...
@@ -97,16 +97,7 @@ export default {
markNo
:
"
N/M
"
,
},
// 出单方式
method
:
[
{
value
:
"
1
"
,
label
:
"
正本
"
,
},
{
value
:
"
2
"
,
label
:
"
电放
"
,
},
],
method
:
constantDict
.
billingMethod
,
// 单位
units
:
[],
// 柜型
...
...
@@ -132,6 +123,7 @@ export default {
const
voName
=
this
.
$attrs
.
currNode
.
voName
;
let
oldData
=
{
...
this
.
shipmentObj
[
voName
]
};
oldData
=
formatNumberString
(
oldData
,
[
"
issueType
"
]);
this
.
subMaterialObj
=
oldData
;
},
methods
:
{
...
...
src/views/ecw/box/shippingSea/nodePage/unloading/index.vue
View file @
656ca06f
...
...
@@ -8,13 +8,13 @@
<el-date-picker
type=
"date"
placeholder=
"请选择日期"
v-model=
"unloadingObj.ulWarehouseTime"
value-format=
"yyyy-MM-dd"
></el-date-picker>
</el-form-item>
<el-form-item
label=
"卸柜时间"
>
<el-date-picker
type=
"date
time"
placeholder=
"请选择日期"
v-model=
"unloadingObj.ulBoxTime"
value-format=
"yyyy-MM-dd HH:mm:ss
"
></el-date-picker>
<el-date-picker
type=
"date
"
placeholder=
"请选择日期"
v-model=
"unloadingObj.ulBoxTime"
value-format=
"yyyy-MM-dd
"
></el-date-picker>
</el-form-item>
</el-form>
<el-row
class=
"operate-button"
>
<el-button
type=
"primary"
@
click=
"onSubmit(1)"
>
保存
</el-button>
<el-button
type=
"
success"
@
click=
"onSubmit(2)"
>
提交
</el-button>
<el-button
type=
"success"
@
click=
"onSubmit(2)"
>
提交
</el-button>
<el-button
@
click=
"cancel"
>
关闭
</el-button>
<el-button
type=
"danger"
@
click=
"startUnloading"
>
开始卸柜
</el-button>
</el-row>
...
...
src/views/ecw/box/shippingSea/seaStepDetail.vue
View file @
656ca06f
...
...
@@ -238,11 +238,11 @@ export default {
},
{
title
:
"
数量
"
,
key
:
""
,
key
:
"
packageNum
"
,
},
{
title
:
"
体积
"
,
key
:
""
,
key
:
"
cbm
"
,
},
{
title
:
"
业务员
"
,
...
...
@@ -264,7 +264,7 @@ export default {
{
title
:
"
实际开船时间
"
,
key
:
"
dtRealShipTime
"
,
type
:
"
date
"
,
type
:
"
date
time
"
,
},
{
title
:
"
预计到港时间
"
,
...
...
@@ -306,12 +306,12 @@ export default {
{
title
:
"
实际到港时间
"
,
key
:
"
apRealTime
"
,
type
:
"
date
"
,
type
:
"
date
time
"
,
},
{
title
:
"
确认到港
"
,
key
:
"
apConfirmTime
"
,
type
:
"
date
"
,
type
:
"
date
time
"
,
},
{
title
:
"
卸港时间
"
,
...
...
@@ -332,7 +332,7 @@ export default {
{
title
:
"
清关时间
"
,
key
:
"
clClearTime
"
,
type
:
"
date
"
,
type
:
"
date
time
"
,
},
{
title
:
"
业务员
"
,
...
...
@@ -383,6 +383,9 @@ export default {
case
"
date
"
:
val
=
dayjs
(
val
).
format
(
"
YYYY-MM-DD
"
);
break
;
case
"
datetime
"
:
val
=
dayjs
(
val
).
format
(
"
YYYY-MM-DD HH:mm:ss
"
);
break
;
case
"
supplier
"
:
val
=
this
.
getSupplier
(
Number
(
val
));
break
;
...
...
@@ -441,9 +444,7 @@ export default {
flex-direction
:
column
;
flex-wrap
:
wrap
;
align-content
:
flex-start
;
// width: 100%;
height
:
500px
;
height
:
550px
;
p
{
margin
:
0
;
...
...
src/views/ecw/box/shippingSea/shippingSea.vue
View file @
656ca06f
...
...
@@ -68,7 +68,7 @@ export default {
// 用户
allUsers
:
[],
// 流程图节点
seaBaseData
:
seaBaseData
,
seaBaseData
:
seaBaseData
()
,
// 状态
statusLabel
:
""
,
};
...
...
src/views/ecw/box/shippingSea/utils.js
View file @
656ca06f
...
...
@@ -59,325 +59,327 @@ statusName.set(151, "未结算");
statusName
.
set
(
152
,
"
结算中
"
);
statusName
.
set
(
153
,
"
已结算
"
);
const
seaBaseData
=
[
[
{
title
:
"
订舱
"
,
imgSrc
:
{
start
:
require
(
"
@/assets/images/shipping/dc-start.png
"
),
end
:
require
(
"
@/assets/images/shipping/dc-end.png
"
),
},
type
:
"
booking
"
,
// 类型
/**
* 订舱状态:11、未订舱;12、已订舱
*/
voName
:
"
bookSeaInfo
"
,
// 订舱对象vo
keyName
:
"
bkStatus
"
,
status
:
{
start
:
[
11
],
wait
:
[],
end
:
[
12
],
},
},
],
[
{
title
:
"
预装
"
,
imgSrc
:
{
start
:
require
(
"
@/assets/images/shipping/yz-start.png
"
),
wait
:
require
(
"
@/assets/images/shipping/yz-wait.png
"
),
end
:
require
(
"
@/assets/images/shipping/yz-end.png
"
),
},
type
:
"
preinstall
"
,
/**
* 预装状态:21、未预装;22、预装审核中;23、预装审核失败;24、预装审核成功
*/
voName
:
"
preInstallInfo
"
,
keyName
:
"
prStatus
"
,
status
:
{
start
:
[
21
],
wait
:
[
22
,
23
],
end
:
[
24
],
},
},
{
title
:
"
拖车
"
,
imgSrc
:
{
start
:
require
(
"
@/assets/images/shipping/tc-start.png
"
),
wait
:
require
(
"
@/assets/images/shipping/tc-wait.png
"
),
end
:
require
(
"
@/assets/images/shipping/tc-end.png
"
),
},
type
:
"
trailer
"
,
/**
* 拖车状态:31、未派车;32、已派车
*/
voName
:
"
trailerInfo
"
,
keyName
:
"
tlStatus
"
,
status
:
{
start
:
[
31
],
wait
:
[],
end
:
[
32
],
},
},
{
title
:
"
AGENT
"
,
imgSrc
:
{
start
:
require
(
"
@/assets/images/shipping/agent-start.png
"
),
wait
:
require
(
"
@/assets/images/shipping/agent-wait.png
"
),
end
:
require
(
"
@/assets/images/shipping/agent-end.png
"
),
},
type
:
"
agent
"
,
voName
:
"
agentInfo
"
,
currStatus
:
"
start
"
,
},
],
[
{
title
:
"
装柜
"
,
imgSrc
:
{
start
:
require
(
"
@/assets/images/shipping/zg-start.png
"
),
wait
:
require
(
"
@/assets/images/shipping/zg-wait.png
"
),
end
:
require
(
"
@/assets/images/shipping/zg-end.png
"
),
},
type
:
"
cabinet
"
,
/**
* 装柜状态:41、未装柜;42、装柜中;43、已装柜、待封柜;44、封柜审核中;45、封柜审核失败;46、封柜审核成功
*/
voName
:
"
cabinetInfo
"
,
keyName
:
"
ldStatus
"
,
status
:
{
start
:
[
41
],
wait
:
[
42
,
43
,
44
,
45
],
end
:
[
46
],
},
},
],
[
{
title
:
"
报关
"
,
imgSrc
:
{
start
:
require
(
"
@/assets/images/shipping/bg-start.png
"
),
wait
:
require
(
"
@/assets/images/shipping/bg-wait.png
"
),
end
:
require
(
"
@/assets/images/shipping/bg-end.png
"
),
},
type
:
"
cusDeclaration
"
,
voName
:
"
customsInfo
"
,
/**
*报关状态:51、未报关;52、报关中;53、已报关
*/
keyName
:
"
dcStatus
"
,
status
:
{
start
:
[
51
],
wait
:
[
52
],
end
:
[
53
],
},
},
{
title
:
"
配船
"
,
imgSrc
:
{
start
:
require
(
"
@/assets/images/shipping/pc-start.png
"
),
wait
:
require
(
"
@/assets/images/shipping/pc-wait.png
"
),
end
:
require
(
"
@/assets/images/shipping/pc-end.png
"
),
},
type
:
"
ship
"
,
/**
* 配船状态:61、未配船;62、已配船
*/
voName
:
"
shipConfigInfo
"
,
keyName
:
"
saStatus
"
,
status
:
{
start
:
[
61
],
wait
:
[],
end
:
[
62
],
},
},
{
title
:
"
提单补料
"
,
imgSrc
:
{
start
:
require
(
"
@/assets/images/shipping/tdcl-start.png
"
),
wait
:
require
(
"
@/assets/images/shipping/tdcl-wait.png
"
),
end
:
require
(
"
@/assets/images/shipping/tdcl-end.png
"
),
const
seaBaseData
=
()
=>
{
return
[
[
{
title
:
"
订舱
"
,
imgSrc
:
{
start
:
require
(
"
@/assets/images/shipping/dc-start.png
"
),
end
:
require
(
"
@/assets/images/shipping/dc-end.png
"
),
},
type
:
"
booking
"
,
// 类型
/**
* 订舱状态:11、未订舱;12、已订舱
*/
voName
:
"
bookSeaInfo
"
,
// 订舱对象vo
keyName
:
"
bkStatus
"
,
status
:
{
start
:
[
11
],
wait
:
[],
end
:
[
12
],
},
},
type
:
"
subMaterial
"
,
/**
* 提单补料状态:71、未提单补料;72、已提单补料
*/
voName
:
"
ladingBillInfo
"
,
keyName
:
"
blStatus
"
,
status
:
{
start
:
[
71
],
wait
:
[],
end
:
[
72
],
],
[
{
title
:
"
预装
"
,
imgSrc
:
{
start
:
require
(
"
@/assets/images/shipping/yz-start.png
"
),
wait
:
require
(
"
@/assets/images/shipping/yz-wait.png
"
),
end
:
require
(
"
@/assets/images/shipping/yz-end.png
"
),
},
type
:
"
preinstall
"
,
/**
* 预装状态:21、未预装;22、预装审核中;23、预装审核失败;24、预装审核成功
*/
voName
:
"
preInstallInfo
"
,
keyName
:
"
prStatus
"
,
status
:
{
start
:
[
21
],
wait
:
[
22
,
23
],
end
:
[
24
],
},
},
},
],
[
{
title
:
"
驳船
"
,
imgSrc
:
{
start
:
require
(
"
@/assets/images/shipping/bc-start.png
"
),
wait
:
require
(
"
@/assets/images/shipping/bc-wait.png
"
),
end
:
require
(
"
@/assets/images/shipping/bc-end.png
"
),
{
title
:
"
拖车
"
,
imgSrc
:
{
start
:
require
(
"
@/assets/images/shipping/tc-start.png
"
),
wait
:
require
(
"
@/assets/images/shipping/tc-wait.png
"
),
end
:
require
(
"
@/assets/images/shipping/tc-end.png
"
),
},
type
:
"
trailer
"
,
/**
* 拖车状态:31、未派车;32、已派车
*/
voName
:
"
trailerInfo
"
,
keyName
:
"
tlStatus
"
,
status
:
{
start
:
[
31
],
wait
:
[],
end
:
[
32
],
},
},
type
:
"
barge
"
,
/**
* 驳船状态:81、未驳船;82、已驳船
*/
voName
:
"
bargeInfo
"
,
keyName
:
"
bgStatus
"
,
status
:
{
start
:
[
81
]
,
wait
:
[]
,
end
:
[
82
]
,
{
title
:
"
AGENT
"
,
imgSrc
:
{
start
:
require
(
"
@/assets/images/shipping/agent-start.png
"
),
wait
:
require
(
"
@/assets/images/shipping/agent-wait.png
"
)
,
end
:
require
(
"
@/assets/images/shipping/agent-end.png
"
)
,
},
type
:
"
agent
"
,
voName
:
"
agentInfo
"
,
currStatus
:
"
start
"
,
},
},
],
[
{
title
:
"
起运
"
,
imgSrc
:
{
start
:
require
(
"
@/assets/images/shipping/qy-start.png
"
),
wait
:
require
(
"
@/assets/images/shipping/qy-wait.png
"
),
end
:
require
(
"
@/assets/images/shipping/qy-end.png
"
),
],
[
{
title
:
"
装柜
"
,
imgSrc
:
{
start
:
require
(
"
@/assets/images/shipping/zg-start.png
"
),
wait
:
require
(
"
@/assets/images/shipping/zg-wait.png
"
),
end
:
require
(
"
@/assets/images/shipping/zg-end.png
"
),
},
type
:
"
cabinet
"
,
/**
* 装柜状态:41、未装柜;42、装柜中;43、已装柜、待封柜;44、封柜审核中;45、封柜审核失败;46、封柜审核成功
*/
voName
:
"
cabinetInfo
"
,
keyName
:
"
ldStatus
"
,
status
:
{
start
:
[
41
],
wait
:
[
42
,
43
,
44
,
45
],
end
:
[
46
],
},
},
type
:
"
departure
"
,
/**
* 起运状态:91、未起运;92、已起运
*/
voName
:
"
shippingInfo
"
,
keyName
:
"
dtStatus
"
,
status
:
{
start
:
[
91
],
wait
:
[],
end
:
[
92
],
],
[
{
title
:
"
报关
"
,
imgSrc
:
{
start
:
require
(
"
@/assets/images/shipping/bg-start.png
"
),
wait
:
require
(
"
@/assets/images/shipping/bg-wait.png
"
),
end
:
require
(
"
@/assets/images/shipping/bg-end.png
"
),
},
type
:
"
cusDeclaration
"
,
voName
:
"
customsInfo
"
,
/**
*报关状态:51、未报关;52、报关中;53、已报关
*/
keyName
:
"
dcStatus
"
,
status
:
{
start
:
[
51
],
wait
:
[
52
],
end
:
[
53
],
},
},
},
],
[
{
title
:
"
提单Copy
"
,
imgSrc
:
{
start
:
require
(
"
@/assets/images/shipping/tdcopy-start.png
"
),
wait
:
require
(
"
@/assets/images/shipping/tdcopy-wait.png
"
),
end
:
require
(
"
@/assets/images/shipping/tdcopy-end.png
"
),
{
title
:
"
配船
"
,
imgSrc
:
{
start
:
require
(
"
@/assets/images/shipping/pc-start.png
"
),
wait
:
require
(
"
@/assets/images/shipping/pc-wait.png
"
),
end
:
require
(
"
@/assets/images/shipping/pc-end.png
"
),
},
type
:
"
ship
"
,
/**
* 配船状态:61、未配船;62、已配船
*/
voName
:
"
shipConfigInfo
"
,
keyName
:
"
saStatus
"
,
status
:
{
start
:
[
61
],
wait
:
[],
end
:
[
62
],
},
},
type
:
"
blCopy
"
,
/**
* 提单COPY状态:101、未上传;102、已上传
*/
voName
:
"
ladingCopyInfo
"
,
keyName
:
"
cpStatus
"
,
status
:
{
start
:
[
101
],
wait
:
[],
end
:
[
102
],
{
title
:
"
提单补料
"
,
imgSrc
:
{
start
:
require
(
"
@/assets/images/shipping/tdcl-start.png
"
),
wait
:
require
(
"
@/assets/images/shipping/tdcl-wait.png
"
),
end
:
require
(
"
@/assets/images/shipping/tdcl-end.png
"
),
},
type
:
"
subMaterial
"
,
/**
* 提单补料状态:71、未提单补料;72、已提单补料
*/
voName
:
"
ladingBillInfo
"
,
keyName
:
"
blStatus
"
,
status
:
{
start
:
[
71
],
wait
:
[],
end
:
[
72
],
},
},
},
{
type
:
"
clrDocument
"
,
imgSrc
:
{
start
:
require
(
"
@/assets/images/shipping/qg-start.png
"
),
wait
:
require
(
"
@/assets/images/shipping/qg-wait.png
"
),
end
:
require
(
"
@/assets/images/shipping/qg-end.png
"
),
],
[
{
title
:
"
驳船
"
,
imgSrc
:
{
start
:
require
(
"
@/assets/images/shipping/bc-start.png
"
),
wait
:
require
(
"
@/assets/images/shipping/bc-wait.png
"
),
end
:
require
(
"
@/assets/images/shipping/bc-end.png
"
),
},
type
:
"
barge
"
,
/**
* 驳船状态:81、未驳船;82、已驳船
*/
voName
:
"
bargeInfo
"
,
keyName
:
"
bgStatus
"
,
status
:
{
start
:
[
81
],
wait
:
[],
end
:
[
82
],
},
},
title
:
"
清关文件
"
,
/**
* 清关文件状态:111、未清关文件;112、已清关文件
*/
voName
:
"
clearanceDocInfo
"
,
keyName
:
"
cdStatus
"
,
status
:
{
start
:
[
111
],
wait
:
[],
end
:
[
112
],
],
[
{
title
:
"
起运
"
,
imgSrc
:
{
start
:
require
(
"
@/assets/images/shipping/qy-start.png
"
),
wait
:
require
(
"
@/assets/images/shipping/qy-wait.png
"
),
end
:
require
(
"
@/assets/images/shipping/qy-end.png
"
),
},
type
:
"
departure
"
,
/**
* 起运状态:91、未起运;92、已起运
*/
voName
:
"
shippingInfo
"
,
keyName
:
"
dtStatus
"
,
status
:
{
start
:
[
91
],
wait
:
[],
end
:
[
92
],
},
},
},
],
[
{
title
:
"
到港
"
,
imgSrc
:
{
start
:
require
(
"
@/assets/images/shipping/dg-start.png
"
),
wait
:
require
(
"
@/assets/images/shipping/dg-wait.png
"
),
end
:
require
(
"
@/assets/images/shipping/dg-end.png
"
),
],
[
{
title
:
"
提单Copy
"
,
imgSrc
:
{
start
:
require
(
"
@/assets/images/shipping/tdcopy-start.png
"
),
wait
:
require
(
"
@/assets/images/shipping/tdcopy-wait.png
"
),
end
:
require
(
"
@/assets/images/shipping/tdcopy-end.png
"
),
},
type
:
"
blCopy
"
,
/**
* 提单COPY状态:101、未上传;102、已上传
*/
voName
:
"
ladingCopyInfo
"
,
keyName
:
"
cpStatus
"
,
status
:
{
start
:
[
101
],
wait
:
[],
end
:
[
102
],
},
},
type
:
"
arrival
"
,
/**
* 到港状态:121、未到港;112、已到港
*/
voName
:
"
arrivalInfo
"
,
keyName
:
"
apStatus
"
,
status
:
{
start
:
[
121
],
wait
:
[],
end
:
[
122
],
{
type
:
"
clrDocument
"
,
imgSrc
:
{
start
:
require
(
"
@/assets/images/shipping/qg-start.png
"
),
wait
:
require
(
"
@/assets/images/shipping/qg-wait.png
"
),
end
:
require
(
"
@/assets/images/shipping/qg-end.png
"
),
},
title
:
"
清关文件
"
,
/**
* 清关文件状态:111、未清关文件;112、已清关文件
*/
voName
:
"
clearanceDocInfo
"
,
keyName
:
"
cdStatus
"
,
status
:
{
start
:
[
111
],
wait
:
[],
end
:
[
112
],
},
},
}
,
],
[
{
title
:
"
清关
"
,
imgSrc
:
{
start
:
require
(
"
@/assets/images/shipping/qg-star
t.png
"
),
wait
:
require
(
"
@/assets/images/shipping/qg-wait
.png
"
),
end
:
require
(
"
@/assets/images/shipping/qg-end.png
"
)
,
}
,
type
:
"
cusClearance
"
,
/**
* 清关状态:131、未清关;132、已清关
*/
voName
:
"
clearanceInfo
"
,
keyName
:
"
clStatus
"
,
status
:
{
start
:
[
131
],
wait
:
[
],
end
:
[
132
]
,
]
,
[
{
title
:
"
到港
"
,
imgSrc
:
{
start
:
require
(
"
@/assets/images/shipping/dg-start.png
"
),
wait
:
require
(
"
@/assets/images/shipping/dg-wai
t.png
"
),
end
:
require
(
"
@/assets/images/shipping/dg-end
.png
"
),
}
,
type
:
"
arrival
"
,
/**
* 到港状态:121、未到港;112、已到港
*/
voName
:
"
arrivalInfo
"
,
keyName
:
"
apStatus
"
,
status
:
{
start
:
[
121
],
wait
:
[
],
end
:
[
122
],
}
,
},
},
],
[
{
title
:
"
卸柜
"
,
imgSrc
:
{
start
:
require
(
"
@/assets/images/shipping/xg-start.png
"
),
wait
:
require
(
"
@/assets/images/shipping/xg-wait.png
"
),
end
:
require
(
"
@/assets/images/shipping/xg-end.png
"
),
],
[
{
title
:
"
清关
"
,
imgSrc
:
{
start
:
require
(
"
@/assets/images/shipping/qg-start.png
"
),
wait
:
require
(
"
@/assets/images/shipping/qg-wait.png
"
),
end
:
require
(
"
@/assets/images/shipping/qg-end.png
"
),
},
type
:
"
cusClearance
"
,
/**
* 清关状态:131、未清关;132、已清关
*/
voName
:
"
clearanceInfo
"
,
keyName
:
"
clStatus
"
,
status
:
{
start
:
[
131
],
wait
:
[],
end
:
[
132
],
},
},
type
:
"
unloading
"
,
/**
* 卸柜状态:141、未卸柜;142、卸柜中;143、卸柜审核中;144、卸柜审核失败;145、卸柜审核成功;146、已卸柜
*/
voName
:
"
cabinetUnloadInfo
"
,
keyName
:
"
ulStatus
"
,
status
:
{
start
:
[
141
],
wait
:
[
142
,
143
,
144
,
145
],
end
:
[
146
],
],
[
{
title
:
"
卸柜
"
,
imgSrc
:
{
start
:
require
(
"
@/assets/images/shipping/xg-start.png
"
),
wait
:
require
(
"
@/assets/images/shipping/xg-wait.png
"
),
end
:
require
(
"
@/assets/images/shipping/xg-end.png
"
),
},
type
:
"
unloading
"
,
/**
* 卸柜状态:141、未卸柜;142、卸柜中;143、卸柜审核中;144、卸柜审核失败;145、卸柜审核成功;146、已卸柜
*/
voName
:
"
cabinetUnloadInfo
"
,
keyName
:
"
ulStatus
"
,
status
:
{
start
:
[
141
],
wait
:
[
142
,
143
,
144
,
145
],
end
:
[
146
],
},
},
},
],
[
{
title
:
"
结算
"
,
imgSrc
:
{
start
:
require
(
"
@/assets/images/shipping/js-start.png
"
),
wait
:
require
(
"
@/assets/images/shipping/js-wait.png
"
),
end
:
require
(
"
@/assets/images/shipping/js-end.png
"
),
],
[
{
title
:
"
结算
"
,
imgSrc
:
{
start
:
require
(
"
@/assets/images/shipping/js-start.png
"
),
wait
:
require
(
"
@/assets/images/shipping/js-wait.png
"
),
end
:
require
(
"
@/assets/images/shipping/js-end.png
"
),
},
type
:
"
settlement
"
,
/**
* 结算状态:151、未结算;152、结算中;153、已结算
*/
voName
:
"
settlementInfo
"
,
keyName
:
"
slStatus
"
,
status
:
{
start
:
[
151
],
wait
:
[
152
],
end
:
[
153
],
},
},
type
:
"
settlement
"
,
/**
* 结算状态:151、未结算;152、结算中;153、已结算
*/
voName
:
"
settlementInfo
"
,
keyName
:
"
slStatus
"
,
status
:
{
start
:
[
151
],
wait
:
[
152
],
end
:
[
153
],
},
},
],
];
],
];
};
const
constantDict
=
{
// 配船状态
...
...
@@ -444,15 +446,26 @@ function formatNumberString(obj, keys) {
return
obj
;
}
function
formatDateStr
(
obj
,
keys
)
{
function
formatDateStr
(
obj
,
keys
,
format
=
"
YYYY-MM-DD
"
)
{
for
(
const
[
key
,
value
]
of
Object
.
entries
(
obj
))
{
if
(
keys
.
includes
(
key
)
&&
dayjs
(
value
).
isValid
())
{
obj
[
key
]
=
dayjs
(
value
).
format
(
"
YYYY-MM-DD
"
);
obj
[
key
]
=
dayjs
(
value
).
format
(
format
);
}
}
return
obj
;
}
export
const
fileTypes
=
[
"
doc
"
,
"
xls
"
,
"
ppt
"
,
"
txt
"
,
"
pdf
"
,
"
png
"
,
"
jpg
"
,
"
jpeg
"
,
];
export
{
statusName
,
seaBaseData
,
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment