Avue dynamic表单实现form单选,修改及新增项

news2024/11/25 19:42:14

Avue dynamic表单实现form单选,修改及新增项

AvueDialogFormTableViewOption.js

/*
 * @Description:银行账号
 * @Version: 1.0
 * @Autor: Tj
 * @Date: 2023-03-21 11:02:42
 */
export const BankAccountOption = (vueObj, formData) => {
  return {
    labelWidth: 100, //整体列标签宽度
    submitText: "提交",
    span: 24,
    size: "small", //medium/small/mini
    column: [
      {
        hide: true,
        width: 200,
        label: "账号",
        prop: "AccountNo",
        overHidden: true,
        showWordLimit: true,
        maxlength: 50,
        rules: [
          {
            required: true,
            message: "请输入账号",
            trigger: "blur",
          },
        ],
      },
      {
        hide: true,
        label: "开户行",
        prop: "Bank",
        overHidden: true,
        showWordLimit: true,
        maxlength: 100,
        rules: [
          {
            required: true,
            message: "请输入开户行",
            trigger: "blur",
          },
        ],
      },
    ],
  };
};
/*
 * @Description: 地址
 * @Version: 1.0
 * @Autor: Tj
 * @Date: 2023-03-21 11:02:42
 */
export const AddressOption = (vueObj, formData) => {
  return {
    labelWidth: 100, //整体列标签宽度
    submitText: "提交",
    span: 24,
    size: "small", //medium/small/mini
    column: [
      {
        width: 80,
        label: "收货人",
        prop: "Consianee",
        overHidden: true,
        showWordLimit: true,
        maxlength: 30,
        rules: [
          {
            required: true,
            message: "请输入收货人",
            trigger: "blur",
          },
        ],
      },
      {
        label: "联系人电话",
        prop: "ConsigneeContact",
        type: "input",
        overHidden: true,
        showWordLimit: true,
        maxlength: 100,
        rules: [
          {
            required: true,
            message: "请输入收货联系人",
            trigger: "blur",
          },
        ],
      },
      {
        label: "收货地址",
        prop: "ConsigneeAddress",
        type: "textarea",
        overHidden: true,
        minRows: 2,
        maxRows: 3,
        showWordLimit: true,
        maxlength: 200,
        rules: [
          {
            required: true,
            message: "请输入收货地址",
            trigger: "blur",
          },
        ],
      },
    ],
  };
};
/*
 * @Description:银行账号
 * @Version: 1.0
 * @Autor: Tj
 * @Date: 2023-03-21 11:02:42
 */
export const BankAccountDynamicColumn = (vueObj, formData) => {
  const column = BankAccountOption(vueObj).column;
  column.forEach((ele) => {
    ele.cell = false;
  });
  return column;
};
/*
 * @Description: 地址
 * @Version: 1.0
 * @Autor: Tj
 * @Date: 2023-03-21 11:02:42
 */
export const AddressDynamicColumn = (vueObj, formData) => {
  const column = AddressOption(vueObj).column;
  column.forEach((ele) => {
    ele.cell = false;
  });
  return column;
};
/*
 * @Description:
 * @Version: 1.0
 * @Autor: Tj
 * @Date: 2023-03-21 11:02:42
 */
