!24 feat: 查询结果支持批量修改

Merge pull request !24 from zongyangleo/dev_20221121
This commit is contained in:
Coder慌
2022-11-22 08:28:55 +00:00
committed by Gitee

View File

@@ -126,6 +126,11 @@
<el-link type="success" :underline="false" @click="submitUpdateFields"><span <el-link type="success" :underline="false" @click="submitUpdateFields"><span
style="font-size: 12px">提交</span></el-link> style="font-size: 12px">提交</span></el-link>
</span> </span>
<span v-if="queryTab.updatedFields.length > 0">
<el-divider direction="vertical" border-style="dashed" />
<el-link type="warning" :underline="false" @click="cancelUpdateFields"><span
style="font-size: 12px">取消</span></el-link>
</span>
</el-row> </el-row>
<el-table @cell-dblclick="cellClick" @selection-change="onDataSelectionChange" <el-table @cell-dblclick="cellClick" @selection-change="onDataSelectionChange"
:data="queryTab.execRes.data" v-loading="queryTab.loading" element-loading-text="查询中..." :data="queryTab.execRes.data" v-loading="queryTab.loading" element-loading-text="查询中..."
@@ -167,9 +172,13 @@
</el-tooltip> </el-tooltip>
<el-divider direction="vertical" border-style="dashed" /> <el-divider direction="vertical" border-style="dashed" />
<el-tooltip v-if="state.updatedFields.length > 0" class="box-item" effect="dark" content="提交修改" placement="top"> <el-tooltip v-if="state.updatedFields[state.nowTableName]?.length > 0" class="box-item" effect="dark" content="提交修改" placement="top">
<el-link @click="submitUpdateFields" type="success" :underline="false">提交</el-link> <el-link @click="submitUpdateFields" type="success" :underline="false">提交</el-link>
</el-tooltip> </el-tooltip>
<el-divider v-if="state.updatedFields[state.nowTableName]?.length > 0" direction="vertical" border-style="dashed" />
<el-tooltip v-if="state.updatedFields[state.nowTableName]?.length > 0" class="box-item" effect="dark" content="取消修改" placement="top">
<el-link @click="cancelUpdateFields" type="warning" :underline="false">取消</el-link>
</el-tooltip>
</el-col> </el-col>
<el-col :span="16"> <el-col :span="16">
<el-input v-model="dt.condition" placeholder="若需条件过滤,可选择列并点击对应的字段并输入需要过滤的内容点击查询按钮即可" <el-input v-model="dt.condition" placeholder="若需条件过滤,可选择列并点击对应的字段并输入需要过滤的内容点击查询按钮即可"
@@ -304,9 +313,11 @@ type UpdateFieldsMeta = {
} }
type FieldsMeta = { type FieldsMeta = {
// 字段所在div // 字段所在div
div: any div: HTMLElement
// 字段名 // 字段名
fieldName: string fieldName: string
// 字段所在的表格行数据
row: any
// 字段类型 // 字段类型
fieldType: string fieldType: string
// 原值 // 原值
@@ -370,7 +381,7 @@ const state = reactive({
tableMaxHeight: 250, tableMaxHeight: 250,
dbTables: {}, dbTables: {},
}, },
updatedFields:[] as UpdateFieldsMeta[]// 被修改的字段信息 updatedFields: {} as { [tableName: string]: UpdateFieldsMeta[] }// 各个tab表被修改的字段信息
}); });
const { const {
tags, tags,
@@ -845,10 +856,10 @@ const doRunSql = async (sql:string, execRemark?:string) => {
state.queryTab.sql = sql; state.queryTab.sql = sql;
state.queryTab.loading = true; state.queryTab.loading = true;
const colAndData: any = await runSql(sql, execRemark); const colAndData: any = await runSql(sql, execRemark);
state.queryTab.updatedFields = [];
state.queryTab.execRes.data = colAndData.res; state.queryTab.execRes.data = colAndData.res;
state.queryTab.execRes.tableColumn = colAndData.colNames; state.queryTab.execRes.tableColumn = colAndData.colNames;
state.queryTab.loading = false; state.queryTab.loading = false;
cancelUpdateFields()
} catch (e: any) { } catch (e: any) {
state.queryTab.loading = false; state.queryTab.loading = false;
} }
@@ -1196,9 +1207,12 @@ const onRefresh = async (tableName: string) => {
// 查询条件置空 // 查询条件置空
dataTab.condition = ''; dataTab.condition = '';
dataTab.pageNum = 1; dataTab.pageNum = 1;
setDataTabDatas(dataTab); setDataTabDatas(dataTab).then(()=>{
cancelUpdateFields()
});
}; };
/** /**
* 数据tab修改页数 * 数据tab修改页数
*/ */
@@ -1476,14 +1490,14 @@ const cellClick = (row: any, column: any, cell: any) => {
if (state.activeName === 'Query'){ if (state.activeName === 'Query'){
currentUpdatedFields = state.queryTab.updatedFields currentUpdatedFields = state.queryTab.updatedFields
} else { } else {
currentUpdatedFields = state.updatedFields; currentUpdatedFields = state.updatedFields[state.nowTableName];
} }
// 主键 // 主键
const primaryKey = await getColumn(state.nowTableName); const primaryKey = await getColumn(state.nowTableName);
const primaryKeyValue = row[primaryKey.columnName]; const primaryKeyValue = row[primaryKey.columnName];
// 更新字段列信息 // 更新字段列信息
const updateColumn = await getColumn(state.nowTableName, property); const updateColumn = await getColumn(state.nowTableName, property);
const newField = {div, fieldName: column.rawColumnKey, fieldType: updateColumn.columnType, oldValue: text, newValue: input.value} as FieldsMeta; const newField = {div, fieldName: column.rawColumnKey, row, fieldType: updateColumn.columnType, oldValue: text, newValue: input.value} as FieldsMeta;
// 被修改的字段 // 被修改的字段
const primaryKeyFields = currentUpdatedFields.filter((meta)=>meta.primaryKey === primaryKeyValue) const primaryKeyFields = currentUpdatedFields.filter((meta)=>meta.primaryKey === primaryKeyValue)
@@ -1540,7 +1554,7 @@ const cellClick = (row: any, column: any, cell: any) => {
if (state.activeName === 'Query'){ if (state.activeName === 'Query'){
state.queryTab.updatedFields = currentUpdatedFields state.queryTab.updatedFields = currentUpdatedFields
} else { } else {
state.updatedFields = currentUpdatedFields state.updatedFields[state.nowTableName] = currentUpdatedFields
} }
} }
}); });
@@ -1554,7 +1568,7 @@ const submitUpdateFields = () =>{
isQuery = true; isQuery = true;
currentUpdatedFields = state.queryTab.updatedFields currentUpdatedFields = state.queryTab.updatedFields
} else { } else {
currentUpdatedFields = state.updatedFields currentUpdatedFields = state.updatedFields[state.nowTableName]
} }
if(currentUpdatedFields.length <= 0){ if(currentUpdatedFields.length <= 0){
return; return;
@@ -1584,13 +1598,33 @@ const submitUpdateFields = () =>{
state.queryTab.updatedFields = [] state.queryTab.updatedFields = []
doRunSql(state.queryTab.sql) doRunSql(state.queryTab.sql)
}else{ }else{
state.updatedFields = [] state.updatedFields[state.nowTableName] = []
onRefresh(state.nowTableName) onRefresh(state.nowTableName)
} }
}); });
} }
const cancelUpdateFields = () => {
if (state.activeName === 'Query'){
state.queryTab.updatedFields.forEach(a=>{
a.fields.forEach(b=>{
b.div.classList.remove('update_field_active')
b.row[b.fieldName] = b.oldValue
})
})
state.queryTab.updatedFields = []
} else {
state.updatedFields[state.nowTableName]?.forEach(a=>{
a.fields.forEach(b=>{
b.div.classList.remove('update_field_active')
b.row[b.fieldName] = b.oldValue
})
})
state.updatedFields[state.nowTableName] = []
}
}
/** /**
* 根据字段列名获取字段列信息。 * 根据字段列名获取字段列信息。
* 若字段列名为空,则返回主键列,若无主键列返回第一个字段列信息(用于获取主键等) * 若字段列名为空,则返回主键列,若无主键列返回第一个字段列信息(用于获取主键等)