vue3 elementui plus 可编辑表格 完整例子

Vue3 + Element-plus + TS —— 动态表格自由编辑 可编辑的 Vue2 、3的表格,自由编辑! 阅读详情

完整代码:
1.组件

<template>
  <div class="mult_table_box">
    <el-form ref="formRef" :model="formData" >
      <el-table
        ref="tableRef"
        :data="formData.tableDataValue"
        :header-cell-style="{ 'text-align': 'center' }"
        @row-click="handleEdit"
        @selection-change="handleSelectionChange"
        class="mult_table_"
        max-height="540"
      >
        <el-table-column
          type="selection"
          width="55"
          align="center"
          v-if="showCheckbox"
          :selectable="checkSelectable"
        />
        <el-table-column type="index" label="序号" width="80" align="center" />

        <el-table-column
          v-for="(column, index) in columns"
          :key="index"
          :prop="column.prop"
          :label="column.label"
          :width="column.width"
          :show-overflow-tooltip="
            typeof column.showTooltip === 'boolean' ? column.showTooltip : showTooltip
          "
          align="center"
        >
         <template #header>
              <div class="flex_ flex_cetner"
                ><span class="red_" v-if="column.required">*</span
                ><span> {{ column.label }}</span></div
              >
              </template>
          <!-- 多级表头 -->
          <el-table-column
            v-for="(column2, cIndex) in column.children"
            :key="cIndex"
            :prop="column2.prop"
            :label="column2.label"
            :width="column2.width"
            :show-overflow-tooltip="
              typeof column.showTooltip === 'boolean' ? column.showTooltip : showTooltip
            "
          >
            <template #header>
              <div class="flex_ flex_cetner"
                ><span class="red_" v-if="column2.required">*</span
                ><span> {{ column2.label }}</span></div
              >
            </template>
            <template #default="scope">
              <template v-if="scope.row.isEdit && !column2.disabled">
                <el-form-item
                  :prop="'tableDataValue[' + scope.$index + '].' + column.prop"
                  :rules="[
                    { required: column2.required, message: '', trigger: 'blur' }
                  ]"
                >
             
                    <!-- 输入框 -->
                    <el-input
                      v-if="column2.type == 'input'"
                      v-model="scope.row[column2.prop]"
                      :placeholder="`请输入${column2.label}`"
                    />
                    <!-- 下拉 -->
                    <el-select
                      v-else-if="column2.type == 'select'"
                      v-model="scope.row[column2.prop]"
                    >
                      <el-option
                        v-for="option in getColumnOptions(column2)"
                        :key="option.value"
                        :label="option.label"
                        :value="option.value"
                      />
                    </el-select>
                    <!-- 自定义 -->
                    <div v-else-if="column2.type === 'slot'" class="w100">
                      <slot :name="column2.prop + 'Edit'" :row="scope.row" :column="column2"></slot>
                    </div>
                 
                </el-form-item>
              </template>
              <!-- 不编辑展示状态-多层表头 -->
              <template v-else>
                <el-form-item prop="operation">
                  <div v-if="column2.type == 'switch'">
                    <el-switch
                      v-model="scope.row[column2.prop]"
                      active-text=""
                      inactive-text=""
                      disabled
                    />
                  </div>
                  <div
                    v-else-if="column2.type == 'dictSelect' || column2.type == 'dictSelect_string'"
                  >
                    <div v-if="column2.propLable">{{ scope.row[column2.propLable] }}</div>
                    <div v-else>
                      {{ getDictLabel(scope.row[column2.prop], column2.dictName) }}
                    </div>
                  </div>
                  <div v-else-if="column2.type == 'datetime'">
                    {{ formatDate(scope.row[column2.prop]) }}
                  </div>
                  <div v-else-if="column2.type === 'slot'">
                    <slot :name="column2.prop" :row="scope.row" :column="column2"></slot>
                  </div>

                  <div v-else>{{ scope.row[column2.prop] }}</div>
                </el-form-item>
              </template>
            </template>
          </el-table-column>

          <template #default="scope" v-if="!column.children?.length">
            <template v-if="scope.row.isEdit && !column.disabled">
              <el-form-item
                :prop="'tableDataValue[' + scope.$index + '].' + column.prop"
                :rules="[{ required: column.required, message: '', trigger: 'blur' }]"
              >
                <!-- 输入框 -->
                <el-input
                  v-if="column.type == 'input'"
                  v-model="scope.row[column.prop]"
                  :placeholder="`请输入${column.label}`"
                />
                <!-- numner输入框(小数) -->
                <div @click.stop>
                  <el-input-number
                    v-if="column.type == 'input-number'"
                    :placeholder="`请输入${column.label}`"
                    v-model="scope.row[column.prop]"
                    :precision="1"
                    :step="0.1"
                  />
                </div>
                <!-- number输入框(整数) -->
                <div @click.stop>
                  <el-input-number
                    v-if="column.type == 'number'"
                    :placeholder="`请输入${column.label}`"
                    v-model="scope.row[column.prop]"
                    :precision="0"
                    :step="1"
                  />
                </div>
                <!-- 文本域 -->
                <el-input
                  v-if="column.type == 'textarea'"
                  type="textarea"
                  v-model="scope.row[column.prop]"
                  :placeholder="`请输入${column.label}`"
                  resize="vertical"
                  :autosize="{ minRows: 2, maxRows: 4 }"
                  clearable
                />
                <!-- 下拉 -->
                <el-select
                  v-else-if="column.type == 'select'"
                  v-model="scope.row[column.prop]"
                  clearable
                >
                  <el-option
                    v-for="option in getColumnOptions(column)"
                    :key="option.value"
                    :label="option.label"
                    :value="option.value"
                  />
                </el-select>
                <!-- 字典下拉-value为string -->
                <el-select
                  v-else-if="column.type == 'dictSelect_string'"
                  v-model="scope.row[column.prop]"
                  clearable
                >
                  <el-option
                    v-for="dict in getDictOptions(DICT_TYPE[column.dictName])"
                    :key="dict.value"
                    :label="dict.label"
                    :value="dict.value"
                  />
                </el-select>
                <!-- 字典下拉-value为number -->
                <el-select
                  v-else-if="column.type == 'dictSelect'"
                  v-model="scope.row[column.prop]"
                  clearable
                >
                  <el-option
                    v-for="dict in getIntDictOptions(DICT_TYPE[column.dictName])"
                    :key="dict.value"
                    :label="dict.label"
                    :value="dict.value"
                  />
                </el-select>
                <el-date-picker
                  v-else-if="column.type === 'date'"
                  v-model="scope.row[column.prop]"
                  type="date"
                  :placeholder="`请选择${column.label}`"
                  value-format="YYYY-MM-DD"
                  format="YYYY-MM-DD"
                  style="width: 100%"
                />
                <el-date-picker
                  v-else-if="column.type === 'datetime'"
                  v-model="scope.row[column.prop]"
                  type="datetime"
                  :placeholder="`请选择${column.label}`"
                  value-format="YYYY-MM-DD HH:mm:ss"
                  format="YYYY-MM-DD HH:mm:ss"
                  style="width: 100%"
                />
                <el-date-picker
                  v-else-if="column.type === 'timestamp'"
                  v-model="scope.row[column.prop]"
                  value-format="x"
                  type="datetime"
                  :placeholder="`请选择${column.label}`"
                  style="width: 100%"
                />
                <el-switch
                  v-else-if="column.type === 'switch'"
                  v-model="scope.row[column.prop]"
                  active-text=""
                  inactive-text=""
                />
                <div v-else-if="column.type == 'uploadFile'" @click.stop>
                  <UploadFile
                    :is-show-tip="false"
                    v-model="scope.row[column.prop]"
                    :modelValueIsString="true"
                  />
                </div>
                <div v-else-if="column.type == 'uploadImgs'" @click.stop>
                  <UploadImgs
                    v-model="scope.row[column.prop]"
                    :modelValueIsString="true"
                    :limit="9"
                    height="50px"
                    width="50px"
                  />
                </div>
                <div v-else-if="column.type === 'slot'" @click.stop class="w100">
                  <slot :name="column.prop + 'Edit'" :row="scope.row" :column="column"></slot>
                </div>
              </el-form-item>
            </template>
            <!-- 不编辑展示状态 -->
            <template v-else>
              <el-form-item prop="operation">
                <div v-if="column.type == 'switch'">
                  <el-switch
                    v-model="scope.row[column.prop]"
                    active-text=""
                    inactive-text=""
                    disabled
                  />
                </div>
                <div v-else-if="column.type == 'datetime'">
                  {{ formatDate(scope.row[column.prop]) }}
                </div>
                <div v-else-if="column.type == 'timestamp'">
                  {{ formatDate(scope.row[column.prop]) }}
                </div>
                <div v-else-if="column.type == 'uploadFile'">
                  <UploadFile
                    :is-show-tip="false"
                    v-model="scope.row[column.prop]"
                    :disabled="true"
                  />
                </div>
                <div v-else-if="column.type == 'uploadImgs'">
                  <UploadImgs
                    v-model="scope.row[column.prop]"
                    :limit="9"
                    :modelValueIsString="true"
                    height="50px"
                    width="50px"
                    :disabled="true"
                  />
                </div>
                <div v-else-if="column.type == 'dictSelect' || column.type == 'dictSelect_string'">
                  <div v-if="column.propLable">{{ scope.row[column.propLable] }}</div>
                  <div v-else>
                    {{ getDictLabel(scope.row[column.prop], column.dictName) }}
                  </div>
                </div>

                <div v-else-if="column.type === 'slot'">
                  <div v-if="column.propLable">
                    {{ scope.row[column.propLable] }}
                  </div>
                  <slot v-else :name="column.prop" :row="scope.row" :column="column"></slot>
                </div>
                <div v-else>{{ scope.row[column.prop] }}</div>
              </el-form-item>
            </template>
          </template>
        </el-table-column>
        <el-table-column
          fixed="right"
          label="操作"
          prop="city"
          min-width="160"
          v-if="showOperationColumn"
          :width="operationWidth"
        >
          <!-- :width="setOperationBoxWidth()" -->
          <template #default="scope">
            <el-form-item prop="operation">
              <div class="table_btn_box" @click.stop>
                <!-- 表格编辑默认的按钮 -->
                <span id="operationBox" v-if="allowEdit">
                  <el-button
                    link
                    type="primary"
                    size="small"
                    :icon="EditPen"
                    v-if="!scope.row.isEdit"
                    @click.stop="handleEdit(scope.row)"
                    >编辑</el-button
                  >
                  <el-button
                    link
                    type="success"
                    size="small"
                    :icon="Check"
                    v-if="scope.row.isEdit"
                    @click.stop="handleSave(scope.row)"
                    >保存</el-button
                  >
                  <el-button
                    link
                    type="warning"
                    size="small"
                    class="mr12px"
                    :icon="Close"
                    v-if="scope.row.isEdit"
                    @click.stop="handleCancel(scope)"
                    >取消</el-button
                  >
                  <el-button
                    v-if=" !scope.row.isEdit && scope.row?.id"
                    link
                    type="danger"
                    class="mr12px"
                    :icon="Delete"
                    size="small"
                    @click.stop="handleDelete(scope.row)"
                    >删除</el-button
                  >
                </span>
                <!-- 需要把编辑emit出去的按钮 使用弹窗类 -->
                <!-- 其他需要自定义的按钮 -->
                <slot name="operation" :row="scope.row"></slot>
              </div>
            </el-form-item>
          </template>
        </el-table-column>
      </el-table>
    </el-form>

  </div>
