middle-admin-ant/src/pages/Middle/Base/BaseCompany/list.vue

374 lines
12 KiB
Vue
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.

<template>
<div class="page-body">
<a-row type="flex">
<a-col :flex="$mk.config.ui.searchFlex">
<!-- 搜索区 -->
<vxe-form :data="searchFormData" :items="searchFormItems" titleColon @submit="onSearch">
<template #date="{}">
<a-form-item label="创建时间" :style="{ display: 'inline-block', width: 120 }">
</a-form-item>
<a-form-item :style="{ display: 'inline-block', width: 'calc(100% - 120px )' }">
<a-range-picker @change="onDateChange" />
</a-form-item>
</template>
</vxe-form>
</a-col>
<a-col :flex="$mk.config.ui.toolbarFlex">
<!-- 工具条 -->
<mk-toolbar @toolbarClick="toolbarClick"></mk-toolbar>
</a-col>
</a-row>
<vxe-toolbar ref="xToolbar" custom>
<template #buttons>
<a-button type="primary" icon="delete" @click="pageDelete()">批量删除</a-button>
</template>
</vxe-toolbar>
<!-- 表格区 -->
<div class="gridPanel">
<vxe-grid ref='xGrid' v-bind="gridOptions">
<template #status="{ row }"><!-- 这里是自定义列 -->
<!-- 转换 row.status 的值 如果是true显示开否则显示关-->
<a-switch :checked="row.status ? true : false" @change="onSwitch(row, 'status')" />
</template>
<template #op="{ row }">
<div class="oplinks">
<a @click.stop="pageEditSql(row)" title="SQL配置"><a-icon type="database" /></a>
<a @click.stop="pageEdit(row)" title="编辑"><a-icon type="edit" /></a>
<a @click.stop="pageDelete(row)" title="删除"><a-icon type="delete" /></a>
</div>
</template>
<template #logo="{ row }">
<img v-if="row.logo" :src="row.logo" style="width: 60px;" />
<span v-else>无</span>
</template>
</vxe-grid>
</div>
</div>
</template>
<script>
import BASE_URL from '@/services/base/api.js';
export default {
name: 'BaseConfigList',
i18n: require('./i18n'), // 国际化
props: {
pageMode: {
type: String,
default: "edit"
}
},
data() {
// 页面数据
var pageData = { // 页面数据变量
keyName: 'id', // 主键字段名
// 接口动作
actions: { // Api 接口地址
getList: `${BASE_URL.BASE_URL}/BaseCompany/v1/list`,
delete: `${BASE_URL.BASE_URL}/BaseCompany/v1/batchDelete`,
open: `${BASE_URL.BASE_URL}/BaseCompany/v1/open`,
close: `${BASE_URL.BASE_URL}/BaseCompany/v1/close`
},
start_time: 0, // 开始时间
end_time: 0, // 结束时间
//搜索区
searchFormData: {
title: '',
desc: '',
},
// 搜索区配置
searchRules: [
{ key: "title", mode: "like" },
{ key: "desc", mode: "like" }
],
//搜索区
searchFormItems: [
{
title: '左侧', // 标题
span: 20, // 栅格宽度
children: [ // 子项
{ field: 'title', title: '标题', span: 5, itemRender: { name: '$input', props: { placeholder: '请输入标题' } } },
{ field: 'desc', title: '描述', span: 5, itemRender: { name: '$input', props: { placeholder: '请输入描述' } } },
{ span: 8, slots: { default: 'date' } }, // 自定义列
{
align: 'right', span: 4, itemRender: { // 按钮列
name: '$buttons', children: [{ props: { type: 'submit', content: '搜索', status: 'primary' } }, // 搜索按钮
{ props: { type: 'reset', content: '重置' } }]
}
}
]
}
],
//数据区
gridOptions: { // 表格配置
height: '100%', // 表格高度 100% 会自动撑满父容器
stripe: true, // 启用斑马纹
id: 'datagrid_1', // 表格唯一标识
// 接口获取数据
proxyConfig: { // 配置代理
sort: true, // 启用排序代理,当点击排序时会自动触发 query 行为
filter: true, // 启用筛选代理,当点击筛选时会自动触发 query 行为
props: {
result: 'list', // 配置响应结果列表字段
total: 'total' // 配置响应结果总页数字段
},
// 接收Promise
ajax: {
// 当点击工具栏查询按钮或者手动提交指令 query或reload 时会被触发
query: (options) => { // options 为当前表格的配置项
const { page, sorts } = options; // 获取当前页码、每页条数、排序信息
var params = {}; // 定义请求参数
params.page = page.currentPage; // 当前页码
params.limit = page.pageSize; // 每页条数
params.order_bys = []; // 排序信息
params.search_rules = this.getSearchParms(); // 搜索信息
if (sorts) { // 如果有排序信息
sorts.forEach((v) => { // 遍历排序信息
params.order_bys.push({ // 添加排序信息
column: v.property, // 字段名
order: v.order // 排序方式
})
});
}
return this.loadData({ params }); // 返回请求结果
}
}
},
// 表格列配置
columns: [
{ type: 'checkbox', width: 50 }, // 多选框
{ type: 'seq', width: 30 }, // 序号
{ slots: { default: 'logo' }, width: 120, sortable: true, title: '公司Logo', showHeaderOverflow: true }, // logo 自定义列
{ field: 'title', sortable: true, title: '公司名称', width: 250 }, // 公司名称
// 将 auth_stop_date 时间戵转换为日期格式
{ field: 'auth_stop_date', formatter: "formatDate", width: 120, sortable: true, title: '授权截止日期', showHeaderOverflow: true },
// { field: 'token', width: 120, sortable: true, title: 'token', showHeaderOverflow: true }, // 公司token
{ field: 'is_private_cloud', width: 110, sortable: true, title: '私有云', showHeaderOverflow: true }, // 是否私有云
{ field: 'admin_count', width: 110, sortable: true, title: '用户数', showHeaderOverflow: true }, // 用户数
{ field: 'status', slots: { default: 'status' }, width: 80, sortable: true, title: '状态', showHeaderOverflow: true }, // 状态
{ field: 'create_time', formatter: "formatDate", width: 160, sortable: true, title: '创建时间', showHeaderOverflow: true }, // 创建时间
{ title: '操作', slots: { default: 'op' }, width: 150 }
]
}
};
pageData.gridOptions = Object.assign({}, this.$mk.config.defaults.gridOptions, pageData.gridOptions); // 合并表格数据
return pageData; // 返回页面数据
},
// 计算属性
computed: {
// 页面描述
desc() {
return this.$t('pageDesc')
}
},
// 创建完成
created() {
this.$nextTick(() => { // 在下次 DOM 更新循环结束之后执行延迟回调
// 将表格和工具栏进行关联
this.$refs.xGrid.connect(this.$refs.xToolbar) // 将表格和工具栏进行关联
});
},
// 挂载完成
onLoad() {
},
// 动作
methods: {
// 切换服务状态
onSwitch(row) {
row.status = row.status ? 0 : 1; // 切换状态
// post请求数据
this.$mk.post({
// 通过判断状态来判断是开启还是关闭服务
url: row.status ? this.actions.open : this.actions.close,
loading: "设置中...",
data: { company_id: row.id },
}).then(() => { // 成功回调
this.$mk.msg(row.status ? "启用公司完成" : "停用公司完成");
}).catch((a) => { // 失败回调
this.$mk.error(a.data.msg);
});
},
// 修改日期
onDateChange(date) { // 日期选择器事件
if (date && date.length) { // 如果有值
this.start_time = parseInt(date[0]._d.getTime() / 1000); // 将日期转换为时间戳
this.end_time = parseInt(date[1]._d.getTime() / 1000); // 将日期转换为时间戳
} else { // 如果没有值
this.start_time = 0; // 将日期转换为时间戳
this.end_time = 0; // 将日期转换为时间戳
}
},
// 获取搜索参数
getSearchParms() { // 获取搜索参数
var rules = []; // 定义搜索参数
let findMode = k => { // 查找搜索模式
for (let i in this.searchRules) { // 遍历搜索规则
if (this.searchRules[i].key == k) return this.searchRules[i].mode; // 如果找到了就返回搜索模式
}
return "equal"; // 如果没有找到就返回等于
};
for (let key in this.searchFormData) { // 遍历搜索表单数据
let value = this.searchFormData[key]; // 获取值
if (value) { // 如果有值
let mode = findMode(key); // 获取搜索模式
if (mode == "like") { // 如果是模糊搜索
value = "%" + value + "%"; // 如果是模糊搜索就在两边加上%
}
rules.push({ // 添加搜索参数
column: key, // 字段名
mode: mode, // 搜索模式
value: value // 值
});
}
}
return rules; // 返回搜索参数
},
// 获取选中行
getSelectdRow() { // 获取选中行
let row = this.$refs.xGrid.getCurrentRecord(); // 获取当前行
if (!row) { // 如果没有选中行
let rows = this.$refs.xGrid.getCheckboxRecords(); // 获取选中行
if (rows && rows.length) { row = rows[0]; } // 如果有选中行就取第一行
}
return row; // 返回选中行
},
// 加载数据
loadData({ params }) {
params.start_time = this.start_time; // 开始时间
params.end_time = this.end_time; // 结束时间
return this.$mk.getPagedData({ url: this.actions.getList, data: params }); // 获取分页数据
},
// 工具栏点击事件 add / log / setting
toolbarClick(e) {
if (e.name == "add") { // 如果是添加
this.$openPage("/BaseCompany/BaseCompanyAdd"); // 打开页面
}
},
// 编辑
pageEdit(row) {
if (!row) { // 如果没有选中行
this.$mk.msg("请选择行"); // 提示
return; // 返回
}
this.$openPage("/BaseCompany/BaseCompanyUpdate/" + row[this.keyName]); // 打开页面
},
pageEditSql(row) {
if (!row) { // 如果没有选中行
this.$mk.msg("请选择行"); // 提示
return; // 返回
}
this.$mk.dialog.open({
page: () => import("./server"),
title: "修改SQL配置",
dataId: row[this.keyName],
callback: ({ success }) => {
success && this.$refs.xGrid.commitProxy('query')
}
})
},
// 删除
pageDelete(row) {
let rows = row ? [row] : this.$refs.xGrid.getCheckboxRecords(); // 获取选中行
let ids = []; // 定义id数组
rows.forEach((row) => { // 遍历选中行
ids.push(row[this.keyName]); // 将选择行的id添加到id数组
});
if (!ids.length) { // 如果没有选中行
this.$mk.error("请选择行"); // 提示
return;
}
this.$mk.confirm('您确定要删除吗?').then(type => { // 确认删除
if (type == 'confirm') { // 如果确认删除
this.$mk.post({
url: this.actions.delete, // 请求删除数据地址
loading: "删除中...", // 加载提示
data: {
ids: ids // 传递id数组
}
}).then(() => { // 成功
this.$mk.success("删除成功"); // 提示成功
this.onSearch(); // 重新加载数据
}).catch((a) => { // 失败
this.$mk.error(a.data.msg); // 提示错误信息
});
}
});
},
// 搜索
onSearch() {
this.$refs.xGrid.commitProxy('query') // 提交搜索
},
},
// 监听属性
watch: {
}
};
</script>
<style scoped lang="less">
.page-body {
padding: 30px;
background: @base-bg-color;
}
.gridPanel {
height: calc((100vh*2) - 400px);
}
</style>
<style>
.oplinks svg {
width: 22px;
height: 22px;
margin: 0 5px 0 0;
}
</style>