Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
B
bigDataSystem
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
张伯涛
bigDataSystem
Commits
d61e5008
Commit
d61e5008
authored
Dec 03, 2024
by
罗林杰
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/master'
parents
1e425877
f506e403
Changes
24
Hide whitespace changes
Inline
Side-by-side
Showing
24 changed files
with
1370 additions
and
57 deletions
+1370
-57
index.ts
src/router/routes/index.ts
+10
-0
create.data.ts
...sourceDevelopment/labelDevelop/createLabel/create.data.ts
+76
-0
createData.ts
...esourceDevelopment/labelDevelop/createLabel/createData.ts
+14
-0
index.vue
...allResourceDevelopment/labelDevelop/createLabel/index.vue
+234
-0
index.vue
src/views/mallResourceDevelopment/labelDevelop/index.vue
+27
-9
editAuditRulesModal.vue
...iptDevelopment/functionManagement/editAuditRulesModal.vue
+36
-6
editAuditRulesModal.vue
...elopment/selfServiceTableCreation/editAuditRulesModal.vue
+70
-3
mainBody.data.ts
...riptDevelopment/selfServiceTableCreation/mainBody.data.ts
+3
-2
mock.ts
src/views/scriptDevelopment/selfServiceTableCreation/mock.ts
+3
-3
editAuditRulesModal.vue
src/views/scriptDevelopment/sqlAudit/editAuditRulesModal.vue
+1
-1
index.vue
...ews/taskScheduling/schedulingExecution/calendar/index.vue
+0
-9
mock.ts
...ews/taskScheduling/schedulingExecution/sExecution/mock.ts
+0
-0
sExecution.data.ts
...eduling/schedulingExecution/sExecution/sExecution.data.ts
+0
-0
ModelTree.vue
src/views/taskScheduling/taskFlow/ModelTree.vue
+28
-0
index.vue
src/views/taskScheduling/taskFlow/index.vue
+323
-0
mock.ts
src/views/taskScheduling/taskFlow/mock.ts
+187
-0
taskFlow.data.ts
src/views/taskScheduling/taskFlow/taskFlow.data.ts
+91
-0
defineEvent.vue
src/views/taskScheduling/taskFlowDesign/defineEvent.vue
+42
-0
design.data.ts
src/views/taskScheduling/taskFlowDesign/design.data.ts
+79
-0
designData.ts
src/views/taskScheduling/taskFlowDesign/designData.ts
+6
-6
index.vue
src/views/taskScheduling/taskFlowDesign/index.vue
+9
-3
taskConfigModel.vue
src/views/taskScheduling/taskFlowDesign/taskConfigModel.vue
+37
-15
vite.config.ts.timestamp-1733101094674-9a3cc74e73b39.mjs
vite.config.ts.timestamp-1733101094674-9a3cc74e73b39.mjs
+47
-0
vite.config.ts.timestamp-1733109704960-8029bd881e077.mjs
vite.config.ts.timestamp-1733109704960-8029bd881e077.mjs
+47
-0
No files found.
src/router/routes/index.ts
View file @
d61e5008
...
...
@@ -102,6 +102,15 @@ export const mainBodyRoute: AppRouteRecordRaw = {
currentActiveMenu
:
'/mainBody/index'
,
},
children
:
[
{
path
:
'index'
,
name
:
'mainBody'
,
component
:
()
=>
import
(
'@/views/mainBody/index.vue'
),
meta
:
{
title
:
'主体管理'
,
icon
:
''
,
},
},
{
path
:
'/mainBody/details'
,
name
:
'details'
,
...
...
@@ -147,6 +156,7 @@ export const DataSourceRoute: AppRouteRecordRaw = {
],
};
/**用户管理*/
export
const
UserRoute
:
AppRouteRecordRaw
=
{
path
:
'/user'
,
name
:
'User'
,
...
...
src/views/mallResourceDevelopment/labelDevelop/createLabel/create.data.ts
0 → 100644
View file @
d61e5008
import
{
FormSchema
}
from
"@/components/Form"
;
export
const
createHeaderFormSchema
:
FormSchema
[]
=
[
{
label
:
'标签类型'
,
field
:
'labelType'
,
required
:
true
,
component
:
'Select'
,
componentProps
:
{
options
:
[
{
label
:
'衍生标签'
,
value
:
'衍生标签'
,
},
{
label
:
'衍生标签'
,
value
:
'衍生标签'
,
},
],
},
},
{
label
:
'标签分层'
,
field
:
'labelLayered'
,
required
:
true
,
component
:
'Select'
,
componentProps
:
{
options
:
[
{
label
:
'分层'
,
value
:
'分层'
,
},
],
},
},
{
label
:
'配置方式'
,
field
:
'configWay'
,
required
:
true
,
component
:
'Select'
,
componentProps
:
{
options
:
[
{
label
:
'规则表达式'
,
value
:
'规则表达式'
,
},
],
},
},
{
label
:
'更新频率'
,
field
:
'labelType'
,
required
:
true
,
component
:
'Select'
,
componentProps
:
{
options
:
[
{
label
:
'随主体更新'
,
value
:
'随主体更新'
,
},
],
},
},
];
export
const
createBodyFormSchema
:
FormSchema
[]
=
[
{
label
:
'英文名称'
,
field
:
'enName'
,
component
:
'Input'
,
},
{
label
:
'逻辑说明'
,
field
:
'des'
,
component
:
'Input'
,
},
];
src/views/mallResourceDevelopment/labelDevelop/createLabel/createData.ts
0 → 100644
View file @
d61e5008
export
const
tabList
=
[
{
id
:
1
,
name
:
'全职员工'
,
},
{
id
:
2
,
name
:
'兼职员工'
,
},
{
id
:
3
,
name
:
'其他'
,
},
];
src/views/mallResourceDevelopment/labelDevelop/createLabel/index.vue
0 → 100644
View file @
d61e5008
<
template
>
<PageWrapper
:title=
"title"
dense
contentFullHeight
fixedHeight
>
<template
#
extra
>
<a-button
type=
"primary"
>
关联名单
</a-button>
<Divider
type=
"vertical"
style=
"height: 32px; background-color: #eff2f9"
/>
<a-button
type=
"primary"
>
基本信息
</a-button>
<a-button
type=
"primary"
>
保存
</a-button>
<a-button
type=
"primary"
>
发布版本
</a-button>
<a-button
type=
"primary"
>
版本管理
</a-button>
<a-button
type=
"primary"
>
更新记录
</a-button>
</
template
>
<
template
#
footer
>
<BasicForm
@
register=
"headerForm"
/>
<div
class=
"flex"
style=
"margin: 0 -24px; border-top: 1px solid #eaecf6"
>
<!-- 标签分层 -->
<div
class=
"w-1/7"
style=
"padding: 10px"
>
<div
class=
"flex justify-between"
>
<span>
标签分层
</span>
<a-button
type=
"link"
><PlusOutlined
/></a-button>
</div>
<div>
<List>
<template
v-for=
"item in tabList"
:key=
"item.id"
>
<List
.
Item
style=
"cursor: pointer"
:class=
"clickId === item.id ? 'select-item' : null"
@
click=
"handleClick(item)"
>
<List
.
Item
.
Meta
>
<template
#
avatar
>
<Icon
icon=
"ion:layers-outline"
style=
"color: #f6c79a"
/>
</
template
>
<
template
#
title
>
<div
:class=
"clickId === item.id ? 'select-item' : null"
>
<span>
{{
item
.
name
}}
</span>
</div>
</
template
>
</List
.Item.Meta
>
</List
.Item
>
</template>
</List>
</div>
</div>
<div
class=
"w-6/7"
style=
"border-left: 1px solid #eaecf6"
>
<!-- 标题 -->
<div
class=
"flex"
style=
"padding: 5px 24px"
>
<Icon
style=
"font-size: 22px; color: #f6c79a"
icon=
"ion:layers-outline"
/>
<span
style=
"font-size: 18px"
>
{{ clickItem.name }}
</span>
</div>
<BasicForm
@
register=
"bodyForm"
/>
<div
style=
"margin: 40px 25px"
>
<div
class=
"flex"
v-for=
"group in groupList"
:key=
"group.key"
>
<Select
v-model:value=
"group.logic"
style=
"width: 65px; height: 32px"
:options=
"logicOptions"
/>
<div
style=
"border-top: 1px solid #d4d9e6; width: 15px; margin-top: 15px"
></div>
<div>
<div
class=
"flex"
v-for=
"item in group.fieldList"
:key=
"item.key"
style=
"margin-bottom: 20px"
>
<div
style=
"border-left: 1px solid #d4d9e6; margin-top: 15px; margin-bottom: -36px"
></div>
<div
style=
"border-bottom: 1px solid #d4d9e6; width: 15px; margin-bottom: 16px"
></div>
<div
class=
"flex"
style=
"gap: 10px"
>
<Select
v-model:value=
"item.field"
style=
"width: 300px"
:options=
"fieldOptions"
/>
<Select
v-model:value=
"item.operator"
style=
"width: 200px"
:options=
"operatorOptions"
/>
<Input
v-if=
"!['是NULL', '不是NULL', null, undefined].includes(item.operator)"
v-model:value=
"item.des"
/>
<CloseOutlined
@
click=
"handleDel(item, item.key)"
/>
</div>
</div>
<div
class=
"flex"
>
<div
style=
"border-bottom: 1px solid #d4d9e6; width: 15px; margin-bottom: 16px"
></div>
<div
class=
"flex"
>
<a-button
style=
"padding-left: 0"
type=
"link"
@
click=
"handleAddField(group.fieldList)"
>
添加条件
</a-button
>
<a-button
type=
"link"
@
click=
"handleAddGroup"
>
添加组
</a-button>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</template>
</PageWrapper>
</template>
<
script
lang=
"ts"
setup
>
import
PageWrapper
from
'../../../../components/Page/src/PageWrapper.vue'
;
import
{
Divider
,
List
,
Select
,
Input
}
from
'ant-design-vue'
;
import
{
PlusOutlined
,
CloseOutlined
}
from
'@ant-design/icons-vue'
;
import
{
tabList
}
from
'./createData'
;
import
Icon
from
'@/components/Icon/Icon.vue'
;
import
BasicForm
from
'@/components/Form/src/BasicForm.vue'
;
import
{
useForm
}
from
'@/components/Form'
;
import
{
createBodyFormSchema
,
createHeaderFormSchema
,
}
from
'@/views/mallResourceDevelopment/labelDevelop/createLabel/create.data'
;
import
{
reactive
,
ref
}
from
'vue'
;
import
{
useRoute
}
from
'vue-router'
;
const
route
=
useRoute
();
const
title
=
route
.
query
.
name
;
const
[
headerForm
]
=
useForm
({
labelWidth
:
100
,
baseColProps
:
{
lg
:
5
,
md
:
5
},
schemas
:
createHeaderFormSchema
,
showActionButtonGroup
:
false
,
actionColOptions
:
{
span
:
23
,
},
});
const
clickId
=
ref
(
tabList
[
0
].
id
);
const
clickItem
=
ref
(
tabList
[
0
]);
function
handleClick
(
item
)
{
clickId
.
value
=
item
.
id
;
clickItem
.
value
=
{
...
item
};
}
const
[
bodyForm
]
=
useForm
({
labelWidth
:
100
,
baseColProps
:
{
span
:
11
},
schemas
:
createBodyFormSchema
,
showActionButtonGroup
:
false
,
actionColOptions
:
{
span
:
23
,
},
});
const
logicOptions
=
[
{
label
:
'或'
,
value
:
'或'
,
},
{
label
:
'且'
,
value
:
'且'
,
},
{
label
:
'非'
,
value
:
'非'
,
},
];
const
fieldOptions
=
[
{
label
:
'编号'
,
value
:
'编号'
,
},
{
label
:
'工作类型'
,
value
:
'工作类型'
,
},
];
const
operatorOptions
=
[
{
label
:
'等于'
,
value
:
'等于'
,
},
{
label
:
'不等于'
,
value
:
'不等于'
,
},
{
label
:
'不是NULL'
,
value
:
'不是NULL'
,
},
{
label
:
'是NULL'
,
value
:
'是NULL'
,
},
];
const
groupList
=
reactive
([
{
key
:
0
,
fieldList
:
[
{
key
:
0
,
},
],
},
]);
function
handleAddField
(
fieldList
)
{
fieldList
.
push
({
key
:
fieldList
.
length
,
});
}
function
handleAddGroup
()
{
groupList
.
push
({
key
:
groupList
.
length
,
fieldList
:
[
{
key
:
0
,
},
],
});
}
function
handleDel
(
fieldList
,
item
)
{
fieldList
.
splice
(
item
,
1
);
}
</
script
>
<
style
scoped
>
/*点击后样式*/
.select-item
{
background-color
:
#338bfe
;
color
:
#ffffff
;
border-radius
:
8px
;
}
</
style
>
src/views/mallResourceDevelopment/labelDevelop/index.vue
View file @
d61e5008
<
template
>
<PageWrapper
dense
>
<PageWrapper
dense
contentFullHeight
fixedHeight
>
<template
#
footer
>
<div
class=
"flex"
>
<!--树-->
...
...
@@ -18,8 +18,8 @@
<a-button
type=
"primary"
>
下架商城
</a-button>
<a-button
type=
"primary"
>
上架商城
</a-button>
<a-button
type=
"primary"
>
导入
</a-button>
<a-button
type=
"primary"
:disabled=
"
true
"
>
导出
</a-button>
<a-button
type=
"primary"
:disabled=
"
true
"
>
移动
</a-button>
<a-button
type=
"primary"
:disabled=
"
selectDisabled
"
>
导出
</a-button>
<a-button
type=
"primary"
:disabled=
"
selectDisabled
"
>
移动
</a-button>
<a-button
type=
"primary"
>
新建文件夹
</a-button>
<a-button
type=
"primary"
@
click=
"handleAtomLabel"
>
生成原子标签
</a-button>
</
template
>
...
...
@@ -27,7 +27,9 @@
<BasicTable
@
register=
"tabTable"
ref=
"tabTableRef"
>
<template
#
toolbar
>
<a-button
type=
"primary"
>
批量创建
</a-button>
<a-button
type=
"primary"
>
新建标签
</a-button>
<a-button
type=
"primary"
@
click=
"handleAddLabel"
:disabled=
"!tabName"
>
新建标签
</a-button
>
</
template
>
<
template
#
bodyCell=
"{ column, record }"
>
<template
v-if=
"column.key === 'action'"
>
...
...
@@ -38,7 +40,7 @@
icon: 'ant-design:line-chart-outlined',
},
{
//关系
<DeploymentUnitOutlined
/>
//关系
icon: 'ant-design:deployment-unit-outlined',
},
]"
...
...
@@ -71,16 +73,24 @@
import
PageWrapper
from
'../../../components/Page/src/PageWrapper.vue'
;
import
BasicTable
from
'../../../components/Table/src/BasicTable.vue'
;
import
BasicTree
from
'../../../components/Tree/src/BasicTree.vue'
;
import
{
useTree
}
from
'@/components/Tree/src/hooks/useTree'
;
import
{
ref
,
unref
}
from
'vue'
;
import
{
computed
,
ref
,
unref
}
from
'vue'
;
import
{
labelTreeData
}
from
'./labelData'
;
import
TableAction
from
'@/components/Table/src/components/TableAction.vue'
;
import
{
BasicTableProps
,
useTable
}
from
'@/components/Table'
;
import
{
tabTableColumn
,
tabTableFormSchema
}
from
'./label.data'
;
import
{
useMessage
}
from
'@/hooks/web/useMessage'
;
import
{
useRouter
}
from
'vue-router'
;
import
{
cloneDeep
}
from
'lodash-es'
;
const
treeData
=
ref
(
null
);
const
tabTableRef
=
ref
(
null
);
const
selectDisabled
=
computed
(()
=>
{
if
(
tabTableRef
.
value
)
{
return
tabGetRowSelection
().
selectedRowKeys
<=
0
;
}
else
{
return
true
;
}
});
function
handleSelect
()
{
const
keys
=
unref
(
treeData
).
getSelectedKeys
();
const
node
=
unref
(
treeData
).
getSelectedNode
(
keys
[
0
]);
...
...
@@ -88,7 +98,7 @@
// 获取标题
tabName
.
value
=
node
.
title
;
if
(
node
.
children
)
{
const
list
=
JSON
.
parse
(
JSON
.
stringify
(
node
.
children
)
);
const
list
=
cloneDeep
(
node
.
children
);
list
.
forEach
((
item
)
=>
{
item
.
children
=
null
;
});
...
...
@@ -110,6 +120,14 @@
path
:
'/mallResourceDevelopment/labelDevelop/atomLabel'
,
});
}
function
handleAddLabel
()
{
router
.
push
({
path
:
'/mallResourceDevelopment/labelDevelop/createLabel'
,
query
:
{
name
:
tabName
.
value
,
},
});
}
function
handleRemove
(
record
)
{
createMessage
.
success
(
'删除成功!'
);
}
...
...
@@ -131,7 +149,7 @@
return
{
...
response
};
},
rowKey
:
'
businessId
'
,
rowKey
:
'
key
'
,
columns
:
tabTableColumn
,
rowSelection
:
true
,
showIndexColumn
:
false
,
...
...
src/views/scriptDevelopment/functionManagement/editAuditRulesModal.vue
View file @
d61e5008
...
...
@@ -22,8 +22,8 @@
<a-button
type=
"primary"
>
文件选择
</a-button>
<p
style=
"margin: 5px"
>
仅允许导入单个.jar文件
</p>
</div>
<div
style=
"margin-top: 10px"
>
<a-input
style=
"width: 342px; margin-right: auto"
allowClear
/>
<div
style=
"margin-top: 10px
;
"
>
<a-input
style=
"width: 342px; margin-right: auto"
allowClear
/>
</div>
</
template
>
...
...
@@ -35,20 +35,50 @@
</template>
<
script
lang=
"ts"
setup
>
import
{
ref
,
}
from
'vue'
;
import
{
PageWrapper
}
from
"@/components/Page"
;
import
{
tableList
}
from
"./mock"
;
import
{
personSchema
}
from
"./mainBody.data"
;
import
{
BasicForm
,
useForm
}
from
"@/components/Form"
;
import
SaveSettingsModal
from
"./saveSettingsModal.vue"
;
import
{
useModal
}
from
"@/components/Modal"
;
import
{
computed
,
onMounted
}
from
"vue"
;
// 初始化 info 为一个响应式对象
const
info
=
ref
({...
tableList
[
0
]});
const
[
saveSettings
,
{
openModal
:
openModal
}]
=
useModal
();
// 新建质量主体弹窗
const
pros
=
defineProps
({
deptId
:
{
type
:
Number
,
default
:
0
,
}
})
// 初始化 info 为一个响应式对象
const
info
=
computed
(()
=>
{
const
list
=
tableList
;
const
index
=
list
.
findIndex
((
item
)
=>
{
return
item
.
selectedDeptId
===
pros
.
deptId
;
// 添加 return 关键字
});
console
.
log
(
'list'
,
list
);
console
.
log
(
'index'
,
index
);
console
.
log
(
'deptId'
,
pros
.
deptId
);
if
(
index
!==
-
1
)
{
return
list
[
index
];
}
return
{};
});
function
palyStart
()
{
setFieldsValue
(
info
.
value
);
}
onMounted
(()
=>
{
console
.
log
(
'tableList'
,
tableList
)
palyStart
();
});
function
preservation
()
{
openModal
(
true
,
{
...
...
@@ -56,7 +86,7 @@ function preservation() {
});
}
const
[
registerGuideModeForm
]
=
useForm
({
const
[
registerGuideModeForm
,{
setFieldsValue
}
]
=
useForm
({
labelWidth
:
100
,
schemas
:
personSchema
,
showActionButtonGroup
:
false
,
...
...
src/views/scriptDevelopment/selfServiceTableCreation/editAuditRulesModal.vue
View file @
d61e5008
<
template
>
<PageWrapper
dense
contentFullHeight
fixedHeight
contentClass=
"flex"
>
<PageWrapper
dense
contentFullHeight
fixedHeight
contentClass=
"flex flex-col"
class=
"toolbar"
style=
"width: 910px; "
>
<PageWrapper
dense
contentFullHeight
fixedHeight
contentClass=
"flex flex-col"
class=
"toolbar"
>
<div
class=
"toolbar"
style=
"background: white; "
>
<div
class=
"tools"
>
<a-button
type=
"primary"
style=
"float: right; margin: 10px 15px 10px 0"
>
保存
</a-button>
...
...
@@ -29,9 +29,17 @@
<BasicTable
@
register=
"registerTable"
style=
"width: 960px; height: 160px; overflow: hidden;"
class=
"w-3/4 xl:w-4/5"
style=
"width: 100%; height: 160px; overflow: hidden;"
>
<
template
#
sort
>
<Icon
icon=
"material-symbols:holder"
/>
</
template
>
<
template
#
nonEmpty
>
<checkbox
/>
</
template
>
<
template
#
bodyCell=
"{ column }"
>
<template
v-if=
"column.key === 'action'"
>
<TableAction
...
...
@@ -59,6 +67,7 @@
@
register=
"partitionConfigurationTemplate"
>
<
template
#
tableConfiguration
>
<h1
class=
"title-text"
style=
"width: 525px;margin-bottom:-30px;margin-top: 3px;"
>
分区配置
</h1>
<h1
class=
"title-text"
style=
"margin-bottom:-30px; margin-top: 10px; margin-left: 520px;"
>
分桶配置
</h1>
...
...
@@ -91,6 +100,8 @@ import {useModal} from "@/components/Modal";
import
generateTableBuildingStatementsMode
from
'./generateTableBuildingStatementsMode.vue'
;
import
addFieldsModal
from
'./addFieldsModal.vue'
;
let
fieldConfigurationL
=
ref
(
fieldConfigurationList
);
// 初始化 info 为一个响应式对象
const
info
=
ref
({...
fieldConfigurationList
[
0
]});
...
...
@@ -104,7 +115,7 @@ const [
api
:
async
(
params
)
=>
{
const
response
=
{
total
:
fieldConfigurationL
ist
.
length
,
total
:
fieldConfigurationL
.
value
.
length
,
data
:
[],
};
...
...
@@ -126,6 +137,7 @@ const [
showTableSetting
:
false
,
bordered
:
false
,
pagination
:
false
,
customRow
:
customRow
,
handleSearchInfoFn
(
info
)
{
console
.
log
(
'handleSearchInfoFn'
,
info
);
return
info
;
...
...
@@ -137,6 +149,61 @@ const [
},
});
let
source
=
0
;
// 源目标数据序号
let
target
=
0
;
// 目标数据序号
function
customRow
(
record
,
index
)
{
console
.
log
(
record
,
index
);
// 这里输出是表格全部的数据
return
{
props
:
{
// draggable: 'true'
},
style
:
{
cursor
:
'pointer'
,
},
// 鼠标移入
onMouseenter
:
(
event
)
=>
{
// 兼容IE
let
ev
=
event
||
window
.
event
;
ev
.
target
.
draggable
=
true
;
// 让你要拖动的行可以拖动,默认不可以
},
// 开始拖拽
onDragstart
:
(
event
)
=>
{
// 兼容IE
let
ev
=
event
||
window
.
event
;
// 阻止冒泡
ev
.
stopPropagation
();
// 得到源目标数据序号
source
=
index
;
console
.
log
(
record
,
index
,
'source'
);
},
// 拖动元素经过的元素
onDragover
:
(
event
)
=>
{
// 兼容 IE
let
ev
=
event
||
window
.
event
;
// 阻止默认行为
ev
.
preventDefault
();
},
// 鼠标松开
onDrop
:
(
event
)
=>
{
// 兼容IE
let
ev
=
event
||
window
.
event
;
// 阻止冒泡
ev
.
stopPropagation
();
// 得到目标数据序号
target
=
index
;
// 这里就是让数据位置互换,让视图更新 你们可以看record,index的输出,看是什么
console
.
log
(
fieldConfigurationL
);
// [tableData.value[source], tableData.value[target]] = [tableData.value[target], tableData.value[source]];
const
temp
=
ref
();
temp
.
value
=
fieldConfigurationL
.
value
[
source
];
fieldConfigurationL
.
value
[
source
]
=
fieldConfigurationL
.
value
[
target
];
fieldConfigurationL
.
value
[
target
]
=
temp
.
value
;
console
.
log
(
record
,
index
,
'target'
,
source
,
target
);
},
};
}
function
sqlStatement
()
{
openModal
(
true
,
{
isUpdate
:
false
,
...
...
src/views/scriptDevelopment/selfServiceTableCreation/mainBody.data.ts
View file @
d61e5008
...
...
@@ -48,6 +48,7 @@ export const fieldConfiguration: BasicColumn[] = [
title
:
'排序'
,
dataIndex
:
'sort'
,
width
:
50
,
slots
:{
customRender
:
'sort'
}
},
{
...
...
@@ -99,10 +100,10 @@ export const fieldConfiguration: BasicColumn[] = [
{
title
:
'非空'
,
dataIndex
:
'nonEmpty'
,
width
:
60
,
edit
:
true
,
width
:
100
,
editComponent
:
'Checkbox'
,
slots
:{
customRender
:
'nonEmpty'
}
},
];
...
...
src/views/scriptDevelopment/selfServiceTableCreation/mock.ts
View file @
d61e5008
...
...
@@ -26,13 +26,12 @@ export const tableList: any[] = [
export
const
fieldConfigurationList
:
any
[]
=
[
{
fieldChineseName
:
'用户ID'
,
fieldEnglishName
:
'ID'
,
tableType
:
'string'
,
fieldType
:
''
,
fieldAccuracy
:
''
,
nonEmpty
:
true
,
nonEmpty
:
'1'
,
},
{
...
...
@@ -41,7 +40,8 @@ export const fieldConfigurationList: any[] = [
tableType
:
'varchar'
,
fieldType
:
'255'
,
fieldAccuracy
:
''
,
nonEmpty
:
true
,
nonEmpty
:
'1'
,
},
];
...
...
src/views/scriptDevelopment/sqlAudit/editAuditRulesModal.vue
View file @
d61e5008
...
...
@@ -40,7 +40,7 @@
</template>
<
script
lang=
"ts"
setup
>
import
{
computed
,
onMounted
,
ref
,
}
from
'vue'
;
import
{
computed
,
onMounted
}
from
'vue'
;
import
{
PageWrapper
}
from
"@/components/Page"
;
import
{
tableList
}
from
"@/views/scriptDevelopment/sqlAudit/mock"
;
import
{
personSchema
}
from
"@/views/scriptDevelopment/sqlAudit/mainBody.data"
;
...
...
src/views/taskScheduling/schedulingExecution/calendar/index.vue
deleted
100644 → 0
View file @
1e425877
<
template
>
<PageWrapper>
</PageWrapper>
</
template
>
<
script
lang=
"ts"
setup
>
</
script
>
<
style
lang=
"scss"
scoped
>
</
style
>
src/views/taskScheduling/schedulingExecution/
calendar
/mock.ts
→
src/views/taskScheduling/schedulingExecution/
sExecution
/mock.ts
View file @
d61e5008
File moved
src/views/taskScheduling/schedulingExecution/
taskFlow/index.vue
→
src/views/taskScheduling/schedulingExecution/
sExecution/sExecution.data.ts
View file @
d61e5008
File moved
src/views/taskScheduling/taskFlow/ModelTree.vue
0 → 100644
View file @
d61e5008
<
template
>
<div
class=
"m-4 mr-0 overflow-hidden bg-white"
>
<BasicTree
ref=
"treeRef"
treeWrapperClassName=
"h-[calc(100%-35px)] overflow-auto"
:defaultExpandAll=
"true"
:fieldNames=
"
{ key: 'key', title: 'title' }"
:treeData="taskTreeData"
@select="handleSelect"
/>
</div>
</
template
>
<
script
lang=
"ts"
setup
>
import
{
nextTick
,
onMounted
,
ref
,
unref
}
from
'vue'
;
import
{
BasicTree
,
TreeActionType
,
TreeItem
}
from
'@/components/Tree'
;
import
{
Nullable
}
from
'@vben/types'
;
import
{
taskTreeData
}
from
'./taskFlow.data'
;
defineOptions
({
name
:
'DeptTree'
});
const
emit
=
defineEmits
([
'select'
]);
const
treeRef
=
ref
<
Nullable
<
TreeActionType
>>
(
null
);
function
handleSelect
(
keys
)
{
emit
(
'select'
,
keys
[
0
]);
}
</
script
>
src/views/taskScheduling/taskFlow/index.vue
0 → 100644
View file @
d61e5008
<
template
>
<PageWrapper
title=
"任务流"
contentBackground
headerSticky
>
<template
#
extra
>
<div
style=
"display: flex;"
>
<div>
<a-button
style=
"border-color:transparent"
>
<Icon
icon=
"ant-design:caret-right-outlined"
style=
"color: blue"
size=
"24"
/>
<p>
运行
</p>
</a-button>
</div>
<div>
<a-button
style=
"border-color:transparent "
>
<Icon
icon=
"ant-design:send-outlined"
style=
"color: blue"
size=
"24"
/>
<p>
发布
</p>
</a-button>
</div>
<div>
<a-button
style=
"border-color:transparent "
>
<Icon
icon=
"ant-design:cloud-download-outlined"
style=
"color: blue"
size=
"24"
/>
<p>
下线
</p>
</a-button>
</div>
<div>
<a-button
style=
"border-color:transparent "
>
<Icon
icon=
"ant-design:tag-outlined"
style=
"color: blue"
size=
"24"
/>
<p>
设置业务标签
</p>
</a-button>
</div>
<div>
<a-button
style=
"border-color:transparent "
>
<Icon
icon=
"ant-design:reconciliation-outlined"
style=
"color: blue"
size=
"24"
/>
<p>
复制到
</p>
</a-button>
</div>
<div>
<a-button
style=
"border-color:transparent "
>
<Icon
icon=
"ant-design:clear-outlined"
style=
"color: red"
size=
"24"
/>
<p>
删除
</p>
</a-button>
</div>
<div>
<a-button
style=
"border-color:transparent "
>
<Icon
icon=
"ant-design:folder-open-outlined"
style=
"color: blue"
size=
"24"
/>
<p>
移动
</p>
</a-button>
</div>
<div>
<a-button
style=
"border-color:transparent "
>
<Icon
icon=
"ant-design:arrow-up-outlined"
style=
"color: blue"
size=
"24"
/>
<p>
导出
</p>
</a-button>
</div>
<div>
<a-button
style=
"border-color:transparent "
>
<Icon
icon=
"ant-design:arrow-down-outlined"
style=
"color: blue"
size=
"24"
/>
<p>
导入
</p>
</a-button>
</div>
<div>
<a-button
style=
"border-color:transparent "
>
<Icon
icon=
"ant-design:folder-add-outlined"
style=
"color: blue"
size=
"24"
/>
<p>
新建文件夹
</p>
</a-button>
</div>
<div>
<a-button
style=
"border-color:transparent "
>
<Icon
icon=
"ant-design:plus-square-outlined"
style=
"color: blue"
size=
"24"
/>
<p>
新建文件
</p>
</a-button>
</div>
</div>
</
template
>
<
template
#
footer
>
<div
class=
"flex"
>
<ModelTree
class=
"w-1/4"
@
select=
"handleSelect"
/>
<BasicTable
class=
"w-3/4"
@
register=
"registerTable"
:searchInfo=
"searchInfo"
>
<template
#
tableTitle
>
<div
style=
"display: flex;align-items: center"
>
<BasicForm
@
register=
"registerForm"
style=
"margin-bottom: -20px"
/>
</div>
</
template
>
<
template
#
bodyCell=
"{ column, record }"
>
<template
v-if=
"column.key === 'action'"
>
<TableAction
:actions=
"[
{
icon:'ant-design:exclamation-circle-outlined',
tooltip:'详情',
/*label: '血缘',*/
onClick: handleConsanguinity.bind(null, record),
},
{
icon:'ant-design:caret-right-outlined',
tooltip:'运行',
onClick: other.bind(null, record),
},
{
icon:'ant-design:cloud-download-outlined',
tooltip:'下线',
onClick: handleOnline.bind(null, record),
},
{
icon:'ant-design:send-outlined',
tooltip:'发布',
onClick: apiDetail.bind(null, record),
},
{
icon:'ant-design:android-outlined',
tooltip:'检查?',
onClick: handleOffline.bind(null, record),
},
]"
:dropDownActions="[
{
icon:'ant-design:reconciliation-outlined',
label: '复制',
onClick: apiDetail.bind(null, record),
},
{
icon:'ant-design:clear-outlined',
label: '删除',
onClick: apiDetail.bind(null, record),
},
{
icon:'ant-design:folder-open-outlined',
label: '移动',
onClick: apiDetail.bind(null, record),
},
]"
/>
</
template
>
</template>
<
template
#
name=
"{ text, record }"
>
<a
@
click=
"seeApi(record)"
>
<Icon
icon=
"ant-design:node-index-outlined"
:size=
"15"
style=
"color:#0000ff;"
/>
{{
text
}}
</a>
</
template
>
</BasicTable>
</div>
</template>
</PageWrapper>
</template>
<
script
lang=
"ts"
setup
>
import
{
reactive
,
onMounted
,
ref
}
from
'vue'
;
import
{
BasicTable
,
useTable
,
TableAction
}
from
'@/components/Table'
;
import
{
PageWrapper
}
from
'@/components/Page'
;
import
{
useMessage
}
from
'@/hooks/web/useMessage'
;
import
{
columns
,
searchFormSchema
}
from
'./taskFlow.data'
;
import
{
tableList
}
from
"./mock"
;
import
{
useRoute
,
onBeforeRouteLeave
}
from
'vue-router'
;
import
{
router
}
from
'@/router'
;
import
Icon
from
"@/components/Icon/Icon.vue"
;
import
BasicForm
from
"@/components/Form/src/BasicForm.vue"
;
import
ModelTree
from
"@/views/taskScheduling/taskFlowDesign/ModelTree.vue"
;
import
{
designData
}
from
"@/views/taskScheduling/taskFlowDesign/designData"
;
defineOptions
({
name
:
'safetyLevelManage'
});
const
{
createMessage
,
createConfirm
}
=
useMessage
();
const
route
=
useRoute
();
let
modelLevel
=
ref
(
1
);
const
tableData
=
ref
([]);
const
searchInfo
=
reactive
<
Recordable
>
({});
const
[
registerTable
,
{
getRowSelection
,
setTableData
}]
=
useTable
({
/* title: '任务流',*/
api
:
async
(
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'
,
rowSelection
:
true
,
showIndexColumn
:
false
,
columns
,
showTableSetting
:
false
,
bordered
:
true
,
striped
:
false
,
handleSearchInfoFn
(
info
)
{
console
.
log
(
'handleSearchInfoFn'
,
info
);
return
info
;
},
actionColumn
:
{
width
:
220
,
title
:
'操作'
,
dataIndex
:
'action'
,
},
});
/**右上*/
const
[
registerForm
]
=
useTable
({
schemas
:
searchFormSchema
,
//在 input 中输入时按回车自动提交
autoSubmitOnEnter
:
true
,
//是否显示操作按钮(重置/提交)
showActionButtonGroup
:
false
,
rowSelection
:
true
,
pagination
:
false
,
showIndexColumn
:
false
,
scroll
:
{
y
:
300
},
showSummary
:
true
,
});
onMounted
(()
=>
{
tableData
.
value
=
tableList
;
});
/** 部门树的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
);
}
}
/**查看API*/
function
seeApi
(
record
)
{
router
.
push
({
path
:
'/taskScheduling/taskFlowDesign'
,
query
:
{},
})
}
/**查看详情*/
function
detailButton
(
record
)
{
router
.
push
({
path
:
'/dataStandards/publicCode/detailPublicCode'
,
query
:
{
businessId
:
record
.
businessId
,
},
});
}
/**血缘按钮跳转路由以及传值*/
function
handleConsanguinity
(
record
:
Recordable
)
{
router
.
push
({
path
:
'/dataService/serviceManage/onlineManage/handleConsanguinity'
,
query
:
{
id
:
record
.
businessId
,
},
});
}
/**设置按钮*/
function
Settings
()
{
}
/**按钮*/
function
other
()
{
}
/**api详情按钮*/
function
apiDetail
()
{
}
/**下线按钮*/
function
handleOffline
(
record
)
{
// 修改 record 对象的 flag 值为 "未上线"
record
.
flag
=
'未上线'
;
}
/**上线按钮*/
function
handleOnline
()
{
router
.
push
({
path
:
'/dataService/serviceManage/onlineManage/productionData'
,
query
:
{},
});
}
/** 删除按钮*/
function
handleDelete
(
record
:
Recordable
)
{
const
rowSelection
=
getRowSelection
().
selectedRowKeys
;
console
.
log
(
'11111111111'
,
rowSelection
);
createMessage
.
success
(
'删除成功!'
);
reload
();
}
onMounted
(()
=>
{
});
</
script
>
<
style
lang=
"scss"
scoped
>
</
style
>
src/views/taskScheduling/taskFlow/mock.ts
0 → 100644
View file @
d61e5008
/**列表数据*/
export
const
tableList
:
any
[]
=
[
{
businessId
:
1
,
name
:
'1_1_1'
,
ownershipWorkgroup
:
'admin-个人工作区'
,
createDate
:
'2023/07/10 10:34:30'
,
updateDate
:
'2023/07/10 10:49:38'
,
businessTag
:
'_'
,
owner
:
'admin'
,
releaseStatus
:
'已发布'
,
type
:
'model'
,
themeId
:
'1-1-1'
,
},
{
businessId
:
2
,
name
:
'1_1_2'
,
ownershipWorkgroup
:
'admin-个人工作区'
,
createDate
:
'2023/07/10 10:34:30'
,
updateDate
:
'2023/07/10 10:49:38'
,
businessTag
:
'_'
,
owner
:
'admin'
,
releaseStatus
:
'已发布'
,
type
:
'model'
,
themeId
:
'1-1-1'
,
},
{
businessId
:
3
,
name
:
'1_2_1'
,
ownershipWorkgroup
:
'admin-个人工作区'
,
createDate
:
'2023/07/10 10:34:30'
,
updateDate
:
'2023/07/10 10:49:38'
,
businessTag
:
'_'
,
owner
:
'admin'
,
releaseStatus
:
'已发布'
,
type
:
'model'
,
themeId
:
'1-1-2'
,
},
{
businessId
:
4
,
name
:
'1_2_2'
,
ownershipWorkgroup
:
'admin-个人工作区'
,
createDate
:
'2023/07/10 10:34:30'
,
updateDate
:
'2023/07/10 10:49:38'
,
businessTag
:
'_'
,
owner
:
'admin'
,
releaseStatus
:
'已发布'
,
type
:
'model'
,
themeId
:
'1-1-2'
,
},
{
businessId
:
5
,
name
:
'1_3_1'
,
ownershipWorkgroup
:
'admin-个人工作区'
,
createDate
:
'2023/07/10 10:34:30'
,
updateDate
:
'2023/07/10 10:49:38'
,
businessTag
:
'_'
,
owner
:
'admin'
,
releaseStatus
:
'已发布'
,
type
:
'model'
,
themeId
:
'1-1-3'
,
},
{
businessId
:
6
,
name
:
'1_3_2'
,
ownershipWorkgroup
:
'admin-个人工作区'
,
createDate
:
'2023/07/10 10:34:30'
,
updateDate
:
'2023/07/10 10:49:38'
,
businessTag
:
'_'
,
owner
:
'admin'
,
releaseStatus
:
'已发布'
,
type
:
'model'
,
themeId
:
'1-1-3'
,
},
{
businessId
:
7
,
name
:
'admin-个人工作区'
,
ownershipWorkgroup
:
'admin-个人工作区'
,
createDate
:
'2023/07/10 10:34:30'
,
updateDate
:
'2023/07/10 10:49:38'
,
businessTag
:
'_'
,
owner
:
'admin'
,
releaseStatus
:
'已发布'
,
type
:
'theme'
,
themeId
:
'1-1'
,
},
{
businessId
:
8
,
name
:
'SLA场景验证'
,
ownershipWorkgroup
:
'admin-个人工作区'
,
createDate
:
'2023/07/10 10:34:30'
,
updateDate
:
'2023/07/10 10:49:38'
,
businessTag
:
'_'
,
owner
:
'admin'
,
releaseStatus
:
'已发布'
,
type
:
'theme'
,
themeId
:
'1-2'
,
},
{
businessId
:
9
,
name
:
'超时'
,
ownershipWorkgroup
:
'admin-个人工作区'
,
createDate
:
'2023/07/10 10:34:30'
,
updateDate
:
'2023/07/10 10:49:38'
,
businessTag
:
'_'
,
owner
:
'admin'
,
releaseStatus
:
'已发布'
,
type
:
'twoLevel'
,
themeId
:
'1-1-1'
,
},
{
businessId
:
10
,
name
:
'test'
,
ownershipWorkgroup
:
'SLA-实时指标计算'
,
createDate
:
'2023/07/10 10:34:30'
,
updateDate
:
'2023/07/10 10:49:38'
,
businessTag
:
'_'
,
owner
:
'admin'
,
releaseStatus
:
'已发布'
,
type
:
'twoLevel'
,
themeId
:
'1-1-2'
,
},
{
businessId
:
11
,
name
:
'sql'
,
ownershipWorkgroup
:
'admin-个人工作区'
,
createDate
:
'2023/07/10 10:34:30'
,
updateDate
:
'2023/07/10 10:49:38'
,
businessTag
:
'_'
,
owner
:
'admin'
,
releaseStatus
:
'已发布'
,
type
:
'twoLevel'
,
themeId
:
'1-1-3'
,
},
{
businessId
:
13
,
name
:
'SLA-沟通流水'
,
ownershipWorkgroup
:
'SLA-实时指标计算'
,
createDate
:
'2023/07/10 10:34:30'
,
updateDate
:
'2023/07/10 10:49:38'
,
businessTag
:
'_'
,
owner
:
'admin'
,
releaseStatus
:
'已发布'
,
type
:
'twoLevel'
,
themeId
:
'1-2-2'
,
},
{
businessId
:
14
,
name
:
'SLA-实时指标计算'
,
ownershipWorkgroup
:
'SLA-实时指标计算'
,
createDate
:
'2023/07/10 10:34:30'
,
updateDate
:
'2023/07/10 10:49:38'
,
businessTag
:
'_'
,
owner
:
'admin'
,
releaseStatus
:
'已发布'
,
type
:
'twoLevel'
,
themeId
:
'1-2-3'
,
},
{
businessId
:
15
,
name
:
'sla分组件指标日批统计历史'
,
ownershipWorkgroup
:
'SLA-实时指标计算'
,
createDate
:
'2023/07/10 10:34:30'
,
updateDate
:
'2023/07/10 10:49:38'
,
businessTag
:
'_'
,
owner
:
'admin'
,
releaseStatus
:
'已发布'
,
type
:
'twoLevel'
,
themeId
:
'1-2-4'
,
},
{
businessId
:
16
,
name
:
'SLA'
,
ownershipWorkgroup
:
'SLA-实时指标计算'
,
createDate
:
'2023/07/10 10:34:30'
,
updateDate
:
'2023/07/10 10:49:38'
,
businessTag
:
'_'
,
owner
:
'admin'
,
releaseStatus
:
'已发布'
,
type
:
'twoLevel'
,
themeId
:
'1-2-5'
,
},
];
src/views/taskScheduling/taskFlow/taskFlow.data.ts
0 → 100644
View file @
d61e5008
import
{
BasicColumn
,
FormSchema
}
from
"@/components/Table"
;
import
{
TreeItem
}
from
"@/components/Tree"
;
/** 列表展示字段*/
export
const
columns
:
BasicColumn
[]
=
[
{
title
:
'名称'
,
dataIndex
:
'name'
,
width
:
180
,
slots
:
{
customRender
:
'name'
},
},
{
title
:
'权属工作组'
,
dataIndex
:
'ownershipWorkgroup'
,
width
:
120
,
},
{
title
:
'创建时间'
,
dataIndex
:
'createDate'
,
width
:
120
,
},
{
title
:
'更新时间'
,
dataIndex
:
'updateDate'
,
width
:
120
,
},
{
title
:
'业务标签'
,
dataIndex
:
'businessTag'
,
width
:
80
,
},
{
title
:
'拥有者'
,
dataIndex
:
'owner'
,
width
:
120
,
},
{
title
:
'发布状态'
,
dataIndex
:
'releaseStatus'
,
width
:
120
,
},
];
/** 列表筛选项*/
export
const
searchFormSchema
:
FormSchema
[]
=
[
{
field
:
'name'
,
label
:
''
,
component
:
'InputSearch'
,
colProps
:
{
span
:
20
},
componentProps
:
{
placeholder
:
'输入关键字搜索'
,
onChange
:
(
e
:
any
)
=>
{
console
.
log
(
e
);
},
},
},
];
export
const
taskTreeData
:
TreeItem
[]
=
[
{
key
:
'1'
,
title
:
'所有任务流'
,
level
:
'0'
,
children
:
[
{
title
:
'admin-个人工作区'
,
key
:
'1-1'
,
level
:
'1'
,
icon
:
'ion:desktop-outline'
,
children
:
[
{
title
:
'超时'
,
level
:
'2'
,
key
:
'1-1-1'
,
icon
:
'ion:git-branch-outline'
},
{
title
:
'test'
,
level
:
'2'
,
key
:
'1-1-2'
,
icon
:
'ion:git-branch-outline'
},
{
title
:
'sql'
,
level
:
'2'
,
key
:
'1-1-3'
,
icon
:
'ion:git-branch-outline'
},
],
},
{
title
:
'SLA场景验证'
,
key
:
'1-2'
,
level
:
'1'
,
icon
:
'ion:desktop-outline'
,
children
:
[
{
title
:
'test'
,
key
:
'1-2-1'
,
icon
:
'ion:git-branch-outline'
},
{
title
:
'SLA-沟通流水'
,
key
:
'1-2-2'
,
icon
:
'ion:git-branch-outline'
},
{
title
:
'SLA-实时指标计算'
,
key
:
'1-2-3'
,
icon
:
'ion:git-branch-outline'
},
{
title
:
'sla分组件指标日批统计历史'
,
key
:
'1-2-4'
,
icon
:
'ion:git-branch-outline'
},
{
title
:
'SLA'
,
key
:
'1-2-5'
,
icon
:
'ion:git-branch-outline'
},
],
},
],
},
];
src/views/taskScheduling/taskFlowDesign/defineEvent.vue
0 → 100644
View file @
d61e5008
<
template
>
<BasicModal
width=
"50%"
v-bind=
"$attrs"
@
register=
"registerModal"
:title=
"getTitle"
@
ok=
"handleSubmit"
>
<BasicForm
@
register=
"registerForm"
>
</BasicForm>
</BasicModal>
</
template
>
<
script
lang=
"ts"
setup
>
import
{
ref
,
unref
,
reactive
}
from
'vue'
;
import
{
BasicModal
,
useModalInner
}
from
'@/components/Modal'
;
import
{
BasicForm
,
useForm
}
from
"@/components/Form"
;
import
{
defineEvent
}
from
"@/views/taskScheduling/taskFlowDesign/design.data"
;
const
getTitle
=
'定义事件'
;
//初始化弹框
const
[
registerModal
,
{
setModalProps
,
closeModal
}]
=
useModalInner
(
async
(
data
)
=>
{
setModalProps
({
confirmLoading
:
false
,
okText
:
'选中并自动更新'
,
});
await
resetFields
();
});
//初始化列表
const
[
registerForm
,
{
setFieldsValue
,
updateSchema
,
resetFields
,
validate
}]
=
useForm
({
labelWidth
:
100
,
baseColProps
:
{
lg
:
12
,
md
:
24
},
schemas
:
defineEvent
,
showActionButtonGroup
:
false
,
actionColOptions
:
{
span
:
23
,
},
});
/**确定按钮*/
async
function
handleSubmit
()
{
closeModal
();
}
</
script
>
src/views/taskScheduling/taskFlowDesign/design.data.ts
View file @
d61e5008
...
...
@@ -1015,3 +1015,82 @@ export const delTableColumn1: BasicColumn[] = [
width
:
150
,
},
];
export
const
defineEvent
:
FormSchema
[]
=
[
{
label
:
'检查频率'
,
field
:
'name'
,
component
:
'Input'
,
colProps
:
{
lg
:
24
,
md
:
24
},
},
{
label
:
'触发类型'
,
field
:
'depend'
,
defaultValue
:
'不依赖'
,
component
:
'RadioGroup'
,
componentProps
:
{
options
:
[
{
label
:
'文件到达'
,
value
:
'文件到达'
,
},
{
label
:
'SQL结果检查'
,
value
:
'SQL结果检查'
,
},
{
label
:
'脚本自定义'
,
value
:
'脚本自定义'
,
},
],
},
colProps
:
{
lg
:
24
,
md
:
24
},
},
{
label
:
'文件系统源'
,
field
:
'priority'
,
component
:
'Select'
,
componentProps
:
{
options
:
[
{
label
:
'HDFS'
,
value
:
'HDFS'
,
},
{
label
:
'FTP'
,
value
:
'FTP'
,
},
{
label
:
'SFTP'
,
value
:
'SFTP'
,
},
],
},
colProps
:
{
lg
:
24
,
md
:
24
},
},
{
label
:
'文件路径'
,
field
:
'name'
,
component
:
'Input'
,
colProps
:
{
lg
:
24
,
md
:
24
},
},
{
label
:
'目标对象'
,
field
:
'name'
,
component
:
'Input'
,
colProps
:
{
lg
:
24
,
md
:
24
},
},
{
label
:
'超时设置'
,
field
:
'name'
,
component
:
'Input'
,
colProps
:
{
lg
:
24
,
md
:
24
},
},
{
label
:
'保存结果'
,
field
:
'name'
,
component
:
'Input'
,
colProps
:
{
lg
:
24
,
md
:
24
},
},
];
src/views/taskScheduling/taskFlowDesign/designData.ts
View file @
d61e5008
...
...
@@ -3,42 +3,42 @@ import { TreeItem } from '@/components/Tree';
export
const
designData
=
[
{
businessId
:
1
,
name
:
'new task
'
,
name
:
'1_1_1
'
,
task
:
'new task1'
,
type
:
'model'
,
themeId
:
'1-1-1'
,
},
{
businessId
:
2
,
name
:
'new task1
'
,
name
:
'1_1_2
'
,
task
:
null
,
type
:
'model'
,
themeId
:
'1-1-1'
,
},
{
businessId
:
3
,
name
:
'test task
'
,
name
:
'1_2_1
'
,
task
:
'test task1'
,
type
:
'model'
,
themeId
:
'1-1-2'
,
},
{
businessId
:
4
,
name
:
'test task1
'
,
name
:
'1_2_2
'
,
task
:
null
,
type
:
'model'
,
themeId
:
'1-1-2'
,
},
{
businessId
:
5
,
name
:
'sql task
'
,
name
:
'1_3_1
'
,
task
:
'sql task1'
,
type
:
'model'
,
themeId
:
'1-1-3'
,
},
{
businessId
:
6
,
name
:
'sql task1
'
,
name
:
'1_3_2
'
,
task
:
null
,
type
:
'model'
,
themeId
:
'1-1-3'
,
...
...
src/views/taskScheduling/taskFlowDesign/index.vue
View file @
d61e5008
<
template
>
<PageWrapper
title=
"任务流"
contentBackground
headerSticky
>
<PageWrapper
title=
"任务流
设计
"
contentBackground
headerSticky
>
<template
#
extra
>
<!--历史版本-->
<span
v-if=
"versionFlag"
>
版本:
</span>
...
...
@@ -13,8 +13,13 @@
<a-button
v-if=
"versionFlag"
type=
"primary"
danger
@
click=
"handleExit"
><CloseOutlined
/>
退出
</a-button
>
<a-button
v-if=
"!versionFlag"
type=
"primary"
>
跳转运维
</a-button>
<a-button
v-if=
"!versionFlag"
:disabled=
"debugFlag"
type=
"primary"
>
运行
</a-button>
<a-button
v-if=
"!versionFlag"
style=
"border-color:transparent"
>
<Icon
icon=
"ant-design:field-time-outlined"
style=
"color: blue"
size=
"24"
/>
<p>
跳转运维
</p></a-button>
<a-button
v-if=
"!versionFlag"
:disabled=
"debugFlag"
style=
"border-color:transparent"
>
<Icon
icon=
"ant-design:caret-right-outlined"
style=
"color: blue"
size=
"24"
/>
<p>
运行
</p>
</a-button>
<a-button
v-if=
"!versionFlag"
:disabled=
"debugFlag"
type=
"primary"
>
运行当前及下游
</a-button>
<a-button
v-if=
"!versionFlag && !debugFlag"
type=
"primary"
@
click=
"handleDebug"
>
调试
</a-button>
<a-button
v-if=
"!versionFlag && debugFlag"
type=
"primary"
>
调试全部任务
</a-button>
...
...
@@ -208,6 +213,7 @@
import
TaskFlowConfig
from
'./taskFlowConfig.vue'
;
import
ModelTree
from
'./ModelTree.vue'
;
import
{
logicalData
}
from
'@/views/dataWarehousePlanning/logicalModel/modelData'
;
import
Icon
from
"@/components/Icon/Icon.vue"
;
const
[
taskModel
,
{
openModal
:
openTaskModel
}]
=
useModal
();
const
filterStore
=
useFilterStore
();
...
...
src/views/taskScheduling/taskFlowDesign/taskConfigModel.vue
View file @
d61e5008
...
...
@@ -11,11 +11,20 @@
<Select
v-model:value=
"model[field]"
:options=
"cycleOptions"
/>
<a-button
type=
"link"
style=
"padding: 0"
v-if=
"model.group === 'default group'"
v-if=
"model[field] === '事件触发器'"
@
click=
"handleCycle"
>
批量调整直接下游配置
</a-button
>
>
批量调整直接下游配置
</a-button>
<!-- 当选中 '事件触发器' 时,显示事件定义和两个按钮 -->
<div
v-if=
"model[field] === '事件触发器'"
>
<div
style=
"display: flex;margin-left: -62px;margin-top: 15px"
>
<div
style=
"margin-right: 20px"
>
事件定义
</div>
<a-button
@
click=
"handleSetConfig"
style=
"color: red;border-color: red"
>
定义事件
</a-button>
<a-button
@
click=
"viewLogs"
style=
"margin-left: 30px"
>
查看日志
</a-button>
</div>
<a-button
type=
"link"
style=
"color: red"
>
<Icon
icon=
"ant-design:exclamation-circle-outlined"
/>
请定义触发事件详情
</a-button>
</div>
</
template
>
<
template
#
cron=
"{ field, model }"
>
<Input
v-model:value=
"model[field]"
/>
...
...
@@ -33,45 +42,58 @@
</
template
>
</BasicForm>
<EditDownStreamModel
@
register=
"editModal"
/>
<DefineEvent
@
register=
"defineEvent"
/>
</BasicModal>
</template>
<
script
lang=
"ts"
setup
>
import
{
useTable
,
TableAction
}
from
'@/components/Table'
;
import
{
ref
,
computed
,
unref
,
reactive
}
from
'vue'
;
import
{
CloseOutlined
}
from
'@ant-design/icons-vue'
;
import
Icon
from
'@/components/Icon/Icon.vue'
;
import
{
Input
,
CheckboxGroup
,
Select
,
InputNumber
}
from
'ant-design-vue'
;
import
{
BasicModal
,
useModal
,
useModalInner
}
from
'@/components/Modal'
;
import
{
BasicForm
,
useForm
}
from
'@/components/Form'
;
import
BasicTable
from
'@/components/Table/src/BasicTable.vue'
;
import
{
connectionData
}
from
'@/views/dataWarehousePlanning/logicalModel/modelDetail/modelData'
;
import
{
connectionFormSchema
,
connectionTable
,
}
from
'@/views/dataWarehousePlanning/logicalModel/modelDetail/model.data'
;
import
{
taskOverallConfig
,
upstreamTaskColumn
,
}
from
'@/views/taskScheduling/taskFlowDesign/design.data'
;
import
{
useMessage
}
from
'@/hooks/web/useMessage'
;
import
EditDownStreamModel
from
'./editDownStreamModel.vue'
;
import
DefineEvent
from
"./defineEvent.vue"
;
const
getTitle
=
'任务流全局配置'
;
const
[
editModal
,
{
openModal
:
openEditModel
}]
=
useModal
();
const
[
defineEvent
,
{
openModal
:
openDefineEvent
}]
=
useModal
();
function
handleCycle
()
{
openEditModel
(
true
,
{
isUpdate
:
false
,
});
}
/**定义事件*/
function
handleSetConfig
()
{
openDefineEvent
(
true
,
{
isUpdate
:
false
,
});
}
/**查看日志*/
function
viewLogs
()
{
}
//初始化弹框
const
[
registerModal
,
{
setModalProps
,
closeModal
}]
=
useModalInner
(
async
(
data
)
=>
{
setModalProps
({
confirmLoading
:
false
});
});
const
cycleOptions
=
[
{
label
:
'每天一次'
,
value
:
'每天一次'
,
},
{
label
:
'Cron表达式'
,
value
:
'Cron表达式'
,
},
{
label
:
'事件触发器'
,
value
:
'事件触发器'
,
},
{
label
:
'无周期'
,
value
:
'无周期'
,
},
];
const
overTimeOptions
=
[
{
...
...
vite.config.ts.timestamp-1733101094674-9a3cc74e73b39.mjs
0 → 100644
View file @
d61e5008
// vite.config.ts
import
{
defineApplicationConfig
}
from
"file:///D:/workapace/vue_workspace/bigdatasystem1/internal/vite-config/dist/index.mjs"
;
var
vite_config_default
=
defineApplicationConfig
({
overrides
:
{
optimizeDeps
:
{
include
:
[
"echarts/core"
,
"echarts/charts"
,
"echarts/components"
,
"echarts/renderers"
,
"qrcode"
,
"@iconify/iconify"
,
"ant-design-vue/es/locale/zh_CN"
,
"ant-design-vue/es/locale/en_US"
]
},
server
:
{
proxy
:
{
"/basic-api"
:
{
// target: 'http://localhost:3000',
target
:
"http://106.3.97.198:20062/"
,
// target: `http://192.168.0.9:8082/`,
changeOrigin
:
true
,
ws
:
true
,
rewrite
:
(
path
)
=>
path
.
replace
(
new
RegExp
(
`^/basic-api`
),
""
)
// only https
// secure: false
},
"/upload"
:
{
target
:
"http://localhost:3300/upload"
,
changeOrigin
:
true
,
ws
:
true
,
rewrite
:
(
path
)
=>
path
.
replace
(
new
RegExp
(
`^/upload`
),
""
)
}
},
open
:
true
,
// 项目启动后,自动打开
warmup
:
{
clientFiles
:
[
"./index.html"
,
"./src/{views,components}/*"
]
}
}
}
});
export
{
vite_config_default
as
default
};
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsidml0ZS5jb25maWcudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImNvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lID0gXCJEOlxcXFx3b3JrYXBhY2VcXFxcdnVlX3dvcmtzcGFjZVxcXFxiaWdkYXRhc3lzdGVtMVwiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9maWxlbmFtZSA9IFwiRDpcXFxcd29ya2FwYWNlXFxcXHZ1ZV93b3Jrc3BhY2VcXFxcYmlnZGF0YXN5c3RlbTFcXFxcdml0ZS5jb25maWcudHNcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfaW1wb3J0X21ldGFfdXJsID0gXCJmaWxlOi8vL0Q6L3dvcmthcGFjZS92dWVfd29ya3NwYWNlL2JpZ2RhdGFzeXN0ZW0xL3ZpdGUuY29uZmlnLnRzXCI7aW1wb3J0IHsgZGVmaW5lQXBwbGljYXRpb25Db25maWcgfSBmcm9tICdAdmJlbi92aXRlLWNvbmZpZyc7XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmluZUFwcGxpY2F0aW9uQ29uZmlnKHtcbiAgb3ZlcnJpZGVzOiB7XG4gICAgb3B0aW1pemVEZXBzOiB7XG4gICAgICBpbmNsdWRlOiBbXG4gICAgICAgICdlY2hhcnRzL2NvcmUnLFxuICAgICAgICAnZWNoYXJ0cy9jaGFydHMnLFxuICAgICAgICAnZWNoYXJ0cy9jb21wb25lbnRzJyxcbiAgICAgICAgJ2VjaGFydHMvcmVuZGVyZXJzJyxcbiAgICAgICAgJ3FyY29kZScsXG4gICAgICAgICdAaWNvbmlmeS9pY29uaWZ5JyxcbiAgICAgICAgJ2FudC1kZXNpZ24tdnVlL2VzL2xvY2FsZS96aF9DTicsXG4gICAgICAgICdhbnQtZGVzaWduLXZ1ZS9lcy9sb2NhbGUvZW5fVVMnLFxuICAgICAgXSxcbiAgICB9LFxuICAgIHNlcnZlcjoge1xuICAgICAgcHJveHk6IHtcbiAgICAgICAgJy9iYXNpYy1hcGknOiB7XG4gICAgICAgICAgLy8gdGFyZ2V0OiAnaHR0cDovL2xvY2FsaG9zdDozMDAwJyxcbiAgICAgICAgICB0YXJnZXQ6ICdodHRwOi8vMTA2LjMuOTcuMTk4OjIwMDYyLycsXG4gICAgICAgICAgLy8gdGFyZ2V0OiBgaHR0cDovLzE5Mi4xNjguMC45OjgwODIvYCxcbiAgICAgICAgICBjaGFuZ2VPcmlnaW46IHRydWUsXG4gICAgICAgICAgd3M6IHRydWUsXG4gICAgICAgICAgcmV3cml0ZTogKHBhdGgpID0+IHBhdGgucmVwbGFjZShuZXcgUmVnRXhwKGBeL2Jhc2ljLWFwaWApLCAnJyksXG4gICAgICAgICAgLy8gb25seSBodHRwc1xuICAgICAgICAgIC8vIHNlY3VyZTogZmFsc2VcbiAgICAgICAgfSxcbiAgICAgICAgJy91cGxvYWQnOiB7XG4gICAgICAgICAgdGFyZ2V0OiAnaHR0cDovL2xvY2FsaG9zdDozMzAwL3VwbG9hZCcsXG4gICAgICAgICAgY2hhbmdlT3JpZ2luOiB0cnVlLFxuICAgICAgICAgIHdzOiB0cnVlLFxuICAgICAgICAgIHJld3JpdGU6IChwYXRoKSA9PiBwYXRoLnJlcGxhY2UobmV3IFJlZ0V4cChgXi91cGxvYWRgKSwgJycpLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIG9wZW46IHRydWUsIC8vIFx1OTg3OVx1NzZFRVx1NTQyRlx1NTJBOFx1NTQwRVx1RkYwQ1x1ODFFQVx1NTJBOFx1NjI1M1x1NUYwMFxuICAgICAgd2FybXVwOiB7XG4gICAgICAgIGNsaWVudEZpbGVzOiBbJy4vaW5kZXguaHRtbCcsICcuL3NyYy97dmlld3MsY29tcG9uZW50c30vKiddLFxuICAgICAgfSxcbiAgICB9LFxuICB9LFxufSk7XG4iXSwKICAibWFwcGluZ3MiOiAiO0FBQXFULFNBQVMsK0JBQStCO0FBRTdWLElBQU8sc0JBQVEsd0JBQXdCO0FBQUEsRUFDckMsV0FBVztBQUFBLElBQ1QsY0FBYztBQUFBLE1BQ1osU0FBUztBQUFBLFFBQ1A7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFBQSxJQUNBLFFBQVE7QUFBQSxNQUNOLE9BQU87QUFBQSxRQUNMLGNBQWM7QUFBQTtBQUFBLFVBRVosUUFBUTtBQUFBO0FBQUEsVUFFUixjQUFjO0FBQUEsVUFDZCxJQUFJO0FBQUEsVUFDSixTQUFTLENBQUMsU0FBUyxLQUFLLFFBQVEsSUFBSSxPQUFPLGFBQWEsR0FBRyxFQUFFO0FBQUE7QUFBQTtBQUFBLFFBRy9EO0FBQUEsUUFDQSxXQUFXO0FBQUEsVUFDVCxRQUFRO0FBQUEsVUFDUixjQUFjO0FBQUEsVUFDZCxJQUFJO0FBQUEsVUFDSixTQUFTLENBQUMsU0FBUyxLQUFLLFFBQVEsSUFBSSxPQUFPLFVBQVUsR0FBRyxFQUFFO0FBQUEsUUFDNUQ7QUFBQSxNQUNGO0FBQUEsTUFDQSxNQUFNO0FBQUE7QUFBQSxNQUNOLFFBQVE7QUFBQSxRQUNOLGFBQWEsQ0FBQyxnQkFBZ0IsNEJBQTRCO0FBQUEsTUFDNUQ7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUNGLENBQUM7IiwKICAibmFtZXMiOiBbXQp9Cg==
vite.config.ts.timestamp-1733109704960-8029bd881e077.mjs
0 → 100644
View file @
d61e5008
// vite.config.ts
import
{
defineApplicationConfig
}
from
"file:///D:/workapace/vue_workspace/bigdatasystem1/internal/vite-config/dist/index.mjs"
;
var
vite_config_default
=
defineApplicationConfig
({
overrides
:
{
optimizeDeps
:
{
include
:
[
"echarts/core"
,
"echarts/charts"
,
"echarts/components"
,
"echarts/renderers"
,
"qrcode"
,
"@iconify/iconify"
,
"ant-design-vue/es/locale/zh_CN"
,
"ant-design-vue/es/locale/en_US"
]
},
server
:
{
proxy
:
{
"/basic-api"
:
{
// target: 'http://localhost:3000',
target
:
"http://106.3.97.198:20062/"
,
// target: `http://192.168.0.9:8082/`,
changeOrigin
:
true
,
ws
:
true
,
rewrite
:
(
path
)
=>
path
.
replace
(
new
RegExp
(
`^/basic-api`
),
""
)
// only https
// secure: false
},
"/upload"
:
{
target
:
"http://localhost:3300/upload"
,
changeOrigin
:
true
,
ws
:
true
,
rewrite
:
(
path
)
=>
path
.
replace
(
new
RegExp
(
`^/upload`
),
""
)
}
},
open
:
true
,
// 项目启动后,自动打开
warmup
:
{
clientFiles
:
[
"./index.html"
,
"./src/{views,components}/*"
]
}
}
}
});
export
{
vite_config_default
as
default
};
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsidml0ZS5jb25maWcudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImNvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lID0gXCJEOlxcXFx3b3JrYXBhY2VcXFxcdnVlX3dvcmtzcGFjZVxcXFxiaWdkYXRhc3lzdGVtMVwiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9maWxlbmFtZSA9IFwiRDpcXFxcd29ya2FwYWNlXFxcXHZ1ZV93b3Jrc3BhY2VcXFxcYmlnZGF0YXN5c3RlbTFcXFxcdml0ZS5jb25maWcudHNcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfaW1wb3J0X21ldGFfdXJsID0gXCJmaWxlOi8vL0Q6L3dvcmthcGFjZS92dWVfd29ya3NwYWNlL2JpZ2RhdGFzeXN0ZW0xL3ZpdGUuY29uZmlnLnRzXCI7aW1wb3J0IHsgZGVmaW5lQXBwbGljYXRpb25Db25maWcgfSBmcm9tICdAdmJlbi92aXRlLWNvbmZpZyc7XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmluZUFwcGxpY2F0aW9uQ29uZmlnKHtcbiAgb3ZlcnJpZGVzOiB7XG4gICAgb3B0aW1pemVEZXBzOiB7XG4gICAgICBpbmNsdWRlOiBbXG4gICAgICAgICdlY2hhcnRzL2NvcmUnLFxuICAgICAgICAnZWNoYXJ0cy9jaGFydHMnLFxuICAgICAgICAnZWNoYXJ0cy9jb21wb25lbnRzJyxcbiAgICAgICAgJ2VjaGFydHMvcmVuZGVyZXJzJyxcbiAgICAgICAgJ3FyY29kZScsXG4gICAgICAgICdAaWNvbmlmeS9pY29uaWZ5JyxcbiAgICAgICAgJ2FudC1kZXNpZ24tdnVlL2VzL2xvY2FsZS96aF9DTicsXG4gICAgICAgICdhbnQtZGVzaWduLXZ1ZS9lcy9sb2NhbGUvZW5fVVMnLFxuICAgICAgXSxcbiAgICB9LFxuICAgIHNlcnZlcjoge1xuICAgICAgcHJveHk6IHtcbiAgICAgICAgJy9iYXNpYy1hcGknOiB7XG4gICAgICAgICAgLy8gdGFyZ2V0OiAnaHR0cDovL2xvY2FsaG9zdDozMDAwJyxcbiAgICAgICAgICB0YXJnZXQ6ICdodHRwOi8vMTA2LjMuOTcuMTk4OjIwMDYyLycsXG4gICAgICAgICAgLy8gdGFyZ2V0OiBgaHR0cDovLzE5Mi4xNjguMC45OjgwODIvYCxcbiAgICAgICAgICBjaGFuZ2VPcmlnaW46IHRydWUsXG4gICAgICAgICAgd3M6IHRydWUsXG4gICAgICAgICAgcmV3cml0ZTogKHBhdGgpID0+IHBhdGgucmVwbGFjZShuZXcgUmVnRXhwKGBeL2Jhc2ljLWFwaWApLCAnJyksXG4gICAgICAgICAgLy8gb25seSBodHRwc1xuICAgICAgICAgIC8vIHNlY3VyZTogZmFsc2VcbiAgICAgICAgfSxcbiAgICAgICAgJy91cGxvYWQnOiB7XG4gICAgICAgICAgdGFyZ2V0OiAnaHR0cDovL2xvY2FsaG9zdDozMzAwL3VwbG9hZCcsXG4gICAgICAgICAgY2hhbmdlT3JpZ2luOiB0cnVlLFxuICAgICAgICAgIHdzOiB0cnVlLFxuICAgICAgICAgIHJld3JpdGU6IChwYXRoKSA9PiBwYXRoLnJlcGxhY2UobmV3IFJlZ0V4cChgXi91cGxvYWRgKSwgJycpLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIG9wZW46IHRydWUsIC8vIFx1OTg3OVx1NzZFRVx1NTQyRlx1NTJBOFx1NTQwRVx1RkYwQ1x1ODFFQVx1NTJBOFx1NjI1M1x1NUYwMFxuICAgICAgd2FybXVwOiB7XG4gICAgICAgIGNsaWVudEZpbGVzOiBbJy4vaW5kZXguaHRtbCcsICcuL3NyYy97dmlld3MsY29tcG9uZW50c30vKiddLFxuICAgICAgfSxcbiAgICB9LFxuICB9LFxufSk7XG4iXSwKICAibWFwcGluZ3MiOiAiO0FBQXFULFNBQVMsK0JBQStCO0FBRTdWLElBQU8sc0JBQVEsd0JBQXdCO0FBQUEsRUFDckMsV0FBVztBQUFBLElBQ1QsY0FBYztBQUFBLE1BQ1osU0FBUztBQUFBLFFBQ1A7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFBQSxJQUNBLFFBQVE7QUFBQSxNQUNOLE9BQU87QUFBQSxRQUNMLGNBQWM7QUFBQTtBQUFBLFVBRVosUUFBUTtBQUFBO0FBQUEsVUFFUixjQUFjO0FBQUEsVUFDZCxJQUFJO0FBQUEsVUFDSixTQUFTLENBQUMsU0FBUyxLQUFLLFFBQVEsSUFBSSxPQUFPLGFBQWEsR0FBRyxFQUFFO0FBQUE7QUFBQTtBQUFBLFFBRy9EO0FBQUEsUUFDQSxXQUFXO0FBQUEsVUFDVCxRQUFRO0FBQUEsVUFDUixjQUFjO0FBQUEsVUFDZCxJQUFJO0FBQUEsVUFDSixTQUFTLENBQUMsU0FBUyxLQUFLLFFBQVEsSUFBSSxPQUFPLFVBQVUsR0FBRyxFQUFFO0FBQUEsUUFDNUQ7QUFBQSxNQUNGO0FBQUEsTUFDQSxNQUFNO0FBQUE7QUFBQSxNQUNOLFFBQVE7QUFBQSxRQUNOLGFBQWEsQ0FBQyxnQkFBZ0IsNEJBQTRCO0FBQUEsTUFDNUQ7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUNGLENBQUM7IiwKICAibmFtZXMiOiBbXQp9Cg==
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment