Commit 3f65d429 authored by liwei's avatar liwei

周期调度任务流

parent df6bbe13
...@@ -25,15 +25,15 @@ ...@@ -25,15 +25,15 @@
import { ref, computed, unref } from 'vue'; import { ref, computed, unref } from 'vue';
import { BasicForm, useForm } from '@/components/Form'; import { BasicForm, useForm } from '@/components/Form';
import { Card, Tabs, TabPane, Col, Row,RangePicker,RadioGroup,RadioButton,Select,Collapse } from 'ant-design-vue'; import { Card, Tabs, TabPane, Col, Row,RangePicker,RadioGroup,RadioButton,Select,Collapse } from 'ant-design-vue';
import {tableListColumns} from './taskFlowMaintenance.data'; import {tableListColumns} from './periodicScheduling.data';
import {taskListData} from './taskFlowMaintenanceData'; import {taskListData} from './periodicSchedulingData';
import { BasicDrawer, useDrawerInner } from '@/components/Drawer'; import { BasicDrawer, useDrawerInner } from '@/components/Drawer';
import { BasicTree, TreeItem } from '@/components/Tree'; import { BasicTree, TreeItem } from '@/components/Tree';
import {useMessage} from "@/hooks/web/useMessage"; import {useMessage} from "@/hooks/web/useMessage";
import { Alert } from 'ant-design-vue'; import { Alert } from 'ant-design-vue';
import { useModal } from '@/components/Modal'; import { useModal } from '@/components/Modal';
import Icon from '@/components/Icon/Icon.vue'; import Icon from '@/components/Icon/Icon.vue';
import { detailTreeData } from './taskFlowMaintenanceData' import { detailTreeData } from './periodicSchedulingData'
const [registerLookLogModal, { openModal: openLookLogModal }] = useModal(); const [registerLookLogModal, { openModal: openLookLogModal }] = useModal();
const [registerLookAllDataModal, { openModal: openLookAllDataModal }] = useModal(); const [registerLookAllDataModal, { openModal: openLookAllDataModal }] = useModal();
......
<template>
<BasicModal width="40%" v-bind="$attrs" @register="registerModal" :title="getTitle" @ok="handleSubmit">
<BasicTable @register="registerTable"/>
</BasicModal>
</template>
<script lang="ts" setup>
import {ref, computed, unref, reactive, onMounted} from 'vue';
import {BasicModal, useModal, useModalInner} from '@/components/Modal';
import { BasicForm, useForm } from '@/components/Form';
import { useMessage } from '@/hooks/web/useMessage';
import {columns, columns2} from "./periodicScheduling.data";
import { router } from '@/router';
import { BasicTable, useTable, TableAction } from '@/components/Table';
import {
tableData,
tableData2
} from "@/views/taskScheduling/taskFlowMaintenance/periodicScheduling/periodicSchedulingData";
defineOptions({ name: 'AccountModal' });
const emit = defineEmits(['success', 'register']);
const { createMessage,createConfirm } = useMessage();
const getTitle = computed(() => ('执行条件'));
//初始化弹框
const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data) => {
setModalProps({ confirmLoading: false,showOkBtn:false,cancelText:'关闭' });
});
const [registerTable, { reload,getForm,getRowSelection }] = useTable({
title: '',
api: async (params) => {
const response = {
pageNu: "1",
pageSize: "10",
pages: "1",
total: tableData2.length,
code:'',
message:'',
data: [],
};
return { ...response,data: tableData2 };
},
columns:columns2,
useSearchForm: false,
showTableSetting: false,
showIndexColumn:false,
bordered: true,
scroll: { y: 300 },
});
/**确定按钮*/
async function handleSubmit() {
}
onMounted(() => {
});
</script>
<style lang="less" scoped>
</style>
<template> <template>
<BasicModal width="40%" v-bind="$attrs" @register="registerModal" :title="getTitle" @ok="handleSubmit"> <BasicModal width="40%" v-bind="$attrs" @register="registerModal" :title="getTitle" @ok="handleSubmit">
<BasicForm @register="registerForm"> <BasicForm @register="registerForm1" v-if="show1">
<template #slot="{ model, field }"> <template #slot="{ model, field }">
<div class="textClass1" v-if="model.scopeAction === '当前任务流'"> <div class="textClass1" v-if="model.scopeAction === '当前任务流'">
<div style="font-weight: bold;margin-bottom: 10px;">重跑当前注意事项</div> <div style="font-weight: bold;margin-bottom: 10px;">重跑当前注意事项</div>
<div> <div style="white-space: pre-wrap">
1. 按照当前任务流最新的版本重跑;<br> {{text1}}
2. 任务流是否可以重跑成功取决于任务流条件是否达成,例如依赖的上游的状态, 是否存在依赖上次执行结果等条件;;<br>
3. 若包含外部任务,workflow不保证外部任务的数据幂等性,按照要求重跑当前任务,例如任务包含数据加载任务,当最后一步数据插入已经发送到引擎端,则重试会出现重复数据。
</div> </div>
</div> </div>
<div class="textClass2" v-else> <div class="textClass2" v-else>
<div style="font-weight: bold;margin-bottom: 10px;">重跑当前及下游注意事项</div>
<div style="white-space: pre-wrap">
{{text2}}
</div>
</div>
</template>
</BasicForm>
<BasicForm @register="registerForm2" v-if="show2">
<template #slot="{ model, field }">
<div class="textClass1" v-if="model.scopeAction === '当前任务'">
<div style="font-weight: bold;margin-bottom: 10px;">重跑当前注意事项</div> <div style="font-weight: bold;margin-bottom: 10px;">重跑当前注意事项</div>
<div> <div style="white-space: pre-wrap">
1. 重跑的是当前任务流和依赖关系的最新版本,新增的依赖关系的下游执行相关的最新执行记录可能会被覆盖;<br> {{text3}}
2. 任务流是否可以重跑成功取决于任务流条件是否达成,例如依赖的上游的状态,是否存在依赖上次执行结果等条件;<br> </div>
3. 若包含外部任务,workflow不保证外部任务的数据幂等性,按照要求重跑当前任务,例如任务包含数据加载任务,当最后一步数据插入已经发送到引擎端,则重试会出现重复数据;<br> </div>
4. 重跑当前及下游,若下游的任务流除了当前任务流还有其他的依赖,则下游是否运行还依赖其他分支依赖的上游任务流的状态;<br> <div class="textClass2" v-else>
5. 重跑影响的执行记录按照批次重跑,若下游任务流还在运行中,会等待运行结束后进行重跑。 <div style="font-weight: bold;margin-bottom: 10px;">重跑当及下游注意事项</div>
<div style="white-space: pre-wrap">
{{text4}}
</div> </div>
</div> </div>
</template> </template>
...@@ -26,34 +36,78 @@ ...@@ -26,34 +36,78 @@
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
import {ref, computed, unref, reactive, onMounted} from 'vue'; import {ref, computed, unref, reactive, onMounted} from 'vue';
import { BasicModal, useModalInner } from '@/components/Modal'; import {BasicModal, useModal, useModalInner} from '@/components/Modal';
import { BasicForm, useForm } from '@/components/Form'; import { BasicForm, useForm } from '@/components/Form';
import { useMessage } from '@/hooks/web/useMessage'; import { useMessage } from '@/hooks/web/useMessage';
import {mainFormSchema4, runAgainSchema} from "./taskFlowMaintenance.data"; import {mainFormSchema4, runAgainSchema1,runAgainSchema2} from "./periodicScheduling.data";
import {TreeData} from "@/views/taskScheduling/taskFlowMaintenance/periodicScheduling/taskFlowMaintenanceData"; import {TreeData} from "@/views/taskScheduling/taskFlowMaintenance/periodicScheduling/periodicSchedulingData";
import { router } from '@/router';
defineOptions({ name: 'AccountModal' }); defineOptions({ name: 'AccountModal' });
const emit = defineEmits(['success', 'register']); const emit = defineEmits(['success', 'register']);
const { createMessage } = useMessage(); const { createMessage,createConfirm } = useMessage();
const getTitle = computed(() => ('重跑')); const getTitle = computed(() => ('重跑'));
const text1 = ref('1. 按照当前任务流最新的版本重跑;\n' +
'2. 任务流是否可以重跑成功取决于任务流条件是否达成,例如依赖的上游的状态, 是否存在依赖上次执行结果等条件;\n' +
'3. 若包含外部任务,workflow不保证外部任务的数据幂等性,按照要求重跑当前任务,例如任务包含数据加载任务,当最后一步数据插入已经发送到引擎端,则重试会出现重复数据。');
const text2 = ref('1. 重跑的是当前任务流和依赖关系的最新版本,新增的依赖关系的下游执行相关的最新执行记录可能会被覆盖;\n' +
'2. 任务流是否可以重跑成功取决于任务流条件是否达成,例如依赖的上游的状态,是否存在依赖上次执行结果等条件;\n' +
'3. 若包含外部任务,workflow不保证外部任务的数据幂等性,按照要求重跑当前任务,例如任务包含数据加载任务,当最后一步数据插入已经发送到引擎端,则重试会出现重复数据;\n' +
'4. 重跑当前及下游,若下游的任务流除了当前任务流还有其他的依赖,则下游是否运行还依赖其他分支依赖的上游任务流的状态;\n' +
'5. 重跑影响的执行记录按照批次重跑,若下游任务流还在运行中,会等待运行结束后进行重跑。')
const text3 = ref('1. 按照当前任务最新的版本重跑;\n' +
'2. 任务是否可以重跑成功取决于任务条件是否达成,例如依赖的上游的状态, 是否存在依赖上次执行结果等条件;\n' +
'3. 若包含外部任务,workflow不保证外部任务的数据幂等性,按照要求重跑当前任务,例如任务包含数据加载任务,当最后一步数据插入已经发送到引擎端,则重试会出现重复数据。');
const text4 = ref('1. 重跑的是当前任务和依赖关系的最新版本,新增的依赖关系的下游执行相关的最新执行记录可能会被覆盖;\n' +
'2. 将会产生新的任务流执行记录;\n' +
'3. 若包含外部任务,workflow不保证外部任务的数据幂等性\n' +
'4. 重跑当前及下游,若下游的任务流除了当前任务流还有其他的依赖,则下游是否运行还依赖其他分支依赖的上游任务流的状态;\n' +
'5. 重跑中涉及的调度时间参数均是本次指定的换行记录的对应的时间,运行时间则为当前实际运行的时间。')
const show1 = ref(false);
const show2 = ref(false);
const [registerForm, { updateSchema:updateSchema1,getFieldsValue }] = useForm({ const [registerForm1] = useForm({
labelAlign: 'left', labelAlign: 'left',
labelWidth: 100, labelWidth: 100,
schemas: runAgainSchema, schemas: runAgainSchema1,
showActionButtonGroup: false, showActionButtonGroup: false,
actionColOptions: { actionColOptions: {
span: 23, span: 23,
}, },
}); });
const [registerForm2] = useForm({
labelAlign: 'left',
labelWidth: 100,
schemas: runAgainSchema2,
showActionButtonGroup: false,
actionColOptions: {
span: 23,
},
});
//初始化弹框 //初始化弹框
const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data) => { const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data) => {
setModalProps({ confirmLoading: false }); setModalProps({ confirmLoading: false });
show1.value = data.show1
show2.value = data.show2
}); });
/**确定按钮*/ /**确定按钮*/
async function handleSubmit() { async function handleSubmit() {
createConfirm({
iconType: 'info',
title: '跳转提醒',
content: '当前操作已成功,会产生新的任务流执行记录,是否跳转到任务流的运维首页?',
onOk() {
router.push({
path: '/taskScheduling/taskFlowMaintenance/periodicScheduling/index',
query: {}
})
},
});
createMessage.success('重跑成功!'); createMessage.success('重跑成功!');
closeModal() closeModal()
} }
......
...@@ -11,7 +11,7 @@ ...@@ -11,7 +11,7 @@
import { BasicModal, useModalInner } from '@/components/Modal'; import { BasicModal, useModalInner } from '@/components/Modal';
import { BasicForm, useForm } from '@/components/Form'; import { BasicForm, useForm } from '@/components/Form';
import { useMessage } from '@/hooks/web/useMessage'; import { useMessage } from '@/hooks/web/useMessage';
import {mainFormSchema4} from "./taskFlowMaintenance.data"; import {mainFormSchema4} from "./periodicScheduling.data";
defineOptions({ name: 'AccountModal' }); defineOptions({ name: 'AccountModal' });
const emit = defineEmits(['success', 'register']); const emit = defineEmits(['success', 'register']);
......
...@@ -109,7 +109,7 @@ ...@@ -109,7 +109,7 @@
/> />
</div> </div>
<div style="margin-left: 130px"> <div style="margin-left: 130px">
<a-button type="primary" :disabled="getRowSelection().selectedRowKeys <= 0" @click="handleDeleteIds" style="margin-right: 10px;">取消</a-button> <a-button type="primary" :disabled="getRowSelection().selectedRowKeys <= 0" @click="batchCancelExecuteButton" style="margin-right: 10px;">取消</a-button>
<a-button type="primary" :disabled="getRowSelection().selectedRowKeys <= 0" @click="batchDownloadButton">批量下载日志</a-button> <a-button type="primary" :disabled="getRowSelection().selectedRowKeys <= 0" @click="batchDownloadButton">批量下载日志</a-button>
</div> </div>
</template> </template>
...@@ -125,9 +125,10 @@ ...@@ -125,9 +125,10 @@
icon:'ix:log', icon:'ix:log',
onClick: lookLogButton.bind(null, record), onClick: lookLogButton.bind(null, record),
}, },
{ {
icon:'codicon:debug-start', //重跑
onClick: lookLogButton.bind(null, record), icon:'material-symbols-light:not-started-outline',
onClick: runAgainButton.bind(null, record),
}, },
]" ]"
/> />
...@@ -136,6 +137,8 @@ ...@@ -136,6 +137,8 @@
</BasicTable> </BasicTable>
<!-- 查看日志 弹窗--> <!-- 查看日志 弹窗-->
<LookLogModal @register="registerLookLogModal" @success="handleSuccess" /> <LookLogModal @register="registerLookLogModal" @success="handleSuccess" />
<!-- 重跑 弹窗-->
<RunAgainModal @register="registerRunAgainModal" @success="handleSuccess" />
</BasicDrawer> </BasicDrawer>
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
...@@ -143,8 +146,8 @@ ...@@ -143,8 +146,8 @@
import { ref, computed, unref } from 'vue'; import { ref, computed, unref } from 'vue';
import { BasicForm, useForm } from '@/components/Form'; import { BasicForm, useForm } from '@/components/Form';
import { Card, Tabs, TabPane, Col, Row,RangePicker,RadioGroup,RadioButton,Select } from 'ant-design-vue'; import { Card, Tabs, TabPane, Col, Row,RangePicker,RadioGroup,RadioButton,Select } from 'ant-design-vue';
import {tableListColumns} from './taskFlowMaintenance.data'; import {tableListColumns} from './periodicScheduling.data';
import {taskListData} from './taskFlowMaintenanceData'; import {taskListData} from './periodicSchedulingData';
import { BasicDrawer, useDrawerInner } from '@/components/Drawer'; import { BasicDrawer, useDrawerInner } from '@/components/Drawer';
import { BasicTree, TreeItem } from '@/components/Tree'; import { BasicTree, TreeItem } from '@/components/Tree';
import {useMessage} from "@/hooks/web/useMessage"; import {useMessage} from "@/hooks/web/useMessage";
...@@ -154,12 +157,13 @@ ...@@ -154,12 +157,13 @@
import LookLogModal from './LookLogModal.vue' import LookLogModal from './LookLogModal.vue'
import {exportRoleList} from "@/api/system/role/role"; import {exportRoleList} from "@/api/system/role/role";
import {downloadByData} from "@/utils/file/download"; import {downloadByData} from "@/utils/file/download";
import RunAgainModal from './RunAgainModal.vue'
const [registerRunAgainModal, { openModal: openRunAgainModal }] = useModal();
const [registerLookLogModal, { openModal: openLookLogModal }] = useModal(); const [registerLookLogModal, { openModal: openLookLogModal }] = useModal();
const [registerLookAllDataModal, { openModal: openLookAllDataModal }] = useModal(); const [registerLookAllDataModal, { openModal: openLookAllDataModal }] = useModal();
const [registerVersionModal, { openModal: openVersionModal }] = useModal(); const [registerVersionModal, { openModal: openVersionModal }] = useModal();
const emit = defineEmits(['success', 'register']); const emit = defineEmits(['success', 'register']);
const { createMessage } = useMessage(); const { createMessage, createConfirm } = useMessage();
const isUpdate = ref(true); const isUpdate = ref(true);
const roleId = ref(''); const roleId = ref('');
const getTitle = computed(() => ('任务列表')); const getTitle = computed(() => ('任务列表'));
...@@ -214,6 +218,13 @@ ...@@ -214,6 +218,13 @@
}); });
/**重跑 按钮*/
function runAgainButton(record){
openRunAgainModal(true,{
show1:false,
show2:true
})
}
/**查看版本变更信息*/ /**查看版本变更信息*/
...@@ -226,7 +237,6 @@ ...@@ -226,7 +237,6 @@
openLookLogModal(true,{}) openLookLogModal(true,{})
} }
/**批量下载 按钮*/ /**批量下载 按钮*/
async function batchDownloadButton() { async function batchDownloadButton() {
const params = Object.assign({}, {}); const params = Object.assign({}, {});
...@@ -234,6 +244,17 @@ ...@@ -234,6 +244,17 @@
downloadByData(data, '全部日志' + '.xlsx'); downloadByData(data, '全部日志' + '.xlsx');
} }
/**批量取消执行 按钮*/
function batchCancelExecuteButton(record){
createConfirm({
iconType: 'warning',
title: '取消执行',
content: '确认取消选中数据吗?',
onOk() {
createMessage.success('取消成功!');
},
});
}
function handleSubmit() { function handleSubmit() {
......
...@@ -17,15 +17,14 @@ ...@@ -17,15 +17,14 @@
</BasicForm> </BasicForm>
</div> </div>
</div> </div>
<Divider/>
<div class="contentClass" style="display: flex;margin-top: 20px"> <div class="contentClass" style="display: flex;margin-top: 20px">
<div> <div>
<img src="../../../../assets/images/taskFlowMaintenance.png" style="width: 1455px;" /> <img src="../../../../assets/images/taskFlowMaintenance.png" style="width: 1455px;" />
</div> </div>
<div> <div>
<RadioGroup v-model:value="showType1" button-style="solid" size="small"> <RadioGroup v-model:value="showType1" button-style="solid" size="small">
<RadioButton value="table" @click="taskListButton"><UnorderedListOutlined style="font-size: 20px"/></RadioButton> <RadioButton value="table" @click="taskListButton"><UnorderedListOutlined/></RadioButton>
<RadioButton value="chart" @click="relationshipButton"><AppstoreOutlined style="font-size: 20px"/></RadioButton> <RadioButton value="chart" @click="relationshipButton"><AppstoreOutlined/></RadioButton>
</RadioGroup> </RadioGroup>
</div> </div>
</div> </div>
...@@ -48,8 +47,8 @@ ...@@ -48,8 +47,8 @@
import { useGo } from '@/hooks/web/usePage'; import { useGo } from '@/hooks/web/usePage';
import { useRoute } from 'vue-router'; import { useRoute } from 'vue-router';
import { router } from '@/router'; import { router } from '@/router';
import {columns, topFormSchema2, topFormSchema1, mainFormSchema3, detailFormSchema} from './taskFlowMaintenance.data'; import {columns, topFormSchema2, topFormSchema1, mainFormSchema3, detailFormSchema} from './periodicScheduling.data';
import { tableData,TreeData,treeData2 } from './taskFlowMaintenanceData' import { tableData,TreeData,treeData2 } from './periodicSchedulingData'
import { BasicForm, useForm } from '@/components/Form'; import { BasicForm, useForm } from '@/components/Form';
import { useECharts } from '@/hooks/web/useECharts'; import { useECharts } from '@/hooks/web/useECharts';
import LookLogModal from './LookLogModal.vue' import LookLogModal from './LookLogModal.vue'
......
...@@ -9,7 +9,7 @@ import {DescItem} from "@/components/Description"; ...@@ -9,7 +9,7 @@ import {DescItem} from "@/components/Description";
import {uploadApi} from "@/api/sys/upload"; // 引入开关组件 import {uploadApi} from "@/api/sys/upload"; // 引入开关组件
type CheckedType = boolean | string | number; type CheckedType = boolean | string | number;
/**首页-table列表*/ /**首页-table列表1*/
export const columns: BasicColumn[] = [ export const columns: BasicColumn[] = [
{ {
title: '调度时间', title: '调度时间',
...@@ -34,7 +34,8 @@ export const columns: BasicColumn[] = [ ...@@ -34,7 +34,8 @@ export const columns: BasicColumn[] = [
{ {
title: '执行条件', title: '执行条件',
dataIndex: 'executionCondition', dataIndex: 'executionCondition',
width: 120 width: 120,
slots: {customRender: 'executionCondition'}
}, },
{ {
title: '执行模式', title: '执行模式',
...@@ -57,6 +58,24 @@ export const columns: BasicColumn[] = [ ...@@ -57,6 +58,24 @@ export const columns: BasicColumn[] = [
width: 120 width: 120
} }
]; ];
/**首页-table列表2*/
export const columns2: BasicColumn[] = [
{
title: '条件类型',
dataIndex: 'conditionType',
width: 120
},
{
title: '详情',
dataIndex: 'detail',
width: 120
},
{
title: '是否满足',
dataIndex: 'satisfy',
width: 120
},
];
/**首页-搜索表单*/ /**首页-搜索表单*/
export const searchFormSchema: FormSchema[] = [ export const searchFormSchema: FormSchema[] = [
{ {
...@@ -215,7 +234,7 @@ export const mainFormSchema4: FormSchema[] = [ ...@@ -215,7 +234,7 @@ export const mainFormSchema4: FormSchema[] = [
}, },
]; ];
/**重跑 表单*/ /**重跑 表单*/
export const runAgainSchema: FormSchema[] = [ export const runAgainSchema1: FormSchema[] = [
{ {
field: 'scopeAction', field: 'scopeAction',
label: '作用范围', label: '作用范围',
...@@ -250,6 +269,28 @@ export const runAgainSchema: FormSchema[] = [ ...@@ -250,6 +269,28 @@ export const runAgainSchema: FormSchema[] = [
slot:'slot' slot:'slot'
} }
]; ];
/**重跑 表单*/
export const runAgainSchema2: FormSchema[] = [
{
field: 'scopeAction',
label: '作用范围',
component: 'RadioGroup',
defaultValue: '当前任务',
componentProps: {
options: [
{ label: '当前任务', value: '当前任务' },
{ label: '当前及其下游', value: '当前及其下游' },
],
},
colProps: { lg: 24, md: 24 },
},
{
field:'slot',
label:'',
component:'',
slot:'slot'
}
];
/**详情页-任务列表*/ /**详情页-任务列表*/
export const tableListColumns: BasicColumn[] = [ export const tableListColumns: BasicColumn[] = [
{ {
......
...@@ -37,7 +37,7 @@ export const TreeData: any[] = [ ...@@ -37,7 +37,7 @@ export const TreeData: any[] = [
}, },
]; ];
/**主页面列表 数据*/ /**主页面列表 数据1*/
export const tableData: any[] =[ export const tableData: any[] =[
{ {
id:1, id:1,
...@@ -148,6 +148,39 @@ export const tableData: any[] =[ ...@@ -148,6 +148,39 @@ export const tableData: any[] =[
executionId:'49027' executionId:'49027'
}, },
] ]
/**主页面列表 数据2*/
export const tableData2: any[] =[
{
id:1,
conditionType:'触发条件',
detail:'周期调度到达',
satisfy:'满足',
},
{
id:2,
conditionType:'执行资源',
detail:'已分配scheduler',
satisfy:'满足',
},
{
id:3,
conditionType:'上游依赖',
detail:'任务流:/共享工作区/依赖关系/有周\n' +
'期/寻找依赖超时测试-上游任务流\n' +
'执行记录ID:51200\n' +
'调度时间:2024-01-30 11:36:00.000',
satisfy:'等待',
},
{
id:4,
conditionType:'上游依赖',
detail:'任务流:/共享工作区/依赖关系/有周\n' +
'期/寻找依赖超时测试-上游任务流\n' +
'执行记录ID:51221\n' +
'调度时间:2024-01-31 12:15:00.000',
satisfy:'等待',
},
]
/**主页面 左侧List*/ /**主页面 左侧List*/
export const treeData2:any[] = [ export const treeData2:any[] = [
{ {
......
<template> <template>
<div class="center"> <div class="center">
<div class="center1"> <div class="center1">
<div class="center1-1">
<Icon icon="material-symbols:sync" :size="35" :color="'rgb(121, 74, 235)'"/>
<div class="center1-1-1">补数记录</div>
<div class="selectCss">
<BasicForm @register="registerForm"/>
</div>
</div>
<div>
<a-button type="primary" style="margin-right: 10px" @click="reloadButton">手动刷新</a-button>
<a-button type="primary" style="margin-right: 10px" @click="cancelBatchButton">取消</a-button>
<a-button type="primary" style="margin-right: 10px" @click="deleteBatchButton">删除</a-button>
<a-button type="primary" style="margin-right: 10px" @click="addSupplyNumberButton">新增补数</a-button>
</div>
</div>
<div class="center2">
<div class="center2-1">
<div style="margin-left: 10px">
<BasicForm @register="registerForm2"/>
</div>
</div>
<BasicTable @register="registerTable"> <BasicTable @register="registerTable">
<template #headerTop="{ column, record }">
<div class="center2">
<div class="center2-1">
<Icon icon="material-symbols:sync" :size="35" :color="'rgb(121, 74, 235)'"/>
<div class="center2-1-1">补数记录</div>
<div class="selectCss">
<BasicForm @register="registerForm"/>
</div>
</div>
<div>
<a-button type="primary" style="margin-right: 10px" @click="reloadButton">手动刷新</a-button>
<a-button type="primary" :disabled="getRowSelection().selectedRowKeys <= 0" style="margin-right: 10px" @click="cancelBatchButton">取消</a-button>
<a-button type="primary" style="margin-right: 10px" @click="deleteBatchButton">删除</a-button>
<a-button type="primary" style="margin-right: 10px" @click="addSupplyNumberButton">新增补数</a-button>
</div>
</div>
<div class="center1-1">
<div style="margin-left: 10px">
<BasicForm @register="registerForm2"/>
</div>
</div>
</template>
<template #bodyCell="{ column, record }"> <template #bodyCell="{ column, record }">
<template v-if="column.key === 'action'"> <template v-if="column.key === 'action'">
<TableAction <TableAction
...@@ -91,7 +93,7 @@ ...@@ -91,7 +93,7 @@
const [registerSupplyNumberSettingModal, { openModal: openSupplyNumberSettingModal }] = useModal(); const [registerSupplyNumberSettingModal, { openModal: openSupplyNumberSettingModal }] = useModal();
const [registerTable, { reload,getForm,getRowSelection }] = useTable({ const [registerTable, { reload,getForm,getRowSelection }] = useTable({
title: '', title: ' ',
api: async (params) => { api: async (params) => {
const response = { const response = {
pageNu: "1", pageNu: "1",
...@@ -110,6 +112,7 @@ ...@@ -110,6 +112,7 @@
useSearchForm: false, useSearchForm: false,
showTableSetting: false, showTableSetting: false,
showIndexColumn:false, showIndexColumn:false,
striped: false,
bordered: true, bordered: true,
actionColumn: { actionColumn: {
width: 150, width: 150,
...@@ -149,7 +152,7 @@ ...@@ -149,7 +152,7 @@
}) })
} }
/***/ /**跳转 */
function showDetails(record){ function showDetails(record){
router.push({ router.push({
path: '/taskScheduling/taskFlowMaintenance/periodicScheduling/index', path: '/taskScheduling/taskFlowMaintenance/periodicScheduling/index',
...@@ -159,6 +162,12 @@ ...@@ -159,6 +162,12 @@
}) })
} }
/**手动刷新 按钮*/
function reloadButton(record){
createMessage.success('刷新成功!')
}
/**取消 按钮*/ /**取消 按钮*/
function cancelButton(record){ function cancelButton(record){
createMessage.success('取消成功!') createMessage.success('取消成功!')
...@@ -248,32 +257,29 @@ ...@@ -248,32 +257,29 @@
.center{ .center{
width: 100%; width: 100%;
height: 100%; height: 100%;
background-color: white;
.center1{ .center1{
width: 100%; width: 100%;
height: 10%; .center1-1{
margin-top: 10px;
height: 35px;
}
}
.center2{
width: 100%;
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
align-items: center; align-items: center;
.center1-1{ .center2-1{
display:flex; display:flex;
height: 30px; height: 30px;
margin-left: 20px; margin-left: 20px;
.center1-1-1{ .center2-1-1{
display: flex; display: flex;
align-items: center; align-items: center;
font-weight: bold font-weight: bold
} }
} }
} }
.center2{
width: 100%;
height:90%;
.center2-1{
display: flex;
justify-content: space-between
}
}
} }
</style> </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