</template>
<script lang="ts" setup>
import { Plus, View, Close, EditPen, Delete, Check } from '@element-plus/icons-vue'
import { columnsType } from '@/api/common/types'
import { ElMessageBox, ElMessage, FormInstance } from 'element-plus'
import { formatDate } from '@/utils/formatTime'
import { getDictOptions, getIntDictOptions, getDictObj, DICT_TYPE } from '@/utils/dict'
import * as ProcessInstanceApi from '@/api/bpm/processInstance'
import { cloneDeep } from 'lodash-es'
import { useRouter } from 'vue-router'
const message = useMessage() // 消息弹窗
const router = useRouter()
const emit = defineEmits([
  'handleEdit',
  'handleDelete',
  'handleSave',
  'handleRefresh'
])
const props = defineProps({
  columns: {
    type: Array as PropType<columnsType[]>,
    required: true,
    default: () => []
  },
  tableData: {
    type: Array,
    required: true,
    default: () => []
  },
  allOptionList: {
    type: Object,
    required: false,
    default: () => {}
  },
  allowEdit: {
    //表格编辑
    type: Boolean,
    default: true
  },
  showOperationColumn: {
    type: Boolean,
    default: true
  },
  operationWidth: {
    type: String,
    default: '160'
  },
  showTooltip: {
    type: Boolean,
    default: true
  },
  showCheckbox: {
    type: Boolean,
    default: true
  },
})


