|
@@ -47,7 +47,7 @@
|
|
|
@blur="selectBlur(scope)"
|
|
|
@change="
|
|
|
handleSelected(
|
|
|
- dict.type[databaseType + '_data_type'].find(
|
|
|
+ dataType.find(
|
|
|
(item) => item.label === scope.row.fieldType
|
|
|
),
|
|
|
scope
|
|
@@ -60,7 +60,7 @@
|
|
|
<el-option v-for="item in dict.type.mysql_data_type" :label="item.dictLabel" :value="item.dictValue">
|
|
|
</el-option> -->
|
|
|
<el-option
|
|
|
- v-for="item in dict.type[databaseType + '_data_type']"
|
|
|
+ v-for="item in dataType"
|
|
|
:key="item.value"
|
|
|
:label="item.label"
|
|
|
:value="item.value"
|
|
@@ -89,7 +89,10 @@
|
|
|
|
|
|
<el-table-column prop="isNull" label="不是null" width="100">
|
|
|
<template slot-scope="scope">
|
|
|
- <el-checkbox v-model="scope.row.isNull"></el-checkbox>
|
|
|
+ <el-checkbox
|
|
|
+ @change="isNullChange(scope.row)"
|
|
|
+ v-model="scope.row.isNull"
|
|
|
+ ></el-checkbox>
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
|
|
@@ -151,15 +154,15 @@
|
|
|
import { createDatabase } from "@/api/datasheet/index";
|
|
|
import { tableInfo, editTable } from "@/api/dataEngine/index";
|
|
|
import { mapState } from "vuex";
|
|
|
+import { getDicts } from "@/api/system/dict/data";
|
|
|
export default {
|
|
|
name: "Datasheet",
|
|
|
- dicts: [
|
|
|
- "mysql_data_type",
|
|
|
- "sqlserver_data_type",
|
|
|
- "dm_data_type",
|
|
|
- "oracle_data_type",
|
|
|
- "datasource_type",
|
|
|
- ],
|
|
|
+ // dicts: [
|
|
|
+ // "dm_data_type",
|
|
|
+ // "mysql_data_type",
|
|
|
+ // "sqlserver_data_type",
|
|
|
+ // "oracle_data_type",
|
|
|
+ // ],
|
|
|
data() {
|
|
|
return {
|
|
|
isEdited: false,
|
|
@@ -199,23 +202,26 @@ export default {
|
|
|
// fieldLength0: { required: true, message: '请输入', trigger: 'blur' },
|
|
|
},
|
|
|
list: ["int", "varchar"],
|
|
|
+ dataType: [], //数据类型字典
|
|
|
|
|
|
Inoputdisabled: [],
|
|
|
// 需要指定长度
|
|
|
mysqlAllowLength: ["char", "varchar", "numeric", "decimal"],
|
|
|
};
|
|
|
},
|
|
|
- created() {
|
|
|
+ async created() {
|
|
|
+ await this.getDict();
|
|
|
if (this.$route.query.tableName) {
|
|
|
this.isEdited = true;
|
|
|
this.info();
|
|
|
} else {
|
|
|
- Object.keys(this.dataBaseName).forEach((item) => {
|
|
|
- this.dataBaseName[item] = "";
|
|
|
+ Object.keys(this.form).forEach((item) => {
|
|
|
+ this.form[item] = "";
|
|
|
});
|
|
|
this.experienceData = [];
|
|
|
}
|
|
|
},
|
|
|
+ mounted() {},
|
|
|
computed: {
|
|
|
...mapState({
|
|
|
databaseName: (state) => state.user.dataSource.databaseName,
|
|
@@ -249,12 +255,27 @@ export default {
|
|
|
// rulesAdd['fieldLength' + index] = item.fieldLength
|
|
|
// this.experienceDataForm = {...rulesAdd}
|
|
|
});
|
|
|
- console.log(this.experienceDataForm);
|
|
|
},
|
|
|
deep: true, // 深度监听父组件传过来对象变化
|
|
|
},
|
|
|
},
|
|
|
methods: {
|
|
|
+ // 加载数据字典
|
|
|
+ async getDict() {
|
|
|
+ let res = await this.getDicts(this.databaseType + "_data_type");
|
|
|
+ console.log(res);
|
|
|
+ if (res.code == 200) {
|
|
|
+ this.dataType = res.data.map((item) => {
|
|
|
+ return {
|
|
|
+ raw: item,
|
|
|
+ value: item.dictValue,
|
|
|
+ label: item.dictLabel,
|
|
|
+ };
|
|
|
+ });
|
|
|
+ } else {
|
|
|
+ console.log(res.msg);
|
|
|
+ }
|
|
|
+ },
|
|
|
// 初始化表格数据
|
|
|
info() {
|
|
|
const tableName = this.$route.query.tableName;
|
|
@@ -267,18 +288,16 @@ export default {
|
|
|
databaseType: this.databaseType,
|
|
|
databaseName: this.databaseName,
|
|
|
};
|
|
|
-
|
|
|
tableInfo(data).then((response) => {
|
|
|
- console.log(response);
|
|
|
this.experienceData = response.data;
|
|
|
// 初始化校验规则
|
|
|
- this.experienceData.forEach((val, index) => {
|
|
|
- this.handleSelected(
|
|
|
- this.dict.type[this.databaseType + "_data_type"].find(
|
|
|
- (item) => item.label === val.fieldType
|
|
|
- ),
|
|
|
- { $index: index, row: val }
|
|
|
- );
|
|
|
+ this.experienceData.map((val, index) => {
|
|
|
+ let temp = JSON.parse(JSON.stringify(this.dataType));
|
|
|
+ console.log(temp);
|
|
|
+ let targetDictItem = temp.find((item) => {
|
|
|
+ return item.label === val.fieldType;
|
|
|
+ });
|
|
|
+ this.handleSelected(targetDictItem, { $index: index, row: val });
|
|
|
});
|
|
|
});
|
|
|
},
|
|
@@ -289,15 +308,12 @@ export default {
|
|
|
// 下拉选中事件 // 处理选中类型后长度输入框是否禁用
|
|
|
handleSelected(tem, scope) {
|
|
|
if (tem == undefined) return;
|
|
|
- // console.log(this.experienceDataForm)
|
|
|
- // console.log(this.tableform)
|
|
|
if (!this.tableform["fieldLength" + scope.$index]) {
|
|
|
this.tableform["fieldLength" + scope.$index] = {};
|
|
|
}
|
|
|
if (tem.raw.listClass === "success") {
|
|
|
this.Inoputdisabled[scope.$index] = true; // 禁用长度输入框
|
|
|
scope.row.fieldLength = "";
|
|
|
-
|
|
|
this.tableform["fieldLength" + scope.$index].required = false; // 禁用长度输入框的校验
|
|
|
return this.$set(
|
|
|
this.experienceDataForm,
|
|
@@ -366,6 +382,12 @@ export default {
|
|
|
}
|
|
|
});
|
|
|
},
|
|
|
+ //处理非空选框问题
|
|
|
+ isNullChange(row) {
|
|
|
+ if (!row.isNull) {
|
|
|
+ row.isPrimary = false;
|
|
|
+ }
|
|
|
+ },
|
|
|
//增加经验行
|
|
|
handleAddExperienceline() {
|
|
|
if (this.experienceData == undefined) {
|
|
@@ -439,7 +461,11 @@ export default {
|
|
|
this.$emit("ok");
|
|
|
Object.keys(this.form).forEach((key) => (this.form[key] = ""));
|
|
|
this.experienceData = [];
|
|
|
- this.$tab.closePage();
|
|
|
+ this.$tab.closePage().then(() => {
|
|
|
+ this.$router.push({
|
|
|
+ path: "/data/datamodeling",
|
|
|
+ });
|
|
|
+ });
|
|
|
// 新增成功之后关闭当前页面
|
|
|
// this.$router.replace({
|
|
|
// path: "/data/datamodeling",
|
|
@@ -452,36 +478,65 @@ export default {
|
|
|
});
|
|
|
},
|
|
|
edit() {
|
|
|
- this.experienceData = this.experienceData.filter((item) => {
|
|
|
- return item.fieldName && item.fieldType;
|
|
|
+ const rule1 = new Promise((resolve, reject) => {
|
|
|
+ this.$refs["form"].validate((valid) => {
|
|
|
+ if (valid) {
|
|
|
+ resolve();
|
|
|
+ } else {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ });
|
|
|
});
|
|
|
- this.experienceData.forEach((field) => {
|
|
|
- if (field.fieldLength) {
|
|
|
- field.fieldType = `${field.fieldType}(${field.fieldLength})`;
|
|
|
- }
|
|
|
+ const rule2 = new Promise((resolve, reject) => {
|
|
|
+ this.$refs["tableform"].validate((valid) => {
|
|
|
+ if (valid) {
|
|
|
+ resolve();
|
|
|
+ } else {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ });
|
|
|
});
|
|
|
- let query = {
|
|
|
- databaseType: this.$store.state.user.dataSource.databaseType,
|
|
|
- databaseName: this.$store.state.user.dataSource.databaseName,
|
|
|
- tableName: this.form.tableName,
|
|
|
- tableComment: this.form.tableComment,
|
|
|
- field: this.experienceData,
|
|
|
- };
|
|
|
- editTable(query)
|
|
|
- .then((res) => {
|
|
|
- this.$modal.msgSuccess(res.msg);
|
|
|
- if (res.code === 200) {
|
|
|
- this.visible = false;
|
|
|
- this.$emit("ok");
|
|
|
- Object.keys(this.form).forEach((key) => (this.form[key] = ""));
|
|
|
- this.experienceData = [];
|
|
|
+ Promise.all([rule1, rule2]).then(() => {
|
|
|
+ if (this.experienceData.length == 0) {
|
|
|
+ this.$modal.msgWarning("字段不可为空!");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ this.experienceData = this.experienceData.filter((item) => {
|
|
|
+ return item.fieldName && item.fieldType;
|
|
|
+ });
|
|
|
+ this.experienceData.forEach((field) => {
|
|
|
+ if (field.fieldLength) {
|
|
|
+ field.fieldType = `${field.fieldType}(${field.fieldLength})`;
|
|
|
}
|
|
|
- })
|
|
|
- .catch((err) => {
|
|
|
- console.log(err);
|
|
|
});
|
|
|
- // 关闭当前页面
|
|
|
- this.$tab.closePage();
|
|
|
+ let query = {
|
|
|
+ databaseType: this.$store.state.user.dataSource.databaseType,
|
|
|
+ databaseName: this.$store.state.user.dataSource.databaseName,
|
|
|
+ tableName: this.form.tableName,
|
|
|
+ tableComment: this.form.tableComment,
|
|
|
+ field: this.experienceData,
|
|
|
+ };
|
|
|
+ editTable(query)
|
|
|
+ .then((res) => {
|
|
|
+ this.$modal.msgSuccess(res.msg);
|
|
|
+ if (res.code === 200) {
|
|
|
+ this.visible = false;
|
|
|
+ this.$emit("ok");
|
|
|
+ Object.keys(this.form).forEach((key) => (this.form[key] = ""));
|
|
|
+ this.experienceData = [];
|
|
|
+ this.$tab.closePage().then(() => {
|
|
|
+ this.$router.push({
|
|
|
+ path: "/data/datamodeling",
|
|
|
+ });
|
|
|
+ });
|
|
|
+ }
|
|
|
+ })
|
|
|
+ .catch((err) => {
|
|
|
+ console.log(err);
|
|
|
+ });
|
|
|
+ // 关闭当前页面
|
|
|
+ this.$tab.closePage();
|
|
|
+ });
|
|
|
},
|
|
|
},
|
|
|
};
|