export const AvueDialogFormTableOption = (vueObj, formData) => {
  return {
    labelWidth: 100, //整体列标签宽度
    submitText: "提交",
    span: 24,
    size: "small", //medium/small/mini
    emptyBtn: false,
    menuPosition: "right",
    column: [
      {
        label: "银行账号",
        prop: "dynamic",
        type: "dynamic",
        span: 24,
        rules: [
          {
            required: true,
            message: "请选择银行账号",
            trigger: "change",
          },
        ],
        children: {
          size: "mini",
          type: "crud",
          maxHeight: 140,
          tip: false,
          align: "left",
          headerAlign: "left",
          index: false, //索引不显示即可关闭新增删除按钮
          indexWidth: 30,
          showHeader: false,
          border: false,
          cell: false,
          // selection: true,
          // selectionWidth: 30,
          delBtn: false,
          rowAdd: (done) => {
            vueObj.$message.success("新增回调");
            vueObj.addBankAccount(done);
          },
          rowDel: (row, done) => {
            vueObj.$message.success("删除回调" + JSON.stringify(row));
            done();
          },
          selectionChange(selection) {
            console.log(selection[selection.length - 1]);
          },
          column: [
            {
              label: "",
              prop: "accountInfo",
              align: "left",
              overHidden: true,
            },
            {
              label: "",
              prop: "oprator",
              fixed: "right",
              align: "right",
              width: 100,
            },
          ],
        },
      },
      {
        label: "",
        prop: "bankAccountAdd",
      },
      {
        label: "收货地址",
        prop: "address",
        type: "textarea",
        minRows: 2,
        maxRows: 3,
        readonly: true,
        labelTip: "从下面列表中选择",
        labelTipPlacement: "bottom-start",
        rules: [
          {
            required: true,
            message: "请选择收货地址",
            trigger: "change",
          },
        ],
      },
      {
        label: "",
        prop: "dynamic2",
        type: "dynamic",
        span: 24,
        children: {
          size: "mini",
          type: "crud",
          maxHeight: 140,
          tip: false,
          delBtn: false,
          align: "left",
          headerAlign: "left",
          index: false, //索引不显示即可关闭新增删除按钮
          indexWidth: 30,
          showHeader: false,
          border: false,
          // selection: true,
          // selectionWidth: 30,
          // menu:true,
          rowAdd: (done) => {
            vueObj.$message.success("新增回调");
            vueObj.addAddress(done);
          },
          rowDel: (row, done) => {
            vueObj.$message.success("删除回调" + JSON.stringify(row));
            done();
          },
          selectionChange(selection) {
            console.log(selection[selection.length - 1]);
          },

          column: [
            ...AddressDynamicColumn(vueObj),
            {
              label: "",
              prop: "oprator2",
              fixed: "right",
              align: "right",
              width: 100,
            },
          ],
        },
      },
      {
        label: "",
        prop: "addressAdd",
      },
    ],
  };
};

AvueDialogFormTableView.vue

<!--
 * @Description: 
 * @Version: 1.0
 * @Autor: Tj
 * @Date: 2023-03-17 09:40:03
-->
<template>
  <div>
    <div>
      <el-button type="primary" @click="showDialog"> dynamic表单</el-button>
    </div>
    <el-dialog
      title="dynamic表单"
      v-dialogDrag
      :close-on-click-modal="false"
      :close-on-press-escape="false"
      :visible.sync="dialogFlag"
      class="avue-dialog myclass my-dialog"
      width="650px"
      top="10px"
    >
      <avue-form
        ref="dialogForm"
        :option="avueDialogFormTableOption"
        v-model="model"
        @submit="handleSubmit"
      >
        <template slot-scope="{ item, value, label }" slot="bankAccountAdd">
          <span>
            <el-button
              @click="addBankAccount2(item, value, label)"
              size="mini"
              type="buton"
              >+ 新增</el-button
            ></span
          >
        </template>
        <template slot-scope="{ item, value, label }" slot="addressAdd">
          <span>
            <el-button @click="addAddress2(item, value, label)" size="mini" type="buton"
              >+ 新增</el-button
            ></span
          >
        </template>
        <template slot-scope="{ row, index }" slot="accountInfo">
          <div>
            <el-radio
              v-model="accountIndex"
              :label="`${row.AccountNo} ${row.Bank}`"
              @input="chooseBankAccount(row, index)"
            ></el-radio>
          </div>
        </template>
        <template slot-scope="{ row, index }" slot="oprator">
          <div>
            <el-button @click="addBankAccount2(row, index)" size="mini" type="text"
              >修改</el-button
            >
          </div>
        </template>
        <template slot-scope="{ row }" slot="oprator2">
          <div>
            <el-button @click="chooseAddress(row)" size="mini" type="text"
              >选择</el-button
            >
            <el-button @click="addAddress2(row)" size="mini" type="text">修改</el-button>
          </div>
        </template>
        <template slot-scope="{ size }" slot="menuForm">
          <el-button :size="size" @click="dialogFlag = false">关闭</el-button>
        </template>
      </avue-form>
      <!-- <div class="avue-dialog__footer">
        <el-button @click="dialogFlag = false" size="small" type="">关 闭</el-button>
      </div> -->
    </el-dialog>
  </div>
