mirror of
				https://github.com/yangjian102621/geekai.git
				synced 2025-11-04 16:23:42 +08:00 
			
		
		
		
	refactor: chat role manage for admin is ready
This commit is contained in:
		@@ -4,4 +4,3 @@ const SessionName = "ChatGPT-TOKEN"
 | 
			
		||||
const SessionUser = "SESSION_USER"        // 存储用户信息的 session key
 | 
			
		||||
const SessionAdmin = "SESSION_ADMIN"      //存储管理员信息的 session key
 | 
			
		||||
const LoginUserCache = "LOGIN_USER_CACHE" // 已登录用户缓存
 | 
			
		||||
const AdminUserCache = "ADMIN_USER_CACHE" // 管理员用户信息缓存
 | 
			
		||||
 
 | 
			
		||||
@@ -10,6 +10,7 @@ import (
 | 
			
		||||
	"chatplus/utils/resp"
 | 
			
		||||
	"github.com/gin-gonic/gin"
 | 
			
		||||
	"gorm.io/gorm"
 | 
			
		||||
	"time"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type ChatRoleHandler struct {
 | 
			
		||||
@@ -23,42 +24,38 @@ func NewChatRoleHandler(app *core.AppServer, db *gorm.DB) *ChatRoleHandler {
 | 
			
		||||
	return &h
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Add 添加一个聊天角色
 | 
			
		||||
func (h *ChatRoleHandler) Add(c *gin.Context) {
 | 
			
		||||
// Update 更新某个聊天角色信息,这里只允许更改名称以及启用和禁用角色操作
 | 
			
		||||
func (h *ChatRoleHandler) Update(c *gin.Context) {
 | 
			
		||||
	var data vo.ChatRole
 | 
			
		||||
	if err := c.ShouldBindJSON(&data); err != nil {
 | 
			
		||||
		resp.ERROR(c, types.InvalidArgs)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if data.Key == "" || data.Name == "" || data.Icon == "" {
 | 
			
		||||
	var role model.ChatRole
 | 
			
		||||
	err := utils.CopyObject(data, &role)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		resp.ERROR(c, types.InvalidArgs)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	//err := h.service.Create(data)
 | 
			
		||||
	//if err != nil {
 | 
			
		||||
	//	resp.ERROR(c, "Save failed: "+err.Error())
 | 
			
		||||
	//	return
 | 
			
		||||
	//}
 | 
			
		||||
 | 
			
		||||
	role.Id = data.Id
 | 
			
		||||
	if data.CreatedAt > 0 {
 | 
			
		||||
		role.CreatedAt = time.Unix(data.CreatedAt, 0)
 | 
			
		||||
	}
 | 
			
		||||
	res := h.db.Save(&role)
 | 
			
		||||
	if res.Error != nil {
 | 
			
		||||
		resp.ERROR(c, "更新数据库失败!")
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	// 填充 ID 数据
 | 
			
		||||
	data.Id = role.Id
 | 
			
		||||
	data.CreatedAt = role.CreatedAt.Unix()
 | 
			
		||||
	resp.SUCCESS(c, data)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Get 获取指定的角色
 | 
			
		||||
func (h *ChatRoleHandler) Get(c *gin.Context) {
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Update 更新某个聊天角色信息,这里只允许更改名称以及启用和禁用角色操作
 | 
			
		||||
func (h *ChatRoleHandler) Update(c *gin.Context) {
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (h *ChatRoleHandler) List(c *gin.Context) {
 | 
			
		||||
	var items []model.ChatRole
 | 
			
		||||
	var roles = make([]vo.ChatRole, 0)
 | 
			
		||||
	res := h.db.Where("enable", true).Order("sort ASC").Find(&items)
 | 
			
		||||
	res := h.db.Debug().Order("sort ASC").Find(&items)
 | 
			
		||||
	if res.Error != nil {
 | 
			
		||||
		resp.ERROR(c, "No data found")
 | 
			
		||||
		return
 | 
			
		||||
@@ -77,3 +74,41 @@ func (h *ChatRoleHandler) List(c *gin.Context) {
 | 
			
		||||
 | 
			
		||||
	resp.SUCCESS(c, roles)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// SetSort 更新角色排序
 | 
			
		||||
func (h *ChatRoleHandler) SetSort(c *gin.Context) {
 | 
			
		||||
	var data struct {
 | 
			
		||||
		Id   uint `json:"id"`
 | 
			
		||||
		Sort int  `json:"sort"`
 | 
			
		||||
	}
 | 
			
		||||
	if err := c.ShouldBindJSON(&data); err != nil {
 | 
			
		||||
		resp.ERROR(c, types.InvalidArgs)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	if data.Id <= 0 {
 | 
			
		||||
		resp.HACKER(c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	res := h.db.Debug().Model(&model.ChatRole{}).Where("id = ?", data.Id).Update("sort", data.Sort)
 | 
			
		||||
	if res.Error != nil {
 | 
			
		||||
		resp.ERROR(c, "更新数据库失败!")
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	resp.SUCCESS(c)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (h *ChatRoleHandler) Remove(c *gin.Context) {
 | 
			
		||||
	id := h.GetInt(c, "id", 0)
 | 
			
		||||
	if id <= 0 {
 | 
			
		||||
		resp.ERROR(c, types.InvalidArgs)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	res := h.db.Where("id = ?", id).Delete(&model.ChatRole{})
 | 
			
		||||
	if res.Error != nil {
 | 
			
		||||
		resp.ERROR(c, "删除失败!")
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	resp.SUCCESS(c)
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -25,7 +25,7 @@ func NewChatRoleHandler(app *core.AppServer, db *gorm.DB) *ChatRoleHandler {
 | 
			
		||||
// List get user list
 | 
			
		||||
func (h *ChatRoleHandler) List(c *gin.Context) {
 | 
			
		||||
	var roles []model.ChatRole
 | 
			
		||||
	res := h.db.Find(&roles)
 | 
			
		||||
	res := h.db.Where("enable", true).Order("sort ASC").Find(&roles)
 | 
			
		||||
	if res.Error != nil {
 | 
			
		||||
		resp.ERROR(c, "No roles found,"+res.Error.Error())
 | 
			
		||||
		return
 | 
			
		||||
 
 | 
			
		||||
@@ -89,7 +89,7 @@ func main() {
 | 
			
		||||
 | 
			
		||||
		// 注册路由
 | 
			
		||||
		fx.Invoke(func(s *core.AppServer, h *handler.ChatRoleHandler) {
 | 
			
		||||
			group := s.Engine.Group("/api/chat/role/")
 | 
			
		||||
			group := s.Engine.Group("/api/role/")
 | 
			
		||||
			group.GET("list", h.List)
 | 
			
		||||
		}),
 | 
			
		||||
		fx.Invoke(func(s *core.AppServer, h *handler.UserHandler) {
 | 
			
		||||
@@ -141,8 +141,9 @@ func main() {
 | 
			
		||||
		fx.Invoke(func(s *core.AppServer, h *admin.ChatRoleHandler) {
 | 
			
		||||
			group := s.Engine.Group("/api/admin/role/")
 | 
			
		||||
			group.GET("list", h.List)
 | 
			
		||||
			group.POST("add", h.Add)
 | 
			
		||||
			group.POST("update", h.Update)
 | 
			
		||||
			group.POST("sort", h.SetSort)
 | 
			
		||||
			group.GET("remove", h.Remove)
 | 
			
		||||
		}),
 | 
			
		||||
 | 
			
		||||
		fx.Invoke(func(s *core.AppServer, db *gorm.DB) {
 | 
			
		||||
 
 | 
			
		||||
@@ -23,6 +23,10 @@ func ERROR(c *gin.Context, messages ...string) {
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func HACKER(c *gin.Context) {
 | 
			
		||||
	c.JSON(http.StatusOK, types.BizVo{Code: types.Failed, Message: "Hacker attempt!!!"})
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func NotAuth(c *gin.Context) {
 | 
			
		||||
	c.JSON(http.StatusOK, types.BizVo{Code: types.NotAuthorized, Message: "Not Authorized"})
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -109,13 +109,18 @@ func CopyObject(src interface{}, dst interface{}) error {
 | 
			
		||||
				if err == nil {
 | 
			
		||||
					value.Set(reflect.ValueOf(v2).Elem())
 | 
			
		||||
				}
 | 
			
		||||
				// string to map, struct, slice
 | 
			
		||||
				// map, struct, slice to string
 | 
			
		||||
			} else if (field.Type.Kind() == reflect.Struct ||
 | 
			
		||||
				field.Type.Kind() == reflect.Map ||
 | 
			
		||||
				field.Type.Kind() == reflect.Slice) && value.Type().Kind() == reflect.String {
 | 
			
		||||
				ba, err := json.Marshal(v.Interface())
 | 
			
		||||
				if err == nil {
 | 
			
		||||
					value.Set(reflect.ValueOf(string(ba)))
 | 
			
		||||
					val := string(ba)
 | 
			
		||||
					if strings.Contains(val, "{") {
 | 
			
		||||
						value.Set(reflect.ValueOf(string(ba)))
 | 
			
		||||
					} else {
 | 
			
		||||
						value.Set(reflect.ValueOf(""))
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
			} else { // 简单数据类型的强制类型转换
 | 
			
		||||
				switch value.Kind() {
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										11
									
								
								web/package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										11
									
								
								web/package-lock.json
									
									
									
										generated
									
									
									
								
							@@ -18,6 +18,7 @@
 | 
			
		||||
        "json-bigint": "^1.0.0",
 | 
			
		||||
        "markdown-it": "^13.0.1",
 | 
			
		||||
        "qs": "^6.11.1",
 | 
			
		||||
        "sortablejs": "^1.15.0",
 | 
			
		||||
        "vue": "^3.2.13",
 | 
			
		||||
        "vue-router": "^4.0.15"
 | 
			
		||||
      },
 | 
			
		||||
@@ -9595,6 +9596,11 @@
 | 
			
		||||
        "websocket-driver": "^0.7.4"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/sortablejs": {
 | 
			
		||||
      "version": "1.15.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/sortablejs/-/sortablejs-1.15.0.tgz",
 | 
			
		||||
      "integrity": "sha512-bv9qgVMjUMf89wAvM6AxVvS/4MX3sPeN0+agqShejLU5z5GX4C75ow1O2e5k4L6XItUyAK3gH6AxSbXrOM5e8w=="
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/source-map-js": {
 | 
			
		||||
      "version": "1.0.2",
 | 
			
		||||
      "resolved": "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.0.2.tgz",
 | 
			
		||||
@@ -18759,6 +18765,11 @@
 | 
			
		||||
        "websocket-driver": "^0.7.4"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "sortablejs": {
 | 
			
		||||
      "version": "1.15.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/sortablejs/-/sortablejs-1.15.0.tgz",
 | 
			
		||||
      "integrity": "sha512-bv9qgVMjUMf89wAvM6AxVvS/4MX3sPeN0+agqShejLU5z5GX4C75ow1O2e5k4L6XItUyAK3gH6AxSbXrOM5e8w=="
 | 
			
		||||
    },
 | 
			
		||||
    "source-map-js": {
 | 
			
		||||
      "version": "1.0.2",
 | 
			
		||||
      "resolved": "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.0.2.tgz",
 | 
			
		||||
 
 | 
			
		||||
@@ -18,6 +18,7 @@
 | 
			
		||||
    "json-bigint": "^1.0.0",
 | 
			
		||||
    "markdown-it": "^13.0.1",
 | 
			
		||||
    "qs": "^6.11.1",
 | 
			
		||||
    "sortablejs": "^1.15.0",
 | 
			
		||||
    "vue": "^3.2.13",
 | 
			
		||||
    "vue-router": "^4.0.15"
 | 
			
		||||
  },
 | 
			
		||||
 
 | 
			
		||||
@@ -245,7 +245,7 @@ if (!user.value) {
 | 
			
		||||
    resizeElement();
 | 
			
		||||
    checkSession().then(() => {
 | 
			
		||||
      // 加载角色列表
 | 
			
		||||
      httpGet(`/api/chat/role/list?user_id=${user.value.id}`).then((res) => {
 | 
			
		||||
      httpGet(`/api/role/list?user_id=${user.value.id}`).then((res) => {
 | 
			
		||||
        roles.value = res.data;
 | 
			
		||||
        roleId.value = roles.value[0]['id'];
 | 
			
		||||
        // 获取会话列表
 | 
			
		||||
 
 | 
			
		||||
@@ -1,13 +1,13 @@
 | 
			
		||||
<template>
 | 
			
		||||
  <div class="role-list">
 | 
			
		||||
    <!--    <el-row class="opt-box">-->
 | 
			
		||||
    <!--      <el-button type="primary" @click="showDialog = true">-->
 | 
			
		||||
    <!--        <el-icon>-->
 | 
			
		||||
    <!--          <Plus/>-->
 | 
			
		||||
    <!--        </el-icon>-->
 | 
			
		||||
    <!--        新增角色-->
 | 
			
		||||
    <!--      </el-button>-->
 | 
			
		||||
    <!--    </el-row>-->
 | 
			
		||||
    <el-row class="opt-box">
 | 
			
		||||
      <el-button type="primary" @click="addRole">
 | 
			
		||||
        <el-icon>
 | 
			
		||||
          <Plus/>
 | 
			
		||||
        </el-icon>
 | 
			
		||||
        新增角色
 | 
			
		||||
      </el-button>
 | 
			
		||||
    </el-row>
 | 
			
		||||
 | 
			
		||||
    <el-row>
 | 
			
		||||
      <el-table :data="tableData" :border="parentBorder" style="width: 100%">
 | 
			
		||||
@@ -23,7 +23,8 @@
 | 
			
		||||
        </el-table-column>
 | 
			
		||||
        <el-table-column label="角色名称" prop="name"/>
 | 
			
		||||
        <el-table-column label="角色标识" prop="key"/>
 | 
			
		||||
        <el-table-column label="启用状态" width="180">
 | 
			
		||||
        <el-table-column label="排序" prop="sort"/>
 | 
			
		||||
        <el-table-column label="启用状态">
 | 
			
		||||
          <template #default="scope">
 | 
			
		||||
            <el-tag v-if="scope.row.enable" type="success">启用</el-tag>
 | 
			
		||||
            <el-tag type="danger" v-else>禁用</el-tag>
 | 
			
		||||
@@ -35,9 +36,14 @@
 | 
			
		||||
          </template>
 | 
			
		||||
        </el-table-column>
 | 
			
		||||
        <el-table-column label="打招呼信息" prop="hello_msg"/>
 | 
			
		||||
        <el-table-column label="操作" width="80" align="right">
 | 
			
		||||
        <el-table-column label="操作" width="180" align="right">
 | 
			
		||||
          <template #default="scope">
 | 
			
		||||
            <el-button size="small" type="primary" @click="rowEdit(scope.$index, scope.row)">编辑</el-button>
 | 
			
		||||
            <el-popconfirm title="确定要删除当前角色吗?" @confirm="removeRole(scope.row)">
 | 
			
		||||
              <template #reference>
 | 
			
		||||
                <el-button size="small" type="danger">删除</el-button>
 | 
			
		||||
              </template>
 | 
			
		||||
            </el-popconfirm>
 | 
			
		||||
          </template>
 | 
			
		||||
        </el-table-column>
 | 
			
		||||
      </el-table>
 | 
			
		||||
@@ -48,38 +54,38 @@
 | 
			
		||||
        title="编辑角色"
 | 
			
		||||
        width="50%"
 | 
			
		||||
    >
 | 
			
		||||
      <el-form :model="form1" label-width="120px" ref="formRef" :rules="rules">
 | 
			
		||||
      <el-form :model="role" label-width="120px" ref="formRef" label-position="left" :rules="rules">
 | 
			
		||||
        <el-form-item label="角色名称:" prop="name">
 | 
			
		||||
          <el-input
 | 
			
		||||
              v-model="form1.name"
 | 
			
		||||
              v-model="role.name"
 | 
			
		||||
              autocomplete="off"
 | 
			
		||||
          />
 | 
			
		||||
        </el-form-item>
 | 
			
		||||
 | 
			
		||||
        <el-form-item label="角色标志:" prop="key">
 | 
			
		||||
          <el-input
 | 
			
		||||
              v-model="form1.key"
 | 
			
		||||
              v-model="role.key"
 | 
			
		||||
              autocomplete="off"
 | 
			
		||||
          />
 | 
			
		||||
        </el-form-item>
 | 
			
		||||
 | 
			
		||||
        <el-form-item label="角色图标:" prop="icon">
 | 
			
		||||
          <el-input
 | 
			
		||||
              v-model="form1.icon"
 | 
			
		||||
              v-model="role.icon"
 | 
			
		||||
              autocomplete="off"
 | 
			
		||||
          />
 | 
			
		||||
        </el-form-item>
 | 
			
		||||
 | 
			
		||||
        <el-form-item label="打招呼信息:" prop="hello_msg">
 | 
			
		||||
          <el-input
 | 
			
		||||
              v-model="form1.hello_msg"
 | 
			
		||||
              v-model="role.hello_msg"
 | 
			
		||||
              autocomplete="off"
 | 
			
		||||
          />
 | 
			
		||||
        </el-form-item>
 | 
			
		||||
 | 
			
		||||
        <el-form-item label="上下文信息:" prop="context">
 | 
			
		||||
          <template #default>
 | 
			
		||||
            <el-table :data="form1.context" :border="childBorder" size="small">
 | 
			
		||||
            <el-table :data="role.context" :border="childBorder" size="small">
 | 
			
		||||
              <el-table-column label="对话角色" width="120">
 | 
			
		||||
                <template #default="scope">
 | 
			
		||||
                  <el-input
 | 
			
		||||
@@ -118,7 +124,10 @@
 | 
			
		||||
        </el-form-item>
 | 
			
		||||
 | 
			
		||||
        <el-form-item label="启用状态">
 | 
			
		||||
          <el-switch v-model="form1.enable"/>
 | 
			
		||||
          <el-switch v-model="role.enable"/>
 | 
			
		||||
        </el-form-item>
 | 
			
		||||
        <el-form-item label="排序" prop="sort">
 | 
			
		||||
          <el-input v-model.number="role.sort"/>
 | 
			
		||||
        </el-form-item>
 | 
			
		||||
      </el-form>
 | 
			
		||||
 | 
			
		||||
@@ -135,38 +144,68 @@
 | 
			
		||||
<script setup>
 | 
			
		||||
 | 
			
		||||
import {Plus, RemoveFilled} from "@element-plus/icons-vue";
 | 
			
		||||
import {reactive, ref} from "vue";
 | 
			
		||||
import {httpPost} from "@/utils/http";
 | 
			
		||||
import {onMounted, reactive, ref} from "vue";
 | 
			
		||||
import {httpGet, httpPost} from "@/utils/http";
 | 
			
		||||
import {ElMessage} from "element-plus";
 | 
			
		||||
import {copyObj} from "@/utils/libs";
 | 
			
		||||
import {copyObj, removeArrayItem} from "@/utils/libs";
 | 
			
		||||
import {Sortable} from "sortablejs"
 | 
			
		||||
 | 
			
		||||
const showDialog = ref(false)
 | 
			
		||||
const parentBorder = ref(false)
 | 
			
		||||
const childBorder = ref(true)
 | 
			
		||||
const tableData = ref([])
 | 
			
		||||
const form1 = ref({context: []})
 | 
			
		||||
// const form2 = ref({context: []})
 | 
			
		||||
const role = ref({context: []})
 | 
			
		||||
const formRef = ref(null)
 | 
			
		||||
 | 
			
		||||
const rules = reactive({
 | 
			
		||||
  name: [{required: true, message: '请输入用户名', trigger: 'change',}],
 | 
			
		||||
  key: [{required: true, message: '请输入角色标识', trigger: 'change',}],
 | 
			
		||||
  icon: [{required: true, message: '请输入角色图标', trigger: 'change',}],
 | 
			
		||||
  name: [{required: true, message: '请输入用户名', trigger: 'blur',}],
 | 
			
		||||
  key: [{required: true, message: '请输入角色标识', trigger: 'blur',}],
 | 
			
		||||
  icon: [{required: true, message: '请输入角色图标', trigger: 'blur',}],
 | 
			
		||||
  sort: [
 | 
			
		||||
    {required: true, message: '请输入排序数字', trigger: 'blur'},
 | 
			
		||||
    {type: 'number', message: '请输入有效数字'},
 | 
			
		||||
  ],
 | 
			
		||||
  hello_msg: [{required: true, message: '请输入打招呼信息', trigger: 'change',}]
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
// 获取角色列表
 | 
			
		||||
httpPost('/api/admin/chat-roles/list').then((res) => {
 | 
			
		||||
httpGet('/api/admin/role/list').then((res) => {
 | 
			
		||||
  tableData.value = res.data
 | 
			
		||||
}).catch(() => {
 | 
			
		||||
  ElMessage.error("获取聊天角色失败");
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
onMounted(() => {
 | 
			
		||||
  const drawBodyWrapper = document.querySelector('.el-table__body tbody')
 | 
			
		||||
  Sortable.create(drawBodyWrapper, {
 | 
			
		||||
    onEnd({newIndex, oldIndex}) {
 | 
			
		||||
      // console.log(oldIndex, newIndex);
 | 
			
		||||
      if (oldIndex === newIndex) {
 | 
			
		||||
        return
 | 
			
		||||
      }
 | 
			
		||||
      const role = tableData.value[oldIndex]
 | 
			
		||||
      if (newIndex > oldIndex) {
 | 
			
		||||
        role.sort = tableData.value[newIndex].sort + 1
 | 
			
		||||
      } else {
 | 
			
		||||
        role.sort = tableData.value[newIndex].sort - 1
 | 
			
		||||
      }
 | 
			
		||||
      httpPost('/api/admin/role/sort', {"id": role.id, "sort": role.sort}).catch(() => {
 | 
			
		||||
        ElMessage.error("移动失败!")
 | 
			
		||||
      })
 | 
			
		||||
    }
 | 
			
		||||
  })
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
// 编辑
 | 
			
		||||
const curIndex = ref(0)
 | 
			
		||||
const rowEdit = function (index, row) {
 | 
			
		||||
  curIndex.value = index
 | 
			
		||||
  form1.value = copyObj(row)
 | 
			
		||||
  role.value = copyObj(row)
 | 
			
		||||
  showDialog.value = true
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const addRole = function () {
 | 
			
		||||
  role.value = {context: []}
 | 
			
		||||
  showDialog.value = true
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -174,25 +213,41 @@ const doUpdate = function () {
 | 
			
		||||
  formRef.value.validate((valid) => {
 | 
			
		||||
    if (valid) {
 | 
			
		||||
      showDialog.value = false
 | 
			
		||||
      httpPost('/api/admin/chat-roles/set', form1.value).then(() => {
 | 
			
		||||
        ElMessage.success('更新角色成功')
 | 
			
		||||
      httpPost('/api/admin/role/update', role.value).then((res) => {
 | 
			
		||||
        ElMessage.success('操作成功')
 | 
			
		||||
        // 更新当前数据行
 | 
			
		||||
        tableData.value[curIndex.value] = form1.value
 | 
			
		||||
        if (role.value.id) {
 | 
			
		||||
          tableData.value[curIndex.value] = role.value
 | 
			
		||||
        } else {
 | 
			
		||||
          tableData.value.push(res.data)
 | 
			
		||||
        }
 | 
			
		||||
      }).catch((e) => {
 | 
			
		||||
        ElMessage.error('更新角色失败,' + e.message)
 | 
			
		||||
        ElMessage.error('操作失败,' + e.message)
 | 
			
		||||
      })
 | 
			
		||||
    } else {
 | 
			
		||||
      return false
 | 
			
		||||
    }
 | 
			
		||||
  })
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const removeRole = function (row) {
 | 
			
		||||
  httpGet('/api/admin/role/remove?id=' + row.id).then(() => {
 | 
			
		||||
    ElMessage.success("删除成功!")
 | 
			
		||||
    tableData.value = removeArrayItem(tableData.value, row, (v1, v2) => {
 | 
			
		||||
      return v1.id === v2.id
 | 
			
		||||
    })
 | 
			
		||||
  }).catch(() => {
 | 
			
		||||
    ElMessage.error("删除失败!")
 | 
			
		||||
  })
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const addContext = function () {
 | 
			
		||||
  form1.value.context.push({role: '', content: ''})
 | 
			
		||||
  if (!role.value.context) {
 | 
			
		||||
    role.value.context = []
 | 
			
		||||
  }
 | 
			
		||||
  role.value.context.push({role: '', content: ''})
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const removeContext = function (index) {
 | 
			
		||||
  form1.value.context.splice(index, 1);
 | 
			
		||||
  role.value.context.splice(index, 1);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
</script>
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user