You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
house/fount/modules/config/list.vue

520 lines
23 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<template>
<!-- 主容器块 -->
<div class="main-content">
<!-- 列表页显示条件 -->
<div v-if="showFlag">
<!-- -->
<el-form :inline="true" :model="searchForm" class="form-content">
<!-- 搜索框布局 -->
<el-row :gutter="20" class="slt" :style="{justifyContent:contents.searchBoxPosition=='1'?'flex-start':contents.searchBoxPosition=='2'?'center':'flex-end'}">
<!-- 名称输入框 -->
<el-form-item :label="contents.inputTitle == 1 ? '名称' : ''">
<!-- 带前置图标的输入框 -->
<el-input v-if="contents.inputIcon == 1 && contents.inputIconPosition == 1" prefix-icon="el-icon-search" v-model="searchForm.name" placeholder="名称" clearable></el-input>
<!-- 带后置图标的输入框 -->
<el-input v-if="contents.inputIcon == 1 && contents.inputIconPosition == 2" suffix-icon="el-icon-search" v-model="searchForm.name" placeholder="名称" clearable></el-input>
<!-- 无图标输入框 -->
<el-input v-if="contents.inputIcon == 0" v-model="searchForm.name" placeholder="名称" clearable></el-input>
</el-form-item>
<!-- 查询按钮 -->
<el-form-item>
<!-- 带前置图标的查询按钮 -->
<el-button v-if="contents.searchBtnIcon == 1 && contents.searchBtnIconPosition == 1" icon="el-icon-search" type="success" @click="search()">{{ contents.searchBtnFont == 1?'查询':'' }}</el-button>
<!-- 带后置图标的查询按钮 -->
<el-button v-if="contents.searchBtnIcon == 1 && contents.searchBtnIconPosition == 2" type="success" @click="search()">{{ contents.searchBtnFont == 1?'查询':'' }}<i class="el-icon-search el-icon--right"/></el-button>
<!-- 无图标查询按钮 -->
<el-button v-if="contents.searchBtnIcon == 0" type="success" @click="search()">{{ contents.searchBtnFont == 1?'查询':'' }}</el-button>
</el-form-item>
</el-row>
<!-- 按钮组布局 -->
<el-row class="ad" :style="{justifyContent:contents.btnAdAllBoxPosition=='1'?'flex-start':contents.btnAdAllBoxPosition=='2'?'center':'flex-end'}">
<el-form-item>
<!-- 新增按钮(带前置图标) -->
<el-button
v-if="isAuth('config','新增') && contents.btnAdAllIcon == 1 && contents.btnAdAllIconPosition == 1"
type="success"
icon="el-icon-plus"
@click="addOrUpdateHandler()"
>{{ contents.btnAdAllFont == 1?'新增':'' }}</el-button>
<!-- 新增按钮(带后置图标) -->
<el-button
v-if="isAuth('config','新增') && contents.btnAdAllIcon == 1 && contents.btnAdAllIconPosition == 2"
type="success"
@click="addOrUpdateHandler()"
>{{ contents.btnAdAllFont == 1?'新增':'' }}<i class="el-icon-plus el-icon--right" /></el-button>
<!-- 新增按钮(无图标) -->
<el-button
v-if="isAuth('config','新增') && contents.btnAdAllIcon == 0"
type="success"
@click="addOrUpdateHandler()"
>{{ contents.btnAdAllFont == 1?'新增':'' }}</el-button>
<!-- 删除按钮(带前置图标) -->
<el-button
v-if="isAuth('config','删除') && contents.btnAdAllIcon == 1 && contents.btnAdAllIconPosition == 1 && contents.tableSelection"
:disabled="dataListSelections.length <= 0"
type="danger"
icon="el-icon-delete"
@click="deleteHandler()"
>{{ contents.btnAdAllFont == 1?'删除':'' }}</el-button>
<!-- 删除按钮(带后置图标) -->
<el-button
v-if="isAuth('config','删除') && contents.btnAdAllIcon == 1 && contents.btnAdAllIconPosition == 2 && contents.tableSelection"
:disabled="dataListSelections.length <= 0"
type="danger"
@click="deleteHandler()"
>{{ contents.btnAdAllFont == 1?'删除':'' }}<i class="el-icon-delete el-icon--right" /></el-button>
<!-- 删除按钮(无图标) -->
<el-button
v-if="isAuth('config','删除') && contents.btnAdAllIcon == 0 && contents.tableSelection"
:disabled="dataListSelections.length <= 0"
type="danger"
@click="deleteHandler()"
>{{ contents.btnAdAllFont == 1?'删除':'' }}</el-button>
</el-form-item>
</el-row>
</el-form>
<!-- 数据表格 -->
<div class="table-content">
<el-table class="tables" :size="contents.tableSize" :show-header="contents.tableShowHeader"
:header-row-style="headerRowStyle" :header-cell-style="headerCellStyle"
:border="contents.tableBorder"
:fit="contents.tableFit"
:stripe="contents.tableStripe"
:row-style="rowStyle"
:cell-style="cellStyle"
:style="{width: '100%',fontSize:contents.tableContentFontSize,color:contents.tableContentFontColor}"
v-if="isAuth('config','查看')"
:data="dataList"
v-loading="dataListLoading"
@selection-change="selectionChangeHandler">
<!-- 多选列 -->
<el-table-column v-if="contents.tableSelection"
type="selection"
header-align="center"
align="center"
width="50">
</el-table-column>
<!-- 索引列 -->
<el-table-column label="索引" v-if="contents.tableIndex" type="index" width="50" />
<!-- 名称列 -->
<el-table-column :sortable="contents.tableSortable" :align="contents.tableAlign"
prop="name"
header-align="center"
label="名称">
<template slot-scope="scope">
{{scope.row.name}} <!-- 显示名称字段 -->
</template>
</el-table-column>
<!-- 值列 -->
<el-table-column :sortable="contents.tableSortable" :align="contents.tableAlign" prop="value"
header-align="center"
width="200"
label="值">
<template slot-scope="scope">
<div v-if="scope.row.value"> <!-- 如果存在值,显示图片 -->
<img :src="scope.row.value.split(',')[0]" width="100" height="100">
</div>
<div v-else>无图片</div> <!-- 否则显示“无图片” -->
</template>
</el-table-column>
<!-- 操作列 -->
<el-table-column width="300" :align="contents.tableAlign"
header-align="center"
label="操作">
<template slot-scope="scope">
<!-- 查看详情按钮(带前置图标) -->
<el-button v-if="isAuth('config','查看') && contents.tableBtnIcon == 1 && contents.tableBtnIconPosition == 1" type="success" icon="el-icon-tickets" size="mini" @click="addOrUpdateHandler(scope.row.id,'info')">{{ contents.tableBtnFont == 1?'详情':'' }}</el-button>
<!-- 查看详情按钮(带后置图标) -->
<el-button v-if="isAuth('config','查看') && contents.tableBtnIcon == 1 && contents.tableBtnIconPosition == 2" type="success" size="mini" @click="addOrUpdateHandler(scope.row.id,'info')">{{ contents.tableBtnFont == 1?'详情':'' }}<i class="el-icon-tickets el-icon--right" /></el-button>
<!-- 查看详情按钮(无图标) -->
<el-button v-if="isAuth('config','查看') && contents.tableBtnIcon == 0" type="success" size="mini" @click="addOrUpdateHandler(scope.row.id,'info')">{{ contents.tableBtnFont == 1?'详情':'' }}</el-button>
<!-- 修改按钮(带前置图标) -->
<el-button v-if="isAuth('config','修改') && contents.tableBtnIcon == 1 && contents.tableBtnIconPosition == 1" type="primary" icon="el-icon-edit" size="mini" @click="addOrUpdateHandler(scope.row.id)">{{ contents.tableBtnFont == 1?'修改':'' }}</el-button>
<!-- 修改按钮(带后置图标) -->
<el-button v-if="isAuth('config','修改') && contents.tableBtnIcon == 1 && contents.tableBtnIconPosition == 2" type="primary" size="mini" @click="addOrUpdateHandler(scope.row.id)">{{ contents.tableBtnFont == 1?'修改':'' }}<i class="el-icon-edit el-icon--right" /></el-button>
<!-- 修改按钮(无图标) -->
<el-button v-if="isAuth('config','修改') && contents.tableBtnIcon == 0" type="primary" size="mini" @click="addOrUpdateHandler(scope.row.id)">{{ contents.tableBtnFont == 1?'修改':'' }}</el-button>
<!-- 删除按钮(带前置图标) -->
<el-button v-if="isAuth('config','删除') && contents.tableBtnIcon == 1 && contents.tableBtnIconPosition == 1" type="danger" icon="el-icon-delete" size="mini" @click="deleteHandler(scope.row.id)">{{ contents.tableBtnFont == 1?'删除':'' }}</el-button>
<!-- 删除按钮(带后置图标) -->
<el-button v-if="isAuth('config','删除') && contents.tableBtnIcon == 1 && contents.tableBtnIconPosition == 2" type="danger" size="mini" @click="deleteHandler(scope.row.id)">{{ contents.tableBtnFont == 1?'删除':'' }}<i class="el-icon-delete el-icon--right" /></el-button>
<!-- 删除按钮(无图标) -->
<el-button v-if="isAuth('config','删除') && contents.tableBtnIcon == 0" type="danger" size="mini" @click="deleteHandler(scope.row.id)">{{ contents.tableBtnFont == 1?'删除':'' }}</el-button>
</template>
</el-table-column>
</el-table>
<!-- 分页组件 -->
<el-pagination
clsss="pages"
:layout="layouts"
@size-change="sizeChangeHandle"
@current-change="currentChangeHandle"
:current-page="pageIndex"
:page-sizes="[10, 20, 50, 100]"
:page-size="Number(contents.pageEachNum)"
:total="totalPage"
:small="contents.pageStyle"
class="pagination-content"
:background="contents.pageBtnBG"
:style="{textAlign:contents.pagePosition==1?'left':contents.pagePosition==2?'center':'right'}"
></el-pagination>
</div>
</div>
<!-- 添加/修改页面 -->
<add-or-update v-if="addOrUpdateFlag" :parent="this" ref="addOrUpdate"></add-or-update>
</div>
</template>
<script>
// 导入子组件:添加/修改页面
import AddOrUpdate from "./add-or-update";
export default {
data() {
return {
// 搜索表单数据模型
searchForm: {
key: ""
},
dataList: [], // 数据列表
pageIndex: 1, // 当前页码
pageSize: 10, // 每页条数
totalPage: 0, // 总页数
dataListLoading: false, // 数据加载状态
dataListSelections: [], // 已选择的数据项
showFlag: true, // 是否显示主内容
sfshVisiable: false, // 审核弹窗可见性
shForm: {}, // 审核表单数据
chartVisiable: false, // 图表可见性
addOrUpdateFlag: false, // 添加/修改页面标志
contents: { /* 样式配置对象 */ }, // 样式配置
layouts: '', // 分页布局
};
},
created() {
this.init(); // 初始化方法
this.getDataList(); // 获取数据列表
this.contentStyleChange(); // 动态样式调整
},
mounted() {
// 组件挂载完成后执行的操作
},
filters: {
htmlfilter: function (val) {
return val.replace(/<[^>]*>/g).replace(/undefined/g,''); // 过滤HTML标签和undefined
}
},
components: {
AddOrUpdate, // 注册子组件
},
methods: {
contentStyleChange() {
this.contentSearchStyleChange(); // 搜索框样式调整
this.contentBtnAdAllStyleChange(); // 按钮组样式调整
this.contentSearchBtnStyleChange(); // 搜索按钮样式调整
this.contentTableBtnStyleChange(); // 表格按钮样式调整
this.contentPageStyleChange(); // 分页样式调整
},
contentSearchStyleChange() {
this.$nextTick(() => {
// 输入框样式调整
document.querySelectorAll('.form-content .slt .el-input__inner').forEach(el => {
let textAlign = 'left';
if (this.contents.inputFontPosition == 2) textAlign = 'center';
if (this.contents.inputFontPosition == 3) textAlign = 'right';
el.style.textAlign = textAlign;
el.style.height = this.contents.inputHeight;
el.style.lineHeight = this.contents.inputHeight;
el.style.color = this.contents.inputFontColor;
el.style.fontSize = this.contents.inputFontSize;
el.style.borderWidth = this.contents.inputBorderWidth;
el.style.borderStyle = this.contents.inputBorderStyle;
el.style.borderColor = this.contents.inputBorderColor;
el.style.borderRadius = this.contents.inputBorderRadius;
el.style.backgroundColor = this.contents.inputBgColor;
});
if (this.contents.inputTitle) {
// 标签样式调整
document.querySelectorAll('.form-content .slt .el-form-item__label').forEach(el => {
el.style.color = this.contents.inputTitleColor;
el.style.fontSize = this.contents.inputTitleSize;
el.style.lineHeight = this.contents.inputHeight;
});
}
setTimeout(() => {
// 图标样式调整
document.querySelectorAll('.form-content .slt .el-input__prefix').forEach(el => {
el.style.color = this.contents.inputIconColor;
el.style.lineHeight = this.contents.inputHeight;
});
document.querySelectorAll('.form-content .slt .el-input__suffix').forEach(el => {
el.style.color = this.contents.inputIconColor;
el.style.lineHeight = this.contents.inputHeight;
});
document.querySelectorAll('.form-content .slt .el-input__icon').forEach(el => {
el.style.lineHeight = this.contents.inputHeight;
});
}, 10);
});
},
// 搜索按钮样式调整
contentSearchBtnStyleChange() {
this.$nextTick(() => {
document.querySelectorAll('.form-content .slt .el-button--success').forEach(el => {
el.style.height = this.contents.searchBtnHeight;
el.style.color = this.contents.searchBtnFontColor;
el.style.fontSize = this.contents.searchBtnFontSize;
el.style.borderWidth = this.contents.searchBtnBorderWidth;
el.style.borderStyle = this.contents.searchBtnBorderStyle;
el.style.borderColor = this.contents.searchBtnBorderColor;
el.style.borderRadius = this.contents.searchBtnBorderRadius;
el.style.backgroundColor = this.contents.searchBtnBgColor;
});
});
},
// 新增、批量删除按钮样式调整
contentBtnAdAllStyleChange() {
this.$nextTick(() => {
// 成功按钮样式调整
document.querySelectorAll('.form-content .ad .el-button--success').forEach(el => {
el.style.height = this.contents.btnAdAllHeight;
el.style.color = this.contents.btnAdAllAddFontColor;
el.style.fontSize = this.contents.btnAdAllFontSize;
el.style.borderWidth = this.contents.btnAdAllBorderWidth;
el.style.borderStyle = this.contents.btnAdAllBorderStyle;
el.style.borderColor = this.contents.btnAdAllBorderColor;
el.style.borderRadius = this.contents.btnAdAllBorderRadius;
el.style.backgroundColor = this.contents.btnAdAllAddBgColor;
});
// 危险按钮样式调整
document.querySelectorAll('.form-content .ad .el-button--danger').forEach(el => {
el.style.height = this.contents.btnAdAllHeight;
el.style.color = this.contents.btnAdAllDelFontColor;
el.style.fontSize = this.contents.btnAdAllFontSize;
el.style.borderWidth = this.contents.btnAdAllBorderWidth;
el.style.borderStyle = this.contents.btnAdAllBorderStyle;
el.style.borderColor = this.contents.btnAdAllBorderColor;
el.style.borderRadius = this.contents.btnAdAllBorderRadius;
el.style.backgroundColor = this.contents.btnAdAllDelBgColor;
});
// 警告按钮样式调整
document.querySelectorAll('.form-content .ad .el-button--warning').forEach(el => {
el.style.height = this.contents.btnAdAllHeight;
el.style.color = this.contents.btnAdAllWarnFontColor;
el.style.fontSize = this.contents.btnAdAllFontSize;
el.style.borderWidth = this.contents.btnAdAllBorderWidth;
el.style.borderStyle = this.contents.btnAdAllBorderStyle;
el.style.borderColor = this.contents.btnAdAllBorderColor;
el.style.borderRadius = this.contents.btnAdAllBorderRadius;
el.style.backgroundColor = this.contents.btnAdAllWarnBgColor;
});
});
},
// 表格行样式
rowStyle({ row, rowIndex }) {
if (rowIndex % 2 == 1) {
if (this.contents.tableStripe) {
return { color: this.contents.tableStripeFontColor }; // 斑马纹字体颜色
}
} else {
return '';
}
},
// 表格单元格样式
cellStyle({ row, rowIndex }) {
if (rowIndex % 2 == 1) {
if (this.contents.tableStripe) {
return { backgroundColor: this.contents.tableStripeBgColor }; // 斑马纹背景颜色
}
} else {
return '';
}
},
// 表头行样式
headerRowStyle({ row, rowIndex }) {
return { color: this.contents.tableHeaderFontColor }; // 表头字体颜色
},
// 表头单元格样式
headerCellStyle({ row, rowIndex }) {
return { backgroundColor: this.contents.tableHeaderBgColor }; // 表头背景颜色
},
// 表格按钮样式调整
contentTableBtnStyleChange() {
// 动态调整表格按钮样式
},
// 分页样式调整
contentPageStyleChange() {
let arr = [];
if (this.contents.pageTotal) arr.push('total'); // 总数
if (this.contents.pageSizes) arr.push('sizes'); // 每页条数选择器
if (this.contents.pagePrevNext) {
arr.push('prev'); // 上一页
if (this.contents.pagePager) arr.push('pager'); // 分页器
arr.push('next'); // 下一页
}
if (this.contents.pageJumper) arr.push('jumper'); // 跳转
this.layouts = arr.join(); // 拼接分页布局
this.contents.pageEachNum = 10; // 默认每页条数
},
init() {
// 初始化方法
},
search() {
this.pageIndex = 1; // 重置页码
this.getDataList(); // 获取数据列表
},
// 获取数据列表
getDataList() {
this.dataListLoading = true; // 开启加载状态
let params = {
page: this.pageIndex,
limit: this.pageSize,
sort: 'id',
};
if (this.searchForm.name != '' && this.searchForm.name != undefined) {
params['name'] = '%' + this.searchForm.name + '%'; // 模糊查询参数
}
this.$http({
url: "config/page",
method: "get",
params: params
}).then(({ data }) => {
if (data && data.code === 0) {
this.dataList = data.data.list; // 数据列表
this.totalPage = data.data.total; // 总条数
} else {
this.dataList = [];
this.totalPage = 0;
}
this.dataListLoading = false; // 关闭加载状态
});
},
// 每页条数变化
sizeChangeHandle(val) {
this.pageSize = val; // 更新每页条数
this.pageIndex = 1; // 重置页码
this.getDataList(); // 获取数据列表
},
// 当前页变化
currentChangeHandle(val) {
this.pageIndex = val; // 更新当前页码
this.getDataList(); // 获取数据列表
},
// 多选处理
selectionChangeHandler(val) {
this.dataListSelections = val; // 更新已选择的数据项
},
// 添加/修改操作
addOrUpdateHandler(id, type) {
this.showFlag = false; // 隐藏主内容
this.addOrUpdateFlag = true; // 显示添加/修改页面
this.crossAddOrUpdateFlag = false; // 交叉添加/修改标志
if (type != 'info') {
type = 'else'; // 设置类型
}
this.$nextTick(() => {
this.$refs.addOrUpdate.init(id, type); // 初始化子组件
});
},
// 下载文件
download(file) {
window.open(`${file}`); // 新窗口打开文件链接
},
// 删除操作
deleteHandler(id) {
var ids = id
? [Number(id)] // 单个删除
: this.dataListSelections.map(item => {
return Number(item.id); // 批量删除
});
this.$confirm(`确定进行[${id ? "删除" : "批量删除"}]操作?`, "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
}).then(() => {
this.$http({
url: "config/delete",
method: "post",
data: ids
}).then(({ data }) => {
if (data && data.code === 0) {
this.$message({
message: "操作成功",
type: "success",
duration: 1500,
onClose: () => {
this.search(); // 刷新数据
}
});
} else {
this.$message.error(data.msg); // 错误提示
}
});
});
},
}
};
</script>
<style lang="scss" scoped>
.slt {
margin: 0 !important; /* 移除外边距 */
display: flex; /* 弹性布局 */
}
.ad {
margin: 0 !important; /* 移除外边距 */
display: flex; /* 弹性布局 */
}
.pages {
& /deep/ el-pagination__sizes {
& /deep/ el-input__inner {
height: 22px; /* 高度 */
line-height: 22px; /* 行高 */
}
}
}
.el-button+.el-button {
margin: 0; /* 移除按钮间距 */
}
.tables {
& /deep/ .el-button--success {
height: 40px; /* 高度 */
color: #333; /* 字体颜色 */
font-size: 14px; /* 字体大小 */
border-width: 1px; /* 边框宽度 */
border-style: solid; /* 边框样式 */
border-color: rgba(196, 210, 244, 1); /* 边框颜色 */
border-radius: 22px; /* 圆角 */
background-color: rgba(171, 239, 239, 1); /* 背景颜色 */
}
& /deep/ .el-button--primary {
height: 40px; /* 高度 */
color: #333; /* 字体颜色 */
font-size: 14px; /* 字体大小 */
border-width: 1px; /* 边框宽度 */
border-style: solid; /* 边框样式 */
border-color: rgba(196, 210, 244, 1); /* 边框颜色 */
border-radius: 22px; /* 圆角 */
background-color: rgba(240, 242, 124, 1); /* 背景颜色 */
}
& /deep/ .el-button--danger {
height: 40px; /* 高度 */
color: #333; /* 字体颜色 */
font-size: 14px; /* 字体大小 */
border-width: 1px; /* 边框宽度 */
border-style: solid; /* 边框样式 */
border-color: rgba(196, 210, 244, 1); /* 边框颜色 */
border-radius: 22px; /* 圆角 */
background-color: rgba(244, 150, 150, 1); /* 背景颜色 */
}
& /deep/ .el-button {
margin: 4px; /* 按钮间距 */
}
}
</style>