feat: 1.8.3

This commit is contained in:
meilin.huang
2024-05-10 19:59:49 +08:00
parent 4afeac5fdd
commit 05625bd8c1
17 changed files with 96 additions and 91 deletions

View File

@@ -1,12 +1,11 @@
<template>
<div class="w100">
<div class="w100 tag-tree-check">
<el-input v-model="filterTag" @input="onFilterValChanged" clearable placeholder="输入关键字过滤" size="small" />
<div class="mt3" style="border: 1px solid var(--el-border-color)">
<el-scrollbar :style="{ height: props.height }">
<el-tree
v-bind="$attrs"
ref="tagTreeRef"
style="width: 100%"
:data="state.tags"
:default-expanded-keys="checkedTags"
:default-checked-keys="checkedTags"
@@ -25,7 +24,7 @@
:filter-node-method="filterNode"
>
<template #default="{ data }">
<span class="custom-tree-node">
<span>
<SvgIcon
:name="EnumValue.getEnumByValue(TagResourceTypeEnum, data.type)?.extra.icon"
:color="EnumValue.getEnumByValue(TagResourceTypeEnum, data.type)?.extra.iconColor"
@@ -157,4 +156,12 @@ const disableParentNodes = (node: any, disable = true) => {
disableParentNodes(node.parent, disable);
};
</script>
<style lang="scss" scoped></style>
<style lang="scss" scoped>
.tag-tree-check {
.el-tree {
min-width: 100%;
// 横向滚动生效
display: inline-block;
}
}
</style>

View File

@@ -115,7 +115,7 @@
<el-option
v-for="item in state.targetColumnList"
:key="item.columnName"
:label="item.columnName + ` ${item.showDataType}` + (item.columnComment && ' - ' + item.columnComment)"
:label="item.columnName + ` ${item.columnType}` + (item.columnComment && ' - ' + item.columnComment)"
:value="item.columnName"
/>
</el-select>

View File

@@ -1,7 +1,6 @@
<template>
<div class="string-input-container w100" v-if="dataType == DataType.String">
<div class="string-input-container w100" v-if="dataType == DataType.String || dataType == DataType.Number">
<el-input
v-if="dataType == DataType.String"
:ref="(el: any) => focus && el?.focus()"
:disabled="disabled"
@blur="handleBlur"
@@ -13,18 +12,6 @@
<SvgIcon v-if="showEditorIcon" @mousedown="openEditor" class="string-input-container-icon" name="FullScreen" :size="10" />
</div>
<el-input
v-else-if="dataType == DataType.Number"
:ref="(el: any) => focus && el?.focus()"
:disabled="disabled"
@blur="handleBlur"
class="w100 mb4"
size="small"
v-model.number="itemValue"
:placeholder="placeholder"
type="number"
/>
<el-date-picker
v-else-if="dataType == DataType.Date"
:ref="(el: any) => focus && el?.focus()"
@@ -75,7 +62,7 @@
<script lang="ts" setup>
import { computed, ref, Ref } from 'vue';
import { ElInput } from 'element-plus';
import { ElInput, ElMessage } from 'element-plus';
import { DataType } from '../../dialect/index';
import SvgIcon from '@/components/svgIcon/index.vue';
import MonacoEditorDialog from '@/components/monaco/MonacoEditorDialog';
@@ -130,6 +117,10 @@ const handleBlur = () => {
if (editorOpening.value) {
return;
}
if (props.dataType == DataType.Number && !/^-?\d*\.?\d+$/.test(itemValue.value)) {
ElMessage.error('输入内容与类型不匹配');
return;
}
emit('update:modelValue', itemValue.value);
emit('blur');
};

View File

