show sql error message

This commit is contained in:
RockYang 2024-08-05 16:14:44 +08:00
parent 3f0252b498
commit 72b1515b68
22 changed files with 115 additions and 130 deletions

View File

@ -3,6 +3,8 @@
## v4.1.2 ## v4.1.2
* Bug修复修复思维导图页面获取模型失败的问题 * Bug修复修复思维导图页面获取模型失败的问题
* 功能优化优化MJ,SD,DALL-E 任务列表页面,显示失败任务的错误信息,删除失败任务可以恢复扣减算力 * 功能优化优化MJ,SD,DALL-E 任务列表页面,显示失败任务的错误信息,删除失败任务可以恢复扣减算力
* Bug修复修复后台拖动排序组件 Bug
* 功能优化:更新数据库失败时候显示具体的的报错信息
## v4.1.1 ## v4.1.1
* Bug修复修复 GPT 模型 function call 调用后没有输出的问题 * Bug修复修复 GPT 模型 function call 调用后没有输出的问题

View File

@ -8,6 +8,7 @@ package admin
// * +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // * +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
import ( import (
"fmt"
"geekai/core" "geekai/core"
"geekai/core/types" "geekai/core/types"
"geekai/handler" "geekai/handler"
@ -53,17 +54,16 @@ func (h *ApiKeyHandler) Save(c *gin.Context) {
apiKey.Enabled = data.Enabled apiKey.Enabled = data.Enabled
apiKey.ProxyURL = data.ProxyURL apiKey.ProxyURL = data.ProxyURL
apiKey.Name = data.Name apiKey.Name = data.Name
res := h.DB.Save(&apiKey) err := h.DB.Save(&apiKey).Error
if res.Error != nil { if err != nil {
logger.Error("error with update database", res.Error) resp.ERROR(c, err.Error())
resp.ERROR(c, "更新数据库失败!")
return return
} }
var keyVo vo.ApiKey var keyVo vo.ApiKey
err := utils.CopyObject(apiKey, &keyVo) err = utils.CopyObject(apiKey, &keyVo)
if err != nil { if err != nil {
resp.ERROR(c, "数据拷贝失败!") resp.ERROR(c, fmt.Sprintf("拷贝数据失败:%v", err))
return return
} }
keyVo.Id = apiKey.Id keyVo.Id = apiKey.Id
@ -119,10 +119,9 @@ func (h *ApiKeyHandler) Set(c *gin.Context) {
return return
} }
res := h.DB.Model(&model.ApiKey{}).Where("id = ?", data.Id).Update(data.Filed, data.Value) err := h.DB.Model(&model.ApiKey{}).Where("id = ?", data.Id).Update(data.Filed, data.Value).Error
if res.Error != nil { if err != nil {
logger.Error("error with update database", res.Error) resp.ERROR(c, err.Error())
resp.ERROR(c, "更新数据库失败!")
return return
} }
resp.SUCCESS(c) resp.SUCCESS(c)
@ -135,10 +134,9 @@ func (h *ApiKeyHandler) Remove(c *gin.Context) {
return return
} }
res := h.DB.Where("id", id).Delete(&model.ApiKey{}) err := h.DB.Where("id", id).Delete(&model.ApiKey{}).Error
if res.Error != nil { if err != nil {
logger.Error("error with update database", res.Error) resp.ERROR(c, err.Error())
resp.ERROR(c, "更新数据库失败!")
return return
} }
resp.SUCCESS(c) resp.SUCCESS(c)

View File

@ -259,10 +259,9 @@ func (h *ChatHandler) RemoveChat(c *gin.Context) {
// RemoveMessage 删除聊天记录 // RemoveMessage 删除聊天记录
func (h *ChatHandler) RemoveMessage(c *gin.Context) { func (h *ChatHandler) RemoveMessage(c *gin.Context) {
id := h.GetInt(c, "id", 0) id := h.GetInt(c, "id", 0)
tx := h.DB.Unscoped().Where("id = ?", id).Delete(&model.ChatMessage{}) err := h.DB.Unscoped().Where("id = ?", id).Delete(&model.ChatMessage{}).Error
if tx.Error != nil { if err != nil {
logger.Error("error with update database", tx.Error) resp.ERROR(c, err.Error())
resp.ERROR(c, "更新数据库失败!")
return return
} }
resp.SUCCESS(c) resp.SUCCESS(c)

View File

@ -147,10 +147,9 @@ func (h *ChatModelHandler) Set(c *gin.Context) {
return return
} }
res := h.DB.Model(&model.ChatModel{}).Where("id = ?", data.Id).Update(data.Filed, data.Value) err := h.DB.Model(&model.ChatModel{}).Where("id = ?", data.Id).Update(data.Filed, data.Value).Error
if res.Error != nil { if err != nil {
logger.Error("error with update database", res.Error) resp.ERROR(c, err.Error())
resp.ERROR(c, "更新数据库失败!")
return return
} }
resp.SUCCESS(c) resp.SUCCESS(c)
@ -168,10 +167,9 @@ func (h *ChatModelHandler) Sort(c *gin.Context) {
} }
for index, id := range data.Ids { for index, id := range data.Ids {
res := h.DB.Model(&model.ChatModel{}).Where("id = ?", id).Update("sort_num", data.Sorts[index]) err := h.DB.Model(&model.ChatModel{}).Where("id = ?", id).Update("sort_num", data.Sorts[index]).Error
if res.Error != nil { if err != nil {
logger.Error("error with update database", res.Error) resp.ERROR(c, err.Error())
resp.ERROR(c, "更新数据库失败!")
return return
} }
} }
@ -186,10 +184,9 @@ func (h *ChatModelHandler) Remove(c *gin.Context) {
return return
} }
res := h.DB.Where("id = ?", id).Delete(&model.ChatModel{}) err := h.DB.Where("id = ?", id).Delete(&model.ChatModel{}).Error
if res.Error != nil { if err != nil {
logger.Error("error with update database", res.Error) resp.ERROR(c, err.Error())
resp.ERROR(c, "更新数据库失败!")
return return
} }
resp.SUCCESS(c) resp.SUCCESS(c)

View File

@ -46,10 +46,9 @@ func (h *ChatRoleHandler) Save(c *gin.Context) {
if data.CreatedAt > 0 { if data.CreatedAt > 0 {
role.CreatedAt = time.Unix(data.CreatedAt, 0) role.CreatedAt = time.Unix(data.CreatedAt, 0)
} }
res := h.DB.Save(&role) err = h.DB.Save(&role).Error
if res.Error != nil { if err != nil {
logger.Error("error with update database", res.Error) resp.ERROR(c, err.Error())
resp.ERROR(c, "更新数据库失败!")
return return
} }
// 填充 ID 数据 // 填充 ID 数据
@ -114,10 +113,9 @@ func (h *ChatRoleHandler) Sort(c *gin.Context) {
} }
for index, id := range data.Ids { for index, id := range data.Ids {
res := h.DB.Model(&model.ChatRole{}).Where("id = ?", id).Update("sort_num", data.Sorts[index]) err := h.DB.Model(&model.ChatRole{}).Where("id = ?", id).Update("sort_num", data.Sorts[index]).Error
if res.Error != nil { if err != nil {
logger.Error("error with update database", res.Error) resp.ERROR(c, err.Error())
resp.ERROR(c, "更新数据库失败!")
return return
} }
} }
@ -137,10 +135,9 @@ func (h *ChatRoleHandler) Set(c *gin.Context) {
return return
} }
res := h.DB.Model(&model.ChatRole{}).Where("id = ?", data.Id).Update(data.Filed, data.Value) err := h.DB.Model(&model.ChatRole{}).Where("id = ?", data.Id).Update(data.Filed, data.Value).Error
if res.Error != nil { if err != nil {
logger.Error("error with update database", res.Error) resp.ERROR(c, err.Error())
resp.ERROR(c, "更新数据库失败!")
return return
} }
resp.SUCCESS(c) resp.SUCCESS(c)

