【sgCreateTableData】自定义小工具:敏捷开发→自动化生成表格数据数组[基于el-table]

简介: 【sgCreateTableData】自定义小工具:敏捷开发→自动化生成表格数据数组[基于el-table]

特性

  1. 支持单列中文字段名自动生成拼音声母组成的列名
  2. 支持两列(中英文空格分隔开,不区分中英文字段名前后顺序,可以多个空格隔开,仅识别前两列空格分开的字符串)的方式之自动生成demo数据
  3. 支持键值对描述字段英文名和字段中文名,生成demo数据

sgCreateTableData源码

<template>
  <!-- 
前往https://blog.csdn.net/qq_37860634/article/details/136141769
查看使用说明
-->
  <div :class="$options.name">
    <div class="sg-head">表格数据生成工具</div>
    <div class="sg-container">
      <div class="sg-start">
        <div style="margin-bottom: 10px">字段中文名</div>
        <div style="display: flex; margin-bottom: 10px">
          <el-select
            style="width: 150px"
            v-model="selectValue_type"
            @change="(d) => {}"
            :placeholder="`请选择数据内容类型`"
          >
            <el-option
              v-for="(select, index) in selectOptions_type"
              :key="index"
              :value="select.value"
              :label="select.label"
              :disabled="select.disabled"
            ></el-option>
          </el-select>
          <template v-if="selectValue_type == 2">
            <div style="display: flex; align-items: center; margin-left: 10px">
              <label style="margin-right: 5px">fieldName</label>
              <el-input
                style="width: 150px"
                ref="fieldName"
                v-model.trim="fieldNameValue"
                maxlength="20"
                :show-word-limit="false"
                :placeholder="`字段名`"
                @focus="$refs.fieldName.select()"
                clearable
              />
 
              <label style="margin-left: 10px; margin-right: 5px">keyName</label>
              <el-input
                style="width: 150px"
                ref="keyName"
                v-model.trim="keyNameValue"
                maxlength="20"
                :show-word-limit="false"
                :placeholder="`字段值名`"
                @focus="$refs.keyName.select()"
                clearable
              />
            </div>
          </template>
        </div>
        <el-input
          ref="textareaValue1"
          style="margin-bottom: 10px"
          type="textarea"
          :placeholder="
            this.selectOptions_type.find((v) => v.value == this.selectValue_type)
              .placeholder
          "
          v-model.trim="textareaValue1"
          show-word-limit
        />
 
        <el-button type="primary" @click="createResult">生成表格数据</el-button>
      </div>
      <div class="sg-center">→</div>
 
      <div class="sg-end">
        <div style="margin-bottom: 10px">生成结果</div>
        <el-input
          style="margin-bottom: 10px"
          type="textarea"
          :placeholder="`请复制结果`"
          v-model.trim="textareaValue2"
          show-word-limit
        />
 
        <el-button type="primary" @click="copyResult">复制</el-button>
      </div>
    </div>
  </div>
</template>
 
<script>
import pinyin from "@/js/pinyin";
export default {
  name: "sgCreateTableData",
  data() {
    return {
      selectOptions_type: [
        {
          value: 1,
          label: "文本",
          placeholder: `请粘贴字段中文名(或者:字段英文名+空格+字段中文名)`,
        },
        { value: 2, label: "json数据", placeholder: `请粘贴键值对描述json数组` },
      ],
 
      selectValue_type: 1,
 
      fieldNameValue: `fieldName`,
      keyNameValue: `fieldName_TEXT`,
 
      textareaValue1: "",
      textareaValue2: "",
    };
  },
  watch: {
    textareaValue1(newValue, oldValue) {
      newValue && this.createResult(newValue);
    },
  },
  methods: {
    createResult(d) {
      let r = [],
        rowData = {};
      switch (this.selectValue_type) {
        case 1:
          let texts = this.textareaValue1
            .split("\n")
            .map((v) => v.split("\t").join("").trim());
          texts = texts.filter((v, i, ar) => v !== ``);
 
          texts.map((v) => {
            let strings = v.replace(/\s+/g, ` `).split(` `); //用空格分隔开两列字段名
            let label = ``;
            let prop = ``;
            // 如果是多列内容
            if (strings.length > 1) {
              // 如果第一列的字符串是中文
              if (this.$g.checkEverything(`cn`, strings[0])) {
                label = strings[0];
                prop = strings[1];
              } else {
                label = strings[1];
                prop = strings[0];
              }
            } else {
              // 如果是单列内容
              prop = pinyin.getCamelChars(v);
              label = v;
            }
            rowData[prop] = label;
          });
 
          break;
        case 2:
          if (this.fieldNameValue && this.keyNameValue) {
          } else {
            return this.$message.error(`fieldName和keyName都要填写`);
          }
          if (this.$g.json.isJSON(this.textareaValue1)) {
            let arr = JSON.parse(this.textareaValue1);
            arr.map((v) => {
              let prop = v[this.fieldNameValue];
              let label = v[this.keyNameValue];
              rowData[prop] = label;
            });
          } else {
            return this.$message.error(`请输入正确的json格式的对象数组内容`);
          }
 
          break;
      }
 
      r = [...Array(5)].map((v) => Object.assign({}, { ID: this.$g.UUID() }, rowData));
 
      this.textareaValue2 = JSON.stringify(r, null, 2);
 
      this.copyResult(); //自动复制生成结果
    },
    copyResult(d) {
      this.$g.copy(this.textareaValue2, true);
      this.$nextTick(() => {
        this.$refs.textareaValue1.select();
      });
    },
  },
};
</script>
 