let formRef = ref()
const formData = reactive({
  rule: '',
  tableDataValue: []
})

let dataLength = ref(0)
// 监听data变化
watch(
  () => props.tableData,
  (newVal) => {
    // 初次进入给dataLength赋值即可
    if (!dataLength.value) {
      dataLength.value = props.tableData.length
      formData.tableDataValue = newVal
      return
    }
    // 新增、判断是否有正在编辑的行 是-取消新增
    if (dataLength.value == newVal?.length - 1) {
      let dataLenIndex = formData.tableDataValue.length - 1
      if (EditRow.value?.isEdit) {
        formData.tableDataValue.splice(dataLenIndex, 1)
        message.warning('有正在编辑的行,请取消编辑再尝试')
        return
      }

      let newRow = newVal[dataLenIndex]
      EditRow.value = newRow
    }
    // 新增后滚动到底部
    if (dataLength.value && dataLength.value == newVal?.length - 1) {
      scrollToBottom()
    }
    dataLength.value = formData.tableDataValue.length
    formData.tableDataValue = newVal
  },
  { deep: true, immediate: true }
)

onMounted(() => {})


// 获取列的下拉选项:使用方法:例allOptionList:{name:['李华','张三']},cloumn的optionApi:name
//也可直接使用slot在父组件自定义使用select
const getColumnOptions = (column: columnsType) => {
  if (column.optionApi) {
    return props.allOptionList[column.optionApi] || []
  }
}

// 表格操作
const multipleSelection = ref([])
const handleSelectionChange = (rows) => {
  multipleSelection.value = rows.map((item) => {
    return item.id
  })
}

//编辑
let originalRow = reactive({}) //原始行,作用:取消编辑时,数据恢复
let EditRow = ref()
const handleEdit = (row: any) => {
  if (EditRow.value?.isEdit && EditRow.value != row) {
    message.warning('有正在编辑的行,请取消编辑再尝试')
    return
  }
    if (props.allowEdit&& props.showOperationColumn) {
      row.isEdit = true
      let nRow = cloneDeep(toRaw(row))
      originalRow = { ...nRow }
      EditRow.value = row
    
  }
}

//保存
const handleSave = async (row) => {
  const valid = await formRef.value.validate()
  if (!valid) return
  row.isEdit = false
  EditRow.value = row
  emit('handleSave', row)
}
//删除
const handleDelete = (row: any) => {
  ElMessageBox.confirm('确认删除该行数据吗?', '提示', {
    confirmButtonText: '确 认',
    cancelButtonText: '取 消'
  })
    .then(() => {
      //确认
      emit('handleDelete', row)
    })
    .catch(() => console.info('操作取消'))
}

//取消编辑:新增之后取消编辑 新增这行直接不要 ,有id的取消编辑则数据恢复成未编辑前
const handleCancel = (scope) => {
  let index = scope.$index
  if (!scope.row.id) {
    scope.row.isEdit = false
    formData.tableDataValue.splice(index, 1)
  } else {
    originalRow.isEdit = false
    EditRow.value.isEdit = false
    formData.tableDataValue.splice(index, 1, originalRow)
  }
}

