开发者配置项、开发者选项自定义

devOptions.vue源码

<!-- 开发者选项 (Ctrl+Alt+Shift+D)-->
<template>
  <div :class="$options.name" v-if="visible">
    <el-dialog
      :custom-class="`sg-el-dialog`"
      :append-to-body="true"
      :close-on-click-modal="false"
      :close-on-press-escape="true"
      :destroy-on-close="true"
      :fullscreen="false"
      :show-close="true"
      :title="`开发者配置项`"
      :width="`520px`"
      :visible.sync="visible"
      style="animation: none"
    >
      <template v-if="showDevOptions">
        <div style="margin: -20px 0">
          <!-- 这里添加弹窗内容 -->
          <el-select
            style="width: 100%"
            v-model="selectGroupValue_sgAPI"
            @change="changeGroupSelect_sgAPI"
            :placeholder="`请选择`"
          >
            <el-option-group
              v-for="group in selectGroupOptions_sgAPI"
              :key="group.label"
              :label="group.label"
            >
              <el-option
                v-for="item in group.options"
                :key="item.value"
                :label="`${item.label}${
                  item.value === `custom` ? `` : `[${item.value}]`
                }`"
                :value="item.value"
                :disabled="item.disabled"
              />
            </el-option-group>
          </el-select>
          <el-input
            v-if="showCustomSgAPI"
            style="width: 100%; margin-top: 10px"
            ref="input"
            v-model.trim="inputValue_sgAPI"
            maxlength="20"
            :show-word-limit="false"
            :placeholder="`请输入接口路径(带http或https协议)`"
            @focus="$refs.input.select()"
            clearable
          />

          <el-divider />

          <el-button type="danger" @click="oneClickRestore" style="width: 100%"
            >一键还原所有数据</el-button
          >
          <el-alert
            style="margin-top: 10px"
            :closable="true"
            :close-text="``"
            :description="``"
            :effect="'light'"
            :show-icon="true"
            :title="`警告!该操作将丢失所有上传资源数据和配置信息!请谨慎操作!`"
            :type="'error'"
          >
          </el-alert>

          <el-dialog
            :custom-class="'sg-el-dialog'"
            :append-to-body="true"
            :close-on-click-modal="true"
            :close-on-press-escape="true"
            :destroy-on-close="true"
            :fullscreen="false"
            :show-close="true"
            :title="`输入登录密码执行一键还原`"
            :width="'300px'"
            :visible.sync="dialogVisible_oneClickRestore"
          >
            <div>
              <!-- 这里添加弹窗内容 -->
              <el-input
                style="width: 100%"
                ref="psw"
                type="password"
                v-model="psw"
                show-password
                maxlength="20"
                :show-word-limit="false"
                :placeholder="`请输入6位以上的密码`"
                @focus="$refs.psw.select()"
                clearable
              />
            </div>
            <div slot="footer">
              <el-button type="info" @click="dialogVisible_oneClickRestore = false" plain
                >取消</el-button
              >
              <el-button type="primary" @click="confirmRestore">确定</el-button>
            </div>
          </el-dialog>
        </div>
        <div slot="footer" style="display: flex">
          <el-button type="info" @click="visible = false" plain style="flex-grow: 1"
            >取消</el-button
          >
          <el-button type="danger" @click="reset">重置配置项</el-button>
          <el-button type="primary" @click="save">确定并刷新页面</el-button>
          <el-button type="success" @click="change2Local">模拟本地环境</el-button>
        </div>
      </template>

      <template v-else>
        <div style="margin: -20px 0 -10px; display: flex; flex-wrap: nowrap">
          <el-input
            style="width: 100%; margin-right: 10px"
            ref="psw"
            type="password"
            v-model="psw"
            show-password
            maxlength="20"
            :show-word-limit="false"
            :placeholder="`请输入开发者密码`"
            @focus="$refs.psw.select()"
            clearable
            @keyup.enter.native="enterSet"
          />
          <el-button type="primary" @click="enterSet">进入设置</el-button>
        </div>
      </template>
    </el-dialog>
  </div>
</template>
<script>
export default {
  name: "api",
  components: {},
  data() {
    return {
      visible: false,
      showDevOptions: false,
      showCustomSgAPI: false,
      inputValue_sgAPI: ``,
      psw: ``, //开发者密码
      dialogVisible_oneClickRestore: false,

      selectGroupOptions_sgAPI: this.$global.devConfig.sgAPI,
      selectGroupValue_sgAPI: "",
    };
  },
  props: [
    "value", //是否显示
    "disabled", //是否禁用
    "data",
  ],
  computed: {},
  watch: {
    value: {
      handler(d) {
        this.visible = d;
        if (d) {
          this.psw = ``;
          this.showDevOptions = false;
          this.init();
        }
      },
      deep: true,
      immediate: true,
    },
    visible(d) {
      this.$emit("input", d);
    }, //是否显示(双向绑定)
    selectGroupValue_sgAPI(d) {
      this.showCustomSgAPI = d === `custom`;
    },
  },
  created() {},
  mounted() {},
  destroyed() {},
  methods: {
    change2Local(d) {
      let query = this.$route.query;
      query.isLocal = true;

      let href = `${this.$g.getWebURLBeforeHash()}/${
        this.$router.resolve({
          path: this.$route.path,
          query,
        }).href
      }`;
      window.open(href, "_target");
      this.$g.screen.closeWebPage();
    },
    enterSet(d) {
      if (!this.psw)
        return this.$message.error(this.$refs.psw.$el.querySelector("input").placeholder);

      if (this.psw == this.$global.devConfig.devPassword) {
        this.showDevOptions = true;
      } else {
        this.showDevOptions = false;
        this.$message.error(`密码不正确`);
      }
    },
    //初始化
    init({ d } = {}) {
      let sgAPI = localStorage.sgAPI || this.$d.API_ROOT_URL;
      this.selectGroupValue_sgAPI = this.getGroup_sgAPI(sgAPI).value;
      if (this.selectGroupValue_sgAPI === `custom`) {
        this.inputValue_sgAPI = sgAPI;
      }
    },
    getGroup_sgAPI(value) {
      let aa = this.selectGroupOptions_sgAPI;
      for (let i = 0, len = aa.length; i < len; i++) {
        let options = aa[i].options;
        let option = options.find((v) => v.value == value);
        if (option) return option;
      }
      return { value: `custom`, label: `其他` };
    },
    changeGroupSelect_sgAPI(d) {},
    valid(d) {
      if (this.selectGroupValue_sgAPI === `custom`) {
        if (!this.$g.checkEverything(`httpurl`, this.inputValue_sgAPI))
          return this.$message.error(`请输入正确的网址URL`);
      }
    },
    reload(d) {
      this.visible = false;
      location.reload(true);
    },
    reset(d) {
      delete localStorage.sgAPI;

      this.reload();
    },
    save(d) {
      if (this.valid()) return;
      if (this.selectGroupOptions_sgAPI === `custom`) {
        localStorage.sgAPI = this.inputValue_sgAPI;
      } else {
        localStorage.sgAPI = this.selectGroupValue_sgAPI;
      }
      this.reload();
    },
    oneClickRestore(d) {
      this.$confirm(
        `<b  style="color: #F56C6C;font-weight: bold;font-size: 24px;" >此操作将永久删除所有数据和配置信息,是否继续?</b>`,
        `提示`,
        {
          dangerouslyUseHTMLString: true,
          confirmButtonText: `确定`,
          cancelButtonText: `取消`,
          type: "error",
        }
      )
        .then(() => {
          //this.$message.success(`删除成功`);
          this.$confirm(
            `<b  style="color: #F56C6C;font-weight: bold;font-size: 24px;" >请最后一次确认是否要删除所数据和配置信息?</b>`,
            `提示`,
            {
              dangerouslyUseHTMLString: true,
              confirmButtonText: `确定`,
              cancelButtonText: `取消`,
              type: "error",
            }
          )
            .then(() => {
              this.dialogVisible_oneClickRestore = true;
              //this.$message.success(`删除成功`);
            })
            .catch(() => {
              //this.$message(`已取消删除`);
            });
        })
        .catch(() => {
          //this.$message(`已取消删除`);
        });
    },
    valid_oneClickRestore(d) {
      if (!this.psw) return this.$message.error("请输入密码");
      if (this.psw.length < 6) return this.$message.error("请输入正确的密码");
    },
    confirmRestore(d) {
      if (this.valid_oneClickRestore()) return;

      let data = {
        PSW: this.psw,
        sgLog: `前端请求来源:${this.$options.name}一键还原`,
      };
      this.$d.system_restore_doRestore({
        data,
        r: {
          l: { show: () => (this.loading = true), close: () => (this.loading = false) },
          s: (d) => {
            this.dialogVisible = false;
            this.$message.success(`一键还原成功`);
            setTimeout(() => {
              this.$global.exit({ clearCookie: true });
            }, 1000);
            // console.log("【成功】", d);
          },
        },
      });
    },
  },
};
</script>
<style lang="scss" scoped>
.api {
}
</style>

配置项

// 开发者配置项----------------------------------------
devConfig: {
    devPassword: `******`,//开发者密码
    sgAPI: [
        {
            label: '测试环境',
            options: [
                { value: `//shuzhiqiang.com:8088/rp`, label: '***环境名称' },
                { value: `//shuzhiqiang.com:8088/rp`, label: '***环境名称' },
            ],

        },
        {
            label: '生产环境',
            options: [
                { value: `//shuzhiqiang.com/api`, label: '***环境名称' },
                { value: `//shuzhiqiang.com:30107/api`, label: '***环境名称' },
            ]
        },
        {
            label: '其他',
            options: [
                { value: `custom`, label: '自定义' },
            ]
        },
    ]
},

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/723992.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

