Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
C
cms
概览
概览
详情
活动
周期分析
版本库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程表
图表
维基
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
iuav
cms
Commits
9c4a5630
提交
9c4a5630
authored
7月 10, 2023
作者:
张小凤
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
role(add)
上级
74249421
隐藏空白字符变更
内嵌
并排
正在显示
11 个修改的文件
包含
542 行增加
和
1 行删除
+542
-1
RoleInfoDTO.java
...rc/main/java/com/mmc/iuav/user/model/dto/RoleInfoDTO.java
+33
-0
RoleInfoQO.java
.../src/main/java/com/mmc/iuav/user/model/qo/RoleInfoQO.java
+41
-0
RoleInfoVO.java
.../src/main/java/com/mmc/iuav/user/model/vo/RoleInfoVO.java
+36
-0
CodeUtil.java
...mon-util/src/main/java/com/mmc/iuav/general/CodeUtil.java
+7
-0
ResultEnum.java
...-util/src/main/java/com/mmc/iuav/response/ResultEnum.java
+4
-1
RoleController.java
...ain/java/com/mmc/iuav/user/controller/RoleController.java
+65
-0
RoleDao.java
...ice-user/src/main/java/com/mmc/iuav/user/dao/RoleDao.java
+37
-0
RoleInfoDO.java
...er/src/main/java/com/mmc/iuav/user/entity/RoleInfoDO.java
+79
-0
RoleService.java
.../src/main/java/com/mmc/iuav/user/service/RoleService.java
+23
-0
RoleServiceImpl.java
.../java/com/mmc/iuav/user/service/impl/RoleServiceImpl.java
+80
-0
RoleDao.xml
...ce/cms-service-user/src/main/resources/mapper/RoleDao.xml
+137
-0
没有找到文件。
cms-common/cms-common-model/src/main/java/com/mmc/iuav/user/model/dto/RoleInfoDTO.java
0 → 100644
浏览文件 @
9c4a5630
package
com
.
mmc
.
iuav
.
user
.
model
.
dto
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.AllArgsConstructor
;
import
lombok.Builder
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
java.io.Serializable
;
/**
* @Author small
* @Date 2023/7/10 16:03
* @Version 1.0
*/
@Builder
@Data
@AllArgsConstructor
@NoArgsConstructor
public
class
RoleInfoDTO
implements
Serializable
{
private
static
final
long
serialVersionUID
=
-
4791023169682602298L
;
@ApiModelProperty
(
value
=
"角色ID"
)
private
Integer
id
;
@ApiModelProperty
(
value
=
"角色编号"
)
private
String
roleNo
;
@ApiModelProperty
(
value
=
"角色名称/权限角色"
)
private
String
roleName
;
@ApiModelProperty
(
value
=
"备注"
)
private
String
remark
;
@ApiModelProperty
(
value
=
"账号名称/创建人"
)
private
String
userName
;
}
cms-common/cms-common-model/src/main/java/com/mmc/iuav/user/model/qo/RoleInfoQO.java
0 → 100644
浏览文件 @
9c4a5630
package
com
.
mmc
.
iuav
.
user
.
model
.
qo
;
import
com.mmc.iuav.group.Freeze
;
import
com.mmc.iuav.group.Page
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.AllArgsConstructor
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
javax.validation.constraints.Min
;
import
javax.validation.constraints.NotNull
;
import
java.io.Serializable
;
/**
* @Author small
* @Date 2023/7/10 16:02
* @Version 1.0
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public
class
RoleInfoQO
implements
Serializable
{
private
static
final
long
serialVersionUID
=
-
3729786590325257669L
;
@ApiModelProperty
(
value
=
"权限角色/或者编号"
,
required
=
false
)
private
String
NumberOrName
;
@ApiModelProperty
(
value
=
"当前页"
,
required
=
true
,
example
=
"1"
)
@NotNull
(
message
=
"当前页不能为空"
,
groups
=
{
Page
.
class
,
Freeze
.
class
})
@Min
(
value
=
1
,
groups
=
Page
.
class
)
private
Integer
pageNo
;
@ApiModelProperty
(
value
=
"页大小"
,
required
=
true
,
example
=
"10"
)
@NotNull
(
message
=
"页大小不能为空"
,
groups
=
{
Page
.
class
,
Freeze
.
class
})
@Min
(
value
=
1
,
groups
=
Page
.
class
)
private
Integer
pageSize
;
public
void
buildCurrentPage
()
{
this
.
pageNo
=
(
pageNo
-
1
)
*
pageSize
;
}
}
cms-common/cms-common-model/src/main/java/com/mmc/iuav/user/model/vo/RoleInfoVO.java
0 → 100644
浏览文件 @
9c4a5630
package
com
.
mmc
.
iuav
.
user
.
model
.
vo
;
import
com.mmc.iuav.group.Create
;
import
com.mmc.iuav.group.Update
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.AllArgsConstructor
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
javax.validation.constraints.NotBlank
;
import
javax.validation.constraints.NotNull
;
import
javax.validation.constraints.Size
;
import
java.io.Serializable
;
/**
* @Author small
* @Date 2023/7/10 16:02
* @Version 1.0
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public
class
RoleInfoVO
implements
Serializable
{
private
static
final
long
serialVersionUID
=
-
5814724843819090363L
;
@ApiModelProperty
(
value
=
"角色id"
,
example
=
"1"
)
@NotNull
(
message
=
"角色ID不能为空"
,
groups
=
Update
.
class
)
private
Integer
id
;
@ApiModelProperty
(
value
=
"角色名称"
,
example
=
"超级管理员"
)
@NotBlank
(
message
=
"角色名称不能为空"
,
groups
=
{
Create
.
class
,
Update
.
class
})
@Size
(
max
=
10
,
message
=
"权限角色不得超过10个字符"
)
private
String
roleName
;
@ApiModelProperty
(
value
=
"备注"
,
example
=
"备注"
)
@Size
(
max
=
225
,
message
=
"备注不得超过225个字符"
)
private
String
remark
;
}
cms-common/cms-common-util/src/main/java/com/mmc/iuav/general/CodeUtil.java
浏览文件 @
9c4a5630
...
...
@@ -29,4 +29,11 @@ public class CodeUtil {
public
static
String
removeUserAccount
()
{
return
"DELETE"
+
CodeUtil
.
getRandomNum
(
15
);
}
public
static
String
createRoleNo
()
{
StringBuffer
sb
=
new
StringBuffer
();
sb
.
append
(
"JS"
);
sb
.
append
(
CodeUtil
.
getRandomNum
(
4
));
return
sb
.
toString
();
}
}
cms-common/cms-common-util/src/main/java/com/mmc/iuav/response/ResultEnum.java
浏览文件 @
9c4a5630
...
...
@@ -38,7 +38,10 @@ public enum ResultEnum implements BaseErrorInfoInterface{
APPLET_PORT_TYPE_ERROR
(
"7001"
,
"小程序端口类型错误"
),
APPLET_LOGIN_ERROR
(
"7002"
,
"获取小程序登录信息失败"
),
UPDATE_USER_ACCOUNT_REPEAT
(
"7003"
,
"修改后的账户名已存在"
),
ADD_USER_ACCOUNT_NAME_EXISTS
(
"7004"
,
"新增账户名已经存在"
);
ADD_USER_ACCOUNT_NAME_EXISTS
(
"7004"
,
"新增账户名已经存在"
),
ROLE_NAME_REPEAT_ERROR
(
"8004"
,
"角色名已存在"
),
ROLE_AVL_USER_DELETE_ERROR
(
"8005"
,
"此角色尚有可用账号,请将所有账号移除后在进行操作"
);
/**
* 错误码
...
...
csm-service/cms-service-user/src/main/java/com/mmc/iuav/user/controller/RoleController.java
0 → 100644
浏览文件 @
9c4a5630
package
com
.
mmc
.
iuav
.
user
.
controller
;
import
com.mmc.iuav.group.Create
;
import
com.mmc.iuav.group.Page
;
import
com.mmc.iuav.group.Update
;
import
com.mmc.iuav.response.ResultBody
;
import
com.mmc.iuav.user.model.dto.RoleInfoDTO
;
import
com.mmc.iuav.user.model.qo.RoleInfoQO
;
import
com.mmc.iuav.user.model.vo.RoleInfoVO
;
import
com.mmc.iuav.user.service.RoleService
;
import
io.swagger.annotations.*
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.validation.annotation.Validated
;
import
org.springframework.web.bind.annotation.*
;
import
javax.servlet.http.HttpServletRequest
;
/**
* @Author small
* @Date 2023/7/7 17:53
* @Version 1.0
*/
@Api
(
tags
=
"角色管理"
)
@RequestMapping
(
"/role"
)
@RestController
public
class
RoleController
extends
BaseController
{
@Autowired
private
RoleService
roleService
;
@ApiOperation
(
value
=
"角色管理-新增"
)
@ApiResponses
({
@ApiResponse
(
code
=
200
,
message
=
"OK"
,
response
=
ResultBody
.
class
)})
@PostMapping
(
"insertRoleInfo"
)
public
ResultBody
insertRoleInfo
(
HttpServletRequest
request
,
@Validated
(
value
=
{
Create
.
class
})
@RequestBody
RoleInfoVO
role
)
{
return
roleService
.
insertRoleInfo
(
role
,
this
.
getUserLoginInfoFromRedis
(
request
));
}
@ApiOperation
(
value
=
"角色管理-修改"
)
@ApiResponses
({
@ApiResponse
(
code
=
200
,
message
=
"OK"
,
response
=
ResultBody
.
class
)})
@PostMapping
(
"updateRoleInfo"
)
public
ResultBody
updateRoleInfo
(
HttpServletRequest
request
,
@Validated
(
value
=
{
Update
.
class
})
@RequestBody
RoleInfoVO
role
)
{
return
roleService
.
updateRoleInfo
(
role
,
this
.
getUserLoginInfoFromRedis
(
request
));
}
@ApiOperation
(
value
=
"角色管理-删除"
)
@ApiResponses
({
@ApiResponse
(
code
=
200
,
message
=
"OK"
,
response
=
ResultBody
.
class
)})
@GetMapping
(
"removeRoleInfo"
)
public
ResultBody
removeRoleInfo
(
@ApiParam
(
value
=
"角色id"
,
required
=
true
)
@RequestParam
Integer
id
)
{
return
roleService
.
removeRoleInfo
(
id
);
}
@ApiOperation
(
value
=
"角色管理-分页"
)
@ApiResponses
({
@ApiResponse
(
code
=
200
,
message
=
"OK"
,
response
=
RoleInfoDTO
.
class
)})
@PostMapping
(
"listRoleInfoPage"
)
public
ResultBody
listRoleInfoPage
(
HttpServletRequest
request
,
@Validated
(
value
=
{
Page
.
class
})
@ApiParam
(
value
=
"角色查询QO"
,
required
=
true
)
@RequestBody
RoleInfoQO
param
)
{
return
ResultBody
.
success
(
roleService
.
listPageRoleInfo
(
param
,
this
.
getUserLoginInfoFromRedis
(
request
)));
}
}
csm-service/cms-service-user/src/main/java/com/mmc/iuav/user/dao/RoleDao.java
0 → 100644
浏览文件 @
9c4a5630
package
com
.
mmc
.
iuav
.
user
.
dao
;
import
com.mmc.iuav.user.entity.RoleInfoDO
;
import
com.mmc.iuav.user.model.qo.RoleInfoQO
;
import
org.apache.ibatis.annotations.Mapper
;
import
java.util.List
;
/**
* @Author small
* @Date 2023/7/10 16:06
* @Version 1.0
*/
@Mapper
public
interface
RoleDao
{
Integer
countRoleName
(
String
roleName
);
void
insertRoleInfo
(
RoleInfoDO
rd
);
void
updateRoleInfo
(
RoleInfoDO
rd
);
List
<
Integer
>
listUserRoleInfo
(
Integer
id
);
void
removeRoleInfo
(
Integer
id
);
RoleInfoDO
getRoleInfo
(
Integer
id
);
int
countPageRoleInfo
(
RoleInfoQO
param
);
List
<
RoleInfoDO
>
listPageRoleInfo
(
RoleInfoQO
param
);
Integer
countRoleNameId
(
RoleInfoDO
rd
);
Integer
countNotDelUserAccountByRole
(
Integer
id
);
}
csm-service/cms-service-user/src/main/java/com/mmc/iuav/user/entity/RoleInfoDO.java
0 → 100644
浏览文件 @
9c4a5630
package
com
.
mmc
.
iuav
.
user
.
entity
;
import
com.mmc.iuav.user.model.dto.RoleInfoDTO
;
import
com.mmc.iuav.user.model.vo.RoleInfoVO
;
import
lombok.AllArgsConstructor
;
import
lombok.Builder
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
java.util.Date
;
/**
* @Author small
* @Date 2023/7/10 16:07
* @Version 1.0
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public
class
RoleInfoDO
{
private
static
final
long
serialVersionUID
=
-
9173631450897624325L
;
private
Integer
id
;
/**
* 角色编号
*/
private
String
roleNo
;
/**
* 角色名称
*/
private
String
roleName
;
/**
* 是否删除
*/
private
Integer
isDeleted
;
/**
* 备注
*/
private
String
remark
;
/**
* 创建时间
*/
private
Date
createTime
;
/**
* 更新时间
*/
private
Date
updateTime
;
/**
* 账号id
*/
private
Integer
userAccountId
;
/**
* 账号名称
*/
private
String
userName
;
/**
* DTO转换
*
* @return
*/
public
RoleInfoDTO
buildRoleInfoDTO
()
{
return
RoleInfoDTO
.
builder
().
id
(
this
.
id
).
roleNo
(
this
.
roleNo
).
roleName
(
this
.
roleName
)
.
userName
(
this
.
userName
)
.
remark
(
this
.
remark
).
build
();
}
/**
* VO类转换
*/
public
RoleInfoDO
(
RoleInfoVO
role
)
{
this
.
id
=
role
.
getId
();
this
.
roleName
=
role
.
getRoleName
();
this
.
remark
=
role
.
getRemark
();
}
}
csm-service/cms-service-user/src/main/java/com/mmc/iuav/user/service/RoleService.java
0 → 100644
浏览文件 @
9c4a5630
package
com
.
mmc
.
iuav
.
user
.
service
;
import
com.mmc.iuav.page.PageResult
;
import
com.mmc.iuav.response.ResultBody
;
import
com.mmc.iuav.user.model.dto.LoginSuccessDTO
;
import
com.mmc.iuav.user.model.qo.RoleInfoQO
;
import
com.mmc.iuav.user.model.vo.RoleInfoVO
;
/**
* @Author small
* @Date 2023/7/8 9:53
* @Version 1.0
*/
public
interface
RoleService
{
ResultBody
insertRoleInfo
(
RoleInfoVO
role
,
LoginSuccessDTO
userLoginInfoFromRedis
);
ResultBody
updateRoleInfo
(
RoleInfoVO
role
,
LoginSuccessDTO
userLoginInfoFromRedis
);
ResultBody
removeRoleInfo
(
Integer
id
);
PageResult
listPageRoleInfo
(
RoleInfoQO
param
,
LoginSuccessDTO
userLoginInfoFromRedis
);
}
csm-service/cms-service-user/src/main/java/com/mmc/iuav/user/service/impl/RoleServiceImpl.java
0 → 100644
浏览文件 @
9c4a5630
package
com
.
mmc
.
iuav
.
user
.
service
.
impl
;
import
com.mmc.iuav.general.CodeUtil
;
import
com.mmc.iuav.page.PageResult
;
import
com.mmc.iuav.response.ResultBody
;
import
com.mmc.iuav.response.ResultEnum
;
import
com.mmc.iuav.user.dao.RoleDao
;
import
com.mmc.iuav.user.entity.RoleInfoDO
;
import
com.mmc.iuav.user.model.dto.LoginSuccessDTO
;
import
com.mmc.iuav.user.model.qo.RoleInfoQO
;
import
com.mmc.iuav.user.model.vo.RoleInfoVO
;
import
com.mmc.iuav.user.service.RoleService
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
java.util.stream.Collectors
;
/**
* @Author small
* @Date 2023/7/10 16:05
* @Version 1.0
*/
@Service
public
class
RoleServiceImpl
implements
RoleService
{
@Autowired
private
RoleDao
roleDao
;
@Override
public
ResultBody
insertRoleInfo
(
RoleInfoVO
roleInfo
,
LoginSuccessDTO
userLoginInfoFromRedis
)
{
int
count
=
roleDao
.
countRoleName
(
roleInfo
.
getRoleName
());
if
(
count
>
0
)
{
return
ResultBody
.
error
(
ResultEnum
.
ROLE_NAME_REPEAT_ERROR
);
}
RoleInfoDO
rd
=
new
RoleInfoDO
(
roleInfo
);
rd
.
setUserAccountId
(
userLoginInfoFromRedis
.
getUserAccountId
());
rd
.
setRoleNo
(
CodeUtil
.
createRoleNo
());
roleDao
.
insertRoleInfo
(
rd
);
return
ResultBody
.
success
();
}
@Override
public
ResultBody
updateRoleInfo
(
RoleInfoVO
roleInfo
,
LoginSuccessDTO
userLoginInfoFromRedis
)
{
RoleInfoDO
rd
=
new
RoleInfoDO
(
roleInfo
);
int
count
=
roleDao
.
countRoleNameId
(
rd
);
if
(
count
>
0
)
{
return
ResultBody
.
error
(
ResultEnum
.
ROLE_NAME_REPEAT_ERROR
);
}
rd
.
setUserAccountId
(
userLoginInfoFromRedis
.
getUserAccountId
());
roleDao
.
updateRoleInfo
(
rd
);
return
ResultBody
.
success
();
}
@Override
public
ResultBody
removeRoleInfo
(
Integer
id
)
{
Integer
count
=
roleDao
.
countNotDelUserAccountByRole
(
id
);
if
(
count
>
0
)
{
return
ResultBody
.
error
(
ResultEnum
.
ROLE_AVL_USER_DELETE_ERROR
);
}
roleDao
.
removeRoleInfo
(
id
);
return
ResultBody
.
success
();
}
@Override
public
PageResult
listPageRoleInfo
(
RoleInfoQO
param
,
LoginSuccessDTO
userLoginInfoFromRedis
)
{
int
count
=
roleDao
.
countPageRoleInfo
(
param
);
if
(
count
==
0
)
{
return
PageResult
.
buildPage
(
param
.
getPageNo
(),
param
.
getPageSize
(),
count
);
}
Integer
pageNo
=
param
.
getPageNo
();
param
.
buildCurrentPage
();
return
PageResult
.
buildPage
(
pageNo
,
param
.
getPageSize
(),
count
,
roleDao
.
listPageRoleInfo
(
param
).
stream
().
map
(
d
->
{
return
d
.
buildRoleInfoDTO
();
}).
collect
(
Collectors
.
toList
()));
}
}
csm-service/cms-service-user/src/main/resources/mapper/RoleDao.xml
0 → 100644
浏览文件 @
9c4a5630
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper
namespace=
"com.mmc.iuav.user.dao.RoleDao"
>
<resultMap
type=
"com.mmc.iuav.user.entity.RoleInfoDO"
id=
"roleInfoResultMap"
>
<id
property=
"id"
column=
"id"
/>
<result
property=
"roleNo"
column=
"role_no"
/>
<result
property=
"roleName"
column=
"role_name"
/>
<result
property=
"isDeleted"
column=
"is_deleted"
/>
<result
property=
"remark"
column=
"remark"
/>
<result
property=
"createTime"
column=
"create_time"
/>
<result
property=
"updateTime"
column=
"update_time"
/>
<result
property=
"userAccountId"
column=
"user_account_id"
/>
<result
property=
"userName"
column=
"user_name"
/>
</resultMap>
<select
id=
"countRoleName"
resultType=
"int"
>
select count(*)
from role_info r
where r.is_deleted=0
<if
test=
" roleName != null and roleName != '' "
>
and role_name = #{roleName}
</if>
</select>
<select
id=
"countRoleNameId"
resultType=
"java.lang.Integer"
>
select count(*)
from role_info r
where r.is_deleted=0
<if
test=
" roleName != null and roleName != '' "
>
and role_name = #{roleName}
</if>
<if
test=
" id != null and id != '' "
>
and id != #{id}
</if>
</select>
<insert
id=
"insertRoleInfo"
useGeneratedKeys=
"true"
keyProperty=
"id"
parameterType=
"com.mmc.iuav.user.entity.RoleInfoDO"
>
insert into role_info(role_no, role_name, user_account_id, remark, create_time)
values (#{roleNo}, #{roleName}, #{userAccountId}, #{remark}, NOW())
</insert>
<update
id=
"updateRoleInfo"
parameterType=
"com.mmc.iuav.user.entity.RoleInfoDO"
>
UPDATE role_info
<set>
<if
test=
" roleName != null and roleName != '' "
>
role_name = #{roleName},
</if>
remark = #{remark},
update_time=NOW()
</set>
where id = #{id}
</update>
<select
id=
"listUserRoleInfo"
resultType=
"int"
parameterType=
"int"
>
select user_account_id
from user_role_rel
where role_id = #{roleId}
</select>
<update
id=
"removeRoleInfo"
parameterType=
"int"
>
UPDATE role_info
<set>
is_deleted = 1
</set>
where id = #{id}
</update>
<select
id=
"getRoleInfo"
resultMap=
"roleInfoResultMap"
parameterType=
"int"
>
select r.id,
r.role_no,
r.role_name,
r.is_operate,
r.is_admin,
r.is_system,
r.role_status,
r.remark,
r.create_time
from role_info r
where r.id = #{id}
and r.is_deleted = 0
</select>
<select
id=
"countPageRoleInfo"
resultType=
"int"
parameterType=
"com.mmc.iuav.user.model.qo.RoleInfoQO"
>
SELECT count(*)
FROM
role_info r
INNER JOIN user_account ua ON r.user_account_id = ua.id
WHERE
r.is_deleted =0
<if
test=
" NumberOrName != null and NumberOrName != '' "
>
and (role_no like CONCAT('%',#{NumberOrName},'%') or role_name
like CONCAT('%',#{NumberOrName},'%'))
</if>
</select>
<select
id=
"listPageRoleInfo"
resultMap=
"roleInfoResultMap"
parameterType=
"com.mmc.iuav.user.model.qo.RoleInfoQO"
>
SELECT
r.id,
r.role_no,
r.role_name,
r.remark,
r.create_time,
r.user_account_id,
ua.user_name
FROM
role_info r
INNER JOIN user_account ua ON r.user_account_id = ua.id
WHERE
r.is_deleted =0
<if
test=
" NumberOrName != null and NumberOrName != '' "
>
and (r.role_no like CONCAT('%',#{NumberOrName},'%') or
r.role_name like CONCAT('%',#{NumberOrName},'%'))
</if>
order by r.create_time ASC
limit #{pageNo},#{pageSize}
</select>
<select
id=
"countNotDelUserAccountByRole"
resultType=
"java.lang.Integer"
>
select count(*)
from user_role_rel
where role_id = #{id}
</select>
</mapper>
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论