|
|
|
|
@ -1,543 +0,0 @@
|
|
|
|
|
<template>
|
|
|
|
|
<content-view>
|
|
|
|
|
<div class="roleDetail">
|
|
|
|
|
<!-- 1 -->
|
|
|
|
|
<div class="roleDetail-box">
|
|
|
|
|
<div class="roleDetail-box-title mb16">基础信息</div>
|
|
|
|
|
<div class="roleDetail-box-con flex flex-space-between flex-align-center">
|
|
|
|
|
<div class="roleDetail-box-con-item flex flex-start">
|
|
|
|
|
<div
|
|
|
|
|
class="roleDetail-box-con-item-block flex flex-start flex-align-center mr24"
|
|
|
|
|
>
|
|
|
|
|
<div class="roleDetail-box-con-item-block-label">角色名称:</div>
|
|
|
|
|
<div class="roleDetail-box-con-item-block-value">
|
|
|
|
|
<span v-if="!isEdit">{{detail.roleName ? detail.roleName : '-'}}</span>
|
|
|
|
|
<a-input v-else placeholder="请输入与角色名称" v-model="tempName"></a-input>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div
|
|
|
|
|
class="roleDetail-box-con-item-block flex flex-start flex-align-center"
|
|
|
|
|
>
|
|
|
|
|
<div class="roleDetail-box-con-item-block-label">状态:</div>
|
|
|
|
|
<div class="roleDetail-box-con-item-block-value flex">
|
|
|
|
|
<div :class="{'circle' : true, 'red': detail.state !== 0}"></div>
|
|
|
|
|
<span>{{detail.state === 0 ? '启用': '停用'}}</span>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="roleDetail-box-con-item">
|
|
|
|
|
<a-button
|
|
|
|
|
type="primary"
|
|
|
|
|
v-if="!isEdit"
|
|
|
|
|
@click="tempName = detail.roleName; isEdit = !isEdit"
|
|
|
|
|
:disabled="editAuth"
|
|
|
|
|
>编辑</a-button>
|
|
|
|
|
<template v-else>
|
|
|
|
|
<a-button class="mr8" type="primary" @click="saveEdit">保存</a-button>
|
|
|
|
|
<a-button @click="isEdit = false">取消</a-button>
|
|
|
|
|
</template>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<!-- 2 -->
|
|
|
|
|
<div class="roleDetail-box">
|
|
|
|
|
<div class="roleDetail-box-title flex flex-space-between flex-align-center mb8">
|
|
|
|
|
<span>下属权限列表</span>
|
|
|
|
|
<div>
|
|
|
|
|
<a-button
|
|
|
|
|
type="primary"
|
|
|
|
|
@click="type = 0; visible = true"
|
|
|
|
|
:disabled="addAppAuth"
|
|
|
|
|
class="mr8"
|
|
|
|
|
>
|
|
|
|
|
<a-icon type="plus"></a-icon>新增
|
|
|
|
|
</a-button>
|
|
|
|
|
<a-button @click="handleEditAuth">{{isDisabled ? '编辑' : '保存'}}</a-button>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="roleDetail-box-con flex flex-start">
|
|
|
|
|
<div
|
|
|
|
|
class="roleDetail-box-con-item"
|
|
|
|
|
v-for="(item, index) in detail.appPermissions"
|
|
|
|
|
:key="index"
|
|
|
|
|
>
|
|
|
|
|
<span class="text-center">{{item.applicationName}}</span>
|
|
|
|
|
<a-tree
|
|
|
|
|
checkable
|
|
|
|
|
:auto-expand-parent="true"
|
|
|
|
|
:tree-data="item.treeData"
|
|
|
|
|
:replace-fields="replaceFields"
|
|
|
|
|
v-model="item.checkedKeys"
|
|
|
|
|
@check="onCheck"
|
|
|
|
|
:disabled="isDisabled"
|
|
|
|
|
/>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<!-- 2 -->
|
|
|
|
|
<div class="roleDetail-box">
|
|
|
|
|
<div class="roleDetail-box-title flex flex-space-between flex-align-center mb8">
|
|
|
|
|
<span>下属用户列表</span>
|
|
|
|
|
<a-button
|
|
|
|
|
type="primary"
|
|
|
|
|
@click="type = 1; visible = true"
|
|
|
|
|
:disabled="bindUserAuth"
|
|
|
|
|
>
|
|
|
|
|
<a-icon type="plus"></a-icon>新增
|
|
|
|
|
</a-button>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="roleDetail-box-con">
|
|
|
|
|
<a-table
|
|
|
|
|
:rowKey="record => record.id"
|
|
|
|
|
:columns="columns"
|
|
|
|
|
:dataSource="dataSource"
|
|
|
|
|
:pagination="pagination"
|
|
|
|
|
@change="paginationChange"
|
|
|
|
|
>
|
|
|
|
|
<div
|
|
|
|
|
class="flex flex-start flex-align-center"
|
|
|
|
|
slot="state"
|
|
|
|
|
slot-scope="text, record"
|
|
|
|
|
>
|
|
|
|
|
<div :class="{'circle' : true, 'red': record.state !== 0}"></div>
|
|
|
|
|
<span>{{record.state === 0 ? '启用': '停用'}}</span>
|
|
|
|
|
</div>
|
|
|
|
|
<template slot="action" slot-scope="text, record">
|
|
|
|
|
<a
|
|
|
|
|
:disabled="userDetailAuth"
|
|
|
|
|
href="javascript:;"
|
|
|
|
|
class="mr8"
|
|
|
|
|
@click="$router.push({name: 'userDetailIndex', query: {id: record.id}})"
|
|
|
|
|
>用户详情</a>
|
|
|
|
|
<a-popconfirm
|
|
|
|
|
title="确认是否删除该用户"
|
|
|
|
|
ok-text="确定"
|
|
|
|
|
cancel-text="取消"
|
|
|
|
|
@confirm="deleteConfirm(record)"
|
|
|
|
|
>
|
|
|
|
|
<a-icon slot="icon" type="close-circle" style="color: red" />
|
|
|
|
|
<a href="#" :disabled="unbindUserAuth">删除</a>
|
|
|
|
|
</a-popconfirm>
|
|
|
|
|
</template>
|
|
|
|
|
</a-table>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<!-- 4 -->
|
|
|
|
|
<a-modal
|
|
|
|
|
v-model="visible"
|
|
|
|
|
:title="title"
|
|
|
|
|
okText="确定"
|
|
|
|
|
cancelText="取消"
|
|
|
|
|
@ok="handleOk"
|
|
|
|
|
@cancel="handleCancel"
|
|
|
|
|
>
|
|
|
|
|
<a-row type="flex" align="middle">
|
|
|
|
|
<a-col span="7" align="right">{{type === 0 ? '应用' : '选择用户'}}:</a-col>
|
|
|
|
|
<a-col span="12">
|
|
|
|
|
<a-select
|
|
|
|
|
style="width: 100%;"
|
|
|
|
|
v-if="type === 0"
|
|
|
|
|
placeholder="请选择应用"
|
|
|
|
|
v-model="modalObj.appId"
|
|
|
|
|
@change="getAppAuth"
|
|
|
|
|
>
|
|
|
|
|
<a-select-option
|
|
|
|
|
v-for="(item, index) in appList"
|
|
|
|
|
:key="index"
|
|
|
|
|
:value="item.id"
|
|
|
|
|
>{{item.name}}</a-select-option>
|
|
|
|
|
</a-select>
|
|
|
|
|
<a-select
|
|
|
|
|
v-else
|
|
|
|
|
style="width: 100%;"
|
|
|
|
|
mode="multiple"
|
|
|
|
|
placeholder="请选择用户"
|
|
|
|
|
v-model="modalObj.userIds"
|
|
|
|
|
>
|
|
|
|
|
<a-select-option
|
|
|
|
|
v-for="(item, index) in addUserList"
|
|
|
|
|
:key="index"
|
|
|
|
|
:value="item.id"
|
|
|
|
|
>{{item.name}}</a-select-option>
|
|
|
|
|
</a-select>
|
|
|
|
|
</a-col>
|
|
|
|
|
</a-row>
|
|
|
|
|
</a-modal>
|
|
|
|
|
</div>
|
|
|
|
|
</content-view>
|
|
|
|
|
</template>
|
|
|
|
|
|
|
|
|
|
<script>
|
|
|
|
|
import mixins from "@/plugins/mixins";
|
|
|
|
|
export default {
|
|
|
|
|
name: "roleDetail",
|
|
|
|
|
mixins: [mixins],
|
|
|
|
|
data() {
|
|
|
|
|
return {
|
|
|
|
|
detail: {},
|
|
|
|
|
// 编辑信息
|
|
|
|
|
isEdit: false,
|
|
|
|
|
tempName: "",
|
|
|
|
|
// 可新增的应用列表
|
|
|
|
|
appList: [],
|
|
|
|
|
// 可新增用户列表
|
|
|
|
|
addUserList: [],
|
|
|
|
|
// 权限列表
|
|
|
|
|
replaceFields: {
|
|
|
|
|
children: "children",
|
|
|
|
|
title: "description",
|
|
|
|
|
key: "id"
|
|
|
|
|
},
|
|
|
|
|
// 是否修改权限
|
|
|
|
|
isDisabled: true,
|
|
|
|
|
// 角色下所有用户列表
|
|
|
|
|
columns: [
|
|
|
|
|
{
|
|
|
|
|
title: "序号",
|
|
|
|
|
customRender: (text, record, index) => {
|
|
|
|
|
return (
|
|
|
|
|
(this.pagination.current - 1) *
|
|
|
|
|
this.pagination.pageSize +
|
|
|
|
|
(index + 1)
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
title: "姓名",
|
|
|
|
|
dataIndex: "name"
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
title: "手机号",
|
|
|
|
|
dataIndex: "account"
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
title: "状态",
|
|
|
|
|
dataIndex: "state",
|
|
|
|
|
scopedSlots: {
|
|
|
|
|
customRender: "state"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
title: "操作",
|
|
|
|
|
dataIndex: "action",
|
|
|
|
|
scopedSlots: {
|
|
|
|
|
customRender: "action"
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
dataSource: [],
|
|
|
|
|
// modal弹窗
|
|
|
|
|
visible: false,
|
|
|
|
|
type: 0, // 0 新增权限 1 新增用户
|
|
|
|
|
modalObj: {
|
|
|
|
|
appId: undefined,
|
|
|
|
|
permissionIds: "",
|
|
|
|
|
userIds: []
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
},
|
|
|
|
|
computed: {
|
|
|
|
|
title() {
|
|
|
|
|
if (this.type === 0) {
|
|
|
|
|
return "新增角色下所属应用权限";
|
|
|
|
|
} else {
|
|
|
|
|
return "新增角色下所属用户";
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
// 权限列表
|
|
|
|
|
editAuth() {
|
|
|
|
|
return this.$store.state.userInfo.permissionList.some(
|
|
|
|
|
item => item.rights === "editRole"
|
|
|
|
|
)
|
|
|
|
|
? false
|
|
|
|
|
: true;
|
|
|
|
|
},
|
|
|
|
|
addAppAuth() {
|
|
|
|
|
return this.$store.state.userInfo.permissionList.some(
|
|
|
|
|
item => item.rights === "addAppAuth"
|
|
|
|
|
)
|
|
|
|
|
? false
|
|
|
|
|
: true;
|
|
|
|
|
},
|
|
|
|
|
bindUserAuth() {
|
|
|
|
|
return this.$store.state.userInfo.permissionList.some(
|
|
|
|
|
item => item.rights === "bindUser"
|
|
|
|
|
)
|
|
|
|
|
? false
|
|
|
|
|
: true;
|
|
|
|
|
},
|
|
|
|
|
userDetailAuth() {
|
|
|
|
|
return this.$store.state.userInfo.permissionList.some(
|
|
|
|
|
item => item.rights === "userDetailIndex"
|
|
|
|
|
)
|
|
|
|
|
? false
|
|
|
|
|
: true;
|
|
|
|
|
},
|
|
|
|
|
unbindUserAuth() {
|
|
|
|
|
return this.$store.state.userInfo.permissionList.some(
|
|
|
|
|
item => item.rights === "unbindUser"
|
|
|
|
|
)
|
|
|
|
|
? false
|
|
|
|
|
: true;
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
methods: {
|
|
|
|
|
// 获取角色信息
|
|
|
|
|
getDetail() {
|
|
|
|
|
this.$api.roleApi
|
|
|
|
|
.getRole({
|
|
|
|
|
path: {
|
|
|
|
|
id: this.$route.query.id
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
.then(res => {
|
|
|
|
|
this.detail = res.data;
|
|
|
|
|
this.detail.appPermissions.map(item => {
|
|
|
|
|
const obj = this.translateDataToTree(item.permissions);
|
|
|
|
|
item.treeData = obj.parents;
|
|
|
|
|
item.checkedKeys = obj.checked;
|
|
|
|
|
this.$forceUpdate();
|
|
|
|
|
});
|
|
|
|
|
console.log("detail", this.detail);
|
|
|
|
|
});
|
|
|
|
|
},
|
|
|
|
|
// 组合tree
|
|
|
|
|
translateDataToTree(list) {
|
|
|
|
|
const data = JSON.parse(JSON.stringify(list));
|
|
|
|
|
let checked = [];
|
|
|
|
|
data.map(item => item.isPoint === 1 && checked.push(item.id));
|
|
|
|
|
let parents = data.filter(value => value.parentId === 0);
|
|
|
|
|
let children = data.filter(value => value.parentId !== 0);
|
|
|
|
|
let translator = (parents, children) => {
|
|
|
|
|
parents.forEach(parent => {
|
|
|
|
|
children.forEach((current, index) => {
|
|
|
|
|
if (current.parentId === parent.id) {
|
|
|
|
|
// 深拷贝
|
|
|
|
|
let temp = JSON.parse(JSON.stringify(children));
|
|
|
|
|
// 减少递归时节点数
|
|
|
|
|
temp.splice(index, 1);
|
|
|
|
|
// 加入父节点的children
|
|
|
|
|
parent.children && parent.children.length
|
|
|
|
|
? parent.children.push(current)
|
|
|
|
|
: (parent.children = [current]);
|
|
|
|
|
// 将匹配的子节点作为下一次的父节点开始滚雪球
|
|
|
|
|
translator([current], temp);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
translator(parents, children);
|
|
|
|
|
|
|
|
|
|
return {
|
|
|
|
|
parents: parents,
|
|
|
|
|
checked: checked
|
|
|
|
|
};
|
|
|
|
|
},
|
|
|
|
|
// tree复选框选择
|
|
|
|
|
onCheck(checkedKeys, e) {
|
|
|
|
|
console.log("onCheck", checkedKeys, "e", e);
|
|
|
|
|
this.$forceUpdate();
|
|
|
|
|
},
|
|
|
|
|
// 获取可新增的应用
|
|
|
|
|
getApp() {
|
|
|
|
|
this.$api.roleApi
|
|
|
|
|
.roleAppList({ params: { id: this.$route.query.id } })
|
|
|
|
|
.then(res => {
|
|
|
|
|
this.appList = res.data;
|
|
|
|
|
});
|
|
|
|
|
},
|
|
|
|
|
// 获取应用下的权限列表
|
|
|
|
|
getAppAuth(id) {
|
|
|
|
|
this.$api.roleApi
|
|
|
|
|
.appAuthList({ params: { applicationId: id } })
|
|
|
|
|
.then(res => {
|
|
|
|
|
let arr = [];
|
|
|
|
|
res.data.map(item => {
|
|
|
|
|
arr.push(item.id);
|
|
|
|
|
});
|
|
|
|
|
this.modalObj.permissionIds = arr.join(",");
|
|
|
|
|
});
|
|
|
|
|
},
|
|
|
|
|
// 获取可新增的用户
|
|
|
|
|
getUser() {
|
|
|
|
|
this.$api.roleApi
|
|
|
|
|
.roleAddUserList({ params: { roleId: this.$route.query.id } })
|
|
|
|
|
.then(res => {
|
|
|
|
|
this.addUserList = res.data;
|
|
|
|
|
});
|
|
|
|
|
},
|
|
|
|
|
// 保存编辑基础信息
|
|
|
|
|
saveEdit() {
|
|
|
|
|
if (this.tempName.length < 2 || this.tempName.length > 10) {
|
|
|
|
|
this.$message.info("2-10位角色名称");
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
this.$api.roleApi
|
|
|
|
|
.editRole({
|
|
|
|
|
data: {
|
|
|
|
|
id: this.$route.query.id,
|
|
|
|
|
roleName: this.tempName
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
.then(res => {
|
|
|
|
|
console.log(res);
|
|
|
|
|
this.$set(this.detail, "roleName", res.data.roleName);
|
|
|
|
|
this.isEdit = false;
|
|
|
|
|
this.$message.success("操作成功");
|
|
|
|
|
});
|
|
|
|
|
},
|
|
|
|
|
// 编辑保存权限列表
|
|
|
|
|
handleEditAuth() {
|
|
|
|
|
let temp = [];
|
|
|
|
|
if (this.isDisabled) {
|
|
|
|
|
// 编辑状态
|
|
|
|
|
this.isDisabled = false;
|
|
|
|
|
temp = JSON.parse(JSON.stringify(this.detail.appPermissions));
|
|
|
|
|
} else {
|
|
|
|
|
// 保存状态
|
|
|
|
|
console.log(this.detail.appPermissions);
|
|
|
|
|
let ids = [];
|
|
|
|
|
this.detail.appPermissions.map(item => {
|
|
|
|
|
ids = ids.concat(item.checkedKeys);
|
|
|
|
|
});
|
|
|
|
|
this.$api.roleApi
|
|
|
|
|
.editAuth({
|
|
|
|
|
data: {
|
|
|
|
|
id: this.$route.query.id,
|
|
|
|
|
permissionIds: ids.join(",")
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
.then(res => {
|
|
|
|
|
console.log(res);
|
|
|
|
|
this.getDetail();
|
|
|
|
|
this.isDisabled = true;
|
|
|
|
|
this.$message.success("操作成功");
|
|
|
|
|
})
|
|
|
|
|
.catch(err => {
|
|
|
|
|
console.log(err);
|
|
|
|
|
this.detail.appPermissions = temp;
|
|
|
|
|
this.$forceUpdate();
|
|
|
|
|
this.isDisabled = true;
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
// 角色所属用户列表
|
|
|
|
|
getList() {
|
|
|
|
|
this.$api.roleApi
|
|
|
|
|
.roleUserList({
|
|
|
|
|
data: {
|
|
|
|
|
pageNum: this.pagination.current,
|
|
|
|
|
pageSize: this.pagination.pageSize,
|
|
|
|
|
roleId: this.$route.query.id
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
.then(res => {
|
|
|
|
|
this.dataSource = res.data.list;
|
|
|
|
|
});
|
|
|
|
|
},
|
|
|
|
|
// 删除用户
|
|
|
|
|
deleteConfirm(record) {
|
|
|
|
|
console.log(record);
|
|
|
|
|
this.$api.roleApi
|
|
|
|
|
.roleDelUser({
|
|
|
|
|
data: {
|
|
|
|
|
roleId: this.$route.query.id,
|
|
|
|
|
userId: record.id
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
.then(res => {
|
|
|
|
|
console.log(res);
|
|
|
|
|
this.$message.success("操作成功");
|
|
|
|
|
this.pagination.current = 1;
|
|
|
|
|
this.pagination.pageSize = 10;
|
|
|
|
|
this.getList();
|
|
|
|
|
this.getUser();
|
|
|
|
|
});
|
|
|
|
|
},
|
|
|
|
|
// modal
|
|
|
|
|
handleOk() {
|
|
|
|
|
if (this.type === 0) {
|
|
|
|
|
if (!this.modalObj.appId) {
|
|
|
|
|
this.$message.info("请选择应用");
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
this.$api.roleApi
|
|
|
|
|
.editRole({
|
|
|
|
|
data: {
|
|
|
|
|
id: this.$route.query.id,
|
|
|
|
|
permissionIds: this.modalObj.permissionIds
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
.then(res => {
|
|
|
|
|
console.log(res);
|
|
|
|
|
this.getDetail();
|
|
|
|
|
this.$message.success("操作成功");
|
|
|
|
|
this.handleCancel();
|
|
|
|
|
});
|
|
|
|
|
} else {
|
|
|
|
|
if (!this.modalObj.userIds.length) {
|
|
|
|
|
this.$message.info("请选择用户");
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
this.$api.roleApi
|
|
|
|
|
.roleAddUser({
|
|
|
|
|
data: {
|
|
|
|
|
roleId: this.$route.query.id,
|
|
|
|
|
userIds: this.modalObj.userIds
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
.then(res => {
|
|
|
|
|
console.log(res);
|
|
|
|
|
this.getList(); // 刷新已绑定的用户列表
|
|
|
|
|
this.getUser(); // 刷新可新增的用户列表
|
|
|
|
|
this.$message.success("操作成功");
|
|
|
|
|
this.handleCancel();
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
handleCancel() {
|
|
|
|
|
this.visible = false;
|
|
|
|
|
this.modalObj = this.$utils.cleanData(this.modalObj);
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
mounted() {
|
|
|
|
|
this.getDetail();
|
|
|
|
|
this.getList();
|
|
|
|
|
this.getApp();
|
|
|
|
|
this.getUser();
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
</script>
|
|
|
|
|
|
|
|
|
|
<style lang='scss'>
|
|
|
|
|
.roleDetail {
|
|
|
|
|
.circle {
|
|
|
|
|
width: 8px;
|
|
|
|
|
height: 8px;
|
|
|
|
|
border-radius: 50%;
|
|
|
|
|
background-color: rgba(0, 168, 84, 1);
|
|
|
|
|
margin-right: 4px;
|
|
|
|
|
}
|
|
|
|
|
.red {
|
|
|
|
|
background-color: rgba(240, 65, 52, 1);
|
|
|
|
|
}
|
|
|
|
|
&-box {
|
|
|
|
|
border-bottom: 1px solid rgba(0, 0, 0, 0.1);
|
|
|
|
|
padding-bottom: 24px;
|
|
|
|
|
margin-bottom: 24px;
|
|
|
|
|
&-title {
|
|
|
|
|
font-size: 16px;
|
|
|
|
|
font-family: PingFangSC, PingFangSC-Medium;
|
|
|
|
|
font-weight: 500;
|
|
|
|
|
text-align: left;
|
|
|
|
|
color: rgba(0, 0, 0, 0.85);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
&-box:last-child {
|
|
|
|
|
border-bottom: none;
|
|
|
|
|
margin-bottom: 0;
|
|
|
|
|
padding-bottom: 0;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
</style>
|