ant-design-vue Table Form表单收集组件

效果

在这里插入图片描述

<!--  -->
<template>
  <a-modal v-model:visible="visible" title="新增国家(地区)" @ok="handleOk" width="1000px">
    <a-form :model="dataSource" ref="AddModalForm">
      <a-table :dataSource="dataSource" :columns="columns" size="small" :pagination="null" rowKey="id"
        :row-class-name="(_record, index) => (index % 2 === 1 ? 'table-striped' : null)">
        <template #headerCell="{ column }: any">
          <template v-if=" column.dataIndex === 'action' ">
            <a-button type="primary" style="padding-left:10px;padding-right:10px;" @click=" handleAddRow ">
              <template #icon><plus-outlined /></template>新增
            </a-button>
          </template>
        </template>
        <template #bodyCell=" { column, index, record }: any ">

          <template v-if=" column.dataIndex === 'nation' ">
            <a-form-item
              :rules=" [{ required: true, validator: () => customCheck(index, 'nation'), trigger: 'change' }] ">
              <a-input v-model:value=" record.nation " placeholder="请输入国家(地区)名称" />
            </a-form-item>
          </template>
          <template v-if=" column.dataIndex === 'code' ">
            <a-form-item name="code"
              :rules=" [{ required: true, validator: () => customCheck(index, 'code'), trigger: 'change' }] ">
              <a-input v-model:value=" record.code " placeholder="请输入国家(地区)编码" />
            </a-form-item>
          </template>
          <template v-if=" column.dataIndex === 'desc' ">
            <a-form-item>
              <a-input v-model:value=" record.desc " placeholder="请输入描述" />
            </a-form-item>
          </template>
          <template v-if=" column.dataIndex === 'action' ">
            <a-button type="link" danger @click=" handleDel(index) ">删除</a-button>
          </template>
        </template>
      </a-table>
    </a-form>
  </a-modal>
</template>

<script lang='ts' setup>
import { reactive, toRefs, ref, onMounted } from 'vue'
import { PlusOutlined } from '@ant-design/icons-vue'
import { columns } from "../columns";
import type { Rule } from 'ant-design-vue/es/form';
// import { Form } from 'ant-design-vue';

// const useForm = Form.useForm;

const AddModalForm = ref(null)
const visible = ref(false)
const dataSource = ref([
  { nation: '', code: '', desc: '' }
])


/**
 * 新增一行空数据
 */
function handleAddRow() {
  dataSource.value.push({ nation: '', code: '', desc: '' })
}
/**
 * 
 * @param index 删除行的index
 */
function handleDel(index: number) {
  dataSource.value.splice(index, 1)
}
async function handleOk() {
  console.log(AddModalForm.value)
  AddModalForm.value.validateFields()
    .then((res) => {
      console.log('res', res)
    })
    .catch((err) => {
      console.error("校验失败", err)
    })
}
function show() {
  visible.value = true
}
function hide() {
  visible.value = false
}

defineExpose({ show, hide })

function customCheck(index: number, key: string) {
  if (dataSource.value[index][key]) {
    return Promise.resolve()
  }
  return Promise.reject()
}
</script>
<style lang='scss' scoped ></style>
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现Ant Design VueTable表格点击跳转到相应的Form表单,可以按照以下步骤进行操作: 1. 在Table表格中,可以使用scoped slots来自定义列的渲染方式。例如,为某一列添加一个可点击的链接: ```html <a href="#" @click="handleClick(record)">查看详情</a> ``` 这里的`handleClick`方法是在Vue实例中定义的,用于处理点击事件并跳转到相应的Form表单。 2. 在Vue实例中,定义`handleClick`方法。该方法可以接收一个参数,即当前所点击的行的数据对象`record`。例如: ```javascript methods: { handleClick(record) { // 根据record中的内容,跳转到相应的Form表单页面 // ... } } ``` 在此方法中,可以根据`record`对象中的内容,进行相应的页面跳转操作。例如,可以使用Vue Router来实现页面跳转。 3. 在Form表单页面中,可以通过props属性接收父组件传递过来的参数,从而根据参数渲染相应的内容。例如: ```html <template> <div> <h2>{{ title }}</h2> <!-- 其他表单内容 --> </div> </template> <script> export default { props: ['title'] // 其他组件代码 } </script> ``` 在这个示例中,Form表单页面接收一个名为`title`的参数,用于显示表单标题。在父组件中,可以通过`router.push`方法传递该参数,例如: ```javascript this.$router.push({ path: '/form', query: { title: '表单标题' } }) ``` 这样,在跳转到Form表单页面时,即可将`title`参数传递给该组件,并根据该参数渲染相应的表单标题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值