//#endregion


// 是否可以勾选-表格
const checkSelectable = (row) => {
  if (row.id) {
return true
  } else {
    return false
  }
}
//获取字典lable
const getDictLabel = (value, dictName) => {
  let label = ''
  if (value != null) {
    let option = getDictObj(DICT_TYPE[dictName], value)
    label = option?.label || ''
  }
  return label
}

// 表格滚动到最底部
const tableRef = ref()
const scrollToBottom = async () => {
  nextTick(() => {
    tableRef.value?.setScrollTop(tableRef.value?.$refs.tableBody.scrollHeight)
  })
}

defineExpose({
  multipleSelection
})
</script>

<style lang="scss" scoped>
.mult_table_box {
  margin-top: 10px;
  margin-bottom: 20px;

  .mr10 {
    margin-right: 10px;
  }
  .ml15 {
    margin-left: 12px;
  }
  .table_btn_box {
    // display: flex;
    .el-button {
      margin-left: 12px !important;
      margin-right: 0px !important;
    }
  }
  .flex_ {
    display: flex;
    align-items: center;
  }
  .flex_cetner{
  justify-content: center;
  }
  .red_ {
    color: red;
    font-size: 14px;
    margin-right: 5px;
  }
}
</style>

<style lang="scss">
.mult_table_box {
  .el-select {
    .el-select__wrapper {
      height: 30px !important;
    }
  }
  .el-form-item {
    margin-bottom: 1px !important;
    .el-form-item__content {
      font-size: 12px !important;
    }
  }

  .el-date-editor,
  .el-input-number {
    width: 100%;
  }
  .el-scrollbar__bar {
    display: block !important;
  }
  .el-select,
  .w100 {
    width: 100%;
  }
}
</style>

2.使用的表头格式为:

export interface columnsType {
  prop: string
  propLable?: string
  label: string
  width?: string
  type:
    | 'input'
    | 'textarea'//文本域
    | 'select'//下拉
    | 'date'//yyyy-mmm-hh格式
    | 'datetime'//yyyy-mmm-hh dd:hh:ss格式
    | 'timestamp'//时间戳格式
    | 'switch'//开关
    | 'number'//整数
    | 'input-number'//一位小数点
    | 'uploadFile'//上传文件
    | 'uploadImgs'//上传图片
    | 'dictSelect'//字典下拉-value为numner
    | 'dictSelect_string'//字典下拉-value为string
    | 'slot' // 自定义
  optionApi?: string//废弃?
  dictName?: string//字典名称
  disabled?: boolean
  children?: columnsType[]
  showTooltip?: boolean
  required?: boolean
}

例:

const kksFuntionColumns: columnsType[] = [
  {
    prop: 'name',
    label: 'KKS编码字典',
    type: 'input',
    children: [
      {
        prop: 'codePrefix',
        label: '编码前缀',
        type: 'input',
        width: '80',
        disabled: true
      },
      {
        prop: 'code1',
        label: '全厂码(F0)',
        type: 'input',
        width: '280'
      },
    ]
  },
  {
    prop: 'isClosed',
    label: '是否关闭',
    type: 'slot',//如果为slot 可以在使用组件的页面 自定义编辑或者展示时的形式 solt的name为prop的值,编辑时solt的name为'prop的值+Edit' 下面有例子
    width: '240',
    disabled: true
  },
 ]

