修改bug

master
sunzehua 8 months ago
parent 43fa56b9a9
commit 931271d2e5

12
.env

@ -1,14 +1,14 @@
NODE_ENV=production
VUE_APP_PREVIEW=true
VUE_APP_TYPE = 'customer'
# VUE_APP_TYPE = 'hechuan'
# VUE_APP_TYPE = 'customer'
VUE_APP_TYPE = 'hechuan'
# VUE_APP_TYPE = 'yunyingduan'
# VUE_APP_TYPE = 'gangjie'
# 打包部署的三个端 客户端customer 和川端hechuan 运营端djy
# 和川大简云正式
# VUE_APP_API_BASE_URL=http://47.104.85.216:12345/api
# VUE_APP_SOCKET_BASE_URL=http://47.104.85.216:12345
VUE_APP_API_BASE_URL=http://47.104.85.216:12345/api
VUE_APP_SOCKET_BASE_URL=http://47.104.85.216:12345
# 和川大简云测试
# VUE_APP_API_BASE_URL=http://60.209.125.238:35100
@ -27,8 +27,8 @@ VUE_APP_TYPE = 'customer'
# VUE_APP_SOCKET_BASE_URL=http://118.190.144.189:5001
# 客户端正式
VUE_APP_API_BASE_URL=http://118.190.144.189:6001
VUE_APP_SOCKET_BASE_URL=http://118.190.144.189:6001
# VUE_APP_API_BASE_URL=http://118.190.144.189:6001
# VUE_APP_SOCKET_BASE_URL=http://118.190.144.189:6001
# 运营端正式
# VUE_APP_API_BASE_URL=http://118.190.144.189:6002

@ -2,8 +2,8 @@ NODE_ENV=development
VUE_APP_PREVIEW=true
# VUE_APP_TYPE = 'customer'
# VUE_APP_TYPE = 'hechuan'
VUE_APP_TYPE = 'yunyingduan'
# VUE_APP_TYPE = 'gangjie'
# VUE_APP_TYPE = 'yunyingduan'
VUE_APP_TYPE = 'gangjie'
# 打包部署的三个端 客户端customer 和川端hechuan 运营端yunyingduan
# 和川大简云正式
@ -23,12 +23,12 @@ VUE_APP_TYPE = 'yunyingduan'
# VUE_APP_SOCKET_BASE_URL=http://60.209.125.238:30814
# 港捷
# VUE_APP_API_BASE_URL=http://118.190.144.189:5001
# VUE_APP_SOCKET_BASE_URL=http://118.190.144.189:5001
VUE_APP_API_BASE_URL=http://118.190.144.189:5001
VUE_APP_SOCKET_BASE_URL=http://118.190.144.189:5001
# 运营端正式
VUE_APP_API_BASE_URL=http://118.190.144.189:6002
VUE_APP_SOCKET_BASE_URL=http://118.190.144.189:6002
# VUE_APP_API_BASE_URL=http://118.190.144.189:6002
# VUE_APP_SOCKET_BASE_URL=http://118.190.144.189:6002
# 客户端正式
# VUE_APP_API_BASE_URL=http://118.190.144.189:6001

@ -470,3 +470,10 @@ export function GetVGMMissingInfoByTaskId(parameter) {
})
}
export function CutDateGetInfoByTaskId(parameter) {
return axios({
url: '/TaskManageCutDate/GetInfoByTaskId',
method: 'get',
params: parameter
})
}

@ -0,0 +1,85 @@
export const tableSort = {
data() {
return {
message: 'Hello from Mixin!'
}
},
methods: {
getConfigStart() {
const arr = localStorage.getItem('vesselinfoSetting') ? JSON.parse(localStorage.getItem('vesselinfoSetting')) : []
if (arr.length === 0) {
this.columns = JSON.parse(JSON.stringify(this.columnsAll))
const data = [
{
type: 'vesselinfo_list_column',
configJson: JSON.stringify(this.columns)
},
{
type: 'vesselinfo_page',
configJson: JSON.stringify({ pageSize: 10 })
},
{
type: 'vesselinfo_sort',
configJson: JSON.stringify({ sortField: 'etd', descSort: true })
}
]
localStorage.setItem('vesselinfoSetting', JSON.stringify(data))
this.FnGetData()
} else {
const $data = {}
arr.map((item, index) => {
switch (item.type) {
case 'vesselinfo_list_column':
this.$set($data, 'vesselinfo_list_column', item)
break
case 'vesselinfo_page':
this.$set($data, 'vesselinfo_page', item)
break
case 'vesselinfo_sort':
this.$set($data, 'vesselinfo_sort', item)
break
}
})
console.log(JSON.parse($data.vesselinfo_list_column.configJson))
if (Object.keys($data).includes('vesselinfo_list_column')) {
this.columns = JSON.parse($data.vesselinfo_list_column.configJson)
} else {
arr.push({
type: 'vesselinfo_list_column',
configJson: JSON.stringify(this.columns)
})
localStorage.setItem('vesselinfoSetting', JSON.stringify(arr))
}
if (Object.keys($data).includes('vesselinfo_page')) {
this.queryParam.PageSize = JSON.parse($data.vesselinfo_page.configJson).pageSize
} else {
arr.push({
type: 'vesselinfo_page',
configJson: JSON.stringify({ pageSize: 10 })
})
localStorage.setItem('vesselinfoSetting', JSON.stringify(arr))
}
if (Object.keys($data).includes('vesselinfo_sort')) {
const data = $data.vesselinfo_sort.configJson ? JSON.parse($data.vesselinfo_sort.configJson) : null
if (data) {
setTimeout(() => {
this.$refs.table.sort(data.sortField, data.descSort ? 'desc' : 'asc')
}, 200);
this.queryParam.sortField = data.sortField
this.queryParam.descSort = data.descSort
}
} else {
arr.push({
type: 'vesselinfo_sort',
configJson: ''
})
localStorage.setItem('vesselinfoSetting', JSON.stringify(arr))
}
setTimeout(() => {
this.FnGetData()
}, 200);
}
},
}
}

