Merge pull request 'dev' (#12) from dev into main

Reviewed-on: lxh/go-wxhelper#12
This commit is contained in:
李寻欢 2024-01-12 22:54:50 +08:00
commit be15d42d93
7 changed files with 77 additions and 36 deletions

View File

@ -85,6 +85,29 @@ func ChangeEnableWelcomeStatus(ctx *gin.Context) {
ctx.String(http.StatusOK, "操作成功") ctx.String(http.StatusOK, "操作成功")
} }
// ChangeEnableCommandStatus
// @description: 修改是否开启指令
// @param ctx
func ChangeEnableCommandStatus(ctx *gin.Context) {
var p changeStatusParam
if err := ctx.ShouldBindJSON(&p); err != nil {
ctx.String(http.StatusBadRequest, "参数错误")
return
}
log.Printf("待修改的群Id%s", p.WxId)
err := client.MySQL.Model(&entity.Friend{}).
Where("wxid = ?", p.WxId).
Update("`enable_command`", gorm.Expr(" !`enable_command`")).Error
if err != nil {
log.Printf("修改指令启用状态失败:%s", err)
ctx.String(http.StatusInternalServerError, "操作失败: %s", err)
return
}
ctx.String(http.StatusOK, "操作成功")
}
// ChangeSkipGroupRankStatus // ChangeSkipGroupRankStatus
// @description: 修改是否跳过水群排行榜 // @description: 修改是否跳过水群排行榜
// @param ctx // @param ctx

View File

