| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308 |
- <template>
- <page-list
- :list="list"
- :columns="columns"
- :group-actions="groupActions"
- :single-actions="singleActions"
- :showSearchbox="showSearchbox"
- :showGroupActions="showGroupActions" />
- </template>
- <script>
- import numerify from 'numerify'
- import { getNameDescriptionTableColumn, getTimeTableColumn, getStatusTableColumn, getEnabledTableColumn } from '@/utils/common/tableColumn'
- import { getEnabledSwitchActions } from '@/utils/common/tableActions'
- import { getStatusFilter, getEnabledFilter } from '@/utils/common/tableFilter'
- import expectStatus from '@/constants/expectStatus'
- import WindowsMixin from '@/mixins/windows'
- import GlobalSearchMixin from '@/mixins/globalSearch'
- import ListMixin from '@/mixins/list'
- export default {
- name: 'ScalingGroupRuleListSidePage',
- mixins: [WindowsMixin, ListMixin, GlobalSearchMixin],
- props: {
- id: String,
- getParams: {
- type: [Function, Object],
- },
- data: {
- type: Object,
- },
- },
- data () {
- return {
- list: this.$list.createList(this, {
- id: 'RuleListForScalingGroupSidePage',
- resource: 'scalingpolicies',
- apiVersion: 'v1',
- getParams: this.getParams,
- steadyStatus: Object.values(expectStatus.scalingpolicie).flat(),
- filterOptions: {
- name: {
- label: this.$t('compute.text_228'),
- filter: true,
- formatter: val => {
- return `name.contains("${val}")`
- },
- },
- status: getStatusFilter('scalingpolicie'),
- enabled: getEnabledFilter(),
- trigger_type: {
- label: this.$t('compute.text_913'),
- dropdown: true,
- items: Object.keys(this.$t('flexGrouTriggerType')).map(k => {
- return {
- label: this.$t('flexGrouTriggerType')[k],
- key: k,
- }
- }),
- },
- },
- }),
- columns: [
- getNameDescriptionTableColumn({
- onManager: this.onManager,
- // hideField: true,
- // slotCallback: row => {
- // return (
- // <side-page-trigger name='FiexGroupSidePage' id={row.id} list={this.list} vm={this}>{ row.name }</side-page-trigger>
- // )
- // },
- }),
- getEnabledTableColumn(),
- getStatusTableColumn({ statusModule: 'scalingpolicie' }),
- {
- field: 'trigger_type',
- title: this.$t('compute.text_913'),
- width: 120,
- formatter: ({ cellValue }) => {
- return this.$t('flexGrouTriggerType')[cellValue]
- },
- },
- {
- field: 'cycle',
- title: this.$t('compute.text_914'),
- width: 300,
- formatter: ({ row }) => {
- return this.formatTriggerType(row)
- },
- },
- {
- field: 'action',
- title: this.$t('compute.text_929'),
- width: 100,
- formatter: ({ row }) => {
- const acn = this.$t('flexGroupRuleAction')[row.action]
- return this.$t('compute.text_961', [acn, row.number])
- },
- },
- {
- field: 'cooling_time',
- title: this.$t('compute.text_962'),
- width: 100,
- formatter: ({ row }) => {
- return this.$t('compute.text_963', [row.cooling_time])
- },
- },
- // {
- // field: 'startTimeAndendTime',
- // title: '有效时间',
- // width: 160,
- // slots: {
- // default: ({ row }) => {
- // const { start_time: startTime, end_time: endTime } = row.cycle_timer
- // if (startTime && endTime) {
- // return [
- // <div>
- // {this.$moment(startTime).format()} <br/>
- // {this.$moment(endTime).format()}
- // </div>,
- // ]
- // }
- // },
- // },
- // },
- getTimeTableColumn(),
- ],
- singleActions: [
- {
- label: this.$t('compute.text_249'),
- action: obj => {
- this.createDialog('FlexRuleStartDialog', {
- data: [obj],
- columns: this.columns,
- title: this.$t('compute.text_249'),
- onManager: this.onManager,
- refresh: this.refresh,
- })
- },
- meta: (obj) => {
- let tooltip = ''
- if (!this.data.enabled) {
- tooltip = this.$t('compute.text_964')
- }
- if (!obj.enabled) {
- tooltip = this.$t('compute.text_965')
- }
- if (obj.status !== 'ready') {
- tooltip = this.$t('compute.text_966')
- }
- return {
- validate: !tooltip,
- tooltip,
- }
- },
- },
- {
- label: this.$t('compute.text_352'),
- actions: obj => {
- return [
- ...getEnabledSwitchActions(this, obj, ['scalingpolicies_perform_enable', 'scalingpolicies_perform_disable']),
- {
- label: this.$t('compute.perform_delete'),
- permission: 'scalingpolicies_delete',
- action: (obj) => {
- this.createDialog('DeleteResDialog', {
- data: [obj],
- columns: this.columns,
- title: this.$t('compute.perform_delete'),
- onManager: this.onManager,
- refresh: this.refresh,
- })
- },
- meta: (obj) => {
- return {
- validate: !obj.enabled,
- tooltip: obj.enabled && this.$t('compute.text_967'),
- }
- },
- },
- ]
- },
- },
- ],
- groupActions: [
- {
- label: this.$t('compute.perform_create'),
- permission: 'scalingpolicies_create',
- action: () => {
- this.createDialog('FiexRuleListCreateDialog', {
- title: this.$t('compute.perform_create'),
- resData: this.data,
- refresh: this.refresh,
- onManager: this.onManager,
- })
- },
- meta: () => ({
- buttonType: 'primary',
- }),
- },
- {
- label: this.$t('common.batchAction'),
- actions: () => {
- return [
- {
- label: this.$t('compute.text_656'),
- permission: 'scalingpolicies_perform_enable',
- action: () => {
- this.list.batchPerformAction('enable', null)
- },
- meta: () => ({
- validate: this.list.selectedItems.length,
- }),
- },
- {
- label: this.$t('compute.text_569'),
- permission: 'scalingpolicies_perform_disable',
- action: () => {
- this.list.batchPerformAction('disable', null)
- },
- meta: () => ({
- validate: this.list.selectedItems.length,
- }),
- },
- {
- label: this.$t('compute.perform_delete'),
- permission: 'scalingpolicies_delete',
- action: () => {
- this.createDialog('DeleteResDialog', {
- data: this.list.selectedItems,
- columns: this.columns,
- title: this.$t('compute.perform_delete'),
- onManager: this.onManager,
- })
- },
- meta: (obj) => {
- return {
- validate: this.list.selectedItems.length && this.list.selectedItems.every(val => !val.enabled),
- }
- },
- },
- ]
- },
- meta: () => ({
- validate: this.list.selectedItems.length,
- }),
- },
- ],
- }
- },
- created () {
- this.list.fetchData()
- },
- methods: {
- formatTriggerType (row) {
- const type = row.trigger_type
- const initStatus = ['creating', 'create_failed', 'init']
- if (initStatus.indexOf(row.status) > -1) {
- return '-'
- }
- // 告警策略
- if (type === 'alarm' && row.alarm) {
- const { indicator, operator, value, cumulate } = row.alarm
- const wrapperType = {
- lt: '<',
- gt: '>',
- }
- const unit = indicator === 'cpu' ? '%' : 'b/s'
- const cumulateTxt = this.$t('compute.text_968', [cumulate])
- return `${this.$t('flexGroupIndicator')[indicator]} ${wrapperType[operator]} ${value} ${unit},${cumulateTxt}`
- }
- // 定时策略
- if (type === 'timing' && row.timer) {
- const timeTxt = this.$moment(row.timer.exec_time).format()
- return this.$t('compute.text_969', [timeTxt])
- }
- // 周期策略
- if (type === 'cycle' && row.cycle_timer) {
- const timer = row.cycle_timer
- const { hour, minute, start_time: startTime, end_time: endTime } = timer
- const now = this.$moment()
- const utcOffset = now.utcOffset() * -1
- const trueHour = now.set({ hour }).subtract(utcOffset, 'minutes').hour()
- const typeTxt = this.$t('flexGroupCycleType')[timer.cycle_type]
- let itemsTxt = ''
- // 周
- if (timer.cycle_type === 'week' && timer.week_days.length > 0) {
- itemsTxt = '【' + timer.week_days.map(v => {
- return this.$t('flexGroupSubCycleTypeWeek')[v]
- }).join('|') + '】'
- }
- // 月
- if (timer.cycle_type === 'month') {
- itemsTxt = '【' + timer.month_days.map(v => {
- return this.$t('compute.text_927', [v])
- }).join('|') + '】'
- }
- let tiemStr = ''
- if (startTime && endTime) {
- tiemStr = this.$t('compute.text_970', [this.$moment(startTime).format('YYYY-MM-DD'), this.$moment(endTime).format('YYYY-MM-DD')])
- }
- return this.$t('compute.text_972', [typeTxt, itemsTxt, numerify(trueHour, '00'), numerify(minute, '00'), tiemStr])
- }
- return '-'
- },
- },
- }
- </script>
|