3.使用

  <!-- 表格 -->
        <multi-table
          ref="muliTableRef"
          :columns="personnelPassColumns"
          :tableData="tableData"
          :showTooltip="true"
          v-loading="loading"
          @handle-save="handleSave"
          @handle-delete="handleDelete"
          @handle-refresh="getTableData"
          operationWidth="200"
        >
          <!-- 是否关闭 -->
          <template #isClosed="scope">
            {{ scope.row.isClosed ? '是' : '否' }}
          </template>
          <template #isClosedEdit="scope">
           自定义编辑的时候如何展示
          </template>
          <!-- 操作 -->
          <template #operation="scope">
            <el-button
              link
              type="info"
              size="small"
              @click.stop="handleClose(scope.row)"
            >
              测试按钮
            </el-button>
          </template>
        </multi-table>
vue3 - element plus表格内实现行内直接编辑输入框、单选/多选框、复选框等数据并且自动更新,在表格组件每行里嵌套可直接修改编辑的输入框,失去焦点时自动更新数据(提供源码,一键复制即用) vue3,element plus,表格实现可编辑单元格,表格单元格内嵌套输入框怎么直接编辑,table单元格可编辑实现方法详解,双击修改,el-table双击修改单元格的值,Element plus表格双击可编辑,双击编辑el-table的单元格,单元格里嵌套输入框怎么编辑,嵌套选择器如何修改后更新表格,table表格行内插入的Input输入框/select选择器怎么点击修改更新,ElementPlus编辑表格数据(指定行变为input),点击表格数值后出现编辑样式,点击后出现输入框,表格动态编辑,点击编 阅读详情

相关推荐

Vue3+elementplus搭建通用管理系统实例九:通用表格实现下

使用vue3+elementplus实现通用管理系统框架实例,实现后台通用表格操作按钮的动态配置、自定义功能的实现等。

Java、前端、小程序学习笔记、问题汇总、项目实例分享,有需要请联系。 812

开源了一款基于 Vue 3 的高性能多维表格编辑器

单一数据源所有表格数据统一管理响应式更新基于 Vue 3 响应式系统持久化存储自动同步到 localStorage类型安全完整的 TypeScript 类型定义DOM 复用只渲染可见区域的 DOM 元素预渲染使用 overscan 预渲染额外行防抖处理滚动事件防抖优化内存管理自动回收不可见元素大家可以参考一下,在设计对性能要求比较高的复杂系统时,非常有帮助。组件架构设计App.vue单一职责每个组件只负责一个功能组合优于继承通过组合实现复杂功能Props 向下传递。

2401_86373285的博客 1982

【一文搞懂几种常用推荐算法】

协同过滤:适合用户-物品交互数据丰富的场景。矩阵分解:能处理稀疏数据,适合显式评分预测。基于内容:依赖物品特征,解决冷启动问题。NMF:适用于非负数据(如点击率、购买记录)。根据实际需求选择算法,或结合多种方法构建混合推荐系统。

专注技术的博主 2638

Vue3中使用Element Plus实现可编辑表格

在现代Web开发中,使用Vue.js构建的交互式表格是非常常见的需求之一。特别是在涉及到数据管理的应用场景中,能够直接在表格内进行编辑、添加和删除的操作极大地提升了用户体验。本文将介绍如何利用Vue3结合Element Plus来实现一个基本的可编辑表格。

前端学步 4261

LTspice进阶技巧-031.一键加密仿真模型:LTspice Encrypt Tool实战指南

本文详细介绍了LTspice Encrypt Tool的使用方法,帮助工程师一键加密LTspice仿真模型,保护知识产权。通过图形化界面简化操作流程,支持批量加密和兼容性处理,适用于电路设计中的模型保护需求。

