commit
This commit is contained in:
@@ -14,6 +14,8 @@ RoleConstant {
|
||||
MEMBER("会员角色"),
|
||||
SYSADMIN("系统管理员"),
|
||||
|
||||
UNION_COMMITTEE_MEMBER("工代会委员"),
|
||||
|
||||
SCHOOL_UNION_ADMIN("校工会管理员"),
|
||||
SCHOOL_UNION_CHAIRMAN("校工会主席"),
|
||||
SCHOOL_UNION_VICE_CHAIRMAN("校工会副主席"),
|
||||
|
||||
@@ -0,0 +1,128 @@
|
||||
package com.budwk.app.sys.controller;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import com.budwk.app.base.constant.RoleConstant;
|
||||
import com.budwk.app.base.page.Pagination;
|
||||
import com.budwk.app.base.param.PageForm;
|
||||
import com.budwk.app.base.result.Result;
|
||||
import com.budwk.app.sys.models.SysCommitteeMember;
|
||||
import com.budwk.app.sys.models.Sys_role;
|
||||
import com.budwk.app.sys.models.Sys_user;
|
||||
import com.budwk.app.sys.models.Sys_user_role;
|
||||
import com.budwk.app.sys.services.SysRoleService;
|
||||
import com.budwk.app.sys.services.SysUserService;
|
||||
import com.budwk.app.sys.views.View_user;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.nutz.aop.interceptor.ioc.TransAop;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.Sqls;
|
||||
import org.nutz.dao.sql.Sql;
|
||||
import org.nutz.dao.util.cri.SqlExpressionGroup;
|
||||
import org.nutz.ioc.aop.Aop;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.mvc.annotation.At;
|
||||
import org.nutz.mvc.annotation.Ok;
|
||||
|
||||
import javax.validation.Valid;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author zhf
|
||||
* @date 2025/11/18 17:26
|
||||
* @description 工会委员会
|
||||
*/
|
||||
@IocBean
|
||||
@At("/platform/sys/committeeMember")
|
||||
@Ok("json:full")
|
||||
@Api(tags = "工会委员管理")
|
||||
public class SysUnionCommitteeMemberController {
|
||||
|
||||
@Inject
|
||||
private SysUserService sysUserService;
|
||||
@Inject
|
||||
private SysRoleService sysRoleService;
|
||||
|
||||
@At
|
||||
@ApiOperation("分页查询")
|
||||
@SaCheckPermission("sys.manager.union.committeeMember")
|
||||
public Result pageData(PageForm pageForm, @Valid String sessionId) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT * FROM `sys_committee_member` $condition
|
||||
""");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
SqlExpressionGroup seg = new SqlExpressionGroup();
|
||||
seg.orLike(SysCommitteeMember::getLoginName, pageForm.getSearchKeyword(), true);
|
||||
seg.orLike(SysCommitteeMember::getUserName, pageForm.getSearchKeyword(), true);
|
||||
// cnd.and(seg);
|
||||
cnd.and(SysCommitteeMember::getSessionId, "=", sessionId);
|
||||
sql.setCondition(cnd);
|
||||
return Result.success(sysUserService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql));
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@ApiOperation("查询没有设置的人员")
|
||||
@SaCheckPermission("sys.manager.union.committeeMember")
|
||||
public Result listUserSelect(@Valid String keyWord, @Valid String sessionId) {
|
||||
Sql sql = Sqls.create("select id,loginname,username,unitName from vw_user $condition");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
SqlExpressionGroup seg = new SqlExpressionGroup();
|
||||
seg.orLike(View_user::getLoginname, keyWord, true);
|
||||
seg.orLike(View_user::getUsername, keyWord, true);
|
||||
cnd.and(seg);
|
||||
cnd.and("id", "not in", "(select userId from sys_committee_member where sessionId='%s')".formatted(sessionId));
|
||||
sql.setCondition(cnd);
|
||||
Pagination pagination = sysUserService.listPageMap(1, 10, sql);
|
||||
return Result.success(pagination.getList());
|
||||
}
|
||||
|
||||
@At
|
||||
@ApiOperation("添加委员")
|
||||
@SaCheckPermission("sys.manager.union.committeeMember")
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
public Result insert(SysCommitteeMember sysCommitteeMember) {
|
||||
Sys_user user = sysUserService.fetch(sysCommitteeMember.getUserId());
|
||||
sysCommitteeMember.setLoginName(user.getLoginname());
|
||||
sysCommitteeMember.setUserName(user.getUsername());
|
||||
sysUserService.insert(sysCommitteeMember);
|
||||
Sys_role sys_role = sysRoleService.fetch(Cnd.where(Sys_role::getCode, "=", RoleConstant.UNION_COMMITTEE_MEMBER.name()));
|
||||
Sys_user_role user_role = new Sys_user_role();
|
||||
user_role.setRoleId(sys_role.getId());
|
||||
user_role.setUserId(sysCommitteeMember.getUserId());
|
||||
sysRoleService.insert(user_role);
|
||||
sysRoleService.clearCache();
|
||||
sysUserService.clearCache();
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@ApiOperation("删除委员")
|
||||
@SaCheckPermission("sys.manager.union.committeeMember")
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
public Result delete(@Valid String id) {
|
||||
SysCommitteeMember committeeMember = sysUserService.dao().fetch(SysCommitteeMember.class, id);
|
||||
Sys_role sys_role = sysRoleService.fetch(Cnd.where(Sys_role::getCode, "=", RoleConstant.UNION_COMMITTEE_MEMBER.name()));
|
||||
sysUserService.dao().delete(SysCommitteeMember.class, id);
|
||||
sysRoleService.dao().clear(Sys_user_role.class, Cnd.where(Sys_user_role::getUserId, "=", committeeMember.getUserId())
|
||||
.and(Sys_user_role::getRoleId, "=", sys_role.getId()));
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
@At
|
||||
@ApiOperation("删除委员角色")
|
||||
@SaCheckPermission("sys.manager.union.committeeMember")
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
public Result deleteRole(@Valid String sessionId) {
|
||||
List<SysCommitteeMember> memberList = sysUserService.dao().query(SysCommitteeMember.class, Cnd.where(SysCommitteeMember::getSessionId, "=", sessionId));
|
||||
Sys_role sys_role = sysRoleService.fetch(Cnd.where(Sys_role::getCode, "=", RoleConstant.UNION_COMMITTEE_MEMBER.name()));
|
||||
List<String> userids = memberList.stream().map(SysCommitteeMember::getUserId).toList();
|
||||
sysRoleService.dao().clear(Sys_user_role.class, Cnd.where(Sys_user_role::getUserId, "in", userids)
|
||||
.and(Sys_user_role::getRoleId, "=", sys_role.getId()));
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,55 @@
|
||||
package com.budwk.app.sys.models;
|
||||
|
||||
import lombok.Data;
|
||||
import org.nutz.dao.entity.annotation.*;
|
||||
import org.nutz.dao.interceptor.annotation.PrevInsert;
|
||||
|
||||
/**
|
||||
* @author zhf
|
||||
* @date 2025/11/19 09:25
|
||||
* @description 工会委员
|
||||
*/
|
||||
@Data
|
||||
@Table("sys_committee_member")
|
||||
public class SysCommitteeMember {
|
||||
|
||||
@Name
|
||||
@ColDefine
|
||||
@Column
|
||||
@PrevInsert(uu32 = true)
|
||||
@Comment("id")
|
||||
private String id;
|
||||
|
||||
@ColDefine(type = ColType.VARCHAR, width = 100)
|
||||
@Comment("工号")
|
||||
@Column
|
||||
private String loginName;
|
||||
|
||||
@ColDefine(type = ColType.VARCHAR, width = 100)
|
||||
@Comment("姓名")
|
||||
@Column
|
||||
private String userName;
|
||||
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
@Comment("userId")
|
||||
@Column
|
||||
private String userId;
|
||||
|
||||
@ColDefine(type = ColType.VARCHAR, width = 100)
|
||||
@Comment("职务")
|
||||
@Column
|
||||
private String position;
|
||||
|
||||
@ColDefine(type = ColType.VARCHAR, width = 100)
|
||||
@Comment("届次名称")
|
||||
@Column
|
||||
private String sessionName;
|
||||
|
||||
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
@Comment("届次Id")
|
||||
@Column
|
||||
private String sessionId;
|
||||
|
||||
|
||||
}
|
||||
+3
-3
@@ -86,7 +86,7 @@ public class GhkhXghshController {
|
||||
if (Strings.isNotBlank(pageOrderName) && Strings.isNotBlank(pageOrderBy)) {
|
||||
cnd.orderBy(pageOrderName, pageOrderBy);
|
||||
}
|
||||
cnd.groupBy("re.union_id");
|
||||
cnd.groupBy("zb_id, re.union_id");
|
||||
sql.setCondition(cnd);
|
||||
return Result.success(khXghshService.listPage(pageNumber, pageSize, sql));
|
||||
}
|
||||
@@ -111,8 +111,8 @@ public class GhkhXghshController {
|
||||
bz.setZp(zp);
|
||||
}
|
||||
Kh_xghsh xghsh = khZbService.dao().fetch(Kh_xghsh.class, Cnd.where("bz_id", "=", bz.getId()).and("flatid", "=", union_id));
|
||||
bz.setSchools(xghsh.getSchools());
|
||||
bz.setAddition(xghsh.getAddition());
|
||||
bz.setSchools(xghsh != null ? xghsh.getSchools() : 0);
|
||||
bz.setAddition(xghsh != null ? xghsh.getAddition() : "");
|
||||
});
|
||||
});
|
||||
return Result.success(khzb);
|
||||
|
||||
@@ -0,0 +1,158 @@
|
||||
const branchUnionCommitteeMemberManage = {
|
||||
template: /*language=HTML*/ `
|
||||
<div>
|
||||
<el-card shadow="never" style="border: 1px solid var(--border-color-lighter); margin-top: 10px">
|
||||
<el-row :gutter="10" type="flex">
|
||||
<el-select placeholder="请选择届次" v-model="pageForm.sessionId" style="width: 15%"
|
||||
size="small">
|
||||
<el-option v-for="item in sessionOptions" :label="item.fullName" :value="item.id"
|
||||
:key="item.id"></el-option>
|
||||
</el-select>
|
||||
<el-input placeholder="请输入姓名或工号" clearable size="small"
|
||||
style="width: 300px;margin-left: 10px;"
|
||||
v-model="pageForm.searchKeyword"></el-input>
|
||||
|
||||
<el-button type="primary" class="ml5" size="small" icon="el-icon-search"
|
||||
@click="doSearch"></el-button>
|
||||
<el-button @click="openAdd" icon="ti-plus" type="primary" size="small" style="margin-left: auto">
|
||||
添加委员
|
||||
</el-button>
|
||||
<el-button @click="deleteRole" icon="el-icon-delete" type="danger" size="small" style="margin-left: 10px">
|
||||
删除当前届次委员角色
|
||||
</el-button>
|
||||
</el-row>
|
||||
</el-card>
|
||||
|
||||
<el-card shadow="never" style="border: 1px solid var(--border-color-lighter); margin-top: 10px">
|
||||
<el-table :data="tableData" border>
|
||||
<el-table-column label="序号" type="index" width="50" :index="indexMethod"></el-table-column>
|
||||
<el-table-column prop="loginName" label="工号"></el-table-column>
|
||||
<el-table-column prop="userName" label="姓名"></el-table-column>
|
||||
<!-- <el-table-column prop="mobile" label="联系方式"></el-table-column>-->
|
||||
<el-table-column prop="position" label="职务"></el-table-column>
|
||||
<el-table-column prop="sessionName" label="届次"></el-table-column>
|
||||
<el-table-column label="操作" width="100px">
|
||||
<template scope="scope">
|
||||
<el-button size="mini" type="danger" icon="el-icon-delete"
|
||||
@click="doDelete(scope.row.id)"></el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<el-row class="el-pagination-container mt20">
|
||||
<el-pagination
|
||||
@size-change="pageSizeChange"
|
||||
@current-change="pageNumberChange"
|
||||
:current-page="pageForm.pageNumber"
|
||||
:page-sizes="[10, 20, 30, 50]"
|
||||
:page-size="pageForm.pageSize"
|
||||
layout="total, sizes, prev, pager, next, jumper"
|
||||
:total="pageForm.totalCount"
|
||||
></el-pagination>
|
||||
</el-row>
|
||||
</el-card>
|
||||
|
||||
<el-dialog title="添加" :visible.sync="dialogFormVisible" width="600px" :close-on-click-modal="false">
|
||||
<el-form :model="formData" ref="formRef" size="small" label-width="80px" :rules="formRules">
|
||||
<el-form-item prop="sessionId" label="届次">
|
||||
<el-select placeholder="请选择届次" v-model="formData.sessionId" clearable style="width: 100%">
|
||||
<el-option v-for="item in sessionOptions" :label="item.fullName" :value="item.id"
|
||||
:key="item.id"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item prop="userId" label="人员">
|
||||
<user-select
|
||||
v-model="formData.userId"
|
||||
style="width: 100%"
|
||||
api="/platform/sys/committeeMember/listUserSelect"
|
||||
:api_params="{ sessionId: pageForm.sessionId }"
|
||||
:option_label_func="
|
||||
(item) => {
|
||||
return item.username + item.loginname + '(' + item.unitName + ')'
|
||||
}
|
||||
"
|
||||
></user-select>
|
||||
</el-form-item>
|
||||
<el-form-item prop="position" label="职务">
|
||||
<el-input v-model="formData.position" placeholder="请输入职务"></el-input>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button @click="dialogFormVisible = false">取 消</el-button>
|
||||
<el-button type="primary" @click="doSubmit">确 定</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</div>
|
||||
`,
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
dialogFormVisible: false,
|
||||
formData: {},
|
||||
formRules: {
|
||||
sessionId: [{required: true, message: "必填", trigger: ["change", "blur"]}],
|
||||
userId: [{required: true, message: "必填", trigger: ["change", "blur"]}],
|
||||
},
|
||||
sessionOptions: [],
|
||||
pageDataUrl:"/platform/sys/committeeMember/pageData"
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
listSession() {
|
||||
this.$axios.post("/platform/teacherCongress/common/listSession").then((res) => {
|
||||
if (res.code === 0) {
|
||||
this.sessionOptions = res.data
|
||||
if (this.sessionOptions.length > 0) {
|
||||
this.$set(this.pageForm, "sessionId", this.sessionOptions[0].id)
|
||||
this.pageData()
|
||||
}
|
||||
}
|
||||
})
|
||||
},
|
||||
openAdd() {
|
||||
this.dialogFormVisible = true
|
||||
this.$nextTick(() => {
|
||||
this.formData = {}
|
||||
})
|
||||
},
|
||||
doSubmit() {
|
||||
this.$refs.formRef.validate((valid) => {
|
||||
if (!valid) return
|
||||
const session = this.sessionOptions.find(item => item.id === this.formData.sessionId)
|
||||
this.formData.sessionName = session.fullName
|
||||
this.$axios.post("/platform/sys/committeeMember/insert", this.formData).then((res) => {
|
||||
this.dialogFormVisible = false
|
||||
this.$message.success(res.msg)
|
||||
this.pageData()
|
||||
})
|
||||
})
|
||||
},
|
||||
doDelete(id) {
|
||||
this.$confirm("您确定要删除吗?", "提示", {
|
||||
confirmButtonText: "确定",
|
||||
cancelButtonText: "取消",
|
||||
type: "info"
|
||||
}).then(() => {
|
||||
this.$axios.post("/platform/sys/committeeMember/delete", {id}).then((res) => {
|
||||
this.$message.success(res.msg)
|
||||
this.pageData()
|
||||
})
|
||||
})
|
||||
},
|
||||
deleteRole() {
|
||||
this.$confirm("您当前操作委员信息不会删除,只会删除当前届次委员的角色,确定要删除吗?", "提示", {
|
||||
confirmButtonText: "确定",
|
||||
cancelButtonText: "取消",
|
||||
type: "info"
|
||||
}).then(() => {
|
||||
this.$axios.post("/platform/sys/committeeMember/deleteRole", {sessionId:this.pageForm.sessionId}).then((res) => {
|
||||
this.$message.success(res.msg)
|
||||
this.pageData()
|
||||
})
|
||||
})
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.listSession()
|
||||
|
||||
}
|
||||
}
|
||||
@@ -51,8 +51,15 @@ layout("/layouts/platform.html"){
|
||||
</span>
|
||||
<sys-union-school-union-user-manage></sys-union-school-union-user-manage>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane name="unionCommitteeMemberManage" v-if="$auth.hasPermission('sys.manager.union.committeeMember')">
|
||||
<span slot="label">
|
||||
<i class="el-icon-office-building"></i>
|
||||
工会委员信息
|
||||
</span>
|
||||
<sys-union-committee-member-manage></sys-union-committee-member-manage>
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
|
||||
|
||||
<el-tabs v-model="branchUnionTabActive" @tab-click="branchTabChange" type="card" v-if="currentTreeNode && currentTreeNode.level===2">
|
||||
<el-tab-pane name="branchUnionUserManage">
|
||||
<span slot="label">
|
||||
@@ -89,7 +96,7 @@ layout("/layouts/platform.html"){
|
||||
</el-col>
|
||||
</el-row>
|
||||
</template>
|
||||
|
||||
|
||||
<template #edit>
|
||||
<sys-union-branch-union-cadre-audit ref="unionCadreAuditRef">
|
||||
</sys-union-branch-union-cadre-audit>
|
||||
@@ -104,6 +111,7 @@ layout("/layouts/platform.html"){
|
||||
<!--#include("branchUnionPartUnitManage.js"){}#-->
|
||||
<!--#include("branchUnionGroupManage.js"){}#-->
|
||||
<!--#include("branchUnionCadreAudit.js"){}#-->
|
||||
<!--#include("branchUnionCommitteeMemberManage.js"){}#-->
|
||||
|
||||
new Vue({
|
||||
el: "#app",
|
||||
@@ -113,7 +121,8 @@ layout("/layouts/platform.html"){
|
||||
"sys-union-branch-union-user-manage": branchUnionUserManage,
|
||||
"sys-union-branch-union-part-unit-manage": branchUnionPartUnitManage,
|
||||
"sys-union-branch-union-group-manage": branchUnionGroupManage,
|
||||
"sys-union-branch-union-cadre-audit": branchUnionCadreAudit
|
||||
"sys-union-branch-union-cadre-audit": branchUnionCadreAudit,
|
||||
"sys-union-committee-member-manage": branchUnionCommitteeMemberManage,
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
@@ -156,7 +165,7 @@ layout("/layouts/platform.html"){
|
||||
this.$refs[val.name + "Ref"].doSearch()
|
||||
})
|
||||
},
|
||||
|
||||
|
||||
// 基层干部审核初始化
|
||||
unionCadreInit() {
|
||||
this.$refs.guava.edit(() => {
|
||||
|
||||
+23
-15
@@ -63,10 +63,10 @@ layout("/layouts/platform.html"){
|
||||
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="活动项目">
|
||||
<el-descriptions-item label="经费项目">
|
||||
<el-form-item
|
||||
prop="activityMatter" label="活动项目">
|
||||
<el-input maxlength="50" placeholder="请输入项目"
|
||||
prop="activityMatter" label="经费项目">
|
||||
<el-input maxlength="50" placeholder="请输入经费项目"
|
||||
v-model="formData.activityMatter"></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
@@ -88,6 +88,14 @@ layout("/layouts/platform.html"){
|
||||
v-model="formData.declareTotalBudgetMoney"></el-input-number>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="预算条目" span="2">
|
||||
<el-form-item
|
||||
prop="budgetReimburseType" label="预算条目"
|
||||
:rules="[{required:true,message:'必填',trigger:['change','blur']}]">
|
||||
<dict-select v-model="formData.budgetReimburseType"
|
||||
code="ACTIVITY_BUDGET_REIMBURSE_TYPE"></dict-select>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
<!--<el-descriptions-item label="是否可以重复报销"
|
||||
v-if="['superadmin'].includes($store.state.user.loginname)">
|
||||
@@ -100,18 +108,18 @@ layout("/layouts/platform.html"){
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>-->
|
||||
<el-descriptions-item label="是否属于校工会预算"
|
||||
v-if="['ACTIVITY_BUDGET_TYPE_TWO','ACTIVITY_BUDGET_TYPE_THREE'].includes(formData.outlayManageSource)
|
||||
&&['superadmin'].includes($store.state.user.loginname)" :span="2">
|
||||
<el-form-item
|
||||
prop="isSchoolBudget" label="是否属于校工会预算"
|
||||
:rules="[{required:true,message:'必填',trigger:['change','blur']}]">
|
||||
<el-radio-group v-model="formData.isSchoolBudget">
|
||||
<el-radio-button :label="true">属于</el-radio-button>
|
||||
<el-radio-button :label="false">不属于</el-radio-button>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<!-- <el-descriptions-item label="是否属于校工会预算"
|
||||
v-if="['ACTIVITY_BUDGET_TYPE_TWO','ACTIVITY_BUDGET_TYPE_THREE'].includes(formData.outlayManageSource)
|
||||
&&['superadmin'].includes($store.state.user.loginname)" :span="2">
|
||||
<el-form-item
|
||||
prop="isSchoolBudget" label="是否属于校工会预算"
|
||||
:rules="[{required:true,message:'必填',trigger:['change','blur']}]">
|
||||
<el-radio-group v-model="formData.isSchoolBudget">
|
||||
<el-radio-button :label="true">属于</el-radio-button>
|
||||
<el-radio-button :label="false">不属于</el-radio-button>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>-->
|
||||
<!-- <el-descriptions-item v-if="!['ACTIVITY_BUDGET_TYPE_TWO','ACTIVITY_BUDGET_TYPE_THREE'].includes(formData.outlayManageSource)
|
||||
&&!['superadmin'].includes($store.state.user.loginname)"></el-descriptions-item>-->
|
||||
|
||||
|
||||
Reference in New Issue
Block a user