Commit 0c3ee41a by ningjihai

Merge branch 'projectAddEdit_njh'

parents 90531cb0 1922f70e
...@@ -52,7 +52,6 @@ ...@@ -52,7 +52,6 @@
<div class="filter-container"> <div class="filter-container">
<el-select v-model="dbFilter.type" placeholder="请选择" class="filter-select" @change="selectChangeSql"> <el-select v-model="dbFilter.type" placeholder="请选择" class="filter-select" @change="selectChangeSql">
<el-option v-for="(item,index) in sourceTypeList" :key="index" :label="item.text" :value="item.text" /> <el-option v-for="(item,index) in sourceTypeList" :key="index" :label="item.text" :value="item.text" />
</el-select> </el-select>
<el-input <el-input
...@@ -71,20 +70,23 @@ ...@@ -71,20 +70,23 @@
<!-- 左侧可选数据库 --> <!-- 左侧可选数据库 -->
<div class="db-list"> <div class="db-list">
<div class="db-list-header"> <div class="db-list-header">
<el-checkbox v-model="selectAll" @change="handleSelectAll">全选</el-checkbox> <span>可选择数据源(数据库)</span>
</div> </div>
<el-scrollbar height="300px"> <el-scrollbar height="300px">
<el-checkbox-group v-model="selectedDbs"> <div
<div v-for="db in availableDatabases"
v-for="db in filteredDatabases" :key="db.tid"
:key="db.id" class="db-item"
class="db-item" @click="selectDatabase(db)"
> >
<el-checkbox :value="db.tid"> <!-- <div class="db-checkbox">
{{ db.sysname }} <el-checkbox :model-value="isDatabaseSelected(db.tid)" @click.stop />
</el-checkbox> </div> -->
<div class="db-info">
<div class="db-name">{{ db.sysname }}</div>
<div class="db-type">{{ db.dbtype }}</div>
</div> </div>
</el-checkbox-group> </div>
</el-scrollbar> </el-scrollbar>
</div> </div>
...@@ -92,17 +94,19 @@ ...@@ -92,17 +94,19 @@
<div class="db-list selected"> <div class="db-list selected">
<div class="db-list-header"> <div class="db-list-header">
<span>已选择数据源(数据库)</span> <span>已选择数据源(数据库)</span>
<el-button type="text" @click="handleClearSelected">清空</el-button> <span style="color: #2d8cf0;" @click="handleClearSelected">清空</span>
</div> </div>
<el-scrollbar height="300px"> <el-scrollbar height="300px">
<div <div
v-for="db in selectedDbDetails" v-for="db in selectedDbDetails"
:key="db.tid" :key="db.tid"
class="selected-db-item" class="selected-db-item"
@click="deselectDatabase(db)"
> >
<div class="db-name">{{ db.sysname }}</div> <div class="db-name">{{ db.sysname }}</div>
<div class="db-ip">{{ db.dbip }}</div> <!-- <div class="db-ip">{{ db.dbip }}</div> -->
<div class="db-username">{{ db.username }}</div> <div class="db-type">{{ db.dbtype }}</div>
</div> </div>
</el-scrollbar> </el-scrollbar>
</div> </div>
...@@ -257,8 +261,7 @@ ...@@ -257,8 +261,7 @@
<script setup> <script setup>
import { ref, computed, watch } from 'vue' import { ref, computed, watch } from 'vue'
import { ElMessageBox } from 'element-plus' import { ElMessageBox, ElMessage } from 'element-plus'
import { ElMessage } from 'element-plus'
import { Search } from '@element-plus/icons-vue' import { Search } from '@element-plus/icons-vue'
import { import {
getdatascopeprojectlist, getdatascopeprojectlist,
...@@ -342,7 +345,7 @@ const reset = () => { ...@@ -342,7 +345,7 @@ const reset = () => {
activeStep.value = 1 activeStep.value = 1
dbFilter.value.type = '' dbFilter.value.type = ''
dbFilter.value.keyword = '' dbFilter.value.keyword = ''
allDatabases.value = [] // allDatabases.value = []
selectedDbs.value = [] selectedDbs.value = []
allSchemasIndex.value = 0 allSchemasIndex.value = 0
} }
...@@ -378,11 +381,62 @@ const dbFilter = ref({ ...@@ -378,11 +381,62 @@ const dbFilter = ref({
type: '', type: '',
keyword: '' keyword: ''
}) })
const selectedDbDetails = ref([])
const allDatabases = ref([]) // 定义数据源相关变量
const selectedDbs = ref([]) const availableDatabases = ref([]) // queryByEditSort返回的未选择数据源
const selectedDbs = ref([]) // 当前选择的数据库ID列表
const selectAll = ref(false) const selectAll = ref(false)
// 计算属性:过滤后的可选数据库(排除已选择的)
const filteredAvailableDatabases = computed(() => {
return availableDatabases.value.filter(db =>
!selectedDbs.value.includes(db.tid)
)
})
// 计算属性:已选择的数据源详情
// const selectedDbDetails = computed(() => {
// // 从所有数据源中找出已选择的
// return availableDatabases.value.filter(db =>
// selectedDbs.value.includes(db.tid)
// )
// })
// 检查数据库是否已选择
const isDatabaseSelected = (dbId) => {
return selectedDbs.value.includes(dbId)
}
// 选择数据库(点击左侧)
const selectDatabase = (item) => {
if (!selectedDbs.value.includes(item.tid)) {
let index = availableDatabases.value.findIndex(x => x.tid === item.tid)
availableDatabases.value.splice(index,1)
selectedDbs.value.push(item.tid)
selectedDbDetails.value.push(item)
}
}
// 取消选择数据库(点击右侧)
const deselectDatabase = (db) => {
const index = selectedDbs.value.indexOf(db.tid)
if (index > -1) {
selectedDbs.value.splice(index, 1)
selectedDbDetails.value.splice(index, 1)
availableDatabases.value.push(db)
}
}
// 清空选择
const handleClearSelected = () => {
availableDatabases.value = selectedDbDetails.value
selectedDbs.value = []
selectAll.value = false
}
// 第三步:Schema选择相关 // 第三步:Schema选择相关
const selectedDataSource = ref(null) const selectedDataSource = ref(null)
const allSchemas = ref([]) const allSchemas = ref([])
...@@ -394,36 +448,26 @@ const domainGroups = ref([]) ...@@ -394,36 +448,26 @@ const domainGroups = ref([])
const selectedDomains = ref([]) const selectedDomains = ref([])
// 计算属性 // 计算属性
const filteredDatabases = computed(() => { // const filteredDatabases = computed(() => {
return allDatabases.value.filter(db => { // return allDatabases.value.filter(db => {
const keywordMatch = db.sysname.includes(dbFilter.value.keyword) // const keywordMatch = db.sysname.includes(dbFilter.value.keyword)
return keywordMatch // return keywordMatch
}) // })
}) // })
const selectedDbDetails = computed(() => {
return allDatabases.value.filter(db => selectedDbs.value.includes(db.tid))
})
const selectedDomainDetails = computed(() => { const selectedDomainDetails = computed(() => {
const allDomains = domainGroups.value.flatMap(group => group.list) const allDomains = domainGroups.value.flatMap(group => group.list)
return allDomains.filter(domain => selectedDomains.value.includes(domain.id)) return allDomains.filter(domain => selectedDomains.value.includes(domain.id))
}) })
// 方法
const handleSelectAll = (val) => {
if (val) {
selectedDbs.value = filteredDatabases.value.map(db => db.tid)
} else {
selectedDbs.value = []
}
}
const handleClearSelected = () => { // const handleClearSelected = () => {
selectedDbs.value = [] // selectedDbs.value = []
selectAll.value = false // selectAll.value = false
} // }
const allSchemasCompute = computed(() => { const allSchemasCompute = computed(() => {
return allSchemas.value[allSchemasIndex.value] return allSchemas.value[allSchemasIndex.value]
...@@ -495,6 +539,7 @@ const loginUser = { ...@@ -495,6 +539,7 @@ const loginUser = {
username: appStore.userInfo.user.username username: appStore.userInfo.user.username
} }
} }
// 修改数据库类型变化时的处理
const selectChangeSql = () => { const selectChangeSql = () => {
queryByEditSort({ queryByEditSort({
projectId: formData.value.id || '', projectId: formData.value.id || '',
...@@ -502,9 +547,10 @@ const selectChangeSql = () => { ...@@ -502,9 +547,10 @@ const selectChangeSql = () => {
loginUser: loginUser, loginUser: loginUser,
flag: 1 flag: 1
}).then(res => { }).then(res => {
allDatabases.value = res.data availableDatabases.value = res.data
}) })
} }
const basicInfoFormRef = ref(null) const basicInfoFormRef = ref(null)
const handleNextStep = async () => { const handleNextStep = async () => {
if (activeStep.value === 1) { if (activeStep.value === 1) {
...@@ -529,7 +575,7 @@ const handleNextStep = async () => { ...@@ -529,7 +575,7 @@ const handleNextStep = async () => {
loginUser: loginUser, loginUser: loginUser,
flag: 1 flag: 1
}).then(res => { }).then(res => {
allDatabases.value = res.data availableDatabases.value = res.data
}) })
} }
} else { } else {
...@@ -632,10 +678,10 @@ const handleClose = (done) => { ...@@ -632,10 +678,10 @@ const handleClose = (done) => {
}) })
} }
// 监听数据变化 // // 监听数据变化
watch(selectedDbs, (newVal) => { // watch(selectedDbs, (newVal) => {
selectAll.value = newVal.length > 0 && newVal.length === allDatabases.value.length // selectAll.value = newVal.length > 0 && newVal.length === allDatabases.value.length
}) // })
watch(selectedDomains, (newVal) => { watch(selectedDomains, (newVal) => {
if(domainGroups.value.length > 0) { if(domainGroups.value.length > 0) {
...@@ -807,25 +853,45 @@ watch(() => props.projectData, (newVal) => { ...@@ -807,25 +853,45 @@ watch(() => props.projectData, (newVal) => {
formData.value.name = data.project.project formData.value.name = data.project.project
formData.value.remark = data.project.note formData.value.remark = data.project.note
// 设置数据源 // 设置已选择的数据源详情
selectedDbs.value = data.dataSourceIdList.map(item => item.systemsource_id)
// 设置当前选择的数据库ID
selectedDbs.value = data.dataSourceIdList.map(item => item.systemsource_id)
// 保存原始schemalist数据 // 保存原始schemalist数据
originalSchemalist.value = data.schemalist || [] originalSchemalist.value = data.schemalist || []
areaAndRuleListRead.value = data.areaAndRuleList || [] areaAndRuleListRead.value = data.areaAndRuleList || []
if(data.dataSourceIdList && data.dataSourceIdList.length > 0){
selectedDbDetails.value = data.dataSourceIdList.map(item =>(({
...item,
tid: item.systemsource_id,
dbtype: item.dbtype,
sysname:item.sysname
})))
}
/// 加载可选数据源
queryByEditSort({
projectId: formData.value.id || '',
dbtype: dbFilter.value.type,
loginUser: loginUser,
flag: 1
}).then(res => {
availableDatabases.value = res.data
})
// 处理数据域和规则数据 // 处理数据域和规则数据
if (data.areaAndRuleList && data.areaAndRuleList.length > 0) { if (data.areaAndRuleList && data.areaAndRuleList.length > 0) {
formData.value.areaAndRuleList = data.areaAndRuleList formData.value.areaAndRuleList = data.areaAndRuleList
// 先获取所有数据域和规则
getAllDataAreaAndRule().then(domainRes => { getAllDataAreaAndRule().then(domainRes => {
domainGroups.value = domainRes.data domainGroups.value = domainRes.data
// 处理已选择的规则
processAreaAndRuleListForEdit(data.areaAndRuleList) processAreaAndRuleListForEdit(data.areaAndRuleList)
}) })
} }
// 如果是编辑模式,需要处理已选择的schema // 处理已选择的schema
if (props.mode === 'edit' && originalSchemalist.value.length > 0) { if (props.mode === 'edit' && originalSchemalist.value.length > 0) {
processSchemalistForEdit(originalSchemalist.value) processSchemalistForEdit(originalSchemalist.value)
} }
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论