编辑表单多字段显示、自定义显示(自定义表单显示内容)

1. 默认页面


3. 代码实现,将下面的代码复制到生成的【表.vue】文件中

<template>
  <div class="right">
    <view-grid ref="grid" :columns="columns" :detail="detail" :editFormFields="editFormFields"
      :editFormOptions="editFormOptions" :searchFormFields="searchFormFields" :searchFormOptions="searchFormOptions"
      :table="table" :extend="extend" :onInit="onInit" :onInited="onInited" :searchAfter="searchAfter"
      :modelOpenAfter="modelOpenAfter">
    </view-grid>
  </div>
</template>
<script setup lang="jsx">
//extend这一行不要复制了
import extend from "@/extension/mes/mes/MES_Material.jsx";
//viewOptions这一行不要复制了
import viewOptions from "./MES_Material/options.js";
import { ref, reactive, getCurrentInstance, nextTick, watch, onMounted } from "vue";
const grid = ref(null);
const { proxy } = getCurrentInstance();
const { table, editFormFields, editFormOptions, searchFormFields,
  searchFormOptions, columns, detail } = reactive(viewOptions());

let gridRef; //对应[表.jsx]文件中this.使用方式一样
//生成对象属性初始化
const onInit = async ($vm) => {
  gridRef = $vm;
  gridRef.boxOptions.width = 600;
};
//生成对象属性初始化后,操作明细表配置用到
const onInited = async () => {
  const unitOption = gridRef.getFormOption("Unit");//unit改为你的字段
  //自定义字段表头
  unitOption.labelRender = (h, { }) => {
    return (
      <el-tooltip effect="dark" placement="top-start">
        {{
          default: () => {
            return (
              <span style="color:rgb(2,71,222);font-size:14px;" onClick={($e) => { proxy.$message.success("提示信息"); }}
                class="el-icon-info">物料规格 </span>
            );
          },
          content: () => { return (<div style="font-size:12px">可全完自定义显示的内容,包括实时计算</div>); },
        }}
      </el-tooltip>
    )
  };
  //配置说明:unit单位字段设置自定义显示内容,下面的editFormFields.字段改为你的字段,除了单位字段,代码生成器上其他字段编辑行设置为0
  unitOption.render = (h, { }) => {
    return (
      <div class="merge-content" style="margin:5px 0 10px 0">
        <span></span> <el-input-number style="width:80px" controls-position="right" v-model={(editFormFields.len)} />
        <span style="margin-left:5px"></span> <el-input-number style="width:80px" controls-position="right" v-model={(editFormFields.width)} />
        <span style="margin-left:5px">=</span> <span style="width:80px" >{((editFormFields.len || 0) * (editFormFields.width || 0))}</span>
        <span style="margin:0 5px 0 15px">单位</span>
        {/* 绑定数据源 */}
        <el-select style="width: 90px" v-model={editFormFields.Unit} filterable
          placeholder="请选择" clearable>
          {["吨", "个", "件", "KG"].map(x => { return <el-option label={x} value={x}></el-option> })}
        </el-select>
      </div>
    )
  }
};
const searchAfter = async (rows, result) => {
  return true;
};
//row:编辑的行数据
//currentAction:当前编辑状态(Add或者update)
//isCopyClick:是否复制按钮调用的弹出框
const modelOpenAfter = (row, currentAction, isCopyClick) => {
  const isAdd = currentAction == 'Add';//判断是否为新建操作
  //弹出框打开后给上面自定义内容字段重新设置值(len,width改为你的实际字段)
  editFormFields.len = isAdd ? null : row.len
  editFormFields.width = isAdd ? null : row.width
}
</script>
<style scoped lang="less">
</style>
Last Updated 2025/9/18 19:02:44