输入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>
相关推荐
2301_32241428042 分钟前
基于SpringBoot+Vue的休闲零食超市管理系统的设计与实现59004-计算机毕设 原创(免费领源码+部署教程+开发环境)
java·vue.js·spring boot·redis·mysql·决策树·推荐算法
怕浪猫1 小时前
外包和大厂的前端代码,差在凌晨三点
前端·面试·github
m0_敲代码的彭于晏1682 小时前
Vercel 前端部署与全栈开发实战指南
前端·状态模式
徐小夕2 小时前
花了3个月,我们做了一款 AI 版的“飞书文档”
前端·算法·github
贾伟康2 小时前
【化学实验室|17】HarmonyOS ArkTS 亮暗色与视觉令牌实战:集中颜色、间距和交互状态避免页面割裂
前端·移动开发·harmonyos·arkts·arkui
Csvn3 小时前
SSR/SSG/ISR(上):峡谷与渲染策略的时间预算
前端
Csvn3 小时前
SSR/SSG/ISR(下):可交互性、新鲜度与回源账
前端
Elcker5 小时前
YnuoAgent(依诺):一个 npm 包,跑起属于自己的 AI 研发平台
前端·人工智能·npm
酷炫码神6 小时前
Day 8|Vue3 响应式:告别手动操作 DOM,让数据驱动界面
javascript·vue.js·ecmascript
计算机魔术师6 小时前
发现2天,修复2个月:AI挖穿PHP后,卡兹克讲透攻防时间差
前端