输入json 达到预览效果

javascript 复制代码
下载  npm i [email protected]
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>
相关推荐
LaoZhangAI1 小时前
Claude MCP模型上下文协议详解:AI与外部世界交互的革命性突破【2025最新指南】
前端
LaoZhangAI1 小时前
2025最全Cursor MCP实用指南:15个高效工具彻底提升AI编程体验【实战攻略】
前端
Kagerou2 小时前
vue3基础知识(结合TypeScript)
前端
市民中心的蟋蟀2 小时前
第五章 使用Context和订阅来共享组件状态
前端·javascript·react.js
逆袭的小黄鸭2 小时前
JavaScript 闭包:强大特性背后的概念、应用与内存考量
前端·javascript·面试
carterwu2 小时前
各个大厂是怎么实现组件库和相应扩展的?基础组件、区块、页面
前端
Face2 小时前
promise 规范应用
前端
Mintopia2 小时前
Node.js 中 fs.readFile API 的使用详解
前端·javascript·node.js
Face2 小时前
事件循环
前端·javascript
ONE_Gua2 小时前
chromium魔改——navigator.webdriver 检测
前端·后端·爬虫