动态添加行

往数组添加一个空对象

<template>
  <div class="business_parameters">
    <div class="paramerters_header">
      <div>业务参数设置</div>
      <el-button
        type="primary"
        icon="Plus"
        style="background-color: #477fff"
        @click="addParameter"
      >
        新增字段
      </el-button>
    </div>
    <!-- tab切换 -->
    <div class="paramerters_container">
      <el-tabs v-model="activeName" class="demo-tabs" @tab-click="handleClick">
        <el-tab-pane label="客户" name="customer">
          <parameters :parameterList="parameterList"></parameters>
        </el-tab-pane>
        <el-tab-pane label="联系人" name="link">
          <parameters></parameters>
        </el-tab-pane>
        <el-tab-pane label="商机" name="business">
          <parameters></parameters>
        </el-tab-pane>
      </el-tabs>
    </div>
    <!-- 固定按钮 -->
  </div>
</template>
<script setup lang="ts">
import { onMounted, ref } from 'vue'
import axios from 'axios'
import parameters from './components/parameters.vue'

const activeName = ref('customer')
const type = ref(1)
/** 初始化数据 */
onMounted(() => {
  getParameters(type)
})

/** 获取参数列表 */
const parameterList = ref<any[]>([])
const getParameters = async (type) => {
  const res = await axios({
    url: '/system/field/query',
    method: 'post',
    data: {
      type: type,
    },
  })
  parameterList.value = res.data.data
}

/** 切换tab 获取列表数据 */
const handleClick = (tab) => {
  if (tab.index == 0) {
    type.value = 1
  } else if (tab.index == 1) {
    type.value = 2
  } else {
    type.value = 3
  }
  getParameters(type)
}

const addParameter = () => {
  const addParam = {
    addFlag: true,
  }
  parameterList.value[1].children.push(addParam)
}
</script>
<style scoped lang="scss">
.paramerters_header {
  display: flex;
  justify-content: space-between;
  align-items: center;
  font-family: PingFangSC-Medium;
  font-weight: 500;
  font-size: 20px;
  margin-bottom: 18px;
}
.paramerters_container {
  width: 100%;
  background: #ffffff;
  border-radius: 3px 0 0 3px;
  margin-bottom: 56px;
}
::v-deep .el-tabs__header {
  padding-top: 8px;
  padding-left: 20px;
}
::v-deep .el-tabs__item {
  font-family: PingFangSC-Medium;
  font-weight: 500;
  font-size: 16px;
  color: #303133;
}
</style>

 子

<template>
  <div class="parameters">
    <!-- 标题 -->
    <div class="parameters_title">
      <div class="line"></div>
      客户信息
      <div class="content">
        <el-icon color="#477FFF" style="margin-right: 6px">
          <WarningFilled />
        </el-icon>
        特殊字段部分设置选项为灰色,不能进行修改
      </div>
    </div>
    <!-- 表头 -->
    <div class="parameters_header">
      <el-row>
        <el-col :span="5"><div>字段名称</div></el-col>
        <el-col :span="5"><div>字段类型</div></el-col>
        <el-col :span="5"><div>启用</div></el-col>
        <el-col :span="7"><div>必填</div></el-col>
      </el-row>
    </div>

    <!-- table -->
    <div class="parameters_table" v-for="item in parameterList" :key="item.id">
      <div class="name">{{ item.name }}</div>
      <el-row
        class="parameters_table_row"
        v-for="i in item.children"
        :key="i.id"
      >
        <el-col :span="5">
          <div v-if="!i.addFlag" >
            {{ i.fieldName }}
          </div>
          <el-input
            v-model="i.fieldName"
            v-if="i.addFlag === true"
            placeholder="请输入"
            style="width: 80%"
          ></el-input>
        </el-col>
        <el-col :span="5">
          <div v-if="!i.addFlag" :class="i.special === 1 ? 'active' : ''">{{ i.fieldTypeName }}</div>
          <el-input
            v-if="i.addFlag === true"
            style="width: 80%"
            placeholder="请输入"
            v-model="i.fieldTypeName"
          ></el-input>
        </el-col>
        <el-col :span="5">
          <div>
            <el-checkbox
              v-model="i.enable"
              size="large"
              :true-label="0"
              :false-label="1"
              :disabled="i.special"
            />
          </div>
        </el-col>
        <!-- 基本字段展示 -->
        <template v-if="item.isCustom === false">
          <el-col :span="7">
            <div>
              <el-checkbox
                v-model="i.required"
                size="large"
                :true-label="0"
                :false-label="1"
                :disabled="i.special"
              />
            </div>
          </el-col>
        </template>
        <!-- 自定义展示 -->
        <template v-if="item.isCustom === true">
          <el-col :span="5">
            <div>
              <el-checkbox
                v-model="i.required"
                size="large"
                :true-label="0"
                :false-label="1"
              />
            </div>
          </el-col>
          <el-col :span="2">
            <div>
              <span class="text_button" @click="editParam(i)">
                {{ i.addFlag === true ? '保存' : '编辑' }}
              </span>
              <span class="operate_line">|</span>
              <span class="text_button" @click="deleteParam(i)">删除</span>
            </div>
          </el-col>
        </template>
      </el-row>
    </div>
  </div>

  <!-- 尾部按钮固定定位 -->
  <div class="parameters_footer">
    <el-button type="primary" style="background-color: #477fff">保存</el-button>
  </div>
