当前位置: 首页 > news >正文

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

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-selectstyle="width: 100%"v-model="selectGroupValue_sgAPI"@change="changeGroupSelect_sgAPI":placeholder="`请选择`"><el-option-groupv-for="group in selectGroupOptions_sgAPI":key="group.label":label="group.label"><el-optionv-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-inputv-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-alertstyle="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-inputstyle="width: 100%"ref="psw"type="password"v-model="psw"show-passwordmaxlength="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-inputstyle="width: 100%; margin-right: 10px"ref="psw"type="password"v-model="psw"show-passwordmaxlength="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.一键还原接口({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: '自定义' },]},]
},

相关文章:

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

devOptions.vue源码 <!-- 开发者选项 &#xff08;CtrlAltShiftD&#xff09;--> <template><div :class"$options.name" v-if"visible"><el-dialog:custom-class"sg-el-dialog":append-to-body"true":close-on…...

【Java】解决Java报错:IndexOutOfBoundsException in Collections

文章目录 引言一、IndexOutOfBoundsException的定义与概述1. 什么是IndexOutOfBoundsException&#xff1f;2. IndexOutOfBoundsException的常见触发场景3. 示例代码 二、解决方案1. 检查索引范围2. 使用增强型for循环3. 使用ListIterator进行遍历4. 使用线程安全的集合 三、最…...

C++编程(三)面向对象

文章目录 一、概念二、类的定义&#xff08;一&#xff09;声明一个类类型的语法格式&#xff1a;&#xff08;二&#xff09;类中的访问控制权限&#xff08;三&#xff09;实例化对象1. 栈区对象2. 堆区对象 &#xff08;四&#xff09;类内声明类外实现&#xff08;五&#…...

Batch入门教程

Batch学习在多个领域有不同的应用&#xff0c;但最常见的是在机器学习和教育学习领域。以下是一个关于Batch学习入门的清晰指南&#xff0c;将分别介绍这两个领域中的Batch学习概念、方法和一些实用信息。 1. 机器学习中的Batch学习 定义与概念 Batch_Size&#xff1a;在机器…...

49-2 内网渗透 - 使用UACME Bypass UAC

靶场准备: 1. 使用已有的 Windows 2012 虚拟机 确保你的虚拟机正在运行,并且可以正常访问。2. 添加 test 用户到管理员组(如上篇文件添加过了就跳过这一步) 具体命令如下: net localgroup administrators test /add 3. 切换用户登录 注销当前会话,并使用 test 用户登录。…...

Django 表单使用示例:数据格式校验

在本文中,我们将使用 Django 的表单(Forms)功能来创建一个添加角色的页面,并对用户提交的数据进行格式校验。 创建 Django 项目和应用 首先,我们创建一个名为 ​​form_demo​​​ 的 Django 项目和一个名为 ​​app01​​ 的应用: django-admin startproject form_de…...

OkHttp框架源码深度剖析【Android热门框架分析第一弹】

OkHttp介绍 OkHttp是当下Android使用最频繁的网络请求框架&#xff0c;由Square公司开源。Google在Android4.4以后开始将源码中的HttpURLConnection底层实现替换为OKHttp&#xff0c;同时现在流行的Retrofit框架底层同样是使用OKHttp的。 源码传送门 优点: 支持Http1、Http…...

【MySQL】数据库——备份与恢复,日志管理1

一、数据备份的重要性 1.备份的主要目的是灾难恢复 在生产环境中&#xff0c;数据的安全性至关重要 任何数据的丢失都可能产生严重的后果造成数据丢失的原因&#xff1a; 程序错误人为,操作错误运算错误磁盘故障灾难&#xff08;如火灾、地震&#xff09;和盗窃 2.数据库备份…...

什么样的企业适合SD-WAN网络专线?

SD-WAN&#xff08;Software-Defined Wide Area Network&#xff0c;软件定义广域网&#xff09;是一种网络技术&#xff0c;它利用软件定义的方式管理和控制广域网&#xff08;WAN&#xff09;&#xff0c;旨在提高网络效率、降低成本并简化网络管理。以下是适合采用SD-WAN网络…...

已解决java.security.GeneralSecurityException: 安全性相关的通用异常的正确解决方法,亲测有效!!!

已解决java.security.GeneralSecurityException: 安全性相关的通用异常的正确解决方法&#xff0c;亲测有效&#xff01;&#xff01;&#xff01; 目录 问题分析 报错原因 解决思路 解决方法 确定具体异常类型 检查输入参数 验证算法支持性 调整安全策略 确保资源可…...

秋招Java后端开发冲刺——非关系型数据库篇(Redis)

一、非关系型数据库 1. 主要针对的是键值、文档以及图形类型数据存储。 2. 特点&#xff1a; 特点说明灵活的数据模型支持多种数据模型&#xff08;文档、键值、列族、图&#xff09;&#xff0c;无需预定义固定的表结构&#xff0c;能够处理各种类型的数据。高扩展性设计为水…...

个人对JVM的一点理解

JVM&#xff08;Java 虚拟机&#xff09;是 Java 程序能够跨平台运行的关键。它负责将 Java 字节码转换为机器码并执行。 JVM 主要由类加载器、运行时数据区、执行引擎和本地方法接口等部分组成。运行时数据区包括方法区、堆、虚拟机栈、本地方法栈和程序计数器等。 GC&#xf…...

Flutter【组件】可折叠文本组件

简介 flutter 可折叠文本组件。 点击展开&#xff0c;收起折叠文本。支持样式自定义 github地址&#xff1a; github.com/ThinkerJack… pub地址&#xff1a;https://pub.dev/packages/jac_uikit 展开收起文本 使用方式&#xff1a; ExpandableText(content: 测试 * 50,ma…...