</template>
<script>
import {
  AvueDialogFormTableOption,
  BankAccountOption,
  AddressOption,
} from "@/options/AvueDialogFormTableViewOption.js";
export default {
  name: "DialogForm",
  components: {},
  data() {
    return {
      dialogFlag: false,
      previewImageUrl: "",
      test: "test",
      accountIndex: "AccountNo2 Bank2",
      model: {
        dynamic: [
          {
            AccountNo:
              "AccountNo1 AccountNo1 AccountNo1 AccountNo1 AccountNo1 AccountNo1 AccountNo1 ",
            Bank: "Bank1",
          },
          {
            AccountNo: "AccountNo2",
            Bank: "Bank2",
          },
          {
            AccountNo: "AccountNo3",
            Bank: "Bank3",
          },
        ],
        dynamic2: [
          {
            Consianee: "Consianee1",
            ConsigneeContact: "ConsigneeContact1",
            ConsigneeAddress: "ConsigneeAddress1",
          },
          {
            Consianee: "Consianee2",
            ConsigneeContact: "ConsigneeContact2",
            ConsigneeAddress: "ConsigneeAddress2",
          },
          {
            Consianee: "Consianee3",
            ConsigneeContact: "ConsigneeContact3",
            ConsigneeAddress: "ConsigneeAddress3",
          },
        ],
      },
    };
  },
  computed: {
    avueDialogFormTableOption() {
      return AvueDialogFormTableOption(this, this.model); //表单项
    },
  },
  watch: {},
  mounted() {
    // this.accountIndex = 0;
  },
  methods: {
    showDialog() {
      this.dialogFlag = true;
    },
    chooseBankAccount(row, index) {
      console.log(row, index);
      // this.accountIndex = index;
      this.model.bankAccount = `${row.AccountNo} ${row.Bank}`;
    },
    chooseAddress(row) {
      console.log(row);
      this.model.address = `${row.Consianee} ${row.ConsigneeContact} ${row.ConsigneeAddress}`;
    },
    /**
     * 新增银行账号
     * @param {*} done
     */
    addBankAccount2(row = null) {
      this.$DialogForm.show({
        title: "银行账号信息",
        width: "550px",
        top: "10px",
        menuPosition: "right",
        data: row ? row : {}, //初始数据
        option: BankAccountOption(this), //表单项
        form: "form",
        callback: (res) => {
          console.log(res.data);
          this.$message.success("关闭等待框");
          setTimeout(() => {
            if (!row) {
              this.model.dynamic.push(res.data);
            }
            res.done();
            setTimeout(() => {
              this.$message.success("关闭弹窗");
              res.close();
            }, 1000);
          }, 1000);
        },
        beforeClose: (done) => {
          this.$message.info("正在关闭弹窗");
          done();
        },
      });
    },
    addAddress2(row = null) {
      this.$DialogForm.show({
        title: "收货地址信息",
        width: "550px",
        top: "10px",
        menuPosition: "right",
        data: row ? row : {}, //初始数据
        option: AddressOption(this), //表单项
        form: "form",
        callback: (res) => {
          console.log(res.data);
          this.$message.success("关闭等待框");
          setTimeout(() => {
            this.model.dynamic2.push(res.data);
            res.done();
            setTimeout(() => {
              this.$message.success("关闭弹窗");
              res.close();
            }, 1000);
          }, 1000);
        },
        beforeClose: (done) => {
          this.$message.info("正在关闭弹窗");
          done();
        },
      });
    },
    handleSubmit(form, done) {
      this.$message.success("3s后关闭");
      console.log(form);
      setTimeout(() => {
        done();
      }, 3000);
    },
  },
};
</script>
<style lang="scss">
.myclass .el-dialog__body {
  margin-bottom: 0px !important;
}
.my-dialog {
  .el-col-sm-12 {
    width: 100% !important;
  }
}
</style>


