123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234 |
- <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() {
- 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>
|