<template>
|
<div>
|
<!--表格基础按钮-->
|
<div v-if="type === 'table' || type === 'TreeTable'">
|
<!--top展示表格上方区域 menu展示表格操作栏区域 无就是默认 -->
|
<el-button v-for="item in basicButtonList.top"
|
v-if="LocationType === 'top'"
|
:key="item.oid" :icon="item.paramVOS.webUiButtonIcon"
|
:type="item.paramVOS.webUiButtonType || 'primary'" plain
|
size="small"
|
@click="buttonClick(item)">
|
{{ item.name }}
|
</el-button>
|
|
<el-button type="text" @click="handleDefaultAddChildren(scope.row)" v-if="(LocationType === 'menu' && this.default === 'default')">新增子级</el-button>
|
<el-button v-for="item in basicButtonList.menu"
|
v-if="LocationType === 'menu'"
|
:key="item.oid"
|
:icon="item.paramVOS.webUiButtonIcon ? item.paramVOS.webUiButtonIcon : (item.paramVOS.webUiButtonMethods === 'edit' ? 'el-icon-edit' : (item.paramVOS.webUiButtonMethods === 'delete' ? 'el-icon-delete' : ''))"
|
:type="item.paramVOS.webUiButtonType || 'text'" plain
|
size="small"
|
@click="buttonClick(item)">
|
{{ item.name }}
|
</el-button>
|
|
|
<!-- 表格内按钮操作对话框表单 -->
|
<dynamic-table-form ref="dynamicForm" :formList="formList" :title="formName" :visible.sync="visible"
|
style="display: none"></dynamic-table-form>
|
</div>
|
<div v-else-if="type === 'form'">
|
<el-button v-for="item in basicButtonList"
|
:key="item.oid"
|
:icon="item.paramVOS.webUiButtonIcon"
|
:type="(item.paramVOS.webUiButtonType !== 'text' ? item.paramVOS.webUiButtonType : 'primary') || 'primary'"
|
plain
|
size="small"
|
@click="buttonClick(item)">
|
{{ item.name }}
|
</el-button>
|
</div>
|
<div v-else-if="type === 'tree'" class="tree-buttons">
|
<el-button v-for="item in basicButtonList"
|
:key="item.oid"
|
:icon="item.paramVOS.webUiButtonIcon"
|
:type="(item.paramVOS.webUiButtonType !== 'text' ? item.paramVOS.webUiButtonType : 'primary') || 'primary'"
|
plain
|
size="small"
|
@click="buttonClick(item)">
|
{{ item.name }}
|
</el-button>
|
</div>
|
</div>
|
</template>
|
|
<script>
|
import func from "@/util/func";
|
import {validatenull} from "@/util/validate";
|
import {doAction} from '@/actions/base/BaseAction';
|
import Vue from "vue";
|
|
export default {
|
name: "dynamic-button",
|
props: {
|
componentVO: {
|
type: Object,
|
default: {}
|
},
|
type: {
|
type: String
|
},
|
LocationType: {
|
type: String,
|
},
|
scope: {
|
type: Object,
|
},
|
butttonList: {
|
type: Array
|
},
|
default:{
|
type:String,
|
},
|
sourceData: {
|
//按钮所属区域的上一区域选中数据
|
type: Object,
|
default: {}
|
},
|
dataStore: {
|
//按钮所属区域选中数据
|
type: Array,
|
default: []
|
},
|
},
|
data() {
|
return {
|
visible: false,
|
formName: '',
|
// 表单数据
|
formList: [],
|
}
|
},
|
computed: {
|
basicButtonList() {
|
const basicColumn = this.butttonList;
|
if (!basicColumn || !Array.isArray(basicColumn)) {
|
return []; // 如果 basicColumn 未定义或者不是数组,返回空数组
|
}
|
|
if (this.type === 'form' || this.type === 'tree') {
|
return basicColumn;
|
} else if (this.type === 'table' || this.type === 'TreeTable') {
|
const top = basicColumn.filter(item => {
|
return item.paramVOS && (item.paramVOS.webUiButtonLocation === 'top' || func.isEmpty(item.paramVOS.webUiButtonLocation));
|
});
|
const menu = basicColumn.filter(item => {
|
return item.paramVOS && item.paramVOS.webUiButtonLocation === 'menu';
|
});
|
return {
|
top: top,
|
menu: menu,
|
};
|
}
|
}
|
},
|
methods: {
|
//表格树默认新增子项
|
handleDefaultAddChildren(row) {
|
this.visible = true;
|
this.formName = '新增子级'
|
this.$refs.dynamicForm.form = row;
|
},
|
buttonClick(buttonitem) {
|
const paramVOS=buttonitem.paramVOS;
|
const DefineVO = this.componentVO.treeDefineVO || this.componentVO.tableDefineVO || this.componentVO.treeTableDefineVO || this.componentVO.formDefineVO;
|
if (!paramVOS['title']) {
|
paramVOS['title'] = buttonitem.name + (DefineVO.title || DefineVO.componentTitle || '');
|
}
|
|
if (!paramVOS['type']) {
|
paramVOS['type'] = DefineVO.btmType;
|
}
|
paramVOS['initvalue']=paramVOS['initvalue'] || paramVOS['initValue'];
|
let isShow = true;
|
if (paramVOS['initvalue'] && typeof(paramVOS.initvalue)=='string') {
|
let values = paramVOS['initvalue'].split(';');
|
let initValues = {}
|
values.forEach((item,i) => {
|
item = item.replace(':', '=');
|
if (item.indexOf('${') > -1) {
|
if (item.split('=')[1].indexOf('.') > -1) {
|
if (this.sourceData.length < 1 || !this.sourceData.oid) {
|
isShow = false;
|
this.$message.error("请先选择一条来源数据");
|
return false;
|
}
|
let name = item.split('=')[1].split('.')[1].replace('${', '').replace('}', '');
|
initValues[item.split('=')[0]] = this.sourceData[name]
|
} else {
|
if (this.dataStore.length < 1) {
|
isShow = false;
|
this.$message.error("请先选择一条数据");
|
return false;
|
}
|
let name = item.split('=')[1].replace('${', '').replace('}', '');
|
initValues[item.split('=')[0]] = this.dataStore[0][name];
|
|
}
|
}
|
})
|
paramVOS['initvalue'] = initValues
|
}
|
if(paramVOS['BSContent'] || paramVOS['BSContext']){
|
paramVOS['context']=paramVOS['BSContext'] || paramVOS['BSContent']
|
paramVOS['content']=paramVOS['BSContext'] || paramVOS['BSContent'];
|
}
|
|
const that=this;
|
if(isShow) {
|
doAction(buttonitem, {
|
paramVOS: paramVOS,
|
dataStore: this.dataStore || [],
|
sourceData: this.sourceData || {}
|
},function (){
|
if (that.$parent.handleRefresh) {
|
that.$parent.handleRefresh()
|
}
|
});
|
}
|
}
|
},
|
}
|
</script>
|
|
<style scoped>
|
|
</style>
|