效果图
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/425838.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【华为OD机试】1046 - 计算字符串的编辑距离

文章目录一、题目&#x1f538;题目描述&#x1f538;输入输出&#x1f538;样例1二、思路解析三、代码参考作者&#xff1a;KJ.JK&#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f…

GDPU C语言 天码行空8

1. 求序列和 ⭐ 输出没有小数的浮点数 #include <stdio.h>double fun(int a, int n) {double res 0;int aa a,i;//aa 记录每一项for(i 1; i < n; i){res aa;aa aa * 10 a;}return res; }int main(){int a,n;scanf("%d %d", &a,&n);printf(&q…

Linux学习笔记——HTTPS协议

文章目录HTTPS是什么什么是加密为什么要进行加密常见的加密方式数据摘要与数据指纹数字签名HTTPS的工作过程探究方案1—只使对称加密方案2—只使非对称加密方案3—双方都是用非对称加密方案4—非对称加密对称加密中间人攻击证书方案5—非对称加密对称加密证书认证HTTPS是什么 H…

hypack单波束采集和处理基本流程

前两天有个读者问是否有单波束测深的操作和处理的步骤&#xff0c;在xiaok海洋测绘网上用关键字“单波束”搜索的结果就是确实没有相关的文章&#xff0c;相关的文章都是外业过程记录。下面以单波束XX&#xff08;可以是任何单波束&#xff09;和采集处理软件Hypack为例说明单波…

树莓派通过网线连接笔记本实现笔记本电脑Wifi的网络共享

基于windows电脑连接树莓派进行设置&#xff1a;通过通过一根网线&#xff0c;连接树莓派和电脑&#xff0c;使电脑和树莓派构成一个局域网&#xff0c;然后树莓派接收来自笔记本电脑wifi网络的共享网络。操作方法类似台式机通过网线共享笔记本电脑无线网络的步骤 1、 保证笔记…

[c++整人代码]超级加倍,让人承认自己是大傻猪

㊀程序介绍 这是本人看到的一个整人小病毒&#xff0c;唯一的杀伤力就是逼着你想坑的人承认他是猪。 本次更新&#xff1a;要求运行程序的人手动输入“我是猪”三个字 ㊁程序截图 1 本程序的窗口会自动保持最前 2 无法关闭本窗口 ㊂代码展示&#xff1a; #include <Wi…

【pinia持久化存储】使用pinia和pinia-plugin-persistedstate依赖进行数据的持久化存储

简言 使用pinia和pinia-plugin-persistedstate依赖进行数据的持久化存储。 存储方式 &#xff1a; localStoragesessionStorage pinia-plugin-persistedstate 中文官网 pinia 中文官网 安装 安装和使用 pinia &#xff0c;请参考使用pinia文章。 安装 pinia-plugin-pers…

使用PDF猫怎么将PNG图片转化成JPG格式图片?

如需了解更多办公应用的相关教程&#xff0c;可到赛效官方网站的应用资讯栏目或者应用问答栏目下查看更多。 TXT文本工具是微软操作系统上附带的一种文本格式&#xff0c;打开速度比较快&#xff0c;且记录文字内容时比较便捷且快速&#xff0c;但是很多时候记录成TXT文本的工…

八大排序算法(冒泡排序、快速排序、堆排序.....)

每坚持一天&#xff0c;offer就会离我更近一步&#x1f339; 文章目录冒泡排序选择排序插入排序希尔排序快速排序计数排序堆排序归并排序冒泡排序 算法描述&#xff1a;从第一个元素开始&#xff0c;两两比较&#xff0c;如果前者比后者大&#xff0c;那么就将两者进行交换&am…

[oeasy]python0133_[趣味拓展]颜文字_流石兄弟_表情文字_2ch_kaomoji

颜文字 回忆上次内容 上次我们了解unicode 里面有各种字体 甚至还有emoji emoji 本质上也是文字 按照unicode的方式编码存储时按照utf-8的方式编码显示时按照系统定义的方式进行显示 还有什么好玩的亚文化吗&#xff1f;&#x1f914; emoticon 1982 年 9 月 19 日 诞生了第…

