From 3a154bdb0a5aaa2c0ac3eac95a6ba747068bd454 Mon Sep 17 00:00:00 2001
From: MrShi <1878285526@qq.com>
Date: 星期二, 13 一月 2026 10:00:37 +0800
Subject: [PATCH] 优化
---
admin/src/components/business/OperaJkSketchResultWindow.vue | 296 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 296 insertions(+), 0 deletions(-)
diff --git a/admin/src/components/business/OperaJkSketchResultWindow.vue b/admin/src/components/business/OperaJkSketchResultWindow.vue
new file mode 100644
index 0000000..22cea21
--- /dev/null
+++ b/admin/src/components/business/OperaJkSketchResultWindow.vue
@@ -0,0 +1,296 @@
+<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>
--
Gitblit v1.9.3