add v-permission

木子李·De 4 years ago
parent 2795564fd5
commit 9d3eea9631

@ -1,81 +1,32 @@
<template> <template>
<div :class="[hasTreeFieldInQueryForm ? 'page-container' : 'app-container']"> <div :class="[hasTreeFieldInQueryForm ? 'page-container' : 'app-container']">
<div v-if="hasTreeFieldInQueryForm" <div v-if="hasTreeFieldInQueryForm" class="left-container">
class="left-container"> <AnjiTree ref="queryFormTree" v-model.trim="queryParams[queryFormTreeField.field]" :is-open="queryFormTreeField.anjiTreeOption.isOpen" :enable-filter="queryFormTreeField.anjiTreeOption.enableFilter" :label-name="queryFormTreeField.label" :url="queryFormTreeField.anjiTreeOption.url" @node-click="handleTreeNodeCheck" />
<AnjiTree ref="queryFormTree"
v-model.trim="queryParams[queryFormTreeField.field]"
:is-open="queryFormTreeField.anjiTreeOption.isOpen"
:enable-filter="queryFormTreeField.anjiTreeOption.enableFilter"
:label-name="queryFormTreeField.label"
:url="queryFormTreeField.anjiTreeOption.url"
@node-click="handleTreeNodeCheck" />
</div> </div>
<div class="right-container"> <div class="right-container">
<!-- 查询表单开始 --> <!-- 查询表单开始 -->
<el-form ref="formSearch" <el-form ref="formSearch" :model="queryParams" label-width="100px" v-permission="option.buttons.query.permission">
:model="queryParams"
label-width="100px">
<el-row> <el-row>
<el-col v-for="(item, index) in queryFormFieldExcludeTree" <el-col v-for="(item, index) in queryFormFieldExcludeTree" :key="item.field" :span="queryFormFieldSpan(item)">
:key="item.field" <el-form-item v-if="index <= 2 || (index > 2 && queryParams.showMoreSearch)" :label="item.label" :rules="item.rules" :prop="item.field">
:span="queryFormFieldSpan(item)">
<el-form-item v-if="index <= 2 || (index > 2 && queryParams.showMoreSearch)"
:label="item.label"
:rules="item.rules"
:prop="item.field">
<!-- 输入框 --> <!-- 输入框 -->
<el-input v-if="item.inputType == 'input' || item.inputType == 'input-number'" <el-input v-if="item.inputType == 'input' || item.inputType == 'input-number'" v-model.trim="queryParams[item.field]" :placeholder="item.placeholder || '请输入'" :clearable="item.clearable !== false" :disabled="item.disabled" @change="(value) => queryFormChange(item.field, value)" />
v-model.trim="queryParams[item.field]"
:placeholder="item.placeholder || '请输入'"
:clearable="item.clearable !== false"
:disabled="item.disabled"
@change="(value) => queryFormChange(item.field, value)" />
<!-- 开关 --> <!-- 开关 -->
<el-switch v-else-if="item.inputType == 'switch'" <el-switch v-else-if="item.inputType == 'switch'" v-model.trim="queryParams[item.field]" :disabled="item.disabled" :active-value="item.switchOption.disableValue" :inactive-value="item.switchOption.enableValue" active-color="#5887fb" inactive-color="#ccc" @change="(value) => queryFormChange(item.field, value)" />
v-model.trim="queryParams[item.field]"
:disabled="item.disabled"
:active-value="item.switchOption.disableValue"
:inactive-value="item.switchOption.enableValue"
active-color="#5887fb"
inactive-color="#ccc"
@change="(value) => queryFormChange(item.field, value)" />
<!-- 下拉框 --> <!-- 下拉框 -->
<anji-select v-else-if="item.inputType == 'anji-select'" <anji-select v-else-if="item.inputType == 'anji-select'" v-model.trim="queryParams[item.field]" :multiple="item.anjiSelectOption.multiple" :dict-code="item.anjiSelectOption.dictCode" :url="item.anjiSelectOption.url" :method="item.anjiSelectOption.method" :query-param="item.anjiSelectOption.queryParam" :option="item.anjiSelectOption.option" :label="item.anjiSelectOption.label" :disabled-options="item.anjiSelectOption.disabledOptions" :disabled="item.disabled"
v-model.trim="queryParams[item.field]" :merge-label="item.anjiSelectOption.mergeLabel" @change="(value) => queryFormChange(item.field, value)" />
:multiple="item.anjiSelectOption.multiple"
:dict-code="item.anjiSelectOption.dictCode"
:url="item.anjiSelectOption.url"
:method="item.anjiSelectOption.method"
:query-param="item.anjiSelectOption.queryParam"
:option="item.anjiSelectOption.option"
:label="item.anjiSelectOption.label"
:disabled-options="item.anjiSelectOption.disabledOptions"
:disabled="item.disabled"
:merge-label="item.anjiSelectOption.mergeLabel"
@change="(value) => queryFormChange(item.field, value)" />
<!-- 日期时间框 --> <!-- 日期时间框 -->
<el-date-picker v-else-if="item.inputType.indexOf('date') >= 0" <el-date-picker v-else-if="item.inputType.indexOf('date') >= 0" v-model="queryParams[item.field]" style="width: 100%" :placeholder="item.placeholder || '请选择'" :type="item.inputType" :clearable="item.clearable !== false" @change="(value) => queryFormChange(item.field, value)" />
v-model="queryParams[item.field]"
style="width: 100%"
:placeholder="item.placeholder || '请选择'"
:type="item.inputType"
:clearable="item.clearable !== false"
@change="(value) => queryFormChange(item.field, value)" />
<!-- 待扩展的表单类型请自行扩展 --> <!-- 待扩展的表单类型请自行扩展 -->
<el-input v-else <el-input v-else placeholder="组件不支持此类型表单请至组件内部自行扩展" disabled />
placeholder="组件不支持此类型表单请至组件内部自行扩展"
disabled />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="6" <el-col :span="6" style="text-align: center">
style="text-align: center"> <el-button type="primary" @click="handleQueryForm('query')"></el-button>
<el-button type="primary" <el-button type="danger" @click="handleResetForm()"></el-button>
@click="handleQueryForm('query')">查询</el-button> <a style="margin-left: 8px" @click="handleToggleMoreSearch">
<el-button type="danger"
@click="handleResetForm()">重置</el-button>
<a style="margin-left: 8px"
@click="handleToggleMoreSearch">
{{ queryParams.showMoreSearch == true ? '收起' : '展开' }} {{ queryParams.showMoreSearch == true ? '收起' : '展开' }}
<i :class="queryParams.showMoreSearch ? 'el-icon-arrow-up' : 'el-icon-arrow-down'" /> <i :class="queryParams.showMoreSearch ? 'el-icon-arrow-up' : 'el-icon-arrow-down'" />
</a> </a>
@ -86,82 +37,46 @@
<!-- 批量操作 --> <!-- 批量操作 -->
<slot name="buttonLeftOnTable" /> <slot name="buttonLeftOnTable" />
<el-button v-if="option.buttons.add.isShow == undefined ? true : option.buttons.add.isShow" <el-button v-if="option.buttons.add.isShow == undefined ? true : option.buttons.add.isShow" v-permission="option.buttons.add.permission" type="primary" icon="el-icon-plus" @click="handleOpenEditView('add')"></el-button>
v-permission="option.buttons.add.permission" <el-button v-if="option.buttons.delete.isShow == undefined ? true : option.buttons.delete.isShow" v-permission="option.buttons.delete.permission" :disabled="disableBatchDelete" type="danger" icon="el-icon-delete" @click="handleDeleteBatch()"></el-button>
type="primary"
icon="el-icon-plus"
@click="handleOpenEditView('add')">新增</el-button>
<el-button v-if="option.buttons.delete.isShow == undefined ? true : option.buttons.delete.isShow"
v-permission="option.buttons.delete.permission"
:disabled="disableBatchDelete"
type="danger"
icon="el-icon-delete"
@click="handleDeleteBatch()">删除</el-button>
<!-- 表格开始 --> <!-- 表格开始 -->
<el-table :data="records" <el-table :data="records" border @selection-change="handleSelectionChange" @sort-change="handleSortChange">
border
@selection-change="handleSelectionChange"
@sort-change="handleSortChange">
<!--多选--> <!--多选-->
<el-table-column fixed <el-table-column fixed type="selection" width="50" align="center" />
type="selection"
width="50"
align="center" />
<!--隐藏列--> <!--隐藏列-->
<el-table-column v-if="tableExpandColumns.length > 0" <el-table-column v-if="tableExpandColumns.length > 0" type="expand">
type="expand">
<template slot-scope="scope"> <template slot-scope="scope">
<p v-for="item in tableExpandColumns" <p v-for="item in tableExpandColumns" :key="item.field" class="table-expand-item">
:key="item.field"
class="table-expand-item">
<span class="titel"> {{ item.label }}: </span> <span class="titel"> {{ item.label }}: </span>
<span>{{ scope.row[item.field] }}</span> <span>{{ scope.row[item.field] }}</span>
</p> </p>
</template> </template>
</el-table-column> </el-table-column>
<!--序号--> <!--序号-->
<el-table-column label="序号" <el-table-column label="序号" min-width="50" align="center">
min-width="50"
align="center">
<template slot-scope="scope"> <template slot-scope="scope">
{{ queryParams.pageSize * (queryParams.pageNumber - 1) + scope.$index + 1 }} {{ queryParams.pageSize * (queryParams.pageNumber - 1) + scope.$index + 1 }}
</template> </template>
</el-table-column> </el-table-column>
<template v-for="item in option.columns"> <template v-for="item in option.columns">
<el-table-column v-if="item.tableHide != true && item.columnType != 'expand'" <el-table-column v-if="item.tableHide != true && item.columnType != 'expand'" :key="item.field" :prop="item.field" :label="fieldLabel(item)" :min-width="item.minWidth || 110" :sortable="item.sortable" :show-overflow-tooltip="true" align="center">
:key="item.field"
:prop="item.field"
:label="fieldLabel(item)"
:min-width="item.minWidth || 110"
:sortable="item.sortable"
:show-overflow-tooltip="true"
align="center">
<template slot-scope="scope"> <template slot-scope="scope">
<div v-if="item.columnType == 'imgPreview'"> <div v-if="item.columnType == 'imgPreview'">
<!-- 图片缩略图--> <!-- 图片缩略图-->
<el-image style="width: 25%; height: 50%" <el-image style="width: 25%; height: 50%" fit="contain" :src="scope.row[item.field]" :preview-src-list="[scope.row[item.field]]" />
fit="contain"
:src="scope.row[item.field]"
:preview-src-list="[scope.row[item.field]]" />
</div> </div>
<div v-else> <div v-else>
<span v-if="item.inputType == 'switch' && !item.colorStyle"> <span v-if="item.inputType == 'switch' && !item.colorStyle">
<el-switch v-model.trim="scope.row[item.field]" <el-switch v-model.trim="scope.row[item.field]" :active-value="1" :inactive-value="0" active-color="#5887fb" inactive-color="#ccc" @change="switchChange(scope.row, item.switchOption)" />
:active-value="1"
:inactive-value="0"
active-color="#5887fb"
inactive-color="#ccc"
@change="switchChange(scope.row, item.switchOption)" />
</span> </span>
<!-- 带单位 --> <!-- 带单位 -->
<span v-else-if="item.inputType == 'anji-input'">{{ fieldValueByAnjiInput(scope.row[item.field], item) }}</span> <span v-else-if="item.inputType == 'anji-input'">{{ fieldValueByAnjiInput(scope.row[item.field], item) }}</span>
<!--表格 a 合并 b上--> <!--表格 a 合并 b上-->
<span v-else-if="item.mergeColumn">{{ scope.row[item.field] }}({{ scope.row[item.mergeColumn] }})</span> <span v-else-if="item.mergeColumn">{{ scope.row[item.field] }}({{ scope.row[item.mergeColumn] }})</span>
<!-- 没有单位 --> <!-- 没有单位 -->
<span v-else-if="item.colorStyle" <span v-else-if="item.colorStyle" :class="item.colorStyle[scope.row[item.editField]]">{{ fieldValueByRowRenderer(scope.row, item) }}</span>
:class="item.colorStyle[scope.row[item.editField]]">{{ fieldValueByRowRenderer(scope.row, item) }}</span>
<span v-else>{{ fieldValueByRowRenderer(scope.row, item) }}</span> <span v-else>{{ fieldValueByRowRenderer(scope.row, item) }}</span>
<!-- 正常展示模式 <!-- 正常展示模式
<div v-if="!item.custom"> <div v-if="!item.custom">
@ -177,32 +92,18 @@
</el-table-column> </el-table-column>
</template> </template>
<!--操作栏--> <!--操作栏-->
<el-table-column align="center" <el-table-column align="center" fixed="right" label="操作" :width="option.buttons.customButton && option.buttons.customButton.operationWidth ? option.buttons.customButton.operationWidth : 100">
fixed="right"
label="操作"
:width="option.buttons.customButton && option.buttons.customButton.operationWidth ? option.buttons.customButton.operationWidth : 100">
<template slot-scope="scope"> <template slot-scope="scope">
<slot name="edit" <slot name="edit" :msg="scope.row" />
:msg="scope.row" /> <el-button v-if="(option.buttons.query.isShow == undefined ? true : option.buttons.query.isShow) && hasPermission(option.buttons.edit.permission) == false" type="text" size="small" @click="handleOpenEditView('view', scope.row)" v-permission="option.buttons.query.permission" >查看</el-button>
<el-button v-if="option.buttons.edit.isShow == undefined ? true : option.buttons.edit.isShow" <el-button v-if="option.buttons.edit.isShow == undefined ? true : option.buttons.edit.isShow" type="text" size="small" @click="handleOpenEditView('edit', scope.row)" v-permission="option.buttons.edit.permission" >编辑</el-button>
type="text" <el-button v-if="hasRowCustomButton == false && option.buttons.delete.isShow == undefined ? true : option.buttons.edit.isShow" type="text" size="small" @click="handleDeleteBatch(scope.row)" v-permission="option.buttons.delete.permission" >删除</el-button>
size="small" <el-dropdown v-if="hasRowCustomButton" trigger="click">
@click="handleOpenEditView('edit', scope.row)">编辑</el-button>
<el-button v-if="hasRowCustomButton == false && option.buttons.delete.isShow == undefined ? true : option.buttons.edit.isShow"
type="text"
size="small"
@click="handleDeleteBatch(scope.row)">删除</el-button>
<el-dropdown v-if="hasRowCustomButton"
trigger="click">
<span class="el-dropdown-link"> 更多<i class="el-icon-caret-bottom el-icon--right" /> </span> <span class="el-dropdown-link"> 更多<i class="el-icon-caret-bottom el-icon--right" /> </span>
<el-dropdown-menu slot="dropdown"> <el-dropdown-menu slot="dropdown">
<el-dropdown-item class="clearfix"> <el-dropdown-item class="clearfix">
<slot name="rowButton" <slot name="rowButton" :msg="scope.row" />
:msg="scope.row" /> <el-button v-if="option.buttons.delete.isShow == undefined ? true : option.buttons.edit.isShow" type="text" size="small" @click="handleDeleteBatch(scope.row)" v-permission="option.buttons.delete.permission" >删除</el-button>
<el-button v-if="option.buttons.delete.isShow == undefined ? true : option.buttons.edit.isShow"
type="text"
size="small"
@click="handleDeleteBatch(scope.row)">删除</el-button>
</el-dropdown-item> </el-dropdown-item>
</el-dropdown-menu> </el-dropdown-menu>
</el-dropdown> </el-dropdown>
@ -210,36 +111,20 @@
</el-table-column> </el-table-column>
</el-table> </el-table>
<div class="pagination"> <div class="pagination">
<el-pagination v-show="total > 0" <el-pagination v-show="total > 0" background :current-page.sync="queryParams.pageNumber" :page-sizes="$pageSizeAll" :page-size="queryParams.pageSize" layout="total, prev, pager, next, jumper, sizes" :total="total" @size-change="handleSizeChange" @current-change="handleCurrentChange" />
background
:current-page.sync="queryParams.pageNumber"
:page-sizes="$pageSizeAll"
:page-size="queryParams.pageSize"
layout="total, prev, pager, next, jumper, sizes"
:total="total"
@size-change="handleSizeChange"
@current-change="handleCurrentChange" />
<div> <div>
<slot name="tableSelectionBtn" <slot name="tableSelectionBtn" :selection="checkRecords" />
:selection="checkRecords" />
</div> </div>
</div> </div>
<!-- 表格结束 --> <!-- 表格结束 -->
<EditDialog ref="edit" <EditDialog ref="edit" :option="option" :model-type="editDialogModelType" :visible="editDialogOpen" :row-data="editDialogRowData" @closeEvent="editDialogClosedEvent">
:option="option"
:model-type="editDialogModelType"
:visible="editDialogOpen"
:row-data="editDialogRowData"
@closeEvent="editDialogClosedEvent">
<template v-slot:customCard> <template v-slot:customCard>
<slot name="cardInEditPage" /> <slot name="cardInEditPage" />
</template> </template>
<template slot="editBtn" <template slot="editBtn" slot-scope="scope">
slot-scope="scope"> <slot name="editBtnPage" :rowData="scope" />
<slot name="editBtnPage"
:rowData="scope" />
</template> </template>
</EditDialog> </EditDialog>
</div> </div>
@ -303,7 +188,9 @@ export default {
computed: { computed: {
// //
queryFormTreeField() { queryFormTreeField() {
var treeField = this.option.queryFormFields.find((item) => item['inputType'] == 'anji-tree') var treeField = this.option.queryFormFields.find(
(item) => item['inputType'] == 'anji-tree'
)
return treeField return treeField
}, },
// //
@ -312,23 +199,31 @@ export default {
}, },
// //
queryFormFieldExcludeTree() { queryFormFieldExcludeTree() {
var treeFields = this.option.queryFormFields.filter((item) => item['inputType'] != 'anji-tree') var treeFields = this.option.queryFormFields.filter(
(item) => item['inputType'] != 'anji-tree'
)
return treeFields return treeFields
}, },
// //
primaryKeyFieldName() { primaryKeyFieldName() {
var primaryKey = this.option.columns.find((item) => item['primaryKey'] == true) var primaryKey = this.option.columns.find(
(item) => item['primaryKey'] == true
)
if (primaryKey != null) { if (primaryKey != null) {
return primaryKey['field'] return primaryKey['field']
} else { } else {
return null return null
console.warn('在columns中查找primaryKey=true失败会导致查询详情和删除失败') console.warn(
'在columns中查找primaryKey=true失败会导致查询详情和删除失败'
)
} }
}, },
// //
tableExpandColumns() { tableExpandColumns() {
var expandColumns = this.option.columns.filter((item) => item['columnType'] == 'expand') var expandColumns = this.option.columns.filter(
(item) => item['columnType'] == 'expand'
)
return expandColumns return expandColumns
}, },
@ -413,7 +308,10 @@ export default {
} }
} }
// //
if (this.isBlank(this.queryParams['order']) && this.isNotBlank(this.option.buttons.query.order)) { if (
this.isBlank(this.queryParams['order']) &&
this.isNotBlank(this.option.buttons.query.order)
) {
this.queryParams['sort'] = this.option.buttons.query.sort this.queryParams['sort'] = this.option.buttons.query.sort
this.queryParams['order'] = this.option.buttons.query.order this.queryParams['order'] = this.option.buttons.query.order
} }
@ -446,8 +344,15 @@ export default {
var treeFieldName = this.queryFormTreeField['field'] var treeFieldName = this.queryFormTreeField['field']
for (var i = 0; i < this.option.columns.length; i++) { for (var i = 0; i < this.option.columns.length; i++) {
var item = this.option.columns[i] var item = this.option.columns[i]
if (item['editField'] == treeFieldName || item['field'] == treeFieldName) { if (
this.$set(this.option.columns[i], 'defaultValue', this.queryParams[treeFieldName]) item['editField'] == treeFieldName ||
item['field'] == treeFieldName
) {
this.$set(
this.option.columns[i],
'defaultValue',
this.queryParams[treeFieldName]
)
break break
} }
} }
@ -473,7 +378,11 @@ export default {
// //
this.editDialogOpen = false this.editDialogOpen = false
// //
if (this.hasTreeFieldInQueryForm && this.$refs.queryFormTree != null && !value) { if (
this.hasTreeFieldInQueryForm &&
this.$refs.queryFormTree != null &&
!value
) {
this.$refs.queryFormTree.queryData() this.$refs.queryFormTree.queryData()
} }
this.handleQueryPageList() this.handleQueryPageList()
@ -493,12 +402,16 @@ export default {
type: 'warning', type: 'warning',
confirmButtonClass: 'delete_sure', confirmButtonClass: 'delete_sure',
cancelButtonClass: 'el-button--danger is-plain', cancelButtonClass: 'el-button--danger is-plain',
}).then(() => { })
.then(() => {
this.option.buttons.delete.api(ids).then((res) => { this.option.buttons.delete.api(ids).then((res) => {
// {code: "200", message: "", data: true} // {code: "200", message: "", data: true}
this.checkRecords = [] this.checkRecords = []
// //
if (this.hasTreeFieldInQueryForm && this.$refs.queryFormTree != null) { if (
this.hasTreeFieldInQueryForm &&
this.$refs.queryFormTree != null
) {
this.$refs.queryFormTree.queryData() this.$refs.queryFormTree.queryData()
} }
this.handleQueryPageList() this.handleQueryPageList()
@ -543,7 +456,10 @@ export default {
if (columnConfig == null) { if (columnConfig == null) {
return '' return ''
} }
if (columnConfig.inputType == 'anji-input' && columnConfig.anjiInput != null) { if (
columnConfig.inputType == 'anji-input' &&
columnConfig.anjiInput != null
) {
return `${columnConfig.label}(${columnConfig.anjiInput.unit})` return `${columnConfig.label}(${columnConfig.anjiInput.unit})`
} else { } else {
return columnConfig.label return columnConfig.label
@ -554,7 +470,10 @@ export default {
if (columnConfig == null) { if (columnConfig == null) {
return value return value
} }
if (columnConfig.inputType == 'anji-input' && columnConfig.anjiInput != null) { if (
columnConfig.inputType == 'anji-input' &&
columnConfig.anjiInput != null
) {
return value / columnConfig.anjiInput.conversion return value / columnConfig.anjiInput.conversion
} else { } else {
return value return value
@ -562,7 +481,10 @@ export default {
}, },
// //
fieldValueByRowRenderer(row, columnConfig) { fieldValueByRowRenderer(row, columnConfig) {
if (columnConfig == null || typeof columnConfig.fieldTableRowRenderer != 'function') { if (
columnConfig == null ||
typeof columnConfig.fieldTableRowRenderer != 'function'
) {
return row[columnConfig.field] return row[columnConfig.field]
} else { } else {
return columnConfig.fieldTableRowRenderer(row) return columnConfig.fieldTableRowRenderer(row)

Loading…
Cancel
Save