From ce958810cabd72b5ee6bc4b9433633b0230bcfdd Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期一, 04 五月 2026 22:51:57 +0800
Subject: [PATCH] # WCS输送站点、堆垛机配置页面参数增加可视化配置V3.0.1.5
---
src/main/webapp/views/basCrnp/basCrnp.html | 256 +++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 256 insertions(+), 0 deletions(-)
diff --git a/src/main/webapp/views/basCrnp/basCrnp.html b/src/main/webapp/views/basCrnp/basCrnp.html
index 26bcec0..7cf22f4 100644
--- a/src/main/webapp/views/basCrnp/basCrnp.html
+++ b/src/main/webapp/views/basCrnp/basCrnp.html
@@ -239,6 +239,143 @@
text-overflow: ellipsis;
}
+ .station-list-editor,
+ .int-array2d-editor,
+ .int-array-editor {
+ padding: 10px 12px;
+ border: 1px solid #dfe7f1;
+ border-radius: 10px;
+ background: #f8fbff;
+ max-height: 400px;
+ overflow-y: auto;
+ }
+
+ .station-list-editor-row {
+ padding: 10px;
+ border: 1px solid #e8eef5;
+ border-radius: 8px;
+ background: #fff;
+ margin-bottom: 8px;
+ }
+
+ .station-list-editor-row-head {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ margin-bottom: 8px;
+ font-size: 12px;
+ font-weight: 700;
+ color: #66788f;
+ }
+
+ .station-fields-grid {
+ display: grid;
+ grid-template-columns: repeat(4, 1fr);
+ gap: 6px;
+ }
+
+ .station-fields-grid label {
+ display: block;
+ font-size: 11px;
+ color: #66788f;
+ margin-bottom: 2px;
+ }
+
+ .station-fields-grid .el-input__inner {
+ height: 28px;
+ font-size: 12px;
+ }
+
+ .nested-section {
+ margin-top: 8px;
+ padding: 8px;
+ border: 1px dashed #d0dbe8;
+ border-radius: 6px;
+ background: #f5f8fc;
+ }
+
+ .nested-section-head {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ margin-bottom: 6px;
+ font-size: 12px;
+ font-weight: 700;
+ color: #66788f;
+ }
+
+ .json-editor-footer {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ gap: 8px;
+ margin-top: 10px;
+ }
+
+ .json-preview {
+ min-width: 0;
+ color: #8a98ac;
+ font-size: 12px;
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ font-family: Menlo, Monaco, Consolas, monospace;
+ max-width: 400px;
+ }
+
+ .int-array2d-group {
+ display: flex;
+ align-items: center;
+ gap: 8px;
+ margin-bottom: 8px;
+ flex-wrap: wrap;
+ }
+
+ .int-array2d-group-label {
+ font-size: 12px;
+ font-weight: 700;
+ color: #66788f;
+ min-width: 36px;
+ }
+
+ .int-array2d-values {
+ display: flex;
+ gap: 6px;
+ flex-wrap: wrap;
+ align-items: center;
+ }
+
+ .int-array2d-values .el-input {
+ width: 70px;
+ }
+
+ .int-array2d-values .el-input__inner {
+ height: 28px;
+ font-size: 12px;
+ }
+
+ .int-array-items {
+ display: flex;
+ gap: 8px;
+ flex-wrap: wrap;
+ align-items: center;
+ }
+
+ .int-array-item {
+ display: flex;
+ align-items: center;
+ gap: 4px;
+ }
+
+ .int-array-item .el-input {
+ width: 80px;
+ }
+
+ .int-array-item .el-input__inner {
+ height: 28px;
+ font-size: 12px;
+ }
+
.pager-bar {
padding: 0 16px 16px;
display: flex;
@@ -713,6 +850,124 @@
<span class="row-map-json-preview mono" :title="dialogForm.rowMap">{{ dialogForm.rowMap || '鏈厤缃椂浣跨敤搴撲綅鎺掑師鍊�' }}</span>
</div>
</div>
+ <!-- StationObjModel 鏁扮粍缂栬緫鍣� -->
+ <div
+ v-else-if="stationEditorFields.indexOf(field.field) !== -1"
+ class="station-list-editor">
+ <div
+ v-for="(station, sIdx) in jsonEditorRows[field.field] || []"
+ :key="field.field + '-station-' + sIdx"
+ class="station-list-editor-row">
+ <div class="station-list-editor-row-head">
+ <span>绔欑偣 {{ sIdx + 1 }}</span>
+ <el-button type="text" style="color:#f56c6c;" @click="removeStationRow(field.field, sIdx)">鍒犻櫎</el-button>
+ </div>
+ <div class="station-fields-grid">
+ <div><label>璁惧鍙�</label><el-input v-model.trim="station.deviceNo" placeholder="濡� 1" @input="syncStationField(field.field)"></el-input></div>
+ <div><label>绔欑偣ID</label><el-input v-model.trim="station.stationId" placeholder="濡� 11" @input="syncStationField(field.field)"></el-input></div>
+ <div><label>鎺�</label><el-input v-model.trim="station.deviceRow" placeholder="鎺�" @input="syncStationField(field.field)"></el-input></div>
+ <div><label>鍒�</label><el-input v-model.trim="station.deviceBay" placeholder="鍒�" @input="syncStationField(field.field)"></el-input></div>
+ <div><label>灞�</label><el-input v-model.trim="station.deviceLev" placeholder="灞�" @input="syncStationField(field.field)"></el-input></div>
+ <div><label>绔欑偣灞�</label><el-input v-model.trim="station.stationLev" placeholder="绔欑偣灞�" @input="syncStationField(field.field)"></el-input></div>
+ <div><label>鏉$爜绱㈠紩</label><el-input v-model.trim="station.barcodeIdx" placeholder="鏉$爜绱㈠紩" @input="syncStationField(field.field)"></el-input></div>
+ <div><label>鍙屽伐浣嶅伐浣�</label><el-input v-model.trim="station.dualCrnExecuteStation" placeholder="鍙屽伐浣嶅伐浣�" @input="syncStationField(field.field)"></el-input></div>
+ </div>
+ <!-- 鏉$爜绔欑偣 -->
+ <div class="nested-section">
+ <div class="nested-section-head">
+ <span>鏉$爜绔欑偣 {{ station.barcodeStation ? '(宸查厤缃�)' : '' }}</span>
+ <span>
+ <el-button v-if="!station.barcodeStation" type="text" size="mini" @click="addNestedStation(field.field, sIdx, 'barcodeStation')">娣诲姞</el-button>
+ <el-button v-if="station.barcodeStation" type="text" size="mini" @click="toggleNested(field.field, sIdx, 'barcodeStation')">{{ station._showBarcode ? '鏀惰捣' : '灞曞紑' }}</el-button>
+ <el-button v-if="station.barcodeStation" type="text" size="mini" style="color:#f56c6c;" @click="removeNestedStation(field.field, sIdx, 'barcodeStation')">绉婚櫎</el-button>
+ </span>
+ </div>
+ <div v-if="station.barcodeStation && station._showBarcode" class="station-fields-grid">
+ <div><label>璁惧鍙�</label><el-input v-model.trim="station.barcodeStation.deviceNo" @input="syncStationField(field.field)"></el-input></div>
+ <div><label>绔欑偣ID</label><el-input v-model.trim="station.barcodeStation.stationId" @input="syncStationField(field.field)"></el-input></div>
+ <div><label>鎺�</label><el-input v-model.trim="station.barcodeStation.deviceRow" @input="syncStationField(field.field)"></el-input></div>
+ <div><label>鍒�</label><el-input v-model.trim="station.barcodeStation.deviceBay" @input="syncStationField(field.field)"></el-input></div>
+ <div><label>灞�</label><el-input v-model.trim="station.barcodeStation.deviceLev" @input="syncStationField(field.field)"></el-input></div>
+ <div><label>绔欑偣灞�</label><el-input v-model.trim="station.barcodeStation.stationLev" @input="syncStationField(field.field)"></el-input></div>
+ <div><label>鏉$爜绱㈠紩</label><el-input v-model.trim="station.barcodeStation.barcodeIdx" @input="syncStationField(field.field)"></el-input></div>
+ <div><label>鍙屽伐浣嶅伐浣�</label><el-input v-model.trim="station.barcodeStation.dualCrnExecuteStation" @input="syncStationField(field.field)"></el-input></div>
+ </div>
+ </div>
+ <!-- 鍥炲簱绔欑偣 -->
+ <div class="nested-section">
+ <div class="nested-section-head">
+ <span>鍥炲簱绔欑偣 {{ station.backStation ? '(宸查厤缃�)' : '' }}</span>
+ <span>
+ <el-button v-if="!station.backStation" type="text" size="mini" @click="addNestedStation(field.field, sIdx, 'backStation')">娣诲姞</el-button>
+ <el-button v-if="station.backStation" type="text" size="mini" @click="toggleNested(field.field, sIdx, 'backStation')">{{ station._showBack ? '鏀惰捣' : '灞曞紑' }}</el-button>
+ <el-button v-if="station.backStation" type="text" size="mini" style="color:#f56c6c;" @click="removeNestedStation(field.field, sIdx, 'backStation')">绉婚櫎</el-button>
+ </span>
+ </div>
+ <div v-if="station.backStation && station._showBack" class="station-fields-grid">
+ <div><label>璁惧鍙�</label><el-input v-model.trim="station.backStation.deviceNo" @input="syncStationField(field.field)"></el-input></div>
+ <div><label>绔欑偣ID</label><el-input v-model.trim="station.backStation.stationId" @input="syncStationField(field.field)"></el-input></div>
+ <div><label>鎺�</label><el-input v-model.trim="station.backStation.deviceRow" @input="syncStationField(field.field)"></el-input></div>
+ <div><label>鍒�</label><el-input v-model.trim="station.backStation.deviceBay" @input="syncStationField(field.field)"></el-input></div>
+ <div><label>灞�</label><el-input v-model.trim="station.backStation.deviceLev" @input="syncStationField(field.field)"></el-input></div>
+ <div><label>绔欑偣灞�</label><el-input v-model.trim="station.backStation.stationLev" @input="syncStationField(field.field)"></el-input></div>
+ <div><label>鏉$爜绱㈠紩</label><el-input v-model.trim="station.backStation.barcodeIdx" @input="syncStationField(field.field)"></el-input></div>
+ <div><label>鍙屽伐浣嶅伐浣�</label><el-input v-model.trim="station.backStation.dualCrnExecuteStation" @input="syncStationField(field.field)"></el-input></div>
+ </div>
+ </div>
+ </div>
+ <div class="json-editor-footer">
+ <el-button size="mini" plain icon="el-icon-plus" @click="addStationRow(field.field)">鏂板绔欑偣</el-button>
+ <span class="json-preview mono" :title="dialogForm[field.field]">{{ dialogForm[field.field] || '绌�' }}</span>
+ </div>
+ </div>
+ <!-- 浜岀淮鏁存暟鏁扮粍缂栬緫鍣� -->
+ <div
+ v-else-if="intArray2dFields.indexOf(field.field) !== -1"
+ class="int-array2d-editor">
+ <div
+ v-for="(group, gIdx) in jsonEditorRows[field.field] || []"
+ :key="field.field + '-group-' + gIdx"
+ class="int-array2d-group">
+ <span class="int-array2d-group-label">缁� {{ gIdx + 1 }}</span>
+ <div class="int-array2d-values">
+ <el-input
+ v-for="(val, vIdx) in group.values"
+ :key="field.field + '-g' + gIdx + '-v' + vIdx"
+ v-model.trim="group.values[vIdx]"
+ placeholder="鍊�"
+ @input="syncIntArray2DField(field.field)">
+ </el-input>
+ <el-button type="text" icon="el-icon-plus" @click="addIntArray2DValue(field.field, gIdx)"></el-button>
+ </div>
+ <el-button type="text" style="color:#f56c6c;" @click="removeIntArray2DGroup(field.field, gIdx)">鍒犻櫎缁�</el-button>
+ </div>
+ <div class="json-editor-footer">
+ <el-button size="mini" plain icon="el-icon-plus" @click="addIntArray2DGroup(field.field)">鏂板缁�</el-button>
+ <span class="json-preview mono" :title="dialogForm[field.field]">{{ dialogForm[field.field] || '绌�' }}</span>
+ </div>
+ </div>
+ <!-- 鏁存暟鏁扮粍缂栬緫鍣� -->
+ <div
+ v-else-if="intArrayFields.indexOf(field.field) !== -1"
+ class="int-array-editor">
+ <div class="int-array-items">
+ <div
+ v-for="(val, idx) in jsonEditorRows[field.field] || []"
+ :key="field.field + '-item-' + idx"
+ class="int-array-item">
+ <el-input
+ v-model.trim="jsonEditorRows[field.field][idx]"
+ placeholder="鍊�"
+ @input="syncIntArrayField(field.field)">
+ </el-input>
+ <el-button type="text" style="color:#f56c6c;" @click="removeIntArrayValue(field.field, idx)">鍒犻櫎</el-button>
+ </div>
+ </div>
+ <div class="json-editor-footer">
+ <el-button size="mini" plain icon="el-icon-plus" @click="addIntArrayValue(field.field)">鏂板</el-button>
+ <span class="json-preview mono" :title="dialogForm[field.field]">{{ dialogForm[field.field] || '绌�' }}</span>
+ </div>
+ </div>
<el-input
v-else-if="field.textarea"
v-model.trim="dialogForm[field.field]"
@@ -738,6 +993,7 @@
<script type="text/javascript" src="../../static/js/jquery/jquery-3.3.1.min.js"></script>
<script type="text/javascript" src="../../static/js/common.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../static/js/jsonEditors.js" charset="utf-8"></script>
<script type="text/javascript" src="../../static/vue/js/vue.min.js"></script>
<script type="text/javascript" src="../../static/vue/element/element.js"></script>
<script type="text/javascript" src="../../static/js/basCrnp/basCrnp.js?v=20260310" charset="utf-8"></script>
--
Gitblit v1.9.1