Browse Source

系统用户套餐时间显示

master
La123123 1 month ago
parent
commit
4a08297432
  1. 98
      im-admin-ui/src/views/im/group/index.vue
  2. 7
      im-admin-ui/src/views/system/user/index.vue
  3. 5
      im-admin/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysUserVo.java
  4. 8
      im-admin/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/IImAgentAdminService.java
  5. 11
      im-admin/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/ImAgentAdminServiceImpl.java
  6. 13
      im-admin/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java

98
im-admin-ui/src/views/im/group/index.vue

@ -1,7 +1,6 @@
<template>
<div class="p-2">
<transition :enter-active-class="proxy?.animate.searchAnimate.enter"
:leave-active-class="proxy?.animate.searchAnimate.leave">
<transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
<div v-show="showSearch" class="mb-[10px]">
<el-card shadow="hover">
<el-form ref="queryFormRef" :model="queryParams" :inline="true">
@ -12,15 +11,20 @@
<im-user-select v-model="queryParams.ownerId"></im-user-select>
</el-form-item>
<el-form-item label="创建时间" prop="createdTime">
<el-date-picker v-model="dateRange" value-format="YYYY-MM-DD HH:mm:ss" type="daterange"
range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期"
:default-time="[new Date(2000, 1, 1, 0, 0, 0), new Date(2000, 1, 1, 23, 59, 59)]"></el-date-picker>
<el-date-picker
v-model="dateRange"
value-format="YYYY-MM-DD HH:mm:ss"
type="daterange"
range-separator="-"
start-placeholder="开始日期"
end-placeholder="结束日期"
:default-time="[new Date(2000, 1, 1, 0, 0, 0), new Date(2000, 1, 1, 23, 59, 59)]"
></el-date-picker>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
<el-button type="warning" plain icon="Download" @click="handleExport"
v-hasPermi="['im:group:export']">导出</el-button>
<el-button type="warning" plain icon="Download" @click="handleExport" v-hasPermi="['im:group:export']">导出</el-button>
</el-form-item>
</el-form>
</el-card>
@ -32,8 +36,7 @@
<el-table-column label="群名" align="center" prop="name" />
<el-table-column label="群头像" align="center" prop="headImage" width="100">
<template #default="scope">
<image-preview v-if="scope.row.headImageThumb" :src="scope.row.headImageThumb"
:full-src="scope.row.headImage" :width="40" :height="40" />
<image-preview v-if="scope.row.headImageThumb" :src="scope.row.headImageThumb" :full-src="scope.row.headImage" :width="40" :height="40" />
</template>
</el-table-column>
<el-table-column label="群主" align="center" prop="ownerUserName" />
@ -55,19 +58,15 @@
</el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template #default="scope">
<el-button link type="primary" v-hasPermi="['im:group:query']"
@click="handleDetail(scope.row)">详情</el-button>
<el-button v-if="scope.row.isBanned" link type="danger" v-hasPermi="['im:group:ban']"
@click="handleUnban(scope.row)">解封</el-button>
<el-button v-else link type="danger" v-hasPermi="['im:group:ban']"
@click="handleBan(scope.row)">封禁</el-button>
<el-button link type="primary" v-hasPermi="['im:group:query']" @click="handleDetail(scope.row)">详情</el-button>
<el-button v-if="scope.row.isBanned" link type="danger" v-hasPermi="['im:group:ban']" @click="handleUnban(scope.row)">解封</el-button>
<el-button v-else link type="danger" v-hasPermi="['im:group:ban']" @click="handleBan(scope.row)">封禁</el-button>
<el-button link type="primary" @click="handleShowMember(scope.row.id)">查看成员</el-button>
</template>
</el-table-column>
</el-table>
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum"
v-model:limit="queryParams.pageSize" @pagination="getList" />
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
</el-card>
<!-- 添加或修改群对话框 -->
<el-dialog :title="dialog.title" v-model="dialog.visible" width="800px" append-to-body>
@ -82,8 +81,7 @@
<el-input v-model="form.ownerUserName" />
</el-form-item>
<el-form-item label="创建时间" prop="createdTime">
<el-date-picker clearable v-model="form.createdTime" type="datetime" value-format="YYYY-MM-DD HH:mm:ss">
</el-date-picker>
<el-date-picker clearable v-model="form.createdTime" type="datetime" value-format="YYYY-MM-DD HH:mm:ss"> </el-date-picker>
</el-form-item>
<el-form-item label="是否已解散" prop="dissolve">
<dict-tag :options="im_bool" :value="form.dissolve" />
@ -104,8 +102,7 @@
</div>
</template>
</el-dialog>
<el-drawer v-model="memberVisible" title="成员列表" :size="900" :close-on-press-escape="false"
:close-on-click-modal="true">
<el-drawer v-model="memberVisible" title="成员列表" :size="900" :close-on-press-escape="false" :close-on-click-modal="true">
<member ref="memberRef"></member>
</el-drawer>
</div>
@ -149,7 +146,7 @@ const initFormData: GroupForm = {
createdTime: undefined,
isBanned: undefined,
reason: undefined
}
};
const data = reactive<PageData<GroupForm, GroupQuery>>({
form: { ...initFormData },
queryParams: {
@ -164,12 +161,9 @@ const data = reactive<PageData<GroupForm, GroupQuery>>({
createdTime: undefined,
isBanned: undefined,
reason: undefined,
params: {
}
params: {}
},
rules: {
}
rules: {}
});
const { queryParams, form } = toRefs(data);
@ -182,45 +176,43 @@ const getList = async () => {
groupList.value = res.rows;
total.value = res.total;
loading.value = false;
}
};
/** 表单重置 */
const reset = () => {
form.value = { ...initFormData };
groupFormRef.value?.resetFields();
}
};
/** 搜索按钮操作 */
const handleQuery = () => {
queryParams.value.pageNum = 1;
getList();
}
};
/** 重置按钮操作 */
const resetQuery = () => {
dateRange.value = ['', ''];
queryFormRef.value?.resetFields();
handleQuery();
}
};
/** 多选框选中数据 */
const handleSelectionChange = (selection: GroupVO[]) => {
ids.value = selection.map(item => item.id);
ids.value = selection.map((item) => item.id);
single.value = selection.length != 1;
multiple.value = !selection.length;
}
};
/** 详情按钮操作 */
const handleDetail = async (row?: GroupVO) => {
reset();
const _id = row?.id || ids.value[0]
const _id = row?.id || ids.value[0];
const res = await getGroup(_id);
Object.assign(form.value, res.data);
dialog.visible = true;
dialog.title = "用户信息";
}
dialog.title = '用户信息';
};
const handleBan = (group: any) => {
ElMessageBox.prompt('封禁原因:', '确定对该群组进行封禁?', {
@ -229,43 +221,47 @@ const handleBan = (group: any) => {
confirmButtonText: '确定',
cancelButtonText: '取消'
}).then(({ value }) => {
const data = { id: group.id, reason: value }
const data = { id: group.id, reason: value };
ban(data).then(() => {
group.isBanned = true;
ElMessage.success(`群组'${group.name}'已被封禁`);
})
})
}
});
});
};
const handleUnban = (group: any) => {
ElMessageBox.confirm('确定解除该群组的封禁状态?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消'
}).then(() => {
const data = { id: group.id }
const data = { id: group.id };
unban(data).then(() => {
group.isBanned = false;
ElMessage.success(`群组'${group.name}'解封成功`);
})
})
}
});
});
};
const handleShowMember = (id: number) => {
memberVisible.value = true;
nextTick(() => memberRef.value.init(id));
}
};
/** 提交按钮 */
const submitForm = () => {
dialog.visible = false;
}
};
/** 导出按钮操作 */
const handleExport = () => {
proxy?.download('im/group/export', {
proxy?.download(
'im/group/export',
{
...queryParams.value
}, `group_${new Date().getTime()}.xlsx`)
}
},
`group_${new Date().getTime()}.xlsx`
);
};
onMounted(() => {
getList();

7
im-admin-ui/src/views/system/user/index.vue

@ -96,7 +96,12 @@
<el-table-column v-if="columns[0].visible" key="userId" label="用户编号" align="center" prop="userId" />
<el-table-column v-if="columns[1].visible" key="userName" label="用户名称" align="center" prop="userName" :show-overflow-tooltip="true" />
<el-table-column v-if="columns[2].visible" key="nickName" label="用户昵称" align="center" prop="nickName" :show-overflow-tooltip="true" />
<el-table-column v-if="columns[3].visible" key="deptName" label="部门" align="center" prop="deptName" :show-overflow-tooltip="true" />
<el-table-column key="packageExpireTime" label="套餐过期时间" align="center" prop="packageExpireTime" :show-overflow-tooltip="true">
<template #default="scope">
<span>{{ parseTime(scope.row.packageExpireTime, '{y}-{m}-{d}') }}</span>
</template>
</el-table-column>
<!-- <el-table-column v-if="columns[3].visible" key="deptName" label="部门" align="center" prop="deptName" :show-overflow-tooltip="true" /> -->
<el-table-column v-if="columns[4].visible" key="phonenumber" label="手机号码" align="center" prop="phonenumber" width="120" />
<el-table-column v-if="columns[5].visible" key="status" label="状态" align="center">
<template #default="scope">

5
im-admin/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysUserVo.java

@ -138,4 +138,9 @@ public class SysUserVo implements Serializable {
*/
private Long roleId;
/**
* 套餐到期时间
*/
private Date packageExpireTime;
}

8
im-admin/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/IImAgentAdminService.java

@ -6,6 +6,7 @@ import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import java.util.Collection;
import java.util.Date;
import java.util.List;
/**
@ -98,6 +99,11 @@ public interface IImAgentAdminService {
*/
void updateAgentName(Long sysId,String agentName);
/**
* 获取套餐到期时间
* @param sysId 系统用户id
* @return 套餐到期时间
*/
Date getPackageExpireTime(Long sysId);
}

11
im-admin/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/ImAgentAdminServiceImpl.java

@ -207,5 +207,16 @@ public class ImAgentAdminServiceImpl implements IImAgentAdminService {
baseMapper.update(null, luw);
}
@Override
public Date getPackageExpireTime(Long sysId) {
LambdaQueryWrapper<ImAgentAdmin> lqw = Wrappers.lambdaQuery();
lqw.eq(ImAgentAdmin::getSysId, sysId);
ImAgentAdmin agent = baseMapper.selectOne(lqw);
if(agent == null || agent.getPackageExpireTime() == null){
return null;
}
return agent.getPackageExpireTime();
}
}

13
im-admin/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java

@ -33,6 +33,7 @@ import org.dromara.system.domain.vo.SysRoleVo;
import org.dromara.system.domain.vo.SysUserExportVo;
import org.dromara.system.domain.vo.SysUserVo;
import org.dromara.system.mapper.*;
import org.dromara.system.service.IImAgentAdminService;
import org.dromara.system.service.ISysUserService;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
@ -58,10 +59,20 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
private final SysUserRoleMapper userRoleMapper;
private final SysUserPostMapper userPostMapper;
private final IImAgentAdminService IImAgentAdminService;
@Override
public TableDataInfo<SysUserVo> selectPageUserList(SysUserBo user, PageQuery pageQuery) {
Page<SysUserVo> page = baseMapper.selectPageUserList(pageQuery.build(), this.buildQueryWrapper(user));
return TableDataInfo.build(page);
TableDataInfo<SysUserVo> result = TableDataInfo.build(page);
List<SysUserVo> data = result.getRows();
if(ObjectUtil.isNotEmpty(data)) {
for (SysUserVo sysUserVo : data) {
sysUserVo.setPackageExpireTime(IImAgentAdminService.getPackageExpireTime(sysUserVo.getUserId()));
}
}
return result;
}
/**

Loading…
Cancel
Save