发力采销,京东的“用户关系学”

作者 | 曾响铃 文 | 响铃说 40多岁打扮精致的城市女性&#xff0c;在西藏那曲的偏远农村&#xff0c;坐着藏民的摩托车&#xff0c;行驶在悬崖边的烂泥路上&#xff0c;只因为受顾客的“委托”&#xff0c;要寻找最原生态的藏区某款产品。 30多岁的憨厚中年男性&#xff0c;…

【吊打面试官系列-Mysql面试题】SQL 语言包括哪几部分?每部分都有哪些操作关键字?

大家好&#xff0c;我是锋哥。今天分享关于 【SQL 语言包括哪几部分&#xff1f;每部分都有哪些操作关键字&#xff1f;】面试题&#xff0c;希望对大家有帮助&#xff1b; SQL 语言包括哪几部分&#xff1f;每部分都有哪些操作关键字&#xff1f; SQL 语言包括数据定义(DDL)、…

[创业之路-117] :制造业企业的必备管理神器-ERP-是什么?企业经营管理与EPR的主要功能模块与全流程

目录 一、什么是EPR 1.1 跨企业的供应链思想 1.2 EPR的概念&#xff1a;企业资源管理计划 1.2.1 助力企业管理各种资源&#xff1a;人、财、物&#xff08;机、料、法、环&#xff09; 1.2.2 助力企业有效管理 1.2.3 效率的提升 1.4 应用领域 二、ERP的功能模块 三、E…