</template>
<script setup lang="ts">
defineProps({
  parameterList: {
    type: Array<any>,
    default: () => {
      return []
    },
  },
})

const editParam = (param) => {
  if (param.addFlag && param.addFlag === true) {
    delete param.addFlag
  } else {
    param.addFlag = true
  }
}

const deleteParam = () => {}
</script>
<style scoped lang="scss">
.parameters {
  padding: 0px 20px;
}
// 标题
.parameters_title {
  font-family: PingFangSC-SNaNpxibold;
  font-weight: 600;
  font-size: 16px;
  color: #333333;
  display: flex;
  align-items: center;
  margin-bottom: 16px;
  .line {
    width: 2px;
    height: 16px;
    background: #477fff;
    border-radius: 1px;
    margin-right: 10px;
  }
  .content {
    display: flex;
    align-items: center;
    background: #f0f1f4;
    border-radius: 3px;
    padding: 4px 10px;
    margin-left: 10px;
    font-family: PingFangSC-Regular;
    font-weight: 400;
    font-size: 12px;
    color: #606266;
    font-family: PingFangSC-Regular;
    font-weight: 400;
    font-size: 12px;
    color: #606266;
  }
}
// 表头
.parameters_header {
  width: 100%;
  height: 50px;
  background: #f8f9fa;
  line-height: 50px;
  padding-left: 20px;
  margin-bottom: 10px;
  font-family: PingFangSC-Medium;
  font-weight: 500;
  font-size: 14px;
  color: #1d2129;
}
// table
.parameters_table {
  margin-bottom: 21px;
  border: 1px solid #dcdfe6;
  .name {
    width: 100%;
    height: 50px;
    line-height: 50px;
    background: #477fff1a;
    font-family: PingFangSC-Medium;
    font-weight: 500;
    font-size: 14px;
    color: #1d2129;
    padding-left: 20px;
  }
  .parameters_table_row {
    height: 52px;
    background: #ffffff;
    line-height: 52px;
    padding-left: 20px;
    font-family: PingFangSC-Regular;
    font-weight: 400;
    font-size: 13px;
    color: #303133;
  }
  .parameters_table_row:nth-child(2n) {
    background: #f8f9fa;
  }
}

// 尾部
.parameters_footer {
  display: flex;
  justify-content: flex-end;
  align-items: center;
  position: fixed;
  z-index: 99;
  bottom: 0px;
  left: 180px;
  width: calc(100% - 180px);
  height: 56px;
  background: #ffffff;
  border-top: 1px solid #dcdee0;
  padding-right: 20px;
  margin-top: 56px;
}
.text_button {
  font-size: 14px;
  color: #477fff;
  vertical-align: middle;
}
.operate_line {
  color: #dce2e9;
  font-size: 14px;
  margin: 0px 5px;
  vertical-align: middle;
}
.active {
  color: #FF7D00;
}
</style>

