Junjie
3 天以前 ce958810cabd72b5ee6bc4b9433633b0230bcfdd
src/main/webapp/views/basDualCrnp/basDualCrnp.html
@@ -196,6 +196,143 @@
            font-family: Menlo, Monaco, Consolas, "Liberation Mono", monospace;
        }
        .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;
@@ -638,6 +775,124 @@
                            active-color="#13ce66"
                            inactive-color="#c0c4cc">
                        </el-switch>
                        <!-- 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]"
@@ -663,6 +918,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/basDualCrnp/basDualCrnp.js?v=20260310" charset="utf-8"></script>