批量更新功能

This commit is contained in:
2026-09-14 16:15:44 +08:00
parent 6f106e43af
commit a26c98b92b
79 changed files with 4529 additions and 724 deletions
+36 -3
View File
@@ -63,16 +63,37 @@ var crmDefaultUnits = []struct {
// crmEnsureDefaultUnits 租户首次使用(从未有过任何单位记录,含已软删除的)时写入默认单位。
// 用户手动清空后不再自动补,避免越删越有;需要恢复时用「恢复默认单位」接口。
// 已有记录时顺带修复存量默认单位的 is_default 标记(历史数据升级)。
func crmEnsureDefaultUnits(tenantID string) {
if models.Orm == nil || strings.TrimSpace(tenantID) == "" {
return
}
cnt, err := models.Orm.QueryTable(new(models.TenantCrmUnit)).
Filter("tenant_id", tenantID).Count()
if err != nil || cnt > 0 {
if err != nil {
return
}
crmInsertDefaultUnits(tenantID, nil)
if cnt == 0 {
crmInsertDefaultUnits(tenantID, nil)
return
}
crmMarkDefaultUnits(tenantID)
}
// crmMarkDefaultUnits 将默认清单中已存在的存量单位标记为 is_default=1(历史数据升级自修复,
// 避免早期写入的默认单位因未打标而被误编辑/删除)。
func crmMarkDefaultUnits(tenantID string) {
names := make([]string, 0, len(crmDefaultUnits))
for _, u := range crmDefaultUnits {
names = append(names, u.Name)
}
if len(names) == 0 {
return
}
_, _ = models.Orm.QueryTable(new(models.TenantCrmUnit)).
Filter("tenant_id", tenantID).
Filter("name__in", names).
Update(orm.Params{"is_default": 1})
}
// crmInsertDefaultUnits 写入默认单位,跳过已存在的名称(existing 为已存在单位名集合)。
@@ -90,6 +111,7 @@ func crmInsertDefaultUnits(tenantID string, existing map[string]bool) int {
Code: u.Code,
Sort: i + 1,
Status: 1,
IsDefault: 1, // 系统默认单位:不可编辑、不可删除
CreateTime: now,
UpdateTime: now,
}
@@ -129,7 +151,7 @@ func crmInitDefaultUnits(tenantID string) int {
}
if id, ok := deleted[u.Name]; ok {
if _, err := models.Orm.Raw("UPDATE "+table+
" SET delete_time = NULL, status = 1, sort = ?, update_time = ? WHERE id = ?",
" SET delete_time = NULL, status = 1, is_default = 1, sort = ?, update_time = ? WHERE id = ?",
i+1, now, id).Exec(); err == nil {
existing[u.Name] = true
added++
@@ -142,6 +164,7 @@ func crmInitDefaultUnits(tenantID string) int {
Code: u.Code,
Sort: i + 1,
Status: 1,
IsDefault: 1, // 系统默认单位:不可编辑、不可删除
CreateTime: now,
UpdateTime: now,
}
@@ -359,6 +382,11 @@ func (c *BackendCrmUnitController) Update() {
pipelineErr(&c.Controller, 404, 404, "单位未找到")
return
}
// 系统默认单位只读:不可编辑
if row.IsDefault == 1 {
pipelineErr(&c.Controller, 400, 400, "系统默认单位不可编辑")
return
}
status := p.Status
if status != 0 && status != 1 {
status = row.Status
@@ -416,6 +444,11 @@ func (c *BackendCrmUnitController) Delete() {
pipelineErr(&c.Controller, 404, 404, "单位未找到")
return
}
// 系统默认单位只读:不可删除
if row.IsDefault == 1 {
pipelineErr(&c.Controller, 400, 400, "系统默认单位不可删除")
return
}
now := time.Now()
_, err = models.Orm.QueryTable(new(models.TenantCrmUnit)).
Filter("id", id).Filter("tenant_id", tenantID).