<!-- 1000多条数据做校验,并且不卡顿 -->
<template>
<vxe-table
border
show-overflow
keep-source
height="600"
ref="xTable"
:data="tableData"
:edit-rules="validRules"
:edit-config="{trigger: 'click', mode: 'cell', showStatus: true}"
:row-config="{isHover: true}"
:align="center"
>
<vxe-column field="state" title="状态" min-width="50"></vxe-column>
<vxe-column field="wbsNumber" title="ABC号" min-width="130"></vxe-column>
<vxe-column
field="name"
title="名称"
min-width="100"
:edit-render="{}"
>
<template #edit="scope">
<span v-if="scope.row.changeType !== '新增项'">{{scope.row.name}}</span>
<vxe-input v-else v-model.trim="scope.row.name" @change="$refs.xTable.updateStatus(scope)"></vxe-input>
</template>
</vxe-column>
<vxe-column
field="budget"
title="预算"
min-width="100"
:edit-render="{}"
>
<template #edit="scope">
<span v-if="scope.row.changeType !== '新增项'">{{scope.row.budget}}</span>
<vxe-input v-else v-model="scope.row.budget" @change="$refs.xTable.updateStatus(scope)" type="float" digits="2" min="0" :controls="false"></vxe-input>
</template>
</vxe-column>
<vxe-column field="actualCost" title="实际成本" min-width="100"></vxe-column>
<vxe-column field="changeType" title="变更类型" min-width="100" :edit-render="{type: 'default'}">
<template #edit="scope">
<span v-if="scope.row.changeType == '新增项'">{{scope.row.changeType}}</span>
<vxe-select v-else v-model="scope.row.changeType" @change="val=>selectChange(val,scope.row)">
<vxe-option
v-for="item in selectList"
:key="item.value"
:label="item.label"
:value="item.label"
></vxe-option>
</vxe-select>
</template>
</vxe-column>
<vxe-column field="changeName" title="变更后名称" :edit-render="{}" min-width="100">
<template #edit="scope">
<span v-if="scope.row.changeType == '新增项' || scope.row.changeType == '变更金额'"></span>
<vxe-input v-else v-model.trim="scope.row.changeName" @change="$refs.xTable.updateStatus(scope)">
</vxe-input>
</template>
</vxe-column>
<vxe-column field="changeAmount" title="变更后金额" :edit-render="{}" min-width="100">
<template #edit="scope">
<span v-if="scope.row.changeType == '新增项' || scope.row.changeType == '变更名称'"></span>
<vxe-input v-else v-model="scope.row.changeAmount" @change="$refs.xTable.updateStatus(scope)" type="float" digits="2" min="0" :controls="false">
</vxe-input>
</template>
</vxe-column>
<vxe-column field="changeCause" title="变更原因" :edit-render="{}" min-width="100">
<template #edit="scope">
<span v-if="scope.row.changeType == '新增项'"></span>
<vxe-textarea v-else v-model.trim="scope.row.changeCause" @change="$refs.xTable.updateStatus(scope)">
</vxe-textarea>
</template>
</vxe-column>
<vxe-column title="操作" width="80">
<template v-slot="scope">
<vxe-button type="text" status="danger" content="删除" @click="removeEvent(scope.row)"></vxe-button>
</template>
</vxe-column>
</vxe-table>
<vxe-button status="primary" content="提交" @click="validAllEvent"></vxe-button>
<vxe-button status="primary" content="新增1" @click="addData"></vxe-button>
<vxe-button status="primary" content="新增2" @click="addData2"></vxe-button>
</template>
<script lang='ts' setup>
import {defineComponent, reactive, toRefs, ref, onBeforeMount, onMounted } from 'vue';
import { ElMessageBox } from 'element-plus';
import { t, VXETable, VxeTableInstance, VxeTablePropTypes } from 'vxe-table';
import _ from 'lodash'
const onedit = ref(false);
const regionList = ref([]);
const tableData = ref([] as VxeTablePropTypes.Data);
const selectList = ref([
{ value: "0", label: "变更名称" },
{ value: "1", label: "变更金额" },
{ value: "2", label: "变更多项" },
]);
const xTable = ref();
//验证和正常表单一样
const validRules = ref({
name: [
{ required: true, message: "请输入名称" },
],
budget: [
{ required: true, message: "请输入预算" },
],
changeName: [
{ required: true, message: "请输入变更后名称" },
],
changeAmount: [
{ required: true, message: "请输入变更后金额" },
],
changeCause: [
{ required: true, message: "请输入变更原因" },
],
// describe: [
// {
// validator: validatePass //自定义校验方法
// }
// ]
})
onMounted(() => {
for(let i = 0; i < 10; i++){
let obj = {
state: '状态',
abcNumber: `ABC123456789-000${i+1}`,
name: '名称',
budget: '123000.12',
actualCost: '1000000.12',
changeType: '变更多项',
changeName: `变更后名称${i+1}`,
changeAmount: `1${i+1}`,
changeCause: '变更原因',
}
tableData.value.push(obj);
}
})
function selectChange(sel: any, row: any){
// console.log('sel138',sel)
}
// 删除
function removeEvent(row: any) {
xTable.value.remove(row);
}
// 提交
const validAllEvent = async () => {
const $table = xTable.value
const errMap = await $table.validate(true)
if (errMap) {
VXETable.modal.message({ status: 'error', content: '校验不通过!' })
} else {
VXETable.modal.message({ status: 'success', content: '校验成功!' })
}
}
//新增1
function addData(row: any) {
let obj = {
state: '状态',
abcNumber: `ABC123456789-000abc`,
name: '名称',
budget: '190000',
actualCost: '1000000.12',
changeType: '变更多项',
changeName: '',
changeAmount: '',
changeCause: '',
};
// xTable.value.insertAt(obj, row);//新增一行数据
tableData.value.push(obj);
}
//新增2
function addData2(row: any) {
let obj = {
state: '状态',
abcNumber: `ABC123456789-0001`,
name: '',
budget: '',
actualCost: '1000000.12',
changeType: '新增项',
changeName: ' ',
changeAmount: ' ',
changeCause: ' ',
};
// xTable.value.insertAt(record, row);//新增一行数据
tableData.value.push(obj);
}
const insertEvent = async () => {
const $table = xTable.value
const { row: newRow } = await $table.insert({})
// 插入一条数据并触发校验
const errMap = await $table.validate(newRow)
if (errMap) {
// 校验失败
}
}
</script>
<style scoped lang='scss'>
</style>
需求:如何通过变更类型,去显示隐藏变更后的名称或金额的内容?当变更类型选择变更名称时,变更金额里的内容需隐藏掉,当变更类型选择变更金额时,变更名称里的内容需隐藏掉,当变更类型选择是变更多项时,则变更名称和变更金额里的内容都显示;
问题:目前这个判断是不生效的,请问怎么判断才有效?
1.在<vxe-column field="changeName">的<template>里添加v-show:
<vxe-column field="changeName" title="变更后名称" :edit-render="{}" min-width="100">
<template #edit="scope">
<vxe-input v-show="scope.row.changeType !== '新增项' && scope.row.changeType !== '变更金额'" v-model.trim="scope.row.changeName" @change="$refs.xTable.updateStatus(scope)"></vxe-input>
</template>
</vxe-column>
2.在<vxe-column field="changeAmount">的<template>里添加v-show:
<vxe-column field="changeAmount" title="变更后金额" :edit-render="{}" min-width="100">
<template #edit="scope">
<vxe-input v-show="scope.row.changeType !== '新增项' && scope.row.changeType !== '变更名称'" v-model="scope.row.changeAmount" @change="$refs.xTable.updateStatus(scope)" type="float" digits="2" min="0" :controls="false"></vxe-input>
</template>
</vxe-column>
本文向大家介绍控制文字内容的显示与隐藏示例,包括了控制文字内容的显示与隐藏示例的使用技巧和注意事项,需要的朋友参考一下
问题内容: 我有一个常规的Twitter Bootstrap 3标签。我要做的就是控制 一个元素来控制多个容器。 在此示例中,当我更改标签时,仅第一个被更改。我要两个容器都改变,而不仅仅是第一个。 谢谢! 问题答案: 我将 data-target 属性添加到a元素并更改第二个tab内容中的id 我修改了这行 您的: 我的更新: 第二个选项卡内容,您的: 我的更新:
我有一个从数据库中提取下拉选项的工厂: 然后,我将该数据应用于控制器中的下拉列表/选择: 下面是select标记的外观: 放入$scope的下拉列表数据。临床DDL如下所示: 从 DB 返回的用户数据如下所示: 在我的控制器中,我填充了下拉列表/选择,然后我获取了一个用户ID并将其提交给DB以获取用户信息。这些用户信息会返回。然后,我想根据DB返回的“DefaultLocationId”从先前填充
我正在做一个项目,处理多个fxml和相应的控制器文件。我需要以某种方式从b.fxml的控制器访问定义在例如a.fxml中的fxml元素并使用它。 我不允许展示实际代码。但是,为此目的,我构建了一个简单的应用程序,其中包含两个FXML及其相应的控制器。 此应用程序具有带有ButtonController.java的Button.fxml和带有ProgressIndicator.fxml的Progre
我想在下拉列表中隐藏所选项目。 我试图从选择事件的数据源中删除该项目,并直接将文本和值分配给下拉列表。但是值将是空的,可能是因为设置的值不存在于数据源中。在剑道留档中找不到解决方案。
问题内容: 我想创建两个下拉列表,类别和项目。 如果我选择名为car的类别之一,则项目下拉列表应包含Honda,Volvo和Nissan。 如果我选择一个名为phone的类别,则项目下拉列表应具有此iPhone,Samsung,Nokia。 我怎样才能做到这一点?我知道我无法使用纯HTML做到这一点。 问题答案: 工作演示 (带有jquery) 更新 :使用eval()能够添加所需的任意数量的数组