@@ -476,9 +476,9 @@ const setTableColumns = (columns: any) => {
state.columns = columns.map((x: any) => {
const columnName = x.columnName;
// 数据类型
x.dataType = dbDialect.getDataType(x.dataType);
x.dataType = dbDialect.getDataType(x.columnType);
x.dataTypeSubscript = ColumnTypeSubscript[x.dataType];
x.remark = `${x.showDataType} ${x.columnComment ? ' | ' + x.columnComment : ''}`;
x.remark = `${x.columnType} ${x.columnComment ? ' | ' + x.columnComment : ''}`;
return {
...x,

View File

@@ -9,7 +9,7 @@
:required="column.nullable != 'YES' && !column.isPrimaryKey && !column.isIdentity"
>
<template #label>
<span class="pointer" :title="`${column.showDataType} | ${column.columnComment}`">
<span class="pointer" :title="`${column.columnType} | ${column.columnComment}`">
{{ column.columnName }}
</span>
</template>
@@ -17,7 +17,7 @@
<ColumnFormItem
v-model="modelValue[`${column.columnName}`]"
:data-type="dbInst.getDialect().getDataType(column.dataType)"
:placeholder="`${column.showDataType} ${column.columnComment}`"
:placeholder="`${column.columnType} ${column.columnComment}`"
:column-name="column.columnName"
:disabled="column.isIdentity"
/>

View File

@@ -12,6 +12,7 @@
width="auto"
title="表格字段配置"
trigger="click"
@hide="triggerCheckedColumns"
>
<div><el-input v-model="checkedShowColumns.searchKey" size="small" placeholder="输入列名或备注过滤" /></div>
<div>
@@ -111,7 +112,7 @@
<el-divider direction="vertical" />
<span style="color: var(--el-color-info-light-3)">
{{ item.showDataType }}
{{ item.columnType }}
<template v-if="item.columnComment">
<el-divider direction="vertical" />
@@ -458,14 +459,12 @@ const handleCount = async () => {
const handleCheckAllColumnChange = (val: boolean) => {
state.checkedShowColumns.columnNames = val ? state.columns.map((x: any) => x.columnName) : [];
state.checkedShowColumns.isIndeterminate = false;
triggerCheckedColumns();
};
const handleCheckedColumnChange = (value: string[]) => {
const checkedCount = value.length;
state.checkedShowColumns.checkedAllColumn = checkedCount === state.columns.length;
state.checkedShowColumns.isIndeterminate = checkedCount > 0 && checkedCount < state.columns.length;
triggerCheckedColumns();
};
const triggerCheckedColumns = () => {
@@ -558,7 +557,7 @@ const filterColumns = (searchKey: string) => {
const onConditionRowClick = (event: any) => {
const row = event[0];
state.conditionDialog.title = `请输入 [${row.columnName}] 的值`;
state.conditionDialog.placeholder = `${row.showDataType} ${row.columnComment}`;
state.conditionDialog.placeholder = `${row.columnType} ${row.columnComment}`;
state.conditionDialog.columnRow = row;
state.conditionDialog.visible = true;
setTimeout(() => {

View File

@@ -82,7 +82,7 @@
<el-dialog width="40%" :title="`${chooseTableName} 字段信息`" v-model="columnDialog.visible">
<el-table border stripe :data="columnDialog.columns" size="small">
<el-table-column prop="columnName" label="名称" show-overflow-tooltip> </el-table-column>
<el-table-column width="120" prop="showDataType" label="类型" show-overflow-tooltip> </el-table-column>
<el-table-column width="120" prop="columnType" label="类型" show-overflow-tooltip> </el-table-column>
<el-table-column width="80" prop="nullable" label="是否可为空" show-overflow-tooltip> </el-table-column>
<el-table-column prop="columnComment" label="备注" show-overflow-tooltip> </el-table-column>
</el-table>

View File

@@ -483,17 +483,17 @@ export class DbInst {
}
for (let col of columns) {
if (col.charMaxLength > 0) {
col.showDataType = `${col.dataType}(${col.charMaxLength})`;
col.columnType = `${col.dataType}(${col.charMaxLength})`;
col.showLength = col.charMaxLength;
col.showScale = null;
continue;
}
if (col.numPrecision > 0) {
if (col.numScale > 0) {
col.showDataType = `${col.dataType}(${col.numPrecision},${col.numScale})`;
col.columnType = `${col.dataType}(${col.numPrecision},${col.numScale})`;
col.showScale = col.numScale;
} else {
col.showDataType = `${col.dataType}(${col.numPrecision})`;
col.columnType = `${col.dataType}(${col.numPrecision})`;
col.showScale = null;
}
@@ -501,7 +501,7 @@ export class DbInst {
continue;
}
col.showDataType = col.dataType;
col.columnType = col.dataType;
}
}
}

View File

@@ -145,22 +145,23 @@
</template>
<script lang="ts" setup>
import { toRefs, ref, watch, reactive, onMounted, Ref } from 'vue';
import { toRefs, ref, watch, reactive, onMounted, Ref, defineAsyncComponent } from 'vue';
import { ElMessage, ElMessageBox } from 'element-plus';
import { tagApi } from './api';
import { dateFormat } from '@/common/utils/date';
import { Contextmenu, ContextmenuItem } from '@/components/contextmenu/index';
import { useUserInfo } from '@/store/userInfo';
import { Splitpanes, Pane } from 'splitpanes';
import MachineList from '../machine/MachineList.vue';
import RedisList from '../redis/RedisList.vue';
import MongoList from '../mongo/MongoList.vue';
import { TagResourceTypeEnum } from '@/common/commonEnum';
import EnumTag from '@/components/enumtag/EnumTag.vue';
import EnumValue from '@/common/Enum';
import InstanceList from '../db/InstanceList.vue';
import TagCodePath from '../component/TagCodePath.vue';
const MachineList = defineAsyncComponent(() => import('../machine/MachineList.vue'));
const InstanceList = defineAsyncComponent(() => import('../db/InstanceList.vue'));
const RedisList = defineAsyncComponent(() => import('../redis/RedisList.vue'));
const MongoList = defineAsyncComponent(() => import('../mongo/MongoList.vue'));
interface Tree {
id: number;
codePath: string;

View File

@@ -114,19 +114,19 @@ watchEffect(() => {
});
const btnOk = async () => {
accountForm.value.validate(async (valid: boolean) => {
if (!valid) {
ElMessage.error('表单填写有误');
return false;
}
try {
await accountForm.value.validate();
} catch (e: any) {
ElMessage.error('请正确填写信息');
return false;
}
await saveAccountExec();
ElMessage.success('操作成功');
emit('val-change', state.form);
//重置表单域
accountForm.value.resetFields();
state.form = {} as any;
});
await saveAccountExec();
ElMessage.success('操作成功');
emit('val-change', state.form);
//重置表单域
accountForm.value.resetFields();
state.form = {} as any;
};
const cancel = () => {

View File

@@ -44,6 +44,7 @@
import { ref, toRefs, reactive, watch, watchEffect } from 'vue';
import { configApi, accountApi } from '../api';
import { DynamicFormEdit } from '@/components/dynamic-form';
import { ElMessage } from 'element-plus';
const props = defineProps({
visible: {
@@ -125,22 +126,25 @@ const getAccount = (username: any) => {
};
const btnOk = async () => {
configForm.value.validate(async (valid: boolean) => {
if (valid) {
if (state.params) {
state.form.params = JSON.stringify(state.params);
}
if (state.permissionAccount.length > 0) {
state.form.permission = state.permissionAccount.join(',') + ',';
} else {
state.form.permission = 'all';
}
try {
await configForm.value.validate();
} catch (e: any) {
ElMessage.error('请正确填写信息');
return false;
}
await saveConfigExec();
emit('val-change', state.form);
cancel();
}
});
if (state.params) {
state.form.params = JSON.stringify(state.params);
}
if (state.permissionAccount.length > 0) {
state.form.permission = state.permissionAccount.join(',') + ',';
} else {
state.form.permission = 'all';
}
await saveConfigExec();
emit('val-change', state.form);
cancel();
};
</script>
<style lang="scss"></style>

View File

@@ -254,7 +254,7 @@ const changeLinkType = () => {
state.form.meta.component = '';
};
const btnOk = () => {
const btnOk = async () => {
const submitForm = { ...state.form };
if (submitForm.type == 1) {
// 如果是菜单则解析meta如果值为false或者''则去除该值
@@ -263,16 +263,19 @@ const btnOk = () => {
submitForm.meta = null as any;
}
menuForm.value.validate(async (valid: any) => {
if (valid) {
state.submitForm = submitForm;
await saveResouceExec();
try {
await menuForm.value.validate();
} catch (e: any) {
ElMessage.error('请正确填写信息');
return false;
}
emit('val-change', submitForm);
ElMessage.success('保存成功');
cancel();
}
});
state.submitForm = submitForm;
await saveResouceExec();
emit('val-change', submitForm);
ElMessage.success('保存成功');
cancel();
};
const parseMenuMeta = (meta: any) => {

View File

@@ -80,13 +80,15 @@ const cancel = () => {
};
const btnOk = async () => {
roleForm.value.validate(async (valid: boolean) => {
if (valid) {
await saveRoleExec();
emit('val-change', state.form);
cancel();
}
});
try {
await roleForm.value.validate();
} catch (e: any) {
return false;
}
await saveRoleExec();
emit('val-change', state.form);
cancel();
};
</script>
<style lang="scss"></style>