update:参数配置,值类型强校验 (#725)

This commit is contained in:
hrz
2025-04-10 10:33:55 +08:00
committed by GitHub
parent e4a0d2c56c
commit 81d2571f8f
16 changed files with 168 additions and 60 deletions
@@ -43,4 +43,12 @@ public interface ErrorCode {
int PASSWORD_WEAK_ERROR = 10031;
int DEL_MYSELF_ERROR = 10032;
int DEVICE_CAPTCHA_ERROR = 10033;
// 参数校验相关错误码
int PARAM_VALUE_NULL = 10034;
int PARAM_TYPE_NULL = 10035;
int PARAM_TYPE_INVALID = 10036;
int PARAM_NUMBER_INVALID = 10037;
int PARAM_BOOLEAN_INVALID = 10038;
int PARAM_ARRAY_INVALID = 10039;
}
@@ -10,6 +10,7 @@ import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Null;
import jakarta.validation.constraints.Pattern;
import lombok.Data;
import xiaozhi.common.utils.DateUtils;
import xiaozhi.common.validator.group.AddGroup;
@@ -36,6 +37,11 @@ public class SysParamsDTO implements Serializable {
@NotBlank(message = "{sysparams.paramvalue.require}", groups = DefaultGroup.class)
private String paramValue;
@Schema(description = "值类型")
@NotBlank(message = "{sysparams.valuetype.require}", groups = DefaultGroup.class)
@Pattern(regexp = "^(string|number|boolean|array)$", message = "{sysparams.valuetype.pattern}", groups = DefaultGroup.class)
private String valueType;
@Schema(description = "备注")
private String remark;
@@ -25,6 +25,10 @@ public class SysParamsEntity extends BaseEntity {
* 参数值
*/
private String paramValue;
/**
* 值类型:string-字符串,number-数字,boolean-布尔,array-数组
*/
private String valueType;
/**
* 类型 0:系统参数 1:非系统参数
*/
@@ -70,6 +70,8 @@ public class SysParamsServiceImpl extends BaseServiceImpl<SysParamsDao, SysParam
@Override
@Transactional(rollbackFor = Exception.class)
public void save(SysParamsDTO dto) {
validateParamValue(dto);
SysParamsEntity entity = ConvertUtils.sourceToTarget(dto, SysParamsEntity.class);
insert(entity);
@@ -79,12 +81,55 @@ public class SysParamsServiceImpl extends BaseServiceImpl<SysParamsDao, SysParam
@Override
@Transactional(rollbackFor = Exception.class)
public void update(SysParamsDTO dto) {
validateParamValue(dto);
SysParamsEntity entity = ConvertUtils.sourceToTarget(dto, SysParamsEntity.class);
updateById(entity);
sysParamsRedis.set(entity.getParamCode(), entity.getParamValue());
}
/**
* 校验参数值类型
*/
private void validateParamValue(SysParamsDTO dto) {
if (dto == null) {
throw new RenException(ErrorCode.PARAM_VALUE_NULL);
}
if (StringUtils.isBlank(dto.getParamValue())) {
throw new RenException(ErrorCode.PARAM_VALUE_NULL);
}
if (StringUtils.isBlank(dto.getValueType())) {
throw new RenException(ErrorCode.PARAM_TYPE_NULL);
}
String valueType = dto.getValueType().toLowerCase();
String paramValue = dto.getParamValue();
switch (valueType) {
case "string":
break;
case "array":
break;
case "number":
try {
Double.parseDouble(paramValue);
} catch (NumberFormatException e) {
throw new RenException(ErrorCode.PARAM_NUMBER_INVALID);
}
break;
case "boolean":
if (!"true".equalsIgnoreCase(paramValue) && !"false".equalsIgnoreCase(paramValue)) {
throw new RenException(ErrorCode.PARAM_BOOLEAN_INVALID);
}
break;
default:
throw new RenException(ErrorCode.PARAM_TYPE_INVALID);
}
}
@Override
@Transactional(rollbackFor = Exception.class)
public void delete(Long[] ids) {
@@ -1,50 +0,0 @@
-- 本文件用于初始化系统参数数据,无需手动执行,在项目启动时会自动执行
-- --------------------------------------------------------
-- 初始化参数管理配置
DROP TABLE IF EXISTS sys_params;
-- 参数管理
create table sys_params
(
id bigint NOT NULL COMMENT 'id',
param_code varchar(100) COMMENT '参数编码',
param_value varchar(2000) COMMENT '参数值',
param_type tinyint unsigned default 1 COMMENT '类型 0:系统参数 1:非系统参数',
remark varchar(200) COMMENT '备注',
creator bigint COMMENT '创建者',
create_date datetime COMMENT '创建时间',
updater bigint COMMENT '更新者',
update_date datetime COMMENT '更新时间',
primary key (id),
unique key uk_param_code (param_code)
)ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COMMENT='参数管理';
-- 服务器配置
INSERT INTO `sys_params` (id, param_code, param_value, param_type, remark) VALUES (1, 'server.ip', '0.0.0.0', 1, '服务器监听IP地址');
INSERT INTO `sys_params` (id, param_code, param_value, param_type, remark) VALUES (2, 'server.port', '8000', 1, '服务器监听端口');
INSERT INTO `sys_params` (id, param_code, param_value, param_type, remark) VALUES (3, 'server.secret', 'null', 1, '服务器密钥');
INSERT INTO `sys_params` (id, param_code, param_value, param_type, remark) VALUES (4, 'log.log_format', '<green>{time:YYMMDD HH:mm:ss}</green>[{version}_{selected_module}][<light-blue>{extra[tag]}</light-blue>]-<level>{level}</level>-<light-green>{message}</light-green>', 1, '控制台日志格式');
INSERT INTO `sys_params` (id, param_code, param_value, param_type, remark) VALUES (5, 'log.log_format_file', '{time:YYYY-MM-DD HH:mm:ss} - {version}_{selected_module} - {name} - {level} - {extra[tag]} - {message}', 1, '文件日志格式');
INSERT INTO `sys_params` (id, param_code, param_value, param_type, remark) VALUES (6, 'log.log_level', 'INFO', 1, '日志级别');
INSERT INTO `sys_params` (id, param_code, param_value, param_type, remark) VALUES (7, 'log.log_dir', 'tmp', 1, '日志目录');
INSERT INTO `sys_params` (id, param_code, param_value, param_type, remark) VALUES (8, 'log.log_file', 'server.log', 1, '日志文件名');
INSERT INTO `sys_params` (id, param_code, param_value, param_type, remark) VALUES (9, 'log.data_dir', 'data', 1, '数据目录');
INSERT INTO `sys_params` (id, param_code, param_value, param_type, remark) VALUES (10, 'delete_audio', 'true', 1, '是否删除使用后的音频文件');
INSERT INTO `sys_params` (id, param_code, param_value, param_type, remark) VALUES (11, 'close_connection_no_voice_time', '120', 1, '无语音输入断开连接时间(秒)');
INSERT INTO `sys_params` (id, param_code, param_value, param_type, remark) VALUES (12, 'tts_timeout', '10', 1, 'TTS请求超时时间(秒)');
INSERT INTO `sys_params` (id, param_code, param_value, param_type, remark) VALUES (13, 'enable_wakeup_words_response_cache', 'true', 1, '是否开启唤醒词加速');
INSERT INTO `sys_params` (id, param_code, param_value, param_type, remark) VALUES (14, 'enable_greeting', 'true', 1, '是否开启开场回复');
INSERT INTO `sys_params` (id, param_code, param_value, param_type, remark) VALUES (15, 'enable_stop_tts_notify', 'false', 1, '是否开启结束提示音');
INSERT INTO `sys_params` (id, param_code, param_value, param_type, remark) VALUES (16, 'stop_tts_notify_voice', 'config/assets/tts_notify.mp3', 1, '结束提示音文件路径');
INSERT INTO `sys_params` (id, param_code, param_value, param_type, remark) VALUES (17, 'exit_commands', '["退出","关闭"]', 1, '退出命令列表');
INSERT INTO `sys_params` (id, param_code, param_value, param_type, remark) VALUES (18, 'xiaozhi', '{
"type": "hello",
"version": 1,
"transport": "websocket",
"audio_params": {
"format": "opus",
"sample_rate": 16000,
"channels": 1,
"frame_duration": 60
}
}', 1, '小智类型');
INSERT INTO `sys_params` (id, param_code, param_value, param_type, remark) VALUES (19, 'wakeup_words', '["你好小智","你好小志","小爱同学","你好小鑫","你好小新","小美同学","小龙小龙","喵喵同学","小滨小滨","小冰小冰"]', 1, '唤醒词列表');
@@ -0,0 +1,61 @@
-- 本文件用于初始化系统参数数据,无需手动执行,在项目启动时会自动执行
-- --------------------------------------------------------
-- 初始化参数管理配置
DROP TABLE IF EXISTS sys_params;
-- 参数管理
create table sys_params
(
id bigint NOT NULL COMMENT 'id',
param_code varchar(100) COMMENT '参数编码',
param_value varchar(2000) COMMENT '参数值',
value_type varchar(20) default 'string' COMMENT '值类型:string-字符串,number-数字,boolean-布尔,array-数组',
param_type tinyint unsigned default 1 COMMENT '类型 0:系统参数 1:非系统参数',
remark varchar(200) COMMENT '备注',
creator bigint COMMENT '创建者',
create_date datetime COMMENT '创建时间',
updater bigint COMMENT '更新者',
update_date datetime COMMENT '更新时间',
primary key (id),
unique key uk_param_code (param_code)
)ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COMMENT='参数管理';
-- 服务器配置
INSERT INTO `sys_params` (id, param_code, param_value, value_type, param_type, remark) VALUES (100, 'server.ip', '0.0.0.0', 'string', 1, '服务器监听IP地址');
INSERT INTO `sys_params` (id, param_code, param_value, value_type, param_type, remark) VALUES (101, 'server.port', '8000', 'number', 1, '服务器监听端口');
INSERT INTO `sys_params` (id, param_code, param_value, value_type, param_type, remark) VALUES (102, 'server.secret', 'null', 'string', 1, '服务器密钥');
INSERT INTO `sys_params` (id, param_code, param_value, value_type, param_type, remark) VALUES (201, 'log.log_format', '<green>{time:YYMMDD HH:mm:ss}</green>[{version}_{selected_module}][<light-blue>{extra[tag]}</light-blue>]-<level>{level}</level>-<light-green>{message}</light-green>', 'string', 1, '控制台日志格式');
INSERT INTO `sys_params` (id, param_code, param_value, value_type, param_type, remark) VALUES (202, 'log.log_format_file', '{time:YYYY-MM-DD HH:mm:ss} - {version}_{selected_module} - {name} - {level} - {extra[tag]} - {message}', 'string', 1, '文件日志格式');
INSERT INTO `sys_params` (id, param_code, param_value, value_type, param_type, remark) VALUES (203, 'log.log_level', 'INFO', 'string', 1, '日志级别');
INSERT INTO `sys_params` (id, param_code, param_value, value_type, param_type, remark) VALUES (204, 'log.log_dir', 'tmp', 'string', 1, '日志目录');
INSERT INTO `sys_params` (id, param_code, param_value, value_type, param_type, remark) VALUES (205, 'log.log_file', 'server.log', 'string', 1, '日志文件名');
INSERT INTO `sys_params` (id, param_code, param_value, value_type, param_type, remark) VALUES (206, 'log.data_dir', 'data', 'string', 1, '数据目录');
INSERT INTO `sys_params` (id, param_code, param_value, value_type, param_type, remark) VALUES (301, 'delete_audio', 'true', 'boolean', 1, '是否删除使用后的音频文件');
INSERT INTO `sys_params` (id, param_code, param_value, value_type, param_type, remark) VALUES (302, 'close_connection_no_voice_time', '120', 'number', 1, '无语音输入断开连接时间(秒)');
INSERT INTO `sys_params` (id, param_code, param_value, value_type, param_type, remark) VALUES (303, 'tts_timeout', '10', 'number', 1, 'TTS请求超时时间(秒)');
INSERT INTO `sys_params` (id, param_code, param_value, value_type, param_type, remark) VALUES (304, 'enable_wakeup_words_response_cache', 'true', 'boolean', 1, '是否开启唤醒词加速');
INSERT INTO `sys_params` (id, param_code, param_value, value_type, param_type, remark) VALUES (305, 'enable_greeting', 'true', 'boolean', 1, '是否开启开场回复');
INSERT INTO `sys_params` (id, param_code, param_value, value_type, param_type, remark) VALUES (306, 'enable_stop_tts_notify', 'false', 'boolean', 1, '是否开启结束提示音');
INSERT INTO `sys_params` (id, param_code, param_value, value_type, param_type, remark) VALUES (307, 'stop_tts_notify_voice', 'config/assets/tts_notify.mp3', 'string', 1, '结束提示音文件路径');
INSERT INTO `sys_params` (id, param_code, param_value, value_type, param_type, remark) VALUES (308, 'exit_commands', '退出;关闭', 'array', 1, '退出命令列表');
INSERT INTO `sys_params` (id, param_code, param_value, value_type, param_type, remark) VALUES (309, 'xiaozhi', '{
"type": "hello",
"version": 1,
"transport": "websocket",
"audio_params": {
"format": "opus",
"sample_rate": 16000,
"channels": 1,
"frame_duration": 60
}
}', 'string', 1, '小智类型');
INSERT INTO `sys_params` (id, param_code, param_value, value_type, param_type, remark) VALUES (310, 'wakeup_words', '你好小智;你好小志;小爱同学;你好小鑫;你好小新;小美同学;小龙小龙;喵喵同学;小滨小滨;小冰小冰', 'array', 1, '唤醒词列表,用于识别唤醒词');
INSERT INTO `sys_params` (id, param_code, param_value, value_type, param_type, remark) VALUES (400, 'plugin.weather.api_key', 'a861d0d5e7bf4ee1a83d9a9e4f96d4da', 'string', 1, '天气插件API密钥');
INSERT INTO `sys_params` (id, param_code, param_value, value_type, param_type, remark) VALUES (401, 'plugin.weather.default_location', '广州', 'string', 1, '天气插件默认城市');
INSERT INTO `sys_params` (id, param_code, param_value, value_type, param_type, remark) VALUES (410, 'plugin.news.default_rss_url', 'https://www.chinanews.com.cn/rss/society.xml', 'string', 1, '新闻插件默认RSS地址');
INSERT INTO `sys_params` (id, param_code, param_value, value_type, param_type, remark) VALUES (411, 'plugin.news.category_urls', '{"society":"https://www.chinanews.com.cn/rss/society.xml","world":"https://www.chinanews.com.cn/rss/world.xml","finance":"https://www.chinanews.com.cn/rss/finance.xml"}', 'string', 1, '新闻插件分类RSS地址');
INSERT INTO `sys_params` (id, param_code, param_value, value_type, param_type, remark) VALUES (421, 'plugin.home_assistant.devices', '客厅,玩具灯,switch.cuco_cn_460494544_cp1_on_p_2_1;卧室,台灯,switch.iot_cn_831898993_socn1_on_p_2_1', 'array', 1, 'Home Assistant设备列表');
INSERT INTO `sys_params` (id, param_code, param_value, value_type, param_type, remark) VALUES (422, 'plugin.home_assistant.base_url', 'http://homeassistant.local:8123', 'string', 1, 'Home Assistant服务器地址');
INSERT INTO `sys_params` (id, param_code, param_value, value_type, param_type, remark) VALUES (423, 'plugin.home_assistant.api_key', '你的home assistant api访问令牌', 'string', 1, 'Home Assistant API密钥');
INSERT INTO `sys_params` (id, param_code, param_value, value_type, param_type, remark) VALUES (430, 'plugin.music.music_dir', './music', 'string', 1, '音乐文件存放路径');
INSERT INTO `sys_params` (id, param_code, param_value, value_type, param_type, remark) VALUES (431, 'plugin.music.music_ext', 'mp3;wav;p3', 'array', 1, '音乐文件类型');
INSERT INTO `sys_params` (id, param_code, param_value, value_type, param_type, remark) VALUES (432, 'plugin.music.refresh_time', '300', 'number', 1, '音乐列表刷新间隔(秒)');
@@ -38,12 +38,12 @@ databaseChangeLog:
encoding: utf8
path: classpath:db/changelog/202504082211.sql
- changeSet:
id: 202504092312
id: 202504092313
author: John
changes:
- sqlFile:
encoding: utf8
path: classpath:db/changelog/202504092312.sql
path: classpath:db/changelog/202504092313.sql
- changeSet:
id: 202504092335
author: John
@@ -34,3 +34,9 @@
10031=\u5F31\u5BC6\u7801
10032=\u5220\u9664\u672C\u6570\u636E\u5F02\u5E38
10033=\u8BBE\u5907\u9A8C\u8BC1\u7801\u9519\u8BEF
10034=\u53C2\u6570\u503C\u4E0D\u80FD\u4E3A\u7A7A
10035=\u53C2\u6570\u7C7B\u578B\u4E0D\u80FD\u4E3A\u7A7A
10036=\u4E0D\u652F\u6301\u7684\u53C2\u6570\u7C7B\u578B
10037=\u53C2\u6570\u503C\u5FC5\u987B\u662F\u6709\u6548\u7684\u6570\u5B57
10038=\u53C2\u6570\u503C\u5FC5\u987B\u662Ftrue\u6216false
10039=\u53C2\u6570\u503C\u5FC5\u987B\u662F\u6709\u6548\u7684JSON\u6570\u7EC4\u683C\u5F0F
@@ -32,4 +32,11 @@
10030=The password is less than {0} digits.
10031=The password must consist of numbers, uppercase and lowercase letters, and special characters at the same time
10032=Exception in deleting this data
10033=Device verification code error
10033=Device verification code error
10034=Parameter value cannot be empty
10035=Parameter type cannot be empty
10036=Unsupported parameter type
10037=Parameter value must be a valid number
10038=Parameter value must be true or false
10039=Parameter value must be a valid JSON array format
@@ -32,4 +32,11 @@
10030=\u5BC6\u7801\u957F\u5EA6\u4E0D\u8DB3{0}\u4F4D
10031=\u5BC6\u7801\u5FC5\u987B\u540C\u65F6\u5305\u542B\u6570\u5B57\u3001\u5927\u5C0F\u5B57\u6BCD\u548C\u7279\u6B8A\u5B57\u7B26\u7EC4\u6210
10032=\u5220\u9664\u672C\u6570\u636E\u5F02\u5E38
10033=\u8BBE\u5907\u9A8C\u8BC1\u7801\u9519\u8BEF
10033=\u8BBE\u5907\u9A8C\u8BC1\u7801\u9519\u8BEF
10034=\u53C2\u6570\u503C\u4E0D\u80FD\u4E3A\u7A7A
10035=\u53C2\u6570\u7C7B\u578B\u4E0D\u80FD\u4E3A\u7A7A
10036=\u4E0D\u652F\u6301\u7684\u53C2\u6570\u7C7B\u578B
10037=\u53C2\u6570\u503C\u5FC5\u987B\u662F\u6709\u6548\u7684\u6570\u5B57
10038=\u53C2\u6570\u503C\u5FC5\u987B\u662Ftrue\u6216false
10039=\u53C2\u6570\u503C\u5FC5\u987B\u662F\u6709\u6548\u7684JSON\u6570\u7EC4\u683C\u5F0F
@@ -32,4 +32,11 @@
10030=\u5BC6\u78BC\u9577\u5EA6\u4E0D\u8DB3{0}\u4F4D
10031=\u5BC6\u78BC\u5FC5\u9808\u540C\u6642\u5305\u542B\u6578\u5B57\u3001\u5927\u5C0F\u5B57\u6BCD\u548C\u7279\u6B8A\u5B57\u7B26\u7D44\u6210
10032=\u522A\u9664\u6B64\u6578\u64DA\u7570\u5E38
10033=\u8A2D\u5099\u9A57\u8B49\u78BC\u932F\u8AA4
10033=\u8A2D\u5099\u9A57\u8B49\u78BC\u932F\u8AA4
10034=\u53C3\u6578\u503C\u4E0D\u80FD\u70BA\u7A7A
10035=\u53C3\u6578\u985E\u578B\u4E0D\u80FD\u70BA\u7A7A
10036=\u4E0D\u652F\u63F4\u7684\u53C3\u6578\u985E\u578B
10037=\u53C3\u6578\u503C\u5FC5\u9808\u662F\u6709\u6548\u7684\u6578\u5B57
10038=\u53C3\u6578\u503C\u5FC5\u9808\u662Ftrue\u6216false
10039=\u53C3\u6578\u503C\u5FC5\u9808\u662F\u6709\u6548\u7684JSON\u6578\u7D44\u683C\u5F0F
@@ -12,6 +12,8 @@ sysdict.label.require=\u5B57\u5178\u6807\u7B7E\u4E0D\u80FD\u4E3A\u7A7A
sysparams.paramcode.require=\u53C2\u6570\u7F16\u7801\u4E0D\u80FD\u4E3A\u7A7A
sysparams.paramvalue.require=\u53C2\u6570\u503C\u4E0D\u80FD\u4E3A\u7A7A
sysparams.valuetype.require=\u503C\u7C7B\u578B\u4E0D\u80FD\u4E3A\u7A7A
sysparams.valuetype.pattern=\u503C\u7C7B\u578B\u5FC5\u987B\u662F string\u3001number\u3001boolean \u6216 array
sysuser.username.require=\u7528\u6237\u540D\u4E0D\u80FD\u4E3A\u7A7A
sysuser.password.require=\u5BC6\u7801\u4E0D\u80FD\u4E3A\u7A7A
@@ -12,6 +12,8 @@ sysdict.label.require=Dictionary tag cannot be empty
sysparams.paramcode.require=Parameter encoding cannot be empty
sysparams.paramvalue.require=Parameter values cannot be empty
sysparams.valuetype.require=Value type cannot be empty
sysparams.valuetype.pattern=Value type must be string, number, boolean or array
sysuser.username.require=The username cannot be empty
sysuser.password.require=The password cannot be empty
@@ -12,6 +12,8 @@ sysdict.label.require=\u5B57\u5178\u6807\u7B7E\u4E0D\u80FD\u4E3A\u7A7A
sysparams.paramcode.require=\u53C2\u6570\u7F16\u7801\u4E0D\u80FD\u4E3A\u7A7A
sysparams.paramvalue.require=\u53C2\u6570\u503C\u4E0D\u80FD\u4E3A\u7A7A
sysparams.valuetype.require=\u503C\u7C7B\u578B\u4E0D\u80FD\u4E3A\u7A7A
sysparams.valuetype.pattern=\u503C\u7C7B\u578B\u5FC5\u987B\u662F string\u3001number\u3001boolean \u6216 array
sysuser.username.require=\u7528\u6237\u540D\u4E0D\u80FD\u4E3A\u7A7A
sysuser.password.require=\u5BC6\u7801\u4E0D\u80FD\u4E3A\u7A7A
@@ -10,8 +10,10 @@ sysdict.type.require=\u5B57\u5178\u7C7B\u578B\u4E0D\u80FD\u4E3A\u7A7A
sysdict.name.require=\u5B57\u5178\u540D\u79F0\u4E0D\u80FD\u4E3A\u7A7A
sysdict.label.require=\u5B57\u5178\u6807\u7B7E\u4E0D\u80FD\u4E3A\u7A7A
sysparams.paramcode.require=\u53C2\u6570\u7F16\u7801\u4E0D\u80FD\u4E3A\u7A7A
sysparams.paramvalue.require=\u53C2\u6570\u503C\u4E0D\u80FD\u4E3A\u7A7A
sysparams.paramcode.require=\u53C3\u6578\u7DE8\u78BC\u4E0D\u80FD\u70BA\u7A7A
sysparams.paramvalue.require=\u53C3\u6578\u503C\u4E0D\u80FD\u70BA\u7A7A
sysparams.valuetype.require=\u503C\u985E\u578B\u4E0D\u80FD\u70BA\u7A7A
sysparams.valuetype.pattern=\u503C\u985E\u578B\u5FC5\u9808\u662F string\u3001number\u3001boolean \u6216 array
sysuser.username.require=\u7528\u6237\u540D\u4E0D\u80FD\u4E3A\u7A7A
sysuser.password.require=\u5BC6\u7801\u4E0D\u80FD\u4E3A\u7A7A
+2 -3
View File
@@ -3,16 +3,15 @@ import admin from './module/admin.js'
import agent from './module/agent.js'
import device from './module/device.js'
import model from './module/model.js'
import timbre from "./module/timbre.js"
import user from './module/user.js'
import timbre from "./module/timbre.js";
/**
* 接口地址
* 开发时自动读取使用.env.development文件
* 编译时自动读取使用.env.production文件
*/
// const DEV_API_SERVICE = process.env.VUE_APP_API_BASE_URL
const DEV_API_SERVICE = 'https://2662r3426b.vicp.fun/xiaozhi'
const DEV_API_SERVICE = process.env.VUE_APP_API_BASE_URL
/**
* 根据开发环境返回接口url