weixin_28304023的博客 202

C++新手也能搞定!Windows下Cesium-Native编译全流程(附依赖下载技巧)

本文为C++新手详细介绍了在Windows系统下编译Cesium-Native库的全流程。重点针对网络环境不佳的情况,提供了手动下载依赖库的实用技巧,并指导用户使用CMake配置、生成解决方案,最终完成编译与测试验证,帮助开发者成功构建这一处理3D地理空间数据的C++运行时库。

weixin_28839549的博客 381

vue3 + Element Plus动态生成表格,并实现内容可编辑

基于 vue3 & element plus 的可编辑表格

ymzhao 5万+

用AnythingLLM搭建私人RAG知识库:从入门到实战调优指南

大型语言模型虽然知识渊博,但无法触达私有文档中的具体内容,这正是检索增强生成(RAG)技术的核心价值所在。RAG通过先将文档切块并向量化,再在提问时检索最相关的片段拼接给模型,让AI基于指定资料精准回答,无需昂贵的模型微调。这种架构不仅让知识更新即时生效,还大幅降低了私有化部署的门槛。在实际工程中,RAG的落地需要合理选择嵌入模型、设计分块策略并调优检索参数,才能避免答非所问。对于个人或小团队,使用开源工具搭建本地知识库是最省心的路径,其中AnythingLLM以其开箱即用的特性,成为连接向量检索与模型推理

weixin_29062671的博客 230

vue3+element plus 如何实现可编辑表格

1.点击表格内容部分,输入框边框显示出来,此时内容可编辑。2.失焦之后,根据失焦事件完成后续样式修改。具体使用详见element plus 官网。

xhjtcflm的博客 9322

从零到一:树莓派OpenWrt squashfs固件扩容背后的文件系统魔法

本文深入解析树莓派OpenWrt系统中squashfs固件的扩容原理与操作。通过理解squashfs与overlayfs的协同机制,掌握分区调整和文件系统扩容技巧,解决存储空间限制问题,提升设备可用性。

hadoop5ranger的博客 1038

变压器耦合放大器(低频应用+高频应用)

变压器耦合放大器(低频应用+高频应用)

m0_54943120的博客 2275

vue+elementui实现动态添加行/可编辑的table

vue+elementui实现动态添加行/可编辑的tableHTMl代码块:js代码块:实现效果: HTMl代码块: <el-col :span="24"> <el-form-item label="与承租户同户籍成员:" :label-width="formLabelWidth"> <el-table :data="zichandetail.members" :border=true style="width: 99.99%;">

LBJSagiri的博客 1万+

使用 Simulink + Simscape Electrical 对锂电池储能系统的充放电管理策略进行建模与仿真

摘要:本文详细介绍了基于Simulink的锂电池储能系统充放电管理策略建模与仿真方法。重点阐述了系统结构设计、建模过程(包括锂电池模型、充放电控制器、热管理系统等模块搭建)以及仿真设置。通过分析荷电状态管理、温度控制和功率限制等核心要素,展示了如何实现安全高效的充放电策略。仿真结果可验证系统性能,为优化管理策略提供依据。该方法为新能源存储和智能电网应用提供了实用的仿真分析工具。

amy_mhd的博客 159

使用ElementUI中的el-table制作可编辑的表格

在前端开发时,可能会需要用到可编辑的表格控件。一些原生的UI框架并不支持Table控件的可编辑功能,所以只能自己实现。

羽木落凡的博客 5303

Claude Code(8):使用 skill-creator 打造属于测试人员的 Skills

本文介绍了如何使用Claude Code的skill-creator工具快速创建测试相关的Skills。skill-creator是一个专门用于创建新Skills的Skill,相比手动创建更高效。文章详细演示了安装skill-creator的步骤,并通过创建"测试计划编写助手"的实战案例,展示了如何通过对话方式定义Skill名称、触发条件和功能需求。skill-creator会自动生成完整的SKILL.md文件和目录结构,用户只需确认即可完成Skill创建。

