<template>
  <div>
    <el-input type="textarea" v-model="data" rows="5" placeholder="输入源数据"/>
    <el-button @click="parse">转换主表</el-button>
    <el-input type="textarea" v-model="staticProp" rows="20" placeholder="主表字段数据"/>
    <el-input type="textarea" v-model="enums" rows="20" placeholder="主表字段数据"/>
  </div>
</template>

<script>
export default {
  name: "FieldConverter",
  data() {
    return {
      data: '',
      staticProp: '',
      enums: ''
    }
  },
  methods: {
    parse() {
      let staticProp = ''
      let enums = ''
      let json = JSON.parse(this.data)
      json.Result.NeedReturnData.Entrys.forEach(entry => {
        entry.Fields.forEach(item => {
          staticProp += `public static final String ${this.getFieldName(item.Key)} = "${item.Key}"; // ${item.Name[0].Value} \n`;
          enums += `${this.getFieldName(item.Key)}("${item.Key}", "${item.Name[0].Value}", ),\n`;
        })
        staticProp += "\n\n"
        enums += "\n\n"
      })
      this.staticProp = staticProp;
      this.enums = enums;
    },
    getFieldName(field) {
      // 转为下划线大写常量类型，中间下划线，前后无需下划线，连续大写无需下划线
      return field
        .replace(/([a-z])([A-Z])/g, '$1_$2') // 在小写字母和大写字母之间插入下划线
        .replace(/([A-Z]+)([A-Z][a-z])/g, '$1_$2') // 在连续大写字母和后续小写字母之间插入下划线
        .replace(/^_/, '') // 去除字符串开头的下划线
        .replace(/_$/, '') // 去除字符串结尾的下划线
        .toUpperCase(); // 转换为大写
    }
  }
}
</script>
