mirror of
https://github.com/skyle1995/NetworkAuth.git
synced 2026-05-25 02:24:05 +08:00
Remove the variable association application
This commit is contained in:
@@ -541,17 +541,6 @@ func AppDeleteHandler(c *gin.Context) {
|
||||
return
|
||||
}
|
||||
|
||||
// 删除相关的变量记录
|
||||
if err := tx.Where("app_uuid = ?", app.UUID).Delete(&models.Variable{}).Error; err != nil {
|
||||
tx.Rollback()
|
||||
logrus.WithError(err).Error("Failed to delete related variables")
|
||||
c.JSON(http.StatusInternalServerError, gin.H{
|
||||
"code": 1,
|
||||
"msg": "删除相关变量失败",
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
// 删除应用
|
||||
if err := tx.Delete(&app).Error; err != nil {
|
||||
tx.Rollback()
|
||||
@@ -576,7 +565,7 @@ func AppDeleteHandler(c *gin.Context) {
|
||||
logrus.WithFields(logrus.Fields{
|
||||
"app_id": app.ID,
|
||||
"app_uuid": app.UUID,
|
||||
}).Info("Successfully deleted app and related data")
|
||||
}).Info("Successfully deleted app and related APIs")
|
||||
|
||||
c.JSON(http.StatusOK, gin.H{
|
||||
"code": 0,
|
||||
@@ -1258,17 +1247,6 @@ func AppsBatchDeleteHandler(c *gin.Context) {
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
// 删除这些应用的所有相关变量
|
||||
if err := tx.Where("app_uuid IN ?", appUUIDs).Delete(&models.Variable{}).Error; err != nil {
|
||||
tx.Rollback()
|
||||
logrus.WithError(err).Error("Failed to delete related variables")
|
||||
c.JSON(http.StatusInternalServerError, gin.H{
|
||||
"code": 1,
|
||||
"msg": "删除相关变量失败",
|
||||
})
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
// 批量删除应用
|
||||
@@ -1295,7 +1273,7 @@ func AppsBatchDeleteHandler(c *gin.Context) {
|
||||
logrus.WithFields(logrus.Fields{
|
||||
"app_ids": req.IDs,
|
||||
"app_uuids": appUUIDs,
|
||||
}).Info("Successfully batch deleted apps and related data (APIs and variables)")
|
||||
}).Info("Successfully batch deleted apps and related APIs")
|
||||
|
||||
c.JSON(http.StatusOK, gin.H{
|
||||
"code": 0,
|
||||
|
||||
@@ -38,9 +38,6 @@ func VariableListHandler(c *gin.Context) {
|
||||
limit = 10
|
||||
}
|
||||
|
||||
// 获取应用UUID参数(用于按应用筛选变量)
|
||||
appUUID := strings.TrimSpace(c.Query("app_uuid"))
|
||||
|
||||
// 获取搜索关键词参数(支持编号、别名、数据的综合搜索)
|
||||
search := strings.TrimSpace(c.Query("search"))
|
||||
|
||||
@@ -58,11 +55,6 @@ func VariableListHandler(c *gin.Context) {
|
||||
// 构建基础查询
|
||||
query := db.Model(&models.Variable{})
|
||||
|
||||
// 如果指定了应用UUID,则按应用筛选
|
||||
if appUUID != "" {
|
||||
query = query.Where("app_uuid = ?", appUUID)
|
||||
}
|
||||
|
||||
// 如果指定了搜索关键词,则在编号、别名、数据、备注中进行模糊搜索
|
||||
if search != "" {
|
||||
query = query.Where("number LIKE ? OR alias LIKE ? OR data LIKE ? OR remark LIKE ?",
|
||||
@@ -86,32 +78,11 @@ func VariableListHandler(c *gin.Context) {
|
||||
return
|
||||
}
|
||||
|
||||
// 获取关联的应用信息
|
||||
var appUUIDs []string
|
||||
for _, variable := range variables {
|
||||
appUUIDs = append(appUUIDs, variable.AppUUID)
|
||||
}
|
||||
|
||||
var apps []models.App
|
||||
if len(appUUIDs) > 0 {
|
||||
if err := db.Where("uuid IN ?", appUUIDs).Find(&apps).Error; err != nil {
|
||||
logrus.WithError(err).Error("Failed to fetch related apps")
|
||||
}
|
||||
}
|
||||
|
||||
// 创建应用UUID到应用名称的映射
|
||||
appMap := make(map[string]string)
|
||||
for _, app := range apps {
|
||||
appMap[app.UUID] = app.Name
|
||||
}
|
||||
|
||||
// 构建响应数据
|
||||
type VariableResponse struct {
|
||||
ID uint `json:"id"`
|
||||
UUID string `json:"uuid"`
|
||||
Number string `json:"number"`
|
||||
AppUUID string `json:"app_uuid"`
|
||||
AppName string `json:"app_name"`
|
||||
Alias string `json:"alias"`
|
||||
Data string `json:"data"`
|
||||
Remark string `json:"remark"`
|
||||
@@ -121,17 +92,10 @@ func VariableListHandler(c *gin.Context) {
|
||||
|
||||
var responseData []VariableResponse
|
||||
for _, variable := range variables {
|
||||
appName := appMap[variable.AppUUID]
|
||||
if appName == "" {
|
||||
appName = "未知应用"
|
||||
}
|
||||
|
||||
responseData = append(responseData, VariableResponse{
|
||||
ID: variable.ID,
|
||||
UUID: variable.UUID,
|
||||
Number: variable.Number,
|
||||
AppUUID: variable.AppUUID,
|
||||
AppName: appName,
|
||||
Alias: variable.Alias,
|
||||
Data: variable.Data,
|
||||
Remark: variable.Remark,
|
||||
@@ -153,7 +117,6 @@ func VariableListHandler(c *gin.Context) {
|
||||
// VariableCreateHandler 新增变量API处理器
|
||||
func VariableCreateHandler(c *gin.Context) {
|
||||
var req struct {
|
||||
AppUUID string `json:"app_uuid"`
|
||||
Alias string `json:"alias"`
|
||||
Data string `json:"data"`
|
||||
Remark string `json:"remark"`
|
||||
@@ -165,7 +128,6 @@ func VariableCreateHandler(c *gin.Context) {
|
||||
|
||||
// 验证必填字段
|
||||
if !variableBaseController.ValidateRequired(c, map[string]interface{}{
|
||||
"应用UUID": req.AppUUID,
|
||||
"变量别名": req.Alias,
|
||||
}) {
|
||||
return
|
||||
@@ -183,16 +145,8 @@ func VariableCreateHandler(c *gin.Context) {
|
||||
return
|
||||
}
|
||||
|
||||
// 验证应用是否存在
|
||||
var app models.App
|
||||
if err := db.Where("uuid = ?", req.AppUUID).First(&app).Error; err != nil {
|
||||
variableBaseController.HandleValidationError(c, "应用不存在")
|
||||
return
|
||||
}
|
||||
|
||||
// 创建变量
|
||||
variable := models.Variable{
|
||||
AppUUID: strings.TrimSpace(req.AppUUID),
|
||||
Alias: strings.TrimSpace(req.Alias),
|
||||
Data: req.Data,
|
||||
Remark: strings.TrimSpace(req.Remark),
|
||||
@@ -211,7 +165,6 @@ func VariableCreateHandler(c *gin.Context) {
|
||||
func VariableUpdateHandler(c *gin.Context) {
|
||||
var req struct {
|
||||
UUID string `json:"uuid"`
|
||||
AppUUID string `json:"app_uuid"`
|
||||
Alias string `json:"alias"`
|
||||
Data string `json:"data"`
|
||||
Remark string `json:"remark"`
|
||||
@@ -224,7 +177,6 @@ func VariableUpdateHandler(c *gin.Context) {
|
||||
// 验证必填字段
|
||||
if !variableBaseController.ValidateRequired(c, map[string]interface{}{
|
||||
"变量UUID": req.UUID,
|
||||
"应用UUID": req.AppUUID,
|
||||
"变量别名": req.Alias,
|
||||
}) {
|
||||
return
|
||||
@@ -242,13 +194,6 @@ func VariableUpdateHandler(c *gin.Context) {
|
||||
return
|
||||
}
|
||||
|
||||
// 验证应用是否存在
|
||||
var app models.App
|
||||
if err := db.Where("uuid = ?", req.AppUUID).First(&app).Error; err != nil {
|
||||
variableBaseController.HandleValidationError(c, "应用不存在")
|
||||
return
|
||||
}
|
||||
|
||||
// 通过uuid字段查找变量
|
||||
var variable models.Variable
|
||||
if err := db.Where("uuid = ?", strings.TrimSpace(req.UUID)).First(&variable).Error; err != nil {
|
||||
@@ -256,8 +201,7 @@ func VariableUpdateHandler(c *gin.Context) {
|
||||
return
|
||||
}
|
||||
|
||||
// 更新字段
|
||||
variable.AppUUID = strings.TrimSpace(req.AppUUID)
|
||||
// 更新字段(不允许修改应用关联)
|
||||
variable.Alias = strings.TrimSpace(req.Alias)
|
||||
variable.Data = req.Data
|
||||
variable.Remark = strings.TrimSpace(req.Remark)
|
||||
@@ -334,20 +278,3 @@ func VariablesBatchDeleteHandler(c *gin.Context) {
|
||||
|
||||
variableBaseController.HandleSuccess(c, "批量删除成功", nil)
|
||||
}
|
||||
|
||||
// VariableGetAppsHandler 获取应用列表(用于筛选下拉框)
|
||||
func VariableGetAppsHandler(c *gin.Context) {
|
||||
db, ok := variableBaseController.GetDB(c)
|
||||
if !ok {
|
||||
return
|
||||
}
|
||||
|
||||
var apps []models.App
|
||||
if err := db.Select("uuid, name").Find(&apps).Error; err != nil {
|
||||
logrus.WithError(err).Error("Failed to fetch apps")
|
||||
variableBaseController.HandleInternalError(c, "获取应用列表失败", err)
|
||||
return
|
||||
}
|
||||
|
||||
variableBaseController.HandleSuccess(c, "success", apps)
|
||||
}
|
||||
@@ -26,9 +26,6 @@ type Variable struct {
|
||||
// Number:变量编号,时间戳+6位随机数字格式
|
||||
Number string `gorm:"uniqueIndex;size:20;not null;comment:变量编号,时间戳+6位随机数字格式" json:"number"`
|
||||
|
||||
// AppUUID:关联的应用UUID
|
||||
AppUUID string `gorm:"size:36;not null;index;comment:关联的应用UUID" json:"app_uuid"`
|
||||
|
||||
// Alias:变量别名,便于识别和管理
|
||||
Alias string `gorm:"size:100;not null;comment:变量别名" json:"alias"`
|
||||
|
||||
|
||||
@@ -102,7 +102,6 @@ func RegisterAdminRoutes(router *gin.Engine) {
|
||||
|
||||
// 变量管理API
|
||||
router.GET("/admin/variable/list", adminctl.AdminAuthRequired(), adminctl.VariableListHandler)
|
||||
router.GET("/admin/variable/apps", adminctl.AdminAuthRequired(), adminctl.VariableGetAppsHandler)
|
||||
router.POST("/admin/variable/create", adminctl.AdminAuthRequired(), adminctl.VariableCreateHandler)
|
||||
router.POST("/admin/variable/update", adminctl.AdminAuthRequired(), adminctl.VariableUpdateHandler)
|
||||
router.POST("/admin/variable/delete", adminctl.AdminAuthRequired(), adminctl.VariableDeleteHandler)
|
||||
|
||||
@@ -120,7 +120,6 @@
|
||||
$('#total-variables').text(data.total_variables || 0);
|
||||
}
|
||||
}).fail(() => {
|
||||
console.log('获取应用统计失败');
|
||||
// 显示默认值
|
||||
$('#total-apps').text('0');
|
||||
$('#enabled-apps').text('0');
|
||||
|
||||
@@ -12,14 +12,6 @@
|
||||
<div style="padding: 20px;">
|
||||
<form class="layui-form layui-form-pane" id="variableFilterForm" lay-filter="variableFilterForm">
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-inline">
|
||||
<label class="layui-form-label">应用</label>
|
||||
<div class="layui-input-inline">
|
||||
<select name="app_uuid" lay-filter="appSelect">
|
||||
<option value="">请选择应用</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-inline">
|
||||
<label class="layui-form-label">搜索</label>
|
||||
<div class="layui-input-inline">
|
||||
@@ -52,14 +44,6 @@
|
||||
<div id="variableFormLayer" style="display:none;padding:20px">
|
||||
<form class="layui-form layui-form-pane" lay-filter="variableForm" id="variableForm">
|
||||
<input type="hidden" name="uuid">
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">应用选择</label>
|
||||
<div class="layui-input-block">
|
||||
<select name="app_uuid" lay-verify="required" lay-filter="formAppSelect">
|
||||
<option value="">请选择应用</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">变量别名</label>
|
||||
<div class="layui-input-block">
|
||||
@@ -116,29 +100,7 @@
|
||||
return new Date(dateStr).toLocaleString();
|
||||
}
|
||||
|
||||
// 加载应用列表到下拉框
|
||||
function loadApps() {
|
||||
$.ajax({
|
||||
url: '/admin/variable/apps',
|
||||
type: 'GET',
|
||||
success: function (res) {
|
||||
if (res.code === 0 && res.data) {
|
||||
let options = '<option value="">请选择应用</option>';
|
||||
res.data.forEach(function (app) {
|
||||
options += '<option value="' + app.uuid + '">' + app.name + '</option>';
|
||||
});
|
||||
$('select[name="app_uuid"]').html(options);
|
||||
form.render('select');
|
||||
}
|
||||
},
|
||||
error: function () {
|
||||
layer.msg('加载应用列表失败', { icon: 2 });
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// 初始化加载应用列表
|
||||
loadApps();
|
||||
|
||||
// 渲染表格
|
||||
const variablesTable = table.render({
|
||||
@@ -168,7 +130,6 @@
|
||||
cols: [[
|
||||
{ type: 'checkbox', width: 50 },
|
||||
{ field: 'id', title: 'ID', width: 80, sort: true },
|
||||
{ field: 'app_name', title: '应用名称', minWidth: 120 },
|
||||
{ field: 'number', title: '变量编号', width: 180 },
|
||||
{ field: 'alias', title: '变量别名', minWidth: 150 },
|
||||
{
|
||||
@@ -207,24 +168,10 @@
|
||||
]]
|
||||
});
|
||||
|
||||
// 监听应用选择变化
|
||||
form.on('select(appSelect)', function (data) {
|
||||
variablesTable.reload({
|
||||
where: {
|
||||
app_uuid: data.value,
|
||||
search: $('input[name="search"]').val()
|
||||
},
|
||||
page: {
|
||||
curr: 1
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
// 搜索功能
|
||||
$('#btnSearchVariables').on('click', function () {
|
||||
variablesTable.reload({
|
||||
where: {
|
||||
app_uuid: $('select[name="app_uuid"]').val(),
|
||||
search: $('input[name="search"]').val()
|
||||
},
|
||||
page: {
|
||||
@@ -247,18 +194,14 @@
|
||||
|
||||
// 新增变量
|
||||
$('#btnAddVariable').on('click', function () {
|
||||
console.log('新增变量按钮被点击');
|
||||
$('#variableForm')[0].reset();
|
||||
$('input[name="id"]').val('');
|
||||
|
||||
// 重新加载应用列表到表单中
|
||||
loadApps();
|
||||
|
||||
layer.open({
|
||||
type: 1,
|
||||
title: '新增变量',
|
||||
content: $('#variableFormLayer'),
|
||||
area: ['500px', '460px'],
|
||||
area: ['500px', '435px'],
|
||||
btn: ['创建', '取消'],
|
||||
yes: function (index, layero) {
|
||||
// 手动收集表单数据
|
||||
@@ -271,13 +214,7 @@
|
||||
}
|
||||
});
|
||||
|
||||
console.log('新增变量 - 收集到的表单数据:', formData);
|
||||
|
||||
// 验证必填字段
|
||||
if (!formData.app_uuid || formData.app_uuid.trim() === '') {
|
||||
layer.msg('应用UUID不能为空', { icon: 2 });
|
||||
return;
|
||||
}
|
||||
if (!formData.alias || formData.alias.trim() === '') {
|
||||
layer.msg('请输入变量别名', { icon: 2 });
|
||||
return;
|
||||
@@ -287,8 +224,6 @@
|
||||
return;
|
||||
}
|
||||
|
||||
console.log('新增变量 - 发送的JSON数据:', JSON.stringify(formData));
|
||||
|
||||
$.ajax({
|
||||
url: '/admin/variable/create',
|
||||
type: 'POST',
|
||||
@@ -357,17 +292,8 @@
|
||||
|
||||
if (obj.event === 'edit') {
|
||||
// 编辑
|
||||
console.log('编辑按钮被点击', data);
|
||||
$('#variableForm')[0].reset();
|
||||
$('input[name="uuid"]').val(data.uuid);
|
||||
|
||||
// 重新加载应用列表,然后设置选中值
|
||||
loadApps();
|
||||
setTimeout(function () {
|
||||
$('select[name="app_uuid"]').val(data.app_uuid);
|
||||
form.render('select');
|
||||
}, 100);
|
||||
|
||||
$('input[name="alias"]').val(data.alias);
|
||||
$('textarea[name="data"]').val(data.data);
|
||||
$('textarea[name="remark"]').val(data.remark);
|
||||
@@ -376,7 +302,7 @@
|
||||
type: 1,
|
||||
title: '编辑变量',
|
||||
content: $('#variableFormLayer'),
|
||||
area: ['500px', '460px'],
|
||||
area: ['500px', '435px'],
|
||||
btn: ['保存', '取消'],
|
||||
yes: function (index, layero) {
|
||||
// 手动收集表单数据
|
||||
@@ -389,13 +315,7 @@
|
||||
}
|
||||
});
|
||||
|
||||
console.log('编辑变量 - 收集到的表单数据:', formData);
|
||||
|
||||
// 验证必填字段
|
||||
if (!formData.app_uuid || formData.app_uuid.trim() === '') {
|
||||
layer.msg('应用UUID不能为空', { icon: 2 });
|
||||
return;
|
||||
}
|
||||
if (!formData.alias || formData.alias.trim() === '') {
|
||||
layer.msg('请输入变量别名', { icon: 2 });
|
||||
return;
|
||||
@@ -405,8 +325,6 @@
|
||||
return;
|
||||
}
|
||||
|
||||
console.log('编辑变量 - 发送的JSON数据:', JSON.stringify(formData));
|
||||
|
||||
$.ajax({
|
||||
url: '/admin/variable/update',
|
||||
type: 'POST',
|
||||
|
||||
Reference in New Issue
Block a user