ROS2学习笔记三:话题Service

目录 前言 1 话题简介 2 常用指令 3 RCLCPP实现实现话题 3.1 创建工作空间 3.2 代码编写 3.2.1 发布端编写 3.2.2 发布端编写 前言 Service是ROS 2提供的一种通信机制&#xff0c;用于在不同节点之间进行请求和响应。 Service允许一个节点向另一个节点发送请求&#…

CSS实现文字上下滚动、间歇滚动和无限滚动

目录 1、连续滚动2、间歇性向上滚动3、任意个数向上滚动 本文主要记录了如何实现文字上下滚动效果&#xff0c;实现主要就是用到了css3的两个属性&#xff1a; framekeys和 animation 1、连续滚动 <div class"scroll-continuous"><div class"content…

计算机专业毕设-在线商城系统

1 项目介绍 在线商城系统&#xff0c;后端java语言&#xff0c;springboot&#xff0c;SSM框架。前端thymeleaf&#xff0c;前后端不分离。本项目已经隐去作者信息&#xff0c;所有代码文件均没有创建人和创建时间&#xff0c;可以放心使用。 系统用户分为两类&#xff0c;管理…

Shopee菲律宾本土店允许中途无理由退货,如何应对退货后库存混乱问题?

Shopee菲律宾本土店最近实施了一项新政策&#xff0c;自2024年6月10日起&#xff0c;允许买家在商品仍在运输途中申请退货与退款&#xff0c;此即“在途退货/退款”功能&#xff0c;主要的目的是为了提升买家的购物体验&#xff0c;增强市场竞争力。 图源&#xff1a;Shopee菲律…

关于Panabit在资产平台中类型划分问题

现场同事问了一个问题&#xff1a;Panabit能不能当做CentOS接入&#xff1f; 我第一反应是&#xff1a;Panabit是个什么鬼&#xff1f;为啥要混编接入&#xff1f;后期维护都是事啊。所以&#xff0c;我就想回答&#xff1a;不能&#xff01; 但是&#xff0c;最好要给出一个…

立讯精密:“果链一哥”怎么摆脱依赖症