@ -31,6 +31,7 @@ type GroupUser struct {
HeadImage string `json:"headImage"` // 头像 HeadImage string `json:"headImage"` // 头像
Nickname string `json:"nickname"` // 昵称 Nickname string `json:"nickname"` // 昵称
IsMember bool `json:"isMember" gorm:"type:tinyint(1) default 0 not null"` // 是否群成员 IsMember bool `json:"isMember" gorm:"type:tinyint(1) default 0 not null"` // 是否群成员
IsAdmin bool `json:"isAdmin" gorm:"type:tinyint(1) default 0 not null"` // 是否群主
JoinTime time.Time `json:"joinTime"` // 加入时间 JoinTime time.Time `json:"joinTime"` // 加入时间
LeaveTime *time.Time `json:"leaveTime"` // 离开时间 LeaveTime *time.Time `json:"leaveTime"` // 离开时间
SkipChatRank bool `json:"skipChatRank" gorm:"type:tinyint(1) default 0 not null"` // 是否跳过聊天排行 SkipChatRank bool `json:"skipChatRank" gorm:"type:tinyint(1) default 0 not null"` // 是否跳过聊天排行

View File

@ -23,6 +23,7 @@ func Init(g *gin.Engine) {
api := g.Group("/api") api := g.Group("/api")
api.PUT("/ai/status", app.ChangeEnableAiStatus) // 修改是否开启AI状态 api.PUT("/ai/status", app.ChangeEnableAiStatus) // 修改是否开启AI状态
api.PUT("/welcome/status", app.ChangeEnableWelcomeStatus) // 修改是否开启迎新状态 api.PUT("/welcome/status", app.ChangeEnableWelcomeStatus) // 修改是否开启迎新状态
api.PUT("/command/status", app.ChangeEnableCommandStatus) // 修改是否开启指令状态
api.PUT("/grouprank/status", app.ChangeEnableGroupRankStatus) // 修改是否开启水群排行榜状态 api.PUT("/grouprank/status", app.ChangeEnableGroupRankStatus) // 修改是否开启水群排行榜状态
api.PUT("/grouprank/skip", app.ChangeSkipGroupRankStatus) // 修改是否跳过水群排行榜状态 api.PUT("/grouprank/skip", app.ChangeSkipGroupRankStatus) // 修改是否跳过水群排行榜状态
api.GET("/group/users", app.GetGroupUsers) // 获取群成员列表 api.GET("/group/users", app.GetGroupUsers) // 获取群成员列表

View File

@ -155,6 +155,7 @@ func syncGroupUsers(tx *gorm.DB, gid string) {
Nickname: cp.Nickname, Nickname: cp.Nickname,
Wxid: cp.Wxid, Wxid: cp.Wxid,
IsMember: true, IsMember: true,
IsAdmin: wxid == baseResp.Data.Admin,
JoinTime: time.Now().Local(), JoinTime: time.Now().Local(),
}).Error }).Error
if err != nil { if err != nil {
@ -168,6 +169,7 @@ func syncGroupUsers(tx *gorm.DB, gid string) {
"head_image": cp.HeadImage, "head_image": cp.HeadImage,
"nickname": cp.Nickname, "nickname": cp.Nickname,
"is_member": true, "is_member": true,
"is_admin": wxid == baseResp.Data.Admin,
"leave_time": nil, "leave_time": nil,
} }
err = tx.Model(&entity.GroupUser{}).Where("group_id = ?", gid).Where("wxid = ?", wxid).Updates(pm).Error err = tx.Model(&entity.GroupUser{}).Where("group_id = ?", gid).Where("wxid = ?", wxid).Updates(pm).Error

View File

@ -37,6 +37,7 @@
<th>最后活跃时间</th> <th>最后活跃时间</th>
<th>是否在通讯录</th> <th>是否在通讯录</th>
<th>是否启用AI</th> <th>是否启用AI</th>
<th>是否启用指令</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
@ -67,6 +68,14 @@
<label class="swap swap-flip {{ checkSwap .EnableAi }}"> <label class="swap swap-flip {{ checkSwap .EnableAi }}">
<input type="checkbox" onclick="changeAiEnableStatus({{.Wxid}})"/> <input type="checkbox" onclick="changeAiEnableStatus({{.Wxid}})"/>
<div class="swap-on">✔️已启用</div>
<div class="swap-off">❌已禁用</div>
</label>
</td>
<td>
<label class="swap swap-flip {{ checkSwap .EnableCommand }}">
<input type="checkbox" onclick="changeCommandEnableStatus({{.Wxid}})"/>
<div class="swap-on">✔️已启用</div> <div class="swap-on">✔️已启用</div>
<div class="swap-off">❌已禁用</div> <div class="swap-off">❌已禁用</div>
</label> </label>
@ -91,6 +100,7 @@
<th>是否启用AI</th> <th>是否启用AI</th>
<th>是否启用水群排行榜</th> <th>是否启用水群排行榜</th>
<th>是否启用迎新</th> <th>是否启用迎新</th>
<th>是否启用指令</th>
<th>操作</th> <th>操作</th>
</tr> </tr>
</thead> </thead>
@ -143,6 +153,14 @@
<div class="swap-off">❌已禁用</div> <div class="swap-off">❌已禁用</div>
</label> </label>
</td> </td>
<td>
<label class="swap swap-flip {{ checkSwap .EnableCommand }}">
<input type="checkbox" onclick="changeCommandEnableStatus({{.Wxid}})"/>
<div class="swap-on">✔️已启用</div>
<div class="swap-off">❌已禁用</div>
</label>
</td>
<td> <td>
<button class="btn btn-link" onclick="getGroupUsers({{.Wxid}}, {{.Nickname}})">查看群成员</button> <button class="btn btn-link" onclick="getGroupUsers({{.Wxid}}, {{.Nickname}})">查看群成员</button>
</td> </td>
@ -183,6 +201,7 @@
<th>微信Id</th> <th>微信Id</th>
<th>昵称</th> <th>昵称</th>
<th>是否群成员</th> <th>是否群成员</th>
<th>是否群主</th>
<th>加群时间</th> <th>加群时间</th>
<th>最后活跃时间</th> <th>最后活跃时间</th>
<th>退群时间</th> <th>退群时间</th>

View File

@ -51,6 +51,22 @@ function changeWelcomeEnableStatus(wxId) {
}) })
} }
// 修改指令权限启用状态
function changeCommandEnableStatus(wxId) {
axios({
method: 'put',
url: '/api/command/status',
data: {
wxId: wxId
}
}).then(function (response) {
console.log(`返回结果: ${JSON.stringify(response)}`);
}).catch(function (error) {
console.log(`错误信息: ${error}`);
alert("修改失败")
})
}
// 修改群成员是否参与排行榜状态 // 修改群成员是否参与排行榜状态
function changeUserGroupRankSkipStatus(groupId, userId) { function changeUserGroupRankSkipStatus(groupId, userId) {
console.log("修改水群排行榜开启状态: ", groupId, userId) console.log("修改水群排行榜开启状态: ", groupId, userId)
@ -96,43 +112,20 @@ function getGroupUsers(groupId, groupName) {
// 渲染群成员列表 // 渲染群成员列表
const groupUsers = response.data const groupUsers = response.data
// 循环渲染数据 // 循环渲染数据
for (let i = 0; i < groupUsers.length; i++) { groupUsers.forEach((groupUser, i) => {
const groupUser = groupUsers[i] const { wxid, nickname, isMember, isAdmin, joinTime, lastActiveTime, leaveTime, skipChatRank } = groupUser;
let row = tbody.insertRow(i); // 插入新行 let row = tbody.insertRow(i);
// Insert data into cells
// 微信Id row.insertCell(0).innerHTML = wxid;
let wxId = row.insertCell(0); row.insertCell(1).innerHTML = nickname;
wxId.innerHTML = groupUser.wxid; row.insertCell(2).innerHTML = `<div class="badge badge-${isMember ? 'info' : 'error'} gap-2">${isMember ? '是' : '否'}</div>`;
row.insertCell(3).innerHTML = `<div class="badge badge-${isAdmin ? 'info' : 'error'} gap-2">${isAdmin ? '是' : '否'}</div>`;
// 昵称 row.insertCell(4).innerHTML = joinTime;
let nickname = row.insertCell(1); row.insertCell(5).innerHTML = lastActiveTime;
nickname.innerHTML = groupUser.nickname; row.insertCell(6).innerHTML = leaveTime;
row.insertCell(7).innerHTML = `<input type="checkbox" class="toggle toggle-error" ${skipChatRank ? 'checked' : ''} onclick="changeUserGroupRankSkipStatus('${groupId}', '${wxid}')" />`;
// 是否群成员 });
let isMember = row.insertCell(2);
if (groupUser.isMember) {
isMember.innerHTML = '<div class="badge badge-info gap-2">是</div>';
} else {
isMember.innerHTML = '<div class="badge badge-error gap-2">否</div>';
}
// 加群时间
let joinTime = row.insertCell(3);
joinTime.innerHTML = groupUser.joinTime;
// 最后活跃时间
let lastActiveTime = row.insertCell(4);
lastActiveTime.innerHTML = groupUser.lastActiveTime;
// 退群时间
let leaveTime = row.insertCell(5);
leaveTime.innerHTML = groupUser.leaveTime;
// 是否跳过水群排行榜
let skipChatRank = row.insertCell(6);
skipChatRank.innerHTML = `<input type="checkbox" class="toggle toggle-error" ${groupUser.skipChatRank ? 'checked' : ''} onclick="changeUserGroupRankSkipStatus(\'${groupId}\', \'${groupUser.wxid}\')" />`;
}
}).catch(function (error) { }).catch(function (error) {
console.log(`错误信息: ${error}`); console.log(`错误信息: ${error}`);
}).finally(function () { }).finally(function () {

View File

@ -15,6 +15,7 @@ type FriendItem struct {
EnableAi bool // 是否使用AI EnableAi bool // 是否使用AI
EnableChatRank bool // 是否使用聊天排行 EnableChatRank bool // 是否使用聊天排行
EnableWelcome bool // 是否使用迎新 EnableWelcome bool // 是否使用迎新
EnableCommand bool // 是否启用指令
IsOk bool // 是否还在通讯库(群聊是要还在群里也算) IsOk bool // 是否还在通讯库(群聊是要还在群里也算)
LastActiveTime types.DateTime // 最后活跃时间 LastActiveTime types.DateTime // 最后活跃时间
} }
@ -27,6 +28,7 @@ type GroupUserItem struct {
HeadImage string `json:"headImage"` // 头像 HeadImage string `json:"headImage"` // 头像
Nickname string `json:"nickname"` // 昵称 Nickname string `json:"nickname"` // 昵称
IsMember bool `json:"isMember" ` // 是否群成员 IsMember bool `json:"isMember" ` // 是否群成员
IsAdmin bool `json:"isAdmin"` // 是否群主
JoinTime types.DateTime `json:"joinTime"` // 加入时间 JoinTime types.DateTime `json:"joinTime"` // 加入时间
LastActiveTime types.DateTime `json:"lastActiveTime"` // 最后活跃时间 LastActiveTime types.DateTime `json:"lastActiveTime"` // 最后活跃时间
LeaveTime types.DateTime `json:"leaveTime"` // 离开时间 LeaveTime types.DateTime `json:"leaveTime"` // 离开时间