blues_C的博客 527

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

vue3 elementui plus 可编辑表格与表单结合 保存时校验

看完整代码可以发现我也把操作列里面的按钮也用 包住了 不用校验为什么还要包住 是因为保持高度center 不然同一行字有高有低的。这个是匹配多层表头的表格,看起来有复杂 但是html代码很简单 重复而已,重点看el-form-item的位置。2.el-table-column包着el-form-item 简便写法:看结构。1.from表单包着表格:表格。

Web_Notes的博客 53

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

基于 Vue3.0 和 Element Plus 二次封装的多行可表格组件ry-edit-table

一款基于 Vue3.0 和 Element Plus 二次封装的支持多行编辑的可编辑表格 ry-edit-table,轻量简单实用

weixin_45132729的博客 1887

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

【Vue】1883- Vue 可编辑表格:让数据编辑更舒适自如

作者:youth君https://juejin.cn/post/7242140832379584567使用ElementPlus的Table啥都好,就是没有可编辑表格!!!????既然UI库不支持,那我们实现一个可编辑表格是很难的事么?????难么?????不难么?...个人觉得如果是业务固定的可编辑表格,使用ElementPlus实现都不难。但是如果需要的是一个通用的可编辑表格,这好像还真说不好。对于通用的可编辑...

pingan8787 219

element plus 表格 el-table 单元格可编辑

1.效果如下,‘内容’列单元格可以实现点击进行编辑。3.点击保存按钮调用接口。

weixin_55659112的博客 2066

elementui的表格,单元格变成可编辑的

【代码】elementui的表格,单元格变成可编辑的。

weixin_67307854的博客 458

ElementUI表格行编辑单元格编辑支持(输入框,选择框)

1、普通版的table可编辑内嵌select选择框,输出框,编辑删除添加等 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <!-- import CSS --> <link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css"> <!

xiaoge_586的博客 2012

(Vue3 组合式Api) Element Plus表格双击单元格编辑

同时添加两个功能,点击添加参数按钮可在表格中添加新行,选择某行,点击删除参数即可删除所选行。

qq_63578903的博客 788

手动实现element Plus中,可编辑单元格效果

因为懒,直接使用的el-input组件,使用其他UI框架自行修改css即可。

qq_36806725的博客 355

vue3 + jsx + antDesign 编辑表格、表单组合使用,实现表单动态验证(有对element-plus的补充)

MyTabCard为antd中tab、card、form组件封装而成,tabTable为自定义具名插槽,myTable为表格组件。本文主要总结使用antd中form表单所遇到例如校验不消失。文章最后为总代码。

qq_59499037的博客 537

在Vue3+ElementPlus项目中实现一个简单的新增/移除行记录的小组件

有时需要一些前端需求就是支持表格编辑,点击新增一行或者移除一行。这不马上搞一个示例代码出来了吗?方便以后复制粘贴,提升工作效率~

都随它大小便吧 457

Axure Element 组件复用:ElementUI/Plus 元件库 + 大厂设计规范技巧

对高频组件(按钮、表单、导航栏)设置交互样式和变量,确保状态切换(hover/active/disabled)与 ElementUI 规范一致。创建自适应模板时,参照大厂的响应式断点规则(例如 Bootstrap 的 576px/768px/992px)。将复用组件分类为原子级(按钮/输入框)、分子级(搜索框/弹窗)、模板级(CRUD 页)三级母版库。利用 Axure 的「样式库」功能保存通用文本样式(字体/行高/字重),匹配 ElementUI 的。

afadssaxasx的博客 259
上一篇: js 数组根据属性值进行分类
下一篇: vue3 elementui plus 可编辑表格与表单结合 保存时校验
一个打工仔的笔记
博客等级 码龄6年 1904粉丝 154原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值