Files
UNION_NSI/target/classes/views/platform/mainPage/quickEntry.html
T
2026-09-08 19:49:21 +08:00

362 lines
12 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!--#
layout("/layouts/platform.html"){
#-->
<style>
.el-descriptions__table {
table-layout: fixed !important;
}
.el-descriptions-item__cell {
text-align: center !important;
}
/* 隐藏掉el-tree中有disabled属性的框框 */
.el-checkbox__input.is-disabled{
//display: none;
}
.el-upload__tip {
display: none !important;
}
.uploadSource {
display: none!important;
}
.el-upload {
width: auto!important;
}
.el-tree {
height: 700px;
overflow-y: auto;
}
.svg-icon {
font-size: 60px;
}
</style>
<div id="app" v-cloak>
<guava ref="guava">
<template>
<el-card shadow="never">
<div class="search">
<div class="search-item">
<div class="search-item-label" v-html="'名&emsp;&emsp;称:'"></div>
<div class="search-item-option">
<el-input clearable placeholder="请填写名称查询" style="width: 350px;"
v-model="pageForm.name"></el-input>
</div>
</div>
<div class="search-query">
<el-button @click="doSearch" icon="el-icon-search" type="primary">搜索</el-button>
</div>
</div>
</el-card>
<el-card class="mt10" shadow="never">
<table-tool :app="this" label="快速入口列表" ref="tableTool">
<template #func>
<el-button icon="el-icon-plus" @click="openAdd" size="small" type="primary">新增快速入口</el-button>
<el-button @click="openEdit" size="small" type="primary">批量编辑</el-button>
</template>
</table-tool>
<el-table :data="tableData" :row-key="(row)=>row.id" @selection-change="(val)=>{selections = val}">
<el-table-column reserve-selection type="selection" width="55"></el-table-column>
<el-table-column :index="indexMethod" align="center" header-align="center" label="序号" type="index"
width="80px"></el-table-column>
<el-table-column
:label="column.label"
:prop="column.prop"
:sortable="column.sortable"
align="center"
header-align="center"
show-overflow-tooltip
v-for="column in tableColumns"
>
</el-table-column>
<el-table-column align="center" header-align="center" label="操作" width="260">
<template v-slot="scope">
<el-button @click="openView(scope.row)" size="mini" type="primary">查看</el-button>
<el-button @click="doDelete(scope.row.id)" size="mini" type="danger">删除</el-button>
</template>
</el-table-column>
</el-table>
<el-row class="el-pagination-container">
<el-pagination
:current-page="pageForm.pageNumber"
:page-size="pageForm.pageSize"
:page-sizes="[5,10, 20, 30, 50]"
:total="pageForm.totalCount"
@current-change="pageNumberChange"
@size-change="pageSizeChange"
layout="total, sizes, prev, pager, next, jumper">
</el-pagination>
</el-row>
</el-card>
</template>
<template #edit>
<el-row :gutter="20">
<el-col :span="5">
<div>
<el-input
placeholder="输入关键字进行查找"
v-model="filterText">
</el-input>
</div>
<el-tree
class="tree-border"
:data="menuOptions"
:check-on-click-node="true"
show-checkbox
ref="tree"
:filter-node-method="filterNode"
:default-expanded-keys="defaultShowNodes"
node-key="id"
empty-text="加载中,请稍候"
@check-change="checkChange"
:props="defaultProps"
></el-tree>
</el-col>
<el-col :span="19">
<el-table :data="menuData" ref="menuData">
<el-table-column align="center" label="名称" prop="name">
<template v-slot="{row}">
<el-input v-model="row.name" placeholder="请填写名称"></el-input>
</template>
</el-table-column>
<el-table-column align="center" label="编码" prop="code">
<template v-slot="{row}">
<el-input v-model="row.code" placeholder="请填写编码"></el-input>
</template>
</el-table-column>
<el-table-column align="center" label="菜单地址" prop="href">
<template v-slot="{row}">
<el-input readonly v-model="row.href" placeholder="请填写菜单地址"></el-input>
</template>
</el-table-column>
<el-table-column align="center" label="图标(pngjpg)" prop="icon">
<template v-slot="{row, $index}">
<image-Upload :height="100" :width="100" :limit="1" :file-type="['png', 'jpg']" :file-size="1"
v-model="row.iconClass"></image-Upload>
</template>
</el-table-column>
<el-table-column align="center" label="颜色" prop="color">
<template v-slot="{row}">
<el-color-picker v-model="row.color"></el-color-picker>
</template>
</el-table-column>
<el-table-column align="center" header-align="center" label="操作">
<template v-slot="{row, $index}">
<el-button @click="deleteRow(row, $index)" size="mini" type="danger">删除</el-button>
</template>
</el-table-column>
</el-table>
<div style="float: right;margin: 20px 0">
<el-button @click="$refs.guava.index()">取 消</el-button>
<el-button type="primary" @click="doHandle">确 定</el-button>
</div>
</el-col>
</el-row>
</template>
<template #view>
<el-descriptions :column="2" border>
<el-descriptions-item label="名称" :span="2">{{ viewData.name }}</el-descriptions-item>
<el-descriptions-item label="编码">{{ viewData.code }}</el-descriptions-item>
<el-descriptions-item label="颜色">{{ viewData.color }}</el-descriptions-item>
<el-descriptions-item label="菜单地址">{{ viewData.href }}</el-descriptions-item>
<el-descriptions-item label="创建时间">{{ viewData.creatTime }}</el-descriptions-item>
<el-descriptions-item label="图标" :span="2">
<img :src="CREATE_PREVIEW_URL(viewData.iconClass)" width="100" height="100"/>
</el-descriptions-item>
</el-descriptions>
</template>
</guava>
</div>
<script>
var vue = new Vue({
el: '#app',
mixins: [initTableMixins],
data() {
return {
tableColumns: [
{prop: 'name', label: '名称'},
{prop: 'code', label: '编码'},
],
defaultProps: {
children: "children",
label: "name"
},
menuOptions: [],
filterText: '',
menuData: [],
selections: [],
defaultShowNodes: [],
viewData: {},
}
},
watch: {
filterText(val) {
this.$refs.tree.filter(val);
}
},
methods: {
async doHandle() {
let isNext = false
this.menuData.forEach(item => {
if (item.name === '' || item.name === undefined) {
this.$message.warning('名称不能为空')
isNext = true
return
}
if (item.code === '' || item.code === undefined) {
this.$message.warning('编码不能为空')
isNext = true
return
}
if (item.color === '' || item.color === undefined) {
this.$message.warning('颜色不能为空')
isNext = true
}
})
if (isNext) {
return
}
for (const item of this.menuData) {
if(item.iconClass === undefined) {
this.$message.warning('图标不能为空')
isNext = true
return
}
}
if (isNext) {
return
}
const resp = await $.post('/platform/quickEntry/doHandle', {data: JSON.stringify(this.menuData)})
if(resp.code === 0) {
this.doSearch()
this.$message.success(resp.msg)
this.$refs.menuData.clearSelection()
this.$refs.guava.index()
}
},
deleteRow(row, index) {
this.menuData.splice(index, 1)
this.$refs.tree.setCheckedNodes(this.menuData)
},
openAdd() {
this.$refs.guava.edit()
this.$nextTick(() => {
this.menuData = []
this.$refs.tree.setCheckedKeys([])
})
},
filterNode(value, data, node) {
if (!value) return true;
return data.name.indexOf(value) !== -1
},
openView(row) {
this.viewData = row
this.$refs.guava.view()
},
async openEdit() {
if(this.selections.length === 0) {
this.$message.warning('请先在下方勾选')
return
}
this.menuData = this.selections
this.$nextTick(() => {
this.$refs.tree.setCheckedKeys(this.menuData.map(o => o.menuId))
this.defaultShowNodes = this.menuData.map(o => o.menuId)
})
this.$refs.guava.edit()
},
doDelete(id) {
this.$confirm('您确定要删除吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
callback: async (a, b) => {
if ("confirm" === a) {//确认后再执行
const resp = await $.post('/platform/quickEntry/doDelete', {id: id})
if(resp.code === 0) {
this.$message.success(resp.msg)
this.doSearch()
}
}
}
})
},
pageData() {
$.post('/platform/quickEntry/pageData', this.pageForm,).then(res => {
if (res.code === 0) {
this.tableData = res.data.list;
this.pageForm.totalCount = res.data.totalCount;
}
})
},
/** 查询菜单树结构 */
async getMenuTreeselect() {
const resp = await $.post('/platform/sys/menu/menuAll')
this.menuOptions = resp.data.filter(v=>!v.disabled)
this.setDisabled(this.menuOptions)
},
checkChange(currObj,isChecked) {
/* if(isChecked) { // 选中之后我们就重新设置下选中的节点(只设置当前选中的节点,即单选)
this.$refs.tree.setCheckedNodes([currObj])
} */
//this.menuData = this.$refs.tree.getCheckedNodes()
const array = []
this.$refs.tree.getCheckedNodes().forEach(item => {
let cloneItem = clone(item)
cloneItem.menuId = cloneItem.id
delete cloneItem.id
cloneItem.color = this.themeColor
const obj = this.selections.find(o => o.menuId === cloneItem.menuId)
array.push(obj !== undefined ? obj : cloneItem)
})
this.menuData = array
},
setDisabled(treeData) {
treeData.forEach(item => {
if(!item.href) {
item.disabled = true
}
if(item.children && item.children.length) {
this.setDisabled(item.children)
}
})
},
},
async created() {
await this.getMenuTreeselect()
this.pageData()
},
})
</script>
<!--#
}
#-->