<template>
|
<GlobalWindow
|
:title="title"
|
width="100%"
|
:visible.sync="visible"
|
:confirm-working="isWorking"
|
@confirm="confirm"
|
>
|
<div style="display: block;margin-bottom: 30px;">
|
<div style="display: block;font-size: 16px;font-weight: 600;margin-bottom: 20px;">主线路信息</div>
|
<div style="display: flex;">
|
<div style="flex: 1">送货日期:{{model.dateInfo ||''}}</div>
|
<div style="flex: 1">主线路:{{model.categoryName ||''}}</div>
|
<div style="flex: 1">客户数:{{model.orderNum ||'-'}}</div>
|
<div style="flex: 1">送货量(条):{{model.totalNum ||'-'}}</div>
|
</div>
|
<div style="display: flex;margin-top: 30px">
|
<div style="flex: 1">优化时间:{{model.planLineDate ||''}} - {{model.planLineEndDate ||''}}</div>
|
</div>
|
<div style="display: flex;margin-top: 20px" class="orange">
|
<div style="flex: 1">优化结果:优化前总路程 <span class="red" style="font-weight: bold"> {{((model.originDistance ||0)/1000).toFixed(2)}}</span> 公里,优化后总路程<span class="green" style="font-weight: bold"> {{((model.distance ||0)/1000).toFixed(2)}} </span> 公里</div>
|
</div>
|
</div>
|
<div style="display: block">
|
<div style="display: block;font-size: 16px;font-weight: 600;margin-bottom: 10px;">线路明细</div>
|
<div>
|
<el-table :data="dataList" stripe :row-class-name="tableRowClassName">
|
<el-table-column prop="dateInfo" label="送货日期" min-width="130px"></el-table-column>
|
<el-table-column prop="lineName" label="送货线路" min-width="130px"> </el-table-column>
|
<el-table-column prop="orderNum" label="客户数(户)" min-width="130px"> </el-table-column>
|
<el-table-column prop="totalNum" label="送货量(条)" min-width="130px"></el-table-column>
|
<el-table-column prop="carCode" label="车牌号" min-width="100px"></el-table-column>
|
<el-table-column prop="memberName" label="送货司机" min-width="100px"></el-table-column>
|
<el-table-column prop="distance" label="总路程(公里)" min-width="100px">
|
<template slot-scope="{row}">
|
{{((row.distance ||0)/1000).toFixed(2)}}
|
</template>
|
</el-table-column>
|
<el-table-column
|
label="操作"
|
min-width="120"
|
align="left"
|
fixed="right"
|
>
|
<template slot-scope="{row}">
|
<el-button type="text" @click="updateDo(row)" icon="el-icon-edit" style="color: #0d68ff" v-if="!updating" >微调</el-button>
|
<template v-else-if="updating && currentRow.id ===row.id" >
|
<el-button type="text" style="color: #13ce66" >本车</el-button>
|
<el-button type="text" @click="cancelDo(row)" icon="el-icon-delete" style="color: red" >取消</el-button>
|
</template>
|
<el-button type="text" @click="addDo(row)" icon="el-icon-plus" style="color: red" v-else-if="updating && currentRow.id !==row.id" >加入</el-button>
|
</template>
|
</el-table-column>
|
</el-table>
|
</div>
|
</div>
|
|
<div style="display: block;margin-top: 30px;border: 1px solid #f2f2f2;padding: 10px" v-if="updating">
|
<div style="display: block;font-size: 16px;font-weight: 600;margin-bottom: 10px;">{{currentRow.lineName}} - 客户明细</div>
|
<div>
|
<p class="tip-warn"><i class="el-icon-warning"></i>操作说明:<br>
|
1.请选择若干客户信息,点击上述其他线路后的<span class="red">【加入】</span>按钮,将选中的客户移加到对应线路中;<br>
|
2.点击本车线路后的<span class="red">【取消】</span>按钮,可撤销本车微调操作;<br>
|
</p>
|
<el-table :data="paginatedData" stripe @selection-change="handleSelectionChange">>
|
<el-table-column type="selection" width="55"></el-table-column>
|
<el-table-column prop="code" label="客户简码" min-width="130px"></el-table-column>
|
<el-table-column prop="name" label="客户名称" min-width="130px"> </el-table-column>
|
<el-table-column prop="totalNum" label="送货量(条)" min-width="130px"></el-table-column>
|
<el-table-column prop="location" label="客户地址" min-width="200px" show-tooltip-when-overflow></el-table-column>
|
<el-table-column prop="latitude" label="经纬度" min-width="200px">
|
<template slot-scope="{row}">
|
{{(row.longitude || 0).toFixed(6)}},{{(row.latitude || 0).toFixed(6)}}
|
</template>
|
</el-table-column>
|
</el-table>
|
<div class="table-pagination">
|
<el-pagination
|
@current-change="handleCurrentChange"
|
:current-page="currentPage"
|
:page-size="pageSize"
|
layout="total, prev, pager, next, jumper"
|
:total="totalItems">
|
</el-pagination>
|
</div>
|
</div>
|
</div>
|
<template v-slot:footer>
|
<el-button @click="confirmDo" type="primary" v-if="buttonName!==''">{{ buttonName||'确认' }}</el-button>
|
<el-button @click="visible=false">返回</el-button>
|
</template>
|
</GlobalWindow>
|
</template>
|
|
<script>
|
import BaseOpera from '@/components/base/BaseOpera'
|
import GlobalWindow from '@/components/common/GlobalWindow'
|
import { allList as customerList } from '@/api/business/jkSketchCustomer'
|
export default {
|
name: 'OperaJkSketchLineWindow',
|
extends: BaseOpera,
|
components: { GlobalWindow },
|
data () {
|
return {
|
// 表单数据
|
updating: false,
|
currentRow: null,
|
model: {
|
},
|
buttonName: '',
|
dataList: [],
|
currentPage: 1,
|
pageSize: 10,
|
totalItems: 0, // 总数据条目数
|
allCustomerList: [],
|
tableData: [], // 所有数据
|
selectRows: []
|
}
|
},
|
created () {
|
this.config({
|
api: '/business/jkSketchLine',
|
'field.id': 'id'
|
})
|
},
|
computed: {
|
paginatedData () {
|
const start = (this.currentPage - 1) * this.pageSize
|
const end = start + this.pageSize
|
return this.tableData.slice(start, end)
|
}
|
},
|
methods: {
|
confirmDo () {
|
|
},
|
open (title, target) {
|
this.title = title + target.categoryName
|
this.visible = true
|
this.model = target
|
this.updating = false
|
this.selectRows = []
|
this.tableData = []
|
this.allCustomerList = []
|
this.currentRow = null
|
this.loadList()
|
},
|
updateDo (row) {
|
this.currentRow = row
|
this.tableData = row.customerList || []
|
this.totalItems = this.tableData.length
|
this.currentPage = 1
|
this.selectRows = []
|
this.updating = true
|
},
|
cancelDo (row) {
|
this.selectRows = []
|
this.currentRow = null
|
this.updating = false
|
},
|
addDo (row) {
|
if (!this.selectRows || !this.selectRows.length) {
|
this.$message.error('对不起,请至少选择有一条客户记录加入该路线!')
|
return
|
}
|
const tarray = []
|
let tNum = 0
|
this.currentRow.customerList.forEach(item => {
|
let flag = false
|
this.selectRows.forEach(item1 => {
|
if (item.id === item1.id) {
|
flag = true
|
}
|
})
|
if (!flag) {
|
tNum += (item.totalNum || 0)
|
tarray.push(item)
|
}
|
})
|
if(tarray.length === 0){
|
this.$message.error('对不起,本车线路至少留存一个客户信息,无法全部清空!')
|
return
|
}
|
var rArray = row.customerList || []
|
rArray = rArray.push(...this.selectRows)
|
let ttNum = 0
|
rArray.forEach(item => {
|
ttNum += (item.totalNum || 0)
|
})
|
if(tarray.length >= (row.maxCustomer||0)){
|
this.$message.error('对不起,加入的线路最大支持'+ (row.maxOrderNum||0) + '客户!')
|
return
|
}
|
if(ttNum >= (row.maxOrder||0)){
|
this.$message.error('对不起,加入的线路最大支持'+ (row.maxOrder||0) + '送货量!')
|
return
|
}
|
this.currentRow.customerList = tarray
|
this.currentRow.orderNum = this.currentRow.customerList.length
|
this.currentRow.totalNum = tNum
|
row.customerList = rArray
|
row.orderNum = row.customerList.length
|
row.totalNum = ttNum
|
this.currentRow = null
|
this.updating = false
|
this.buttonName = '保存调整开始优化'
|
},
|
handleSelectionChange (rows) {
|
this.selectRows = rows
|
},
|
loadCustomerList () {
|
customerList({ sketchId: this.model.id })
|
.then(res => {
|
this.allCustomerList = res
|
if (this.allCustomerList && this.allCustomerList.length) {
|
this.dataList.forEach(item => {
|
var tarray = []
|
this.allCustomerList.forEach(item1 => {
|
if (item.id === item1.sketchLineId) {
|
tarray.push(item1)
|
}
|
})
|
item.customerList = tarray
|
})
|
}
|
})
|
},
|
loadList () {
|
this.api.allList({
|
sketchId: this.model.id
|
}).then(res => {
|
this.dataList = res
|
this.loadCustomerList()
|
})
|
},
|
tableRowClassName ({ row, rowIndex }) {
|
if (this.currentRow && row.id === this.currentRow.id) {
|
return 'warning-row'
|
} else {
|
return 'success-row'
|
}
|
},
|
handleCurrentChange (newPage) {
|
this.currentPage = newPage
|
}
|
}
|
}
|
</script>
|
<style lang="scss">
|
.el-table .warning-row {
|
background: rgba(161, 231, 20, 0.2) !important;
|
td{
|
background: rgba(161, 231, 20, 0.2) !important;
|
}
|
}
|
.el-table .success-row {
|
background: #f0f9eb !important;
|
td{
|
background: #f0f9eb !important;
|
}
|
}
|
</style>
|