输入json 达到预览效果

javascript 复制代码
下载  npm i vue-json-pretty@2.4.0
javascript 复制代码
<template>
  <div class="newBranchesDialog">
    <t-base-dialog
      v-if="addDialogShow"
      title="Json数据配置"
      @closeDialog="closeDialog"
      :dialogVisible="addDialogShow"
      :center="false"
      @handleSubmit="handleSubmit"
      width="70%"
    >
      <div>
        <el-row class="width100 fixHeight200 overflowYAuto" :gutter="10">
          <el-col :span="jsonStr ? 10 : 24">
            <el-input
              v-model="jsonStr"
              :rows="26"
              type="textarea"
              placeholder="请输入配置Json"
            />
          </el-col>
          <el-col :span="2" v-if="jsonStr">
            <div class="height100 flexCenter">
              <el-icon class="fontSize28">
                <Right />
              </el-icon>
            </div>
          </el-col>
          <el-col :span="12" v-if="jsonStr">
            <vue-json-pretty
              :virtual="true"
              :deep="3"
              :height="600"
              :show-icon="true"
              :editable="false"
              :highlightMouseoverNode="true"
              :show-line-number="true"
              v-model="jsonStr"
              :data="isValidJSON(jsonStr) ? JSON.parse(jsonStr) : {}"
              @update:data="updateData($event)"
            ></vue-json-pretty>
          </el-col>
        </el-row>
      </div>
    </t-base-dialog>
  </div>
</template>
<script setup>
import TBaseDialog from "@/components/base-dialog/index.vue";
import TForm from "@/components/form/index.vue";
import { ref, reactive, onMounted, getCurrentInstance } from "vue";
import { ElMessage } from "element-plus";
import VueJsonPretty from "vue-json-pretty";
import "vue-json-pretty/lib/styles.css";

// 初始化值
const addDialogShow = ref(false);
const { proxy } = getCurrentInstance();
const loading = ref(false);
const jsonStr = ref('');
const isValidJSON = (str) => {
  try {
    JSON.parse(str);
    return true;
  } catch (e) {
    return false;
  }
};
//*编辑json内容
const updateData = (data) => {
  jsonStr.value = JSON.stringify(data);
};

// 打开弹框
const showDialog = (data) => {
  addDialogShow.value = true;
};
// 关闭弹框
const closeDialog = () => {
  addDialogShow.value = false;
};

// 提交按钮
const handleSubmit = async () => {
  closeDialog();
  proxy.$parent.carryInData(JSON.parse(jsonStr.value));
};

// 暴露方法
defineExpose({ showDialog });
</script>
相关推荐
王晓枫8 分钟前
flutter接入三方库运行报错:Error running pod install
前端·flutter
符方昊8 分钟前
React 19 对比 React 16 新特性解析
前端·react.js
ssshooter14 分钟前
又被 Safari 差异坑了:textContent 拿到的值居然没换行?
前端
曲折28 分钟前
Cesium-气象要素PNG色斑图叠加
前端·cesium
Forever7_36 分钟前
Electron 淘汰!新的桌面端框架 更强大、更轻量化
前端·vue.js
不会敲代码11 小时前
前端组件化样式隔离实战:React CSS Modules、styled-components 与 Vue scoped 对比
css·vue.js·react.js
Angelial1 小时前
Vue3 嵌套路由 KeepAlive:动态缓存与反向配置方案
前端·vue.js
jiayu1 小时前
Angular学习笔记24:Angular 响应式表单 FormArray 与 FormGroup 相互嵌套
前端
jiayu1 小时前
Angular6学习笔记13:HTTP(3)
前端
小码哥_常1 小时前
Kotlin抽象类与接口:相爱相杀的编程“CP”
前端