| <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"> | 
|             <template slot-scope="{row}"> | 
|              {{row.totalNum ||0}} / {{row.maxOrder || 0}} | 
|             </template> | 
|           </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}" v-if="dataList.length>1"> | 
|               <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-circle-close"  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> | 
|           3.经过调整后的线路路程数请等待提交后查看;<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="resetData" type="danger" v-if="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' | 
| import { updateSketchLine } from '@/api/business/jkSketch' | 
| export default { | 
|   name: 'OperaJkSketchLineWindow', | 
|   extends: BaseOpera, | 
|   components: { GlobalWindow }, | 
|   data () { | 
|     return { | 
|       // 表单数据 | 
|       updating: false, | 
|       edited: false, | 
|       currentRow: null, | 
|       model: { | 
|       }, | 
|       buttonName: '', | 
|       dataList: [], | 
|       originDataList: [], | 
|       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: { | 
|     resetData () { | 
|       this.buttonName = '' | 
|       this.cancelDo() | 
|       this.loadList() | 
|     }, | 
|     confirmDo () { | 
|       this.isWorking = true | 
|       updateSketchLine({ | 
|         id: this.model.id, | 
|         sketchLineList: this.dataList | 
|       }) | 
|         .then(() => { | 
|           this.visible = false | 
|           this.$tip.apiSuccess('线路调整已完成!') | 
|           this.$emit('success') | 
|         }) | 
|         .catch(e => { | 
|           // this.$tip.apiFailed(e) | 
|         }) | 
|         .finally(() => { | 
|           this.isWorking = false | 
|         }) | 
|     }, | 
|     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 () { | 
|       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.push(...this.selectRows) | 
|       let ttNum = 0 | 
|       rArray.forEach(item => { | 
|         ttNum += (item.totalNum || 0) | 
|       }) | 
|       if (tarray.length >= (row.maxCustomer || 0)) { | 
|         this.$message.error('对不起,加入的线路最大支持' + (row.maxCustomer || 0) + '客户!') | 
|         return | 
|       } | 
|       if (ttNum >= (row.maxOrder || 0)) { | 
|         this.$message.error('对不起,加入的线路最大支持' + (row.maxOrder || 0) + '送货量,当前方案:' + ttNum) | 
|         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 = '保存调整开始优化' | 
|   | 
|       console.log(this.dataList) | 
|       console.log(this.originDataList) | 
|     }, | 
|     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, | 
|         type: 1 | 
|       }).then(res => { | 
|         this.dataList = [...(res || [])] | 
|         this.originDataList = JSON.parse(JSON.stringify(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> |