Commit dd372aa5 authored by hangjun83's avatar hangjun83

前端: 1、调整样式页面

parent 9e49e6da
......@@ -155,7 +155,7 @@ App running at:
```
> <strong>注意:</strong> 如果需要打包进行正式环境的运行要执行:
```sh
npm build #运行结束会在dist文件生成html文件,将该dist文件夹打包上传至服务中。
npm run build #运行结束会在dist文件生成html文件,将该dist文件夹打包上传至服务中。
```
......
......@@ -3,6 +3,11 @@
margin-bottom: 2vh;
}
.operation button {
width: 150px;
height: 40px;
}
.select-count {
font-weight: 600;
color: #40a9ff;
......
.search {
.operation {
margin-bottom: 2vh;
height: 80vh;
}
.operation form input {
width: 550px;
height: 35px;
}
.select-title {
......
......@@ -6,7 +6,7 @@
<Menu active-name="1-1" theme="primary" width="auto" @on-select="currName = $event">
<MenuItem name="1-1">安装配置</MenuItem>
<MenuItem name="1-2">服务器端</MenuItem>
<MenuItem name="1-3"></MenuItem>
<MenuItem name="1-3">页面</MenuItem>
</Menu>
</Sider>
<Content :style="{
......
......@@ -356,4 +356,68 @@
right: 4px;
z-index: 100;
top: 1px;
}
//表格公共样式
.tableInfoBox {
position: relative;
margin: 10px 0px 0px;
background-color: #fff;
border: 1px;
.ivu-table-wrapper {
border: 0px;
}
.ivu-table-border td {
border-color: #f9f9f9;
height: 65px;
}
.ivu-table-tip td {
border-bottom: 1px;
span {
width: 100%;
padding: 0px;
display: inline-block;
color: #aaaaaa;
background-repeat: no-repeat;
background-position: center 50%;
}
}
table th .ivu-table-cell {
position: relative;
display: inline-block;
white-space: nowrap;
overflow: hidden;
text-overflow: inherit;
padding-left: 10px;
padding-right: 10px;
}
/*头部th*/
.ivu-table-header th,
.ivu-table-fixed-header th {
color: #252b2d;
font-weight: bold;
background-color: #f9f9f9;
border:0px;
height: 105px;
}
.ivu-table table {
width: calc(~'100% - 0px') !important;
}
}
/*-弹窗居中显示-*/
.vertical-center-modal {
display: flex;
align-items: center;
justify-content: center;
.ivu-modal {
top: 0;
}
}
\ No newline at end of file
......@@ -3,759 +3,625 @@
@import "./menuManage.less";
</style>
<template>
<div class="search">
<Card>
<Row class="operation" align="middle" justify="space-between">
<div>
<Button
@click="add"
type="primary"
icon="md-add"
v-show="showType == 'tree'"
>添加子节点</Button
>
<Button @click="delAll" icon="md-trash">批量删除</Button>
<Dropdown @on-click="handleDropdown" v-show="showType == 'tree'">
<Button>
更多操作
<Icon type="md-arrow-dropdown"></Icon>
</Button>
<DropdownMenu slot="list">
<DropdownItem name="refresh">刷新</DropdownItem>
<DropdownItem name="expandOne">收合所有</DropdownItem>
<DropdownItem name="expandTwo">仅展开一级</DropdownItem>
<DropdownItem name="expandThree">仅展开两级</DropdownItem>
</DropdownMenu>
</Dropdown>
</div>
</Row>
<Row type="flex" justify="start" :gutter="16" v-show="showType == 'tree'">
<Col :sm="8" :md="8" :lg="8" :xl="6">
<Alert show-icon>
当前选择编辑:
<span class="select-title">{{ editTitle }}</span>
<a
class="select-clear"
v-show="form.id && editTitle"
@click="cancelEdit"
>取消选择</a
>
</Alert>
<div style="position: relative">
<div class="tree-bar" :style="{ maxHeight: maxHeight }">
<Tree
ref="tree"
:data="data"
show-checkbox
:render="renderContent"
@on-select-change="selectTree"
@on-check-change="changeSelect"
:check-strictly="!strict"
></Tree>
</div>
<Spin size="large" fix v-if="loading"></Spin>
</div>
<div class="search">
<Row type="flex" justify="start" :gutter="24" v-show="showType == 'tree'">
<Col :sm="10" :md="10" :lg="10" :xl="8">
<Card class="operation">
<Row align="middle" justify="start">
<div>
<Button @click="add" type="primary" icon="md-add" v-show="showType == 'tree'">添加子节点</Button>
<Button @click="delAll" icon="md-trash">批量删除</Button>
<Dropdown @on-click="handleDropdown" v-show="showType == 'tree'">
<Button>
更多操作
<Icon type="md-arrow-dropdown"></Icon>
</Button>
<DropdownMenu slot="list">
<DropdownItem name="refresh">刷新</DropdownItem>
<DropdownItem name="expandOne">收合所有</DropdownItem>
<DropdownItem name="expandTwo">仅展开一级</DropdownItem>
<DropdownItem name="expandThree">仅展开两级</DropdownItem>
</DropdownMenu>
</Dropdown>
</div>
</Row>
<Divider />
<Row type="flex" justify="start" :gutter="24" v-show="showType == 'tree'">
<Col>
<Alert v-show="editTitle">
<template slot="desc">
当前选择编辑:
<span class="select-title">{{ editTitle }}</span>
<a class="select-clear" v-show="form.id && editTitle" @click="cancelEdit">取消选择</a>
</template>
</Alert>
<div style="position: relative">
<div class="tree-bar" :style="{ maxHeight: maxHeight }">
<Tree ref="tree" :data="data" show-checkbox :render="renderContent" @on-select-change="selectTree" @on-check-change="changeSelect" :check-strictly="!strict"></Tree>
</div>
<Spin size="large" fix v-if="loading"></Spin>
</div>
</Col>
</Row>
</Card>
</Col>
<Col :sm="16" :md="16" :lg="16" :xl="9">
<Form
ref="form"
:model="form"
:label-width="110"
:rules="formValidate"
>
<Col :sm="18" :md="18" :lg="18" :xl="11">
<Card class="operation" bordered shadow>
<Row>
<Icon type="ios-apps" style="display:inline-block;padding-top:5px;"/>
<span style="display:inline-block;padding-left:15px;font-size:16px;font-weight:bold;color:#252b2d">菜单编辑</span>
</Row>
<Divider />
<Row align="middle" justify="start" v-show="editTitle">
<Form ref="form" :model="form" :label-width="110" :rules="formValidate">
<FormItem label="类型" prop="type">
<div v-show="form.menuType == 'top'">
<Icon type="ios-navigate-outline" size="16" style="margin-right: 5px"></Icon>
<span>顶部菜单</span>
</div>
<div v-show="form.menuType == 'page'">
<Icon type="ios-list-box-outline" size="16" style="margin-right: 5px"></Icon>
<span>页面菜单</span>
</div>
<div v-show="form.menuType == 'button'">
<Icon type="md-radio-button-on" size="16" style="margin-right: 5px"></Icon>
<span>操作按钮</span>
</div>
</FormItem>
<FormItem label="上级菜单" prop="parentTitle" class="form-noheight">
<div style="display: flex">
<Input v-model="form.parentTitle" readonly style="margin-right: 10px" />
<Poptip transfer trigger="click" placement="right-start" title="选择上级菜单" width="250">
<Button icon="md-list">选择菜单</Button>
<div slot="content" class="tree-bar tree-select">
<Tree :data="dataEdit" @on-select-change="selectTreeEdit"></Tree>
<Spin size="large" fix v-if="loading"></Spin>
</div>
</Poptip>
</div>
</FormItem>
<FormItem label="名称" prop="name" v-if="form.menuType == 'top' || form.menuType == 'page'">
<Input v-model="form.name" />
</FormItem>
<FormItem label="名称" prop="name" v-if="form.menuType == 'button'" class="block-tool">
<Tooltip placement="right" content="操作按钮名称不得重复">
<Input v-model="form.name" />
</Tooltip>
</FormItem>
<FormItem label="标题" prop="title">
<Input v-model="form.title" />
</FormItem>
<FormItem label="页面路径" prop="path">
<Input v-model="form.path" />
</FormItem>
<FormItem label="按钮权限类型" prop="buttonType" v-if="form.menuType == 'button'">
<dict dict="defaultButtonPermission" v-model="form.buttonType" placeholder="请选择或输入搜索" filterable clearable />
</FormItem>
<FormItem label="图标" prop="icon" v-if="form.menuType == 'top' || form.menuType == 'page'">
<icon-choose showCustom showInput v-model="form.icon"></icon-choose>
</FormItem>
<FormItem label="前端组件" prop="component" v-if="form.menuType == 'page'">
<Input v-model="form.component" />
</FormItem>
<FormItem label="排序值" prop="sortOrder">
<Tooltip trigger="hover" placement="right" content="值越小越靠前,支持小数">
<InputNumber :max="1000" :min="0" v-model="form.sort"></InputNumber>
</Tooltip>
</FormItem>
<FormItem label="是否启用" prop="status">
<i-switch size="large" v-model="form.status" :true-value="1" :false-value="0">
<span slot="open">启用</span>
<span slot="close">禁用</span>
</i-switch>
</FormItem>
<FormItem>
<Button style="margin-right: 5px" @click="submitEdit" :loading="submitLoading" :disabled="!form.id || !editTitle" type="primary" icon="ios-create-outline">修改并保存</Button>
<Button @click="handleReset">重置</Button>
</FormItem>
</Form>
</Row>
</Card>
</Col>
</Row>
</Card>
<Modal draggable class="operation" :title="modalTitle" v-model="menuModalVisible" :mask-closable="false" :width="800" :styles="{ top: '30px' }">
<Form ref="formAdd" :model="formAdd" :label-width="110" :rules="formValidate">
<div v-if="showParent">
<FormItem label="上级节点:">{{ parentTitle }}</FormItem>
</div>
<FormItem label="类型" prop="type">
<div v-show="form.menuType == 'top'">
<Icon
type="ios-navigate-outline"
size="16"
style="margin-right: 5px"
></Icon>
<span>顶部菜单</span>
</div>
<div v-show="form.menuType == 'page'">
<Icon
type="ios-list-box-outline"
size="16"
style="margin-right: 5px"
></Icon>
<span>页面菜单</span>
</div>
<div v-show="form.menuType == 'button'">
<Icon
type="md-radio-button-on"
size="16"
style="margin-right: 5px"
></Icon>
<span>操作按钮</span>
</div>
<div v-show="formAdd.type == -1">
<Icon type="ios-navigate-outline" size="16" style="margin-right: 5px"></Icon>
<span>顶部菜单</span>
</div>
<div v-show="formAdd.type == 0">
<Icon type="ios-list-box-outline" size="16" style="margin-right: 5px"></Icon>
<span>页面菜单</span>
</div>
<div v-show="formAdd.type == 1">
<Icon type="md-radio-button-on" size="16" style="margin-right: 5px"></Icon>
<span>操作按钮</span>
</div>
</FormItem>
<FormItem label="上级菜单" prop="parentTitle" class="form-noheight">
<div style="display: flex">
<Input
v-model="form.parentTitle"
readonly
style="margin-right: 10px"
/>
<Poptip
transfer
trigger="click"
placement="right-start"
title="选择上级菜单"
width="250"
>
<Button icon="md-list">选择菜单</Button>
<div slot="content" class="tree-bar tree-select">
<Tree
:data="dataEdit"
@on-select-change="selectTreeEdit"
></Tree>
<Spin size="large" fix v-if="loading"></Spin>
</div>
</Poptip>
</div>
</FormItem>
<FormItem
label="名称"
prop="name"
v-if="form.menuType == 'top' || form.menuType == 'page'"
>
<Input v-model="form.name" />
<FormItem label="名称" prop="name" v-if="formAdd.type == -1 || formAdd.type == 0">
<Input v-model="formAdd.name" />
</FormItem>
<FormItem
label="名称"
prop="name"
v-if="form.menuType == 'button'"
class="block-tool"
>
<Tooltip placement="right" content="操作按钮名称不得重复">
<Input v-model="form.name" />
</Tooltip>
<FormItem label="名称" prop="name" v-if="formAdd.type == 1" class="block-tool">
<Tooltip placement="right" content="操作按钮名称不得重复">
<Input v-model="formAdd.name" />
</Tooltip>
</FormItem>
<FormItem
label="标题"
prop="title"
>
<Input v-model="form.title" />
<FormItem label="标题" prop="title">
<Input v-model="formAdd.title" />
</FormItem>
<FormItem label="页面路径" prop="path">
<Input v-model="form.path" />
<FormItem label="路径" prop="path" v-if="formAdd.type == 0 || formAdd.type == 1">
<Input v-model="formAdd.path" />
</FormItem>
<FormItem
label="按钮权限类型"
prop="buttonType"
v-if="form.menuType == 'button'"
>
<dict
dict="defaultButtonPermission"
v-model="form.buttonType"
placeholder="请选择或输入搜索"
filterable
clearable
/>
<FormItem label="按钮权限类型" prop="buttonType" v-if="formAdd.type == 1">
<dict dict="defaultButtonPermission" v-model="formAdd.buttonType" placeholder="请选择或输入搜索" filterable clearable />
</FormItem>
<FormItem
label="图标"
prop="icon"
v-if="form.menuType == 'top' || form.menuType == 'page'"
>
<icon-choose
showCustom
showInput
v-model="form.icon"
></icon-choose>
<FormItem label="图标" prop="icon" v-if="formAdd.type == -1 || formAdd.type == 0">
<icon-choose showCustom showInput v-model="formAdd.icon"></icon-choose>
</FormItem>
<FormItem label="前端组件" prop="component" v-if="form.menuType == 'page'">
<Input v-model="form.component" />
<FormItem label="前端组件" prop="component" v-if="formAdd.type == 0">
<Input v-model="formAdd.component" />
</FormItem>
<FormItem label="排序值" prop="sortOrder">
<Tooltip
trigger="hover"
placement="right"
content="值越小越靠前,支持小数"
>
<InputNumber
:max="1000"
:min="0"
v-model="form.sort"
></InputNumber>
</Tooltip>
<FormItem label="排序值" prop="sort">
<Tooltip trigger="hover" placement="right" content="值越小越靠前,支持小数">
<InputNumber :max="1000" :min="0" v-model="formAdd.sort"></InputNumber>
</Tooltip>
</FormItem>
<FormItem label="是否启用" prop="status">
<i-switch
size="large"
v-model="form.status"
:true-value="1"
:false-value="0"
>
<span slot="open">启用</span>
<span slot="close">禁用</span>
</i-switch>
<i-switch size="large" v-model="formAdd.status" :true-value="1" :false-value="0">
<span slot="open">启用</span>
<span slot="close">禁用</span>
</i-switch>
</FormItem>
<FormItem>
<Button
style="margin-right: 5px"
@click="submitEdit"
:loading="submitLoading"
:disabled="!form.id || !editTitle"
type="primary"
icon="ios-create-outline"
>修改并保存</Button
>
<Button @click="handleReset">重置</Button>
</FormItem>
</Form>
</Col>
</Row>
</Card>
<Modal
draggable
:title="modalTitle"
v-model="menuModalVisible"
:mask-closable="false"
:width="500"
:styles="{ top: '30px' }"
>
<Form
ref="formAdd"
:model="formAdd"
:label-width="110"
:rules="formValidate"
>
<div v-if="showParent">
<FormItem label="上级节点:">{{ parentTitle }}</FormItem>
</Form>
<div slot="footer">
<Button type="text" @click="menuModalVisible = false">取消</Button>
<Button type="primary" :loading="submitLoading" @click="submitAdd">提交</Button>
</div>
<FormItem label="类型" prop="type">
<div v-show="formAdd.type == -1">
<Icon
type="ios-navigate-outline"
size="16"
style="margin-right: 5px"
></Icon>
<span>顶部菜单</span>
</div>
<div v-show="formAdd.type == 0">
<Icon
type="ios-list-box-outline"
size="16"
style="margin-right: 5px"
></Icon>
<span>页面菜单</span>
</div>
<div v-show="formAdd.type == 1">
<Icon
type="md-radio-button-on"
size="16"
style="margin-right: 5px"
></Icon>
<span>操作按钮</span>
</div>
</FormItem>
<FormItem
label="名称"
prop="name"
v-if="formAdd.type == -1 || formAdd.type == 0"
>
<Input v-model="formAdd.name" />
</FormItem>
<FormItem
label="名称"
prop="name"
v-if="formAdd.type == 1"
class="block-tool"
>
<Tooltip placement="right" content="操作按钮名称不得重复">
<Input v-model="formAdd.name" />
</Tooltip>
</FormItem>
<FormItem
label="标题"
prop="title"
>
<Input v-model="formAdd.title" />
</FormItem>
<FormItem label="路径" prop="path" v-if="formAdd.type == 0 || formAdd.type == 1">
<Input v-model="formAdd.path" />
</FormItem>
<FormItem
label="按钮权限类型"
prop="buttonType"
v-if="formAdd.type == 1"
>
<dict
dict="defaultButtonPermission"
v-model="formAdd.buttonType"
placeholder="请选择或输入搜索"
filterable
clearable
/>
</FormItem>
<FormItem
label="图标"
prop="icon"
v-if="formAdd.type == -1 || formAdd.type == 0"
>
<icon-choose
showCustom
showInput
v-model="formAdd.icon"
></icon-choose>
</FormItem>
<FormItem label="前端组件" prop="component" v-if="formAdd.type == 0">
<Input v-model="formAdd.component" />
</FormItem>
<FormItem label="排序值" prop="sort">
<Tooltip
trigger="hover"
placement="right"
content="值越小越靠前,支持小数"
>
<InputNumber
:max="1000"
:min="0"
v-model="formAdd.sort"
></InputNumber>
</Tooltip>
</FormItem>
<FormItem label="是否启用" prop="status">
<i-switch
size="large"
v-model="formAdd.status"
:true-value="1"
:false-value="0"
>
<span slot="open">启用</span>
<span slot="close">禁用</span>
</i-switch>
</FormItem>
</Form>
<div slot="footer">
<Button type="text" @click="menuModalVisible = false">取消</Button>
<Button type="primary" :loading="submitLoading" @click="submitAdd"
>提交</Button
>
</div>
</Modal>
</div>
</div>
</template>
<script>
import {
getAllPermissionList,
loadPermission,
addSubMenus,
editMenus,
deleteMenus,
addSubMenus,
editMenus,
deleteMenus,
} from "@/api/index";
import dict from "@/views/my-components/xboot/dict";
import IconChoose from "@/views/my-components/xboot/icon-choose";
import util from "@/libs/util.js";
export default {
name: "menu-manage",
components: {
dict,
IconChoose,
},
data() {
return {
showType: "tree",
loading: true,
strict: false,
maxHeight: "500px",
expandLevel: 3,
menuModalVisible: false,
iconModalVisible: false,
selectList: [],
showParent: false,
parentTitle: "",
editTitle: "",
modalTitle: "",
form: {
id: "",
name: "",
title: "",
icon: "",
path: "",
component: "",
parentId: "",
buttonType: "",
menuType: 0,
sort: 0,
level: 0,
status: 0,
url: "",
showAlways: true,
parentTitle: "",
},
formAdd: {
buttonType: "",
},
formValidate: {
title: [{ required: true, message: "标题不能为空", trigger: "change" }],
name: [
{ required: true, message: "名称不能为空", trigger: "change" },
],
icon: [{ required: true, message: "图标不能为空", trigger: "change" }],
path: [{ required: true, message: "路径不能为空", trigger: "change" }],
component: [
{ required: true, message: "前端组件不能为空", trigger: "change" },
],
sort: [
{
required: true,
type: "number",
message: "排序值不能为空",
trigger: "change",
},
],
},
submitLoading: false,
data: [],
dataEdit: [],
dictPermissions: [],
};
},
methods: {
init() {
this.getAllList();
name: "menu-manage",
components: {
dict,
IconChoose,
},
renderContent(h, { root, node, data }) {
let icon = "";
if (data.level == 0) {
icon = "ios-navigate";
} else if (data.level == 1) {
icon = "md-list-box";
} else if (data.level == 2) {
icon = "md-list";
} else if (data.level == 3) {
icon = "md-radio-button-on";
} else {
icon = "md-radio-button-off";
}
return h("span", [
h("span", [
h("Icon", {
props: {
type: icon,
size: "16",
data() {
return {
showType: "tree",
loading: true,
strict: false,
maxHeight: "500px",
expandLevel: 3,
menuModalVisible: false,
iconModalVisible: false,
selectList: [],
showParent: false,
parentTitle: "",
editTitle: "",
modalTitle: "",
form: {
id: "",
name: "",
title: "",
icon: "",
path: "",
component: "",
parentId: "",
buttonType: "",
menuType: 0,
sort: 0,
level: 0,
status: 0,
url: "",
showAlways: true,
parentTitle: "",
},
style: {
"margin-right": "8px",
"margin-bottom": "3px",
formAdd: {
buttonType: "",
},
}),
h("span", data.title),
]),
]);
},
handleDropdown(name) {
if (name == "expandOne") {
this.expandLevel = 1;
} else if (name == "expandTwo") {
this.expandLevel = 2;
} else if (name == "expandThree") {
this.expandLevel = 3;
}
this.getAllList();
formValidate: {
title: [{
required: true,
message: "标题不能为空",
trigger: "change"
}],
name: [{
required: true,
message: "名称不能为空",
trigger: "change"
}, ],
icon: [{
required: true,
message: "图标不能为空",
trigger: "change"
}],
path: [{
required: true,
message: "路径不能为空",
trigger: "change"
}],
component: [{
required: true,
message: "前端组件不能为空",
trigger: "change"
}, ],
sort: [{
required: true,
type: "number",
message: "排序值不能为空",
trigger: "change",
}, ],
},
submitLoading: false,
data: [],
dataEdit: [],
dictPermissions: [],
};
},
getAllList() {
this.loading = true;
this.getRequest("/permission/menu/all").then((res) => {
this.loading = false;
if (res.status == 'success') {
// 仅展开指定级数 默认后端已展开所有
let expandLevel = this.expandLevel;
res.data.list.forEach(function (e) {
if (expandLevel == 1) {
if (e.level == 0) {
e.expand = false;
}
if (e.children && e.children.length > 0) {
e.children.forEach(function (c) {
if (c.level == 1) {
c.expand = false;
}
if (c.children && c.children.length > 0) {
c.children.forEach(function (b) {
if (b.level == 2) {
b.expand = true;
}
});
}
});
}
} else if (expandLevel == 2) {
if (e.level == 0) {
e.expand = true;
}
if (e.children && e.children.length > 0) {
e.children.forEach(function (c) {
if (c.level == 1) {
c.expand = false;
}
if (c.children && c.children.length > 0) {
c.children.forEach(function (b) {
if (b.level == 2) {
b.expand = false;
}
methods: {
init() {
this.getAllList();
},
renderContent(h, {
root,
node,
data
}) {
let icon = "";
if (data.level == 0) {
icon = "ios-navigate";
} else if (data.level == 1) {
icon = "md-list-box";
} else if (data.level == 2) {
icon = "md-list";
} else if (data.level == 3) {
icon = "md-radio-button-on";
} else {
icon = "md-radio-button-off";
}
return h("span", [
h("span", [
h("Icon", {
props: {
type: icon,
size: "16",
},
style: {
"margin-right": "8px",
"margin-bottom": "3px",
},
}),
h("span", data.title),
]),
]);
},
handleDropdown(name) {
if (name == "expandOne") {
this.expandLevel = 1;
} else if (name == "expandTwo") {
this.expandLevel = 2;
} else if (name == "expandThree") {
this.expandLevel = 3;
}
this.getAllList();
},
getAllList() {
this.loading = true;
this.getRequest("/permission/menu/all").then((res) => {
this.loading = false;
if (res.status == 'success') {
// 仅展开指定级数 默认后端已展开所有
let expandLevel = this.expandLevel;
res.data.list.forEach(function (e) {
if (expandLevel == 1) {
if (e.level == 0) {
e.expand = false;
}
if (e.children && e.children.length > 0) {
e.children.forEach(function (c) {
if (c.level == 1) {
c.expand = false;
}
if (c.children && c.children.length > 0) {
c.children.forEach(function (b) {
if (b.level == 2) {
b.expand = true;
}
});
}
});
}
} else if (expandLevel == 2) {
if (e.level == 0) {
e.expand = true;
}
if (e.children && e.children.length > 0) {
e.children.forEach(function (c) {
if (c.level == 1) {
c.expand = false;
}
if (c.children && c.children.length > 0) {
c.children.forEach(function (b) {
if (b.level == 2) {
b.expand = false;
}
});
}
});
}
} else if (expandLevel == 3) {
if (e.level == 0) {
e.expand = true;
}
if (e.children && e.children.length > 0) {
e.children.forEach(function (c) {
if (c.level == 1) {
c.expand = true;
}
if (c.children && c.children.length > 0) {
c.children.forEach(function (b) {
if (b.level == 2) {
b.expand = true;
}
if (b.children && b.children.length > 0) {
b.children.forEach(function (e) {
if (e.level == 3) {
e.expand = false;
}
});
}
});
}
});
}
}
});
}
});
}
} else if (expandLevel == 3) {
if (e.level == 0) {
e.expand = true;
}
if (e.children && e.children.length > 0) {
e.children.forEach(function (c) {
if (c.level == 1) {
c.expand = true;
}
if (c.children && c.children.length > 0) {
c.children.forEach(function (b) {
if (b.level == 2) {
b.expand = true;
}
if (b.children && b.children.length > 0) {
b.children.forEach(function (e) {
if (e.level == 3) {
e.expand = false;
}
this.data = res.data.list;
let str = JSON.stringify(res.data.list);
this.dataEdit = JSON.parse(str);
// 头部加入一级
let first = {
id: "0",
level: -1,
title: "一级菜单",
};
this.dataEdit.unshift(first);
}
});
},
selectTree(v) {
if (v.length > 0) {
// 转换null为""
for (let attr in v[0]) {
if (v[0][attr] == null) {
v[0][attr] = "";
}
}
let str = JSON.stringify(v[0]);
let data = JSON.parse(str);
this.form = data;
this.editTitle = data.title;
} else {
this.cancelEdit();
}
},
selectTreeEdit(v) {
if (v.length > 0) {
// 转换null为""
for (let attr in v[0]) {
if (v[0][attr] == null) {
v[0][attr] = "";
}
}
let str = JSON.stringify(v[0]);
let data = JSON.parse(str);
if (this.form.id == data.id) {
this.$Message.warning("请勿选择自己作为父节点");
v[0].selected = false;
return;
}
if (data.level == 2) {
this.$Message.warning("请选择2级菜单节点");
v[0].selected = false;
return;
}
this.form.parentId = data.id;
let level = data.level + 1;
if (level < 0) {
level = 0;
}
this.form.level = level;
this.form.parentTitle = data.title;
}
},
cancelEdit() {
let data = this.$refs.tree.getSelectedNodes()[0];
if (data) {
data.selected = false;
}
this.$refs.form.resetFields();
this.form.id = "";
this.editTitle = "";
},
handleReset() {
let type = this.form.type;
this.$refs.form.resetFields();
this.form.icon = "";
this.form.component = "";
this.form.type = type;
},
submitEdit() {
this.$refs.form.validate((valid) => {
if (valid) {
if (!this.form.id) {
this.$Message.warning("请先点击选择要修改的菜单节点");
return;
}
this.submitLoading = true;
if (this.form.sort == null) {
this.form.sort = "";
}
if (this.form.buttonType == null) {
this.form.buttonType = "";
}
if (this.form.type == 1) {
this.form.name = "";
this.form.icon = "";
this.form.component = "";
}
editMenus(this.form).then((res) => {
this.submitLoading = false;
if (res.status == 'success') {
this.$Message.success("编辑成功");
// 标记重新获取菜单数据
this.$store.commit("setAdded", false);
util.initRouter(this);
this.init();
this.menuModalVisible = false;
}
});
}
}
});
},
submitAdd() {
this.$refs.formAdd.validate((valid) => {
if (valid) {
this.submitLoading = true;
if (this.formAdd.type == 1) {
this.formAdd.icon = ""
this.formAdd.component = ""
this.formAdd.type = 'button'
} else if (this.formAdd.type == 0)(
this.formAdd.type = 'page'
)
addSubMenus(this.formAdd).then((res) => {
this.submitLoading = false;
if (res.status == 'success') {
this.$Message.success("添加成功");
// 标记重新获取菜单数据
this.$store.commit("setAdded", false);
util.initRouter(this);
this.init();
this.menuModalVisible = false;
}
});
}
}
});
},
add() {
if (!this.form.id) {
this.$Message.warning("请先点击选择一个菜单权限节点");
return;
}
this.parentTitle = this.form.title;
this.modalTitle = "添加子菜单节点(可拖动)";
this.showParent = true;
let type = 0;
if (this.form.level == 1) {
type = 0;
} else if (this.form.level == 2) {
type = 1;
} else if (this.form.level == 3) {
this.$Modal.warning({
title: "抱歉,不能添加啦",
content: "左侧仅支持2级菜单目录",
});
}
return;
} else {
type = 0;
}
});
this.data = res.data.list;
let str = JSON.stringify(res.data.list);
this.dataEdit = JSON.parse(str);
// 头部加入一级
let first = {
id: "0",
level: -1,
title: "一级菜单",
};
this.dataEdit.unshift(first);
}
});
},
selectTree(v) {
if (v.length > 0) {
// 转换null为""
for (let attr in v[0]) {
if (v[0][attr] == null) {
v[0][attr] = "";
}
}
let str = JSON.stringify(v[0]);
let data = JSON.parse(str);
this.form = data;
this.editTitle = data.title;
} else {
this.cancelEdit();
}
},
selectTreeEdit(v) {
if (v.length > 0) {
// 转换null为""
for (let attr in v[0]) {
if (v[0][attr] == null) {
v[0][attr] = "";
}
}
let str = JSON.stringify(v[0]);
let data = JSON.parse(str);
if (this.form.id == data.id) {
this.$Message.warning("请勿选择自己作为父节点");
v[0].selected = false;
return;
}
if (data.level == 2) {
this.$Message.warning("请选择2级菜单节点");
v[0].selected = false;
return;
}
this.form.parentId = data.id;
let level = data.level + 1;
if (level < 0) {
level = 0;
}
this.form.level = level;
this.form.parentTitle = data.title;
}
},
cancelEdit() {
let data = this.$refs.tree.getSelectedNodes()[0];
if (data) {
data.selected = false;
}
this.$refs.form.resetFields();
this.form.id = "";
this.editTitle = "";
},
handleReset() {
let type = this.form.type;
this.$refs.form.resetFields();
this.form.icon = "";
this.form.component = "";
this.form.type = type;
},
submitEdit() {
this.$refs.form.validate((valid) => {
if (valid) {
if (!this.form.id) {
this.$Message.warning("请先点击选择要修改的菜单节点");
return;
}
this.submitLoading = true;
if (this.form.sort == null) {
this.form.sort = "";
}
if (this.form.buttonType == null) {
this.form.buttonType = "";
}
if (this.form.type == 1) {
this.form.name = "";
this.form.icon = "";
this.form.component = "";
}
editMenus(this.form).then((res) => {
this.submitLoading = false;
if (res.status == 'success') {
this.$Message.success("编辑成功");
// 标记重新获取菜单数据
this.$store.commit("setAdded", false);
util.initRouter(this);
this.init();
this.menuModalVisible = false;
let component = "";
if (!this.form.children) {
this.form.children = [];
}
});
}
});
},
submitAdd() {
this.$refs.formAdd.validate((valid) => {
if (valid) {
this.submitLoading = true;
if (this.formAdd.type == 1) {
this.formAdd.icon = ""
this.formAdd.component = ""
this.formAdd.type = 'button'
}else if(this.formAdd.type == 0)(
this.formAdd.type = 'page'
)
addSubMenus(this.formAdd).then((res) => {
this.submitLoading = false;
if (res.status == 'success') {
this.$Message.success("添加成功");
// 标记重新获取菜单数据
this.$store.commit("setAdded", false);
util.initRouter(this);
this.init();
this.menuModalVisible = false;
this.formAdd = {
icon: "",
type: type,
parentId: this.form.id,
level: Number(this.form.level) + 1,
sort: this.form.children.length + 1,
buttonType: "",
status: 0,
showAlways: true,
};
if (this.form.level == 0) {
this.formAdd.path = "/";
this.formAdd.component = "Main";
}
});
}
});
},
add() {
if (!this.form.id) {
this.$Message.warning("请先点击选择一个菜单权限节点");
return;
}
this.parentTitle = this.form.title;
this.modalTitle = "添加子节点(可拖动)";
this.showParent = true;
let type = 0;
if (this.form.level == 1) {
type = 0;
} else if (this.form.level == 2) {
type = 1;
} else if (this.form.level == 3) {
this.$Modal.warning({
title: "抱歉,不能添加啦",
content: "左侧仅支持2级菜单目录",
});
return;
} else {
type = 0;
}
let component = "";
if (!this.form.children) {
this.form.children = [];
}
this.formAdd = {
icon: "",
type: type,
parentId: this.form.id,
level: Number(this.form.level) + 1,
sort: this.form.children.length + 1,
buttonType: "",
status: 0,
showAlways: true,
};
if (this.form.level == 0) {
this.formAdd.path = "/";
this.formAdd.component = "Main";
}
this.menuModalVisible = true;
},
changeSelect(v) {
this.selectList = v;
},
showSelect(e) {
this.selectList = e;
},
clearSelectAll() {
this.$refs.table.selectAll(false);
},
remove(v) {
this.selectList = [];
this.selectList.push(v);
this.delAll();
},
delAll() {
if (this.selectList.length <= 0) {
this.$Message.warning("您还未勾选要删除的数据");
return;
}
this.$Modal.confirm({
title: "确认删除",
content:
"您确认要删除所选的 " +
this.selectList.length +
" 条数据及其下级所有数据?",
loading: true,
onOk: () => {
let ids = "";
this.selectList.forEach(function (e) {
ids += e.id + ",";
});
ids = ids.substring(0, ids.length - 1);
deleteMenus({ ids: ids }).then((res) => {
this.$Modal.remove();
if (res.status == 'success') {
this.$Message.success("删除成功");
// 标记重新获取菜单数据
this.$store.commit("setAdded", false);
util.initRouter(this);
this.selectList = [];
this.cancelEdit();
this.init();
this.menuModalVisible = true;
},
changeSelect(v) {
this.selectList = v;
},
showSelect(e) {
this.selectList = e;
},
clearSelectAll() {
this.$refs.table.selectAll(false);
},
remove(v) {
this.selectList = [];
this.selectList.push(v);
this.delAll();
},
delAll() {
if (this.selectList.length <= 0) {
this.$Message.warning("您还未勾选要删除的数据");
return;
}
});
this.$Modal.confirm({
title: "确认删除",
content: "您确认要删除所选的 " +
this.selectList.length +
" 条数据及其下级所有数据?",
loading: true,
onOk: () => {
let ids = "";
this.selectList.forEach(function (e) {
ids += e.id + ",";
});
ids = ids.substring(0, ids.length - 1);
deleteMenus({
ids: ids
}).then((res) => {
this.$Modal.remove();
if (res.status == 'success') {
this.$Message.success("删除成功");
// 标记重新获取菜单数据
this.$store.commit("setAdded", false);
util.initRouter(this);
this.selectList = [];
this.cancelEdit();
this.init();
}
});
},
});
},
});
},
},
mounted() {
// 计算高度
let height = document.documentElement.clientHeight;
this.maxHeight = Number(height - 287) + "px";
this.init();
},
mounted() {
// 计算高度
let height = document.documentElement.clientHeight;
this.maxHeight = Number(height - 287) + "px";
this.init();
},
};
</script>
\ No newline at end of file
</script>
......@@ -11,14 +11,15 @@
<Button @click="delAll" icon="md-trash">批量删除</Button>
<Button @click="init" icon="md-refresh">刷新</Button>
</Row>
<Alert show-icon v-show="openTip">
<Divider />
<div>
已选择
<span class="select-count">{{ selectList.length }}</span>
<a class="select-clear" @click="clearSelectAll">清空</a>
</Alert>
<Table :loading="loading" border :columns="columns" :data="data" ref="table" sortable="custom" @on-sort-change="changeSort" @on-selection-change="changeSelect"></Table>
</div>
<Table stripe border class="tableInfoBox" :loading="loading" :columns="columns" :data="data" ref="table" sortable="custom" @on-sort-change="changeSort" @on-selection-change="changeSelect"></Table>
<Row type="flex" justify="end" class="page">
<Page :current="searchForm.pageNumber" :total="total" :page-size="searchForm.pageSize" @on-change="changePage" @on-page-size-change="changePageSize" :page-size-opts="[10, 20, 50]" size="small" show-total show-elevator show-sizer></Page>
<Page :current="searchForm.pageNumber" :total="total" :page-size="searchForm.pageSize" @on-change="changePage" @on-page-size-change="changePageSize" :page-size-opts="[10, 20, 50]" show-total show-sizer></Page>
</Row>
</Card>
......
......@@ -35,19 +35,23 @@
<DropdownItem name="refresh">刷新</DropdownItem>
</DropdownMenu>
</Dropdown>
</Col>
<Col span="12">
<div style="text-align:right;">
<Button icon="ios-search" style="margin-top:10px" type="text" @click="openSearch = !openSearch">关闭/开启搜索</Button>
</div>
</Col>
</Col>
<Col span="12" style="text-align:right">
<Button icon="ios-search" type="dashed" @click="openSearch = !openSearch">开启/关闭搜索</Button>
</Col>
</Row>
<Alert show-icon v-show="openTip">
已选择
<span class="select-count">{{ this.selectList.length }}</span>
<a class="select-clear" @click="clearSelectAll">清空</a>
</Alert>
<Table :loading="loading" border :columns="columns" :data="data" sortable="custom" @on-sort-change="changeSort" @on-selection-change="showSelect" ref="table"></Table>
<Divider />
<Row>
<Col span="3">
<div style="display:inline-block;vertical-align: middle;">
已选择
<span class="select-count">{{ selectList.length }}</span>
<a class="select-clear" @click="clearSelectAll">清空</a>
</div>
</Col>
</Row>
<Table stripe border class="tableInfoBox" :loading="loading" :columns="columns" :data="data" sortable="custom" @on-sort-change="changeSort" @on-selection-change="showSelect"></Table>
<Row type="flex" justify="end" class="page">
<Page :current="searchForm.pageNumber" :total="total" :page-size="searchForm.pageSize" @on-change="changePage" @on-page-size-change="changePageSize" :page-size-opts="[10, 20, 50]" size="small" show-total show-elevator show-sizer></Page>
</Row>
......@@ -64,8 +68,6 @@ import {
enableUser,
disableUser,
deleteUser,
getAllUserData,
resetUserPass,
} from "@/api/index";
import addEdit from "./addEdit.vue";
import {
......@@ -115,27 +117,23 @@ export default {
type: "selection",
width: 60,
align: "center",
fixed: "left",
},
{
type: "index",
width: 60,
align: "center",
fixed: "left",
},
{
title: "登录账号",
key: "username",
minWidth: 125,
sortable: true,
fixed: "left",
},
{
title: "用户名",
key: "nickname",
minWidth: 125,
sortable: true,
fixed: "left",
render: (h, params) => {
return h(
"a", {
......@@ -159,7 +157,7 @@ export default {
title: "类型",
key: "type",
align: "center",
width: 110,
width: 150,
render: (h, params) => {
let re = "",
color = "";
......@@ -181,31 +179,12 @@ export default {
),
]);
},
filters: [{
label: "普通用户",
value: 0,
},
{
label: "管理员",
value: 1,
},
],
filterMultiple: false,
filterRemote: (e) => {
let v = "";
if (e.length > 0) {
v = e[0];
}
this.searchForm.type = v;
this.searchForm.pageNumber = 1;
this.getDataList();
},
},
{
title: "状态",
key: "status",
align: "center",
width: 100,
width: 150,
render: (h, params) => {
if (params.row.status == 1) {
return h("div", [
......@@ -227,25 +206,6 @@ export default {
]);
}
},
filters: [{
label: "启用",
value: 1,
},
{
label: "禁用",
value: 0,
},
],
filterMultiple: false,
filterRemote: (e) => {
let v = "";
if (e.length > 0) {
v = e[0];
}
this.searchForm.status = v;
this.searchForm.pageNumber = 1;
this.getDataList();
},
},
{
title: "所在角色组",
......@@ -467,7 +427,7 @@ export default {
onOk: () => {
enableUser(v.id).then((res) => {
this.$Modal.remove();
if (res.success) {
if (res.status == 'success') {
this.$Message.success("操作成功");
this.getDataList();
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment