123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236 |
- <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-roles,uni-id-permissions"
- field="role_id,role_name,permission{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, '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 {
- 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 (var 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() {
- var 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>
|