Files
UNION_HUTB/target/classes/views/platform/mainPage/needItems.html
T
2026-09-09 09:14:28 +08:00

472 lines
20 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" ref="table" :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="4">
<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="20">
<el-table :data="menuData" ref="menuData">
<el-table-column align="center" label="标题" prop="title">
<template v-slot="{row}">
<el-input v-model="row.title" placeholder="请填写标题"></el-input>
</template>
</el-table-column>
<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" label="移动端地址" prop="color">
<template v-slot="{row}">
<el-input v-model="row.mobileHref" placeholder="请填写移动端地址"></el-input>
</template>
</el-table-column>
<el-table-column align="center" label="表名" prop="queryTable">
<template v-slot="{row}">
<el-select @change="(val) => {queryTableChange(val, row)}" style="width: 100%"
filterable placeholder="请选择表名" v-model="row.queryTable">
<el-option
:key="item.TABLE_NAME"
:label="item.TABLE_NAME"
:value="item.TABLE_NAME"
v-for="item in queryTableList">
</el-option>
</el-select>
</template>
</el-table-column>
<el-table-column align="center" label="字段名" prop="queryColumn">
<template v-slot="{row}">
<el-select style="width: 100%" placeholder="请选择字段名"
filterable v-model="row.queryColumn">
<el-option
:key="item.COLUMN_NAME"
:label="item.COLUMN_NAME"
:value="item.COLUMN_NAME"
v-for="item in row.columnList">
</el-option>
</el-select>
</template>
</el-table-column>
<el-table-column align="center" label="审核值" prop="stateId">
<template v-slot="{row}">
<el-cascader :options="stateList" :props="props" v-model="row.stateArray"
:show-all-levels="false" @change="(node) => stateChange(node, row)"
filterable placeholder="请选择审核值" style="width: 100%"></el-cascader>
</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="名称">{{ 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.mobileHref }}</el-descriptions-item>
<el-descriptions-item label="创建时间">{{ viewData.creatTime }}</el-descriptions-item>
<el-descriptions-item label="表名">{{ viewData.queryTable }}</el-descriptions-item>
<el-descriptions-item label="字段名">{{ viewData.queryColumn }}</el-descriptions-item>
<el-descriptions-item label="状态">{{ viewData.stateName }}</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>
const 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: {},
dataBaseList: [],
stateList: [],
queryTableList: [],
stateOptions: [],
props: {
lazy: false,
checkStrictly: true,
multiple: false,
}
}
},
watch: {
filterText(val) {
this.$refs.tree.filter(val);
}
},
methods: {
stateChange(node, row) {
if(node.length > 0) {
row.stateId = node[node.length - 1]
}
},
queryTableChange(val, row) {
this.getColumnList(val, row)
},
async getColumnList(base, row) {
const resp = await $.get('/platform/needItems/columns', {
tableName: base,
})
this.$set(row, 'columnList', resp.data)
},
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.queryTable === '' || item.queryTable === undefined) {
this.$message.warning('表名不能为空')
isNext = true
return
}
if (item.queryColumn === '' || item.queryColumn === undefined) {
this.$message.warning('字段名不能为空')
isNext = true
return
}
if (item.stateId === '' || item.stateId === undefined) {
this.$message.warning('状态不能为空')
isNext = true
return
}
})
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/needItems/doHandle', {data: JSON.stringify(this.menuData)})
if(resp.code === 0) {
this.doSearch()
this.$message.success(resp.msg)
this.$refs.table.clearSelection()
this.$refs.guava.index()
}
},
deleteRow(row, index) {
this.menuData.splice(index, 1)
this.$refs.tree.setCheckedNodes(this.menuData)
},
openAdd() {
this.menuData = []
this.selections = []
this.defaultShowNodes = []
this.$refs.guava.edit()
this.$nextTick(() => {
this.$refs.table.clearSelection()
})
},
filterNode(value, data, node) {
if (!value) return true;
return data.name.indexOf(value) !== -1
},
async openView(row) {
this.stateList.forEach(item => {
item.children.forEach(o => {
if(o.value === row.stateId) {
row.stateName = o.label
}
})
})
this.viewData = row
this.$refs.guava.view()
},
async openEdit() {
if(this.selections.length === 0) {
this.$message.warning('请先在下方勾选')
return
}
for (const item of this.selections) {
await this.getColumnList(item.queryTable, item)
this.stateList.forEach(x => {
x.children.forEach(o => {
if(o.value === item.stateId) {
item.stateArray = [x.value, o.value]
}
})
})
}
this.$refs.guava.edit()
this.menuData = this.selections
this.$nextTick(() => {
this.$refs.tree.setCheckedKeys(this.menuData.map(o => o.menuId))
this.defaultShowNodes = this.menuData.map(o => o.menuId)
})
},
doDelete(id) {
this.$confirm('您确定要删除吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
callback: async (a, b) => {
if ("confirm" === a) {//确认后再执行
const resp = await $.post('/platform/needItems/doDelete', {id: id})
if(resp.code === 0) {
this.$message.success(resp.msg)
this.doSearch()
}
}
}
})
},
pageData() {
$.post('/platform/needItems/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
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.title = cloneItem.parentName
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 getTableList() {
const resp = await $.get('/platform/needItems/getTableList')
this.queryTableList = resp.data
},
async getStateList() {
const resp = await $.get('/platform/needItems/getStateList')
this.stateList = resp.data
}
},
async created() {
await this.getMenuTreeselect()
await this.getTableList()
await this.getStateList()
this.pageData()
},
})
</script>
<!--#
}
#-->