View File

@ -69,10 +69,9 @@ func (h *FunctionHandler) Set(c *gin.Context) {
return return
} }
res := h.DB.Model(&model.Function{}).Where("id = ?", data.Id).Update(data.Filed, data.Value) err := h.DB.Model(&model.Function{}).Where("id = ?", data.Id).Update(data.Filed, data.Value).Error
if res.Error != nil { if err != nil {
logger.Error("error with update database", res.Error) resp.ERROR(c, err.Error())
resp.ERROR(c, "更新数据库失败!")
return return
} }
resp.SUCCESS(c) resp.SUCCESS(c)
@ -102,10 +101,9 @@ func (h *FunctionHandler) Remove(c *gin.Context) {
id := h.GetInt(c, "id", 0) id := h.GetInt(c, "id", 0)
if id > 0 { if id > 0 {
res := h.DB.Delete(&model.Function{Id: uint(id)}) err := h.DB.Delete(&model.Function{Id: uint(id)}).Error
if res.Error != nil { if err != nil {
logger.Error("error with update database", res.Error) resp.ERROR(c, err.Error())
resp.ERROR(c, "更新数据库失败!")
return return
} }
} }

View File

@ -41,17 +41,16 @@ func (h *MenuHandler) Save(c *gin.Context) {
return return
} }
res := h.DB.Save(&model.Menu{ err := h.DB.Save(&model.Menu{
Id: data.Id, Id: data.Id,
Name: data.Name, Name: data.Name,
Icon: data.Icon, Icon: data.Icon,
URL: data.URL, URL: data.URL,
SortNum: data.SortNum, SortNum: data.SortNum,
Enabled: data.Enabled, Enabled: data.Enabled,
}) }).Error
if res.Error != nil { if err != nil {
logger.Error("error with update database", res.Error) resp.ERROR(c, err.Error())
resp.ERROR(c, "更新数据库失败!")
return return
} }
resp.SUCCESS(c) resp.SUCCESS(c)
@ -85,10 +84,9 @@ func (h *MenuHandler) Enable(c *gin.Context) {
return return
} }
res := h.DB.Model(&model.Menu{}).Where("id", data.Id).UpdateColumn("enabled", data.Enabled) err := h.DB.Model(&model.Menu{}).Where("id", data.Id).UpdateColumn("enabled", data.Enabled).Error
if res.Error != nil { if err != nil {
logger.Error("error with update database", res.Error) resp.ERROR(c, err.Error())
resp.ERROR(c, "更新数据库失败!")
return return
} }
resp.SUCCESS(c) resp.SUCCESS(c)
@ -106,10 +104,9 @@ func (h *MenuHandler) Sort(c *gin.Context) {
} }
for index, id := range data.Ids { for index, id := range data.Ids {
res := h.DB.Model(&model.Menu{}).Where("id", id).Update("sort_num", data.Sorts[index]) err := h.DB.Model(&model.Menu{}).Where("id", id).Update("sort_num", data.Sorts[index]).Error
if res.Error != nil { if err != nil {
logger.Error("error with update database", res.Error) resp.ERROR(c, err.Error())
resp.ERROR(c, "更新数据库失败!")
return return
} }
} }
@ -121,10 +118,9 @@ func (h *MenuHandler) Remove(c *gin.Context) {
id := h.GetInt(c, "id", 0) id := h.GetInt(c, "id", 0)
if id > 0 { if id > 0 {
res := h.DB.Where("id", id).Delete(&model.Menu{}) err := h.DB.Where("id", id).Delete(&model.Menu{}).Error
if res.Error != nil { if err != nil {
logger.Error("error with update database", res.Error) resp.ERROR(c, err.Error())
resp.ERROR(c, "更新数据库失败!")
return return
} }
} }

View File

@ -92,10 +92,9 @@ func (h *OrderHandler) Remove(c *gin.Context) {
return return
} }
res = h.DB.Unscoped().Where("id = ?", id).Delete(&model.Order{}) err := h.DB.Unscoped().Where("id = ?", id).Delete(&model.Order{}).Error
if res.Error != nil { if res.Error != nil {
logger.Error("error with update database", res.Error) resp.ERROR(c, err.Error())
resp.ERROR(c, "更新数据库失败!")
return return
} }
} }