### 回答1: 如果你使用 layui 表格组件,可以使用下面的代码实现动态添加: ```javascript // 获取表格对象 var table = layui.table; // 添加数据 var data = [{ id: '10001', name: '张三', age: 20, city: '北京' }]; // 添加 table.reload('tableId', { data: data }); ``` 其中,`tableId` 是你的表格的 lay-filter 属性值,`data` 是要添加数据。这里使用了 `table.reload()` 方法,因为它可以重新渲染表格并添加新的数据。 如果你不使用表格组件,可以使用 jQuery 或原生 JavaScript 操作 DOM 元素实现动态添加。例如,如果你的表格是一个 `<table>` 元素,可以使用下面的代码动态添加: ```javascript // 获取表格对象 var table = document.getElementById('tableId'); // 创建新 var row = table.insertRow(); // 插入单元格 var cell1 = row.insertCell(); cell1.innerHTML = '10001'; var cell2 = row.insertCell(); cell2.innerHTML = '张三'; var cell3 = row.insertCell(); cell3.innerHTML = '20'; var cell4 = row.insertCell(); cell4.innerHTML = '北京'; ``` 其中,`tableId` 是你的表格的 ID 属性值。这里使用了 `insertRow()` 和 `insertCell()` 方法来创建和插入新和单元格,然后使用 `innerHTML` 属性设置单元格的内容。 ### 回答2: 在使用layui动态添加时,我们需要借助表格组件的相应功能。以下是一个例子: 首先,我们需要创建一个html的表格结构,可以使用layui的table组件,例如: ``` <table id="demo" lay-filter="test"></table> ``` 接下来,我们使用JavaScript代码来动态添加,具体步骤如下: 1. 使用layui的table.render()方法初始化表格组件: ``` layui.use('table', function(){ var table = layui.table; table.render({ elem: '#demo', // 表格id url: '/data', // 表格数据接口 cols: [[ // 表头 {field: 'id', title: 'ID'}, {field: 'username', title: '用户名'}, {field: 'email', title: '邮箱'} ]] }); }); ``` 2. 获取表格对象,并使用其方法addRow()来添加: ``` var table = layui.table; var data = [ {id: '1', username: '张三', email: 'zhangsan@example.com'}, {id: '2', username: '李四', email: 'lisi@example.com'} ]; table.addRow('test', data); ``` 其中,'test'是表格的filter值,表示我们要对哪一个表格进操作。data是一个包含了要添加的数据的数组。 总结起来,通过表格组件的初始化和添加的方法,我们可以实现在layui中动态添加的功能。 ### 回答3: 在使用layui动态添加时,需要使用table组件,并结合jQuery进操作。具体步骤如下: 1. 在页面中引入layui和jQuery的库文件。 2. 在HTML中定义一个table元素,设置一个唯一的id属性,用于后续的操作。 3. 编写一个函数,在函数中实现动态添加的逻辑。函数的基本思路是先获取到table的jQuery对象,然后使用append方法在table中添加。可以通过拼接HTML字符串的方式创建一的内容,也可以通过jQuery的方式创建一个tr元素,再通过append方法将其添加到table中。 4. 在需要添加的地方调用该函数。可以通过点击按钮、输入框回车等交互方式触发添加的操作。 5. 在table中添加后,可以根据需要设置每一列的具体内容。可以通过jQuery的方式找到相应的td元素,再设置其text或html属性来修改内容。 6. 如果需要删除,可以在每一的操作列中添加一个删除的按钮。绑定点击事件,通过获取到所在的jQuery对象,再调用remove方法进删除。 总结起来,layui动态添加的操作主要包括定义table元素、编写添加的函数、调用函数添加、设置的具体内容以及删除等步骤。通过这些步骤,我们可以实现在layui中动态添加的功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值