master
sunzehua 5 months ago
parent c459aa8566
commit e5c026331c

@ -1,9 +1,9 @@
NODE_ENV=production
VUE_APP_PREVIEW=true
# VUE_APP_TYPE = 'customer'
VUE_APP_TYPE = 'hechuan'
# VUE_APP_TYPE = 'hechuan'
# VUE_APP_TYPE = 'yunyingduan'
# VUE_APP_TYPE = 'gangjie'
VUE_APP_TYPE = 'gangjie'
# 打包部署的三个端 客户端customer 和川端hechuan 运营端djy
# 和川大简云正式

@ -518,9 +518,8 @@ export function BookingOrderDownloadPrint(parameter) {
*/
export function BookingOrderViewPrintPdf(parameter) {
return axios({
url: '/BookingOrder/ViewPrintPdf',
method: 'get',
params: parameter
url: '/BookingOrder/ViewPrintPdf/' + parameter,
method: 'get'
})
}
/**
@ -1260,6 +1259,15 @@ export function DownloadVOLTAEdiSI(parameter) {
})
}
export function DownloadSLSEdiSI(parameter) {
return axios({
url: '/BookingOrder/DownloadSLSEdiSI',
method: 'post',
data: parameter,
responseType: 'blob'
})
}
export function BachUpdateShipagency(parameter) {
return axios({
url: '/BookingOrder/BachUpdateShipagency',
@ -1648,3 +1656,35 @@ export function QueryShipInfoEMC(parameter) {
params: parameter
})
}
export function PrintTuoshu(parameter) {
return axios({
url: '/BookingOrder/PrintTuoshu',
method: 'get',
params: parameter
})
}
export function SendTuoshu(parameter) {
return axios({
url: '/BookingOrder/SendTuoshu',
method: 'post',
data: parameter
})
}
export function GetFileByName(parameter) {
return axios({
url: '/BookingCustomerOrder/GetFileByName',
method: 'get',
params: parameter,
responseType: 'blob'
})
}
export function CancelBook(parameter) {
return axios({
url: '/BookingCustomerOrder/CancelBook',
method: 'post',
params: parameter
})
}

@ -1,4 +1,5 @@
import { BasicLayout, BlankLayout, PageView, RouteView, Iframe } from '@/layouts'
// 各个端用不同文件 但路由一样
const getDetail = () => {
if (process.env.VUE_APP_TYPE === 'customer') {
return 'ledgerCustomerDetail'

@ -26,19 +26,19 @@
<a-col :span="'4-8'">
<a-form-model-item
class="from-label"
label="船公司"
prop="carrierid"
label="收货地"
:labelCol="labelCol"
:wrapperCol="wrapperCol"
has-feedback>
has-feedback
prop="placereceiptid">
<selectView
ref="carrierid"
type="carrierid"
:defaultVal="details.carrierid"
searchApi="GetCarrierlist"
:searchQuery="{ keyword: '', type: 'consignor' }"
:showLabel="['cnName', 'code']"
:openSearch="false"
type="placereceiptid"
:defaultVal="details.placereceipt"
searchApi="GetPortloadlist"
:searchQuery="{ KeyWord: '' }"
:showLabel="['enName', 'ediCode']"
:openSearch="true"
:isCopy="true"
@change="getSelectViewRes"></selectView>
</a-form-model-item>
</a-col>
@ -52,10 +52,10 @@
prop="portloadid">
<selectView
type="portloadid"
:defaultVal="details.portloadid"
:defaultVal="details.portload"
searchApi="GetPortloadlist"
:searchQuery="{ KeyWord: '' }"
:showLabel="['ediCode', 'enName']"
:showLabel="['enName', 'ediCode']"
:openSearch="true"
:isCopy="true"
@change="getSelectViewRes"></selectView>
@ -64,17 +64,17 @@
<a-col :span="'4-8'">
<a-form-model-item
class="from-label"
label="目的地"
label="卸货港"
:labelCol="labelCol"
:wrapperCol="wrapperCol"
has-feedback
prop="portdischargeid">
<selectView
type="portdischargeid"
:defaultVal="details.portdischargeid"
:defaultVal="details.portdischarge"
searchApi="GetPortlist"
:searchQuery="{ KeyWord: '' }"
:showLabel="['ediCode', 'enName']"
:showLabel="['enName', 'ediCode']"
:openSearch="true"
@change="getSelectViewRes"></selectView>
</a-form-model-item>
@ -82,30 +82,34 @@
<a-col :span="'4-8'">
<a-form-model-item
class="from-label"
label="开船日期"
label="目的地"
:labelCol="labelCol"
:wrapperCol="wrapperCol"
has-feedback
prop="etd">
<div class="date-box">
<datePickerView
class="date-picker"
:parentVal="details.etd"
type="etd"
format="YYYY-MM-DD"
@dateChange="dateChangeFun"></datePickerView>
</div>
prop="destinationid">
<selectView
type="destinationid"
:defaultVal="details.destination"
searchApi="GetPortlist"
:searchQuery="{ KeyWord: '' }"
:showLabel="['enName', 'ediCode']"
:openSearch="true"
@change="getSelectViewRes"></selectView>
</a-form-model-item>
</a-col>
<a-col :span="'4-8'">
<a-form-model-item
class="from-label"
label="销售代码"
label="合约号"
:labelCol="labelCol"
:wrapperCol="wrapperCol"
has-feedback
prop="saleCode">
<inputView type="saleCode" :parentVal="details.saleCode" @getInputChange="inputChange" />
has-feedback>
<a-select size="small" v-model="details.contractType" style="width: 35%">
<a-select-option v-for="(item, index) in contractnoList" :key="index" :value="item.code">{{
item.code
}}</a-select-option>
</a-select>
<a-input size="small" style="width:60%;margin-left:5%" v-model="details.contractno" />
</a-form-model-item>
</a-col>
</a-row>
@ -113,27 +117,31 @@
<a-col :span="'4-8'">
<a-form-model-item
class="from-label"
label="船名"
label="订舱账号"
:labelCol="labelCol"
:wrapperCol="wrapperCol"
has-feedback
prop="vessel">
<div class="copy-box">
<selectView
class="copy-input"
ref="vesselView"
type="vessel"
:defaultVal="details.vessel"
searchApi="getVesselInfoService"
:searchQuery="{
KeyWord: '',
CarrierID: this.details.carrierid || 'CMA',
ETD: this.details.etd || ''
}"
:showLabel="['vessel']"
:openSearch="true"
@change="getSelectViewRes"></selectView>
</div>
prop="bookingAccount">
<a-select
size="small"
@change="handleChangeAccount"
@search="handleSearchAccount"
show-search
v-model="details.bookingAccount"
style="width: 100%">
<a-select-option v-for="(item, index) in accountList" :key="index" :value="item.account">{{
item.account }}</a-select-option>
</a-select>
</a-form-model-item>
</a-col>
<a-col :span="'4-8'">
<a-form-model-item
class="from-label"
label="船名"
:labelCol="labelCol"
:wrapperCol="wrapperCol"
has-feedback>
<a-input size="small" v-model="details.vessel" />
</a-form-model-item>
</a-col>
<a-col :span="'4-8'">
@ -142,22 +150,40 @@
label="航次"
:labelCol="labelCol"
:wrapperCol="wrapperCol"
has-feedback
prop="voyno">
<inputView type="voyno" :parentVal="details.voyno" @getInputChange="inputChange" />
has-feedback>
<a-input size="small" v-model="details.voyno" />
</a-form-model-item>
</a-col>
<a-col :span="'4-8'">
<a-form-model-item
class="from-label"
label="约号"
label="航线"
:labelCol="labelCol"
:wrapperCol="wrapperCol"
has-feedback>
<a-input size="small" v-model="details.lanecode" />
</a-form-model-item>
</a-col>
<a-col :span="'4-8'">
<a-form-model-item
class="from-label"
label="开船日期"
:labelCol="labelCol"
:wrapperCol="wrapperCol"
has-feedback
prop="contractno">
<inputView type="contractno" :parentVal="details.contractno" @getInputChange="inputChange" />
prop="etd">
<div class="date-box">
<datePickerView
class="date-picker"
:parentVal="details.etd"
type="etd"
format="YYYY-MM-DD"
@dateChange="dateChangeFun1"></datePickerView>
</div>
</a-form-model-item>
</a-col>
</a-row>
<a-row>
<a-col :span="'4-8'">
<a-form-model-item
class="from-label"

@ -4,6 +4,14 @@
<a-button :loading="autioLoading" @click="handleAccept" v-if="details.bsstatus !== '已审核'" type="primary"></a-button>
<a-button :loading="autioLoading" type="primary" v-if="details.bsstatus == '待审核'" @click="handleAutio"></a-button>
<a-button :loading="sendLoading" type="primary" @click="handleSendApi">API</a-button>
<a-popconfirm
title="确定作废吗?"
ok-text="是"
cancel-text="否"
@confirm="handleCancelBook"
>
<a-button :loading="sendLoading" type="danger" v-if="details.bsstatus == ''" >作废</a-button>
</a-popconfirm>
<span>订单状态:{{ details.bsstatus }}</span>
<span v-if="details.bookingno" style="margin: 0 10px;">:</span>
<span v-if="details.bookingno">{{ details.bookingno }}</span>
@ -929,7 +937,8 @@ import {
BookingCustomerOrderGet,
BookingCustomerOrderSubmit,
BookingCustomerOrderAuditBooking,
PostApiSO
PostApiSO,
CancelBook
} from '@/api/modular/main/BookingLedger'
import { mapGetters } from 'vuex'
export default {
@ -1014,6 +1023,15 @@ export default {
this.id = this.$route.query.id
this.getDetail()
},
handleCancelBook() {
CancelBook({ id: this.$route.query.id }).then(res => {
if (res.success) {
this.$message.success('作废成功')
} else {
this.$message.error(res.message)
}
})
},
init() {
this.options = this.$options.filters['dictData']('booking_service_item')
this.options.forEach(item => {

@ -31,7 +31,8 @@
</operationArea>
<ul class="parent-tabs-box">
<div class="parents-tabs-top">
<div class="parents-tabs-top" style="display: flex;align-items: center;width: 100%;justify-content: space-between;" >
<div>
<li @click="changeParentTabs('1-1')">
<input type="radio" name="tabs" id="tab1" checked="true" />
<label class="tabs-label" for="tab1">基础信息</label>
@ -45,6 +46,9 @@
<label class="tabs-label" for="tab3">费用信息</label>
</li>
</div>
<div v-if="bookingDetails.spliT_OR_MERGE_FLAG==1" style="background: #d78a6d;color: white;padding: 0 8px;" >已拆票</div>
<div v-if="bookingDetails.spliT_OR_MERGE_FLAG==2" style="background: #d78a6d;color: white;padding: 0 8px;" >已合票</div>
</div>
<div class="parents-tabs-content">
<div id="tab-content1" class="tab-content" v-show="mainOrderActiveKey === '1-1'">
<div class="pane-box">
@ -56,7 +60,6 @@
:inPageLoading="inPageLoading"
:isLockBooking="isLockBooking"
isParent="parent"
@handleSaveService="handleSaveService"
@changeDetail="changeDetailFun"></basicInfo>
<mailingInfo
ref="mailingInfo"
@ -94,9 +97,9 @@
:details="bookingDetails"
:rules="tableRules"
isParent="parent"
:isWatch="true"
:isLockBooking="isLockBooking"
@changectnall="changectnall"
@getInfoSet="getInfoSet"
@changeDetail="changeDetailFun"
@handleRefshTable="handleRefshTable"
@changeTotal="changeTotalFun"
@ -123,7 +126,7 @@
ref="iframe"
@load="handleIframeLoad"
style="width: 100%;height: 1400px;"
src="http://localhost:8080/#/index"
src="http://60.209.125.238:35103/#/index"
frameborder="0"></iframe>
</div>
</div>

@ -572,7 +572,22 @@
</a-col>
</a-row>
<a-row :gutter="10">
<a-col :xs="24" :sm="9" :md="9" :lg="9" :xl="8">
<a-col :xs="24" :sm="9" :md="9" :lg="9" :xl="4">
<a-form-model-item
class="from-label"
label="ERP代码"
:labelCol="{span:7}"
:wrapperCol="{span:17}"
has-feedback
prop="erpCode">
<inputView
:ishd="isLockBooking"
type="erpCode"
:parentVal="details.erpCode"
@getInputChange="inputChange" />
</a-form-model-item>
</a-col>
<a-col :xs="24" :sm="9" :md="9" :lg="9" :xl="7">
<a-form-model-item
class="from-label"
label="操作备注"
@ -587,7 +602,7 @@
@getInputChange="inputChange" />
</a-form-model-item>
</a-col>
<a-col :xs="24" :sm="9" :md="9" :lg="9" :xl="8">
<a-col :xs="24" :sm="9" :md="9" :lg="9" :xl="7">
<a-form-model-item
class="from-label"
label="单证备注"
@ -602,7 +617,7 @@
@getInputChange="inputChange" />
</a-form-model-item>
</a-col>
<a-col :xs="24" :sm="6" :md="6" :lg="6" :xl="8">
<a-col :xs="24" :sm="6" :md="6" :lg="6" :xl="6">
<a-form-model-item
class="from-label"
label="申请箱使"

@ -203,6 +203,22 @@
</a-popover>
</div>
</template>
<template #isSISubmitted="{ row }">
<div v-if="row.isSISubmitted" style="text-align: center">
<a-popover placement="topLeft">
<div slot="content">{{ row.isSISubmitted }}</div>
<i class="iconfont icon-chenggong flag-icon"></i>
</a-popover>
</div>
</template>
<template #isVGMSubmitted="{ row }">
<div v-if="row.isVGMSubmitted" style="text-align: center">
<a-popover placement="topLeft">
<div slot="content">{{ row.isVGMSubmitted }}</div>
<i class="iconfont icon-chenggong flag-icon"></i>
</a-popover>
</div>
</template>
<template #IsCanDan="{ row }">
<div v-if="row.isCanDan" style="text-align: center;">
<a-popover placement="topLeft">

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

@ -0,0 +1,394 @@
<template>
<div>
<a-modal width="1000px" :closable="false" :visible="visible" @cancel="visible = false">
<template slot="title">
</template>
<div class="main" >
<div class="main-title" >
<div style="display: flex;align-items: center;">
<div class="line" ></div>
<div>邮件发送</div>
</div>
<a-icon @click="visible=false" type="close" style="font-size: 20px;color: black;cursor: pointer;" />
</div>
<a-spin :spinning="load">
<a-form-model ref="ruleForm" :model="form" :rules="rules" :label-col="labelCol" :wrapper-col="wrapperCol">
<a-form-model-item prop="name">
<div class="label">收件人</div>
<a-select
:filter-option="filterOption"
show-search
v-model="form.sendTo"
mode="tags"
style="width: 100%">
<a-select-option v-for="item in contactsList" :key="item.id" :value="item.email">
{{ item.name }}
<span v-if="item.email">(</span>
{{ item.email }}
<span v-if="item.email">)</span>
</a-select-option>
</a-select>
</a-form-model-item>
<a-form-model-item prop="name">
<div class="label">抄送</div>
<a-spin :spinning="poepleLoad">
<a-select
v-model="form.ccTo"
:filter-option="filterOption"
show-search
mode="tags"
style="width: 100%">
<a-select-option v-for="item in peopleList" :key="item.id" :value="item.email">
{{ item.name }}
<span v-if="item.email">(</span>
{{ item.email }}
<span v-if="item.email">)</span>
</a-select-option>
</a-select>
</a-spin>
</a-form-model-item>
<a-form-model-item prop="name">
<div class="label">主题</div>
<a-input style="background: rgba(255,255,255,0);" v-model="form.title"></a-input>
</a-form-model-item>
<a-form-model-item>
<div style="display: flex;height: 28px;align-items: center;" >
<a-upload
:customRequest="customRequest"
:showUploadList="false"
:multiple="true"
name="file">
<a-spin :spinning="downloading">
<div style="cursor: pointer;" >
<a-icon type="paper-clip" style="font-size: 20px;color:rgb(41,150,150);" />
<span style="font-size: 13px;font-weight: 400;color: rgb(41, 150, 150);margin-left: 10px;">添加附件</span>
</div>
</a-spin>
</a-upload>
<div style="display: flex;flex-wrap: wrap;margin-left: 20px;">
<div v-for="(item, index) in fileList" class="fileList" :key="index">
<span @click="handleDownFile(item)" style="cursor: pointer;" >{{ item.name }}</span>
<a-icon style="color: red;font-size: 12px;margin-left: 10px;" @click.stop="handleDetleFile(index)" type="close" />
</div>
</div>
</div>
</a-form-model-item>
<a-form-model-item prop="name">
<a-textarea v-model="form.body" :auto-size="{ minRows: 12, maxRows: 20 }"></a-textarea>
</a-form-model-item>
</a-form-model>
<a-row>
</a-row>
</a-spin>
</div>
<template slot="footer">
<a-button type="danger" @click="visible = false">取消</a-button>
<a-button type="primary" @click="handleSend"></a-button>
</template>
</a-modal>
</div>
</template>
<script>
import { DjyCustomerdetail, GetSysUserPage, PrintTuoshu, GetFileByName, SendTuoshu } from '@/api/modular/main/BookingLedger'
import { mapGetters } from 'vuex'
import { UploadTempFile } from '@/api/modular/system/fileManage'
export default {
props: {
},
data() {
return {
labelCol: { span: 2 },
wrapperCol: { span: 22 },
visible: false,
details: {},
contactsList: [],
peopleList: [],
fileList: [],
downloading: false,
load: false,
form: {
sendTo: [],
ccTo: []
},
poepleLoad: false,
rules: {}
}
},
computed: {
...mapGetters([
'bookingInitData'
])
},
methods: {
init(form) {
this.fileList = []
this.form = {
sendTo: [],
ccTo: []
}
const data = {
CodeName: form.forwarderid,
ShortName: form.forwarder
}
this.details = form
DjyCustomerdetail(data).then(res => {
if (res.success) {
const parm = res.data.paramValueList ? res.data.paramValueList : []
const arr = []
parm.forEach(item => {
if (item.paraCode === 'BookingRoute') {
arr.push(item)
}
})
if (arr.length === 0) {
this.$emit('noOpen')
} else {
if (arr[0].itemCode === 'EMAIL') {
this.getPeople(res.data)
} else {
this.$emit('noOpen')
}
}
} else {
this.$message.error(res.message)
this.$emit('noOpen')
}
})
PrintTuoshu({ bookingId: form.id }).then(res => {
this.fileList.push({
name: res.data,
path: res.data,
type: 'print'
})
})
},
handleDownFile(row) {
if (row.type === 'print') {
window.open(` ${process.env.VUE_APP_API_BASE_URL}/BookingOrder/ViewPrintPdf/${row.path}`, '_blank')
} else {
const data = {
fn: row.path,
isTemp: true
}
GetFileByName(data).then(res => {
var blob = new Blob([res.data], { type: 'application/octet-stream;charset=UTF-8' })
var contentDisposition = res.headers['content-disposition']
var patt = new RegExp('filename=([^;]+\\.[^\\.;]+);*')
var result = patt.exec(contentDisposition)
var filename = result[1]
var downloadElement = document.createElement('a')
var href = window.URL.createObjectURL(blob) //
var reg = /^["](.*)["]$/g
downloadElement.style.display = 'none'
downloadElement.href = href
downloadElement.download = decodeURI(filename.replace(reg, '$1')) //
document.body.appendChild(downloadElement)
downloadElement.click() //
document.body.removeChild(downloadElement) //
window.URL.revokeObjectURL(href)
})
}
},
handleDetleFile(index) {
this.fileList.splice(index, 1)
},
handleSend() {
const data = {
body: this.form.body,
title: this.form.title,
bookingId: this.details.id
}
if (this.form.sendTo) {
data.sendTo = this.form.sendTo.join(';')
}
if (this.form.ccTo) {
data.ccTo = this.form.ccTo.join(';')
}
const arr = []
this.fileList.forEach(item => {
arr.push(item.path)
})
data.fileList = arr
console.log(data)
this.load = true
SendTuoshu(data).then(res => {
if (res.success) {
this.$message.success('发送成功')
this.visible = false
} else {
this.$message.error(res.message)
}
this.load = false
})
},
filterOption(input, option) {
return (
option.componentOptions.children[0].text.toLowerCase().indexOf(input.toLowerCase()) >= 0
);
},
handleSearchPeople(val) {
this.poepleLoad = true
GetSysUserPage({ name: val }).then(res => {
const arr = []
res.data.forEach(item => {
if (item.email) {
arr.push(item)
}
})
this.peopleList = arr
this.poepleLoad = false
})
},
customRequest(data) {
const formData = new FormData()
formData.append('file', data.file)
this.downloading = true
UploadTempFile(formData, (percent) => this.setUploadProcess(percent)).then((res) => {
if (res.success) {
this.$message.success('上传成功')
const data = res.data.split('\\')
this.fileList.push({
name: data[1],
path: res.data
})
} else {
this.$message.error('上传失败:' + res.message)
}
this.downloading = false
})
},
getPeople(data) {
const arr = data.contacts ? data.contacts : []
const arr1 = []
const arr2 = []
arr.forEach(item => {
if (item.carrierProp === this.details.carrierid) {
if (item.email) {
arr1.push(item)
}
}
})
this.contactsList = arr1
if (arr1.length > 0) {
this.form.sendTo.push(arr1[0].email)
}
const peopleArr = this.bookingInitData ? this.bookingInitData.opInitList : []
const arr3 = []
peopleArr.forEach(item => {
if (item.email) {
arr3.push(item)
}
})
this.peopleList = arr3
if (this.details.opid) {
const oparr = []
peopleArr.forEach(item => {
if (item.id == this.details.opid) {
oparr.push(item)
}
})
if (oparr.length > 0) {
if (oparr[0].email) {
arr2.push(oparr[0].email)
}
} else {
GetSysUserPage({ name: this.details.op }).then(res => {
arr2.push(res.data[0].email)
if (res.data[0].email) {
arr2.push(res.data[0].email)
}
})
}
}
if (this.details.docid) {
const oparr1 = []
peopleArr.forEach(item => {
if (item.id == this.details.docid) {
oparr1.push(item)
}
})
if (oparr1.length > 0) {
if (oparr1[0].email) {
arr2.push(oparr1[0].email)
}
} else {
GetSysUserPage({ name: this.details.doc }).then(res => {
arr2.push(res.data[0].email)
if (res.data[0].email) {
arr2.push(res.data[0].email)
}
})
}
}
this.form.ccTo = arr2
const day = this.details.etd.slice(0, 10)
const str = this.details.erpCode + ' ' + this.details.portload + '-' + this.details.destination + ' ' + this.details.cntrtotal + ' ' + day
this.$set(this.form, 'title', str)
this.$set(this.form, 'body', this.details.description)
this.visible = true
this.$emit('cancelOpen')
}
}
}
</script>
<style lang="less" scoped>
/deep/ .ant-form-item {
margin-bottom: 15px !important;
}
.fileList {
background-color: rgb(237,242,242);
color: black;
line-height: 20px;
padding: 3px 5px;
margin-right: 10px;
}
.main{
background: url('./mailBg.jpg');
background-size: 100% 100%;
background-repeat: no-repeat;
height: 800px;
padding: 40px 37px 0 50px;
.main-title{
font-size: 20px;
font-weight: bold;
color: black;
line-height: 20px;
display: flex;
align-items: center;
margin-bottom: 45px;
justify-content: space-between;
.line{
background: rgba(19, 194, 194, 1);
height: 19px;
width: 2px;
margin-right: 10px;
}
}
.label{
font-size: 13px;
font-weight: bold;
line-height: 13px;
margin-bottom: 12px;
color: black;
}
}
/deep/ .ant-modal-body{
padding: 0px !important;
}
/deep/ .ant-select-selection--multiple{
background: rgba(255, 255, 255, 0);
}
/deep/ .ant-select-selection__choice{
background: rgb(211,240,240);
color: rgb(41,150,150);
}
</style>

@ -190,7 +190,6 @@ import {
GetAllData,
DeleteBookingOrder,
listYardBwCarrier,
ListAgentByCarrier,
CheckCtnCover,
GetCtnListRefsh,
GetBookingVGMResult

@ -188,6 +188,22 @@
</a-popover>
</div>
</template>
<template #isSISubmitted="{ row }">
<div v-if="row.isSISubmitted" style="text-align: center">
<a-popover placement="topLeft">
<div slot="content">{{ row.isSISubmitted }}</div>
<i class="iconfont icon-chenggong flag-icon"></i>
</a-popover>
</div>
</template>
<template #isVGMSubmitted="{ row }">
<div v-if="row.isVGMSubmitted" style="text-align: center">
<a-popover placement="topLeft">
<div slot="content">{{ row.isVGMSubmitted }}</div>
<i class="iconfont icon-chenggong flag-icon"></i>
</a-popover>
</div>
</template>
<template #IsZZFX="{ row }">
<div v-if="row.isZZFX" style="text-align: center">
<a-popover placement="topLeft">

@ -486,6 +486,22 @@ export default {
showHeaderOverflow: true,
slots: { default: 'IsVGM' }
},
{
field: 'isVGMSubmitted',
label: 'isVGMSubmitted',
width: 60,
title: 'VGM回执',
showHeaderOverflow: true,
slots: { default: 'isVGMSubmitted' }
},
{
field: 'isSISubmitted',
label: 'isSISubmitted',
width: 60,
title: 'SI回执',
showHeaderOverflow: true,
slots: { default: 'isSISubmitted' }
},
{
field: 'isCanDan',
label: 'IsCanDan',

@ -403,29 +403,29 @@
<a-row>
<a-col :span="8">
<a-form-model-item :label-col="{ span: 8 }" :wrapper-col="{ span: 16 }" label="样单截止时间">
<a-date-picker v-model="form.sI_CUT_DATE" format="YYYY-MM-DD HH:00" />
<a-date-picker v-model="form.sI_CUT_DATE" valueFormat="YYYY-MM-DD HH:00" format="YYYY-MM-DD HH:00" />
</a-form-model-item>
</a-col>
<a-col :span="8">
<a-form-model-item :label-col="{ span: 8 }" :wrapper-col="{ span: 16 }" label="截港时间">
<a-date-picker v-model="form.cY_CUT_DATE" format="YYYY-MM-DD HH:00" />
<a-date-picker v-model="form.cY_CUT_DATE" valueFormat="YYYY-MM-DD HH:00" format="YYYY-MM-DD HH:00" />
</a-form-model-item>
</a-col>
<a-col :span="8">
<a-form-model-item :label-col="{ span: 10 }" :wrapper-col="{ span: 14 }" label="舱单-入港清单截止时间">
<a-date-picker v-model="form.manifesT_CUT_DATE" format="YYYY-MM-DD HH:00" />
<a-date-picker v-model="form.manifesT_CUT_DATE" valueFormat="YYYY-MM-DD HH:00" format="YYYY-MM-DD HH:00" />
</a-form-model-item>
</a-col>
</a-row>
<a-row>
<a-col :span="8">
<a-form-model-item :label-col="{ span: 8 }" :wrapper-col="{ span: 16 }" label="MDGF截止时间">
<a-date-picker v-model="form.mdgF_CUT_DATE" format="YYYY-MM-DD HH:00" />
<a-date-picker v-model="form.mdgF_CUT_DATE" valueFormat="YYYY-MM-DD HH:00" format="YYYY-MM-DD HH:00" />
</a-form-model-item>
</a-col>
<a-col :span="8">
<a-form-model-item :label-col="{ span: 8 }" :wrapper-col="{ span: 16 }" label="VGM截止时间">
<a-date-picker v-model="form.vgM_SUBMISSION_CUT_DATE" format="YYYY-MM-DD HH:00" />
<a-date-picker v-model="form.vgM_SUBMISSION_CUT_DATE" valueFormat="YYYY-MM-DD HH:00" format="YYYY-MM-DD HH:00" />
</a-form-model-item>
</a-col>
</a-row>

@ -151,7 +151,12 @@
</a-col>
<a-col :span="4">
<a-form-item label="Week">
<a-input-number @pressEnter="getList" style="width:100%" v-model="form.week_at" allow-clear placeholder="请输入Week" />
<a-input-number
@pressEnter="getList"
style="width:100%"
v-model="form.week_at"
allow-clear
placeholder="请输入Week" />
</a-form-item>
</a-col>
<a-col :span="4">
@ -196,10 +201,11 @@
<a-card :bordered="false">
<div style="margin-bottom: 10px;display: flex;justify-content: space-between;">
<div>
<a-button type="primary" @click="handleAdd"></a-button>
<a-button type="danger" @click="handleDeleteAll"></a-button>
<a-button type="primary" style="margin-left: 50px;" @click="handleLabel"></a-button>
<a-button :loading="sumload" type="primary" style="margin-left: 10px;" @click="handleSum"></a-button>
<a-button size="small" type="primary" @click="handleAdd"></a-button>
<a-button size="small" type="danger" @click="handleDeleteAll"></a-button>
<a-button size="small" type="primary" style="margin-left: 50px;" @click="handleLabel"></a-button>
<a-button size="small" type="primary" @click="handleOpenMore"></a-button>
<a-button size="small" :loading="sumload" type="primary" @click="handleSum"></a-button>
<a-upload
:customRequest="customRequest"
:multiple="false"
@ -207,14 +213,14 @@
accept="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel"
:showUploadList="false"
name="file">
<a-button type="primary">导入</a-button>
<a-button size="small" type="primary">导入</a-button>
</a-upload>
<a-button type="danger" @click="handleSuport" :loading="loadingExport">导出</a-button>
<a-button size="small" type="danger" @click="handleSuport" :loading="loadingExport">导出</a-button>
<!-- <a-button type="primary" @click="handleSendAll"></a-button> -->
</div>
<div>
<a-button type="primary" @click="getList"></a-button>
<a-button style="margin-left: 8px" @click="init"></a-button>
<a-button size="small" type="primary" @click="getList"></a-button>
<a-button size="small" style="margin-left: 8px" @click="init"></a-button>
<tableSort @columnChange="handleColumnChange" :columns="columns" :columnsAll="columnsAll"></tableSort>
</div>
</div>
@ -296,7 +302,11 @@
</template>
<template #labelList="{ row }">
<div>
<a-tag style="color: black !important;font-weight: bold;" :color="item.color" v-for="(item, index) in row.labelList" :key="index">{{ item.name }}</a-tag>
<a-tag
style="color: black !important;font-weight: bold;"
:color="item.color"
v-for="(item, index) in row.labelList"
:key="index">{{ item.name }}</a-tag>
</div>
</template>
@ -311,6 +321,12 @@
</template>
</vxe-grid>
</a-card>
<a-modal title="多提单号查询" :width="400" :visible="moreMlbnoFlag" @ok="moreNumSubmit" @cancel="moreMlbnoFlag = false">
<div>
<a-textarea v-model="moreNumVal" style="height: 200px" />
</div>
</a-modal>
<a-modal width="800px" @ok="handleSubmitLabel" v-model="visible" title="分配标签" @cancel="visible = false">
<a-spin :spinning="labelLoad">
<!-- <a-select mode="multiple" style="width: 80%" :filter-option="filterOption" v-model="labelIdArray">
@ -348,9 +364,6 @@ import {
GetMergeList
} from '@/api/modular/main/CompanySiteaccount'
import { mapGetters } from 'vuex'
import {
GetProjectList
} from '@/api/modular/main/TaskmanageList'
import { DjyCustomerSuggest, GetSysUserPage, DjyCustomerContacts } from '@/api/modular/main/BookingLedger'
import columnSetting from '@/components/tableColumnSetting'
import tableSort from '@/components/tableSort'
@ -379,6 +392,7 @@ export default {
labelList: [],
loadingExport: false,
setVisible: false,
moreNumVal: '',
labelIdArray: [],
CreateData: {
customerContactId: []
@ -391,6 +405,7 @@ export default {
userInfoList: [],
setVisible1: false,
fetching: false,
moreMlbnoFlag: false,
queryParam: {
PageNo: 1,
pageSize: 10,
@ -1327,6 +1342,39 @@ export default {
row.dzmarkLoading = false
})
},
handleOpenMore() {
if (this.form.SLOT_BOOKING_NO) {
const arr = this.form.SLOT_BOOKING_NO.split(/|,/)
let val = ``
arr.map((item, index) => {
val += `${item}
` // 这里不要格式化
})
this.moreNumVal = val
} else {
this.moreNumVal = ''
}
this.moreMlbnoFlag = true
},
moreNumSubmit() {
let data = ''
this.moreNumVal
.replace(/\n|\r/g, ',')
.split(',')
.forEach((item) => {
if (item.replace(/\s*/g, '')) {
if (data) {
data = `${data},${item}`
} else {
data = item
}
}
})
this.form.SLOT_BOOKING_NO = data
this.moreMlbnoFlag = false
this.$forceUpdate()
},
handleOpenSlot(row) {
this.$refs.generation.init(row)
},
@ -1673,14 +1721,17 @@ button {
/deep/ .ant-form-item {
margin-bottom: 0px !important;
}
.content {
max-height: 300px;
overflow-y: auto;
overflow-x: hidden;
width: 100%;
&::-webkit-scrollbar {
width: 0 !important;
}
.items {
display: inline-block;
height: 28px;
@ -1693,6 +1744,7 @@ button {
font-size: 13px;
cursor: pointer;
position: relative;
.edit {
width: 17px;
height: 17px;
@ -1705,10 +1757,12 @@ button {
text-align: center;
line-height: 17px;
}
&:hover {
border: 1px dashed @primary-color;
position: relative;
&::before {
width: 100%;
height: 100%;
@ -1720,10 +1774,12 @@ button {
left: 0;
border-radius: 4px;
}
.edit {
display: block;
}
}
&.active {
background: @primary-color;
border: 1px dashed @primary-color;

@ -238,6 +238,17 @@
<vxe-input v-model="row.remark" type="text" transfer></vxe-input>
</template>
</vxe-column>
<vxe-column field="carrierProp" title="船公司" :edit-render="{}">
<template #default="{ row }">
<span>{{ formatCarrier(row.carrierProp) }}</span>
</template>
<template #edit="{ row }">
<vxe-select :filter-method="handleFilter" filterable v-model="row.carrierProp" transfer>
<vxe-option v-for="item in carrierList" :key="item.code" :value="`${item.enName}`" :label="`${item.enName}/${item.cnName}`" >
</vxe-option>
</vxe-select>
</template>
</vxe-column>
</vxe-table>
<p style="margin-top: 20px;" class="CsFormTitle">
<span><i class="iconfont icon-tuandui"></i>地址信息</span>
@ -407,7 +418,7 @@ export default {
},
computed: {
...mapGetters([
'projectDict'
'projectDict', 'carrierList'
])
},
mounted() {
@ -424,6 +435,23 @@ export default {
addrType: ''
})
},
handleFilter({ searchValue, option, group }) {
const small = searchValue.toLowerCase()
const big = searchValue.toUpperCase()
const str = option.label + option.value
if (str.includes(small) || str.includes(big)) {
return true
}
},
formatCarrier(val) {
let RData = ''
this.carrierList.forEach(item => {
if (item.enName === val) {
RData = item.cnName + '/' + item.enName
}
})
return RData
},
getUserList(name = '', type) {
GetSysUserPage({
name: name

@ -236,6 +236,17 @@
<vxe-input v-model="row.remark" type="text" transfer></vxe-input>
</template>
</vxe-column>
<vxe-column field="carrierProp" title="船公司" :edit-render="{}">
<template #default="{ row }">
<span>{{ formatCarrier(row.carrierProp) }}</span>
</template>
<template #edit="{ row }">
<vxe-select :filter-method="handleFilter" filterable v-model="row.carrierProp" transfer>
<vxe-option v-for="item in carrierList" :key="item.code" :value="`${item.enName}`" :label="`${item.enName}/${item.cnName}`" >
</vxe-option>
</vxe-select>
</template>
</vxe-column>
</vxe-table>
<p style="margin-top: 20px;" class="CsFormTitle">
<span><i class="iconfont icon-tuandui"></i>地址信息</span>
@ -392,7 +403,7 @@ export default {
},
computed: {
...mapGetters([
'projectDict'
'projectDict', 'carrierList'
])
},
mounted() {
@ -466,6 +477,14 @@ export default {
console.log(this.propStringData)
this.getUserList()
},
handleFilter({ searchValue, option, group }) {
const small = searchValue.toLowerCase()
const big = searchValue.toUpperCase()
const str = option.label + option.value
if (str.includes(small) || str.includes(big)) {
return true
}
},
getUserList(name = '', type) {
GetSysUserPage({
name: name
@ -513,6 +532,15 @@ export default {
}
return RData
},
formatCarrier(val) {
let RData = ''
this.carrierList.forEach(item => {
if (item.enName === val) {
RData = item.cnName + '/' + item.enName
}
})
return RData
},
formatSex(value) {
if (value === '1') {
return '男'

@ -228,9 +228,9 @@
>
<span class="tab-btn"> <a-icon type="redo" :style="{ fontSize: '16px' }" /> 刷新 </span>
</a-popconfirm>
<span class="tab-btn" @click="tableHeaderEdit">
<!-- <span class="tab-btn" @click="tableHeaderEdit">
<a-icon type="setting" :style="{ fontSize: '14px' }" />
</span>
</span> -->
</div>
</template>
</vxe-toolbar>
@ -245,18 +245,104 @@
<template #status="{ row }">
<span>{{ selectStatus(row.status) }}</span>
</template>
<template #iS_EXCEPT="{ row }">
<span v-if="row.iS_EXCEPT==1"></span>
<span v-if="row.iS_EXCEPT==0"></span>
</template>
<template #iS_COMPLETE="{ row }">
<span v-if="row.iS_COMPLETE==1"></span>
<span v-if="row.iS_COMPLETE==0"></span>
</template>
<template #iS_PUBLIC="{ row }">
<span v-if="row.iS_PUBLIC==1"></span>
<span v-if="row.iS_PUBLIC==0"></span>
</template>
<template #iS_SET_AUTO_EMAIL="{ row }">
<span v-if="row.iS_SET_AUTO_EMAIL==1"></span>
<span v-if="row.iS_SET_AUTO_EMAIL==0"></span>
</template>
<template #iS_DONGSH_RECV="{ row }">
<span v-if="row.iS_DONGSH_RECV==1"></span>
<span v-if="row.iS_DONGSH_RECV==0"></span>
</template>
<template #iS_DONGSH_RESULT="{ row }">
<span v-if="row.iS_DONGSH_RESULT==1"></span>
<span v-if="row.iS_DONGSH_RESULT==0"></span>
</template>
<template #iS_WEEK_DIFF="{ row }">
<span v-if="row.iS_WEEK_DIFF==1"></span>
<span v-if="row.iS_WEEK_DIFF==0"></span>
</template>
<template #iS_PRICE_DATE_DIFF="{ row }">
<span v-if="row.iS_PRICE_DATE_DIFF==1"></span>
<span v-if="row.iS_PRICE_DATE_DIFF==0"></span>
</template>
<template #iS_TRANSFER="{ row }">
<span v-if="row.iS_TRANSFER==1"></span>
<span v-if="row.iS_TRANSFER==0"></span>
</template>
<template #iS_CUT_DATE_ADVANCED="{ row }">
<span v-if="row.iS_CUT_DATE_ADVANCED==1"></span>
<span v-if="row.iS_CUT_DATE_ADVANCED==0"></span>
</template>
<template #iS_UPDATE_BOOKING="{ row }">
<span v-if="row.iS_UPDATE_BOOKING==1"></span>
<span v-if="row.iS_UPDATE_BOOKING==0"></span>
</template>
<template #iS_SEND_EMAIL="{ row }">
<span v-if="row.iS_SEND_EMAIL==1"></span>
<span v-if="row.iS_SEND_EMAIL==0"></span>
</template>
<template #iS_CHANGE="{ row }">
<span v-if="row.iS_CHANGE==1"></span>
<span v-if="row.iS_CHANGE==0"></span>
</template>
<template #iS_EMAIL_SEND="{ row }">
<span v-if="row.iS_EMAIL_SEND==1"></span>
<span v-if="row.iS_EMAIL_SEND==0"></span>
</template>
<template #procesS_STATUS="{ row }">
<span v-if="row.procesS_STATUS=='TEMP'"></span>
<span v-if="row.procesS_STATUS=='SUCC'"></span>
<span v-if="row.procesS_STATUS=='FAILURE'"></span>
</template>
<template #cautioN_NOTICE_TYPE="{ row }">
<span v-if="row.cautioN_NOTICE_TYPE=='WeekAt'"></span>
<span v-if="row.cautioN_NOTICE_TYPE=='PriceCalcDate'"></span>
<span v-if="row.cautioN_NOTICE_TYPE=='ChangeTransfer'"></span>
<span v-if="row.cautioN_NOTICE_TYPE=='ChangeVesselVoyno'"></span>
<span v-if="row.cautioN_NOTICE_TYPE=='VGMCutDateAdvanced'">VGM</span>
<span v-if="row.cautioN_NOTICE_TYPE=='SICutDateAdvanced'">SI</span>
</template>
<template #ouT_BUSI_TYPE="{ row }">
<span v-if="row.ouT_BUSI_TYPE==' SPLIT'"></span>
<span v-else></span>
</template>
<template #sI_SUBTYPE="{ row }">
<span v-if="row.sI_SUBTYPE=='BOOK_ORDER'"></span>
<span v-if="row.sI_SUBTYPE=='MAIL_RECV'"></span>
</template>
<template #plaN_TYPE="{ row }">
<span v-if="row.plaN_TYPE=='Rolling'"></span>
<span v-if="row.plaN_TYPE=='Transfer'"></span>
</template>
<template #busI_TYPE="{ row }">
<span v-if="row.busI_TYPE=='BookingConfirmation'"></span>
<span v-if="row.busI_TYPE=='BookingAmendment'"></span>
<span v-if="row.busI_TYPE=='BookingCancellation'"></span>
</template>
<template #truckName="{ row }">
<a-icon @click="handleOpen(row)" style="cursor: pointer;" type="edit" />
{{ row.truckName }}
{{ row.trucK_NAME }}
</template>
<template #taskType="{ row }">
<span>{{ filterType(row.taskType) }}</span>
<span>{{ filterType(row.tasK_TYPE) }}</span>
</template>
<template #taskScource="{ row }">
<span>{{ filterScource(row.taskSource) }}</span>
<span>{{ filterScource(row.tasK_SOURCE) }}</span>
</template>
<template #taskTitle="{ row }">
<span class="task-tit" @click="changePage(row)">{{ row.taskTitle }}</span>
<span class="task-tit" @click="changePage(row)">{{ row.tasK_TITLE }}</span>
</template>
<template #operate="{ row }">
<vxe-button class="operate-btn" type="text" icon="vxe-icon-edit" @click="changePage(row)"></vxe-button>
@ -481,11 +567,11 @@ export default {
if (this.saveNeedCar !== null && this.saveNeedCar !== '') {
let index = 0
this.gridOptions.data.forEach((ite, inde) => {
if (ite.pkId === this.saveNeedCar) {
if (ite.pK_ID === this.saveNeedCar) {
index = inde
}
})
GetTaskManagePage({ pkId: this.saveNeedCar })
GetTaskManagePage({ pK_ID: this.saveNeedCar })
.then(res => {
if (res.success) {
this.$set(this.gridOptions.data, index, res.data.items[0])
@ -588,6 +674,7 @@ export default {
},
//
paperCalcVisible: false,
taskTypeColumeList: [],
paperCalcRes: [],
paperCalcColumns: [
{
@ -653,7 +740,7 @@ export default {
},
handleSaveSend() {
const data = {
taskPKId: this.editRow.pkId,
taskPKId: this.editRow.pK_ID,
truckId: this.selectCar,
truckCode: this.selectCarCode,
truckName: this.selectCarName,
@ -677,7 +764,7 @@ export default {
},
handleChangeCar() {
const data = {
taskPKId: this.editRow.pkId,
taskPKId: this.editRow.pK_ID,
truckId: this.selectCar,
truckCode: this.selectCarCode,
truckName: this.selectCarName,
@ -833,7 +920,7 @@ export default {
},
getConfigUser(isInit = false) {
const query = {
typeArr: ['task_list_cond', 'task_list_column', 'task_list_page']
typeArr: ['task_list_cond', 'task_list_page']
}
DjyUserConfigMulti(this.$qs.stringify(query, { arrayFormat: 'repeat' })).then(res => {
const $data = {}
@ -842,9 +929,6 @@ export default {
case 'task_list_cond':
this.$set($data, 'task_list_cond', item)
break
case 'task_list_column':
this.$set($data, 'task_list_column', item)
break
case 'task_list_page':
this.setPageSize(item)
break
@ -856,10 +940,25 @@ export default {
} else {
this.setFormData({}, false, true)
}
if (Object.keys($data).includes('task_list_column')) {
this.setTableList($data.task_list_column)
} else {
this.setTableList({})
// if (Object.keys($data).includes('task_list_column')) {
// this.setTableList($data.task_list_column)
// } else {
// this.setTableList({})
// }
})
const query1 = {
typeArr: ['basic', 'SI_FEEDBACK', 'BC', 'PER_BILL', 'TRUCK_DISPATCH', 'CUT_MODIFY', 'ROLLING_NOMINATION', 'DRAFT', 'POD_DISCHARGE_FULL', 'CAUTION_NOTICE', 'ROUTE_CUT_CHANGE']
}
DjyUserConfigMulti(this.$qs.stringify(query1, { arrayFormat: 'repeat' })).then(res => {
if (res.data.length > 0) {
const arr = []
res.data.forEach(item => {
arr.push({
list: JSON.parse(item.configJson),
type: item.type
})
})
this.taskTypeColumeList = arr
}
})
},
@ -1024,7 +1123,7 @@ export default {
FnPrint() {
const select = this.$refs.xGrid.getCheckboxRecords()
const pkIdArr = select.map((item, index) => {
return item.pkId
return item.pK_ID
})
if (pkIdArr.length != 1) {
this.$message.error('请仅选择一条数据')
@ -1043,7 +1142,7 @@ export default {
FnSendCar() {
const select = this.$refs.xGrid.getCheckboxRecords()
const pkIdArr = select.map((item, index) => {
return item.pkId
return item.pK_ID
})
if (pkIdArr.length === 0) {
this.$message.error('请选择数据')
@ -1084,7 +1183,7 @@ export default {
CancelSendCar() {
const select = this.$refs.xGrid.getCheckboxRecords()
const pkIdArr = select.map((item, index) => {
return item.pkId
return item.pK_ID
})
if (pkIdArr.length === 0) {
this.$message.error('请选择数据')
@ -1125,16 +1224,14 @@ export default {
this.activeTreeKey = selectedKeys
if (selectedKeys.length === 0) {
this.gridOptions.loading = true
this.formRes.taskType = ''
this.init()
return false
}
const indexArr = selectedKeys[0].split('-')
console.log(indexArr)
if (indexArr.length > 2) {
const key = this.levelTree[indexArr[2]].actionKey
const action = key.split('#')
console.log('=== activeTreeKey ===', this.activeTreeKey)
console.log('选择', indexArr[2], key)
this.taskType = action[2]
this.form.setFieldsValue({
taskCategory: action[0],
@ -1143,6 +1240,24 @@ export default {
})
this.formRes.taskCategory = action[0]
this.formRes.taskType = action[2]
let columnsArr1 = []
let columnsArr2 = []
this.taskTypeColumeList.forEach(item => {
if (item.type === action[2]) {
columnsArr1 = item.list
}
if (item.type === 'basic') {
columnsArr2 = item.list
}
})
if (columnsArr1.length === 0 && columnsArr2.length === 0) {
this.gridOptions.columns = JSON.parse(JSON.stringify(initData.columns))
} else {
const arr = columnsArr2.concat(columnsArr1)
arr.push({ field: 'operate', title: '操作', width: 100, noDraggable: true, slots: { default: 'operate' }, fixed: 'right', resizable: false })
arr.unshift({ type: 'checkbox', width: 60, noDraggable: true })
this.gridOptions.columns = arr
}
this.init({
taskCategory: action[0],
status: action[1],
@ -1167,6 +1282,7 @@ export default {
this.activeTreeKey = []
},
init(queryParam = {}) {
console.log(queryParam)
this.gridOptions.pagerConfig = {
total: 0,
currentPage: 1,
@ -1443,107 +1559,114 @@ export default {
},
changePage(data) {
console.log(data)
if (data.taskType === 'VGM_COMPARE') {
if (data.tasK_TYPE === 'VGM_COMPARE') {
// VGM
this.$router.push({
path: '/commontaskmanage/TaskVgmContrast',
query: { taskPKId: data.pkId, type: data.status }
query: { taskPKId: data.pK_ID, type: data.status }
})
} else if (data.taskType === 'INVOICE_BILL_MAIL') {
} else if (data.tasK_TYPE === 'INVOICE_BILL_MAIL') {
//
this.$router.push({ path: '/commontaskmanage/VoyageBill', query: { taskPKId: data.pkId } })
} else if (data.taskType === 'PER_BILL') {
this.$router.push({ path: '/commontaskmanage/VoyageBill', query: { taskPKId: data.pK_ID } })
} else if (data.tasK_TYPE === 'PER_BILL') {
//
this.$router.push({ path: '/commontaskmanage/singleTicket', query: { taskPKId: data.pkId } })
} else if (data.taskType === 'CHANGE_SHIP') {
this.$router.push({ path: '/commontaskmanage/singleTicket', query: { taskPKId: data.pK_ID } })
} else if (data.tasK_TYPE === 'CHANGE_SHIP') {
//
this.$router.push({ path: '/commontaskmanage/TaskChangeShip', query: { taskPKId: data.pkId, type: 'change' } })
} else if (data.taskType === 'ABORT_CHANGE_SHIP') {
this.$router.push({ path: '/commontaskmanage/TaskChangeShip', query: { taskPKId: data.pK_ID, type: 'change' } })
} else if (data.tasK_TYPE === 'ABORT_CHANGE_SHIP') {
//
this.$router.push({
path: '/commontaskmanage/TaskChangeShip',
query: { taskPKId: data.pkId, type: 'abortChange' }
query: { taskPKId: data.pK_ID, type: 'abortChange' }
})
} else if (data.taskType === 'ORIGINAL_LOST') {
} else if (data.tasK_TYPE === 'ORIGINAL_LOST') {
//
this.$router.push({ path: '/commontaskmanage/TaskOriginalLost', query: { taskPKId: data.pkId } })
} else if (data.taskType === 'SHIPPING_ORDER') {
this.$router.push({ path: '/commontaskmanage/TaskOriginalLost', query: { taskPKId: data.pK_ID } })
} else if (data.tasK_TYPE === 'SHIPPING_ORDER') {
//
this.$router.push({ path: '/commontaskmanage/BookingDetails', query: { taskPKId: data.pkId } })
} else if (data.taskType === 'SI_FEEDBACK') {
this.$router.push({ path: '/commontaskmanage/BookingDetails', query: { taskPKId: data.pK_ID } })
} else if (data.tasK_TYPE === 'SI_FEEDBACK') {
//
this.$router.push({ path: '/commontaskmanage/TaskmanageDetail', query: { taskPKId: data.pkId } })
} else if (data.taskType === 'TRUCK_DISPATCH') {
this.$router.push({ path: '/commontaskmanage/TaskmanageDetail', query: { taskPKId: data.pK_ID } })
} else if (data.tasK_TYPE === 'TRUCK_DISPATCH') {
//
// this.$router.push({ path: '/commontaskmanage/TaskmanageDetail', query: { taskPKId: data.pkId } })
// this.$router.push({ path: '/commontaskmanage/TaskmanageDetail', query: { taskPKId: data.pK_ID } })
this.$router.push({
name: 'SendCarAdd',
query: {
type: 'Edit',
taskPKId: data.pkId
taskPKId: data.pK_ID
}
})
} else if (data.taskType === 'BC') {
} else if (data.tasK_TYPE === 'BC') {
// BC
// this.$router.push({ path: '/commontaskmanage/BcFileDetail', query: { taskPKId: data.pkId } })
// this.$router.push({ path: '/commontaskmanage/BcFileDetail', query: { taskPKId: data.pK_ID } })
// BC
this.$router.push({ path: '/commontaskmanage/BcEditing', query: { taskPKId: data.pkId } })
} else if (data.taskType === 'BC_MODIFY') {
this.$router.push({ path: '/commontaskmanage/BcEditing', query: { taskPKId: data.pK_ID } })
} else if (data.tasK_TYPE === 'BC_MODIFY') {
// BC
this.$router.push({ path: '/commontaskmanage/BCModify', query: { taskPKId: data.pkId } })
} else if (data.taskType === 'CANCELLATION') {
this.$router.push({ path: '/commontaskmanage/BCModify', query: { taskPKId: data.pK_ID } })
} else if (data.tasK_TYPE === 'CANCELLATION') {
// Cancellation
this.$router.push({ path: '/commontaskmanage/Cancellation', query: { taskPKId: data.pkId } })
} else if (data.taskType === 'ROLLING_NOMINATION') {
this.$router.push({ path: '/commontaskmanage/Cancellation', query: { taskPKId: data.pK_ID } })
} else if (data.tasK_TYPE === 'ROLLING_NOMINATION') {
// ROLLING_NOMINATION
this.$router.push({ path: '/commontaskmanage/rollingNomination', query: { taskPKId: data.pK_ID } })
} else if (data.tasK_TYPE === 'VGM_FEEDBACK') {
// ROLLING_NOMINATION
this.$router.push({ path: '/commontaskmanage/rollingNomination', query: { taskPKId: data.pkId } })
} else if (data.taskType === 'VGM_FEEDBACK') {
this.$router.push({ path: '/commontaskmanage/vgmDetail', query: { taskPKId: data.pK_ID, type: 'VGM_FEEDBACK' } })
} else if (data.tasK_TYPE === 'CAUTION_NOTICE') {
// ROLLING_NOMINATION
this.$router.push({ path: '/commontaskmanage/vgmDetail', query: { taskPKId: data.pkId, type: 'VGM_FEEDBACK' } })
} else if (data.taskType === 'CAUTION_NOTICE') {
this.$router.push({ path: '/commontaskmanage/cautionNotice', query: { taskPKId: data.pK_ID } })
} else if (data.tasK_TYPE === 'VGM_MISSING') {
// ROLLING_NOMINATION
this.$router.push({ path: '/commontaskmanage/cautionNotice', query: { taskPKId: data.pkId } })
} else if (data.taskType === 'VGM_MISSING') {
this.$router.push({ path: '/commontaskmanage/vgmDetail', query: { taskPKId: data.pK_ID, type: 'VGM_MISSING' } })
} else if (data.tasK_TYPE === 'CUT_MODIFY') {
// ROLLING_NOMINATION
this.$router.push({ path: '/commontaskmanage/vgmDetail', query: { taskPKId: data.pkId, type: 'VGM_MISSING' } })
} else if (data.taskType === 'CUT_MODIFY') {
this.$router.push({ path: '/commontaskmanage/cutTime', query: { taskPKId: data.pK_ID } })
} else if (data.tasK_TYPE === 'POD_DISCHARGE_FULL') {
// ROLLING_NOMINATION
this.$router.push({ path: '/commontaskmanage/cutTime', query: { taskPKId: data.pkId } })
} else if (data.taskType === 'POD_DISCHARGE_FULL') {
this.$router.push({ path: '/commontaskmanage/POD_DISCHARGE_FULL', query: { taskPKId: data.pK_ID } })
} else if (data.tasK_TYPE === 'TRNAS_PLAN_HAS_CHANGE') {
// ROLLING_NOMINATION
this.$router.push({ path: '/commontaskmanage/POD_DISCHARGE_FULL', query: { taskPKId: data.pkId } })
} else if (data.taskType === 'DRAFT') {
this.$router.push({ path: '/commontaskmanage/trnasPlan', query: { taskPKId: data.pK_ID } })
} else if (data.tasK_TYPE === 'DRAFT') {
// ROLLING_NOMINATION
this.$router.push({ path: '/commontaskmanage/draft', query: { taskPKId: data.pkId } })
} else if (data.taskType === 'ROUTE_CUT_CHANGE') {
this.$router.push({ path: '/commontaskmanage/draft', query: { taskPKId: data.pK_ID } })
} else if (data.tasK_TYPE === 'ROUTE_CUT_CHANGE') {
// ROLLING_NOMINATION
this.$router.push({ path: '/commontaskmanage/cutChange', query: { taskPKId: data.pkId } })
} else if (data.taskType === 'POD_GATEOUT_FULL') {
this.$router.push({ path: '/commontaskmanage/cutChange', query: { taskPKId: data.pK_ID } })
} else if (data.tasK_TYPE === 'POD_GATEOUT_FULL') {
// ROLLING_NOMINATION
this.$router.push({ path: '/commontaskmanage/POD_GATEOUT_FULL', query: { taskPKId: data.pkId } })
this.$router.push({ path: '/commontaskmanage/POD_GATEOUT_FULL', query: { taskPKId: data.pK_ID } })
} else {
//
this.$router.push({ path: '/commontaskmanage/BookingDetails', query: { taskPKId: data.pkId } })
this.$router.push({ path: '/commontaskmanage/BookingDetails', query: { taskPKId: data.pK_ID } })
}
},
filterType(val) {
const res = this.taskTypeList.filter((item, index) => {
return item.code === val
})
if (res.length > 0) {
return res[0].name
}
},
filterScource(val) {
const res = this.sourceList.filter((item, index) => {
return item.code === val
})
if (res.length > 0) {
return res[0].name
}
},
cancelFun() {},
//
removeFun() {
const select = this.$refs.xGrid.getCheckboxRecords()
const pkIdArr = select.map((item, index) => {
return item.pkId
return item.pK_ID
})
console.log('当前选中', pkIdArr)
if (pkIdArr.length === 0) {
@ -1569,7 +1692,7 @@ export default {
submitFun() {
const select = this.$refs.xGrid.getCheckboxRecords()
const pkIdArr = select.map((item, index) => {
return item.pkId
return item.pK_ID
})
console.log('当前选中', pkIdArr)
if (pkIdArr.length === 0) {
@ -1595,7 +1718,7 @@ export default {
downloadFun() {
const select = this.$refs.xGrid.getCheckboxRecords()
const pkIdArr = select.map((item, index) => {
return item.pkId
return item.pK_ID
})
console.log('当前选中', pkIdArr)
if (pkIdArr.length === 0) {
@ -1638,7 +1761,7 @@ export default {
//
const select = this.$refs.xGrid.getCheckboxRecords()
const pkIdArr = select.map((item, index) => {
return item.pkId
return item.pK_ID
})
if (pkIdArr.length === 0) {
this.$message.error('请选择数据')
@ -1661,7 +1784,7 @@ export default {
SendEmailFun() {
const select = this.$refs.xGrid.getCheckboxRecords()
const pkIdArr = select.map((item, index) => {
return item.pkId
return item.pK_ID
})
console.log('当前选中', pkIdArr)
if (pkIdArr.length === 0) {
@ -1704,7 +1827,7 @@ export default {
laraPaperCalc() {
const select = this.$refs.xGrid.getCheckboxRecords()
const pkIdArr = select.map((item, index) => {
return item.pkId
return item.pK_ID
})
if (pkIdArr.length === 0) {
this.$message.error('请选择数据')
@ -1732,7 +1855,7 @@ export default {
copyPrintFun() {
const select = this.$refs.xGrid.getCheckboxRecords()
const pkIdArr = select.map((item, index) => {
return item.pkId
return item.pK_ID
})
if (pkIdArr.length === 0) {
this.$message.error('请选择数据')
@ -1772,7 +1895,7 @@ export default {
copyDownloadFun() {
const select = this.$refs.xGrid.getCheckboxRecords()
const pkIdArr = select.map((item, index) => {
return item.pkId
return item.pK_ID
})
if (pkIdArr.length === 0) {
this.$message.error('请选择数据')
@ -1812,7 +1935,7 @@ export default {
printBatchFun() {
const select = this.$refs.xGrid.getCheckboxRecords()
const pkIdArr = select.map((item, index) => {
return item.pkId
return item.pK_ID
})
if (pkIdArr.length === 0) {
this.$message.error('请选择数据')
@ -1846,7 +1969,7 @@ export default {
laraPaperRegistFun() {
const select = this.$refs.xGrid.getCheckboxRecords()
const pkIdArr = select.map((item, index) => {
return item.pkId
return item.pK_ID
})
if (pkIdArr.length === 0) {
this.$message.error('请选择数据')
@ -1862,7 +1985,7 @@ export default {
},
taskDownloadFun(data) {
// DRAFT
this.DownloadTaskAttach(data.pkId, data.taskTitle)
this.DownloadTaskAttach(data.pK_ID, data.taskTitle)
}
// onDownloadErrClose() {
// console.log('')

@ -1,23 +1,23 @@
export default {
columns: [
{ type: 'checkbox', width: 60, noDraggable: true },
{ field: 'taskType', width: 100, title: '任务类型', showHeaderOverflow: true, sortable: true, slots: { default: 'taskType' } },
{ field: 'taskTitle', width: 200, title: '任务标题', showHeaderOverflow: true, sortable: true, slots: { default: 'taskTitle' } },
{ field: 'tasK_TYPE', width: 100, title: '任务类型', showHeaderOverflow: true, sortable: true, slots: { default: 'taskType' } },
{ field: 'tasK_TITLE', width: 200, title: '任务标题', showHeaderOverflow: true, sortable: true, slots: { default: 'taskTitle' } },
{ field: 'etd', width: 180, title: '开船日期', showHeaderOverflow: true, sortable: true },
{ field: 'vesselVoyno', width: 180, title: '船名/航次', showHeaderOverflow: true, sortable: true },
{ field: 'mblNo', width: 120, title: '提单号', showHeaderOverflow: true, sortable: true },
{ field: 'yardName', width: 100, title: '场站', showHeaderOverflow: true, sortable: true },
{ field: 'contaInfo', width: 100, title: '箱型箱量', showHeaderOverflow: true, sortable: true },
{ field: 'taskReqUserName', width: 100, title: '操作名称', showHeaderOverflow: true, sortable: true },
{ field: 'carrierId', width: 100, title: '船公司', showHeaderOverflow: true, sortable: true },
{ field: 'truckName', width: 100, title: '车队', showHeaderOverflow: true, sortable: true },
{ field: 'customerName', width: 100, title: '委托单位', showHeaderOverflow: true, sortable: true },
{ field: 'vesseL_VOYNO', width: 180, title: '船名/航次', showHeaderOverflow: true, sortable: true },
{ field: 'mbL_NO', width: 120, title: '提单号', showHeaderOverflow: true, sortable: true },
{ field: 'yarD_NAME', width: 100, title: '场站', showHeaderOverflow: true, sortable: true },
{ field: 'contA_INFO', width: 100, title: '箱型箱量', showHeaderOverflow: true, sortable: true },
{ field: 'tasK_REQ_USERNAME', width: 100, title: '操作名称', showHeaderOverflow: true, sortable: true },
{ field: 'carrieR_ID', width: 100, title: '船公司', showHeaderOverflow: true, sortable: true },
{ field: 'trucK_NAME', width: 100, title: '车队', showHeaderOverflow: true, sortable: true },
{ field: 'customeR_NAME', width: 100, title: '委托单位', showHeaderOverflow: true, sortable: true },
{ field: 'createdTime', width: 180, title: '接收时间', showHeaderOverflow: true, sortable: true },
{ field: 'status', width: 100, title: '任务状态', showHeaderOverflow: true, sortable: true, slots: { default: 'status' } },
{ field: 'taskNo', width: 150, title: '任务流水号', showHeaderOverflow: true, sortable: true },
{ field: 'taskSource', width: 100, title: '任务来源', showHeaderOverflow: true, sortable: true, slots: { default: 'taskScource' } },
{ field: 'tasK_NO', width: 150, title: '任务流水号', showHeaderOverflow: true, sortable: true },
{ field: 'tasK_SOURCE', width: 100, title: '任务来源', showHeaderOverflow: true, sortable: true, slots: { default: 'taskScource' } },
{ field: 'createdUserName', width: 100, title: '接收人', showHeaderOverflow: true, sortable: true },
{ field: 'complateDealName', width: 100, title: '完成方式', showHeaderOverflow: true, sortable: true },
{ field: 'completE_DEAL_NAME', width: 100, title: '完成方式', showHeaderOverflow: true, sortable: true },
{ field: 'operate', title: '操作', width: 100, noDraggable: true, slots: { default: 'operate' }, fixed: 'right', resizable: false }
],
columnsAllData: [

@ -48,28 +48,13 @@
v-if="ItemData.length == 0" />
<a-select
placeholder="请选择客户参数名称"
show-search
:filter-option="filterOption"
v-decorator="['itemCode', { rules: [{ required: true, message: '请选择客户参数名称!' }] }]"
:disabled="ItemCodeDisabled"
v-if="ItemData.length > 0 && !multiSelect && showSelect">
v-if="ItemData.length > 0 && !multiSelect">
<a-select-option v-for="item in ItemData" :key="item.id" :value="item.itemCode">
{{ item.itemName }}
</a-select-option>
</a-select>
<a-select
placeholder="请选择客户参数名称"
show-search
:filter-option="filterOption"
v-decorator="['itemCode', { rules: [{ required: true, message: '请选择客户参数名称!' }] }]"
:disabled="ItemCodeDisabled"
v-if="ItemData.length > 0 && !multiSelect && !showSelect">
<a-select-option v-for="item in ItemData" :key="item.id" :value="item.itemCode">
{{ item.itemName }} / {{ item.itemCode }}
</a-select-option>
</a-select>
<a-select
placeholder="请选择客户参数名称"
mode="multiple"
@ -108,7 +93,6 @@ import {
ParamItemList,
saveParamValue
} from '@/api/modular/main/DJYTenantParam'
import { mapGetters } from 'vuex'
import { DjyCustomerSuggest } from '@/api/modular/main/BookingLedger'
export default {
data() {
@ -133,7 +117,6 @@ export default {
},
typeData: [],
visible: false,
showSelect: true,
confirmLoading: false,
form: this.$form.createForm(this),
TenantData: [],
@ -146,12 +129,8 @@ export default {
mounted() {
},
computed: {
...mapGetters([
'carrierList','lineList'
])
},
methods: {
FnTypeD(data) {
let Rdata = ''
this.YWData.forEach(item => {
@ -162,9 +141,8 @@ export default {
return Rdata
},
FnChangeTypeCode(e) {
if (e !== 'CarrierProp' && e !== 'LaneProp') {
if (e) {
this.ItemCodeDisabled = false
this.showSelect = true
this.WTypeData.forEach(item => {
if (item.paraCode === e) {
this.multiSelect = item.multiSelect
@ -179,26 +157,6 @@ export default {
this.ItemData = res.data
})
}
if (e === 'CarrierProp') {
const arr = JSON.parse(JSON.stringify(this.carrierList))
this.showSelect = false
this.multiSelect = true
arr.forEach(item => {
item.itemName = item.cnName
item.itemCode = item.enName
})
this.ItemData = arr
}
if (e === 'LaneProp') {
const arr = JSON.parse(JSON.stringify(this.lineList))
this.showSelect = true
this.multiSelect = true
arr.forEach(item => {
item.itemName = item.name
item.itemCode = item.name
})
this.ItemData = arr
}
},
tenantIdSearch(value) {
if (value) {
@ -207,11 +165,6 @@ export default {
})
}
},
filterOption(input, option) {
return (
option.componentOptions.children[0].text.toLowerCase().indexOf(input.toLowerCase()) >= 0
);
},
handleChange(val) {
console.log(val)
},
@ -257,7 +210,6 @@ export default {
values.paramType = item.type
}
})
if (!this.multiSelect) {
const arr = []
this.ItemData.forEach(item => {
if (item.itemCode == values.itemCode) {
@ -268,16 +220,6 @@ export default {
if (arr.length === 0) {
values.itemName = values.itemCode
}
} else {
values.itemName = []
this.ItemData.forEach(item => {
values.itemCode.forEach(ite => {
if (ite === item.itemCode) {
values.itemName.push(item.itemName)
}
})
})
}
if (Array.isArray(values.itemCode)) {
values.itemCode = values.itemCode.join(',')
}

@ -29,11 +29,7 @@
</a-form-item>
</a-col>
<a-col :span="8">
<a-form-item
label="客户参数类别"
:labelCol="{ sm: { span: 8 } }"
:wrapperCol="{ sm: { span: 15 } }"
has-feedback>
<a-form-item label="客户参数类别" :labelCol="{ sm: { span: 8 } }" :wrapperCol="{ sm: { span: 15 } }" has-feedback>
<a-select
placeholder="请选择客户参数类别"
v-decorator="['paraCode', { rules: [{ required: true, message: '请选择客户参数类别!' }] }]"
@ -54,28 +50,13 @@
v-if="ItemData.length == 0" />
<a-select
placeholder="请选择客户参数名称"
show-search
:filter-option="filterOption"
v-decorator="['itemCode', { rules: [{ required: true, message: '请选择客户参数名称!' }] }]"
:disabled="ItemCodeDisabled"
v-if="ItemData.length > 0 && !multiSelect && showSelect">
v-if="ItemData.length > 0 && !multiSelect">
<a-select-option v-for="item in ItemData" :key="item.id" :value="item.itemCode">
{{ item.itemName }}
</a-select-option>
</a-select>
<a-select
placeholder="请选择客户参数名称"
show-search
:filter-option="filterOption"
v-decorator="['itemCode', { rules: [{ required: true, message: '请选择客户参数名称!' }] }]"
:disabled="ItemCodeDisabled"
v-if="ItemData.length > 0 && !multiSelect && !showSelect">
<a-select-option v-for="item in ItemData" :key="item.id" :value="item.itemCode">
{{ item.itemName }} / {{ item.itemCode }}
</a-select-option>
</a-select>
<a-select
placeholder="请选择客户参数名称"
mode="multiple"
@ -117,7 +98,6 @@ import {
ParamItemList,
saveParamValue
} from '@/api/modular/main/DJYTenantParam'
import { mapGetters } from 'vuex'
import { DjyCustomerSuggest } from '@/api/modular/main/BookingLedger'
export default {
data() {
@ -142,7 +122,6 @@ export default {
},
loading:false,
typeData: [],
showSelect: true,
visible: false,
ItemCodeLoad: false,
confirmLoading: false,
@ -157,11 +136,6 @@ export default {
},
mounted() {
},
computed: {
...mapGetters([
'carrierList', 'lineList'
])
},
methods: {
FnTypeD(data) {
@ -174,7 +148,7 @@ export default {
return Rdata
},
FnChangeTypeCode(e) {
if (e !== 'CarrierProp' && e !== 'LaneProp') {
if (e) {
this.ItemCodeDisabled = false
this.WTypeData.forEach(item => {
if (item.paraCode === e) {
@ -190,28 +164,6 @@ export default {
this.ItemData = res.data
})
}
if (e === 'CarrierProp') {
const arr = JSON.parse(JSON.stringify(this.carrierList))
this.showSelect = false
this.ItemCodeDisabled = false
this.multiSelect = false
arr.forEach(item => {
item.itemName = item.cnName
item.itemCode = item.enName
})
this.ItemData = arr
}
if (e === 'LaneProp') {
const arr = JSON.parse(JSON.stringify(this.lineList))
this.showSelect = true
this.ItemCodeDisabled = false
this.multiSelect = false
arr.forEach(item => {
item.itemName = item.name
item.itemCode = item.name
})
this.ItemData = arr
}
},
tenantIdSearch(value) {
if (value) {
@ -257,11 +209,6 @@ export default {
})
})
},
filterOption(input, option) {
return (
option.componentOptions.children[0].text.toLowerCase().indexOf(input.toLowerCase()) >= 0
);
},
handleSubmit() {
const {
form: { validateFields }
@ -286,7 +233,6 @@ export default {
values.paramType = item.type
}
})
if (!this.multiSelect) {
const arr = []
this.ItemData.forEach(item => {
if (item.itemCode == values.itemCode) {
@ -297,16 +243,6 @@ export default {
if (arr.length === 0) {
values.itemName = values.itemCode
}
} else {
values.itemName = []
this.ItemData.forEach(item => {
values.itemCode.forEach(ite => {
if (ite === item.itemCode) {
values.itemName.push(item.itemName)
}
})
})
}
if (Array.isArray(values.itemCode)) {
values.itemCode = values.itemCode.join(',')
}

@ -217,7 +217,8 @@
</template>
</vxe-grid>
</a-card>
<mskBookingOrder @handleSuccess="handleSuccess" @handleSuccessCopy="handleSuccessCopy" ref="mskBookingOrder"></mskBookingOrder>
<mskBookingOrder @handleSuccess="handleSuccess" @handleSuccessCopy="handleSuccessCopy" ref="mskBookingOrder">
</mskBookingOrder>
<a-modal title="输入复制数量" :visible="copyflag" :footer="null" @cancel="copyflag = false">
<a-form :form="copyMoreForm" :label-col="{ span: 5 }" :wrapper-col="{ span: 12 }" @submit="handleSubmitCopyMore">
<a-form-item label="数量">
@ -234,6 +235,13 @@
</a-form-item>
</a-form>
</a-modal>
<a-modal title="选择" :visible="addFlag" :footer="null" @cancel="addFlag = false">
<div class="change">
<div>马士基api订舱</div>
<div>马士基sport订舱</div>
<div>马士基edi订舱</div>
</div>
</a-modal>
</div>
</template>
<script>
@ -275,6 +283,7 @@ export default {
totalResult: 1
},
sendLoading: false,
addFlag: false,
form: {},
ColumnsQuery: [],
columns: [
@ -898,7 +907,8 @@ export default {
})
},
handleAdd() {
this.$refs.mskBookingOrder.init()
this.addFlag = true
// this.$refs.mskBookingOrder.init()
}
}
}
@ -938,4 +948,25 @@ export default {
top: 6px;
right: 25px;
}
.change {
display: flex;
div {
width: 120px;
height: 50px;
border: 1px solid #d1cfcf;
background-color: #fff;
color: rgb(105, 102, 102);
line-height: 50px;
text-align: center;
cursor: pointer;
transition: box-shadow 0.3s, background-color 0.3s;
margin-right: 20px;
}
div:hover {
box-shadow: 0px 0px 10px rgba(141, 140, 140, 0.5);
background-color: rgb(198, 238, 241);
}
}
</style>

@ -226,7 +226,17 @@
</a-form-item>
</a-col>
</a-row>
<a-row :gutter="24" >
<a-col :md="12" :sm="24">
<a-form-item
:labelCol="labelCol"
:wrapperCol="wrapperCol"
label="是否开启数据授权"
>
<a-switch checkedChildren="是" unCheckedChildren="否" v-decorator="['isEnableDataScope', { valuePropName: 'checked' }]"/><!-- defaultChecked -->
</a-form-item>
</a-col>
</a-row>
<a-row :gutter="24">
<a-col :md="12" :sm="24">
<a-form-item

@ -232,6 +232,17 @@
</a-form-item>
</a-col>
</a-row>
<a-row :gutter="24" >
<a-col :md="12" :sm="24">
<a-form-item
:labelCol="labelCol"
:wrapperCol="wrapperCol"
label="是否开启数据授权"
>
<a-switch checkedChildren="是" unCheckedChildren="否" v-decorator="['isEnableDataScope', { valuePropName: 'checked' }]"/><!-- defaultChecked -->
</a-form-item>
</a-col>
</a-row>
<a-row :gutter="24">
<a-col :md="12" :sm="24">
@ -377,7 +388,8 @@
link: record.link,
router: record.router,
sort: record.sort,
remark: record.remark
remark: record.remark,
isEnableDataScope: record.isEnableDataScope
}
)
this.form.getFieldDecorator('pid', { initialValue: record.pid })

@ -63,6 +63,7 @@
<a-button icon="up-circle">导入</a-button>
</a-upload>
<a-button v-if="hasPerm('sysUser:export')" icon="down-circle" @click="sysUserExport()"> </a-button>
<a-button icon="ordered-list" @click="handleAll" >批量授权 </a-button>
</template>
<span slot="sysEmpInfo" slot-scope="text">
@ -106,7 +107,7 @@
<a @click="$refs.userRoleForm.userRole(record)"></a>
</a-menu-item>
<a-menu-item v-if="hasPerm('sysUser:grantData')">
<a @click="$refs.userOrgForm.userOrg(record)"></a>
<a @click="$refs.userOrgForm.userOrg(record,'once')"></a>
</a-menu-item>
<a-menu-item v-if="hasPerm('sysUser:delete')">
<a-popconfirm placement="topRight" title="确认删除?" @confirm="() => sysUserDelete(record)">
@ -332,6 +333,13 @@ export default {
}
})
},
handleAll() {
if (this.selectedRowKeys.length == 0) {
this.$message.warning('请选择要操作的数据')
return false
}
this.$refs.userOrgForm.userOrg({}, 'all', this.selectedRowKeys)
},
handleSubmitReset() {
this.$refs.resetForm.validate(valid => {
if (valid) {

@ -5,8 +5,7 @@
:visible="visible"
:confirmLoading="confirmLoading"
@ok="handleSubmit"
@cancel="handleCancel"
>
@cancel="handleCancel">
<a-spin :spinning="formLoading">
<a-form :form="form">
<a-row>
@ -26,31 +25,26 @@
:auto-expand-parent="autoExpandParentMenu"
:tree-data="menuTreeData"
:selected-keys="selectedKeys"
:autoExpandParent="true"
:defaultExpandParent="true"
:defaultExpandAll="true"
:expandedKeys="expandedKeys"
:replaceFields="replaceMenuFields"
@select="onSelectMenu"
@check="onCheckMenu"
/>
@check="onCheckMenu" />
</a-form-item>
</a-col>
<a-col :span="12">
<a-form-item
v-show="SelectMenu"
label="授权范围"
:labelCol="labelCol"
:wrapperCol="wrapperCol"
has-feedback
>
<a-form-item v-show="SelectMenu" label="授权范围" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
<a-select
style="width: 100%"
placeholder="请选择授权范围"
v-decorator="['dataScopeType', { rules: [{ required: true, message: '请选择授权范围!' }] }]"
>
v-decorator="['dataScopeType', { rules: [{ required: true, message: '请选择授权范围!' }] }]">
<a-select-option
v-for="(item, index) in dataScopeTypeData"
:key="index"
:value="item.code"
@click="handleChange(item.code)"
>
@click="handleChange(item.code)">
{{ item.value }}
</a-select-option>
</a-select>
@ -70,8 +64,7 @@
:selected-keys="selectedKeys"
:replaceFields="replaceFields"
@expand="onExpand"
@check="onCheck"
/>
@check="onCheck" />
</a-form-item>
</div>
</a-col>
@ -104,7 +97,9 @@ export default {
sm: { span: 15 }
},
orgTreeData: [],
menuTreeData: [],
menuTreeData: [
],
expandedKeys: [],
expandedMenuKeys: [],
checkedKeys: [],
@ -132,36 +127,46 @@ export default {
SelectMenu: false,
SelectMenuId: '',
MeuncheckedKeys: [],
openType: '',
appList: [],
expandedKeys: [],
selectValue: null,
userIdList: [],
menuList: []
}
},
methods: {
//
userOrg(record) {
userOrg(record, type, arr) {
this.userEntity = record
this.visible = true
this.openType = type
//
this.sysDictTypeDropDown()
//
this.getMenuList()
//
if (type === 'once') {
this.SysDataUserMenuGetGrantData(record)
} else {
this.userIdList = arr
this.MeuncheckedKeys = []
this.GrantData = []
}
// //
// this.SysDataUserMenuGetGrantRightData(record)
},
//
SysDataUserMenuGetGrantData(record) {
SysDataUserMenuGetGrantData({ userid: record.id }).then(res => {
SysDataUserMenuGetGrantData({ userId: record.id }).then(res => {
this.GrantData = res.data
res.data.forEach(item => {
this.checkedMenuKeys.push(item.sysMenuId)
})
this.MeuncheckedKeys = this.checkedMenuKeys
//
SysDataUserMenuGetGrantRightData({ userid: record.id }).then(res => {
SysDataUserMenuGetGrantRightData({ userId: record.id }).then(res => {
this.GrantData.forEach(item => {
item.RightData = []
res.data.forEach(item2 => {
@ -196,12 +201,23 @@ export default {
this.orgTreeShow = false
//
this.checkedKeys = []
this.GrantData.forEach(item => {
if (item.sysMenuId == this.SelectMenuId) {
item.RightData = []
}
})
}
},
getRoleName(val) {
this.dataScopeTypeData.forEach(item => {
if (item.code == val) {
return item.value
}
})
},
handleChangeEdit() {
let Type = false
this.GrantData.forEach(item => {
console.log(item,this.SelectMenuId)
if (item.sysMenuId == this.SelectMenuId) {
item.isEdit = this.isEdit
Type = true
@ -254,7 +270,16 @@ export default {
this.SelectMenu = false
this.selectValue = value
const menuList = this.menuList.filter(f => f.appCode == value)
const arr = []
menuList.forEach(item => {
arr.push(item.id)
item.children.forEach(ite => {
arr.push(ite.id)
})
})
this.menuTreeData = menuList
this.expandedKeys = arr
console.log(menuList,arr)
},
onExpand(expandedKeys) {
this.expandedKeys = expandedKeys
@ -333,20 +358,36 @@ export default {
this.GrantData.forEach(item2 => {
if (item == item2.sysMenuId) {
if (!item2.dataScopeType) {
item2.dataScopeType = this.dataScopeTypeData[0].code
item2.dataScopeType = 4
}
childrens.push({ ...item2, menuId: item2.sysMenuId })
}
})
})
SysDataUserMenuGrantData({ userId: this.userEntity.id, childrens })
const data = {
childrens: childrens
}
if (this.openType === 'once') {
data.userIdList = [this.userEntity.id]
} else {
data.userIdList = this.userIdList
}
SysDataUserMenuGrantData(data)
.then(res => {
if (res.success) {
let childrens2 = []
childrens.forEach(item => {
childrens2 = [...childrens2, ...item.RightData]
})
SysDataUserMenuGrantRightData({ userId: this.userEntity.id, childrens: childrens2 })
const data1 = {
childrens: childrens2
}
if (this.openType === 'once') {
data1.userIdList = [this.userEntity.id]
} else {
data1.userIdList = this.userIdList
}
SysDataUserMenuGrantRightData(data1)
.then(res => {
if (res.success) {
this.$message.success('授权成功')

Loading…
Cancel
Save