NGToolsAdmin/pages/system/permission/list.vue
2024-09-13 16:39:31 +08:00

235 lines
6.9 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>
<view class="fix-top-window">
<view class="uni-header">
<uni-stat-breadcrumb class="uni-stat-breadcrumb-on-phone" />
<view class="uni-group">
<input class="uni-search" type="text" v-model="query" @confirm="search"
:placeholder="$t('common.placeholder.query')" />
<button class="uni-button hide-on-phone" type="default" size="mini"
@click="search">{{$t('common.button.search')}}</button>
<button class="uni-button" type="primary" size="mini"
@click="navigateTo('./add')">{{$t('common.button.add')}}</button>
<button class="uni-button" type="warn" size="mini" :disabled="!selectedIndexs.length"
@click="delTable">{{$t('common.button.batchDelete')}}</button>
<!-- #ifdef H5 -->
<download-excel class="hide-on-phone" :fields="exportExcel.fields" :data="exportExcelData"
:type="exportExcel.type" :name="exportExcel.filename">
<button class="uni-button" type="primary" size="mini">{{$t('common.button.exportExcel')}}</button>
</download-excel>
<!-- #endif -->
</view>
</view>
<view class="uni-container">
<unicloud-db ref="udb" collection="uni-id-permissions"
field="permission_id,permission_name,comment,create_date" :where="where" page-data="replace"
:orderby="orderby" :getcount="true" :page-size="options.pageSize" :page-current="options.pageCurrent"
v-slot:default="{data,pagination,loading,error,options}" :options="options" loadtime="manual"
@load="onqueryload">
<uni-table ref="table" :loading="loading" :emptyText="error.message || $t('common.empty')" border stripe
type="selection" @selection-change="selectionChange">
<uni-tr>
<uni-th align="center" filter-type="search"
@filter-change="filterChange($event, 'permission_id')" sortable
@sort-change="sortChange($event, 'permission_id')">权限标识</uni-th>
<uni-th align="center" filter-type="search"
@filter-change="filterChange($event, 'permission_name')" sortable
@sort-change="sortChange($event, 'permission_name')">权限名称</uni-th>
<uni-th align="center" filter-type="search" @filter-change="filterChange($event, 'comment')"
sortable @sort-change="sortChange($event, 'comment')">备注</uni-th>
<uni-th align="center" filter-type="timestamp"
@filter-change="filterChange($event, 'create_date')" sortable
@sort-change="sortChange($event, 'create_date')">创建时间</uni-th>
<uni-th align="center">操作</uni-th>
</uni-tr>
<uni-tr v-for="(item,index) in data" :key="index">
<uni-td align="center">{{item.permission_id}}</uni-td>
<uni-td align="center">{{item.permission_name}}</uni-td>
<uni-td align="center">{{item.comment}}</uni-td>
<uni-td align="center">
<uni-dateformat :threshold="[0, 0]" :date="item.create_date"></uni-dateformat>
</uni-td>
<uni-td align="center">
<view class="uni-group">
<button @click="navigateTo('./edit?id='+item._id, false)" class="uni-button" size="mini"
type="primary">{{$t('common.button.edit')}}</button>
<button @click="confirmDelete(item._id)" class="uni-button" size="mini"
type="warn">{{$t('common.button.delete')}}</button>
</view>
</uni-td>
</uni-tr>
</uni-table>
<view class="uni-pagination-box">
<uni-pagination show-icon show-page-size :page-size="pagination.size" v-model="pagination.current"
:total="pagination.count" @change="onPageChanged" @pageSizeChange="changeSize" />
</view>
</unicloud-db>
</view>
<!-- #ifndef H5 -->
<fix-window />
<!-- #endif -->
</view>
</template>
<script>
import {
enumConverter,
filterToWhere
} from '@/js_sdk/validator/uni-id-permissions.js';
const db = uniCloud.database()
// 表查询配置
const dbOrderBy = 'create_date desc' // 排序字段
const dbSearchFields = ['permission_id', 'permission_name'] // 模糊搜索字段,支持模糊搜索的字段列表
// 分页配置
const pageSize = 20
const pageCurrent = 1
const orderByMapping = {
"ascending": "asc",
"descending": "desc"
}
export default {
data() {
return {
query: '',
where: '',
orderby: dbOrderBy,
orderByFieldName: "",
selectedIndexs: [],
options: {
pageSize,
pageCurrent,
filterData: {},
...enumConverter
},
imageStyles: {
width: 64,
height: 64
},
exportExcel: {
"filename": "uni-id-permissions.xls",
"type": "xls",
"fields": {
"权限ID": "permission_id",
"权限名称": "permission_name",
"备注": "comment"
}
},
exportExcelData: []
}
},
onLoad() {
this._filter = {}
},
onReady() {
this.$refs.udb.loadData()
},
methods: {
onqueryload(data) {
this.exportExcelData = data
},
changeSize(pageSize) {
this.options.pageSize = pageSize
this.options.pageCurrent = 1
this.$nextTick(() => {
this.loadData()
})
},
getWhere() {
const query = this.query.trim()
if (!query) {
return ''
}
const queryRe = new RegExp(query, 'i')
return dbSearchFields.map(name => queryRe + '.test(' + name + ')').join(' || ')
},
search() {
const newWhere = this.getWhere()
this.where = newWhere
this.$nextTick(() => {
this.loadData()
})
},
loadData(clear = true) {
this.$refs.udb.loadData({
clear
})
},
onPageChanged(e) {
this.selectedIndexs.length = 0
this.$refs.table.clearSelection()
this.$refs.udb.loadData({
current: e.current
})
},
navigateTo(url, clear) {
// clear 表示刷新列表时是否清除页码true 表示刷新并回到列表第 1 页,默认为 true
uni.navigateTo({
url,
events: {
refreshData: () => {
this.loadData(clear)
}
}
})
},
// 多选处理
selectedItems() {
let dataList = this.$refs.udb.dataList
return this.selectedIndexs.map(i => dataList[i]._id)
},
// 批量删除
delTable() {
this.$refs.udb.remove(this.selectedItems(), {
success: (res) => {
this.$refs.table.clearSelection()
}
})
},
// 多选
selectionChange(e) {
this.selectedIndexs = e.detail.index
},
confirmDelete(id) {
this.$refs.udb.remove(id, {
success: (res) => {
this.$refs.table.clearSelection()
}
})
},
sortChange(e, name) {
this.orderByFieldName = name;
if (e.order) {
this.orderby = name + ' ' + orderByMapping[e.order]
} else {
this.orderby = ''
}
this.$refs.table.clearSelection()
this.$nextTick(() => {
this.$refs.udb.loadData()
})
},
filterChange(e, name) {
this._filter[name] = {
type: e.filterType,
value: e.filter
}
let newWhere = filterToWhere(this._filter, db.command)
if (Object.keys(newWhere).length) {
this.where = newWhere
} else {
this.where = ''
}
this.$nextTick(() => {
this.$refs.udb.loadData()
})
}
}
}
</script>
<style>
</style>