AI手机创新赋能&#xff0c;隔岸苹果股价走出历史新高&#xff0c;消费电子有望迎来复苏&#xff1f; 这里我们聊聊苹果产业链代工龙头——立讯精密 作为早早入场的代工企业&#xff0c;立讯精密曾经吃足“果链”红利&#xff0c;如今摆在它面前的是增长、毛利、安全等难题。 …

Linux-PXE批量安装

一、部署 PXE 远程安装服务 在大规模的 Linux 应用环境中&#xff0c;如 Web 群集、分布式计算等&#xff0c;服务器往往并不配备光驱设备&#xff0c;在这种情况下&#xff0c;如何为数十乃至上百台服务器裸机快速安装系统呢&#xff1f;传统的 USB光驱、移动硬盘等安装方法显…

深度解析“科技信贷”:构建科技支行的五维模型

科技信贷是指金融机构为支持科技创新、技术改造和设备更新等领域提供的专项信贷服务&#xff0c;旨在促进科技企业的发展和技术的进步。科技信贷在推动科技企业和创新项目发展方面具有重要作用&#xff0c;其特点在于提供定制化的金融支持&#xff0c;以满足科技创新链条中的融…

【C语言】扫雷游戏

Hi~&#xff01;这里是奋斗的小羊&#xff0c;很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~~ &#x1f4a5;&#x1f4a5;个人主页&#xff1a;奋斗的小羊 &#x1f4a5;&#x1f4a5;所属专栏&#xff1a;C语言 &#x1f680;本系列文章为个人学习…

深信服科技:2023网络钓鱼趋势分析报告

随着互联网的快速发展和广泛应用&#xff0c;网络钓鱼活动带来的安全隐患愈演愈烈。因应威胁发展&#xff0c;我 们编撰了此份分析报告&#xff0c;旨在全面了解其发展态势&#xff0c;并提醒相关部门、企业和公众加强防范。 在本报告中&#xff0c;我们将详细梳理网络钓鱼的近…

成都爱尔周进院长提醒毕业生摘镜,术式如何挑

高考完迎来一个悠长假期&#xff0c;考后放松的同时&#xff0c;也有不少同学开始“准备”。 为奔赴梦想&#xff0c;为了理想的专业和学校&#xff0c;不少人决定摘镜。 不少专业有视力要求&#xff0c;且不同专业方向的要求各有不同。我们先来看看有视力要求的专业有哪些&am…

macOS聚集搜索功能开启与关闭

按下command空格弹出 使用搜索 关闭搜索 sudo mdutil -a -i off 启用搜索 sudo mdutil -a -i on

GLib库对核心应用的支持

代码&#xff1a; /** main.c** Created on: 2024-6-19* Author: root*/#include <glib.h> // 包含GLib函数库 static GMutex *mutex NULL; static gboolean t1_end FALSE; // 用于结束线程1的标志 static gboolean t2_end FALSE; // 用于结束线程…

最新版首发 | 手把手教你安装 Vivado2024.1(附安装包)

Q&#xff1a;Vivado出2024版了&#xff01;不知迪普微有没有对应的安装包呢&#xff1f; A&#xff1a;有的&#xff01;回复“Vivado2024.1”即可获得相应安装包哦~ Q&#xff1a;好哒~但是我不会安装&#xff0c;可否安排一期安装教程&#xff1f; A&#xff1a;立马安排&…

网抑云特殊版,登录即永久

前言 今天分享一款特殊版本的音乐软件&#xff0c;相信大家在听网抑云的时候会有两大烦恼&#xff0c; 一是歌曲需要开通VIP才可以收听&#xff0c;不管怎么说也是国内厂商普遍操作 但是第二种烦恼你万万想不到的是&#xff0c;开通了会员后&#xff0c;惊奇的发现&#xff…

数据结构---二叉树的性质总结

第i层上的节点数 证明: 二叉树的最大节点数 证明: 第一层对应2^0个节点, 累加得到 这是一个等比数列 求和公式: 那么这里的n指的是一共有多少个相加 根据从b到a一共有b-a1个可推出 有(k-1)-01个相加 那么结果为: 叶节点与度为2的节点关系 证明: 假设二叉树的总节点数为 NNN…

SSM图书借阅管理系统-计算机毕业设计源码06780

摘 要 大数据时代下&#xff0c;数据呈爆炸式地增长。为了迎合信息化时代的潮流和信息化安全的要求&#xff0c;利用互联网服务于其他行业&#xff0c;促进生产&#xff0c;已经是成为一种势不可挡的趋势。在图书馆的要求下&#xff0c;开发一款整体式结构的图书借阅管理系统&a…