vue实现网格弹窗(每个网格都是一个下拉)

vue实现网格弹窗(每个网格都是一个下拉)

在操作中点击图像标记,触发点击事件

html 复制代码
<el-table-column align="center" label="操作" width="260">
           <el-button
              v-if="hasPerm('goods-menu')"
              slot="reference"
              size="mini"
              type="primary"
              @click="handleShowLabel(scope.row)"
              >图像标记</el-button
            >
          </template>
        </el-table-column>
      </el-table>
 <el-dialog :visible.sync="imgLabelVisible" top="3vh" width="90vw" title="选择饮料">
      <div class="dialog-content">
        <div class="left-pane">
          <img :src="currentImgUrl" style="width:400px;margin:auto"   alt="左侧图片" />
        </div>
        <div class="right-pane">
          <el-table :data="gridData" style="width: 100%" border >
            <el-table-column prop="row" label="行号/列号" width = 60px>
              <template slot-scope="scope">
                <span>{{ scope.$index + 1 }}</span>
              </template>
            </el-table-column>

            <el-table-column prop="col" label="1">
              <template slot-scope="scope">
                <el-select v-model="scope.row.row1.goodsId" filterable clearable @change="selectChange" placeholder="请选择饮料">
                  <el-option v-for="drink in drinkOptions"
                             :key="drink.value"
                             :label="drink.label"
                             :value="drink.value"></el-option>
                </el-select>
              </template>
            </el-table-column>
            <el-table-column prop="col" label="2">
            <template slot-scope="scope">
              <el-select v-model="scope.row.row2.goodsId" filterable clearable @change="selectChange" placeholder="请选择饮料">
                <el-option v-for="drink in drinkOptions"
                           :key="drink.value"
                           :label="drink.label"
                           :value="drink.value"></el-option>
              </el-select>
            </template>
          </el-table-column>
            <el-table-column prop="col" label="3">
              <template slot-scope="scope">
                <el-select v-model="scope.row.row3.goodsId" filterable clearable @change="selectChange" placeholder="请选择饮料">
                  <el-option v-for="drink in drinkOptions"
                             :key="drink.value"
                             :label="drink.label"
                             :value="drink.value"></el-option>
                </el-select>
              </template>
            </el-table-column><el-table-column prop="col" label="4">
            <template slot-scope="scope">
              <el-select v-model="scope.row.row4.goodsId" filterable clearable @change="selectChange" placeholder="请选择饮料">
                <el-option v-for="drink in drinkOptions"
                           :key="drink.value"
                           :label="drink.label"
                           :value="drink.value"></el-option>
              </el-select>
            </template>
          </el-table-column><el-table-column prop="col" label="5">
            <template slot-scope="scope">
              <el-select v-model="scope.row.row5.goodsId" filterable clearable @change="selectChange" placeholder="请选择饮料">
                <el-option v-for="drink in drinkOptions"
                           :key="drink.value"
                           :label="drink.label"
                           :value="drink.value"></el-option>
              </el-select>
            </template>
          </el-table-column><el-table-column prop="col" label="6">
            <template slot-scope="scope">
              <el-select v-model="scope.row.row6.goodsId" filterable clearable @change="selectChange" placeholder="请选择饮料">
                <el-option v-for="drink in drinkOptions"
                           :key="drink.value"
                           :label="drink.label"
                           :value="drink.value"></el-option>
              </el-select>
            </template>
          </el-table-column><el-table-column prop="col" label="7">
            <template slot-scope="scope">
              <el-select v-model="scope.row.row7.goodsId" filterable clearable @change="selectChange" placeholder="请选择饮料">
                <el-option v-for="drink in drinkOptions"
                           :key="drink.value"
                           :label="drink.label"
                           :value="drink.value"></el-option>
              </el-select>
            </template>
          </el-table-column><el-table-column prop="col" label="8">
            <template slot-scope="scope">
              <el-select v-model="scope.row.row8.goodsId" filterable clearable @change="selectChange" placeholder="请选择饮料">
                <el-option v-for="drink in drinkOptions"
                           :key="drink.value"
                           :label="drink.label"
                           :value="drink.value"></el-option>
              </el-select>
            </template>
          </el-table-column>
<!--            <el-table-column label="饮料选择">-->
<!--              <template slot-scope="scope">-->
<!--                <el-select v-model="scope.row.selectedDrink" placeholder="请选择饮料">-->
<!--                  <el-option v-for="drink in drinkOptions"-->
<!--                             :key="drink.value"-->
<!--                             :label="drink.label"-->
<!--                             :value="drink.value"></el-option>-->
<!--                </el-select>-->
<!--              </template>-->
<!--            </el-table-column>-->
          </el-table>
        </div>
      </div>
      <span slot="footer" class="dialog-footer">
      <el-button @click="imgLabelVisible = false">取 消</el-button>
      <el-button type="primary" @click="saveSelection">确 定</el-button>
    </span>
    </el-dialog>


