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

238 lines
7.3 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="collectionList"
: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, 'role_id')"
sortable @sort-change="sortChange($event, 'role_id')">唯一ID</uni-th>
<uni-th align="center" filter-type="search" @filter-change="filterChange($event, 'role_name')"
sortable @sort-change="sortChange($event, 'role_name')">名称</uni-th>
<uni-th align="center">权限</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.role_id}}</uni-td>
<uni-td align="center">{{item.role_name}}</uni-td>
<uni-td align="center">{{item.permission}}</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-roles.js';
const db = uniCloud.database()
// 表查询配置
const dbOrderBy = 'create_date desc' // 排序字段
const dbSearchFields = ['role_id', 'role_name', 'permission.permission_name'] // 支持模糊搜索的字段列表 // 分页配置
const pageSize = 20
const pageCurrent = 1
const orderByMapping = {
"ascending": "asc",
"descending": "desc"
}
export default {
data() {
return {
collectionList: [ db.collection('uni-id-roles').field('comment,permission,role_id,role_name,create_date').getTemp(),db.collection('uni-id-permissions').field('permission_name, permission_id').getTemp() ],
query: '',
where: '',
orderby: dbOrderBy,
orderByFieldName: "",
selectedIndexs: [],
options: {
pageSize,
pageCurrent,
filterData: {},
...enumConverter
},
imageStyles: {
width: 64,
height: 64
},
exportExcel: {
"filename": "uni-id-roles.xls",
"type": "xls",
"fields": {
"唯一ID": "role_id",
"名称": "role_name",
"权限": "permission",
"备注": "comment",
"create_date": "create_date"
}
},
exportExcelData: []
}
},
onLoad() {
this._filter = {}
},
onReady() {
this.$refs.udb.loadData()
},
methods: {
onqueryload(data) {
for (let i = 0; i < data.length; i++) {
let item = data[i]
item.permission = item.permission.map(pItem => pItem.permission_name).join('、')
item.create_date = this.$formatDate(item.create_date)
}
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>