|
|
|
|
@ -36,6 +36,16 @@
|
|
|
|
|
v-hasPermi="['system:menu:add']"
|
|
|
|
|
>新增</el-button>
|
|
|
|
|
</el-col>
|
|
|
|
|
<el-col :span="1.5">
|
|
|
|
|
<el-button
|
|
|
|
|
type="warning"
|
|
|
|
|
plain
|
|
|
|
|
icon="el-icon-check"
|
|
|
|
|
size="mini"
|
|
|
|
|
@click="handleSaveSort"
|
|
|
|
|
v-hasPermi="['system:menu:edit']"
|
|
|
|
|
>保存排序</el-button>
|
|
|
|
|
</el-col>
|
|
|
|
|
<el-col :span="1.5">
|
|
|
|
|
<el-button
|
|
|
|
|
type="info"
|
|
|
|
|
@ -62,7 +72,11 @@
|
|
|
|
|
<svg-icon :icon-class="scope.row.icon" />
|
|
|
|
|
</template>
|
|
|
|
|
</el-table-column>
|
|
|
|
|
<el-table-column prop="orderNum" label="排序" width="60"></el-table-column>
|
|
|
|
|
<el-table-column prop="orderNum" label="排序" width="200">
|
|
|
|
|
<template slot-scope="scope">
|
|
|
|
|
<el-input-number v-model="scope.row.orderNum" controls-position="right" :min="0" size="mini" style="width: 88px" />
|
|
|
|
|
</template>
|
|
|
|
|
</el-table-column>
|
|
|
|
|
<el-table-column prop="perms" label="权限标识" :show-overflow-tooltip="true"></el-table-column>
|
|
|
|
|
<el-table-column prop="component" label="组件路径" :show-overflow-tooltip="true"></el-table-column>
|
|
|
|
|
<el-table-column prop="status" label="状态" width="80">
|
|
|
|
|
@ -299,7 +313,7 @@
|
|
|
|
|
</template>
|
|
|
|
|
|
|
|
|
|
<script>
|
|
|
|
|
import { listMenu, getMenu, delMenu, addMenu, updateMenu } from "@/api/system/menu"
|
|
|
|
|
import { listMenu, getMenu, delMenu, addMenu, updateMenu, updateMenuSort } from "@/api/system/menu"
|
|
|
|
|
import Treeselect from "@riophae/vue-treeselect"
|
|
|
|
|
import "@riophae/vue-treeselect/dist/vue-treeselect.css"
|
|
|
|
|
import IconSelect from "@/components/IconSelect"
|
|
|
|
|
@ -326,6 +340,8 @@ export default {
|
|
|
|
|
isExpandAll: false,
|
|
|
|
|
// 重新渲染表格状态
|
|
|
|
|
refreshTable: true,
|
|
|
|
|
// 记录原始排序,用于对比变更
|
|
|
|
|
originalOrders: {},
|
|
|
|
|
// 查询参数
|
|
|
|
|
queryParams: {
|
|
|
|
|
menuName: undefined,
|
|
|
|
|
@ -360,6 +376,8 @@ export default {
|
|
|
|
|
this.loading = true
|
|
|
|
|
listMenu(this.queryParams).then(response => {
|
|
|
|
|
this.menuList = this.handleTree(response.data, "menuId")
|
|
|
|
|
// 记录原始排序值
|
|
|
|
|
this.recordOriginalOrders(this.menuList)
|
|
|
|
|
this.loading = false
|
|
|
|
|
})
|
|
|
|
|
},
|
|
|
|
|
@ -463,6 +481,40 @@ export default {
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
},
|
|
|
|
|
/** 递归记录原始排序 */
|
|
|
|
|
recordOriginalOrders(list) {
|
|
|
|
|
list.forEach(item => {
|
|
|
|
|
this.originalOrders[item.menuId] = item.orderNum
|
|
|
|
|
if (item.children && item.children.length) {
|
|
|
|
|
this.recordOriginalOrders(item.children)
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
},
|
|
|
|
|
/** 保存排序 */
|
|
|
|
|
handleSaveSort() {
|
|
|
|
|
const changedMenuIds = []
|
|
|
|
|
const changedOrderNums = []
|
|
|
|
|
const collectChanged = (list) => {
|
|
|
|
|
list.forEach(item => {
|
|
|
|
|
if (String(this.originalOrders[item.menuId]) !== String(item.orderNum)) {
|
|
|
|
|
changedMenuIds.push(item.menuId)
|
|
|
|
|
changedOrderNums.push(item.orderNum)
|
|
|
|
|
}
|
|
|
|
|
if (item.children && item.children.length) {
|
|
|
|
|
collectChanged(item.children)
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
collectChanged(this.menuList)
|
|
|
|
|
if (changedMenuIds.length === 0) {
|
|
|
|
|
this.$modal.msgWarning("未检测到排序修改")
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
updateMenuSort({ menuIds: changedMenuIds.join(","), orderNums: changedOrderNums.join(",") }).then(() => {
|
|
|
|
|
this.$modal.msgSuccess("排序保存成功")
|
|
|
|
|
this.recordOriginalOrders(this.menuList)
|
|
|
|
|
})
|
|
|
|
|
},
|
|
|
|
|
/** 删除按钮操作 */
|
|
|
|
|
handleDelete(row) {
|
|
|
|
|
this.$modal.confirm('是否确认删除名称为"' + row.menuName + '"的数据项?').then(function() {
|
|
|
|
|
|