View File

@ -55,17 +55,16 @@ func (h *ProductHandler) Save(c *gin.Context) {
if item.Id > 0 { if item.Id > 0 {
item.CreatedAt = time.Unix(data.CreatedAt, 0) item.CreatedAt = time.Unix(data.CreatedAt, 0)
} }
res := h.DB.Save(&item) err := h.DB.Save(&item).Error
if res.Error != nil { if err != nil {
logger.Error("error with update database", res.Error) resp.ERROR(c, err.Error())
resp.ERROR(c, "更新数据库失败!")
return return
} }
var itemVo vo.Product var itemVo vo.Product
err := utils.CopyObject(item, &itemVo) err = utils.CopyObject(item, &itemVo)
if err != nil { if err != nil {
resp.ERROR(c, "数据拷贝失败") resp.ERROR(c, "数据拷贝失败: "+err.Error())
return return
} }
itemVo.Id = item.Id itemVo.Id = item.Id
@ -106,10 +105,9 @@ func (h *ProductHandler) Enable(c *gin.Context) {
return return
} }
res := h.DB.Model(&model.Product{}).Where("id", data.Id).UpdateColumn("enabled", data.Enabled) err := h.DB.Model(&model.Product{}).Where("id", data.Id).UpdateColumn("enabled", data.Enabled).Error
if res.Error != nil { if err != nil {
logger.Error("error with update database", res.Error) resp.ERROR(c, err.Error())
resp.ERROR(c, "更新数据库失败!")
return return
} }
resp.SUCCESS(c) resp.SUCCESS(c)
@ -127,10 +125,9 @@ func (h *ProductHandler) Sort(c *gin.Context) {
} }
for index, id := range data.Ids { for index, id := range data.Ids {
res := h.DB.Model(&model.Product{}).Where("id", id).Update("sort_num", data.Sorts[index]) err := h.DB.Model(&model.Product{}).Where("id", id).Update("sort_num", data.Sorts[index]).Error
if res.Error != nil { if err != nil {
logger.Error("error with update database", res.Error) resp.ERROR(c, err.Error())
resp.ERROR(c, "更新数据库失败!")
return return
} }
} }
@ -142,10 +139,9 @@ func (h *ProductHandler) Remove(c *gin.Context) {
id := h.GetInt(c, "id", 0) id := h.GetInt(c, "id", 0)
if id > 0 { if id > 0 {
res := h.DB.Where("id", id).Delete(&model.Product{}) err := h.DB.Where("id", id).Delete(&model.Product{}).Error
if res.Error != nil { if err != nil {
logger.Error("error with update database", res.Error) resp.ERROR(c, err.Error())
resp.ERROR(c, "更新数据库失败!")
return return
} }
} }

View File

@ -70,10 +70,9 @@ func (h *RewardHandler) Remove(c *gin.Context) {
return return
} }
if data.Id > 0 { if data.Id > 0 {
res := h.DB.Where("id = ?", data.Id).Delete(&model.Reward{}) err := h.DB.Where("id = ?", data.Id).Delete(&model.Reward{}).Error
if res.Error != nil { if err != nil {
logger.Error("error with update database", res.Error) resp.ERROR(c, err.Error())
resp.ERROR(c, "更新数据库失败!")
return return
} }
} }

View File

@ -168,8 +168,7 @@ func (h *UserHandler) Save(c *gin.Context) {
} }
if res.Error != nil { if res.Error != nil {
logger.Error("error with update database", res.Error) resp.ERROR(c, res.Error.Error())
resp.ERROR(c, "更新数据库失败")
return return
} }

View File

@ -81,10 +81,9 @@ func (h *ChatRoleHandler) UpdateRole(c *gin.Context) {
return return
} }
res := h.DB.Model(&model.User{}).Where("id = ?", user.Id).UpdateColumn("chat_roles_json", utils.JsonEncode(data.Keys)) err = h.DB.Model(&model.User{}).Where("id = ?", user.Id).UpdateColumn("chat_roles_json", utils.JsonEncode(data.Keys)).Error
if res.Error != nil { if err != nil {
logger.Error("error with update database", res.Error) resp.ERROR(c, err.Error())
resp.ERROR(c, "更新数据库失败!")
return return
} }

View File

@ -276,10 +276,9 @@ func (h *DallJobHandler) Publish(c *gin.Context) {
userId := h.GetLoginUserId(c) userId := h.GetLoginUserId(c)
action := h.GetBool(c, "action") // 发布动作true => 发布false => 取消分享 action := h.GetBool(c, "action") // 发布动作true => 发布false => 取消分享
res := h.DB.Model(&model.DallJob{Id: uint(id), UserId: userId}).UpdateColumn("publish", action) err := h.DB.Model(&model.DallJob{Id: uint(id), UserId: userId}).UpdateColumn("publish", action).Error
if res.Error != nil { if err != nil {
logger.Error("error with update database", res.Error) resp.ERROR(c, err.Error())
resp.ERROR(c, "更新数据库失败")
return return
} }

View File

@ -513,10 +513,9 @@ func (h *MidJourneyHandler) Publish(c *gin.Context) {
id := h.GetInt(c, "id", 0) id := h.GetInt(c, "id", 0)
userId := h.GetInt(c, "user_id", 0) userId := h.GetInt(c, "user_id", 0)
action := h.GetBool(c, "action") // 发布动作true => 发布false => 取消分享 action := h.GetBool(c, "action") // 发布动作true => 发布false => 取消分享
res := h.DB.Model(&model.MidJourneyJob{Id: uint(id), UserId: userId}).UpdateColumn("publish", action) err := h.DB.Model(&model.MidJourneyJob{Id: uint(id), UserId: userId}).UpdateColumn("publish", action).Error
if res.Error != nil { if err != nil {
logger.Error("error with update database", res.Error) resp.ERROR(c, err.Error())
resp.ERROR(c, "更新数据库失败")
return return
} }

View File

@ -70,11 +70,10 @@ func (h *RewardHandler) Verify(c *gin.Context) {
exchange := vo.RewardExchange{} exchange := vo.RewardExchange{}
power := math.Ceil(item.Amount / h.App.SysConfig.PowerPrice) power := math.Ceil(item.Amount / h.App.SysConfig.PowerPrice)
exchange.Power = int(power) exchange.Power = int(power)
res = tx.Model(&user).UpdateColumn("power", gorm.Expr("power + ?", exchange.Power)) err = tx.Model(&user).UpdateColumn("power", gorm.Expr("power + ?", exchange.Power)).Error
if res.Error != nil { if err != nil {
tx.Rollback() tx.Rollback()
logger.Error("添加应用失败:", res.Error) resp.ERROR(c, err.Error())
resp.ERROR(c, "更新数据库失败!")
return return
} }
@ -82,11 +81,10 @@ func (h *RewardHandler) Verify(c *gin.Context) {
item.Status = true item.Status = true
item.UserId = user.Id item.UserId = user.Id
item.Exchange = utils.JsonEncode(exchange) item.Exchange = utils.JsonEncode(exchange)
res = tx.Updates(&item) err = tx.Updates(&item).Error
if res.Error != nil { if err != nil {
tx.Rollback() tx.Rollback()
logger.Error("添加应用失败:", res.Error) resp.ERROR(c, err.Error())
resp.ERROR(c, "更新数据库失败!")
return return
} }

View File

@ -342,10 +342,9 @@ func (h *SdJobHandler) Publish(c *gin.Context) {
userId := h.GetLoginUserId(c) userId := h.GetLoginUserId(c)
action := h.GetBool(c, "action") // 发布动作true => 发布false => 取消分享 action := h.GetBool(c, "action") // 发布动作true => 发布false => 取消分享
res := h.DB.Model(&model.SdJob{Id: uint(id), UserId: int(userId)}).UpdateColumn("publish", action) err := h.DB.Model(&model.SdJob{Id: uint(id), UserId: int(userId)}).UpdateColumn("publish", action).Error
if res.Error != nil { if err != nil {
logger.Error("error with update database", res.Error) resp.ERROR(c, err.Error())
resp.ERROR(c, "更新数据库失败")
return return
} }

View File

@ -481,10 +481,9 @@ func (h *UserHandler) UpdatePass(c *gin.Context) {
} }
newPass := utils.GenPassword(data.Password, user.Salt) newPass := utils.GenPassword(data.Password, user.Salt)
res := h.DB.Model(&user).UpdateColumn("password", newPass) err = h.DB.Model(&user).UpdateColumn("password", newPass).Error
if res.Error != nil { if err != nil {
logger.Error("error with update database", res.Error) resp.ERROR(c, err.Error())
resp.ERROR(c, "更新数据库失败")
return return
} }
@ -562,10 +561,9 @@ func (h *UserHandler) BindUsername(c *gin.Context) {
return return
} }
res = h.DB.Model(&user).UpdateColumn("username", data.Username) err = h.DB.Model(&user).UpdateColumn("username", data.Username).Error
if res.Error != nil { if err != nil {
logger.Error(res.Error) resp.ERROR(c, err.Error())
resp.ERROR(c, "更新数据库失败")
return return
} }

View File

@ -64,6 +64,7 @@ func OpenAIRequest(db *gorm.DB, prompt string, modelName string) (string, error)
client.SetProxyURL(apiKey.ApiURL) client.SetProxyURL(apiKey.ApiURL)
} }
apiURL := fmt.Sprintf("%s/v1/chat/completions", apiKey.ApiURL) apiURL := fmt.Sprintf("%s/v1/chat/completions", apiKey.ApiURL)
logger.Debugf("Sending %s request, API KEY:%s, PROXY: %s, Model: %s", apiKey.ApiURL, apiURL, apiKey.ProxyURL, modelName)
r, err := client.R().SetHeader("Content-Type", "application/json"). r, err := client.R().SetHeader("Content-Type", "application/json").
SetHeader("Authorization", "Bearer "+apiKey.Value). SetHeader("Authorization", "Bearer "+apiKey.Value).
SetBody(types.ApiRequest{ SetBody(types.ApiRequest{
@ -76,6 +77,11 @@ func OpenAIRequest(db *gorm.DB, prompt string, modelName string) (string, error)
if err != nil { if err != nil {
return "", fmt.Errorf("请求 OpenAI API失败%v", err) return "", fmt.Errorf("请求 OpenAI API失败%v", err)
} }
if r.IsErrorState() {
return "", fmt.Errorf("请求 OpenAI API失败%v", r.Status)
}
body, _ := io.ReadAll(r.Body) body, _ := io.ReadAll(r.Body)
err = json.Unmarshal(body, &response) err = json.Unmarshal(body, &response)
if err != nil { if err != nil {

View File

@ -0,0 +1 @@
ALTER TABLE `chatgpt_suno_jobs` MODIFY `id` INT AUTO_INCREMENT;

View File

@ -193,7 +193,7 @@ const fetchData = () => {
const add = function () { const add = function () {
showDialog.value = true showDialog.value = true
title.value = "新增 API KEY" title.value = "新增 API KEY"
item.value = {enabled: true} item.value = {enabled: true,api_url: "https://api.chat-plus.net"}
} }
const edit = function (row) { const edit = function (row) {

View File

@ -10,7 +10,12 @@
<el-row> <el-row>
<el-table :data="items" :row-key="row => row.id" table-layout="auto"> <el-table :data="items" :row-key="row => row.id" table-layout="auto">
<el-table-column prop="name" label="模型名称"/> <el-table-column type="selection" width="38"></el-table-column>
<el-table-column prop="name" label="模型名称">
<template #default="scope">
<span class="sort" :data-id="scope.row.id">{{ scope.row.name }}</span>
</template>
</el-table-column>
<el-table-column prop="value" label="模型值"> <el-table-column prop="value" label="模型值">
<template #default="scope"> <template #default="scope">
<span>{{ scope.row.value }}</span> <span>{{ scope.row.value }}</span>
@ -174,6 +179,7 @@ import {dateFormat, removeArrayItem, substr} from "@/utils/libs";
import {DocumentCopy, InfoFilled, Plus,Search} from "@element-plus/icons-vue"; import {DocumentCopy, InfoFilled, Plus,Search} from "@element-plus/icons-vue";
import {Sortable} from "sortablejs"; import {Sortable} from "sortablejs";
import ClipboardJS from "clipboard"; import ClipboardJS from "clipboard";
import Default from "md-editor-v3";
// //
const items = ref([]) const items = ref([])

View File

@ -10,7 +10,7 @@
<el-row> <el-row>
<el-table :data="users.items" border class="table" :row-key="row => row.id" <el-table :data="users.items" border class="table" :row-key="row => row.id"
@selection-change="handleSelectionChange" table-layout="auto"> @selection-change="handleSelectionChange" table-layout="auto">
<el-table-column type="selection" width="38"/> <el-table-column type="selection" width="38"></el-table-column>
<el-table-column prop="mobile" label="账号"> <el-table-column prop="mobile" label="账号">
<template #default="scope"> <template #default="scope">
<span>{{ scope.row.username }}</span> <span>{{ scope.row.username }}</span>
@ -308,7 +308,7 @@ const saveUser = function () {
} }
const handleSelectionChange = function (rows) { const handleSelectionChange = function (rows) {
console.log(rows) // console.log(rows)
} }
const resetPass = (row) => { const resetPass = (row) => {