更新
This commit is contained in:
@@ -449,3 +449,362 @@ func (c *ArticlesController) UpdateArticleStatus() {
|
||||
}
|
||||
c.ServeJSON()
|
||||
}
|
||||
|
||||
// ListCategories 获取分类列表
|
||||
func (c *ArticlesController) ListCategories() {
|
||||
|
||||
// 获取查询参数
|
||||
tenantId, _ := c.GetInt("tenantId")
|
||||
page, _ := c.GetInt("page", 1)
|
||||
pageSize, _ := c.GetInt("pageSize", 20)
|
||||
if pageSizeStr := c.GetString("size"); pageSizeStr != "" {
|
||||
if size, err := strconv.Atoi(pageSizeStr); err == nil && size > 0 {
|
||||
pageSize = size
|
||||
}
|
||||
}
|
||||
keyword := c.GetString("keyword")
|
||||
statusStr := c.GetString("status")
|
||||
|
||||
// 状态过滤:默认为启用状态(1),只有明确传递status参数时才按指定状态过滤
|
||||
var status *int8
|
||||
if statusStr != "" {
|
||||
// 如果明确传递了status参数,按指定值过滤
|
||||
if s, err := strconv.Atoi(statusStr); err == nil {
|
||||
statusVal := int8(s)
|
||||
status = &statusVal
|
||||
}
|
||||
} else {
|
||||
// 如果没有传递status参数,默认只显示启用状态
|
||||
statusVal := int8(1)
|
||||
status = &statusVal
|
||||
}
|
||||
|
||||
// 调用服务层获取分类列表
|
||||
categories, total, err := services.GetArticleCategories(tenantId, page, pageSize, keyword, status)
|
||||
if err != nil {
|
||||
c.Data["json"] = map[string]interface{}{
|
||||
"code": 1,
|
||||
"message": "获取分类列表失败: " + err.Error(),
|
||||
"data": nil,
|
||||
}
|
||||
c.ServeJSON()
|
||||
return
|
||||
}
|
||||
|
||||
// 格式化返回数据
|
||||
categoryList := make([]map[string]interface{}, 0)
|
||||
for _, category := range categories {
|
||||
categoryList = append(categoryList, map[string]interface{}{
|
||||
"id": category.Id,
|
||||
"label": category.DictLabel,
|
||||
"value": category.DictValue,
|
||||
"status": category.Status,
|
||||
"sort": category.Sort,
|
||||
"color": category.Color,
|
||||
"icon": category.Icon,
|
||||
"remark": category.Remark,
|
||||
"create_time": category.CreateTime,
|
||||
"update_time": category.UpdateTime,
|
||||
})
|
||||
}
|
||||
|
||||
c.Data["json"] = map[string]interface{}{
|
||||
"code": 0,
|
||||
"message": "ok",
|
||||
"data": map[string]interface{}{
|
||||
"list": categoryList,
|
||||
"total": total,
|
||||
},
|
||||
}
|
||||
c.ServeJSON()
|
||||
}
|
||||
|
||||
// GetCategory 获取分类详情
|
||||
func (c *ArticlesController) GetCategory() {
|
||||
// 从URL获取分类ID
|
||||
categoryId, err := c.GetInt(":id")
|
||||
if err != nil || categoryId <= 0 {
|
||||
c.Data["json"] = map[string]interface{}{
|
||||
"code": 1,
|
||||
"message": "无效的分类ID",
|
||||
"data": nil,
|
||||
}
|
||||
c.ServeJSON()
|
||||
return
|
||||
}
|
||||
|
||||
// 调用服务层获取分类详情
|
||||
category, err := services.GetArticleCategoryById(categoryId)
|
||||
if err != nil {
|
||||
c.Data["json"] = map[string]interface{}{
|
||||
"code": 1,
|
||||
"message": "获取分类详情失败: " + err.Error(),
|
||||
"data": nil,
|
||||
}
|
||||
c.ServeJSON()
|
||||
return
|
||||
}
|
||||
|
||||
if category == nil {
|
||||
c.Data["json"] = map[string]interface{}{
|
||||
"code": 1,
|
||||
"message": "分类不存在",
|
||||
"data": nil,
|
||||
}
|
||||
c.ServeJSON()
|
||||
return
|
||||
}
|
||||
|
||||
c.Data["json"] = map[string]interface{}{
|
||||
"code": 0,
|
||||
"message": "获取分类详情成功",
|
||||
"data": map[string]interface{}{
|
||||
"id": category.Id,
|
||||
"label": category.DictLabel,
|
||||
"value": category.DictValue,
|
||||
"status": category.Status,
|
||||
"sort": category.Sort,
|
||||
"color": category.Color,
|
||||
"icon": category.Icon,
|
||||
"remark": category.Remark,
|
||||
"create_time": category.CreateTime,
|
||||
"update_time": category.UpdateTime,
|
||||
},
|
||||
}
|
||||
c.ServeJSON()
|
||||
}
|
||||
|
||||
// CreateCategory 创建分类
|
||||
func (c *ArticlesController) CreateCategory() {
|
||||
// 定义接收分类数据的结构体
|
||||
var categoryData struct {
|
||||
Label string `json:"label"`
|
||||
Value string `json:"value"`
|
||||
Status int8 `json:"status"`
|
||||
Sort int `json:"sort"`
|
||||
Color string `json:"color"`
|
||||
Icon string `json:"icon"`
|
||||
Remark string `json:"remark"`
|
||||
}
|
||||
|
||||
// 解析请求体JSON数据
|
||||
err := json.Unmarshal(c.Ctx.Input.RequestBody, &categoryData)
|
||||
if err != nil {
|
||||
c.Data["json"] = map[string]interface{}{
|
||||
"code": 1,
|
||||
"message": "请求参数格式错误: " + err.Error(),
|
||||
"data": nil,
|
||||
}
|
||||
c.ServeJSON()
|
||||
return
|
||||
}
|
||||
|
||||
// 校验必要参数
|
||||
if categoryData.Label == "" {
|
||||
c.Data["json"] = map[string]interface{}{
|
||||
"code": 1,
|
||||
"message": "分类名称不能为空",
|
||||
"data": nil,
|
||||
}
|
||||
c.ServeJSON()
|
||||
return
|
||||
}
|
||||
|
||||
if categoryData.Value == "" {
|
||||
c.Data["json"] = map[string]interface{}{
|
||||
"code": 1,
|
||||
"message": "分类值不能为空",
|
||||
"data": nil,
|
||||
}
|
||||
c.ServeJSON()
|
||||
return
|
||||
}
|
||||
|
||||
// 从URL参数或JWT获取租户ID,优先使用URL参数
|
||||
tenantId, _ := c.GetInt("tenant_id", 0)
|
||||
if tenantId == 0 {
|
||||
tenantId, _ = c.GetInt("tenantId", 0)
|
||||
}
|
||||
|
||||
// 从JWT上下文中获取用户ID
|
||||
userId, _ := c.GetInt("userId", 0)
|
||||
|
||||
// 调用服务层创建分类
|
||||
itemId, err := services.CreateArticleCategory(tenantId, userId, categoryData.Label, categoryData.Value, categoryData.Status, categoryData.Sort, categoryData.Color, categoryData.Icon, categoryData.Remark)
|
||||
if err != nil {
|
||||
c.Data["json"] = map[string]interface{}{
|
||||
"code": 1,
|
||||
"message": "创建分类失败: " + err.Error(),
|
||||
"data": nil,
|
||||
}
|
||||
} else {
|
||||
c.Data["json"] = map[string]interface{}{
|
||||
"code": 0,
|
||||
"message": "创建分类成功",
|
||||
"data": map[string]interface{}{
|
||||
"id": itemId,
|
||||
},
|
||||
}
|
||||
}
|
||||
c.ServeJSON()
|
||||
}
|
||||
|
||||
// UpdateCategory 更新分类
|
||||
func (c *ArticlesController) UpdateCategory() {
|
||||
// 从URL获取分类ID
|
||||
categoryId, err := c.GetInt(":id")
|
||||
if err != nil || categoryId <= 0 {
|
||||
c.Data["json"] = map[string]interface{}{
|
||||
"code": 1,
|
||||
"message": "无效的分类ID",
|
||||
"data": nil,
|
||||
}
|
||||
c.ServeJSON()
|
||||
return
|
||||
}
|
||||
|
||||
// 定义接收更新数据的结构体
|
||||
var categoryData struct {
|
||||
Label string `json:"label"`
|
||||
Value string `json:"value"`
|
||||
Status int8 `json:"status"`
|
||||
Sort int `json:"sort"`
|
||||
Color string `json:"color"`
|
||||
Icon string `json:"icon"`
|
||||
Remark string `json:"remark"`
|
||||
}
|
||||
|
||||
// 解析请求体JSON数据
|
||||
err = json.Unmarshal(c.Ctx.Input.RequestBody, &categoryData)
|
||||
if err != nil {
|
||||
c.Data["json"] = map[string]interface{}{
|
||||
"code": 1,
|
||||
"message": "请求参数格式错误: " + err.Error(),
|
||||
"data": nil,
|
||||
}
|
||||
c.ServeJSON()
|
||||
return
|
||||
}
|
||||
|
||||
// 校验必要参数
|
||||
if categoryData.Label == "" {
|
||||
c.Data["json"] = map[string]interface{}{
|
||||
"code": 1,
|
||||
"message": "分类名称不能为空",
|
||||
"data": nil,
|
||||
}
|
||||
c.ServeJSON()
|
||||
return
|
||||
}
|
||||
|
||||
if categoryData.Value == "" {
|
||||
c.Data["json"] = map[string]interface{}{
|
||||
"code": 1,
|
||||
"message": "分类值不能为空",
|
||||
"data": nil,
|
||||
}
|
||||
c.ServeJSON()
|
||||
return
|
||||
}
|
||||
|
||||
// 从JWT上下文中获取用户ID
|
||||
userId, _ := c.GetInt("userId", 0)
|
||||
|
||||
// 调用服务层更新分类
|
||||
err = services.UpdateArticleCategory(categoryId, userId, categoryData.Label, categoryData.Value, categoryData.Status, categoryData.Sort, categoryData.Color, categoryData.Icon, categoryData.Remark)
|
||||
if err != nil {
|
||||
c.Data["json"] = map[string]interface{}{
|
||||
"code": 1,
|
||||
"message": "更新分类失败: " + err.Error(),
|
||||
"data": nil,
|
||||
}
|
||||
} else {
|
||||
c.Data["json"] = map[string]interface{}{
|
||||
"code": 0,
|
||||
"message": "更新分类成功",
|
||||
"data": nil,
|
||||
}
|
||||
}
|
||||
c.ServeJSON()
|
||||
}
|
||||
|
||||
// DeleteCategory 删除分类
|
||||
func (c *ArticlesController) DeleteCategory() {
|
||||
// 从URL获取分类ID
|
||||
categoryId, err := c.GetInt(":id")
|
||||
if err != nil || categoryId <= 0 {
|
||||
c.Data["json"] = map[string]interface{}{
|
||||
"code": 1,
|
||||
"message": "无效的分类ID",
|
||||
"data": nil,
|
||||
}
|
||||
c.ServeJSON()
|
||||
return
|
||||
}
|
||||
|
||||
// 调用服务层删除分类
|
||||
err = services.DeleteArticleCategory(categoryId)
|
||||
if err != nil {
|
||||
c.Data["json"] = map[string]interface{}{
|
||||
"code": 1,
|
||||
"message": "删除分类失败: " + err.Error(),
|
||||
"data": nil,
|
||||
}
|
||||
} else {
|
||||
c.Data["json"] = map[string]interface{}{
|
||||
"code": 0,
|
||||
"message": "删除分类成功",
|
||||
"data": nil,
|
||||
}
|
||||
}
|
||||
c.ServeJSON()
|
||||
}
|
||||
|
||||
// UpdateCategoryStatus 更新分类状态
|
||||
func (c *ArticlesController) UpdateCategoryStatus() {
|
||||
// 从URL获取分类ID
|
||||
categoryId, err := c.GetInt(":id")
|
||||
if err != nil || categoryId <= 0 {
|
||||
c.Data["json"] = map[string]interface{}{
|
||||
"code": 1,
|
||||
"message": "无效的分类ID",
|
||||
"data": nil,
|
||||
}
|
||||
c.ServeJSON()
|
||||
return
|
||||
}
|
||||
|
||||
// 定义接收状态数据的结构体
|
||||
var statusData struct {
|
||||
Status int8 `json:"status"`
|
||||
}
|
||||
|
||||
// 解析请求体JSON数据
|
||||
err = json.Unmarshal(c.Ctx.Input.RequestBody, &statusData)
|
||||
if err != nil {
|
||||
c.Data["json"] = map[string]interface{}{
|
||||
"code": 1,
|
||||
"message": "请求参数格式错误: " + err.Error(),
|
||||
"data": nil,
|
||||
}
|
||||
c.ServeJSON()
|
||||
return
|
||||
}
|
||||
|
||||
// 调用服务层更新分类状态
|
||||
err = services.UpdateArticleCategoryStatus(categoryId, statusData.Status)
|
||||
if err != nil {
|
||||
c.Data["json"] = map[string]interface{}{
|
||||
"code": 1,
|
||||
"message": "更新分类状态失败: " + err.Error(),
|
||||
"data": nil,
|
||||
}
|
||||
} else {
|
||||
c.Data["json"] = map[string]interface{}{
|
||||
"code": 0,
|
||||
"message": "更新分类状态成功",
|
||||
"data": nil,
|
||||
}
|
||||
}
|
||||
c.ServeJSON()
|
||||
}
|
||||
|
||||
+110
-64
@@ -8,8 +8,8 @@ import (
|
||||
"server/models"
|
||||
"server/services"
|
||||
|
||||
beego "github.com/beego/beego/v2/server/web"
|
||||
"github.com/beego/beego/v2/client/orm"
|
||||
beego "github.com/beego/beego/v2/server/web"
|
||||
)
|
||||
|
||||
type CustomerController struct {
|
||||
@@ -45,7 +45,33 @@ func (c *CustomerController) Detail() {
|
||||
if err != nil {
|
||||
c.Data["json"] = map[string]interface{}{"code": 1, "message": err.Error()}
|
||||
} else {
|
||||
c.Data["json"] = map[string]interface{}{"code": 0, "message": "ok", "data": m}
|
||||
// 确保business_scope字段被正确返回
|
||||
result := map[string]interface{}{
|
||||
"id": m.Id,
|
||||
"tenant_id": m.TenantId,
|
||||
"customer_name": m.CustomerName,
|
||||
"customer_type": m.CustomerType,
|
||||
"contact_person": m.ContactPerson,
|
||||
"contact_phone": m.ContactPhone,
|
||||
"contact_email": m.ContactEmail,
|
||||
"customer_level": m.CustomerLevel,
|
||||
"industry": m.Industry,
|
||||
"address": m.Address,
|
||||
"register_time": m.RegisterTime,
|
||||
"expire_time": m.ExpireTime,
|
||||
"status": m.Status,
|
||||
"remark": m.Remark,
|
||||
"business_scope": m.BusinessScope, // 确保包含business_scope字段
|
||||
"invoice_title": m.InvoiceTitle,
|
||||
"tax_number": m.TaxNumber,
|
||||
"bank_name": m.BankName,
|
||||
"bank_account": m.BankAccount,
|
||||
"registered_address": m.RegisteredAddress,
|
||||
"registered_phone": m.RegisteredPhone,
|
||||
"create_time": m.CreateTime,
|
||||
"update_time": m.UpdateTime,
|
||||
}
|
||||
c.Data["json"] = map[string]interface{}{"code": 0, "message": "ok", "data": result}
|
||||
}
|
||||
c.ServeJSON()
|
||||
}
|
||||
@@ -68,62 +94,70 @@ func (c *CustomerController) Add() {
|
||||
|
||||
// Edit POST /api/crm/customer/edit body: {id, ...}
|
||||
func (c *CustomerController) Edit() {
|
||||
var body map[string]interface{}
|
||||
_ = json.Unmarshal(c.Ctx.Input.RequestBody, &body)
|
||||
id, _ := body["id"].(string)
|
||||
if id == "" {
|
||||
// 也允许前端直接在JSON中传 id 字段,下面会再从结构体取
|
||||
var payload map[string]interface{}
|
||||
if err := json.Unmarshal(c.Ctx.Input.RequestBody, &payload); err != nil {
|
||||
c.Data["json"] = map[string]interface{}{"code": 1, "message": "请求参数格式错误"}
|
||||
c.ServeJSON()
|
||||
return
|
||||
}
|
||||
var m models.Customer
|
||||
if err := json.Unmarshal(c.Ctx.Input.RequestBody, &m); err != nil {
|
||||
// 回退:从通用map中提取已知字段,避免类型不匹配导致失败
|
||||
if body == nil {
|
||||
_ = json.Unmarshal(c.Ctx.Input.RequestBody, &body)
|
||||
}
|
||||
toStr := func(v interface{}) string {
|
||||
switch t := v.(type) {
|
||||
case nil:
|
||||
return ""
|
||||
case string:
|
||||
return t
|
||||
case json.Number:
|
||||
return t.String()
|
||||
default:
|
||||
return fmt.Sprint(v)
|
||||
}
|
||||
}
|
||||
m = models.Customer{
|
||||
Id: toStr(body["id"]),
|
||||
TenantId: toStr(body["tenant_id"]),
|
||||
CustomerName: toStr(body["customer_name"]),
|
||||
CustomerType: toStr(body["customer_type"]),
|
||||
ContactPerson: toStr(body["contact_person"]),
|
||||
ContactPhone: toStr(body["contact_phone"]),
|
||||
ContactEmail: toStr(body["contact_email"]),
|
||||
CustomerLevel: toStr(body["customer_level"]),
|
||||
Industry: toStr(body["industry"]),
|
||||
Address: toStr(body["address"]),
|
||||
Status: toStr(body["status"]),
|
||||
Remark: toStr(body["remark"]),
|
||||
}
|
||||
if m.Id == "" {
|
||||
if id == "" {
|
||||
c.Data["json"] = map[string]interface{}{"code": 1, "message": "id不能为空"}
|
||||
c.ServeJSON()
|
||||
return
|
||||
}
|
||||
m.Id = id
|
||||
|
||||
// Extract and validate id
|
||||
var idStr string
|
||||
if idVal, ok := payload["id"]; ok {
|
||||
switch v := idVal.(type) {
|
||||
case float64:
|
||||
idStr = strconv.Itoa(int(v))
|
||||
case int:
|
||||
idStr = strconv.Itoa(v)
|
||||
case string:
|
||||
idStr = v
|
||||
default:
|
||||
idStr = fmt.Sprintf("%v", v)
|
||||
}
|
||||
}
|
||||
if m.Id == "" {
|
||||
if id == "" {
|
||||
c.Data["json"] = map[string]interface{}{"code": 1, "message": "id不能为空"}
|
||||
c.ServeJSON()
|
||||
return
|
||||
}
|
||||
m.Id = id
|
||||
if idStr == "" {
|
||||
c.Data["json"] = map[string]interface{}{"code": 1, "message": "id不能为空"}
|
||||
c.ServeJSON()
|
||||
return
|
||||
}
|
||||
if err := services.UpdateCustomer(&m); err != nil {
|
||||
|
||||
// Build update params - only include fields that are provided
|
||||
params := orm.Params{}
|
||||
fieldMappings := map[string]string{
|
||||
"customer_name": "CustomerName",
|
||||
"customer_type": "CustomerType",
|
||||
"customer_level": "CustomerLevel",
|
||||
"industry": "Industry",
|
||||
"contact_person": "ContactPerson",
|
||||
"contact_phone": "ContactPhone",
|
||||
"contact_email": "ContactEmail",
|
||||
"address": "Address",
|
||||
"register_time": "RegisterTime",
|
||||
"expire_time": "ExpireTime",
|
||||
"status": "Status",
|
||||
"remark": "Remark",
|
||||
"business_scope": "BusinessScope",
|
||||
"invoice_title": "InvoiceTitle",
|
||||
"tax_number": "TaxNumber",
|
||||
"bank_name": "BankName",
|
||||
"bank_account": "BankAccount",
|
||||
"registered_address": "RegisteredAddress",
|
||||
"registered_phone": "RegisteredPhone",
|
||||
}
|
||||
|
||||
for jsonKey := range fieldMappings {
|
||||
if value, exists := payload[jsonKey]; exists {
|
||||
params[jsonKey] = value
|
||||
}
|
||||
}
|
||||
|
||||
if len(params) == 0 {
|
||||
c.Data["json"] = map[string]interface{}{"code": 1, "message": "没有要更新的字段"}
|
||||
c.ServeJSON()
|
||||
return
|
||||
}
|
||||
|
||||
if err := services.UpdateCustomerFields(idStr, params); err != nil {
|
||||
c.Data["json"] = map[string]interface{}{"code": 1, "message": err.Error()}
|
||||
} else {
|
||||
c.Data["json"] = map[string]interface{}{"code": 0, "message": "ok"}
|
||||
@@ -157,30 +191,42 @@ func (c *CustomerController) Delete() {
|
||||
|
||||
// 更新客户开票信息
|
||||
func (c *CustomerController) UpdateInvoice() {
|
||||
var body struct {
|
||||
Id string `json:"id"`
|
||||
TenantId string `json:"tenantId"`
|
||||
}
|
||||
if err := json.Unmarshal(c.Ctx.Input.RequestBody, &body); err != nil {
|
||||
// Extract data from the request payload
|
||||
var payload map[string]interface{}
|
||||
if err := json.Unmarshal(c.Ctx.Input.RequestBody, &payload); err != nil {
|
||||
c.Data["json"] = map[string]interface{}{"code": 1, "message": "请求参数格式错误"}
|
||||
c.ServeJSON()
|
||||
return
|
||||
}
|
||||
if body.Id == "" {
|
||||
|
||||
// Extract and validate id
|
||||
var idStr string
|
||||
if idVal, ok := payload["id"]; ok {
|
||||
switch v := idVal.(type) {
|
||||
case float64:
|
||||
idStr = strconv.Itoa(int(v))
|
||||
case int:
|
||||
idStr = strconv.Itoa(v)
|
||||
case string:
|
||||
idStr = v
|
||||
default:
|
||||
idStr = fmt.Sprintf("%v", v)
|
||||
}
|
||||
}
|
||||
if idStr == "" {
|
||||
c.Data["json"] = map[string]interface{}{"code": 1, "message": "id不能为空"}
|
||||
c.ServeJSON()
|
||||
return
|
||||
}
|
||||
// Extract invoice fields from the request payload
|
||||
var payload map[string]interface{}
|
||||
_ = json.Unmarshal(c.Ctx.Input.RequestBody, &payload)
|
||||
|
||||
// Extract invoice fields from the payload
|
||||
params := orm.Params{}
|
||||
for _, key := range []string{"invoice_title", "tax_number", "bank_name", "bank_account", "registered_address", "registered_phone"} {
|
||||
if v, ok := payload[key]; ok {
|
||||
params[key] = v
|
||||
}
|
||||
}
|
||||
if err := services.UpdateInvoice(body.Id, params); err != nil {
|
||||
if err := services.UpdateInvoice(idStr, params); err != nil {
|
||||
c.Data["json"] = map[string]interface{}{"code": 1, "message": err.Error()}
|
||||
} else {
|
||||
c.Data["json"] = map[string]interface{}{"code": 0, "message": "ok"}
|
||||
|
||||
@@ -2,13 +2,14 @@ package controllers
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"strconv"
|
||||
|
||||
"server/models"
|
||||
"server/services"
|
||||
|
||||
beego "github.com/beego/beego/v2/server/web"
|
||||
"github.com/beego/beego/v2/client/orm"
|
||||
beego "github.com/beego/beego/v2/server/web"
|
||||
)
|
||||
|
||||
type SupplierController struct {
|
||||
@@ -47,7 +48,33 @@ func (c *SupplierController) Detail() {
|
||||
if err != nil {
|
||||
c.Data["json"] = map[string]interface{}{"code": 1, "message": err.Error()}
|
||||
} else {
|
||||
c.Data["json"] = map[string]interface{}{"code": 0, "message": "ok", "data": m}
|
||||
// 确保business_scope字段被正确返回
|
||||
result := map[string]interface{}{
|
||||
"id": m.Id,
|
||||
"tenant_id": m.TenantId,
|
||||
"supplier_name": m.SupplierName,
|
||||
"supplier_type": m.SupplierType,
|
||||
"contact_person": m.ContactPerson,
|
||||
"contact_phone": m.ContactPhone,
|
||||
"contact_email": m.ContactEmail,
|
||||
"supplier_level": m.SupplierLevel,
|
||||
"industry": m.Industry,
|
||||
"address": m.Address,
|
||||
"register_time": m.RegisterTime,
|
||||
"expire_time": m.ExpireTime,
|
||||
"status": m.Status,
|
||||
"remark": m.Remark,
|
||||
"business_scope": m.BusinessScope, // 确保包含business_scope字段
|
||||
"invoice_title": m.InvoiceTitle,
|
||||
"tax_number": m.TaxNumber,
|
||||
"bank_name": m.BankName,
|
||||
"bank_account": m.BankAccount,
|
||||
"registered_address": m.RegisteredAddress,
|
||||
"registered_phone": m.RegisteredPhone,
|
||||
"create_time": m.CreateTime,
|
||||
"update_time": m.UpdateTime,
|
||||
}
|
||||
c.Data["json"] = map[string]interface{}{"code": 0, "message": "ok", "data": result}
|
||||
}
|
||||
c.ServeJSON()
|
||||
}
|
||||
@@ -68,31 +95,70 @@ func (c *SupplierController) Add() {
|
||||
}
|
||||
|
||||
func (c *SupplierController) Edit() {
|
||||
var body map[string]interface{}
|
||||
_ = json.Unmarshal(c.Ctx.Input.RequestBody, &body)
|
||||
var idInt int64
|
||||
if v, ok := body["id"].(string); ok && v != "" {
|
||||
if n, err := strconv.ParseInt(v, 10, 64); err == nil {
|
||||
idInt = n
|
||||
}
|
||||
} else if v2, ok2 := body["id"].(float64); ok2 {
|
||||
idInt = int64(v2)
|
||||
}
|
||||
var m models.Supplier
|
||||
if err := json.Unmarshal(c.Ctx.Input.RequestBody, &m); err != nil {
|
||||
var payload map[string]interface{}
|
||||
if err := json.Unmarshal(c.Ctx.Input.RequestBody, &payload); err != nil {
|
||||
c.Data["json"] = map[string]interface{}{"code": 1, "message": "请求参数格式错误"}
|
||||
c.ServeJSON()
|
||||
return
|
||||
}
|
||||
if m.Id == 0 {
|
||||
if idInt == 0 {
|
||||
c.Data["json"] = map[string]interface{}{"code": 1, "message": "id不能为空"}
|
||||
c.ServeJSON()
|
||||
return
|
||||
|
||||
// Extract and validate id
|
||||
var idStr string
|
||||
if idVal, ok := payload["id"]; ok {
|
||||
switch v := idVal.(type) {
|
||||
case float64:
|
||||
idStr = strconv.Itoa(int(v))
|
||||
case int:
|
||||
idStr = strconv.Itoa(v)
|
||||
case string:
|
||||
idStr = v
|
||||
default:
|
||||
idStr = fmt.Sprintf("%v", v)
|
||||
}
|
||||
m.Id = idInt
|
||||
}
|
||||
if err := services.UpdateSupplier(&m); err != nil {
|
||||
if idStr == "" {
|
||||
c.Data["json"] = map[string]interface{}{"code": 1, "message": "id不能为空"}
|
||||
c.ServeJSON()
|
||||
return
|
||||
}
|
||||
|
||||
// Build update params - only include fields that are provided
|
||||
params := orm.Params{}
|
||||
fieldMappings := map[string]string{
|
||||
"supplier_name": "SupplierName",
|
||||
"supplier_type": "SupplierType",
|
||||
"supplier_level": "SupplierLevel",
|
||||
"industry": "Industry",
|
||||
"contact_person": "ContactPerson",
|
||||
"contact_phone": "ContactPhone",
|
||||
"contact_email": "ContactEmail",
|
||||
"address": "Address",
|
||||
"register_time": "RegisterTime",
|
||||
"expire_time": "ExpireTime",
|
||||
"status": "Status",
|
||||
"remark": "Remark",
|
||||
"business_scope": "BusinessScope",
|
||||
"invoice_title": "InvoiceTitle",
|
||||
"tax_number": "TaxNumber",
|
||||
"bank_name": "BankName",
|
||||
"bank_account": "BankAccount",
|
||||
"registered_address": "RegisteredAddress",
|
||||
"registered_phone": "RegisteredPhone",
|
||||
}
|
||||
|
||||
for jsonKey := range fieldMappings {
|
||||
if value, exists := payload[jsonKey]; exists {
|
||||
params[jsonKey] = value
|
||||
}
|
||||
}
|
||||
|
||||
if len(params) == 0 {
|
||||
c.Data["json"] = map[string]interface{}{"code": 1, "message": "没有要更新的字段"}
|
||||
c.ServeJSON()
|
||||
return
|
||||
}
|
||||
|
||||
if err := services.UpdateSupplierFields(idStr, params); err != nil {
|
||||
c.Data["json"] = map[string]interface{}{"code": 1, "message": err.Error()}
|
||||
} else {
|
||||
c.Data["json"] = map[string]interface{}{"code": 0, "message": "ok"}
|
||||
|
||||
+25
-24
@@ -8,29 +8,30 @@ import (
|
||||
|
||||
// Customer 客户模型(对应表 yz_tenant_crm_customer)
|
||||
type Customer struct {
|
||||
Id string `orm:"pk;size(36)" json:"id"`
|
||||
TenantId string `orm:"column(tenant_id);size(64)" json:"tenant_id"`
|
||||
CustomerName string `orm:"column(customer_name);size(100)" json:"customer_name"`
|
||||
CustomerType string `orm:"column(customer_type);size(20)" json:"customer_type"`
|
||||
ContactPerson string `orm:"column(contact_person);size(50)" json:"contact_person"`
|
||||
ContactPhone string `orm:"column(contact_phone);size(20)" json:"contact_phone"`
|
||||
ContactEmail string `orm:"column(contact_email);size(100);null" json:"contact_email"`
|
||||
CustomerLevel string `orm:"column(customer_level);size(20);null" json:"customer_level"`
|
||||
Industry string `orm:"column(industry);size(50);null" json:"industry"`
|
||||
Address string `orm:"column(address);size(255);null" json:"address"`
|
||||
RegisterTime *time.Time `orm:"column(register_time);null;type(date)" json:"register_time"`
|
||||
ExpireTime *time.Time `orm:"column(expire_time);null;type(date)" json:"expire_time"`
|
||||
Status string `orm:"column(status);size(20)" json:"status"`
|
||||
Remark string `orm:"column(remark);type(text);null" json:"remark"`
|
||||
InvoiceTitle string `orm:"column(invoice_title);size(100);null" json:"invoice_title"`
|
||||
TaxNumber string `orm:"column(tax_number);size(50);null" json:"tax_number"`
|
||||
BankName string `orm:"column(bank_name);size(100);null" json:"bank_name"`
|
||||
BankAccount string `orm:"column(bank_account);size(50);null" json:"bank_account"`
|
||||
RegisteredAddress string `orm:"column(registered_address);size(255);null" json:"registered_address"`
|
||||
RegisteredPhone string `orm:"column(registered_phone);size(50);null" json:"registered_phone"`
|
||||
CreateTime time.Time `orm:"column(create_time);type(datetime);auto_now_add" json:"create_time"`
|
||||
UpdateTime time.Time `orm:"column(update_time);type(datetime);auto_now" json:"update_time"`
|
||||
DeleteTime *time.Time `orm:"column(delete_time);null;type(datetime)" json:"delete_time"`
|
||||
Id int32 `orm:"pk;auto" json:"id"`
|
||||
TenantId string `orm:"column(tenant_id);size(64)" json:"tenant_id"`
|
||||
CustomerName string `orm:"column(customer_name);size(100)" json:"customer_name"`
|
||||
CustomerType string `orm:"column(customer_type);size(20)" json:"customer_type"`
|
||||
ContactPerson string `orm:"column(contact_person);size(50)" json:"contact_person"`
|
||||
ContactPhone string `orm:"column(contact_phone);size(20)" json:"contact_phone"`
|
||||
ContactEmail string `orm:"column(contact_email);size(100);null" json:"contact_email"`
|
||||
CustomerLevel string `orm:"column(customer_level);size(20);null" json:"customer_level"`
|
||||
Industry string `orm:"column(industry);size(50);null" json:"industry"`
|
||||
Address string `orm:"column(address);size(255);null" json:"address"`
|
||||
RegisterTime *time.Time `orm:"column(register_time);null;type(date)" json:"register_time"`
|
||||
ExpireTime *time.Time `orm:"column(expire_time);null;type(date)" json:"expire_time"`
|
||||
Status string `orm:"column(status);size(20)" json:"status"`
|
||||
Remark string `orm:"column(remark);type(text);null" json:"remark"`
|
||||
BusinessScope string `orm:"column(business_scope);type(longtext);null" json:"business_scope"`
|
||||
InvoiceTitle string `orm:"column(invoice_title);size(100);null" json:"invoice_title"`
|
||||
TaxNumber string `orm:"column(tax_number);size(50);null" json:"tax_number"`
|
||||
BankName string `orm:"column(bank_name);size(100);null" json:"bank_name"`
|
||||
BankAccount string `orm:"column(bank_account);size(50);null" json:"bank_account"`
|
||||
RegisteredAddress string `orm:"column(registered_address);size(255);null" json:"registered_address"`
|
||||
RegisteredPhone string `orm:"column(registered_phone);size(50);null" json:"registered_phone"`
|
||||
CreateTime time.Time `orm:"column(create_time);type(datetime);auto_now_add" json:"create_time"`
|
||||
UpdateTime time.Time `orm:"column(update_time);type(datetime);auto_now" json:"update_time"`
|
||||
DeleteTime *time.Time `orm:"column(delete_time);null;type(datetime)" json:"delete_time"`
|
||||
}
|
||||
|
||||
func (t *Customer) TableName() string {
|
||||
@@ -39,4 +40,4 @@ func (t *Customer) TableName() string {
|
||||
|
||||
func init() {
|
||||
orm.RegisterModel(new(Customer))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,7 +8,7 @@ import (
|
||||
|
||||
// Supplier 供应商模型(对应表 yz_tenant_crm_supplier)
|
||||
type Supplier struct {
|
||||
Id int64 `orm:"pk;auto" json:"id"`
|
||||
Id int32 `orm:"pk;auto" json:"id"`
|
||||
TenantId string `orm:"column(tenant_id);size(64)" json:"tenant_id"`
|
||||
SupplierName string `orm:"column(supplier_name);size(100)" json:"supplier_name"`
|
||||
SupplierType string `orm:"column(supplier_type);size(20)" json:"supplier_type"`
|
||||
@@ -22,6 +22,7 @@ type Supplier struct {
|
||||
ExpireTime *time.Time `orm:"column(expire_time);null;type(date)" json:"expire_time"`
|
||||
Status string `orm:"column(status);size(20)" json:"status"`
|
||||
Remark string `orm:"column(remark);type(text);null" json:"remark"`
|
||||
BusinessScope string `orm:"column(business_scope);type(longtext);null" json:"business_scope"`
|
||||
InvoiceTitle string `orm:"column(invoice_title);size(255);null" json:"invoice_title"`
|
||||
TaxNumber string `orm:"column(tax_number);size(20);null" json:"tax_number"`
|
||||
BankName string `orm:"column(bank_name);size(50);null" json:"bank_name"`
|
||||
|
||||
@@ -396,4 +396,9 @@ func init() {
|
||||
beego.Router("/api/articles/:id", &controllers.ArticlesController{}, "get:GetArticle;put:UpdateArticle;delete:DeleteArticle")
|
||||
beego.Router("/api/articles/:id/status", &controllers.ArticlesController{}, "patch:UpdateArticleStatus")
|
||||
|
||||
// 文章分类管理路由
|
||||
beego.Router("/api/categories", &controllers.ArticlesController{}, "get:ListCategories;post:CreateCategory")
|
||||
beego.Router("/api/categories/:id", &controllers.ArticlesController{}, "get:GetCategory;put:UpdateCategory;delete:DeleteCategory")
|
||||
beego.Router("/api/categories/:id/status", &controllers.ArticlesController{}, "patch:UpdateCategoryStatus")
|
||||
|
||||
}
|
||||
|
||||
@@ -1,7 +1,10 @@
|
||||
package services
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"server/models"
|
||||
"strconv"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/beego/beego/v2/client/orm"
|
||||
@@ -215,3 +218,274 @@ func GetArticleStats() (map[string]int64, error) {
|
||||
|
||||
return stats, nil
|
||||
}
|
||||
|
||||
// GetArticleCategories 获取文章分类列表
|
||||
func GetArticleCategories(tenantId int, page, pageSize int, keyword string, status *int8) ([]*models.DictItem, int, error) {
|
||||
// 首先确保文章分类字典类型存在,如果不存在则创建并添加默认分类
|
||||
err := ensureDefaultArticleCategories(tenantId)
|
||||
if err != nil {
|
||||
return nil, 0, err
|
||||
}
|
||||
|
||||
// 调用字典服务获取文章分类(使用字典编码 "article_category")
|
||||
// 注意:这里传入true表示包含禁用的项目,然后我们在业务层进行状态过滤
|
||||
categories, err := GetDictItemsByCode("article_category", tenantId, true)
|
||||
if err != nil {
|
||||
return nil, 0, err
|
||||
}
|
||||
|
||||
// 过滤状态
|
||||
var filteredCategories []*models.DictItem
|
||||
if status != nil {
|
||||
for _, category := range categories {
|
||||
if category.Status == *status {
|
||||
filteredCategories = append(filteredCategories, category)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
filteredCategories = categories
|
||||
}
|
||||
|
||||
// 过滤关键词
|
||||
if keyword != "" {
|
||||
var keywordFiltered []*models.DictItem
|
||||
for _, category := range filteredCategories {
|
||||
if strings.Contains(category.DictLabel, keyword) {
|
||||
keywordFiltered = append(keywordFiltered, category)
|
||||
}
|
||||
}
|
||||
filteredCategories = keywordFiltered
|
||||
}
|
||||
|
||||
// 分页处理
|
||||
total := len(filteredCategories)
|
||||
start := (page - 1) * pageSize
|
||||
end := start + pageSize
|
||||
if start > total {
|
||||
start = total
|
||||
}
|
||||
if end > total {
|
||||
end = total
|
||||
}
|
||||
|
||||
if start >= end {
|
||||
return []*models.DictItem{}, total, nil
|
||||
}
|
||||
|
||||
return filteredCategories[start:end], total, nil
|
||||
}
|
||||
|
||||
// GetArticleCategoryById 根据ID获取文章分类详情
|
||||
func GetArticleCategoryById(id int) (*models.DictItem, error) {
|
||||
return GetDictItemById(id)
|
||||
}
|
||||
|
||||
// CreateArticleCategory 创建文章分类
|
||||
func CreateArticleCategory(tenantId, userId int, label, value string, status int8, sort int, color, icon, remark string) (int64, error) {
|
||||
// 先获取或创建文章分类字典类型
|
||||
dictType, err := getOrCreateArticleCategoryDictType(tenantId, userId)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
|
||||
// 构建字典项对象
|
||||
var dictItem models.DictItem
|
||||
dictItem.DictTypeId = dictType.Id
|
||||
dictItem.DictLabel = label
|
||||
dictItem.DictValue = value
|
||||
dictItem.Status = status
|
||||
dictItem.Sort = sort
|
||||
dictItem.Color = color
|
||||
dictItem.Icon = icon
|
||||
dictItem.Remark = remark
|
||||
dictItem.CreateBy = strconv.Itoa(userId)
|
||||
dictItem.UpdateBy = strconv.Itoa(userId)
|
||||
|
||||
// 调用字典服务创建分类
|
||||
return AddDictItem(&dictItem)
|
||||
}
|
||||
|
||||
// UpdateArticleCategory 更新文章分类
|
||||
func UpdateArticleCategory(id, userId int, label, value string, status int8, sort int, color, icon, remark string) error {
|
||||
// 获取现有分类
|
||||
existingCategory, err := GetDictItemById(id)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if existingCategory == nil {
|
||||
return fmt.Errorf("分类不存在")
|
||||
}
|
||||
|
||||
// 构建更新对象
|
||||
var dictItem models.DictItem
|
||||
dictItem.Id = id
|
||||
dictItem.DictTypeId = existingCategory.DictTypeId
|
||||
dictItem.DictLabel = label
|
||||
dictItem.DictValue = value
|
||||
dictItem.Status = status
|
||||
dictItem.Sort = sort
|
||||
dictItem.Color = color
|
||||
dictItem.Icon = icon
|
||||
dictItem.Remark = remark
|
||||
dictItem.UpdateBy = strconv.Itoa(userId)
|
||||
|
||||
// 调用字典服务更新分类
|
||||
return UpdateDictItem(&dictItem)
|
||||
}
|
||||
|
||||
// DeleteArticleCategory 删除文章分类
|
||||
func DeleteArticleCategory(id int) error {
|
||||
// 检查是否有文章使用此分类
|
||||
o := orm.NewOrm()
|
||||
var count int
|
||||
err := o.Raw("SELECT COUNT(*) FROM yz_articles WHERE cate = ? AND delete_time IS NULL", id).QueryRow(&count)
|
||||
if err == nil && count > 0 {
|
||||
return fmt.Errorf("该分类下存在文章,无法删除")
|
||||
}
|
||||
|
||||
// 调用字典服务删除分类
|
||||
return DeleteDictItem(id)
|
||||
}
|
||||
|
||||
// UpdateArticleCategoryStatus 更新文章分类状态
|
||||
func UpdateArticleCategoryStatus(id int, status int8) error {
|
||||
// 获取现有分类
|
||||
category, err := GetDictItemById(id)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if category == nil {
|
||||
return fmt.Errorf("分类不存在")
|
||||
}
|
||||
|
||||
// 更新状态
|
||||
category.Status = status
|
||||
category.UpdateTime = time.Now()
|
||||
|
||||
// 调用字典服务更新分类
|
||||
return UpdateDictItem(category)
|
||||
}
|
||||
|
||||
// ensureDefaultArticleCategories 确保文章分类字典类型和默认分类项存在
|
||||
func ensureDefaultArticleCategories(tenantId int) error {
|
||||
o := orm.NewOrm()
|
||||
|
||||
// 检查文章分类字典类型是否存在
|
||||
dictType := &models.DictType{}
|
||||
err := o.Raw("SELECT * FROM sys_dict_type WHERE dict_code = ? AND tenant_id = ? AND is_deleted = 0",
|
||||
"article_category", tenantId).QueryRow(dictType)
|
||||
|
||||
if err != nil {
|
||||
// 字典类型不存在,创建它
|
||||
dictType = &models.DictType{
|
||||
TenantId: tenantId,
|
||||
DictCode: "article_category",
|
||||
DictName: "文章分类",
|
||||
ParentId: 0,
|
||||
Status: 1,
|
||||
IsGlobal: 0,
|
||||
Sort: 0,
|
||||
Remark: "文章分类字典",
|
||||
CreateBy: "system",
|
||||
UpdateBy: "system",
|
||||
IsDeleted: 0,
|
||||
CreateTime: time.Now(),
|
||||
UpdateTime: time.Now(),
|
||||
}
|
||||
|
||||
_, err = o.Insert(dictType)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
// 检查是否已有分类项,如果没有则创建默认分类
|
||||
var count int
|
||||
err = o.Raw("SELECT COUNT(*) FROM sys_dict_item WHERE dict_type_id = ? AND is_deleted = 0", dictType.Id).QueryRow(&count)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if count == 0 {
|
||||
// 创建默认分类项
|
||||
defaultCategories := []struct {
|
||||
label string
|
||||
value string
|
||||
sort int
|
||||
color string
|
||||
remark string
|
||||
}{
|
||||
{"技术分享", "tech", 1, "#409EFF", "技术相关文章"},
|
||||
{"行业资讯", "news", 2, "#67C23A", "行业新闻资讯"},
|
||||
{"教程指南", "tutorial", 3, "#E6A23C", "使用教程和指南"},
|
||||
{"公告通知", "announcement", 4, "#F56C6C", "重要公告通知"},
|
||||
{"其他", "other", 5, "#909399", "其他类型文章"},
|
||||
}
|
||||
|
||||
for _, cat := range defaultCategories {
|
||||
dictItem := &models.DictItem{
|
||||
DictTypeId: dictType.Id,
|
||||
DictLabel: cat.label,
|
||||
DictValue: cat.value,
|
||||
ParentId: 0,
|
||||
Status: 1,
|
||||
Sort: cat.sort,
|
||||
Color: cat.color,
|
||||
Remark: cat.remark,
|
||||
CreateBy: "system",
|
||||
UpdateBy: "system",
|
||||
IsDeleted: 0,
|
||||
CreateTime: time.Now(),
|
||||
UpdateTime: time.Now(),
|
||||
}
|
||||
|
||||
_, err = o.Insert(dictItem)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// getOrCreateArticleCategoryDictType 获取或创建文章分类字典类型
|
||||
func getOrCreateArticleCategoryDictType(tenantId int, userId int) (*models.DictType, error) {
|
||||
o := orm.NewOrm()
|
||||
|
||||
// 尝试获取现有的文章分类字典类型
|
||||
dictType := &models.DictType{}
|
||||
err := o.Raw("SELECT * FROM sys_dict_type WHERE dict_code = ? AND tenant_id = ? AND is_deleted = 0",
|
||||
"article_category", tenantId).QueryRow(dictType)
|
||||
|
||||
if err == nil {
|
||||
// 已存在,直接返回
|
||||
return dictType, nil
|
||||
}
|
||||
|
||||
// 不存在,创建新的字典类型
|
||||
dictType = &models.DictType{
|
||||
TenantId: tenantId,
|
||||
DictCode: "article_category",
|
||||
DictName: "文章分类",
|
||||
ParentId: 0,
|
||||
Status: 1,
|
||||
IsGlobal: 0,
|
||||
Sort: 0,
|
||||
Remark: "文章分类字典",
|
||||
CreateBy: strconv.Itoa(userId),
|
||||
UpdateBy: strconv.Itoa(userId),
|
||||
IsDeleted: 0,
|
||||
CreateTime: time.Now(),
|
||||
UpdateTime: time.Now(),
|
||||
}
|
||||
|
||||
_, err = o.Insert(dictType)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return dictType, nil
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package services
|
||||
|
||||
import (
|
||||
"strconv"
|
||||
"time"
|
||||
|
||||
"server/models"
|
||||
@@ -44,7 +45,11 @@ func ListCustomers(tenantId, keyword, status string, page, pageSize int) (list [
|
||||
// GetCustomer 通过ID获取客户
|
||||
func GetCustomer(id string) (*models.Customer, error) {
|
||||
o := orm.NewOrm()
|
||||
m := models.Customer{Id: id}
|
||||
var customerId int32
|
||||
if parsedId, err := strconv.ParseInt(id, 10, 64); err == nil {
|
||||
customerId = int32(parsedId)
|
||||
}
|
||||
m := models.Customer{Id: customerId}
|
||||
if err := o.Read(&m); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -73,16 +78,38 @@ func UpdateCustomer(m *models.Customer, cols ...string) error {
|
||||
func SoftDeleteCustomer(id string) error {
|
||||
o := orm.NewOrm()
|
||||
now := time.Now()
|
||||
m := models.Customer{Id: id, DeleteTime: &now}
|
||||
var customerId int32
|
||||
if parsedId, err := strconv.ParseInt(id, 10, 64); err == nil {
|
||||
customerId = int32(parsedId)
|
||||
}
|
||||
m := models.Customer{Id: customerId, DeleteTime: &now}
|
||||
_, err := o.Update(&m, "delete_time")
|
||||
return err
|
||||
}
|
||||
|
||||
// 更新客户字段(支持部分字段更新)
|
||||
func UpdateCustomerFields(id string, params orm.Params) error {
|
||||
o := orm.NewOrm()
|
||||
var customerId int32
|
||||
if parsedId, err := strconv.ParseInt(id, 10, 64); err == nil {
|
||||
customerId = int32(parsedId)
|
||||
}
|
||||
m := &models.Customer{Id: customerId}
|
||||
if _, err := o.QueryTable(m).Filter("id", customerId).Update(params); err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// 更新客户开票信息
|
||||
func UpdateInvoice(id string, params orm.Params) error {
|
||||
o := orm.NewOrm()
|
||||
m := &models.Customer{Id: id}
|
||||
if _, err := o.QueryTable(m).Filter("id", id).Update(params); err != nil {
|
||||
var customerId int32
|
||||
if parsedId, err := strconv.ParseInt(id, 10, 64); err == nil {
|
||||
customerId = int32(parsedId)
|
||||
}
|
||||
m := &models.Customer{Id: customerId}
|
||||
if _, err := o.QueryTable(m).Filter("id", customerId).Update(params); err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
|
||||
@@ -46,7 +46,7 @@ func ListSuppliers(tenantId, keyword, status string, page, pageSize int) (list [
|
||||
// GetSupplier 通过ID获取供应商
|
||||
func GetSupplier(id int64) (*models.Supplier, error) {
|
||||
o := orm.NewOrm()
|
||||
m := models.Supplier{Id: id}
|
||||
m := models.Supplier{Id: int32(id)}
|
||||
if err := o.Read(&m); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -75,11 +75,25 @@ func UpdateSupplier(m *models.Supplier, cols ...string) error {
|
||||
func SoftDeleteSupplier(id int64) error {
|
||||
o := orm.NewOrm()
|
||||
now := time.Now()
|
||||
m := models.Supplier{Id: id, DeleteTime: &now}
|
||||
m := models.Supplier{Id: int32(id), DeleteTime: &now}
|
||||
_, err := o.Update(&m, "delete_time")
|
||||
return err
|
||||
}
|
||||
|
||||
// 更新供应商字段(支持部分字段更新)
|
||||
func UpdateSupplierFields(id string, params orm.Params) error {
|
||||
o := orm.NewOrm()
|
||||
var supplierId int32
|
||||
if parsedId, err := strconv.ParseInt(id, 10, 64); err == nil {
|
||||
supplierId = int32(parsedId)
|
||||
}
|
||||
m := &models.Supplier{Id: supplierId}
|
||||
if _, err := o.QueryTable(m).Filter("id", supplierId).Update(params); err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// 更新供应商开票信息
|
||||
func UpdateSupplierInvoice(params orm.Params) error {
|
||||
o := orm.NewOrm()
|
||||
|
||||
@@ -11,7 +11,8 @@ INSERT INTO `sys_dict_type` (`tenant_id`, `dict_code`, `dict_name`, `parent_id`,
|
||||
(0, 'user_status', '用户状态', 0, 1, 1, '用户启用禁用状态', 'system'),
|
||||
(0, 'user_gender', '用户性别', 0, 1, 2, '用户性别', 'system'),
|
||||
(0, 'position_status', '职位状态', 0, 1, 3, '职位启用禁用状态', 'system'),
|
||||
(0, 'dept_status', '部门状态', 0, 1, 4, '部门启用禁用状态', 'system');
|
||||
(0, 'dept_status', '部门状态', 0, 1, 4, '部门启用禁用状态', 'system'),
|
||||
(1, 'article_category', '文章分类', 0, 1, 5, '文章分类字典', 'system');
|
||||
|
||||
-- 插入用户状态字典项
|
||||
-- 假设 user_status 字典类型 ID 为 1
|
||||
@@ -37,3 +38,12 @@ INSERT INTO `sys_dict_item` (`dict_type_id`, `dict_label`, `dict_value`, `parent
|
||||
INSERT INTO `sys_dict_item` (`dict_type_id`, `dict_label`, `dict_value`, `parent_id`, `status`, `sort`, `color`, `remark`, `create_by`) VALUES
|
||||
(4, '启用', '1', 0, 1, 1, '#67C23A', '部门启用状态', 'system'),
|
||||
(4, '禁用', '0', 0, 1, 2, '#F56C6C', '部门禁用状态', 'system');
|
||||
|
||||
-- 插入文章分类字典项
|
||||
-- 假设 article_category 字典类型 ID 为 5
|
||||
INSERT INTO `sys_dict_item` (`dict_type_id`, `dict_label`, `dict_value`, `parent_id`, `status`, `sort`, `color`, `remark`, `create_by`) VALUES
|
||||
(5, '技术分享', 'tech', 0, 1, 1, '#409EFF', '技术相关文章', 'system'),
|
||||
(5, '行业资讯', 'news', 0, 1, 2, '#67C23A', '行业新闻资讯', 'system'),
|
||||
(5, '教程指南', 'tutorial', 0, 1, 3, '#E6A23C', '使用教程和指南', 'system'),
|
||||
(5, '公告通知', 'announcement', 0, 1, 4, '#F56C6C', '重要公告通知', 'system'),
|
||||
(5, '其他', 'other', 0, 1, 5, '#909399', '其他类型文章', 'system');
|
||||
|
||||
Reference in New Issue
Block a user