pms-aomei/src/components/noTemplateComponents/operationComponent.js
2023-02-17 16:20:21 +08:00

99 lines
2.5 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// 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)
}
}