@ -68,6 +68,7 @@ const constantRouterComponents = {
BcFileDetail: () => import('@/views/main/Taskmanage/BcFileDetail'),
BCModify: () => import('@/views/main/Taskmanage/BCModify/index'),
vgmDetail: () => import('@/views/main/Taskmanage/vgmDetail/index'),
cutTime: () => import('@/views/main/Taskmanage/cutTime/index'),
cancellation: () => import('@/views/main/Taskmanage/cancellation/index'),
rollingNomination: () => import('@/views/main/Taskmanage/rollingNomination/index'),
BcEditing: () => import('@/views/main/Taskmanage/BcFileDetail/Editing'),
@ -231,6 +232,17 @@ const userAccount = [
},
component: 'vgmDetail'
},
{
name: 'cutTime',
path: '/commontaskmanage/cutTime',
pid: 0,
id: 183110,
meta: {
title: '截止时间变更',
show: false
},
component: 'cutTime'
},
{
name: 'Cancellation',
path: '/commontaskmanage/Cancellation',

@ -270,6 +270,7 @@ const user = {
}
getVesselInfoService(query).then(res => {
if (res.success) {
res.data = [...new Map(res.data.map(item => [item.vessel, item])).values()]
localStorage.setItem('vesselInfo', JSON.stringify(res.data))
}
})

@ -2940,6 +2940,7 @@ export default {
if (res.success) {
this.$message.success('删除成功')
const _data = this.gridOptions.data.filter((item) => !arr.includes(item.id))
this.gridOptions.data = _data
this.$refs.xGrid.reloadData(_data).then(() => {
this.gridOptions.pagerConfig.total = this.gridOptions.pagerConfig.total - arr.length
})

@ -3373,6 +3373,7 @@ export default {
if (res.success) {
this.$message.success('删除成功')
const _data = this.gridOptions.data.filter(item => !arr.includes(item.id))
this.gridOptions.data = _data
this.$refs.xGrid.reloadData(_data).then(() => {
this.gridOptions.pagerConfig.total = this.gridOptions.pagerConfig.total - arr.length
})

@ -1185,9 +1185,6 @@ export default {
})
},
getFilter() {
// ListAgentByCarrier({ carrierCode: this.bookingDetails.carrierid }).then(res => {
// this.$store.commit('SET_AgentFilter', res.data)
// })
listYardBwCarrier({ carrierCode: this.bookingDetails.carrierid }).then(res => {
this.$store.commit('SET_YardFilter', res.data)
})
@ -1349,7 +1346,7 @@ export default {
}
const $BookingEDIExt = { ...JSON.parse(JSON.stringify(bookingEDIExt)), ...res.data.bookingEDIExt }
this.$set(this, 'bookingDetails', { ...this.bookingDetails, ...newData, ...{ bookingEDIExt: $BookingEDIExt } })
this.getVGM()
// this.getVGM()
this.oldBookingDetails = JSON.parse(JSON.stringify(this.bookingDetails))
this.sendMessageFY()
if (this.$route.query.isCopy && this.$route.query.copyId) {

@ -622,23 +622,6 @@ export default {
</span>
)
}
},
{
field: 'vgm',
key: 'vgm',
title: 'VGM',
align: 'left',
width: 50,
edit: false,
renderBodyCell: ({ row, column, rowIndex }, h) => {
return (
<div>
<span title={'回执成功 ' + row.vgmWeight + ' ' + row.vgmWeightUnit + ' ' + row.vgmWeightMethod} v-show={row.vgm && !row.isMissing} style="color:green;cursor:pointer;font-weight:bold">VGM</span>
<span title={'回执未成功' + row.submissionDeadLine } v-show={row.vgm && row.isMissing} style="color:red;cursor:pointer;font-weight:bold">VGM</span>
<span v-show={!row.vgm}>VGM</span>
</div>
)
}
}
],
modelColumns: [

@ -2080,12 +2080,14 @@ export default {
if ($data.portdischargeid && !isHBL) {
GetPortlist({ KeyWord: $data.portdischargeid }).then((res) => {
if (res.data) {
if (res.data[0].countryCode && res.data[0].country) {
$data.consigneecountry = res.data[0].countryCode
$data.consigneecountryName = `${res.data[0].countryCode}/${res.data[0].country}`
$data.notifypartycountry = res.data[0].countryCode
$data.notifypartycountryName = `${res.data[0].countryCode}/${res.data[0].country}`
res.data.forEach((item, index) => {
if (item.countryCode && item.country) {
$data.consigneecountry = item.countryCode
$data.consigneecountryName = `${item.countryCode}/${item.country}`
$data.notifypartycountry = item.countryCode
$data.notifypartycountryName = `${item.countryCode}/${item.country}`
}
})
}
})
}

@ -3372,6 +3372,7 @@ export default {
if (res.success) {
this.$message.success('删除成功')
const _data = this.gridOptions.data.filter(item => !arr.includes(item.id))
this.gridOptions.data = _data
this.$refs.xGrid.reloadData(_data).then(() => {
this.gridOptions.pagerConfig.total = this.gridOptions.pagerConfig.total - arr.length
})

@ -2705,6 +2705,7 @@ export default {
if (res.success) {
this.$message.success('删除成功')
const _data = this.gridOptions.data.filter((item) => !arr.includes(item.id))
this.gridOptions.data = _data
this.$refs.xGrid.reloadData(_data).then(() => {
this.gridOptions.pagerConfig.total = this.gridOptions.pagerConfig.total - arr.length
})

@ -1495,6 +1495,9 @@ export default {
} else if (data.taskType === 'VGM_MISSING') {
// ROLLING_NOMINATION
this.$router.push({ path: '/commontaskmanage/vgmDetail', query: { taskPKId: data.pkId, type: 'VGM_MISSING' } })
} else if (data.taskType === 'CUT_MODIFY') {
// ROLLING_NOMINATION
this.$router.push({ path: '/commontaskmanage/cutTime', query: { taskPKId: data.pkId } })
} else {
//
this.$router.push({ path: '/commontaskmanage/BookingDetails', query: { taskPKId: data.pkId } })

@ -0,0 +1,648 @@
<template>
<div class="Main">
<a-spin :spinning="spinning">
<div class="LeftHead">
<p>截止时间变更通知
{{ carrier }} </p>
<p>时间{{ time }}</p>
</div>
<a-table :pagination="false" :columns="columns" :data-source="tableList">
<span slot="bookingId" slot-scope="text, record">
<div v-if="record.bookingId > 0" class="point"></div>
<div v-if="record.bookingId == 0">-</div>
</span>
<span slot="vessel" slot-scope="text, record">
{{ record.vessel }} / {{ record.voyNo }}
</span>
</a-table>
<a-row style="margin-top: 20px;" type="flex" justify="end" :gutter="16">
<a-col>
<a-button type="primary" @click="OpenUser">
转移任务
</a-button>
</a-col>
<a-col>
<a-button type="primary" @click="FnCompleteTask">
完成任务
</a-button>
</a-col>
<a-col>
<a-button type="danger" @click="FnCancelTask">
取消任务
</a-button>
</a-col>
<a-col>
<a-button type="primary" @click="handleSendMail">
发送邮件
</a-button>
</a-col>
</a-row>
</a-spin>
<a-modal v-model="visible" title="生成方式选择" @ok="handleOk" width="40%">
<a-radio-group default-value="GEN_BOOKING_SLOT" v-model="CreateData.generateMethod">
<a-radio value="GEN_BOOKING_SLOT">
直接生成舱位和订舱
</a-radio>
<a-radio value="GEN_BOOKING">
只生成订舱
</a-radio>
<a-radio value="GEN_SLOT">
只生成舱位
</a-radio>
<a-radio value="GEN_EXIST_BOOKING">
匹配已有订舱
</a-radio>
</a-radio-group>
<p class="modaltitle">订舱录入</p>
<a-form class="Editing">
<a-row>
<a-col :span="16">
<a-form-item label="委托单位:" :label-col="formItemLayout.labelCol3" :wrapper-col="formItemLayout.wrapperCol3">
<a-select
show-search
v-model="CreateData.customerId"
:default-active-first-option="false"
:show-arrow="false"
:filter-option="false"
:not-found-content="null"
@search="SearchCustomer"
@change="ChangeCustomer">
<a-select-option v-for="(item, index) in CustomerList" :key="index" :value="item.id">
{{ item.shortName }}
</a-select-option>
</a-select>
</a-form-item>
</a-col>
<a-col :span="8">
<a-form-item label="联系人:" :label-col="formItemLayout.labelCol2" :wrapper-col="formItemLayout.wrapperCol2">
<a-select
show-search
v-model="CreateData.customerContactId"
:default-active-first-option="false"
:show-arrow="false"
:filter-option="false"
:not-found-content="null"
@search="SearchUser"
@change="ChangeCustomerList">
<a-select-option v-for="item in customerByList" :key="item.id" :value="item.id">
{{ item.name }}
</a-select-option>
</a-select>
</a-form-item>
</a-col>
</a-row>
<a-row>
<a-col :span="8">
<a-form-item label="销售:" :label-col="formItemLayout.labelCol2" :wrapper-col="formItemLayout.wrapperCol2">
<a-select
show-search
v-model="CreateData.saleId"
:default-active-first-option="false"
:show-arrow="false"
:filter-option="false"
:not-found-content="null"
@search="SearchUser"
@change="e => {
ChangeUser(e, 'saleName')
}
">
<a-select-option v-for="item in UserList" :key="item.id" :value="item.id">
{{ item.name }}
</a-select-option>
</a-select>
</a-form-item>
</a-col>
<a-col :span="8">
<a-form-item label="操作:" :label-col="formItemLayout.labelCol2" :wrapper-col="formItemLayout.wrapperCol2">
<a-select
show-search
v-model="CreateData.opId"
:default-active-first-option="false"
:show-arrow="false"
:filter-option="false"
:not-found-content="null"
@search="SearchUser"
@change="e => {
ChangeUser(e, 'opName')
}
">
<a-select-option v-for="item in UserList" :key="item.id" :value="item.id">
{{ item.name }}
</a-select-option>
</a-select>
</a-form-item>
</a-col>
<a-col :span="8">
<a-form-item label="单证:" :label-col="formItemLayout.labelCol2" :wrapper-col="formItemLayout.wrapperCol2">
<a-select
show-search
v-model="CreateData.docId"
:default-active-first-option="false"
:show-arrow="false"
:filter-option="false"
:not-found-content="null"
@search="SearchUser"
@change="e => {
ChangeUser(e, 'docName')
}
">
<a-select-option v-for="item in UserList" :key="item.id" :value="item.id">
{{ item.name }}
</a-select-option>
</a-select>
</a-form-item>
</a-col>
</a-row>
<a-row>
<a-col :span="8">
<a-form-item label="航线操作:" :label-col="formItemLayout.labelCol2" :wrapper-col="formItemLayout.wrapperCol2">
<a-select
show-search
v-model="CreateData.routeID"
:default-active-first-option="false"
:show-arrow="false"
:filter-option="false"
:not-found-content="null"
@search="SearchUser"
@change="e => {
ChangeUser(e, 'route')
}
">
<a-select-option v-for="item in UserList" :key="item.id" :value="item.id">
{{ item.name }}
</a-select-option>
</a-select>
</a-form-item>
</a-col>
<a-col :span="8">
<a-form-item label="航线管理:" :label-col="formItemLayout.labelCol2" :wrapper-col="formItemLayout.wrapperCol2">
<a-select
show-search
v-model="CreateData.lineManageID"
:default-active-first-option="false"
:show-arrow="false"
:filter-option="false"
:not-found-content="null"
@search="SearchUser"
@change="e => {
ChangeUser(e, 'lineManage')
}
">
<a-select-option v-for="item in UserList" :key="item.id" :value="item.id">
{{ item.name }}
</a-select-option>
</a-select>
</a-form-item>
</a-col>
</a-row>
<a-row>
<a-col :span="16">
<a-form-item label="操作备注:" :label-col="formItemLayout.labelCol3" :wrapper-col="formItemLayout.wrapperCol3">
<a-input v-model="CreateData.czRemark" />
</a-form-item>
</a-col>
</a-row>
<a-row>
<a-col :span="16">
<a-form-item label="申请箱使:" :label-col="formItemLayout.labelCol3" :wrapper-col="formItemLayout.wrapperCol3">
<a-input v-model="CreateData.shenQingXiangShi" />
</a-form-item>
</a-col>
</a-row>
<a-row>
<a-col :span="16">
<a-form-item label="服务项目:" :label-col="formItemLayout.labelCol3" :wrapper-col="formItemLayout.wrapperCol3">
<div class="content">
<div
class="items"
v-for="(serive, sindex) in bookingServiceItem"
:key="sindex"
:class="{ active: serive.isYield }"
@click="saveService(serive)">
{{ serive.serviceProjectName }}
</div>
</div>
</a-form-item>
</a-col>
</a-row>
</a-form>
</a-modal>
<a-modal v-model="UserVisible" title="转移任务" @ok="UserhandleOk">
<a-form>
<a-form-item label="接收人:" :label-col="formItemLayout.labelCol1" :wrapper-col="formItemLayout.wrapperCol1">
<a-select
show-search
v-model="UserId"
:default-active-first-option="false"
:show-arrow="false"
:filter-option="false"
:not-found-content="null"
@search="SearchUser">
<a-select-option v-for="item in UserList" :key="item.id" :value="item.id">
{{ item.name }}
</a-select-option>
</a-select>
</a-form-item>
</a-form>
</a-modal>
<a-modal v-model="compareResultFlag" :footer="null">
<div v-for="(item, index) in compareResultList" :key="index">
<span> {{ item.fieldName }}{{ item.reqVal }}</span>
<span style="margin: 0 10px;">变更为</span>
<span v-html="item.mergeHtml"></span>
</div>
</a-modal>
</div>
</template>
<script>
import {
CutDateGetInfoByTaskId,
TransferTask,
CreateBookingAndSlot,
TaskManageBCSendEmai1,
CompleteTask,
CancelTaskBC
} from '@/api/modular/main/TaskmanageList'
import { mapGetters } from 'vuex'
import { DjyCustomerSuggest, GetSysUserPage, DjyCustomerContacts } from '@/api/modular/main/BookingLedger'
export default {
data() {
return {
CustomerList: [],
CreateData: {},
UserId: '',
value: '',
type: '',
customerByList: [],
columns: [
{
dataIndex: 'mblNo',
title: '提单号',
key: 'mblNo',
align: 'center'
},
{
title: '船名/航次',
dataIndex: 'vessel',
key: 'vessel',
align: 'center',
scopedSlots: { customRender: 'vessel' }
},
{
title: '样单截止时间',
dataIndex: 'siCutDateTxt',
key: 'siCutDateTxt',
align: 'center'
},
{
title: '开港时间',
dataIndex: 'cyOpenDateTxt',
key: 'cyOpenDateTxt',
align: 'center'
},
{
title: '截港时间',
dataIndex: 'cyCutoffTimeTxt',
key: 'cyCutoffTimeTxt',
align: 'center'
},
{
title: '舱单-入港清单截止时间',
dataIndex: 'manifestCutDateTxt',
key: 'manifestCutDateTxt',
align: 'center'
},
{
title: 'MDGF提交截止时间',
dataIndex: 'mdgfCutDateTxt',
key: 'mdgfCutDateTxt',
align: 'center'
},
{
title: 'VGM截止时间',
dataIndex: 'vgmCutoffTimeTxt',
key: 'vgmCutoffTimeTxt',
align: 'center'
},
{
title: '海关放行截止时间',
dataIndex: 'closingDateTxt',
key: 'closingDateTxt',
align: 'center'
},
{
title: '已发通知',
dataIndex: 'bookingId',
key: 'bookingId',
align: 'center',
scopedSlots: { customRender: 'bookingId' }
},
{
title: '订舱',
dataIndex: 'bookingId1',
key: 'bookingId1',
align: 'center'
}
],
compareResultFlag: false,
formItemLayout: {
labelCol1: { span: 6 },
wrapperCol1: { span: 18 },
labelCol2: { span: 8 },
wrapperCol2: { span: 16 },
labelCol3: { span: 4 },
wrapperCol3: { span: 20 },
labelCol4: { span: 8 },
wrapperCol4: { span: 16 },
labelCol5: { span: 14 },
wrapperCol5: { span: 10 },
labelCol6: { span: 8 },
wrapperCol6: { span: 16 }
},
visible: false,
UserVisible: false,
isPdf: '',
compareResultList: [],
href: '',
carrier: '',
time: '',
spinning: false,
tableList: [],
bookingServiceItem: [],
pdfUrl: '',
UserList: [],
fileCategory: 'BC_MODIFY'
}
},
computed: {
...mapGetters([
'userInfo'
])
},
watch: {
'$route': {
immediate: true,
handler(newValue, oldValue) {
if (newValue.path === '/commontaskmanage/cutTime') {
this.getList()
}
}
}
},
mounted() {
this.getList()
},
methods: {
SearchCustomer(e) {
DjyCustomerSuggest({ keyword: e, type: 'consignor' }).then(res => {
this.CustomerList = res.data.rows
})
},
OpenUser() {
this.UserId = ''
this.UserVisible = true
},
ChangeCustomer(e) {
this.CustomerList.forEach(item => {
if (item.id == e) {
this.CreateData.customerName = item.shortName
}
})
DjyCustomerContacts({ customerId: e }).then(res => {
if (res.success) {
this.customerByList = res.data
} else {
this.$message.error(res.message)
}
})
},
ChangeCustomerList(e) {
this.customerByList.forEach(item => {
if (item.id == e) {
this.CreateData.customerContactName = item.name
}
})
},
handleSendMail() {
TaskManageBCSendEmai1({ taskPKId: this.$route.query.taskPKId }).then(res => {
if (res.data.succ) {
this.$message.success(res.data.msg)
} else {
this.$message.error(res.data.msg)
}
})
},
FnCancelTask() {
const ApiData = {
taskPKId: this.$route.query.taskPKId
}
CancelTaskBC(ApiData).then(res => {
if (res.data.succ) {
this.$message.success(res.data.msg)
} else {
this.$message.error(res.data.msg)
}
})
},
SearchUser(e) {
GetSysUserPage({ name: e }).then(res => {
this.UserList = res.data
})
},
ChangeUser(e, Tname) {
this.UserList.forEach(item => {
if (item.id == e) {
console.log(e)
this.CreateData[Tname] = item.name
}
})
},
saveService(data) {
data.isYield = !data.isYield
},
FnCompleteTask() {
const ApiData = [this.$route.query.taskPKId]
CompleteTask(ApiData).then(res => {
if (res.data.succ) {
this.$message.success(res.data.msg)
} else {
this.$message.error(res.data.msg)
}
})
},
handleSendMail() {
TaskManageBCSendEmai1({ taskPKId: this.$route.query.taskPKId }).then(res => {
if (res.data.succ) {
this.$message.success(res.data.msg)
} else {
this.$message.error(res.data.msg)
}
})
},
getList() {
this.spinning = true
const ApiData = {
taskPKId: this.$route.query.taskPKId
}
CutDateGetInfoByTaskId(ApiData).then(res => {
if (res.success) {
this.tableList = res.data
if (res.data.length > 0) {
this.time = res.data[0].noticeDate
this.carrier = res.data[0].carrier
}
this.$forceUpdate()
} else {
this.$message.error(res.success)
}
this.spinning = false
})
},
handleOk() {
const projectList = []
this.bookingServiceItem.forEach(item => {
if (item.isYield) {
projectList.push(item.serviceProjectCode)
}
})
const ApiData = {
bcTaskId: this.$route.query.taskPKId,
// bcPkId: '',
// slotId: '',
projectList,
...this.CreateData
}
console.log(ApiData)
CreateBookingAndSlot(ApiData).then(res => {
if (res.data.succ) {
this.visible = false
this.$message.success(res.data.msg)
} else {
this.$message.error(res.data.msg)
}
})
},
UserhandleOk() {
const ApiData = {
taskPKId: this.$route.query.taskPKId,
userId: this.UserId
}
TransferTask(ApiData).then(res => {
if (res.data.succ) {
this.UserVisible = false
this.$message.success(res.data.msg)
} else {
this.$message.error(res.data.msg)
}
})
this.UserVisible = false
}
}
}
</script>
<style lang="less" scoped>
@import url('../../BookingLedger/detail/style/rightContent.less');
.point {
height: 10px;
width: 10px;
border-radius: 50%;
margin: 0 auto;
background: green;
}
.modaltitle {
border-bottom: 1px solid #000;
width: 5rem;
padding: 0.2rem 0.5rem;
margin-top: 1rem;
}
.icon-chuanfanguanli-chuanfanshenqing {
color: '#02A7F0';
}
.Main {
width: 100%;
background: white;
height: 100vh;
padding: 0 20px;
.LeftHead {
width: 100%;
display: flex;
justify-content: space-between;
padding: 8px;
margin-bottom: 16px;
border-bottom: 1px solid #000;
p {
margin: 0;
&:nth-child(1) {
font-weight: bold;
}
}
}
.title {
margin-top: 10px;
}
.CsSee {
color: #02a7f3;
text-decoration: underline;
cursor: pointer;
}
.LeftBottomBox {
.unitBox {
width: 100%;
display: flex;
.unit {
text-align: center;
line-height: 30px;
height: 30px;
// background: rgba(255, 255, 128, 1);
// border: 1px solid rgba(170, 10, 0, 1);
border-radius: 3px;
box-shadow: none;
// font-weight: bold;
// color: #62a10398;
margin: 0.5rem;
padding: 0 0.3rem;
.iconfont {
margin-right: 0.3rem;
}
}
}
}
.rightBox {
// margin-top: 37px;
.rightBoxRadio {
margin-bottom: 15px;
}
}
/deep/.Editing {
.ant-form-item {
margin: 0 !important;
line-height: 1.5 !important;
.ant-form-item-label {
line-height: 1.5 !important;
}
.ant-form-item-control {
line-height: 1.5 !important;
}
}
}
}
</style>

@ -1544,6 +1544,7 @@ export default {
if (res.success) {
this.$message.success('恢复成功')
const _data = this.gridOptions.data.filter(item => !arr.includes(item.id))
this.gridOptions.data = _data
this.$refs.xGrid.reloadData(_data).then(() => {
this.gridOptions.pagerConfig.total = this.gridOptions.pagerConfig.total - arr.length
})

@ -129,9 +129,10 @@
<div>
<a-button type="primary" @click="FnGetData"></a-button>
<a-button style="margin-left: 8px" @click="init"></a-button>
<tableSort style="margin-left: 10px;" @columnChange="handleColumnChange" :columns="columns" :columnsAll="columnsAll"></tableSort>
</div>
</div>
<vxe-table
<!-- <vxe-table
:data="loadData"
stripe
resizable
@ -142,48 +143,45 @@
<vxe-column type="checkbox" width="60"></vxe-column>
<vxe-column
v-for="item in columns"
:key="`${item.dataIndex}3`"
:field="item.dataIndex"
:key="`${item.field}3`"
:field="item.field"
:min-width="item.width"
:title="item.title"
:fixed="item.fixed"
:align="item.align">
<template #default="{ row }">
<div v-if="item.dataIndex == 'vessel'">
<div v-if="item.field == 'vessel'">
<span>{{ row.vessel }} / {{ row.voyno }}</span>
</div>
<div v-else-if="item.dataIndex == 'isReefer'">
<div v-else-if="item.field == 'isReefer'">
<span v-if="row.isReefer"></span>
<span v-else></span>
</div>
<div v-else-if="item.dataIndex == 'isJob'">
<div v-else-if="item.field == 'isJob'">
<span v-if="row.isJob"></span>
<span v-else></span>
</div>
<div v-else-if="item.dataIndex == 'isbookingPartOwnPrice'">
<div v-else-if="item.field == 'isbookingPartOwnPrice'">
<span v-if="row.isbookingPartOwnPrice"></span>
<span v-else></span>
</div>
<div v-else-if="item.dataIndex == 'isImportReturned'">
<div v-else-if="item.field == 'isImportReturned'">
<span v-if="row.isImportReturned"></span>
<span v-else></span>
</div>
<div v-else-if="item.dataIndex == 'isShipperOwned'">
<span v-if="row.isShipperOwned"></span>
<span v-else></span>
<div v-else-if="item.field == 'isRecvBC'">
<a-icon type="bulb" theme="filled" style="color: green;font-size: 16px;" :title="row.lstRecvBCDate" v-if="row.isRecvBC" />
</div>
<div v-else-if="item.dataIndex == 'isRecvBC'">
<span :title="row.lstRecvBCDate" v-if="row.isRecvBC" style="display: inline-block;width:15px;height: 15px;border-radius: 50%;background: green;cursor: pointer;"></span>
<span v-else style="display: inline-block;width:15px;height: 15px;border-radius: 50%;background: gray"></span>
<div v-else-if="item.field == 'isRecvBKCancel'">
<a-icon type="bulb" theme="filled" style="color: red;font-size: 16px;" :title="row.lstRecvBCDate" v-if="row.isRecvBKCancel" />
</div>
<div v-else-if="item.dataIndex == 'isRecvBKCancel'">
<span :title="row.lstRecvBKCancelDate" v-if="row.isRecvBKCancel" style="display: inline-block;width:15px;height: 15px;border-radius: 50%;background: green;cursor: pointer;"></span>
<span v-else style="display: inline-block;width:15px;height: 15px;border-radius: 50%;background: gray"></span>
<div v-else-if="item.field == 'isShipperOwned'">
<a-icon v-if="row.isShipperOwned" type="check-circle" style="color: green;font-size: 16px;" theme="filled" />
</div>
<span v-else>{{ row[item.dataIndex] }}</span>
<span v-else>{{ row[item.field] }}</span>
</template>
</vxe-column>
<vxe-column title="操作" fixed="right" width="120" align="center">
</vxe-column>
<vxe-column title="操作" fixed="right" width="120" align="center">
<template #default="{ row }">
<vxe-button type="text" @click="handleEdit(row.id)">
<a-icon type="form" :style="{ color: '#13c2c2' }" />
@ -201,27 +199,58 @@
</vxe-button>
</a-popconfirm>
</template>
</vxe-column>
</vxe-table>
<vxe-pager
</vxe-column>
</vxe-table>
<vxe-pager :loading="loading" :current-page="queryParam.pageNo" :page-size="queryParam.pageSize"
:total="queryParam.totalResult" :layouts="['PrevPage', 'JumpNumber', 'NextPage', 'FullJump', 'Sizes', 'Total']"
@page-change="handlePageChange">
</vxe-pager> -->
<vxe-grid
:data="loadData"
stripe
resizable
round
ref="table"
:columns="columns"
:loading="loading"
:current-page="queryParam.pageNo"
:page-size="queryParam.pageSize"
:total="queryParam.totalResult"
@cell-dblclick="handledbclick"
@sort-change="tableSortChange"
@resizable-change="resizableChange"
height="600px"
empty-text="没有更多数据了!">
<template #caozuo="{ row }">
<vxe-button style="padding:0;margin:0;margin-right:5px;" type="text" @click="$refs.editForm.edit(row)">
<a-icon type="form" :style="{ color: '#13c2c2' }" />
</vxe-button>
<a-popconfirm title="是否确认删除?" ok-text="" cancel-text="" @confirm="confirm(row)">
<vxe-button style="padding:0;margin:0;" type="text">
<a-icon type="delete" :style="{ color: '#13c2c2' }" />
</vxe-button>
</a-popconfirm>
</template>
<template #pager>
<vxe-pager
:current-page="queryParam.PageNo"
:page-size="queryParam.PageSize"
:total="queryParam.totalCount"
:layouts="['PrevPage', 'JumpNumber', 'NextPage', 'FullJump', 'Sizes', 'Total']"
@page-change="handlePageChange">
</vxe-pager>
</template>
</vxe-grid>
</a-card>
<mskBookingOrder @handleSuccess="handleSuccess" ref="mskBookingOrder"></mskBookingOrder>
</div>
</template>
<script>
import { mskGetPage, mskDelete } from '@/api/modular/main/BookingLedger'
import columnSetting from '@/components/tableColumnSetting'
import mskBookingOrder from '@/components/mskBookingOrder'
export default {
<script>
import { mskGetPage, mskDelete } from '@/api/modular/main/BookingLedger'
import columnSetting from '@/components/tableColumnSetting'
import tableSort from '@/components/tableSort'
import mskBookingOrder from '@/components/mskBookingOrder'
import { DjyUserConfigAdd } from '@/api/modular/main/DjyUserConfig'
export default {
components: {
columnSetting, mskBookingOrder
columnSetting, mskBookingOrder,tableSort
},
data() {
return {
@ -255,193 +284,171 @@
title: '订舱号',
align: 'center',
width: '150',
dataIndex: 'bookingReference'
},
{
title: '合约号',
align: 'center',
width: '200',
dataIndex: 'priceReference'
field: 'bookingReference'
},
{
title: '预计离港日期',
title: '起运港',
align: 'center',
width: '130',
dataIndex: 'earliestDepartureDate'
width: '100',
field: 'placeReceiptCity'
},
{
title: '始发地',
title: '目的港',
align: 'center',
width: '100',
dataIndex: 'placeReceiptCity'
field: 'placeDeliveryCity'
},
{
title: '目的地',
title: '箱型箱量',
align: 'center',
width: '100',
dataIndex: 'placeDeliveryCity'
width: '150',
field: 'ctnStat'
},
{
title: '船名/航次',
align: 'center',
width: '100',
dataIndex: 'vessel'
field: 'vessel'
},
{
title: 'ETD',
align: 'center',
width: '100',
dataIndex: 'etd'
field: 'etd'
},
{
title: 'ATD',
title: '总重KGS',
align: 'center',
width: '100',
dataIndex: 'atd'
width: '130',
field: 'totalCargoWeight'
},
{
title: '货物标志',
title: '合约号',
align: 'center',
width: '100',
dataIndex: 'cargoType'
width: '160',
field: 'priceReference'
},
{
title: '总重KGS',
title: 'BC',
align: 'center',
width: '130',
dataIndex: 'totalCargoWeight'
width: '50',
field: 'isRecvBC'
},
{
title: '是否冷冻处理',
title: 'BookingCancellation',
align: 'center',
width: '150',
dataIndex: 'isReefer'
width: '200',
field: 'isRecvBKCancel'
},
{
title: '温度',
title: '状态',
align: 'center',
width: '100',
dataIndex: 'tempSet'
width: '130',
field: 'status'
},
{
title: '通风',
title: 'soc',
align: 'center',
width: '150',
dataIndex: 'vent'
width: '50',
field: 'isShipperOwned'
},
{
title: '湿度',
title: '订舱人',
align: 'center',
width: '130',
dataIndex: 'humidity'
field: 'createdUserName'
},
{
title: '状态',
title: '订舱日期',
align: 'center',
width: '130',
dataIndex: 'status'
},
width: '150',
field: 'createdTime'
}
],
columnsAll: [
{
title: '订舱公司',
title: '订舱号',
align: 'center',
width: '130',
dataIndex: 'bookedByCompanyName'
width: '150',
field: 'bookingReference'
},
{
title: '订舱公司代码',
title: '起运港',
align: 'center',
width: '130',
dataIndex: 'bookedByCompanyPartyCode'
width: '100',
field: 'placeReceiptCity'
},
{
title: '是否持约方',
title: '目的港',
align: 'center',
width: '100',
dataIndex: 'isbookingPartOwnPrice'
field: 'placeDeliveryCity'
},
{
title: '持约方公司',
title: '箱型箱量',
align: 'center',
width: '130',
dataIndex: 'priceOwnerCompanyName'
width: '150',
field: 'ctnStat'
},
{
title: '持约方公司代码',
title: '船名/航次',
align: 'center',
width: '130',
dataIndex: 'priceOwnerCompanyPartyCode'
width: '100',
field: 'vessel'
},
{
title: '箱型箱量',
title: 'ETD',
align: 'center',
width: '150',
dataIndex: 'ctnStat'
width: '100',
field: 'etd'
},
{
title: 'soc',
title: '总重KGS',
align: 'center',
width: '50',
dataIndex: 'isShipperOwned'
width: '130',
field: 'totalCargoWeight'
},
{
title: '进口退货集装箱',
title: '合约号',
align: 'center',
width: '120',
dataIndex: 'isImportReturned'
width: '160',
field: 'priceReference'
},
{
title: 'BC',
align: 'center',
width: '50',
dataIndex: 'isRecvBC'
field: 'isRecvBC'
},
{
title: 'BookingCancellation',
align: 'center',
width: '200',
dataIndex: 'isRecvBKCancel'
field: 'isRecvBKCancel'
},
{
title: '创建日期',
align: 'center',
width: '150',
dataIndex: 'createdTime'
},
{
title: '创建人',
title: '状态',
align: 'center',
width: '130',
dataIndex: 'createdUserName'
field: 'status'
},
{
title: '更新日期',
align: 'center',
width: '150',
dataIndex: 'updatedTime'
},
{
title: '更新人',
title: 'soc',
align: 'center',
width: '130',
dataIndex: 'updatedUserName'
width: '50',
field: 'isShipperOwned'
},
{
title: '是否定时任务',
title: '订舱人',
align: 'center',
width: '130',
dataIndex: 'isJob'
field: 'createdUserName'
},
{
title: '定时时间',
title: '订舱日期',
align: 'center',
width: '150',
dataIndex: 'jobTime'
},
{
title: '发送时间',
align: 'center',
width: '130',
dataIndex: 'sendTime'
field: 'createdTime'
}
],
tstyle: { 'padding-bottom': '0px', 'margin-bottom': '10px' },
@ -450,7 +457,7 @@
},
created() { },
mounted() {
this.FnGetData()
this.getConfigStart()
},
methods: {
toggleAdvanced() {
@ -459,26 +466,139 @@
onSelectChange(selectedRowKeys) {
this.selectedRowKeys = selectedRowKeys;
},
handleDeleteSelect() {
const records = this.$refs.xTable1.getCheckboxRecords()
if (records.length === 0) {
this.$message.warning('请先选择')
return false
getConfigStart() {
const arr = localStorage.getItem('mskOrderSetting') ? JSON.parse(localStorage.getItem('mskOrderSetting')) : []
if (arr.length === 0) {
this.columns = JSON.parse(JSON.stringify(this.columnsAll))
const data = [
{
type: 'mskOrder_list_column',
configJson: JSON.stringify(this.columns)
},
{
type: 'mskOrder_page',
configJson: JSON.stringify({ pageSize: 10 })
},
{
type: 'mskOrder_sort',
configJson: JSON.stringify({ sortField: 'etd', descSort: true })
}
const arr = []
records.forEach(item => {
arr.push(item.gid)
})
this.loading = true
EmailUserAccountDelete(arr).then(res => {
if (res.data.succ) {
this.$message.success('删除成功')
]
localStorage.setItem('mskOrderSetting', JSON.stringify(data))
this.FnGetData()
} else {
this.$message.error(`删除失败,${res.data.msg}`)
const $data = {}
arr.map((item, index) => {
switch (item.type) {
case 'mskOrder_list_column':
this.$set($data, 'mskOrder_list_column', item)
break
case 'mskOrder_page':
this.$set($data, 'mskOrder_page', item)
break
case 'mskOrder_sort':
this.$set($data, 'mskOrder_sort', item)
break
}
this.loading = false
})
console.log(JSON.parse($data.mskOrder_list_column.configJson))
if (Object.keys($data).includes('mskOrder_list_column')) {
this.columns = JSON.parse($data.mskOrder_list_column.configJson)
} else {
arr.push({
type: 'mskOrder_list_column',
configJson: JSON.stringify(this.columns)
})
localStorage.setItem('mskOrderSetting', JSON.stringify(arr))
}
if (Object.keys($data).includes('mskOrder_page')) {
this.queryParam.PageSize = JSON.parse($data.mskOrder_page.configJson).pageSize
} else {
arr.push({
type: 'mskOrder_page',
configJson: JSON.stringify({ pageSize: 10 })
})
localStorage.setItem('mskOrderSetting', JSON.stringify(arr))
}
if (Object.keys($data).includes('mskOrder_sort')) {
const data = $data.mskOrder_sort.configJson ? JSON.parse($data.mskOrder_sort.configJson) : null
if (data) {
setTimeout(() => {
this.$refs.table.sort(data.sortField, data.descSort ? 'desc' : 'asc')
}, 200);
this.queryParam.sortField = data.sortField
this.queryParam.descSort = data.descSort
}
} else {
arr.push({
type: 'mskOrder_sort',
configJson: ''
})
localStorage.setItem('mskOrderSetting', JSON.stringify(arr))
}
setTimeout(() => {
this.FnGetData()
}, 200);
}
},
handlePageChange({ currentPage, pageSize }) {
if (this.queryParam.pageSize !== pageSize) {
this.editPageSizeSave(pageSize)
this.changeSetting('mskOrder_page', { pageSize: pageSize })
}
this.queryParam.PageNo = currentPage
this.queryParam.PageSize = pageSize
this.FnGetData()
},
changeSetting(key, value) {
const arr = localStorage.getItem('mskOrderSetting') ? JSON.parse(localStorage.getItem('mskOrderSetting')) : []
arr.forEach(item => {
if (item.type === key) {
item.configJson = JSON.stringify(value)
}
})
localStorage.setItem('mskOrderSetting', JSON.stringify(arr))
},
tableSortChange(e) {
const { property, order } = e
const data =
{
sortField: property,
descSort: order === 'desc'
}
this.queryParam.sortField = data.sortField
this.queryParam.descSort = data.descSort
this.changeSetting('mskOrder_sort', data)
this.FnGetData(this.queryParam)
DjyUserConfigAdd({
type: 'mskOrder_sort',
configJson: JSON.stringify(data)
}).then(res => {
})
},
handleColumnChange(list) {
this.columns = JSON.parse(JSON.stringify(list))
this.columns.forEach((item, index) => {
this.$set(this.columns, index, item)
})
this.$forceUpdate()
this.editColumnsSave(this.columns)
this.changeSetting('mskOrder_list_column', this.columns)
},
editColumnsSave(data = {}) {
DjyUserConfigAdd({
type: 'mskOrder_list_column',
configJson: JSON.stringify(data)
}).then(res => {
})
},
handledbclick(row) {
this.$refs.editForm.edit(row.row)
},
resizableChange(e) {
this.columns[e.columnIndex].width = e.resizeWidth
this.editColumnsSave(this.columns)
this.changeSetting('mskOrder_list_column', this.columns)
},
handleEdit(id) {
this.$refs.mskBookingOrder.init(id)
@ -577,36 +697,37 @@
this.$refs.mskBookingOrder.init()
}
}
}
</script>
<style lang="less" scoped>
/deep/ .ant-form-item{
}
</script>
<style lang="less" scoped>
/deep/ .ant-form-item {
margin-bottom: 10px !important;
}
.table-operator {
}
.table-operator {
margin-bottom: 18px;
}
}
.Close {
.Close {
height: 45px;
overflow: hidden;
}
}
.vxe-table--render-default .vxe-body--row.row--stripe {
.vxe-table--render-default .vxe-body--row.row--stripe {
background: #f5f9fe;
}
}
.ant-card-body {
.ant-card-body {
padding-top: 10px;
}
}
.inline {
.inline {
position: relative;
}
}
.inline-right {
.inline-right {
position: absolute;
top: 6px;
right: 25px;
}
</style>
}
</style>

@ -361,38 +361,6 @@ export default {
handledbclick(row) {
this.$refs.editForm.edit(row.row)
},
getConfigUser(isInit = false) {
const query = {
typeArr: ['vesselinfo_sort', 'vesselinfo_list_column', 'vesselinfo_page']
}
this.loading = true
DjyUserConfigMulti(this.$qs.stringify(query, { arrayFormat: 'repeat' })).then(res => {
if (res.data.length === 0) {
this.columns = JSON.parse(JSON.stringify(this.columnsAll))
this.FnGetData()
} else {
res.data.forEach(item => {
if (item.type === 'vesselinfo_list_column') {
this.columns = JSON.parse(item.configJson)
}
if (item.type === 'vesselinfo_page') {
this.queryParam.PageSize = JSON.parse(item.configJson).pageSize
}
if (item.type === 'vesselinfo_sort') {
const data = JSON.parse(item.configJson)
setTimeout(() => {
this.$refs.table.sort(data.sortField, data.descSort ? 'desc' : 'asc')
}, 200);
this.queryParam.sortField = data.sortField
this.queryParam.descSort = data.descSort
}
})
setTimeout(() => {
this.FnGetData()
}, 200);
}
})
},
resizableChange(e) {
this.columns[e.columnIndex].width = e.resizeWidth
this.editColumnsSave(this.columns)
@ -480,9 +448,6 @@ export default {
init() {
Object.assign(this.$data, this.$options.data())
this.ColumnsQuery = this.columns
// GetCarrierlist().then(res => {
// this.carrierData = res.data
// })
this.getConfigStart()
},
getConfigStart() {
@ -506,22 +471,6 @@ export default {
localStorage.setItem('vesselinfoSetting', JSON.stringify(data))
this.FnGetData()
} else {
// arr.forEach(item => {
// if (item.type === 'vesselinfo_list_column') {
// this.columns = JSON.parse(item.configJson)
// }
// if (item.type === 'vesselinfo_page') {
// this.queryParam.PageSize = JSON.parse(item.configJson).pageSize
// }
// if (item.type === 'vesselinfo_sort') {
// const data = JSON.parse(item.configJson)
// setTimeout(() => {
// this.$refs.table.sort(data.sortField, data.descSort ? 'desc' : 'asc')
// }, 200);
// this.queryParam.sortField = data.sortField
// this.queryParam.descSort = data.descSort
// }
// })
const $data = {}
arr.map((item, index) => {
switch (item.type) {

@ -351,7 +351,7 @@ export default {
typeArr: ['vesselinfo_sort', 'vesselinfo_list_column', 'vesselinfo_page', 'booking_list_column']
}
DjyUserConfigMulti(this.$qs.stringify(query)).then(res => {
const vessArr = []
let vessArr = []
let bookArr = []
res.data.forEach(item => {
if (item.type.includes('vesselinfo')) {

@ -1,19 +1,19 @@
<template>
<a-modal title="修改密码" @cancel="handleCancel" :visible="visible_updPwd" :confirm-loading="confirmLoading">
<a-form :form="formUpdPwd">
<a-form-item label="原密码" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
<a-form-item label="原密码" :labelCol="labelCol" :wrapperCol="wrapperCol" >
<a-input
placeholder="请输入原密码"
type="password"
v-decorator="['password', { rules: [{ required: true, message: '请输入原密码!' }] }]" />
</a-form-item>
<a-form-item label="新密码" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
<a-form-item label="新密码" :labelCol="labelCol" :wrapperCol="wrapperCol" >
<a-input
placeholder="请输入新密码"
type="password"
v-decorator="['newPassword', { rules: [{ required: true, message: '请输入新密码!' }, { validator: validateToNextPassword },] }]" />
</a-form-item>
<a-form-item label="重复新密码" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
<a-form-item label="重复新密码" :labelCol="labelCol" :wrapperCol="wrapperCol" >
<a-input
placeholder="请再次输入新密码"
type="password"
@ -68,9 +68,17 @@ export default {
this.visible_updPwd = true
},
handleOkUpdPwd() {
const data = this.formUpdPwd.getFieldsValue()
if (!data.password) {
this.$message.error('请输入原密码')
return false
}
if (!data.newPassword) {
this.$message.error('请输入新密码')
return false
}
this.formUpdPwd.validateFields((errors, values) => {
if (!errors) {
// this.confirmLoading = true
values.id = this.userId
sysUserUpdatePwd(values).then((res) => {
if (res.success) {

Loading…
Cancel
Save