内容安全复习 7 - 对抗攻击与防御

文章目录 概述攻击对抗性攻击的目的攻击的损失函数如何攻击FGSM黑盒与白盒真实世界的攻击 防御被动防御主动防御 概述 动机 &#xff08;1&#xff09;不仅要在实验室中部署机器学习分类器&#xff0c;也要在现实世界中部署&#xff1b;实际应用 &#xff08;2&#xff09;分类…...

淘宝店铺商家订单API-接入ERP,多平台订单同步的利器

淘宝开放平台给商家们提供了丰富的API&#xff0c;以方便大家扩展业务流程。但是需要调用这些API&#xff0c;商家们要提交资质审核&#xff0c;审核条件也是很严格的。第三方数据公司的存在可以为大家解决这个问题。 custom-自定义API操作 请求参数 请求参数&#xff1a;ap…...

【微前端-Single-SPA、qiankun的基本原理和使用】

背景 在实际项目中&#xff0c;随着日常跌倒导致的必然墒增&#xff0c;项目会越来越冗余不好维护&#xff0c;而且有时候一个项目会使用的其他团队的功能&#xff0c;这种跨团队不好维护和管理等等问题&#xff0c;所以基于解决这些问题&#xff0c;出现了微前端的解决方案。…...

多元化功能空间,打造影像产业生态圈

国际数字影像产业园的多元化功能空间定位涵盖了从产业实训、研发创新、资产交易、集群发展到孵化服务、大数据支持、产学研合作以及人力资源服务等多个方面&#xff0c;旨在为数字影像产业提供全方位的支持和服务&#xff0c;推动产业的升级和发展。 1、产业实训空间&#xff1…...

华为鸿蒙正式杀入工业自动化,反攻开始了!

导语 大家好&#xff0c;我是社长&#xff0c;老K。专注分享智能制造和智能仓储物流等内容。 新书《智能物流系统构成与技术实践》 在近日举行的2024华为开发者大会上&#xff0c;华龙讯达与华为共同发布了基于鸿蒙内核技术的“HualongOS 华龙工业操作系统”&#xff0c;这一里…...

学历优先还是专业优先?高考志愿填报的抉择

学历优先还是专业优先&#xff1f;高考志愿填报的抉择 2024年高考帷幕落下&#xff0c;新一轮的思考与选择悄然来临。对于每一位高考考生&#xff0c;选择学校和专业是开启大学新生活的两个前置必选项。然而&#xff0c;有时候“鱼与熊掌不可兼得”&#xff0c;在分数受限的情…...

SpringAOP常用功能实现

1. 导入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId> </dependency> 2. 核心通知 package com.example.aspect;import lombok.SneakyThrows; import org.aspectj.l…...

微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】

微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来&#xff0c;Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...

Java 加密常用的各种算法及其选择

在数字化时代&#xff0c;数据安全至关重要&#xff0c;Java 作为广泛应用的编程语言&#xff0c;提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景&#xff0c;有助于开发者在不同的业务需求中做出正确的选择。​ 一、对称加密算法…...

leetcodeSQL解题:3564. 季节性销售分析

leetcodeSQL解题&#xff1a;3564. 季节性销售分析 题目&#xff1a; 表&#xff1a;sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...

让AI看见世界:MCP协议与服务器的工作原理

让AI看见世界&#xff1a;MCP协议与服务器的工作原理 MCP&#xff08;Model Context Protocol&#xff09;是一种创新的通信协议&#xff0c;旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天&#xff0c;MCP正成为连接AI与现实世界的重要桥梁。…...

优选算法第十二讲:队列 + 宽搜 优先级队列

优选算法第十二讲&#xff1a;队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...

离线语音识别方案分析

随着人工智能技术的不断发展&#xff0c;语音识别技术也得到了广泛的应用&#xff0c;从智能家居到车载系统&#xff0c;语音识别正在改变我们与设备的交互方式。尤其是离线语音识别&#xff0c;由于其在没有网络连接的情况下仍然能提供稳定、准确的语音处理能力&#xff0c;广…...

消防一体化安全管控平台:构建消防“一张图”和APP统一管理

在城市的某个角落&#xff0c;一场突如其来的火灾打破了平静。熊熊烈火迅速蔓延&#xff0c;滚滚浓烟弥漫开来&#xff0c;周围群众的生命财产安全受到严重威胁。就在这千钧一发之际&#xff0c;消防救援队伍迅速行动&#xff0c;而豪越科技消防一体化安全管控平台构建的消防“…...

Spring Boot + MyBatis 集成支付宝支付流程

Spring Boot MyBatis 集成支付宝支付流程 核心流程 商户系统生成订单调用支付宝创建预支付订单用户跳转支付宝完成支付支付宝异步通知支付结果商户处理支付结果更新订单状态支付宝同步跳转回商户页面 代码实现示例&#xff08;电脑网站支付&#xff09; 1. 添加依赖 <!…...

uni-app学习笔记三十五--扩展组件的安装和使用

由于内置组件不能满足日常开发需要&#xff0c;uniapp官方也提供了众多的扩展组件供我们使用。由于不是内置组件&#xff0c;需要安装才能使用。 一、安装扩展插件 安装方法&#xff1a; 1.访问uniapp官方文档组件部分&#xff1a;组件使用的入门教程 | uni-app官网 点击左侧…...

Linux-进程间的通信

1、IPC&#xff1a; Inter Process Communication&#xff08;进程间通信&#xff09;&#xff1a; 由于每个进程在操作系统中有独立的地址空间&#xff0c;它们不能像线程那样直接访问彼此的内存&#xff0c;所以必须通过某种方式进行通信。 常见的 IPC 方式包括&#…...