Commit dad997a7 authored by LiXuyang's avatar LiXuyang

任务流-复制

parent 0450f040
<template>
<BasicModal
width="40%"
v-bind="$attrs"
@register="registerModal"
:title="getTitle"
@ok="handleSubmit"
>
<BasicForm @register="registerForm">
<template #path="{ field, model }">
<InputSearch v-model:value="model[field]" enter-button="选择" @search="handleSearch" />
</template>
</BasicForm>
</BasicModal>
</template>
<script lang="ts" setup>
import { ref, unref } from 'vue';
import { BasicModal, useModalInner } from '@/components/Modal';
import { BasicForm, useForm } from '@/components/Form';
import { copyFormSchema } from '@/views/taskScheduling/taskFlowDesign/design.data';
import { BaseFormatProps } from 'vue-i18n';
import { InputSearch } from 'ant-design-vue';
const isUpdate = ref(false);
const isMove = ref(false);
const rowId = ref('');
//获取接口数据并放在下拉框里(这里是打开了一个弹框)
//初始化表单
const [registerForm, { setFieldsValue, resetFields, validate }] = useForm({
labelWidth: 100,
baseColProps: { lg: 24, md: 24 },
schemas: copyFormSchema,
showActionButtonGroup: false,
actionColOptions: {
span: 23,
},
} as BaseFormatProps);
//初始化弹框
const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data) => {
await resetFields();
setModalProps({ confirmLoading: false });
isUpdate.value = !!data?.isUpdate;
isMove.value = !!data?.isMove;
if (unref(isUpdate)) {
// 获取行数据的id
rowId.value = data.record.businessId;
// 塞值
await setFieldsValue({
...data.record,
});
}
});
const getTitle = '复制到';
function handleSearch() {}
/**确定按钮*/
async function handleSubmit() {
await validate();
closeModal();
}
</script>
......@@ -41,7 +41,7 @@
<BasicTable @register="rightTable" :searchInfo="searchInfo">
<template #headerCell="{ column }">
<template v-if="column.key === 'task'">
<span>被引{{ getRightList().length }}</span>
<span>被引{{ getRightList().length }}</span>
</template>
</template>
</BasicTable>
......@@ -51,7 +51,7 @@
</template>
<script lang="ts" setup>
import { useTable, TableAction, BasicTableProps } from '@/components/Table';
import { ref, computed, unref, reactive } from 'vue';
import {ref, computed, unref, reactive, defineEmits} from 'vue';
import Icon from '@/components/Icon/Icon.vue';
import { Select, Alert, List, Row, Col } from 'ant-design-vue';
import { BranchesOutlined } from '@ant-design/icons-vue';
......@@ -72,6 +72,7 @@
import { useMessage } from '@/hooks/web/useMessage';
import { delList1, delList2, delList3 } from './designData.ts';
const emit = defineEmits(['success']);
const getTitle = '任务流依赖/引用提醒';
//初始化弹框
const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data) => {
......@@ -127,5 +128,6 @@
} as BasicTableProps);
async function handleSubmit() {
closeModal();
emit('success');
}
</script>
import { FormSchema } from '@/components/Form';
import { BasicColumn } from '@/components/Table';
import {InputProps, TableColumn} from 'ant-design-vue';
import { InputProps, TableColumn } from 'ant-design-vue';
import { TreeItem } from '@/components/Tree';
export const designFormSchema: FormSchema[] = [
......@@ -900,8 +900,8 @@ export const taskOverallConfig: FormSchema[] = [
{
label: '调度时间',
field: 'scheduleTime',
fields:['scheduleTime'],
slot:'scheduleTime',
fields: ['scheduleTime'],
slot: 'scheduleTime',
colProps: { lg: 24, md: 24 },
show: ({ model }) => {
return model.cycle === '每天一次';
......@@ -910,7 +910,7 @@ export const taskOverallConfig: FormSchema[] = [
{
label: '事件触发器',
field: 'eventTrigger',
slot:'eventTrigger',
slot: 'eventTrigger',
colProps: { lg: 24, md: 24 },
show: ({ model }) => {
return model.cycle === '事件触发器';
......@@ -1096,7 +1096,6 @@ export const delTableColumn1: BasicColumn[] = [
},
];
export const defineEvent: FormSchema[] = [
{
label: '检查频率',
......@@ -1107,8 +1106,8 @@ export const defineEvent: FormSchema[] = [
colProps: {
span: 20,
},
helpMessage: ['正整数,默认60','单位:秒、分钟、小时'],
slot:'checkFrequency',
helpMessage: ['正整数,默认60', '单位:秒、分钟、小时'],
slot: 'checkFrequency',
required: true,
},
{
......@@ -1119,7 +1118,7 @@ export const defineEvent: FormSchema[] = [
colProps: {
span: 20,
},
slot:'triggerType',
slot: 'triggerType',
},
{
label: '文件系统源',
......@@ -1127,7 +1126,7 @@ export const defineEvent: FormSchema[] = [
show: ({ model }) => {
return model.triggerType === '文件到达';
},
slot:'fileSystemSource',
slot: 'fileSystemSource',
colProps: {
span: 20,
},
......@@ -1136,7 +1135,7 @@ export const defineEvent: FormSchema[] = [
{
label: '文件路径',
field: 'filePath',
slot:'filePath',
slot: 'filePath',
show: ({ model }) => {
return model.triggerType === '文件到达';
},
......@@ -1150,8 +1149,8 @@ export const defineEvent: FormSchema[] = [
field: 'targetObject',
defaultValue: '资源名称',
fields: ['targetObjects'],
slot:'targetObject',
helpMessage: ['输入文件或文件名称','支持通配符和参数'],
slot: 'targetObject',
helpMessage: ['输入文件或文件名称', '支持通配符和参数'],
show: ({ model }) => {
return model.triggerType === '文件到达';
},
......@@ -1182,13 +1181,13 @@ export const defineEvent: FormSchema[] = [
{
label: '保存结果',
field: 'saveResults',
fields: ['saveResultName','saveResultObject'],
fields: ['saveResultName', 'saveResultObject'],
helpMessage: ['下拉搜索框根据参数类型过滤可选择的参数名'],
defaultValueObj: { saveResultName: '全局参数' },
colProps: {
span: 20,
},
slot:'saveResults',
slot: 'saveResults',
show: ({ model }) => {
return model.triggerType === '文件到达';
},
......@@ -1202,7 +1201,7 @@ export const defineEvent: FormSchema[] = [
span: 20,
},
/*component:'TimePicker',*/
slot:'startTime',
slot: 'startTime',
show: ({ model }) => {
return model.triggerType === 'SQL结果检查';
},
......@@ -1216,7 +1215,7 @@ export const defineEvent: FormSchema[] = [
colProps: {
span: 20,
},
slot:'rollingTimeWindow',
slot: 'rollingTimeWindow',
show: ({ model }) => {
return model.triggerType === 'SQL结果检查';
},
......@@ -1244,16 +1243,16 @@ export const defineEvent: FormSchema[] = [
{
label: '连接',
field: 'connection',
component:'Select',
defaultValue:'1',
component: 'Select',
defaultValue: '1',
colProps: {
span: 20,
},
componentProps: {
options: [
{value: '1', label: '192.168.11.3'},
{value: '2', label: '192.168.96.3'},
{value: '3', label: '192.168.1.32'},
{ value: '1', label: '192.168.11.3' },
{ value: '2', label: '192.168.96.3' },
{ value: '3', label: '192.168.1.32' },
],
},
show: ({ model }) => {
......@@ -1266,7 +1265,7 @@ export const defineEvent: FormSchema[] = [
field: 'sql',
component: 'InputTextArea',
componentProps: {
placeholder:'事件满足取决于当前sql返回结果是否为空,' +
placeholder: '事件满足取决于当前sql返回结果是否为空,' +
'若无返回结果则判断事件条件未达成:\n' +
'此处支持引用任务流参数、工作区参数、全局参数',
rows: 8,
......@@ -1282,11 +1281,11 @@ export const defineEvent: FormSchema[] = [
{
label: '保存结果',
field: 'saveResultsT',
fields: ['saveResultName','saveResultObject'],
fields: ['saveResultName', 'saveResultObject'],
colProps: {
span: 20,
},
slot:'saveResults',
slot: 'saveResults',
show: ({ model }) => {
return model.triggerType === 'SQL结果检查';
},
......@@ -1299,7 +1298,7 @@ export const defineEvent: FormSchema[] = [
span: 20,
},
/*component:'TimePicker',*/
slot:'startTimeT',
slot: 'startTimeT',
show: ({ model }) => {
return model.triggerType === '脚本自定义';
},
......@@ -1312,7 +1311,7 @@ export const defineEvent: FormSchema[] = [
colProps: {
span: 20,
},
slot:'rollingTimeWindowT',
slot: 'rollingTimeWindowT',
show: ({ model }) => {
return model.triggerType === '脚本自定义';
},
......@@ -1342,7 +1341,8 @@ export const defineEvent: FormSchema[] = [
field: 'scriptContent',
component: 'InputTextArea',
componentProps: {
placeholder:'脚本运行成功,即满足,因此判断逻辑由用户确定例如\n' +
placeholder:
'脚本运行成功,即满足,因此判断逻辑由用户确定例如\n' +
'675/1346\n' +
'set +e\n' +
'a=2\n' +
......@@ -1352,14 +1352,23 @@ export const defineEvent: FormSchema[] = [
'TRANSWARP\n' +
'else exit 1\n' +
'set-e',
rows:12,
rows: 12,
} as InputProps,
colProps: {
span: 20,
},
show: ({ model }) => {
return model.triggerType === '脚本自定义';
colProps: {
span: 20,
},
show: ({ model }) => {
return model.triggerType === '脚本自定义';
},
},
required: true,
},
];
export const copyFormSchema: FormSchema[] = [
{
label: '路径',
field: 'path',
slot: 'path',
},
];
......@@ -10,18 +10,17 @@
:options="versionOptions"
/>
<a-button v-if="versionFlag" type="primary">
<RollbackOutlined/>
<RollbackOutlined />
回滚
</a-button>
<a-button v-if="versionFlag" type="primary" danger @click="handleExit"
>
<CloseOutlined/>
<a-button v-if="versionFlag" type="primary" danger @click="handleExit">
<CloseOutlined />
退出
</a-button
</a-button>
<a-button v-if="!versionFlag" style="border-color: transparent">
<Icon icon="ant-design:dashboard-outlined" style="color: blue" size="24" />
<p>跳转运维</p></a-button
>
<a-button v-if="!versionFlag" style="border-color:transparent">
<Icon icon="ant-design:dashboard-outlined" style="color: blue" size="24"/>
<p>跳转运维</p></a-button>
<a-button v-if="!versionFlag" :disabled="debugFlag" type="primary">
<!-- <Icon icon="ant-design:caret-right-outlined" style="color: blue" size="24"/>
<p>运行</p>-->
......@@ -32,31 +31,29 @@
调试
</a-button>
<a-button v-if="!versionFlag && debugFlag" type="primary">调试全部任务</a-button>
<a-button v-if="!versionFlag && debugFlag" type="primary" @click="handelOutDebug">退出调试
<a-button v-if="!versionFlag && debugFlag" type="primary" @click="handelOutDebug"
>退出调试
</a-button>
<a-button v-if="!versionFlag" :disabled="debugFlag" type="primary" @click="handleSave"
>保存
</a-button
>
>保存
</a-button>
<a-button
v-if="!versionFlag && !uploadFlag"
:disabled="debugFlag"
type="primary"
@click="handleUpload"
>发布
</a-button
>
>发布
</a-button>
<a-button v-if="!versionFlag && uploadFlag" type="primary" @click="handleOffline"
>下线
</a-button
>
>下线
</a-button>
<div style="display: flex; flex-direction: column; text-align: center">
<RadioGroup v-model:value="showType" button-style="solid" size="small">
<RadioButton value="table">
<UnorderedListOutlined/>
<UnorderedListOutlined />
</RadioButton>
<RadioButton value="chart">
<AppstoreOutlined/>
<AppstoreOutlined />
</RadioButton>
</RadioGroup>
<div>展示切换</div>
......@@ -68,29 +65,29 @@
<a-button type="primary" @click="handleVersion">版本管理</a-button>
</template>
<template #footer>
<div style="display: flex;">
<ModelTree class="w-1/4" @select="handleSelect"/>
<BasicTable class="w-3/4"
style="height: 1000px;"
v-if="showType === 'table'"
@register="registerTable"
:searchInfo="searchInfo"
<div style="display: flex">
<ModelTree class="w-1/4" @select="handleSelect" />
<BasicTable
class="w-3/4"
style="height: 1000px"
v-if="showType === 'table'"
@register="registerTable"
:searchInfo="searchInfo"
>
<template #toolbar>
<a-button @click="handleOrderType"
>
<SwapRightOutlined :rotate="rotate"/>
<a-button @click="handleOrderType">
<SwapRightOutlined :rotate="rotate" />
按执行计划排序
</a-button
</a-button>
<a-button :disabled="getRowSelection().selectedRowKeys <= 0" @click="handleCopy"
>复制</a-button
>
<a-button :disabled="getRowSelection().selectedRowKeys <= 0">复制</a-button>
<a-button :disabled="getRowSelection().selectedRowKeys <= 0" @click="handleDeleteMore"
>删除
</a-button
>
>删除
</a-button>
<Dropdown :trigger="['click']">
<a-button type="primary" @click.prevent>
<PlusOutlined/>
<PlusOutlined />
新建任务
</a-button>
<template #overlay>
......@@ -158,150 +155,153 @@
</template>
</template>
<template #task="{ text, record }">
<a-button v-if="text">{{ text }}
<CheckCircleFilled style="color: #44c498"/>
<a-button v-if="text"
>{{ text }}
<CheckCircleFilled style="color: #44c498" />
</a-button>
<a-button @click="handleSetting">
<SettingOutlined/>
<SettingOutlined />
</a-button>
</template>
</BasicTable>
<div v-if="showType === 'chart'" class="w-3/4" style="height: 1000px;margin-left: 30px">
<div v-if="showType === 'chart'" class="w-3/4" style="height: 1000px; margin-left: 30px">
<!-- <img src="/src/assets/images/taskFlushChart.jpg" style="width: 100%" alt="" />-->
<!-- <FlowChart :data="demoData" :flowOptions="flowOptions" :patternItems="patternItems" v-if="showType === 'chart'"/>-->
<FlowChart :data="demoData" :patternItems="patternItems" v-if="showType === 'chart'"/>
<FlowChart :data="demoData" :patternItems="patternItems" v-if="showType === 'chart'" />
</div>
</div>
</template>
<TaskModel @register="taskModel"/>
<UpstreamModel @register="upstreamTaskModel"/>
<DependModel @register="dependModel"/>
<TaskConfigModel @register="taskConfigModel"/>
<UploadModel @register="uploadModel" @set-upload-flag="setUploadFlag"/>
<VersionModel @register="versionModel" @set-version="setVersion" @show-dag="showDag"/>
<DeleteModel @register="deleteModel"/>
<OfflineModel @register="offlineModel" @set-upload-flag="setUploadFlag"/>
<TaskFlowConfig @register="taskFlowConfig"/>
<TaskModel @register="taskModel" />
<UpstreamModel @register="upstreamTaskModel" />
<DependModel @register="dependModel" />
<TaskConfigModel @register="taskConfigModel" />
<UploadModel @register="uploadModel" @set-upload-flag="setUploadFlag" />
<VersionModel @register="versionModel" @set-version="setVersion" @show-dag="showDag" />
<DeleteModel @register="deleteModel" @success="handleDelelte" />
<OfflineModel @register="offlineModel" @set-upload-flag="setUploadFlag" />
<TaskFlowConfig @register="taskFlowConfig" />
<CopyModal @register="copyModal" />
</PageWrapper>
</template>
<script lang="ts" setup>
import TaskModel from './taskModel.vue';
import {reactive, onMounted, ref, nextTick, computed} from 'vue';
import {
SettingOutlined,
UnorderedListOutlined,
AppstoreOutlined,
CheckCircleFilled,
SwapRightOutlined,
PlusOutlined,
RollbackOutlined,
CloseOutlined,
} from '@ant-design/icons-vue';
import {PageWrapper} from '@/components/Page';
import {TableAction, useTable} from '@/components/Table';
import {useRoute, onBeforeRouteLeave, useRouter} from 'vue-router';
import {useFilterStore} from '@/store/modules/filterData';
import {
Descriptions,
Tabs,
Select,
RadioGroup,
RadioButton,
Dropdown,
Menu,
MenuItem,
} from 'ant-design-vue';
import EntityTable from './entityTable.vue';
import ConnectionTable from './connectionTable.vue';
import CrossTable from './crossTable.vue';
import {
entityData,
infoData,
} from '@/views/dataWarehousePlanning/logicalModel/modelDetail/modelData';
import {FormSchema} from '@/components/Form';
import {useModal} from '@/components/Modal';
import TurnPhysicalModel from './turnPhysicalModel.vue';
import VersionDetailModel from './versionModel.vue';
import {useMessage} from '@/hooks/web/useMessage';
import BasicTable from '@/components/Table/src/BasicTable.vue';
import {
entityColumns,
entityFormSchema,
} from '@/views/dataWarehousePlanning/logicalModel/modelDetail/model.data';
import {
designColumn,
designFormSchema,
} from '@/views/taskScheduling/taskFlowDesign/design.data';
import {designData} from '@/views/taskScheduling/taskFlowDesign/designData';
import {router} from '@/router';
import UpstreamModel from './upstreamTaskModel.vue';
import DependModel from './dependModel.vue';
import TaskConfigModel from './taskConfigModel.vue';
import UploadModel from './uploadModel.vue';
import VersionModel from './versionModel.vue';
import DeleteModel from './deleteModel.vue';
import OfflineModel from './offlineModel.vue';
import TaskFlowConfig from './taskFlowConfig.vue';
import ModelTree from './ModelTree.vue';
import {logicalData} from '@/views/dataWarehousePlanning/logicalModel/modelData';
import Icon from "@/components/Icon/Icon.vue";
import demoData from "./dataTurbo.json";
import {FlowChart} from "@/components/FlowChart";
import TaskModel from './taskModel.vue';
import { reactive, onMounted, ref, nextTick, computed } from 'vue';
import {
SettingOutlined,
UnorderedListOutlined,
AppstoreOutlined,
CheckCircleFilled,
SwapRightOutlined,
PlusOutlined,
RollbackOutlined,
CloseOutlined,
} from '@ant-design/icons-vue';
import { PageWrapper } from '@/components/Page';
import { TableAction, useTable } from '@/components/Table';
import { useRoute, onBeforeRouteLeave, useRouter } from 'vue-router';
import { useFilterStore } from '@/store/modules/filterData';
import {
Descriptions,
Tabs,
Select,
RadioGroup,
RadioButton,
Dropdown,
Menu,
MenuItem,
} from 'ant-design-vue';
import EntityTable from './entityTable.vue';
import ConnectionTable from './connectionTable.vue';
import CrossTable from './crossTable.vue';
import {
entityData,
infoData,
} from '@/views/dataWarehousePlanning/logicalModel/modelDetail/modelData';
import { FormSchema } from '@/components/Form';
import { useModal } from '@/components/Modal';
import TurnPhysicalModel from './turnPhysicalModel.vue';
import VersionDetailModel from './versionModel.vue';
import { useMessage } from '@/hooks/web/useMessage';
import BasicTable from '@/components/Table/src/BasicTable.vue';
import {
entityColumns,
entityFormSchema,
} from '@/views/dataWarehousePlanning/logicalModel/modelDetail/model.data';
import {
designColumn,
designFormSchema,
} from '@/views/taskScheduling/taskFlowDesign/design.data';
import { designData } from '@/views/taskScheduling/taskFlowDesign/designData';
import { router } from '@/router';
import UpstreamModel from './upstreamTaskModel.vue';
import DependModel from './dependModel.vue';
import TaskConfigModel from './taskConfigModel.vue';
import UploadModel from './uploadModel.vue';
import VersionModel from './versionModel.vue';
import DeleteModel from './deleteModel.vue';
import OfflineModel from './offlineModel.vue';
import TaskFlowConfig from './taskFlowConfig.vue';
import ModelTree from './ModelTree.vue';
import { logicalData } from '@/views/dataWarehousePlanning/logicalModel/modelData';
import Icon from '@/components/Icon/Icon.vue';
import demoData from './dataTurbo.json';
import { FlowChart } from '@/components/FlowChart';
import CopyModal from './copyModal.vue';
const [taskModel, {openModal: openTaskModel}] = useModal();
const filterStore = useFilterStore();
const [upstreamTaskModel, {openModal: openUpstreamModel}] = useModal();
const [dependModel, {openModal: openDependModel}] = useModal();
const [taskConfigModel, {openModal: openTaskConfigModel}] = useModal();
const [uploadModel, {openModal: openUploadModel}] = useModal();
const [versionModel, {openModal: openVersionModel}] = useModal();
const [deleteModel, {openModal: openDeleteModel}] = useModal();
const [offlineModel, {openModal: openOfflineModel}] = useModal();
const [taskFlowConfig, {openModal: openTaskFlowConfig}] = useModal();
const rotate = ref(90);
const showType = ref('table');
const searchInfo = reactive<Recordable>({});
const {createMessage, createConfirm} = useMessage();
const versionFlag = ref(false);
const debugFlag = ref(false);
const version = ref();
const versionOptions = [
{
label: 'V20 2023/07/07 14:24:25',
value: 'V20 2023/07/07 14:24:25',
},
{
label: 'V19 2023/07/07 14:11:05',
value: 'V19 2023/07/07 14:11:05',
},
{
label: 'V18 2023/07/06 14:39:59',
value: 'V18 2023/07/06 14:39:59',
},
{
label: 'V17 2023/07/06 10:54:14',
value: 'V17 2023/07/06 10:54:14',
},
{
label: 'V16 2023/07/04 19:26:29',
value: 'V16 2023/07/04 19:26:29',
},
{
label: 'V15 2023/07/04 18:56:54',
value: 'V15 2023/07/04 18:56:54',
},
{
label: 'V14 2023/07/04 17:06:19',
value: 'V14 2023/07/04 17:06:19',
},
{
label: 'V13 2023/07/03 11:02:10',
value: 'V13 2023/07/03 11:02:10',
},
];
/* // 配置 FlowChart 的参数
const [taskModel, { openModal: openTaskModel }] = useModal();
const filterStore = useFilterStore();
const [upstreamTaskModel, { openModal: openUpstreamModel }] = useModal();
const [dependModel, { openModal: openDependModel }] = useModal();
const [taskConfigModel, { openModal: openTaskConfigModel }] = useModal();
const [uploadModel, { openModal: openUploadModel }] = useModal();
const [versionModel, { openModal: openVersionModel }] = useModal();
const [deleteModel, { openModal: openDeleteModel }] = useModal();
const [offlineModel, { openModal: openOfflineModel }] = useModal();
const [taskFlowConfig, { openModal: openTaskFlowConfig }] = useModal();
const [copyModal, { openModal: openCopyModal }] = useModal();
const rotate = ref(90);
const showType = ref('table');
const searchInfo = reactive<Recordable>({});
const { createMessage, createConfirm } = useMessage();
const versionFlag = ref(false);
const debugFlag = ref(false);
const version = ref();
const versionOptions = [
{
label: 'V20 2023/07/07 14:24:25',
value: 'V20 2023/07/07 14:24:25',
},
{
label: 'V19 2023/07/07 14:11:05',
value: 'V19 2023/07/07 14:11:05',
},
{
label: 'V18 2023/07/06 14:39:59',
value: 'V18 2023/07/06 14:39:59',
},
{
label: 'V17 2023/07/06 10:54:14',
value: 'V17 2023/07/06 10:54:14',
},
{
label: 'V16 2023/07/04 19:26:29',
value: 'V16 2023/07/04 19:26:29',
},
{
label: 'V15 2023/07/04 18:56:54',
value: 'V15 2023/07/04 18:56:54',
},
{
label: 'V14 2023/07/04 17:06:19',
value: 'V14 2023/07/04 17:06:19',
},
{
label: 'V13 2023/07/03 11:02:10',
value: 'V13 2023/07/03 11:02:10',
},
];
/* // 配置 FlowChart 的参数
const flowOptions = {
// 定义流程图的配置信息,例如节点、线条的样式等
nodeWidth: 120,
......@@ -311,232 +311,236 @@ const versionOptions = [
// 可以进一步设置其他的选项
};*/
// 左侧拖拽区域的元素
const patternItems = [
{
type: 'rect',
text: '</> new task',
label: '脚本',
icon: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAYAAAEFVwZaAAAABGdBTUEAALGPC/xhBQAAAqlJREFUOBF9VM9rE0EUfrMJNUKLihGbpLGtaCOIR8VjQMGDePCgCCIiCNqzCAp2MyYUCXhUtF5E0D+g1t48qAd7CCLqQUQKEWkStcEfVGlLdp/fm3aW2QQdyLzf33zz5m2IsAZ9XhDpyaaIZkTS4ASzK41TFao88GuJ3hsr2pAbipHxuSYyKRugagICGANkfFnNh3HeE2N0b3nN2cgnpcictw5veJIzxmDamSlxxQZicq/mflxhbaH8BLRbuRwNtZp0JAhoplVRUdzmCe/vO27wFuuA3S5qXruGdboy5/PRGFsbFGKo/haRtQHIrM83bVeTrOgNhZReWaYGnE4aUQgTJNvijJFF4jQ8BxJE5xfKatZWmZcTQ+BVgh7s8SgPlCkcec4mGTmieTP4xd7PcpIEg1TX6gdeLW8rTVMVLVvb7ctXoH0Cydl2QOPJBG21STE5OsnbweVYzAnD3A7PVILuY0yiiyDwSm2g441r6rMSgp6iK42yqroI2QoXeJVeA+YeZSa47gZdXaZWQKTrG93rukk/l2Al6Kzh5AZEl7dDQy+JjgFahQjRopSxPbrbvK7GRe9ePWBo1wcU7sYrFZtavXALwGw/7Dnc50urrHJuTPSoO2IMV3gUQGNg87IbSOIY9BpiT9HV7FCZ94nPXb3MSnwHn/FFFE1vG6DTby+r31KAkUktB3Qf6ikUPWxW1BkXSPQeMHHiW0+HAd2GelJsZz1OJegCxqzl+CLVHa/IibuHeJ1HAKzhuDR+ymNaRFM+4jU6UWKXorRmbyqkq/D76FffevwdCp+jN3UAN/C9JRVTDuOxC/oh+EdMnqIOrlYteKSfadVRGLJFJPSB/ti/6K8f0CNymg/iH2gO/f0DwE0yjAFO6l8JaR5j0VPwPwfaYHqOqrCI319WzwhwzNW/aQAAAABJRU5ErkJggg==',
},
{
type: 'rect',
text: '</> new task',
label: 'Java',
icon: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAYAAAEFVwZaAAAABGdBTUEAALGPC/xhBQAAAqlJREFUOBF9VM9rE0EUfrMJNUKLihGbpLGtaCOIR8VjQMGDePCgCCIiCNqzCAp2MyYUCXhUtF5E0D+g1t48qAd7CCLqQUQKEWkStcEfVGlLdp/fm3aW2QQdyLzf33zz5m2IsAZ9XhDpyaaIZkTS4ASzK41TFao88GuJ3hsr2pAbipHxuSYyKRugagICGANkfFnNh3HeE2N0b3nN2cgnpcictw5veJIzxmDamSlxxQZicq/mflxhbaH8BLRbuRwNtZp0JAhoplVRUdzmCe/vO27wFuuA3S5qXruGdboy5/PRGFsbFGKo/haRtQHIrM83bVeTrOgNhZReWaYGnE4aUQgTJNvijJFF4jQ8BxJE5xfKatZWmZcTQ+BVgh7s8SgPlCkcec4mGTmieTP4xd7PcpIEg1TX6gdeLW8rTVMVLVvb7ctXoH0Cydl2QOPJBG21STE5OsnbweVYzAnD3A7PVILuY0yiiyDwSm2g441r6rMSgp6iK42yqroI2QoXeJVeA+YeZSa47gZdXaZWQKTrG93rukk/l2Al6Kzh5AZEl7dDQy+JjgFahQjRopSxPbrbvK7GRe9ePWBo1wcU7sYrFZtavXALwGw/7Dnc50urrHJuTPSoO2IMV3gUQGNg87IbSOIY9BpiT9HV7FCZ94nPXb3MSnwHn/FFFE1vG6DTby+r31KAkUktB3Qf6ikUPWxW1BkXSPQeMHHiW0+HAd2GelJsZz1OJegCxqzl+CLVHa/IibuHeJ1HAKzhuDR+ymNaRFM+4jU6UWKXorRmbyqkq/D76FffevwdCp+jN3UAN/C9JRVTDuOxC/oh+EdMnqIOrlYteKSfadVRGLJFJPSB/ti/6K8f0CNymg/iH2gO/f0DwE0yjAFO6l8JaR5j0VPwPwfaYHqOqrCI319WzwhwzNW/aQAAAABJRU5ErkJggg==',
},
{
type: 'rect',
text: '</> new task',
label: 'Python',
icon: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAYAAAEFVwZaAAAABGdBTUEAALGPC/xhBQAAAqlJREFUOBF9VM9rE0EUfrMJNUKLihGbpLGtaCOIR8VjQMGDePCgCCIiCNqzCAp2MyYUCXhUtF5E0D+g1t48qAd7CCLqQUQKEWkStcEfVGlLdp/fm3aW2QQdyLzf33zz5m2IsAZ9XhDpyaaIZkTS4ASzK41TFao88GuJ3hsr2pAbipHxuSYyKRugagICGANkfFnNh3HeE2N0b3nN2cgnpcictw5veJIzxmDamSlxxQZicq/mflxhbaH8BLRbuRwNtZp0JAhoplVRUdzmCe/vO27wFuuA3S5qXruGdboy5/PRGFsbFGKo/haRtQHIrM83bVeTrOgNhZReWaYGnE4aUQgTJNvijJFF4jQ8BxJE5xfKatZWmZcTQ+BVgh7s8SgPlCkcec4mGTmieTP4xd7PcpIEg1TX6gdeLW8rTVMVLVvb7ctXoH0Cydl2QOPJBG21STE5OsnbweVYzAnD3A7PVILuY0yiiyDwSm2g441r6rMSgp6iK42yqroI2QoXeJVeA+YeZSa47gZdXaZWQKTrG93rukk/l2Al6Kzh5AZEl7dDQy+JjgFahQjRopSxPbrbvK7GRe9ePWBo1wcU7sYrFZtavXALwGw/7Dnc50urrHJuTPSoO2IMV3gUQGNg87IbSOIY9BpiT9HV7FCZ94nPXb3MSnwHn/FFFE1vG6DTby+r31KAkUktB3Qf6ikUPWxW1BkXSPQeMHHiW0+HAd2GelJsZz1OJegCxqzl+CLVHa/IibuHeJ1HAKzhuDR+ymNaRFM+4jU6UWKXorRmbyqkq/D76FffevwdCp+jN3UAN/C9JRVTDuOxC/oh+EdMnqIOrlYteKSfadVRGLJFJPSB/ti/6K8f0CNymg/iH2gO/f0DwE0yjAFO6l8JaR5j0VPwPwfaYHqOqrCI319WzwhwzNW/aQAAAABJRU5ErkJggg==',
},
];
// 左侧拖拽区域的元素
const patternItems = [
{
type: 'rect',
text: '</> new task',
label: '脚本',
icon: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAYAAAEFVwZaAAAABGdBTUEAALGPC/xhBQAAAqlJREFUOBF9VM9rE0EUfrMJNUKLihGbpLGtaCOIR8VjQMGDePCgCCIiCNqzCAp2MyYUCXhUtF5E0D+g1t48qAd7CCLqQUQKEWkStcEfVGlLdp/fm3aW2QQdyLzf33zz5m2IsAZ9XhDpyaaIZkTS4ASzK41TFao88GuJ3hsr2pAbipHxuSYyKRugagICGANkfFnNh3HeE2N0b3nN2cgnpcictw5veJIzxmDamSlxxQZicq/mflxhbaH8BLRbuRwNtZp0JAhoplVRUdzmCe/vO27wFuuA3S5qXruGdboy5/PRGFsbFGKo/haRtQHIrM83bVeTrOgNhZReWaYGnE4aUQgTJNvijJFF4jQ8BxJE5xfKatZWmZcTQ+BVgh7s8SgPlCkcec4mGTmieTP4xd7PcpIEg1TX6gdeLW8rTVMVLVvb7ctXoH0Cydl2QOPJBG21STE5OsnbweVYzAnD3A7PVILuY0yiiyDwSm2g441r6rMSgp6iK42yqroI2QoXeJVeA+YeZSa47gZdXaZWQKTrG93rukk/l2Al6Kzh5AZEl7dDQy+JjgFahQjRopSxPbrbvK7GRe9ePWBo1wcU7sYrFZtavXALwGw/7Dnc50urrHJuTPSoO2IMV3gUQGNg87IbSOIY9BpiT9HV7FCZ94nPXb3MSnwHn/FFFE1vG6DTby+r31KAkUktB3Qf6ikUPWxW1BkXSPQeMHHiW0+HAd2GelJsZz1OJegCxqzl+CLVHa/IibuHeJ1HAKzhuDR+ymNaRFM+4jU6UWKXorRmbyqkq/D76FffevwdCp+jN3UAN/C9JRVTDuOxC/oh+EdMnqIOrlYteKSfadVRGLJFJPSB/ti/6K8f0CNymg/iH2gO/f0DwE0yjAFO6l8JaR5j0VPwPwfaYHqOqrCI319WzwhwzNW/aQAAAABJRU5ErkJggg==',
},
{
type: 'rect',
text: '</> new task',
label: 'Java',
icon: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAYAAAEFVwZaAAAABGdBTUEAALGPC/xhBQAAAqlJREFUOBF9VM9rE0EUfrMJNUKLihGbpLGtaCOIR8VjQMGDePCgCCIiCNqzCAp2MyYUCXhUtF5E0D+g1t48qAd7CCLqQUQKEWkStcEfVGlLdp/fm3aW2QQdyLzf33zz5m2IsAZ9XhDpyaaIZkTS4ASzK41TFao88GuJ3hsr2pAbipHxuSYyKRugagICGANkfFnNh3HeE2N0b3nN2cgnpcictw5veJIzxmDamSlxxQZicq/mflxhbaH8BLRbuRwNtZp0JAhoplVRUdzmCe/vO27wFuuA3S5qXruGdboy5/PRGFsbFGKo/haRtQHIrM83bVeTrOgNhZReWaYGnE4aUQgTJNvijJFF4jQ8BxJE5xfKatZWmZcTQ+BVgh7s8SgPlCkcec4mGTmieTP4xd7PcpIEg1TX6gdeLW8rTVMVLVvb7ctXoH0Cydl2QOPJBG21STE5OsnbweVYzAnD3A7PVILuY0yiiyDwSm2g441r6rMSgp6iK42yqroI2QoXeJVeA+YeZSa47gZdXaZWQKTrG93rukk/l2Al6Kzh5AZEl7dDQy+JjgFahQjRopSxPbrbvK7GRe9ePWBo1wcU7sYrFZtavXALwGw/7Dnc50urrHJuTPSoO2IMV3gUQGNg87IbSOIY9BpiT9HV7FCZ94nPXb3MSnwHn/FFFE1vG6DTby+r31KAkUktB3Qf6ikUPWxW1BkXSPQeMHHiW0+HAd2GelJsZz1OJegCxqzl+CLVHa/IibuHeJ1HAKzhuDR+ymNaRFM+4jU6UWKXorRmbyqkq/D76FffevwdCp+jN3UAN/C9JRVTDuOxC/oh+EdMnqIOrlYteKSfadVRGLJFJPSB/ti/6K8f0CNymg/iH2gO/f0DwE0yjAFO6l8JaR5j0VPwPwfaYHqOqrCI319WzwhwzNW/aQAAAABJRU5ErkJggg==',
},
{
type: 'rect',
text: '</> new task',
label: 'Python',
icon: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAYAAAEFVwZaAAAABGdBTUEAALGPC/xhBQAAAqlJREFUOBF9VM9rE0EUfrMJNUKLihGbpLGtaCOIR8VjQMGDePCgCCIiCNqzCAp2MyYUCXhUtF5E0D+g1t48qAd7CCLqQUQKEWkStcEfVGlLdp/fm3aW2QQdyLzf33zz5m2IsAZ9XhDpyaaIZkTS4ASzK41TFao88GuJ3hsr2pAbipHxuSYyKRugagICGANkfFnNh3HeE2N0b3nN2cgnpcictw5veJIzxmDamSlxxQZicq/mflxhbaH8BLRbuRwNtZp0JAhoplVRUdzmCe/vO27wFuuA3S5qXruGdboy5/PRGFsbFGKo/haRtQHIrM83bVeTrOgNhZReWaYGnE4aUQgTJNvijJFF4jQ8BxJE5xfKatZWmZcTQ+BVgh7s8SgPlCkcec4mGTmieTP4xd7PcpIEg1TX6gdeLW8rTVMVLVvb7ctXoH0Cydl2QOPJBG21STE5OsnbweVYzAnD3A7PVILuY0yiiyDwSm2g441r6rMSgp6iK42yqroI2QoXeJVeA+YeZSa47gZdXaZWQKTrG93rukk/l2Al6Kzh5AZEl7dDQy+JjgFahQjRopSxPbrbvK7GRe9ePWBo1wcU7sYrFZtavXALwGw/7Dnc50urrHJuTPSoO2IMV3gUQGNg87IbSOIY9BpiT9HV7FCZ94nPXb3MSnwHn/FFFE1vG6DTby+r31KAkUktB3Qf6ikUPWxW1BkXSPQeMHHiW0+HAd2GelJsZz1OJegCxqzl+CLVHa/IibuHeJ1HAKzhuDR+ymNaRFM+4jU6UWKXorRmbyqkq/D76FffevwdCp+jN3UAN/C9JRVTDuOxC/oh+EdMnqIOrlYteKSfadVRGLJFJPSB/ti/6K8f0CNymg/iH2gO/f0DwE0yjAFO6l8JaR5j0VPwPwfaYHqOqrCI319WzwhwzNW/aQAAAABJRU5ErkJggg==',
},
];
function setVersion(item) {
versionFlag.value = true;
console.log('node', item);
version.value = item.version + ' ' + item.time;
console.log('version', version.value);
}
function setVersion(item) {
versionFlag.value = true;
console.log('node', item);
version.value = item.version + ' ' + item.time;
console.log('version', version.value);
}
function showDag(item) {
console.log('item', item);
showType.value = 'chart';
}
function showDag(item) {
console.log('item', item);
showType.value = 'chart';
}
function handleDelelte() {
createMessage.success('删除成功!');
}
function handleRemove(record) {
if (record.task) {
openDeleteModel(true, {
isUpdate: false,
});
} else {
createConfirm({
iconType: 'warning',
title: '确认删除',
content: '确认删除这条数据吗?',
onOk() {
createMessage.success('删除成功!');
},
});
}
}
function handleRemove(record) {
if (record.task) {
function handleDeleteMore() {
openDeleteModel(true, {
isUpdate: false,
});
} else {
createConfirm({
iconType: 'warning',
title: '确认删除',
content: '确认删除这条数据吗?',
onOk() {
createMessage.success('删除成功!');
},
});
}
}
function handleDeleteMore() {
openDeleteModel(true, {
isUpdate: false,
});
}
function handleOrderType() {
rotate.value = rotate.value === 90 ? -90 : 90;
}
function handleOrderType() {
rotate.value = rotate.value === 90 ? -90 : 90;
}
function handleCopy(record) {
openCopyModal(true, {
isUpdate: false,
});
}
function handleCopy(record) {
}
function handleTaskModel(type) {
openTaskModel(true, {
isUpdate: false,
type: type,
});
}
function handleTaskModel(type) {
openTaskModel(true, {
isUpdate: false,
type: type,
});
}
function handleSetting() {
openUpstreamModel(true, {
isUpdate: false,
});
}
function handleSetting() {
openUpstreamModel(true, {
isUpdate: false,
});
}
function handleDepend() {
openDependModel(true, {
isUpdate: false,
});
}
function handleDepend() {
openDependModel(true, {
isUpdate: false,
});
}
function handleConfig() {
openTaskConfigModel(true, {
isUpdate: false,
});
}
function handleConfig() {
openTaskConfigModel(true, {
isUpdate: false,
});
}
function handleSetConfig() {
openTaskFlowConfig(true, {
isUpdate: false,
});
}
function handleSetConfig() {
openTaskFlowConfig(true, {
isUpdate: false,
});
}
function handleVersion() {
openVersionModel(true, {
isUpdate: false,
});
}
function handleVersion() {
openVersionModel(true, {
isUpdate: false,
});
}
function handleDelete() {}
function handleDelete() {
}
function handleSave() {
createMessage.success('保存成功!');
// createMessage.warning('当前任务流出现多个名为***的同名任务,请检查');
// createMessage.warning('当前任务流中名称为***的任务的独立周期配置不是当前任务流调度周期的子集,请检查');
// createMessage.warning('任务流【uuid***,名称:***】和任务流[uuid***,名称:**]存在环形依赖关系,请处理');
}
function handleSave() {
// createMessage.warning('当前任务流出现多个名为***的同名任务,请检查');
// createMessage.warning('当前任务流中名称为***的任务的独立周期配置不是当前任务流调度周期的子集,请检查');
// createMessage.warning('任务流【uuid***,名称:***】和任务流[uuid***,名称:**]存在环形依赖关系,请处理');
}
function handleUpload() {
openUploadModel(true, {
isUpdate: false,
});
}
function handleUpload() {
openUploadModel(true, {
isUpdate: false,
});
}
const uploadFlag = ref(false);
const uploadFlag = ref(false);
function setUploadFlag(flag) {
uploadFlag.value = flag;
}
function setUploadFlag(flag) {
uploadFlag.value = flag;
}
function handleOffline() {
openOfflineModel(true, {
isUpdate: false,
});
}
function handleOffline() {
openOfflineModel(true, {
isUpdate: false,
onMounted(() => {
tableData.value = designData;
});
}
onMounted(() => {
tableData.value = designData;
});
/** 部门树的select*/
function handleSelect(key) {
console.log('asd');
if (key !== null && key !== undefined) {
modelLevel.value = key.split('-').length - 1;
} else {
modelLevel.value = 0;
/** 部门树的select*/
function handleSelect(key) {
console.log('asd');
if (key !== null && key !== undefined) {
modelLevel.value = key.split('-').length - 1;
} else {
modelLevel.value = 0;
}
if (modelLevel.value === 2) {
const regex = new RegExp(key, 'i');
const data = tableData.value.filter(
(item) => item.type === 'model' && regex.test(item.themeId),
);
setTableData(data);
}
if (modelLevel.value === 1) {
const regex = new RegExp(key, 'i');
const data = tableData.value.filter(
(item) => item.type === 'twoLevel' && regex.test(item.themeId),
);
setTableData(data);
}
if (modelLevel.value === 0) {
const regex = new RegExp(key, 'i');
const data = tableData.value.filter(
(item) => item.type === 'theme' && regex.test(item.themeId),
);
setTableData(data);
}
}
if (modelLevel.value === 2) {
const regex = new RegExp(key, 'i');
const data = tableData.value.filter(
(item) => item.type === 'model' && regex.test(item.themeId),
);
setTableData(data);
}
if (modelLevel.value === 1) {
const regex = new RegExp(key, 'i');
const data = tableData.value.filter(
(item) => item.type === 'twoLevel' && regex.test(item.themeId),
);
setTableData(data);
}
if (modelLevel.value === 0) {
const regex = new RegExp(key, 'i');
const data = tableData.value.filter(
(item) => item.type === 'theme' && regex.test(item.themeId),
);
setTableData(data);
}
}
function handleExit() {
versionFlag.value = false;
}
function handleExit() {
versionFlag.value = false;
}
/**返回上一级*/
function goBack() {
router.back();
}
/**返回上一级*/
function goBack() {
router.back();
}
function handleDebug() {
debugFlag.value = true;
showType.value = 'chart';
}
function handleDebug() {
debugFlag.value = true;
showType.value = 'chart';
}
function handelOutDebug() {
debugFlag.value = false;
showType.value = 'table';
}
function handelOutDebug() {
debugFlag.value = false;
showType.value = 'table';
}
let modelLevel = ref(1);
const tableData = ref([]);
const [registerTable, {getRowSelection, setTableData}] = useTable({
title: '',
// 数据
api: async (params) => {
console.log('params:', params);
const response = {
pageNu: '1',
pageSize: '10',
pages: '1',
total: tableData.value.length,
code: '',
message: '',
data: [],
};
//按照部门筛选 如果有进行过滤相应部门的 没有就赋值全部
let data = [];
data = tableData.value.filter((item) => item.type === 'theme');
return {...response, data: data};
},
rowKey: 'businessId',
// 列
columns: designColumn,
rowSelection: true,
striped: false,
// 搜索
formConfig: {
labelWidth: 120,
schemas: designFormSchema,
autoSubmitOnEnter: true,
},
useSearchForm: true,
showTableSetting: false,
showIndexColumn: false,
bordered: false,
actionColumn: {
width: 150,
title: '操作',
dataIndex: 'action',
},
});
onMounted(() => {
});
let modelLevel = ref(1);
const tableData = ref([]);
const [registerTable, { getRowSelection, setTableData }] = useTable({
title: '',
// 数据
api: async (params) => {
console.log('params:', params);
const response = {
pageNu: '1',
pageSize: '10',
pages: '1',
total: tableData.value.length,
code: '',
message: '',
data: [],
};
//按照部门筛选 如果有进行过滤相应部门的 没有就赋值全部
let data = [];
data = tableData.value.filter((item) => item.type === 'theme');
return { ...response, data: data };
},
rowKey: 'businessId',
// 列
columns: designColumn,
rowSelection: true,
striped: false,
// 搜索
formConfig: {
labelWidth: 120,
schemas: designFormSchema,
autoSubmitOnEnter: true,
},
useSearchForm: true,
showTableSetting: false,
showIndexColumn: false,
bordered: false,
actionColumn: {
width: 150,
title: '操作',
dataIndex: 'action',
},
});
onMounted(() => {});
</script>
<style scoped></style>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment