99 lines
2.5 KiB
JavaScript
99 lines
2.5 KiB
JavaScript
// import i18n from '@/i18n'
|
||
|
||
export default {
|
||
name: 'TableOperations',
|
||
props: {
|
||
injectData: {
|
||
type: Object,
|
||
default: () => ({})
|
||
}
|
||
},
|
||
data() {
|
||
return {
|
||
btnTypes: {
|
||
add: 'primary',
|
||
delete: 'danger',
|
||
detail: 'info'
|
||
// add more...
|
||
},
|
||
colors: {
|
||
delete: '#FF5454',
|
||
preview: '#f09843',
|
||
design: '#99089f',
|
||
// 'view-trend': 'red'
|
||
// add more...
|
||
},
|
||
text: {
|
||
// TODO: i18n
|
||
// edit: i18n.t('edit'),
|
||
// detail: i18n.t('detail'),
|
||
// delete: i18n.t('delete'),
|
||
// viewAttr: i18n.t('viewattr'),
|
||
// preview: i18n.t('preview'),
|
||
// design: i18n.t('design'),
|
||
edit: '编辑',
|
||
detail: '详情',
|
||
delete: '删除',
|
||
viewAttr: '查看属性',
|
||
preview: '预览',
|
||
view: '查看',
|
||
design: '设计',
|
||
'view-trend': '查看趋势',
|
||
'add-sub': '添加子类'
|
||
// add more...
|
||
}
|
||
}
|
||
},
|
||
methods: {
|
||
// 发射事件
|
||
emit(opt) {
|
||
let emitFull = false
|
||
let eventType = 'default'
|
||
let customField
|
||
if (typeof opt === 'object') {
|
||
eventType = opt.name
|
||
customField = opt.emitField || 'id'
|
||
emitFull = opt.emitFull || false
|
||
} else {
|
||
eventType = opt
|
||
}
|
||
this.$emit('emit-data', { type: eventType, data: emitFull ? this.injectData : customField ? this.injectData[customField] : this.injectData.id })
|
||
}
|
||
},
|
||
render: function (h) {
|
||
let btns = []
|
||
for (const opt of this.injectData.head?.options) {
|
||
const optIsObj = typeof opt === 'object'
|
||
|
||
if (optIsObj) {
|
||
// 注意:为空字符串或null/undefined都会不验证权限
|
||
if (!opt.permission || (opt.permission && this.$hasPermission(opt.permission))) {
|
||
btns.push(
|
||
h('el-button',
|
||
{
|
||
props: { type: 'text' },
|
||
style: { color: this.colors[opt.name] || '#0b58ff' },
|
||
on: { click: this.emit.bind(null, opt) }
|
||
},
|
||
this.text[opt.name]
|
||
)
|
||
)
|
||
}
|
||
} else {
|
||
// 此时 opt 是一个 string,且默认有操作权限
|
||
btns.push(
|
||
h('el-button',
|
||
{
|
||
props: { type: 'text' },
|
||
style: { color: this.colors[opt] || '#0b58ff' },
|
||
on: { click: this.emit.bind(null, opt) }
|
||
},
|
||
this.text[opt]
|
||
)
|
||
)
|
||
}
|
||
|
||
}
|
||
return h('span', null, btns)
|
||
}
|
||
} |