123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360 |
- /*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- import _ from 'lodash'
- import { h, ref, reactive } from 'vue'
- import { useI18n } from 'vue-i18n'
- import { useRouter } from 'vue-router'
- import type { Router } from 'vue-router'
- import type { TableColumns, RowKey } from 'naive-ui/es/data-table/src/interface'
- import { useAsyncState } from '@vueuse/core'
- import {
- batchCopyByCodes,
- batchDeleteByCodes,
- batchExportByCodes,
- deleteByCode,
- queryListPaging,
- release
- } from '@/service/modules/process-definition'
- import TableAction from './components/table-action'
- import styles from './index.module.scss'
- import { NTag } from 'naive-ui'
- import ButtonLink from '@/components/button-link'
- import {
- COLUMN_WIDTH_CONFIG,
- calculateTableWidth,
- DefaultTableWidth
- } from '@/utils/column-width-config'
- import type { IDefinitionParam } from './types'
- export function useTable() {
- const { t } = useI18n()
- const router: Router = useRouter()
- const variables = reactive({
- columns: [],
- tableWidth: DefaultTableWidth,
- checkedRowKeys: [] as Array<RowKey>,
- row: {},
- tableData: [],
- projectCode: ref(Number(router.currentRoute.value.params.projectCode)),
- page: ref(1),
- pageSize: ref(10),
- searchVal: ref(),
- totalPage: ref(1),
- showRef: ref(false),
- startShowRef: ref(false),
- timingShowRef: ref(false),
- versionShowRef: ref(false),
- copyShowRef: ref(false)
- })
- const createColumns = (variables: any) => {
- variables.columns = [
- {
- type: 'selection',
- disabled: (row) => row.releaseState === 'ONLINE',
- className: 'btn-selected',
- ...COLUMN_WIDTH_CONFIG['selection']
- },
- {
- title: '#',
- key: 'id',
- ...COLUMN_WIDTH_CONFIG['index'],
- render: (row, index) => index + 1
- },
- {
- title: t('project.workflow.workflow_name'),
- key: 'name',
- className: 'workflow-name',
- ...COLUMN_WIDTH_CONFIG['name'],
- render: (row) =>
- h(
- ButtonLink,
- {
- onClick: () =>
- void router.push({
- name: 'workflow-definition-detail',
- params: { code: row.code }
- })
- },
- { default: () => row.name }
- )
- },
- {
- title: t('project.workflow.status'),
- key: 'releaseState',
- ...COLUMN_WIDTH_CONFIG['state'],
- render: (row) =>
- row.releaseState === 'ONLINE'
- ? t('project.workflow.up_line')
- : t('project.workflow.down_line')
- },
- {
- title: t('project.workflow.create_time'),
- key: 'createTime',
- ...COLUMN_WIDTH_CONFIG['time']
- },
- {
- title: t('project.workflow.update_time'),
- key: 'updateTime',
- ...COLUMN_WIDTH_CONFIG['time']
- },
- {
- title: t('project.workflow.description'),
- key: 'description',
- ...COLUMN_WIDTH_CONFIG['note']
- },
- {
- title: t('project.workflow.create_user'),
- key: 'userName',
- ...COLUMN_WIDTH_CONFIG['userName']
- },
- {
- title: t('project.workflow.modify_user'),
- key: 'modifyBy',
- ...COLUMN_WIDTH_CONFIG['userName']
- },
- {
- title: t('project.workflow.schedule_publish_status'),
- key: 'scheduleReleaseState',
- ...COLUMN_WIDTH_CONFIG['state'],
- render: (row) => {
- if (row.scheduleReleaseState === 'ONLINE') {
- return h(
- NTag,
- { type: 'success', size: 'small' },
- {
- default: () => t('project.workflow.up_line')
- }
- )
- } else if (row.scheduleReleaseState === 'OFFLINE') {
- return h(
- NTag,
- { type: 'warning', size: 'small' },
- {
- default: () => t('project.workflow.down_line')
- }
- )
- } else {
- return '-'
- }
- }
- },
- {
- title: t('project.workflow.operation'),
- key: 'operation',
- ...COLUMN_WIDTH_CONFIG['operation'](8.5),
- className: styles.operation,
- render: (row) =>
- h(TableAction, {
- row,
- onEditWorkflow: () => editWorkflow(row),
- onStartWorkflow: () => startWorkflow(row),
- onTimingWorkflow: () => timingWorkflow(row),
- onVersionWorkflow: () => versionWorkflow(row),
- onDeleteWorkflow: () => deleteWorkflow(row),
- onReleaseWorkflow: () => releaseWorkflow(row),
- onCopyWorkflow: () => copyWorkflow(row),
- onExportWorkflow: () => exportWorkflow(row),
- onGotoTimingManage: () => gotoTimingManage(row),
- onGotoWorkflowTree: () => gotoWorkflowTree(row)
- })
- }
- ] as TableColumns<any>
- if (variables.tableWidth) {
- variables.tableWidth = calculateTableWidth(variables.columns)
- }
- }
- const editWorkflow = (row: any) => {
- variables.row = row
- router.push({
- name: 'workflow-definition-detail',
- params: { code: row.code }
- })
- }
- const startWorkflow = (row: any) => {
- variables.startShowRef = true
- variables.row = row
- }
- const timingWorkflow = (row: any) => {
- variables.timingShowRef = true
- variables.row = row
- }
- const versionWorkflow = (row: any) => {
- variables.versionShowRef = true
- variables.row = row
- }
- const deleteWorkflow = (row: any) => {
- deleteByCode(variables.projectCode, row.code).then(() => {
- window.$message.success(t('project.workflow.success'))
- getTableData({
- pageSize: variables.pageSize,
- pageNo: variables.page,
- searchVal: variables.searchVal
- })
- })
- }
- const batchDeleteWorkflow = () => {
- const data = {
- codes: _.join(variables.checkedRowKeys, ',')
- }
- batchDeleteByCodes(data, variables.projectCode).then(() => {
- window.$message.success(t('project.workflow.success'))
- if (
- variables.tableData.length === variables.checkedRowKeys.length &&
- variables.page > 1
- ) {
- variables.page -= 1
- }
- variables.checkedRowKeys = []
- getTableData({
- pageSize: variables.pageSize,
- pageNo: variables.page,
- searchVal: variables.searchVal
- })
- })
- }
- const batchExportWorkflow = () => {
- const fileName = 'workflow_' + new Date().getTime()
- const data = {
- codes: _.join(variables.checkedRowKeys, ',')
- }
- batchExportByCodes(data, variables.projectCode).then((res: any) => {
- downloadBlob(res, fileName)
- window.$message.success(t('project.workflow.success'))
- variables.checkedRowKeys = []
- })
- }
- const batchCopyWorkflow = () => {}
- const releaseWorkflow = (row: any) => {
- const data = {
- name: row.name,
- releaseState: (row.releaseState === 'ONLINE' ? 'OFFLINE' : 'ONLINE') as
- | 'OFFLINE'
- | 'ONLINE'
- }
- release(data, variables.projectCode, row.code).then(() => {
- window.$message.success(t('project.workflow.success'))
- getTableData({
- pageSize: variables.pageSize,
- pageNo: variables.page,
- searchVal: variables.searchVal
- })
- })
- }
- const copyWorkflow = (row: any) => {
- const data = {
- codes: String(row.code),
- targetProjectCode: variables.projectCode
- }
- batchCopyByCodes(data, variables.projectCode).then(() => {
- window.$message.success(t('project.workflow.success'))
- getTableData({
- pageSize: variables.pageSize,
- pageNo: variables.page,
- searchVal: variables.searchVal
- })
- })
- }
- const downloadBlob = (data: any, fileNameS = 'json') => {
- if (!data) {
- return
- }
- const blob = new Blob([data])
- const fileName = `${fileNameS}.json`
- if ('download' in document.createElement('a')) {
- // Not IE
- const url = window.URL.createObjectURL(blob)
- const link = document.createElement('a')
- link.style.display = 'none'
- link.href = url
- link.setAttribute('download', fileName)
- document.body.appendChild(link)
- link.click()
- document.body.removeChild(link) // remove element after downloading is complete.
- window.URL.revokeObjectURL(url) // release blob object
- } else {
- // IE 10+
- if (window.navigator.msSaveBlob) {
- window.navigator.msSaveBlob(blob, fileName)
- }
- }
- }
- const exportWorkflow = (row: any) => {
- const fileName = 'workflow_' + new Date().getTime()
- const data = {
- codes: String(row.code)
- }
- batchExportByCodes(data, variables.projectCode).then((res: any) => {
- downloadBlob(res, fileName)
- })
- }
- const gotoTimingManage = (row: any) => {
- router.push({
- name: 'workflow-definition-timing',
- params: { projectCode: variables.projectCode, definitionCode: row.code }
- })
- }
- const gotoWorkflowTree = (row: any) => {
- router.push({
- name: 'workflow-definition-tree',
- params: { projectCode: variables.projectCode, definitionCode: row.code }
- })
- }
- const getTableData = (params: IDefinitionParam) => {
- const { state } = useAsyncState(
- queryListPaging({ ...params }, variables.projectCode).then((res: any) => {
- variables.totalPage = res.totalPage
- variables.tableData = res.totalList.map((item: any) => {
- return { ...item }
- })
- }),
- { total: 0, table: [] }
- )
- return state
- }
- return {
- variables,
- createColumns,
- getTableData,
- batchDeleteWorkflow,
- batchExportWorkflow,
- batchCopyWorkflow
- }
- }
|