Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
N
nse-ui
概览
Overview
Details
Activity
Cycle Analytics
版本库
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
问题
0
Issues
0
列表
Board
标记
里程碑
合并请求
0
Merge Requests
0
CI / CD
CI / CD
流水线
作业
日程表
图表
维基
Wiki
代码片段
Snippets
成员
Members
Collapse sidebar
Close sidebar
活动
图像
聊天
创建新问题
作业
提交
Issue Boards
Open sidebar
吴超
nse-ui
Commits
8f28908e
Commit
8f28908e
authored
Sep 01, 2025
by
ningjihai
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
项目管理新增第二步bug
(发现梳理新增组件变成页面组件)
parent
10ff4b11
隐藏空白字符变更
内嵌
并排
正在显示
6 个修改的文件
包含
541 行增加
和
250 行删除
+541
-250
src/api/discover/index.js
+199
-0
src/views/discover/Discover/QueryForm.vue
+3
-3
src/views/discover/Discover/addEditDiscovery.vue
+267
-215
src/views/discover/Discover/index.vue
+2
-0
src/views/discover/Discover/list.vue
+69
-32
src/views/project/Project/list.vue
+1
-0
没有找到文件。
src/api/discover/index.js
0 → 100644
View file @
8f28908e
import
request
from
'@/utils/request'
/**
* 发现梳理列表
* @param {*} query
* @returns
*/
export
function
queryDiscoverList
(
data
)
{
return
request
({
url
:
'/core/tdatadiscovery/query'
,
method
:
'post'
,
data
:
data
})
}
export
function
querybyprojectid
(
data
)
{
return
request
({
url
:
'/core/searchregex/querybyprojectid'
,
method
:
'post'
,
data
:
data
})
}
export
function
querydatasystem
(
data
)
{
return
request
({
url
:
'/core/searchsensitivedata/querydatasystem'
,
method
:
'post'
,
data
:
data
})
}
// export function checkProjectNum(data) {
// return request({
// url: '/core/tdataproject/checkProjectNum',
// method: 'post',
// data: data
// })
// }
// export function getdatascopeprojectlist(data) {
// return request({
// url: '/core/datascopeproject/getdatascopeprojectlist',
// method: 'post',
// data: data
// })
// }
// export function checkDatasystemName(data) {
// return request({
// url: '/core/tdataproject/checkDatasystemName',
// method: 'post',
// data: data
// })
// }
// export function checkDatasystem(data) {
// return request({
// url: '/core/tdataproject/checkDatasystem',
// method: 'post',
// data: data
// })
// }
// export function queryByEditSort(data) {
// return request({
// url: '/core/tdatasource/queryByEditSort',
// method: 'post',
// data: data
// })
// }
// export function selectProDataSource(data) {
// return request({
// url: '/core/tdatasource/selectProDataSource',
// method: 'post',
// data: data
// })
// }
// export function queryShemas(data) {
// return request({
// url: '/core/searchsensitivedata/queryShemas',
// method: 'post',
// data: data
// })
// }
// export function getAllDataAreaAndRule(data) {
// return request({
// url: '/core/tdataarea/getAllDataAreaAndRule',
// method: 'post',
// data: data
// })
// }
// export function addDataProject(data) {
// return request({
// url: '/core/tdataproject/addDataProject',
// method: 'post',
// data: data
// })
// }
// export function deleteDataProject(data) {
// return request({
// url: '/core/tdataproject/deleteDataProject',
// method: 'post',
// data: data
// })
// }
// export function getDataProjectDetail(data) {
// return request({
// url: '/core/tdataproject/getDataProjectDetail',
// method: 'post',
// data: data
// })
// }
// export function updateDataProject(data) {
// return request({
// url: '/core/tdataproject/updateDataProject',
// method: 'post',
// data: data
// })
// }
// export function showProxyInfo(data) {
// return request({
// url: '/core/encryptionconfig/showProxyInfo',
// method: 'post',
// data: data
// })
// }
// export function saveProxyJarInfo(data) {
// return request({
// url: '/core/encryptionconfig/saveProxyJarInfo',
// method: 'post',
// data: data
// })
// }
// export function getProjectTree(data) {
// return request({
// url: '/core/encryptionconfig/getProjectTree',
// method: 'post',
// data: data
// })
// }
// export function getEncryptExcel(data) {
// return request({
// url: '/core/encryptionconfig/getEncryptExcel',
// method: 'post',
// data: data,
// responseType: 'blob' //
// })
// }
// export function checkEncryptExcel(data) {
// return request({
// url: '/core/encryptionconfig/checkEncryptExcel',
// method: 'post',
// data: data
// })
// }
// export function exportToExcel(data) {
// return request({
// url: '/core/encryptionconfig/exportToExcel',
// method: 'post',
// data: data,
// responseType: 'blob' //
// })
// }
// export function tdatasourceQuery(data) {
// return request({
// url: '/core/tdatasource/query',
// method: 'post',
// data: data
// })
// }
// export function queryShemasmodifysubsettask(data) {
// return request({
// url: '/core/modifysubsettask/queryShemas',
// method: 'post',
// data: data
// })
// }
// export function rowsensitivelevelType(type,data) {
// return request({
// url: '/core/rowsensitivelevel/' + type,
// method: 'post',
// data: data
// })
// }
src/views/discover/Discover/QueryForm.vue
View file @
8f28908e
...
@@ -34,7 +34,7 @@ function onSearch() {
...
@@ -34,7 +34,7 @@ function onSearch() {
// 重置
// 重置
function
onReset
(
formRef
:
FormInstance
)
{
function
onReset
(
formRef
:
FormInstance
)
{
queryForm
.
value
.
t
itl
e
=
''
queryForm
.
value
.
t
asknam
e
=
''
emit
(
'reset'
,
formRef
)
emit
(
'reset'
,
formRef
)
}
}
...
@@ -48,9 +48,9 @@ function onReset(formRef: FormInstance) {
...
@@ -48,9 +48,9 @@ function onReset(formRef: FormInstance) {
:model=
"queryForm"
:model=
"queryForm"
@
search=
"onSearch"
@
search=
"onSearch"
@
reset=
"onReset"
>
@
reset=
"onReset"
>
<el-form-item
label=
"发现任务名称"
prop=
"t
itl
e"
>
<el-form-item
label=
"发现任务名称"
prop=
"t
asknam
e"
>
<el-input
<el-input
v-model=
"queryForm.t
itl
e"
v-model=
"queryForm.t
asknam
e"
placeholder=
"请输入发现任务名称"
placeholder=
"请输入发现任务名称"
clearable
clearable
/>
/>
...
...
src/views/discover/Discover/
modules/AddDiscoveryDialog
.vue
→
src/views/discover/Discover/
addEditDiscovery
.vue
View file @
8f28908e
<
template
>
<
template
>
<el-dialog
<div
class=
"app-container scroller"
>
v-model=
"dialogVisible"
<PageTitle
:back=
"true"
@
back=
"backListPage"
>
:title=
"dialogTitle"
<template
#
title
>
width=
"800px"
新增发现任务
:before-close=
"handleClose"
</
template
>
>
<!-- 步骤导航 - 按照图片样式重新设计 -->
</PageTitle>
<div
class=
"steps-navigation"
>
<div
class=
"steps-container"
>
<div
class=
"app-container__body"
>
<div
class=
"step-item"
:class=
"
{ 'step-active': currentStep === 1, 'step-completed': currentStep > 1 }">
<div
class=
"step-number"
>
1
</div>
<div
class=
"steps-navigation"
>
<div
class=
"step-title"
>
新建任务
</div>
<div
class=
"steps-container"
>
<div
class=
"step-status"
>
{{
currentStep
===
1
?
'进行中'
:
currentStep
>
1
?
'已完成'
:
'待进行'
}}
</div>
<div
class=
"step-item"
:class=
"{ 'step-active': currentStep === 1, 'step-completed': currentStep > 1 }"
>
</div>
<div
class=
"step-number"
>
1
</div>
<div
class=
"step-connector"
></div>
<div
class=
"step-title"
>
新建任务
</div>
<div
class=
"step-item"
:class=
"
{ 'step-active': currentStep === 2, 'step-completed': currentStep > 2 }">
<div
class=
"step-status"
>
{{ currentStep === 1 ? '进行中' : currentStep > 1 ? '已完成' : '待进行' }}
</div>
<div
class=
"step-number"
>
2
</div>
</div>
<div
class=
"step-title"
>
选择数据源
</div>
<div
class=
"step-connector"
></div>
<div
class=
"step-status"
>
{{
currentStep
===
2
?
'进行中'
:
currentStep
>
2
?
'已完成'
:
'待进行'
}}
</div>
<div
class=
"step-item"
:class=
"{ 'step-active': currentStep === 2, 'step-completed': currentStep > 2 }"
>
</div>
<div
class=
"step-number"
>
2
</div>
<div
class=
"step-connector"
></div>
<div
class=
"step-title"
>
选择数据源
</div>
<div
class=
"step-item"
:class=
"
{ 'step-active': currentStep === 3, 'step-completed': currentStep === 3 }">
<div
class=
"step-status"
>
{{ currentStep === 2 ? '进行中' : currentStep > 2 ? '已完成' : '待进行' }}
</div>
<div
class=
"step-number"
>
3
</div>
</div>
<div
class=
"step-title"
>
配置规则
</div>
<div
class=
"step-connector"
></div>
<div
class=
"step-status"
>
{{
currentStep
===
3
?
'进行中'
:
'待进行'
}}
</div>
<div
class=
"step-item"
:class=
"{ 'step-active': currentStep === 3, 'step-completed': currentStep === 3 }"
>
</div>
<div
class=
"step-number"
>
3
</div>
</div>
<div
class=
"step-title"
>
配置规则
</div>
</div>
<div
class=
"step-status"
>
{{ currentStep === 3 ? '进行中' : '待进行' }}
</div>
</div>
<!-- 步骤1:新建任务 -->
</div>
<div
v-if=
"currentStep === 1"
class=
"step-content"
>
<el-form
:model=
"formData"
:rules=
"rules"
ref=
"step1Form"
label-width=
"120px"
>
<el-form-item
label=
"发现任务名称"
prop=
"tname"
required
>
<el-input
v-model=
"formData.tname"
placeholder=
"请输入发现任务名称"
clearable
maxlength=
"50"
/>
</el-form-item>
<el-form-item
label=
"备注"
>
<el-input
v-model=
"formData.remark"
type=
"textarea"
:rows=
"4"
placeholder=
"请输入备注信息"
maxlength=
"200"
show-word-limit
/>
</el-form-item>
</el-form>
</div>
<!-- 步骤2:选择数据源 -->
<div
v-else-if=
"currentStep === 2"
class=
"step-content"
>
<div
class=
"data-source-section"
>
<div
class=
"data-source-header"
>
<span
class=
"label"
>
数据源:
</span>
<el-select
v-model=
"selectedDataSource"
placeholder=
"请选择数据源"
>
<el-option
v-for=
"source in dataSources"
:key=
"source.value"
:label=
"source.label"
:value=
"source.value"
/>
</el-select>
</div>
</div>
<div
class=
"selection-content"
>
<!-- 步骤1:新建任务 -->
<!-- 左侧SCHEMA列表 -->
<div
v-if=
"currentStep === 1"
class=
"step-content"
>
<div
class=
"schema-list"
>
<el-form
:model=
"formData"
:rules=
"rules"
ref=
"step1Form"
label-width=
"120px"
>
<div
class=
"schema-header"
>
<el-form-item
label=
"发现任务名称"
prop=
"taskname"
required
>
<h4>
SCHEMA列表
</h4>
<el-input
<el-input
v-model=
"schemaSearch"
v-model=
"formData.taskname"
placeholder=
"搜索SCHEMA"
placeholder=
"请输入发现任务名称"
size=
"small"
prefix-icon=
"Search"
clearable
clearable
class=
"search-input"
maxlength=
"50"
/>
</el-form-item>
<el-form-item
label=
"备注"
>
<el-input
v-model=
"formData.remark"
type=
"textarea"
:rows=
"4"
placeholder=
"请输入备注信息"
maxlength=
"200"
show-word-limit
/>
/>
</el-form-item>
</el-form>
</div>
<!-- 步骤2:选择数据源 -->
<div
v-else-if=
"currentStep === 2"
class=
"step-content"
>
<div
class=
"data-source-section"
>
<div
class=
"data-source-header"
>
<span
class=
"label"
>
数据源:
</span>
<el-select
v-model=
"selectedDataSource"
placeholder=
"请选择数据源"
>
<el-option
v-for=
"source in dataSources"
:key=
"source.value"
:label=
"source.label"
:value=
"source.value"
/>
</el-select>
</div>
</div>
<div
class=
"list-container"
>
<div
<div
class=
"selection-content"
>
v-for=
"schema in filteredSchemaList"
<!-- 左侧SCHEMA列表 -->
:key=
"schema.id"
<div
class=
"schema-list"
>
class=
"schema-item"
<div
class=
"schema-header"
>
:class=
"
{ 'schema-selected': selectedSchema === schema.id }"
<h4>
SCHEMA列表
</h4>
@click="selectSchema(schema)"
<el-input
>
v-model=
"schemaSearch"
<span
class=
"schema-name"
>
{{
schema
.
name
}}
</span>
placeholder=
"搜索SCHEMA"
size=
"small"
prefix-icon=
"Search"
clearable
class=
"search-input"
/>
</div>
<div
class=
"list-container"
>
<div
v-for=
"schema in filteredSchemaList"
:key=
"schema.id"
class=
"schema-item"
:class=
"{ 'schema-selected': selectedSchema === schema.id }"
@
click=
"selectSchema(schema)"
>
<span
class=
"schema-name"
>
{{ schema.name }}
</span>
</div>
</div>
</div>
<el-divider
direction=
"vertical"
/>
<!-- 右侧表列表 -->
<div
class=
"table-list"
>
<div
class=
"table-header"
>
<div
class=
"table-header-top"
>
<h4>
表列表
</h4>
<span
class=
"selected-count"
>
{{ selectedTables.length }}/{{ filteredTableList.length }}
</span>
</div>
<div
class=
"table-header-bottom"
>
<el-checkbox
v-model=
"selectAll"
@
change=
"handleSelectAll"
class=
"select-all-checkbox"
>
全选
</el-checkbox>
<el-input
v-model=
"tableSearch"
placeholder=
"搜索表"
size=
"small"
prefix-icon=
"Search"
clearable
class=
"search-input"
/>
</div>
</div>
<div
class=
"list-container"
>
<el-checkbox-group
v-model=
"selectedTables"
>
<div
v-for=
"table in filteredTableList"
:key=
"table.id"
class=
"table-item"
>
<el-checkbox
:label=
"table.id"
>
<span
class=
"table-name"
>
{{ table.name }}
</span>
</el-checkbox>
</div>
</el-checkbox-group>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<el-divider
direction=
"vertical"
/>
<!-- 步骤3:配置规则 -->
<div
v-else
class=
"step-content"
>
<el-form
:model=
"ruleConfig"
:rules=
"ruleRules"
ref=
"step3Form"
label-width=
"120px"
>
<el-form-item
label=
"采样方式"
prop=
"samplingMethod"
required
>
<el-radio-group
v-model=
"ruleConfig.samplingMethod"
>
<el-radio
label=
"sequential"
>
顺序
</el-radio>
<el-radio
label=
"random"
>
随机
</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item
label=
"最大采样数"
prop=
"maxSamples"
required
>
<el-input-number
v-model=
"ruleConfig.maxSamples"
:min=
"1"
:max=
"10000"
controls-position=
"right"
/>
</el-form-item>
<!-- 右侧表列表 -->
<el-form-item
label=
"匹配率"
prop=
"matchingRate"
required
>
<div
class=
"table-list"
>
<div
class=
"matching-rate-input"
>
<div
class=
"table-header"
>
<div
class=
"table-header-top"
>
<h4>
表列表
</h4>
<span
class=
"selected-count"
>
{{
selectedTables
.
length
}}
/
{{
filteredTableList
.
length
}}
</span>
</div>
<div
class=
"table-header-bottom"
>
<el-checkbox
v-model=
"selectAll"
@
change=
"handleSelectAll"
class=
"select-all-checkbox"
>
全选
</el-checkbox>
<el-input
<el-input
v-model=
"tableSearch"
v-model=
"ruleConfig.matchingRate"
placeholder=
"搜索表"
placeholder=
"50"
size=
"small"
style=
"width: 100px"
prefix-icon=
"Search"
clearable
class=
"search-input"
/>
/>
<span
class=
"percentage-suffix"
>
百分比%
</span>
</div>
</div>
</div>
</el-form-item>
<div
class=
"list-container"
>
<el-checkbox-group
v-model=
"selectedTables"
>
<el-form-item
label=
"敏感类型"
required
>
<div
<div
class=
"sensitive-types"
>
v-for=
"table in filteredTableList"
<el-tag
:key=
"table.id"
v-for=
"type in sensitiveTypes"
class=
"table-item"
:key=
"type"
closable
@
close=
"removeSensitiveType(type)"
class=
"sensitive-tag"
>
>
<el-checkbox
:label=
"table.id"
>
{{ type }}
<span
class=
"table-name"
>
{{
table
.
name
}}
</span>
</el-tag>
</el-checkbox>
<el-button
type=
"primary"
text
@
click=
"openSensitiveTypeDialog"
class=
"add-sensitive-btn"
>
</div>
+ 添加敏感类型
</el-checkbox-group>
</el-button>
</div>
</div>
</div>
</el-form-item>
</el-form>
</div>
</div>
</div>
</div>
<!-- 底部按钮 -->
<!-- <template #footer> -->
<!-- 步骤3:配置规则 -->
<div
class=
"dialog-footer"
>
<div
v-else
class=
"step-content"
>
<el-button
@
click=
"handleCancel"
>
取消
</el-button>
<el-form
:model=
"ruleConfig"
:rules=
"ruleRules"
ref=
"step3Form"
label-width=
"120px"
>
<el-form-item
label=
"采样方式"
prop=
"samplingMethod"
required
>
<el-button
<el-radio-group
v-model=
"ruleConfig.samplingMethod"
>
v-if=
"currentStep > 1"
<el-radio
label=
"sequential"
>
顺序
</el-radio>
@
click=
"handlePrevStep"
<el-radio
label=
"random"
>
随机
</el-radio>
>
</el-radio-group>
上一步
</el-form-item>
</el-button>
<el-form-item
label=
"最大采样数"
prop=
"maxSamples"
required
>
<el-button
<el-input-number
v-if=
"currentStep < 3"
v-model=
"ruleConfig.maxSamples"
type=
"primary"
:min=
"1"
@
click=
"handleNextStep"
:max=
"10000"
>
controls-position=
"right"
下一步
/>
</el-button>
</el-form-item>
<el-button
<el-form-item
label=
"匹配率"
prop=
"matchingRate"
required
>
v-if=
"currentStep === 3"
<div
class=
"matching-rate-input"
>
type=
"primary"
<el-input
@
click=
"handleConfirm"
v-model=
"ruleConfig.matchingRate"
placeholder=
"50"
style=
"width: 100px"
/>
<span
class=
"percentage-suffix"
>
百分比%
</span>
</div>
</el-form-item>
<el-form-item
label=
"敏感类型"
required
>
<div
class=
"sensitive-types"
>
<el-tag
v-for=
"type in sensitiveTypes"
:key=
"type"
closable
@
close=
"removeSensitiveType(type)"
class=
"sensitive-tag"
>
>
{{
type
}}
确定
</el-tag>
<el-button
type=
"primary"
text
@
click=
"openSensitiveTypeDialog"
class=
"add-sensitive-btn"
>
+ 添加敏感类型
</el-button>
</el-button>
</div>
</div>
</el-form-item>
<!-- </template> -->
</el-form>
</div>
<SensitiveTypeDialog
ref=
"sensitiveDialogRef"
<!-- 底部按钮 -->
v-model=
"sensitiveTypeDialogVisible"
<template
#
footer
>
:selected-types=
"selectedRuleIds"
<div
class=
"dialog-footer"
>
@
confirm=
"handleRuleConfirm"
<el-button
@
click=
"handleCancel"
>
取消
</el-button>
/>
</div>
<el-button
</div>
v-if=
"currentStep > 1"
@
click=
"handlePrevStep"
>
上一步
</el-button>
<el-button
v-if=
"currentStep
<
3
"
type=
"primary"
@
click=
"handleNextStep"
>
下一步
</el-button>
<el-button
v-if=
"currentStep === 3"
type=
"primary"
@
click=
"handleConfirm"
>
确定
</el-button>
</div>
</
template
>
<!-- 敏感类型选择弹窗 -->
<!-- <SensitiveTypeDialog
v-model="sensitiveTypeDialogVisible"
@confirm="handleSensitiveTypeConfirm"
/> -->
<SensitiveTypeDialog
ref=
"sensitiveDialogRef"
v-model=
"sensitiveTypeDialogVisible"
:selected-types=
"selectedRuleIds"
@
confirm=
"handleRuleConfirm"
/>
</el-dialog>
</template>
</template>
<
script
setup
>
<
script
setup
>
import
{
ref
,
reactive
,
computed
}
from
'vue'
import
{
ref
,
reactive
,
computed
,
onMounted
}
from
'vue'
import
{
ElMessage
}
from
'element-plus'
import
{
ElMessage
}
from
'element-plus'
import
SensitiveTypeDialog
from
'./SensitiveTypeDialog.vue'
import
useAppStore
from
'@/store/modules/app'
import
SensitiveTypeDialog
from
'./modules/SensitiveTypeDialog.vue'
const
emit
=
defineEmits
([
'confirm'
])
import
{
querybyprojectid
,
querydatasystem
}
from
'@/api/discover/index'
const
appStore
=
useAppStore
()
const
props
=
defineProps
({
listItem
:
{
type
:
Object
,
default
:
()
=>
({})
},
addEditType
:{
type
:
String
,
default
:
''
}
})
const
emit
=
defineEmits
([
'page'
,
'confirm'
])
const
backListPage
=
()
=>
{
emit
(
'page'
,
'list'
)
}
const
loginUser
=
{
tsysUser
:
{
id
:
appStore
.
userInfo
.
user
.
id
,
username
:
appStore
.
userInfo
.
user
.
username
}
}
const
dialogVisible
=
ref
(
false
)
const
dialogVisible
=
ref
(
false
)
const
currentStep
=
ref
(
1
)
const
currentStep
=
ref
(
1
)
...
@@ -251,12 +281,12 @@ const selectedRules = ref([
...
@@ -251,12 +281,12 @@ const selectedRules = ref([
const
sensitiveTypes
=
ref
([
'电子邮件'
,
'混合证件号'
])
const
sensitiveTypes
=
ref
([
'电子邮件'
,
'混合证件号'
])
// 步骤1数据
// 步骤1数据
const
formData
=
reactive
({
const
formData
=
reactive
({
t
name
:
'123
'
,
t
askname
:
'
'
,
remark
:
''
remark
:
''
})
})
const
rules
=
{
const
rules
=
{
tname
:
[
t
ask
name
:
[
{
required
:
true
,
message
:
'请填写发现任务名称'
,
trigger
:
'blur'
}
{
required
:
true
,
message
:
'请填写发现任务名称'
,
trigger
:
'blur'
}
]
]
}
}
...
@@ -337,6 +367,28 @@ const filteredTableList = computed(() => {
...
@@ -337,6 +367,28 @@ const filteredTableList = computed(() => {
)
)
})
})
onMounted
(()
=>
{
querybyprojectid
({
dataarea
:
""
,
projectid
:
sessionStorage
.
getItem
(
'projectId'
),
rulename
:
""
}).
then
(
res
=>
{
})
querydatasystem
({
discoverytype
:
1
,
projectid
:
sessionStorage
.
getItem
(
'projectId'
),
loginUser
:
loginUser
}).
then
(
res
=>
{
})
})
// 修改openDialog方法
// 修改openDialog方法
const
openDialog
=
(
row
=
null
)
=>
{
const
openDialog
=
(
row
=
null
)
=>
{
dialogVisible
.
value
=
true
dialogVisible
.
value
=
true
...
@@ -347,7 +399,7 @@ const openDialog = (row = null) => {
...
@@ -347,7 +399,7 @@ const openDialog = (row = null) => {
// 编辑模式
// 编辑模式
currentEditId
.
value
=
row
.
id
currentEditId
.
value
=
row
.
id
// 填充步骤1数据
// 填充步骤1数据
formData
.
t
name
=
row
.
t
name
formData
.
t
askname
=
row
.
task
name
formData
.
remark
=
row
.
remark
formData
.
remark
=
row
.
remark
// 填充步骤2数据(根据实际业务数据调整)
// 填充步骤2数据(根据实际业务数据调整)
...
@@ -371,7 +423,7 @@ const openDialog = (row = null) => {
...
@@ -371,7 +423,7 @@ const openDialog = (row = null) => {
}
}
const
resetForm
=
()
=>
{
const
resetForm
=
()
=>
{
formData
.
t
name
=
'123
'
formData
.
t
askname
=
'
'
formData
.
remark
=
''
formData
.
remark
=
''
selectedDataSource
.
value
=
'system1'
selectedDataSource
.
value
=
'system1'
selectedSchema
.
value
=
'ry'
selectedSchema
.
value
=
'ry'
...
@@ -392,7 +444,7 @@ const handleCancel = () => {
...
@@ -392,7 +444,7 @@ const handleCancel = () => {
const
handleNextStep
=
async
()
=>
{
const
handleNextStep
=
async
()
=>
{
if
(
currentStep
.
value
===
1
)
{
if
(
currentStep
.
value
===
1
)
{
if
(
!
formData
.
tname
.
trim
())
{
if
(
!
formData
.
t
ask
name
.
trim
())
{
ElMessage
.
error
(
'请填写发现任务名称'
)
ElMessage
.
error
(
'请填写发现任务名称'
)
return
return
}
}
...
@@ -500,7 +552,7 @@ defineExpose({
...
@@ -500,7 +552,7 @@ defineExpose({
display
:
flex
;
display
:
flex
;
flex-direction
:
column
;
flex-direction
:
column
;
align-items
:
center
;
align-items
:
center
;
min-width
:
1
00px
;
min-width
:
2
00px
;
&.step-active
{
&.step-active
{
.step-number
{
.step-number
{
...
...
src/views/discover/Discover/index.vue
View file @
8f28908e
<
script
setup
lang=
"ts"
name=
"projectManageIndex"
>
<
script
setup
lang=
"ts"
name=
"projectManageIndex"
>
import
{
ref
}
from
'vue'
import
{
ref
}
from
'vue'
import
list
from
'./list.vue'
import
list
from
'./list.vue'
import
addEditDiscovery
from
'./addEditDiscovery.vue'
import
discoverProcess
from
'./discoverProcess.vue'
import
discoverProcess
from
'./discoverProcess.vue'
import
discoverResult
from
'./discoverResult.vue'
import
discoverResult
from
'./discoverResult.vue'
import
discoverHistory
from
'./discoverHistory.vue'
import
discoverHistory
from
'./discoverHistory.vue'
const
widget
=
{
const
widget
=
{
list
:
list
,
list
:
list
,
addEditDiscovery
:
addEditDiscovery
,
discoverProcess
:
discoverProcess
,
discoverProcess
:
discoverProcess
,
discoverResult
:
discoverResult
,
discoverResult
:
discoverResult
,
discoverHistory
:
discoverHistory
discoverHistory
:
discoverHistory
...
...
src/views/discover/Discover/list.vue
View file @
8f28908e
<
script
setup
name=
"ProjectManageList"
>
<
script
setup
name=
"ProjectManageList"
>
import
{
getCurrentInstance
,
reactive
,
ref
,
toRefs
}
from
'vue'
import
{
getCurrentInstance
,
reactive
,
ref
,
toRefs
,
onMounted
}
from
'vue'
import
{
ElMessage
,
ElMessageBox
}
from
'element-plus'
import
{
ElMessage
,
ElMessageBox
}
from
'element-plus'
import
{
useRouter
}
from
'vue-router'
import
{
useRouter
}
from
'vue-router'
...
@@ -8,9 +8,16 @@ import usePermissionStore from '@/store/modules/permission'
...
@@ -8,9 +8,16 @@ import usePermissionStore from '@/store/modules/permission'
import
{
changeRoute
}
from
'@/utils/switchRoute'
import
{
changeRoute
}
from
'@/utils/switchRoute'
import
QueryForm
from
'./QueryForm.vue'
import
QueryForm
from
'./QueryForm.vue'
import
AddDiscoveryDialog
from
'./modules/AddDiscoveryDialog.vue'
// 引入新增发现任务弹窗
//
import AddDiscoveryDialog from './modules/AddDiscoveryDialog.vue' // 引入新增发现任务弹窗
import
SmartDiscoveryDialog
from
'./modules/SmartDiscoveryDialog.vue'
import
SmartDiscoveryDialog
from
'./modules/SmartDiscoveryDialog.vue'
import
{
queryDiscoverList
}
from
'@/api/discover/index'
const
appStore
=
useAppStore
()
const
appStore
=
useAppStore
()
const
permissionStore
=
usePermissionStore
()
const
permissionStore
=
usePermissionStore
()
const
router
=
useRouter
()
const
router
=
useRouter
()
...
@@ -20,6 +27,10 @@ const { proxy } = getCurrentInstance()
...
@@ -20,6 +27,10 @@ const { proxy } = getCurrentInstance()
// 新增发现任务弹窗引用
// 新增发现任务弹窗引用
const
addDiscoveryDialogRef
=
ref
()
const
addDiscoveryDialogRef
=
ref
()
onMounted
(()
=>
{
handleQuery
()
})
function
onReset
(
formQuery
)
{
function
onReset
(
formQuery
)
{
console
.
log
(
'onReset'
)
console
.
log
(
'onReset'
)
formQuery
.
resetFields
()
formQuery
.
resetFields
()
...
@@ -38,48 +49,73 @@ function handleQuery() {
...
@@ -38,48 +49,73 @@ function handleQuery() {
}
}
// 表格数据
// 表格数据
const
tableData
=
ref
([
const
tableData
=
ref
([
{
//
{
id
:
1
,
//
id: 1,
taskName
:
'22'
,
//
taskName: '22',
result
:
'0/225'
,
//
result: '0/225',
dbType
:
'MYSQL'
,
//
dbType: 'MYSQL',
operator
:
'admin'
,
//
operator: 'admin',
createTime
:
'2025-08-21 16:55:30'
,
//
createTime: '2025-08-21 16:55:30',
updateTime
:
'2025-08-21 16:55:30'
,
//
updateTime: '2025-08-21 16:55:30',
remark
:
''
,
//
remark: '',
projectid
:
"ec132fb8-04f0-4c0f-8460-c2a0ac4015d5"
,
//
projectid: "ec132fb8-04f0-4c0f-8460-c2a0ac4015d5",
resultid
:
"R_1755845361051"
,
//
resultid: "R_1755845361051",
datasystemid
:
"ff80818198986db40198c5933e5902e7"
,
//
datasystemid: "ff80818198986db40198c5933e5902e7",
},
//
},
{
//
{
id
:
2
,
//
id: 2,
taskName
:
'小王'
,
//
taskName: '小王',
result
:
'2/225'
,
//
result: '2/225',
dbType
:
'MYSQL'
,
//
dbType: 'MYSQL',
operator
:
'admin'
,
//
operator: 'admin',
createTime
:
'2025-08-21 16:55:30'
,
//
createTime: '2025-08-21 16:55:30',
updateTime
:
'2025-08-21 16:55:30'
,
//
updateTime: '2025-08-21 16:55:30',
remark
:
''
//
remark: ''
}
//
}
])
])
const
data
=
reactive
({
const
data
=
reactive
({
queryParams
:
{
queryParams
:
{
pageNum
:
1
,
pageno
:
1
,
pageSize
:
8
pagesize
:
10
,
project
:
sessionStorage
.
getItem
(
'projectName'
)
||
''
,
projectid
:
sessionStorage
.
getItem
(
'projectId'
)
||
''
}
}
})
})
// 表格数据
// 表格数据
const
{
queryParams
}
=
toRefs
(
data
)
const
{
queryParams
}
=
toRefs
(
data
)
const
total
=
ref
(
3
)
const
total
=
ref
(
0
)
const
loading
=
ref
(
false
)
const
loading
=
ref
(
false
)
// 查询列表
// 查询列表
function
getList
()
{
function
getList
()
{
loading
.
value
=
true
loading
.
value
=
true
setTimeout
(()
=>
{
queryDiscoverList
(
queryParams
.
value
).
then
(
res
=>
{
console
.
log
(
res
)
if
(
res
.
flag
){
tableData
.
value
=
res
.
data
.
list
.
map
(
item
=>
({
...
item
,
id
:
item
.
id
,
taskName
:
item
.
tname
,
result
:
item
.
countResult
,
dbType
:
item
.
dbtype
,
operator
:
item
.
username
,
createTime
:
item
.
createtime
,
updateTime
:
item
.
updatetime
,
remark
:
item
.
note
}))
loading
.
value
=
false
}
else
{
tableData
.
value
=
[]
loading
.
value
=
false
loading
.
value
=
false
},
3000
)
ElMessage
.
error
(
res
.
msg
)
}
}).
catch
((
err
)
=>
{
tableData
.
value
=
[]
loading
.
value
=
false
console
.
log
(
err
)
ElMessage
.
error
(
res
.
msg
)
})
}
}
function
pageProjectManage
()
{
function
pageProjectManage
()
{
...
@@ -95,7 +131,8 @@ function pageProjectManage() {
...
@@ -95,7 +131,8 @@ function pageProjectManage() {
*/
*/
function
handleAdd
(){
function
handleAdd
(){
console
.
log
(
'新增发现任务'
)
console
.
log
(
'新增发现任务'
)
addDiscoveryDialogRef
.
value
.
openDialog
()
// addDiscoveryDialogRef.value.openDialog()
emit
(
'page'
,
'addEditDiscovery'
,
{
listItem
:
null
,
addEditType
:
'add'
})
}
}
// 操作处理函数
// 操作处理函数
const
handleEdit
=
(
row
)
=>
{
const
handleEdit
=
(
row
)
=>
{
...
@@ -381,7 +418,7 @@ const handleAddEditConfirm = (submitData, isEditMode) =>{
...
@@ -381,7 +418,7 @@ const handleAddEditConfirm = (submitData, isEditMode) =>{
</div>
</div>
<!-- 新增/编辑发现任务弹窗 -->
<!-- 新增/编辑发现任务弹窗 -->
<
AddDiscoveryDialog
ref=
"addDiscoveryDialogRef"
@
confirm=
"handleAddEditConfirm"
/
>
<
!-- <AddDiscoveryDialog ref="addDiscoveryDialogRef" @confirm="handleAddEditConfirm" /> --
>
<SmartDiscoveryDialog
<SmartDiscoveryDialog
v-model=
"smartDiscoveryDialogVisible"
v-model=
"smartDiscoveryDialogVisible"
ref=
"smartDiscoveryDialogRef"
ref=
"smartDiscoveryDialogRef"
...
...
src/views/project/Project/list.vue
View file @
8f28908e
...
@@ -208,6 +208,7 @@ const handleEnterProject = (project) => {
...
@@ -208,6 +208,7 @@ const handleEnterProject = (project) => {
console
.
log
(
'进入项目:'
,
project
)
console
.
log
(
'进入项目:'
,
project
)
changeRoute
()
changeRoute
()
sessionStorage
.
setItem
(
'projectId'
,
project
.
id
)
sessionStorage
.
setItem
(
'projectId'
,
project
.
id
)
sessionStorage
.
setItem
(
'projectName'
,
project
.
project
)
router
.
push
({
path
:
'/indexManage/ItemManage'
,
query
:
{
projectId
:
project
.
id
}
})
router
.
push
({
path
:
'/indexManage/ItemManage'
,
query
:
{
projectId
:
project
.
id
}
})
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论