vue选项卡,实现上一步,下一步,双向随时切换 ,及单向穿梭框
<template><div id="box"><div id="leftBox"><div id="leftContainer"><span @click="shouHideClick" style="display: inline-block;float: right;cursor: pointer;"><img style="
·



<template>
<div id="box">
<div id="leftBox">
<div id="leftContainer">
<span @click="shouHideClick" style="display: inline-block;float: right;cursor: pointer;">
<img style="width:24px; background: lightskyblue;" :src="imgSrc">
<!--<img src="/img/ztgl/vehicleMonitoring/function3.png">-->
</span>
<ul id="leftUl">
<li>
<div class="arrow" v-if="Index == 1" ></div><div class="marginLeft" :class="{active : Index == 1}" @click="changeNav(1)">选择类型</div>
</li>
<li>
<div class="arrow" v-if="Index == 2" ></div> <div class="marginLeft" :class="{active : Index == 2}" @click="changeNav(2)">货物规则</div>
</li>
<li>
<div class="arrow" v-if="Index == 3" ></div><div class="marginLeft" :class="{active : Index == 3}" @click="changeNav(3)">选择容器</div>
</li>
<li>
<div class="arrow" v-if="Index == 4" ></div><div class="marginLeft" :class="{active : Index == 4}" @click="changeNav(4)">设置参数</div>
</li>
<li>
<div class="arrow" v-if="Index == 5" ></div><div class="marginLeft" :class="{active : Index == 5}" @click="changeNav(5)">确定求解</div>
</li>
<li>
<div class="arrow" v-if="Index == 6" ></div><div class="marginLeft" :class="{active : Index == 6}" @click="changeNav(6)">查看结果</div>
</li>
</ul>
</div>
</div>
<div id="rightBox">
<div id="rightContainer" >
<ul>
<li>
<div v-if="Index == 1" style="padding-left: 140px;">
<ul v-for="(item,index) in goodsList" :key ="item.index" style="padding-bottom: 10px" @click='handleChangeColor(index)'>
<li class="smallBox" :class="{changeColor:key===index}">
<div>
<img class="rightImg" :src="item.img">
</div>
<div class="rightBox" >
<p class="smallTitle" >{{item.title}}</p>
<p class="rightDescription" >{{item.dec1}}</p>
<p class="rightDescription">{{item.dec2}}</p>
</div>
</li>
</ul>
<div>
<el-form ref="form" v-model="form" label-width="80px">
<el-form-item label="备注说明">
<el-input v-model="form.explain"></el-input>
</el-form-item>
</el-form>
</div>
<div style="position: absolute;bottom:15px;margin-left: 25%;">
<el-button type="primary" size="medium" @click="changeNav(2)">下一步 货物</el-button>
</div>
</div>
</li>
<li style="padding-top: 10px;">
<div v-if="Index == 2" class="line" style="margin-left: -15px;">
<template>
<el-radio-group v-model="goodsFrom" @change="radioChange">
<el-radio :label="1">录入货物明细和数量</el-radio>
<el-radio :label="2" >所有的货物按比例(套装货物算一种)</el-radio>
<el-radio :label="3" :disabled = 'radioDisable'>一部分货物数量固定 其他类型的能装多少算多少</el-radio>
</el-radio-group>
</template>
<div>
<div style="margin-left: 120px;position: absolute;display: flex;">
<el-upload
action="/api/jcda/goods/import"
:show-file-list="showFile"
:on-error="uploadError"
:on-success="uploadSuccess"
:headers="uploadHeader"
:file-list="fileList">
<el-dropdown placement="bottom-start">
<el-button type="success"
size="medium"
icon="el-icon-upload2"
plain
>导入<i class="el-icon-arrow-down el-icon--right"></i>
</el-button>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item @click.native="handleExportTemplate" style="padding: 5px 10px;text-align: center">模板下载</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</el-upload>
<div style="float: left;margin-left: 10px;">
<el-button size="medium" type="info" plain @click="handleChoose">选择已保存的数据</el-button>
<el-button size="medium" type="success" @click="handlePackageGoods"
:disabled = 'isPackageDisabled' plain>生成套装</el-button>
<el-button size="medium" type="danger" @click="handleDeleteGoods" plain>批量删除</el-button>
</div>
</div>
<edit-table :openIsDisabled = "isDisabled" id="editTable" style="display: block;" v-model="goodsitem" :tableHeader="goodPlug" @handleSelectionChange="handleSelectionChange">
<template slot-scope="scope" slot="menu">
<el-link type="danger" @click.native="delRow('goodsitem',scope.row)">删除</el-link>
</template>
<template slot="isFixQty" slot-scope="scope">
<el-select v-model="scope.row.isFixQty">
<el-option
v-for="item in itemList"
:key="item.name"
:label="item.name"
:value="item.name"
></el-option>
</el-select>
</template>
</edit-table>
</div>
<div style="position: absolute;bottom: 15px;margin-left: 22%;">
<el-button type="primary" size="medium" @click="changeNav(1)">上一步 选择类型</el-button>
<el-button type="primary" size="medium" @click="changeNav(3)">下一步 选择容器</el-button>
</div>
</div>
</li>
<li>
<div v-if="Index == 3" class="line">
<p class="rightDescription">
备注:如果容器数量为0,容器数量由系统根据算法确定,非0则说该容器最多能使用的数量
</p>
<div style="display: flex;padding-top: 10px;">
<div style="color: #3c4353;font-weight: 400">被选容器</div>
<div style="padding-left:255px;color: #3c4353;font-weight: 400">已选容器</div>
</div>
<div style="display: flex;padding:5px 20px 20px 0px;">
<div class="leftTransferBox" >
<div v-for="(item,i) in containerList" :key ="item.i" style="padding:5px 15px 5px 15px" @click='handleChangeContainer(i)'>
<div :class="{changeColor:cantainerKey===i}" style="padding: 10px 15px 10px 35px;border: 1px solid #d9d9d9;">{{item.name}}</div>
</div>
</div>
<div style="width: 80px;display: flex;flex-direction: column;padding: 15px;line-height: 180px; ">
<div> <el-button @click="changeLeft" type="primary" plain icon="el-icon-arrow-right" size="medium"></el-button></div>
<!--<div> <el-button @click="changeRight" type="primary" plain icon="el-icon-arrow-left" size="medium"></el-button></div>-->
</div>
<div class="rightTransferBox" style="padding: 10px;">
<avue-crud ref="crud" :option="myOption" :data="containerItem" >
<template slot-scope="scope" slot="menu">
<el-button icon="el-icon-delete" size="small" @click="handleDelete(scope.row)">删除</el-button>
</template>
</avue-crud>
</div>
</div>
<div style="position: absolute;bottom: 15px;margin-left: 22%;">
<el-button type="primary" size="medium" @click="changeNav(2)">上一步 货物规则</el-button>
<el-button type="primary" size="medium" @click="changeNav(4)">下一步 设置</el-button>
</div>
</div>
</li>
<li>
<div v-if="Index == 4" class="line">
<div>
<p class="rightDescription" style="font-size: 15px;">堆码方式(相同装卸口相同货物相邻摆放)</p>
</div>
<div>
<avue-form ref="form" v-model="parama" :option="paramaOption">
<template slot-scope="scope" slot="lengthWay">
<div>
<el-input-number v-model="parama.lengthWay" placeholder="请输入长度方向" :min="0"></el-input-number>
</div>
</template>
<template slot-scope="scope" slot="widthWay">
<div>
<el-input-number v-model="parama.widthWay" placeholder="请输入宽度方向" :min="0"></el-input-number>
</div>
</template>
<template slot-scope="scope" slot="heightWay">
<div>
<el-input-number v-model="parama.heightWay" placeholder="请输入高度方向" :min="0"></el-input-number>
</div>
</template>
<template slot-scope="scope" slot="lengthType">
<div>
<el-input-number v-model="parama.lengthType" placeholder="请输入长度方式" :min="0"></el-input-number>
</div>
</template>
<template slot-scope="scope" slot="widthType">
<div>
<el-input-number v-model="parama.widthType" placeholder="请输入宽度方式" :min="0"></el-input-number>
</div>
</template>
<template slot-scope="scope" slot="heightType">
<div>
<el-input-number v-model="parama.heightType" placeholder="请输入顶部" :min="0"></el-input-number>
</div>
</template>
</avue-form>
</div>
<div style="position: absolute;bottom: 15px; margin-left: 22%;">
<el-button type="primary" size="medium" @click="changeNav(3)">上一步 选择容器</el-button>
<el-button type="primary" size="medium" @click="changeNav(5)">下一步 确定求解</el-button>
</div>
</div>
</li>
<li>
<div v-if="Index == 5" class="line">
<div>
<avue-form ref="form" v-model="solution" :option="solutionOption">
<template slot-scope="scope" slot="lengthWay">
<div>
<el-input-number :disabled="true" v-model="solution.lengthWay" placeholder="请输入长度方向" :min="0"></el-input-number>
</div>
</template>
<template slot-scope="scope" slot="widthWay">
<div>
<el-input-number :disabled="true" v-model="solution.widthWay" placeholder="请输入宽度方向" :min="0"></el-input-number>
</div>
</template>
<template slot-scope="scope" slot="heightWay">
<div>
<el-input-number :disabled="true" v-model="solution.heightWay" placeholder="请输入高度方向" :min="0"></el-input-number>
</div>
</template>
<template slot-scope="scope" slot="lengthType">
<div>
<el-input-number :disabled="true" v-model="solution.lengthType" placeholder="请输入长度方式" :min="0"></el-input-number>
</div>
</template>
<template slot-scope="scope" slot="widthType">
<div>
<el-input-number :disabled="true" v-model="solution.widthType" placeholder="请输入宽度方式" :min="0"></el-input-number>
</div>
</template>
<template slot-scope="scope" slot="heightType">
<div>
<el-input-number :disabled="true" v-model="solution.heightType" placeholder="请输入顶部" :min="0"></el-input-number>
</div>
</template>
<template slot-scope="scope" slot="goodListDetail">
<avue-crud style="width: 100%;" ref="crud" :option="solutionOptionList" :data="solutionData" >
</avue-crud>
</template>
</avue-form>
</div>
<div style="position: absolute;bottom: 15px; margin-left: 22%;">
<el-button type="primary" size="medium" @click="changeNav(4)">上一步 设置参数</el-button>
<el-button type="primary" size="medium" @click="matlabCalculation()" v-loading.fullscreen.lock="fullscreenLoading" element-loading-background="rgba(0, 0, 0, 0.8)" element-loading-text="后台求解中">后台求解</el-button>
<el-button type="primary" size="medium" @click="changeNav(6)" :disabled="changeNav6" >下一步 查看结果</el-button>
</div>
</div>
</li>
<li>
<div v-if="Index == 6" class="line">
<div style="width: 100%; padding: 0 20px; line-height: 50px;font-weight: 400;border: 1px solid #e9e9e9; height: 50px;background: #ffffcc;">
<p>
总柜数:2 总装载率:29.73% 总柜型数:20GP*2 货物总箱数:4
</p>
</div>
<div style="display: flex; margin-top: 5px;">
<div class="leftResult">
<!--<test :title='title'></test>-->
</div>
<div class="rightResult">
<el-tree :data="treeData" :default-expand-all="true" :props="defaultProps" ></el-tree>
</div>
</div>
</div>
</li>
</ul>
</div>
</div>
</div>
</template>
<script>
import editTable from '@/views/bussiness/components/editTable';
import {uploadHead} from '@/util/auth';
// import {exportTemplate} from "@/api/jcda/goods";
// import {getContainer,matlabCalculation} from "@/api/result/steps";
var DIC = {
VAILD: [{
label: '当空间没有利用时,可以平铺',
value: 'true'
}],
StackingMode: [{
label: '相同的货物可以堆叠',
value: 1
}, {
label: '接触面相同尺寸的货物可以堆叠',
value: 2
}],
StackingLayer:[
{
label: '相同的货物算层数',
value: 1
}, {
label: '所有的货物算层数',
value:2
},
]
}
export default {
name: "steps",
components: {
editTable
// ,test,packageGoods,goodsList
},
data() {
return {
Index: 1,
isDisabled:false,
fileList: [],
imgSrc:"/img/images2/down-1.png",
isSaveMessage:'fromSteps',
radioDisable:false,
isPackageDisabled:false,
showFile:false,
itemList:[
{
id:'1',
name:'固定'
},
{
id:'2',
name:'动态'
}
],
uploadHeader:uploadHead(),
formTitle:'生成套装货物',
myTitle:'选择已保存的货物',
form:{},
//-1 选择类型时,默认不选中
key:-1,
cantainerKey:-1,
num:1,
goodsFrom: 1,
solution:{},
packageGoodsData:[],
multipleSelection:[],
packageGoodsGuid:'',
dialogFlagToUp: false,
showGoodsList:false,
cjKind:{},
fullscreenLoading:false,
changeNav6:true,
solutionOption:{
emptyBtn: false,
submitBtn: false,
column: [
{
label: "装箱模式",
prop: "containerWay",
span: 24,
// labelWidth:170,
disabled:true,
type:'input',
},
{
label: "货物清单",
prop: "goodListDetail",
// labelWidth:170,
span: 24,
formslot: true,
},
{
label: "选择柜型",
prop: "containerType",
span: 24,
disabled:true,
type:'input',
// labelWidth:170,
},
{
label: "是否平铺",
prop: "pingpu",
span: 24,
disabled:true,
type: "checkbox",
// labelWidth:170,
dicData: DIC.VAILD,
}, {
label: "堆叠层数设置(包含本层)",
prop: "stackingLayer",
span: 24,
disabled:true,
type:'radio',
labelWidth:190,
dicData: DIC.StackingLayer,
},
],
group:[
{
icon:'el-icon-s-unfold',
label: '摆放间隙设置',
prop: 'group1',
column: [ {
label: "长度方向(CM)",
prop: "lengthWay",
disabled:true,
formslot:true,
labelWidth:120,
span: 8,
},
{
label: "宽度方向(CM)",
prop: "widthWay",
disabled:true,
formslot:true,
labelWidth:120,
span: 8,
},
{
label: "高度方向(CM)",
disabled:true,
formslot:true,
labelWidth:120,
prop: "heightWay",
span: 8,
},]
},{
icon:'el-icon-box',
label: '容器壁间隙',
prop: 'group2',
column: [ {
label: "长度方式(CM)",
prop: "lengthType",
labelWidth:120,
disabled:true,
formslot:true,
span: 8,
},
{
label: "高度方式(CM)",
prop: "widthType",
span: 8,
labelWidth:120,
disabled:true,
formslot:true,
},
{
label: "顶部(CM)",
prop: "heightType",
labelWidth:120,
formslot:true,
disabled:true,
span: 8,
},]
}
]
},
parama:{},
paramaOption:{
emptyBtn: false,
submitBtn: false,
column: [
{
label: "堆放方式",
prop: "stackingMode",
span: 24,
labelWidth:200,
type:'radio',
dicData: DIC.StackingMode,
},
{
label: "是否平铺?",
prop: "pingpu",
span: 24,
labelWidth:200,
type: "checkbox",
dicData: DIC.VAILD,
}, {
label: "堆叠层数设置(包含本层)",
prop: "stackingLayer",
span: 24,
type:'radio',
labelWidth:200,
dicData: DIC.StackingLayer,
},
],
group:[
{
icon:'el-icon-s-unfold',
label: '摆放间隙设置',
prop: 'group1',
column: [ {
label: "长度方向(CM)",
prop: "lengthWay",
formslot:true,
labelWidth:120,
span: 8,
},
{
label: "宽度方向(CM)",
prop: "widthWay",
labelWidth:120,
formslot:true,
span: 8,
},
{
label: "高度方向(CM)",
labelWidth:120,
prop: "heightWay",
formslot:true,
span: 8,
},]
},{
icon:'el-icon-box',
label: '容器壁间隙',
prop: 'group2',
column: [ {
label: "长度方式(CM)",
prop: "lengthType",
labelWidth:120,
formslot:true,
span: 8,
},
{
label: "高度方式(CM)",
prop: "widthType",
labelWidth:120,
formslot:true,
span: 8,
},
{
label: "顶部(CM)",
prop: "heightType",
labelWidth:120,
formslot:true,
span: 8,
},]
}
]
},
goodsitem: [],
changeColor:false,
containerList:[
{
id:'1',
name:'24尺柜',
},{
id:'2',
name:'48尺柜',
}
],
chooseContainer:[],
goodPlug:[
{
label: "套装货物",
prop: "item",
align: 'center',
notBlank: false,
width: 130,
type: "myDisable",
},
{
label: "货物名称",
prop: "goodsNo",
align: 'center',
notBlank: true,
width: 100,
},
{
label: "货物说明",
prop: "goodsDesc",
align: 'center',
notBlank: true,
width: 120,
},
{
label: "数量",
prop: "qty",
align: 'right',
notBlank: true,
type: "int",
width: 110,
},
{
label: "长(CM)",
prop: "l",
align: 'right',
notBlank: true,
type: "int",
width: 110,
},
{
label: "宽(CM)",
prop: "w",
align: 'right',
notBlank: true,
type: "int",
width: 110,
},
{
label: "高(CM)",
prop: "h",
align: 'right',
notBlank: true,
width: 110,
type: "int",
},
{
label: "重量(KG)",
prop: "gwt",
align: 'right',
notBlank: true,
width: 110,
disabled: true,
type: "int",
},
{
label: "承重级别",
prop: "gwtLevel",
align: 'right',
width: 120,
type: "int",
},
{
label: "先后顺序",
prop: "shunxu",
align: 'right',
width: 120,
type: "int",
},
{
label: "堆叠层数",
prop: "layer",
align: 'right',
notBlank: true,
width: 110,
type: "int",
},{
label: "订单号",
prop: "order",
align: 'right',
width: 110,
notBlank: true,
type: "int",
},],
goodPlug1: [
{
label: "套装货物",
prop: "item",
align: 'center',
notBlank: true,
width: 130,
type: "myDisable",
},
{
label: "货物名称",
prop: "goodsNo",
align: 'center',
notBlank: true,
width: 100,
},
{
label: "货物说明",
prop: "goodsDesc",
align: 'center',
notBlank: true,
width: 120,
},
{
label: "数量",
prop: "qty",
align: 'right',
notBlank: true,
type: "int",
width: 120,
},
{
label: "长(CM)",
prop: "l",
align: 'right',
notBlank: true,
type: "int",
width: 120,
},
{
label: "宽(CM)",
prop: "w",
align: 'right',
notBlank: true,
type: "int",
width: 120,
},
{
label: "高(CM)",
prop: "h",
align: 'right',
notBlank: true,
width: 120,
type: "int",
},
{
label: "重量(KG)",
prop: "gwt",
align: 'right',
notBlank: true,
width: 120,
disabled: true,
type: "int",
},
{
label: "承重级别",
prop: "gwtLevel",
align: 'right',
width: 120,
type: "int",
},
{
label: "先后顺序",
prop: "shunxu",
align: 'right',
width: 120,
type: "int",
},
{
label: "堆叠层数",
prop: "layer",
align: 'right',
type: "int",
notBlank: true,
width: 100,
},{
label: "订单号",
prop: "order",
align: 'right',
width: 80,
notBlank: true,
type: "int",
},
],
goodPlug2: [
{
label: "套装货物",
prop: "item",
align: 'center',
notBlank: true,
width: 130,
type: "myDisable",
},
{
label: "货物名称",
prop: "goodsNo",
align: 'center',
notBlank: true,
width: 100,
},
{
label: "货物说明",
prop: "goodsDesc",
align: 'center',
notBlank: true,
width: 120,
},
{
label: "比例%",
prop: "rate",
align: 'right',
type: "int",
notBlank: true,
width: 120,
},
{
label: "长(CM)",
prop: "l",
align: 'right',
notBlank: true,
type: "int",
width: 120,
},
{
label: "宽(CM)",
prop: "w",
align: 'right',
notBlank: true,
type: "int",
width: 120,
},
{
label: "高(CM)",
prop: "h",
align: 'right',
notBlank: true,
width: 120,
type: "int",
},
{
label: "重量(KG)",
prop: "gwt",
align: 'right',
notBlank: true,
width: 120,
disabled: true,
type: "int",
},
{
label: "承重级别",
prop: "gwtLevel",
align: 'right',
width: 120,
type: "int",
},
{
label: "先后顺序",
prop: "shunxu",
align: 'right',
width: 120,
type: "int",
},
{
label: "堆叠层数",
prop: "layer",
align: 'center',
notBlank: true,
width: 100,
type: "int",
},{
label: "订单号",
prop: "order",
align: 'right',
width: 80,
type: "int",
notBlank: true,
},
],
goodPlug3: [
{
label: "套装货物",
prop: "item",
align: 'center',
notBlank: true,
width: 130,
type: "myDisable",
},
{
label: "货物名称",
prop: "goodsNo",
align: 'center',
notBlank: true,
width: 100,
},
{
label: "货物说明",
prop: "goodsDesc",
align: 'center',
notBlank: true,
width: 120,
},
{
label: "是否固定数量",
prop: "isFixQty",
align: 'center',
notBlank: true,
width: 120,
},
{
label: "数量",
prop: "qty",
align: 'right',
notBlank: true,
type: "int",
width: 120,
},
{
label: "长(CM)",
prop: "l",
align: 'right',
notBlank: true,
type: "int",
width: 120,
},
{
label: "宽(CM)",
prop: "w",
align: 'right',
notBlank: true,
type: "int",
width: 120,
},
{
label: "高(CM)",
prop: "h",
align: 'right',
notBlank: true,
width: 120,
type: "int",
},
{
label: "重量(KG)",
prop: "gwt",
align: 'right',
notBlank: true,
width: 120,
disabled: true,
type: "int",
},
{
label: "承重级别",
prop: "gwtLevel",
align: 'right',
width: 120,
type: "int",
},
{
label: "先后顺序",
prop: "shunxu",
align: 'right',
width: 120,
type: "int",
},
{
label: "堆叠层数",
prop: "layer",
align: 'right',
notBlank: true,
width: 100,
type: "int",
},{
label: "订单号",
prop: "order",
align: 'right',
width: 80,
notBlank: true,
type: "int",
},
],
goodPlug4:[
{
label: "套装货物",
prop: "item",
align: 'center',
notBlank: false,
width: 130,
type: "myDisable",
},
{
label: "货物名称",
prop: "goodsNo",
align: 'center',
notBlank: true,
width: 100,
},
{
label: "货物说明",
prop: "goodsDesc",
align: 'center',
notBlank: true,
width: 120,
},
{
label: "套装说明",
prop: "goodsDesc",
align: 'center',
notBlank: true,
width: 120,
},
{
label: "比例%",
prop: "rate",
align: 'right',
type: "int",
notBlank: true,
width: 120,
},
{
label: "数量",
prop: "qty",
align: 'right',
notBlank: true,
type: "int",
width: 120,
},
{
label: "长(CM)",
prop: "l",
align: 'right',
notBlank: true,
type: "int",
width: 120,
},
{
label: "宽(CM)",
prop: "w",
align: 'right',
notBlank: true,
type: "int",
width: 120,
},
{
label: "高(CM)",
prop: "h",
align: 'right',
notBlank: true,
width: 120,
type: "int",
},
{
label: "重量(KG)",
prop: "gwt",
align: 'right',
notBlank: true,
width: 120,
disabled: true,
type: "int",
},
{
label: "承重级别",
prop: "gwtLevel",
align: 'right',
width: 120,
type: "int",
},
{
label: "先后顺序",
prop: "shunxu",
align: 'right',
width: 120,
type: "int",
},
{
label: "堆叠层数",
prop: "layer",
align: 'right',
notBlank: true,
type: "int",
width: 100,
},{
label: "订单号",
prop: "order",
align: 'right',
width: 80,
type: "int",
notBlank: true,
},],
goodsList:[
{
// img:require('../../../public/img/bg/icon1.png'),
title:'单柜单货,求货物最多',
dec1:'1种规格的货柜,单规格的货物。',
dec2:"货柜数量固定,求最多能装载多少货物?",
val: "1"
},
{
// img:require('../../../public/img/bg/icon2.png'),
title:'单柜单货,求用柜最少',
dec1:'1种规格的货柜,单规格的货物。',
dec2:"货物数量固定,求最少用到多少柜?",
val: "2"
},
{
// img:require('../../../public/img/bg/icon3.png'),
title:'单柜多货,求货物最多',
dec1:'1种规格的货柜,多规格的货物。',
dec2:"货柜数量固定,求最多能装载多少货物?",
val: "3"
},
{
// img:require('../../../public/img/bg/icon4.png'),
title:'单柜多货,求用柜最少',
dec1:'1种规格的货柜,多规格的货物。',
dec2:"货物数量固定,求最少用到多少柜?",
val: "4"
},{
// img:require('../../../public/img/bg/icon5.png'),
title:'多柜多货',
dec1:'多种规格货柜,多规格的货物。',
dec2:"货物数量固定,求最少用到多少柜?",
val: "5"
},
],
myOption: {
keyId: 'id',
border: true,
addBtn: false,
editBtn: false,
addRowBtn: false,
saveBtn:false,
cancelBtn:false,
menuWidth:80,
// height:230,
menu:true,
delBtn:false,
cellBtn: false,
column: [{
label: '容器名称',
prop: 'name',
}, {
label: '容器数量',
prop: 'qty',
type: 'number',
cell: true,
mock:{
type:'number',
},
minRows: 0,
maxRows: 1000000,
},]
},
solutionData:[
{
goodsNo:'桌子',
address:'深圳龙岗',
qty:'100'
},
{
goodsNo:'桌子',
address:'深圳龙岗',
qty:'100'
}
],
solutionOptionList:{
border: true,
addBtn: false,
editBtn: false,
height:100,
menu:false,
column: [{
label: '货物名称',
prop: 'goodsNo',
},
{
label: '装卸点',
prop: 'address',
},
{
label: '数量',
align:'center',
minWidth:100,
prop: 'qty',
},]
},
containerItem:[
// {
// id:0,
// name:'张三',
// sex:1,
// $cellEdit:true
// },{
// id:1,
// name:'李四',
// sex:0,
// }
],
defaultProps: {
children: 'children',
label: 'label'
},
treeData:[
{
label: '20GP 65%',
children: [
{
label: 'No 1 货物A 20',
},
{
label: 'No 2 货物B 15',
},
{
label: 'No 3 货物C 30',
},
]
},
{
label: '40GP 35%',
children: [
{
label: 'No 1 货物A 20',
},
{
label: 'No 2 货物B 15',
},
{
label: 'No 3 货物C 30',
},
]
},
]
}
},
mounted(){
this.getStorage()
this.getLableTitle()
this.getContainer()
},
methods: {
getLableTitle(){
console.log(this.paramaOption.group)
if(this.lengthUnit){
this.solutionOption.group[0].column[0].label = `长度方向(${sessionStorage.getItem("lengthUnit")})`
this.solutionOption.group[0].column[1].label = `宽度方向(${sessionStorage.getItem("lengthUnit")})`
this.solutionOption.group[0].column[2].label = `高度方向(${sessionStorage.getItem("lengthUnit")})`
this.solutionOption.group[1].column[0].label = `长度方式(${sessionStorage.getItem("lengthUnit")})`
this.solutionOption.group[1].column[1].label = `高度方式(${sessionStorage.getItem("lengthUnit")})`
this.solutionOption.group[1].column[2].label = `顶部(${sessionStorage.getItem("lengthUnit")})`
this.paramaOption.group[0].column[0].label = `长度方向(${sessionStorage.getItem("lengthUnit")})`
this.paramaOption.group[0].column[1].label = `宽度方向(${sessionStorage.getItem("lengthUnit")})`
this.paramaOption.group[0].column[2].label = `高度方向(${sessionStorage.getItem("lengthUnit")})`
this.paramaOption.group[1].column[0].label = `长度方式(${sessionStorage.getItem("lengthUnit")})`
this.paramaOption.group[1].column[1].label = `高度方式(${sessionStorage.getItem("lengthUnit")})`
this.paramaOption.group[1].column[2].label = `顶部(${sessionStorage.getItem("lengthUnit")})`
}else{
this.solutionOption.group[0].column[0].label = `长度方向(CM)`
this.solutionOption.group[0].column[1].label = `宽度方向(CM)`
this.solutionOption.group[0].column[2].label = `高度方向(CM)`
this.solutionOption.group[1].column[0].label = `长度方式(CM)`
this.solutionOption.group[1].column[1].label = `高度方式(CM)`
this.solutionOption.group[1].column[2].label = `顶部(CM)`
this.paramaOption.group[0].column[0].label = `长度方向(CM)`
this.paramaOption.group[0].column[1].label = `宽度方向(CM)`
this.paramaOption.group[0].column[2].label = `高度方向(CM)`
this.paramaOption.group[1].column[0].label = `长度方式(CM)`
this.paramaOption.group[1].column[1].label = `高度方式(CM)`
this.paramaOption.group[1].column[2].label = `顶部(CM)`
}
},
getStorage(){
this.lengthUnit = sessionStorage.getItem("lengthUnit")
},
//隐藏展示
shouHideClick(){
if(this.imgSrc.endsWith("/down-1.png")){
document.getElementById("leftBox").style.width="5%";
document.getElementById("leftUl").style.display='none';
document.getElementById("rightBox").style.width="95%";
// document.getElementById("rightContainer").style.width="95%";
this.imgSrc ="/img/images2/down-2.png";
}else{
document.getElementById("leftBox").style.width="20%";
document.getElementById("rightBox").style.width="80%";
// document.getElementById("leftContainer").style.width="20%";
document.getElementById("leftUl").style.display="block";
// document.getElementById("rightContainer").style.width="80%";
this.imgSrc ="/img/images2/down-1.png";
}
},
FilterData(a,b) {
var result = new Array();
var c=b.toString();
for(var i=0;i<a.length;i++)
{
if(c.indexOf(a[i].toString())>-1)
{
for(var j=0;j<b.length;j++)
{
if(a[i]==b[j])
{
result.push(a[i]);
break;
}
}
}
}
return result;
},
getMsgFormSon(data){
// console.log(data)
// console.log(this.goodsitem)
// console.log(this.FilterData(data,this.goodsitem))
let repeatData = this.FilterData(data,this.goodsitem)
this.goodsitem = this.goodsitem.concat(data)
for (var i=0; i<repeatData.length; i++) {
for (var j = 0; j < this.goodsitem.length; j++) {
if (repeatData[i].index == this.goodsitem[j].index) {
this.goodsitem.splice(j, 1);
break;
}
}
}
},
getMsgFromPackage(data){
console.log(data)
},
getMsgFromPackage2(data){
console.log(data)
console.log(this.multipleSelection)
for(let i = 0; i < this.multipleSelection.length; i++){
this.multipleSelection[i].item = data.goodsNo
this.multipleSelection[i].goodsDesc = data.goodsDesc
}
console.log(this.multipleSelection)
},
// getLableTitle(){
// console.log(this.goodPlug,'我要疯了啦啦啦啦啦啦啦啦啦啦了')
// if(this.lengthUnit){
// this.goodPlug[4].label = `长(${sessionStorage.getItem("lengthUnit")})`
// this.goodPlug[5].label = `宽(${sessionStorage.getItem("lengthUnit")})`
// this.goodPlug[6].label = `高(${sessionStorage.getItem("lengthUnit")})`
// }else{
// this.goodPlug[4].label = `长(CM)`
// this.goodPlug[5].label = `宽(CM)`
// this.goodPlug[6].label = `高(CM)`
// }
// },
// getStorage(){
// console.log(sessionStorage.getItem("lengthUnit"))
// this.lengthUnit = sessionStorage.getItem("lengthUnit")
// },
handleDelete(val){
console.log(val)
this.containerItem.splice(val,1)
},
//批量删除
handleDeleteGoods(){
console.log(this.multipleSelection)
console.log(this.goodsitem)
for (var i=0; i<this.multipleSelection.length; i++) {
for (var j = 0; j < this.goodsitem.length; j++) {
if (this.multipleSelection[i].index == this.goodsitem[j].index) {
this.goodsitem.splice(j, 1);
break;
}
}
}
},
handleExportTemplate(){
exportTemplate(this.query).then(res => {
this.fileDownload(res.data,"货物档案导入模板.xlsx");
});
},
uploadSuccess(response){
this.$message({
type: "success",
message: response.msg
});
this.onLoad(this.page);
},
uploadError(response){
let message = response.message;
let parse = JSON.parse(message);
this.$message({
type: "error",
message: parse.msg
});
},
//第二部 单选框改变 切换editTable
radioChange(){
this.goodsitem = []
if(this.goodsFrom === '1'){
this.goodPlug = this.goodPlug1
}
if(this.goodsFrom === '2'){
if(this.cjKind.title === '单柜单货,求货物最多'
|| this.cjKind.title === '单柜单货,求用柜最少'){
this.$message.warning('提醒:你选择的是单货类型,所以你只能录入1种货物')
return
}else{
this.goodPlug = this.goodPlug2
}
}else if (this.goodsFrom === '3'){
//按一部分货物数据固定,其他的能装多少算多少 ,所以不能选择第三个radio
if(this.cjKind.title === '单柜单货,求货物最多'
|| this.cjKind.title === '单柜单货,求用柜最少'){
this.$message.warning('提醒:你选择的是单货类型,所以你只能录入1种货物')
return
}else{
this.goodPlug = this.goodPlug3
}
}
},
//选择已保存的数据
handleChoose(){
this.myTitle = '选择已保存的货物'
this.showGoodsList = true;
},
dialogCloseSuccess(){
this.showGoodsList = false;
this.onLoad(this.page)
},
handleSelectionChange(val){
console.log(val)
this.multipleSelection = val
},
selectionChange(list) {
this.selectionList = list;
},
handlePackageGoods(){
// console.log(this.multipleSelection)
if (this.multipleSelection.length < 2) {
this.$message.warning("请选择至少2条数据");
return;
}
this.goodPlug = this.goodPlug4
this.formTitle = '生成套装货物'
this.dialogFlagToUp = true;
this.packageGoodsData = this.multipleSelection
this.isSaveMessage = 'fromSteps'
this.packageGoodsGuid = "";
},
dialogCloseToUp() {
this.showGoodsList = false;
},
dialogCloseToUpSuccess () {
this.dialogFlagToUp = false;
this.onLoad(this.page)
},
delRow(type, row) {
if (row.id) {
this.$confirm("确认删除改行数据吗?", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
}).then(() => {
this[`${type}Del`].push(row.id);
this[`${type}`].splice(row.index, 1)
});
} else {
this[`${type}`].splice(row.index, 1)
}
},
onLoad(){
console.log(this.cantainerKey)
},
getContainer(){
//1集装箱2 托盘3纸箱
getContainer("1").then(res => {
let myContainerName = []
for (let i = 0 ; i < res.data.data.length; i++){
myContainerName.push({id:i+1,name:res.data.data[i].noName,guid:res.data.data[i].guid});
}
console.log(myContainerName)
this.containerList = myContainerName
});
},
changeLeft(){
console.log(this.cjKind)
console.log(this.containerItem)
console.log( this.chooseContainer)
//判断是否是单柜类型
if(this.cjKind.title === '单柜单货,求货物最多'
|| this.cjKind.title === '单柜单货,求用柜最少'
|| this.cjKind.title === '单柜多货,求货物最多'
|| this.cjKind.title === '单柜多货,求用柜最少') {
if(this.containerItem.length > 0){
this.$message.warning('提醒:你选择的是单柜类型,所以你只能录入一种容器')
return
}
}
//每种规格的集装箱只能选择一次,可更改数量
if(this.containerItem.length > 0){
for(let i = 0; i < this.chooseContainer.length; i++){
for(let j = 0; j < this.containerItem.length; j++){
console.log(this.chooseContainer[i].name)
console.log(this.containerItem[j].name)
if(this.chooseContainer[i].name == this.containerItem[j].name){
this.$message({
message: '已有该规格的容器了',
type: 'warning'
});
return
}
}
this.chooseContainer[0].$cellEdit = true
this.containerItem.push(this.chooseContainer[0])
}
}else{
this.chooseContainer[0].$cellEdit = true
this.containerItem.push(this.chooseContainer[0])
}
console.log(this.containerItem)
},
handleChangeContainer(val){
console.log(val)
console.log(this.cantainerKey)
this.chooseContainer = []
this.cantainerKey = val
console.log(this.containerList[val])
if( this.cjKind.title === '单柜单货,求用柜最少'
|| this.cjKind.title === '单柜多货,求用柜最少'){
this.containerList[val].qty = 0
}else{
this.containerList[val].qty = 1
}
this.chooseContainer.push(this.containerList[val])
console.log( this.chooseContainer)
},
handleChangeColor(val){
console.log(val)
console.log(this.goodsList[val])
this.cjKind = this.goodsList[val]
this.key = val
},
changeNav(index) {
console.log(index)
console.log(this.form.explain)
console.log(this.cjKind)
if (index == 1) {
this.Index = 1;
} else if (index == 2) {
this.Index = 2;
} else if (index == 3) {
this.Index = 3
}else if (index == 4) {
this.Index = 4
}else if (index == 6) {
alert('2122112')
this.Index = 6
}
},
matlabCalculation(){
this.fullscreenLoading = true;
let matlab = {};
// 备注
matlab.explain = this.form.explain;
// 装载类型
matlab.cjKind = this.cjKind.val;
// 货物规则
matlab.goodsFrom = this.goodsFrom;
//货物集合
matlab.goodsItem = this.goodsitem;
// 容器集合
matlab.containerItem = this.containerItem;
/**
* 堆放方式
* 0、相同的货物可以堆叠
* 1、接触面相同尺寸的货物可以堆叠
* **/
matlab.stackingMode = this.solution.stackingMode;
// 是否平铺
matlab.pingpu = this.solution.pingpu[0] === null ? 'N':"Y";
// 堆叠层数设置(包含本层)
matlab.stackingLayer = this.solution.stackingLayer;
matlab.lengthWay = this.solution.lengthWay;
matlab.widthWay = this.solution.widthWay;
matlab.heightWay = this.solution.heightWay;
matlab.lengthType = this.solution.lengthType;
matlab.widthType = this.solution.widthType;
matlab.heightType = this.solution.heightType;
matlabCalculation(matlab).then(() => {
this.$message({
type: "success",
message: "操作成功!"
});
this.changeNav6 = false;
this.fullscreenLoading = false;
})
},
}
}
</script>
<style scoped>
#box{
width: 100%;
height: 100%;
background: white;
padding: 10px;
overflow: hidden;
}
#leftBox{
width: 20%;
float: left;
/*border: 1px solid black;*/
}
#rightBox{
width: 80%;
float: left;
/*border: 1px solid black;*/
}
#leftBox, #rightBox{
height: 100%;
overflow: auto
}
/*标签初始化*/
body, dl, dt, dd, ul, ol, li, h1, h2, h3, h4, h5, h6, form, fieldset, img, button, textarea {
margin: 0;
padding: 0;
border: none;
list-style:none
}
/*标签初始化*/
html,body {
height:100%;overflow:hidden;
}
>>> .el-radio-group {
font-size: 12px;
padding: 10px;
margin-left: -10px;
}
/*媒体查询*/
/*1024*/
@media screen and (min-width:1024px) {
#leftContainer, #rightContainer {
min-height:82vh;
overflow-y: hidden;
}
}
/*1101*/
@media screen and (min-width:1101px) and (max-width:1280px){
#leftContainer, #rightContainer {
min-height:82vh;
overflow-y: hidden;
}
}
@media screen and (min-width:1507px) and (max-width:1619px){
#leftContainer, #rightContainer {
min-height:82vh;
overflow-y: hidden;
}
}
@media screen and (min-width:1620px) and (max-width:1848px){
#leftContainer, #rightContainer {
min-height:82vh!important;
overflow-y: hidden;
}
.smallBox[data-v-3c60614f] {
width: 90%;
height: 80px;
border: 1px solid #dddddd;
display: -webkit-box;
display: -ms-flexbox;
display: flex;
}
#leftContainer{
min-height:82vh!important;
padding: 5px 20px 5px 20px;
width: 100%;
overflow-y: hidden;
background:#fff;
box-shadow:2px 6px 6px #eee;
border:1px solid #e9e9e9;
}
#rightContainer{
position: relative;
min-height:82vh!important;
overflow-y: hidden;
padding: 5px 10px 5px 30px;
margin-left: 2%;
width: 98%;
background:#fff;
box-shadow:2px 6px 6px #eee;
border:1px solid #e9e9e9;
}
}
#leftUl li div{
color: #3c4353;
font-weight: 400;
}
>>>.el-tooltip avue-checkbox{
margin-left: 20px;
}
>>>.el-table::before {
left: 0;
bottom: 0;
width: 100%;
height: 0px;
}
>>>.el-input-number--small .el-input-number__decrease{
width: 32px;
display: none;
font-size: 13px;
}
>>> .el-input-number--small .el-input-number__increase {
width: 32px;
display: none!important;
font-size: 13px;
}
>>>.el-input-number--small .el-input__inner {
padding-left: 39px;
padding-right: 15px;
text-align: right;
}
>>>.el-input-number.is-controls-right .el-input__inner {
padding-left: 15px;
text-align: right;
padding-right: 15px;
}
.leftResult{
width: 80%;
}
.rightResult{
width: 20%;
border: 1px solid #e9e9eb;
/*background: #99ffcc;*/
}
>>>.el-tree {
/*background: #99ffcc;*/
position: relative;
cursor: default;
/* background: #FFF; */
color: #606266;
font-weight: 400;
font-size: 12px;
}
>>>.el-tree-node__label {
font-size: 7px;
}
>>>.avue-form__group{
margin-bottom: -20px;
}
>>>.avue-group__header {
margin-bottom: 10px;
display: flex;
-webkit-box-align: center;
-ms-flex-align: center;
align-items: center;
height: 30px;
line-height: 30px;
-webkit-box-sizing: border-box;
box-sizing: border-box;
border-bottom: 1px solid #eee;
}
>>>.el-form-item{
margin-bottom: 0px!important;
}
>>>.el-radio-group {
font-size: 12px;
padding: 10px;
}
>>>.el-radio, .el-radio--medium.is-bordered .el-radio__label {
font-size: 12px;
}
/*#editTable >>> .el-input-number__increase, >>> .el-input-number__decrease {*/
/*display: none;*/
/*!*width: 0px;*!*/
/*}*/
#editTable >>> .el-input-number{
width: 95px;
}
/*#editTable >>> .el-input__inner{*/
/*padding-left: 0px;*/
/*padding-right: 0px;*/
/*text-align: center!important;*/
/*}*/
>>>el-input el-inut --small{
width: 80px!important;
}
>>>.avue-crud__menu{
display: none;
}
.leftTransferBox{
width: 28%;
/*height: 250px;*/
height: 60vh;
overflow-y: auto;
border: 1px solid #ddd;
}
.rightTransferBox{
width: 60%;
/*height: 250px;*/
height: 60vh;
border: 1px solid #ddd;
}
.changeColor {
background:#e6f1fe;
}
>>>.el-button--medium {
padding: 8px 18px!important;
font-size: 14px;
border-radius: 4px;
}
>>>.el-card__body{
display: flex;
}
.marginLeft{
margin-left: 10px;
}
.arrow{
width: 0;
height: 0;
border-width: 5px;
border-style: solid;
border-color: transparent transparent transparent #0099CC;
}
#leftContainer{
min-height:80vh;
padding: 5px 20px 5px 20px;
width: 100%;
overflow-y: hidden;
background:#fff;
box-shadow:2px 6px 6px #eee;
border:1px solid #e9e9e9;
}
#leftContainer ul li{
padding: 20px;
display: flex;
flex-direction: row;
height: 20px;
line-height: 7px;
}
.rightImg{
width: 100px;
}
.rightBox{
padding-left: 26px;padding-top: 2px;
}
.smallTitle{
font-size: 18px;
border-bottom: 1px solid #e9e9e9;
font-weight: 600;
}
.rightDescription{
color: #a62bff;
font-weight: 600;
}
.smallBox{
width:90%;
height: 70px;
border: 1px solid #dddddd;
display: flex
}
#leftContainer, #rightContainer {
min-height:80vh;
overflow-y: hidden;
}
#rightContainer{
position: relative;
min-height:80vh;
overflow-y: hidden;
padding: 5px 10px 5px 30px;
margin-left: 2%;
width: 98%;
background:#fff;
box-shadow:2px 6px 6px #eee;
border:1px solid #e9e9e9;
}
.active1 {
color: #fff;
background: #e74c3c;
width: 5px;height: 5px;background: red;
border: 1px solid red;
}
</style>
更多推荐



所有评论(0)