<style lang="scss" scoped>
.sgCreateTableData {
  width: 100%;
  height: 100%;
  position: absolute;
  box-sizing: border-box;
  padding: 20px;
 
  .sg-head {
    display: flex;
    align-items: center;
    font-size: 24px;
    font-weight: bold;
    color: #409eff;
    margin-bottom: 10px;
  }
 
  .sg-container {
    display: flex;
    flex-wrap: nowrap;
    height: calc(100vh - 70px);
 
    & > .sg-start {
      width: calc(50% - 20px);
      height: 100%;
      flex-shrink: 0;
      display: flex;
      flex-direction: column;
    }
 
    & > .sg-center {
      display: flex;
      justify-content: center;
      align-items: center;
      flex-grow: 1;
      margin: 0 10px;
      font-size: 24px;
      color: #409eff;
      font-weight: bold;
    }
 
    & > .sg-end {
      width: calc(50% - 20px);
      height: 100%;
      flex-shrink: 0;
      display: flex;
      flex-direction: column;
    }
 
    >>> .el-textarea {
      width: 100%;
      height: 100%;
      textarea {
        width: 100%;
        height: 100%;
        max-height: revert;
      }
    }
  }
}
</style>


相关文章
|
18天前
|
数据采集 存储 API
网络爬虫与数据采集:使用Python自动化获取网页数据
【4月更文挑战第12天】本文介绍了Python网络爬虫的基础知识,包括网络爬虫概念(请求网页、解析、存储数据和处理异常)和Python常用的爬虫库requests(发送HTTP请求)与BeautifulSoup(解析HTML)。通过基本流程示例展示了如何导入库、发送请求、解析网页、提取数据、存储数据及处理异常。还提到了Python爬虫的实际应用,如获取新闻数据和商品信息。
|
22天前
|
敏捷开发
【sgCreatePinyin】自定义小工具:敏捷开发→自动化生成拼音字段名称(字段名生成工具)
【sgCreatePinyin】自定义小工具:敏捷开发→自动化生成拼音字段名称(字段名生成工具)
|
1月前
|
移动开发 安全 数据安全/隐私保护
iOS 全局自动化代码混淆工具!支持 cocoapod 组件代码一并混淆
iOS 全局自动化代码混淆工具!支持 cocoapod 组件代码一并混淆
|
1月前
|
jenkins 测试技术 持续交付
现代软件测试中的自动化工具与挑战
随着软件开发领域的不断发展,自动化测试工具在测试过程中扮演着越来越重要的角色。本文将探讨现代软件测试中自动化工具的应用及面临的挑战,旨在帮助开发人员和测试人员更好地理解和应对自动化测试中的问题。
|
5天前
|
算法 安全 Linux
Ansible自动化工具copy复制用法
Ansible 中的 copy 模块用于将文件或目录从本地计算机或远程主机复制到远程主机上的特定位置。它是一个功能强大的模块,可用于各种文件传输任务. ### 作用 将配置文件复制到远程服务器 将应用程序部署到远程服务器 将日志文件从远程服务器复制到本地计算机 备份和恢复文件和目录
Ansible自动化工具copy复制用法
|
7天前
|
存储 运维 Shell
Ansible自动化运维工具安装和基本使用
Ansible 是一款无代理的IT自动化工具,通过SSH连接目标主机执行配置管理、应用部署和云端管理任务。它使用YAML编写的Playbook定义任务,核心组件包括Playbook、模块、主机清单、变量等。Ansible的优势在于易用、功能强大、无须在目标主机安装额外软件,并且开源。安装过程涉及配置网络源、yum安装和SSH密钥设置。通过定义主机清单和使用模块进行通信测试,确保连接成功。
Ansible自动化运维工具安装和基本使用
|
29天前
|
Java 测试技术 API
软件测试中的自动化工具与策略
软件测试是确保软件质量的重要环节,而自动化测试工具和策略的应用在提高测试效率和准确性方面发挥着重要作用。本文将介绍几种常见的自动化测试工具,并探讨在软件测试中应用自动化测试的最佳实践和策略。
|
1月前
|
Web App开发 Java 测试技术
深入理解与应用软件自动化测试工具Selenium
随着软件开发的快速发展,软件测试在保证产品质量方面发挥着越来越重要的作用。其中,自动化测试以其效率高、成本低的特点受到了广大开发者的欢迎。本文主要介绍了自动化测试工具Selenium的基本概念、原理以及在实际开发中的应用,旨在帮助读者更好地理解和使用Selenium进行高效的自动化测试。
23 4
|
1月前
|
人工智能 运维 Prometheus
现代运维中的自动化工具与挑战
随着信息技术的不断发展,现代运维工作日益复杂且关键。本文将探讨现代运维中自动化工具的应用与挑战,介绍各类自动化工具在提高效率、降低风险方面的作用,并讨论在实际应用中可能面临的问题与解决方法。
27 4
|
1月前
|
人工智能 测试技术 虚拟化
现代软件测试中的自动化工具与技术
随着信息技术的迅猛发展,现代软件开发和测试领域也在不断创新。本文将探讨现代软件测试中自动化工具与技术的应用。通过分析自动化测试的优势、挑战以及最佳实践,帮助读者更好地理解当前软件测试领域的发展趋势,并为实际工作提供参考。
20 1

热门文章

最新文章