export default {
  data() {
    return {
      gridData: [{
        row1:{
          row:1,
          col:1,
          goodsId:null,
        },
        row2:{
          row:1,
          col:2,
          goodsId:null,
        },
        row3:{
          row:1,
          col:3,
          goodsId:null,
        },
        row4:{
          row:1,
          col:4,
          goodsId:null,
        },
        row5:{
          row:1,
          col:5,
          goodsId:null,
        },
        row6:{
          row:1,
          col:6,
          goodsId:null,
        },
        row7:{
          row:1,
          col:7,
          goodsId:null,
        },
        row8:{
          row:1,
          col:8,
          goodsId:null,
        },
      },{
        row1:{
          row:2,
          col:1,
          goodsId:null,
        },
        row2:{
          row:2,
          col:2,
          goodsId:null,
        },
        row3:{
          row:2,
          col:3,
          goodsId:null,
        },
        row4:{
          row:2,
          col:4,
          goodsId:null,
        },
        row5:{
          row:2,
          col:5,
          goodsId:null,
        },
        row6:{
          row:2,
          col:6,
          goodsId:null,
        },
        row7:{
          row:2,
          col:7,
          goodsId:null,
        },
        row8:{
          row:2,
          col:8,
          goodsId:null,
        },
      },{
        row1:{
          row:3,
          col:1,
          goodsId:null,
        },
        row2:{
          row:3,
          col:2,
          goodsId:null,
        },
        row3:{
          row:3,
          col:3,
          goodsId:null,
        },
        row4:{
          row:3,
          col:4,
          goodsId:null,
        },
        row5:{
          row:3,
          col:5,
          goodsId:null,
        },
        row6:{
          row:3,
          col:6,
          goodsId:null,
        },
        row7:{
          row:3,
          col:7,
          goodsId:null,
        },
        row8:{
          row:3,
          col:8,
          goodsId:null,
        },
      },{
        row1:{
          row:4,
          col:1,
          goodsId:null,
        },
        row2:{
          row:4,
          col:2,
          goodsId:null,
        },
        row3:{
          row:4,
          col:3,
          goodsId:null,
        },
        row4:{
          row:4,
          col:4,
          goodsId:null,
        },
        row5:{
          row:4,
          col:5,
          goodsId:null,
        },
        row6:{
          row:4,
          col:6,
          goodsId:null,
        },
        row7:{
          row:4,
          col:7,
          goodsId:null,
        },
        row8:{
          row:4,
          col:8,
          goodsId:null,
        },
      },{
        row1:{
          row:5,
          col:1,
          goodsId:null,
        },
        row2:{
          row:5,
          col:2,
          goodsId:null,
        },
        row3:{
          row:5,
          col:3,
          goodsId:null,
        },
        row4:{
          row:5,
          col:4,
          goodsId:null,
        },
        row5:{
          row:5,
          col:5,
          goodsId:null,
        },
        row6:{
          row:5,
          col:6,
          goodsId:null,
        },
        row7:{
          row:5,
          col:7,
          goodsId:null,
        },
        row8:{
          row:5,
          col:8,
          goodsId:null,
        },
      },{
        row1:{
          row:6,
          col:1,
          goodsId:null,
        },
        row2:{
          row:6,
          col:2,
          goodsId:null,
        },
        row3:{
          row:6,
          col:3,
          goodsId:null,
        },
        row4:{
          row:6,
          col:4,
          goodsId:null,
        },
        row5:{
          row:6,
          col:5,
          goodsId:null,
        },
        row6:{
          row:6,
          col:6,
          goodsId:null,
        },
        row7:{
          row:6,
          col:7,
          goodsId:null,
        },
        row8:{
          row:6,
          col:8,
          goodsId:null,
        },
      }
      ],
}
}
}
 methods: {
     handleShowLabel(row) {
      this.imgLabelVisible = true;
      this.currentImgId = row.imageRecordId
      this.currentImgUrl = row.imageUrl;
      // TODO 改成根据后台数据回填
      for(var i =0; i < this.gridData.length; i++){
        this.gridData[i].row1.goodsId = null;
        this.gridData[i].row2.goodsId = null
        this.gridData[i].row3.goodsId = null
        this.gridData[i].row4.goodsId = null
        this.gridData[i].row5.goodsId = null
        this.gridData[i].row6.goodsId = null
        this.gridData[i].row7.goodsId = null
        this.gridData[i].row8.goodsId = null
      }
      
    },
    saveSelection() {
      // Handle saving the user's selections
      const cabinetGoodsList = []
      console.log('User selections:', this.gridData);
      for (let i = 0; i < this.gridData.length; i++) {
        for (let j = 1; j <= 8; j++) {
          const g = this.gridData[i][`row${j}`]
          cabinetGoodsList.push({levelNo:g.row, channelNo:g.col,goodsId:g.goodsId})
          // console.log(this.gridData[i][`row${j}`].goodsId)
        }
      }
      this.goodsData.imageRecordId = this.currentImgId;
      this.goodsData.cabinetGoodsList = cabinetGoodsList;
    
      this.cabinetGoods(this.goodsData);
      console.log(this.goodsData)
    },
    cabinetGoods(goodsData) {
      saveCabinetGoodsAPI(goodsData).then(res => {
        this.$notify({
          message: "操作成功",
          type: "success",
          duration: 2000,
          offset: 80,
        });
        this.imgVisible = false
      })
    },
}

请求后台

export function saveCabinetGoodsAPI(data) {

return fetch({

url: /api/cjd/manual_data/cabinet_goods,

method: 'post',

data

});

}

相关推荐
Larcher14 分钟前
新手也能学会,100行代码玩AI LOGO
前端·llm·html
徐子颐26 分钟前
从 Vibe Coding 到 Agent Coding:Cursor 2.0 开启下一代 AI 开发范式
前端
小月鸭39 分钟前
如何理解HTML语义化
前端·html
jump6801 小时前
url输入到网页展示会发生什么?
前端
诸葛韩信1 小时前
我们需要了解的Web Workers
前端
brzhang1 小时前
我觉得可以试试 TOON —— 一个为 LLM 而生的极致压缩数据格式
前端·后端·架构
yivifu1 小时前
JavaScript Selection API详解
java·前端·javascript
这儿有一堆花2 小时前
告别 Class 组件:拥抱 React Hooks 带来的函数式新范式
前端·javascript·react.js
十二春秋2 小时前
场景模拟:基础路由配置
前端
六月的可乐2 小时前
实战干货-Vue实现AI聊天助手全流程解析
前端·vue.js·ai编程