Remove the variable association application

This commit is contained in:
2025-10-26 15:16:25 +08:00
parent d844403505
commit 1dd68022b7
6 changed files with 16 additions and 198 deletions

View File

@@ -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,

View File

@@ -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,10 +117,9 @@ 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"`
Alias string `json:"alias"`
Data string `json:"data"`
Remark string `json:"remark"`
}
if !variableBaseController.BindJSON(c, &req) {
@@ -165,8 +128,7 @@ func VariableCreateHandler(c *gin.Context) {
// 验证必填字段
if !variableBaseController.ValidateRequired(c, map[string]interface{}{
"应用UUID": req.AppUUID,
"变量别名": req.Alias,
"变量别名": req.Alias,
}) {
return
}
@@ -183,19 +145,11 @@ 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),
Alias: strings.TrimSpace(req.Alias),
Data: req.Data,
Remark: strings.TrimSpace(req.Remark),
}
if err := db.Create(&variable).Error; err != nil {
@@ -210,11 +164,10 @@ func VariableCreateHandler(c *gin.Context) {
// VariableUpdateHandler 更新变量API处理器
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"`
UUID string `json:"uuid"`
Alias string `json:"alias"`
Data string `json:"data"`
Remark string `json:"remark"`
}
if !variableBaseController.BindJSON(c, &req) {
@@ -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)
}

View File

@@ -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"`

View File

@@ -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)

View File

@@ -120,7 +120,6 @@
$('#total-variables').text(data.total_variables || 0);
}
}).fail(() => {
console.log('获取应用统计失败');
// 显示默认值
$('#total-apps').text('0');
$('#enabled-apps').text('0');

View File

@@ -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',