docker安装rabbitmq的延迟队列插件

1.进入rabbitmq镜像 docker exec -it rabbitmq bash2.查看rabbitmq版本号&#xff0c;方便查找对应版本的延迟队列插件 rabbitmqctl version2.查询rabbitmq插件列表 rabbitmq-plugins list若没有rabbitmq_delayed_message_exchange-xxx.ez&#xff0c;则可以去[延迟队列插件…

win11家庭版 使用vm进行虚拟化的设置(此平台不支持虚拟化的 Intel VT-x/EPT。)

一、安装vm,进入BIOS设置虚拟化&#xff08;vm安装16.2以上版本&#xff09; 这个网上很多&#xff0c;就不说了 二、此时安装vm,创建虚拟机就没问题了&#xff0c;但是想继续再虚拟化&#xff0c;将会有一个问题“此平台不支持虚拟化的 Intel VT-x/EPT。” &#xff08;很多…

中移链系统合约管控功能介绍

中移链是在满足我国信息化监管需求、合规可控的前提下&#xff0c;打造的中国移动区块链服务平台。如果把中移链类比为计算机系统&#xff0c;那么系统合约就是中移链中的系统设置部分&#xff0c;用于配置和管理链的资源和行为。在计算机系统中,系统设置提供了对计算机系统的底…

SE11/SM30 维护视图

文章目录创建维护视图偶遇错误创建维护视图 首先我们现在SE11中创建一个透明表,然后点击如下图 需要我们创建一个函数组,他的目的是为了让系统生成相应的代码放在这个函数组中,也可以说是SM30的操作界面;点击上面的保存就可以了 注意在输入屏幕编号的时候切记不要和其他的维护…

ChatGPT背后的逻辑

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl OpenAI与ChatGPT OpenAI是一个美国的人工智能&#xff08;AI&#xff09;研究实验室&#xff0c;由非营利组织OpenAI Incorporated和其盈利子公司OpenAI Limited Partnersh…

HTTPS 加密简析

1 前言 HTTPS采用的是对称加密和非对称加密的混合加密方法。 密码学知识可以查看我的这篇博客 CISSP考试要求里的“应用密码学”内容辅助记忆趣味串讲_晓翔仔的博客-CSDN博客 2.HTTPS加密过程 https在建立链接时是非对称加密&#xff0c;建立链接后是对称加密。 步骤1 客户端…

初识掌控板2.0、官方拓展板和配套编程软件mpython

不是广告&#xff01;&#xff01;不是广告&#xff01;&#xff01; 一、掌控板2.0概览 掌控板又名掌上联网计算机&#xff0c;是一款为青少年学习Python编程和创意制造&#xff0c;特别是物联网应用而设计的开源硬件。内置microPython开源嵌入式Python运行环境&#xff0c;可…

怎么将静图变动图?用这个网站就够了

在使用聊天工具聊天时&#xff0c;大家都喜欢用一些动态的表情包&#xff0c;这种动态表情包就是gif格式图片。因为其生动丰富的画面能够通过一张图片表达多种信息。那么&#xff0c;如何生成gif图片呢&#xff1f;一、什么工具能够制作gif动画&#xff1f; GIF中文网作为一款…

allwinner boot0启动

目录 路径&#xff1a;u-boot-2018/arch/arm/cpu/armv7/sunxi/u-boot-spl.lds 路径&#xff1a;u-boot-2018/arch/arm/cpu/armv7/start.S 路径&#xff1a;u-boot-2018/arch/arm/lib/crt0.S 路径&#xff1a;u-boot-2014.07\common\board_f.c 路径&#xff1a;u-boot-2014.…

领英如何不让对方查看自己的好友,防止他人添加自己客户

那如何防止好友加自己的好友呢&#xff1f;其实领英是可以设置谁能查看到自己好友的&#xff0c;甚至不让所有人查看。 领英是一个关系性的职业社交平台&#xff0c;最大的特点就是关系性。彼此有某种关系的人或在3度内的人都可以查看对方的详细资料&#xff0c;甚至可添加对方…