|
@@ -32,34 +32,39 @@
|
|
}}</span>
|
|
}}</span>
|
|
</el-option>
|
|
</el-option>
|
|
</el-select>
|
|
</el-select>
|
|
|
|
+ <!-- <el-form
|
|
|
|
+ :model="tableFieldList"
|
|
|
|
+ ref="tableForm"
|
|
|
|
+ :rules="rules"
|
|
|
|
+ :inline="false"
|
|
|
|
+ size="normal"
|
|
|
|
+ > -->
|
|
<el-table
|
|
<el-table
|
|
:data="tableFieldList"
|
|
:data="tableFieldList"
|
|
border
|
|
border
|
|
ref="dragTable"
|
|
ref="dragTable"
|
|
- :max-height="tableHeight"
|
|
|
|
row-key="id"
|
|
row-key="id"
|
|
- :tree-props="{ children: 'children', hasChildren: 'hasChildren' }"
|
|
|
|
|
|
+ :max-height="tableHeight"
|
|
>
|
|
>
|
|
|
|
+ <!--
|
|
|
|
+
|
|
|
|
+ :tree-props="{ children: 'children', hasChildren: 'hasChildren' }"
|
|
|
|
+ -->
|
|
>
|
|
>
|
|
- <!-- <el-table-column type="selection" width="55" align="center" /> -->
|
|
|
|
- <!-- <span v-for="(key, val) in columns" :key="val">
|
|
|
|
- <el-table-column :label="key" align="center" :prop="val" />
|
|
|
|
- </span> -->
|
|
|
|
<el-table-column
|
|
<el-table-column
|
|
type="index"
|
|
type="index"
|
|
label="序号"
|
|
label="序号"
|
|
width="50"
|
|
width="50"
|
|
class-name="allowDrag"
|
|
class-name="allowDrag"
|
|
>
|
|
>
|
|
- <!-- <template slot-scope="scope">
|
|
|
|
- <el-input v-model="scope.row.fieldDescription"></el-input>
|
|
|
|
- </template> -->
|
|
|
|
</el-table-column>
|
|
</el-table-column>
|
|
<el-table-column prop="fieldName" label="数据字段">
|
|
<el-table-column prop="fieldName" label="数据字段">
|
|
</el-table-column>
|
|
</el-table-column>
|
|
<el-table-column prop="fieldDescription" label="字段描述">
|
|
<el-table-column prop="fieldDescription" label="字段描述">
|
|
<template slot-scope="scope">
|
|
<template slot-scope="scope">
|
|
|
|
+ <!-- <el-form-item size="normal" prop="fieldDescription"> -->
|
|
<el-input v-model="scope.row.fieldDescription"></el-input>
|
|
<el-input v-model="scope.row.fieldDescription"></el-input>
|
|
|
|
+ <!-- </el-form-item> -->
|
|
</template>
|
|
</template>
|
|
</el-table-column>
|
|
</el-table-column>
|
|
<el-table-column prop="relationTable" label="关联表">
|
|
<el-table-column prop="relationTable" label="关联表">
|
|
@@ -92,7 +97,6 @@
|
|
@change="relationFieldChange(scope.row)"
|
|
@change="relationFieldChange(scope.row)"
|
|
:disabled="!scope.row.disableRelaFieldName"
|
|
:disabled="!scope.row.disableRelaFieldName"
|
|
placeholder="关联字段"
|
|
placeholder="关联字段"
|
|
- clearable
|
|
|
|
filterable
|
|
filterable
|
|
>
|
|
>
|
|
<el-option
|
|
<el-option
|
|
@@ -111,7 +115,7 @@
|
|
v-model="scope.row.relationType"
|
|
v-model="scope.row.relationType"
|
|
placeholder="请选择关联方式"
|
|
placeholder="请选择关联方式"
|
|
:disabled="!scope.row.disableRelaType"
|
|
:disabled="!scope.row.disableRelaType"
|
|
- clearable
|
|
|
|
|
|
+ @change="relationTypeChangeHandler(scope.row)"
|
|
filterable
|
|
filterable
|
|
>
|
|
>
|
|
<el-option
|
|
<el-option
|
|
@@ -182,13 +186,7 @@
|
|
</template>
|
|
</template>
|
|
</el-table-column> -->
|
|
</el-table-column> -->
|
|
</el-table>
|
|
</el-table>
|
|
- <!-- <pagination
|
|
|
|
- v-show="total > 0"
|
|
|
|
- :total="total"
|
|
|
|
- :page.sync="queryParams.pageNum"
|
|
|
|
- :limit.sync="queryParams.pageSize"
|
|
|
|
- @pagination="pageList"
|
|
|
|
- /> -->
|
|
|
|
|
|
+ <!-- </el-form> -->
|
|
</el-card>
|
|
</el-card>
|
|
</el-col>
|
|
</el-col>
|
|
<el-col :span="6">
|
|
<el-col :span="6">
|
|
@@ -351,7 +349,7 @@
|
|
:key="item.key"
|
|
:key="item.key"
|
|
:label="item.value"
|
|
:label="item.value"
|
|
align="center"
|
|
align="center"
|
|
- :prop="item.key"
|
|
|
|
|
|
+ :prop="toUpperCase(item.key)"
|
|
/>
|
|
/>
|
|
<el-table-column
|
|
<el-table-column
|
|
label="操作"
|
|
label="操作"
|
|
@@ -523,6 +521,9 @@ export default {
|
|
timeFormate: [
|
|
timeFormate: [
|
|
{ required: true, message: "请选择时间格式", trigger: "change" },
|
|
{ required: true, message: "请选择时间格式", trigger: "change" },
|
|
],
|
|
],
|
|
|
|
+ fieldDescription: [
|
|
|
|
+ { required: true, message: "请输入字段描述", trigger: "blur" },
|
|
|
|
+ ],
|
|
},
|
|
},
|
|
menus: [], //路由列表数据
|
|
menus: [], //路由列表数据
|
|
|
|
|
|
@@ -606,19 +607,24 @@ export default {
|
|
isExport: true,
|
|
isExport: true,
|
|
relationTableList: this.relationTableList,
|
|
relationTableList: this.relationTableList,
|
|
tableName: this.tableName,
|
|
tableName: this.tableName,
|
|
- children: [],
|
|
|
|
|
|
+ relationFieldList: [],
|
|
};
|
|
};
|
|
});
|
|
});
|
|
});
|
|
});
|
|
},
|
|
},
|
|
// 关联表变化回调
|
|
// 关联表变化回调
|
|
async ralationTableChange(row) {
|
|
async ralationTableChange(row) {
|
|
|
|
+ this.tableFieldList = this.tableFieldList.filter((item) => {
|
|
|
|
+ return !row.relationFieldList.some((val) => {
|
|
|
|
+ return val.id == item.id;
|
|
|
|
+ });
|
|
|
|
+ });
|
|
|
|
+ row.relationFieldName = "";
|
|
|
|
+ row.relationType = "";
|
|
|
|
+ row.disableRelaFieldName = false;
|
|
|
|
+ row.disableRelaType = false;
|
|
|
|
+ row.relationFieldList = [];
|
|
if (!row.relationTable) {
|
|
if (!row.relationTable) {
|
|
- row.relationFieldName = "";
|
|
|
|
- row.relationType = "";
|
|
|
|
- row.disableRelaFieldName = false;
|
|
|
|
- row.disableRelaType = false;
|
|
|
|
- row.children = [];
|
|
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
// 获取关联表的字段
|
|
// 获取关联表的字段
|
|
@@ -628,6 +634,7 @@ export default {
|
|
tableName: row.relationTable,
|
|
tableName: row.relationTable,
|
|
};
|
|
};
|
|
let res = await getListName(data);
|
|
let res = await getListName(data);
|
|
|
|
+ // 关联字段下拉列表数据
|
|
row.relaFieldNameList = res.map((item) => {
|
|
row.relaFieldNameList = res.map((item) => {
|
|
return {
|
|
return {
|
|
fieldName: item.fieldName,
|
|
fieldName: item.fieldName,
|
|
@@ -637,7 +644,7 @@ export default {
|
|
let relationTableList = row.relationTableList.filter(
|
|
let relationTableList = row.relationTableList.filter(
|
|
(item) => row.relationTable != item.tableName
|
|
(item) => row.relationTable != item.tableName
|
|
);
|
|
);
|
|
- row.children = row.relaFieldNameList.map((item, index) => {
|
|
|
|
|
|
+ row.relationFieldList = row.relaFieldNameList.map((item, index) => {
|
|
return {
|
|
return {
|
|
id: row.relationTable + " " + item.fieldName,
|
|
id: row.relationTable + " " + item.fieldName,
|
|
fieldName: item.fieldName,
|
|
fieldName: item.fieldName,
|
|
@@ -655,12 +662,17 @@ export default {
|
|
isExport: true,
|
|
isExport: true,
|
|
relationTableList,
|
|
relationTableList,
|
|
tableName: row.relationTable,
|
|
tableName: row.relationTable,
|
|
- children: [],
|
|
|
|
|
|
+ relationFieldList: [],
|
|
isChildren: true,
|
|
isChildren: true,
|
|
};
|
|
};
|
|
});
|
|
});
|
|
|
|
+ // this.tableFieldList = [...this.tableFieldList, ...row.relationFieldList];
|
|
row.disableRelaFieldName = true;
|
|
row.disableRelaFieldName = true;
|
|
},
|
|
},
|
|
|
|
+ // 关联类型变化回调
|
|
|
|
+ relationTypeChangeHandler(row) {
|
|
|
|
+ this.tableFieldList = [...this.tableFieldList, ...row.relationFieldList];
|
|
|
|
+ },
|
|
// 关联字段回调
|
|
// 关联字段回调
|
|
relationFieldChange(row) {
|
|
relationFieldChange(row) {
|
|
if (!row.relationFieldName) {
|
|
if (!row.relationFieldName) {
|
|
@@ -732,7 +744,7 @@ export default {
|
|
let res = await getMenuList();
|
|
let res = await getMenuList();
|
|
this.menus = this.handleTree(res.data, "menuId");
|
|
this.menus = this.handleTree(res.data, "menuId");
|
|
},
|
|
},
|
|
- // 校验字段合法性
|
|
|
|
|
|
+ // 校验字段合法性(递归版)
|
|
validateField(tableFieldList, validateParams) {
|
|
validateField(tableFieldList, validateParams) {
|
|
if (!tableFieldList.length) {
|
|
if (!tableFieldList.length) {
|
|
return;
|
|
return;
|
|
@@ -743,11 +755,56 @@ export default {
|
|
//描述字段不能为空
|
|
//描述字段不能为空
|
|
validateParams.isFieldDescrib = true;
|
|
validateParams.isFieldDescrib = true;
|
|
}
|
|
}
|
|
- if (temp.children.length) {
|
|
|
|
- this.validateField(temp.children, validateParams);
|
|
|
|
|
|
+ if (
|
|
|
|
+ temp.relationTable &&
|
|
|
|
+ (!temp.relationFieldName || !temp.relationType)
|
|
|
|
+ ) {
|
|
|
|
+ // 关联条件不足
|
|
|
|
+ validateParams.isRelationFieldAll = true;
|
|
|
|
+ }
|
|
|
|
+ if (temp.relationFieldList.length) {
|
|
|
|
+ this.validateField(temp.relationFieldList, validateParams);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
},
|
|
|
|
+ // 校验字段合法性(非递归版)
|
|
|
|
+ validateTableData(tableFieldList) {
|
|
|
|
+ if (!tableFieldList.length) {
|
|
|
|
+ return {
|
|
|
|
+ val: false,
|
|
|
|
+ meg: "字段个数不能为空",
|
|
|
|
+ };
|
|
|
|
+ }
|
|
|
|
+ for (let i = 0; i < tableFieldList.length; i++) {
|
|
|
|
+ let temp = tableFieldList[i];
|
|
|
|
+ if (!temp.fieldDescription.trim() && temp.isShow) {
|
|
|
|
+ return {
|
|
|
|
+ val: false,
|
|
|
|
+ msg: "显示的字段,字段描述不能为空",
|
|
|
|
+ };
|
|
|
|
+ }
|
|
|
|
+ if (
|
|
|
|
+ temp.relationTable &&
|
|
|
|
+ (!temp.relationFieldName || !temp.relationType)
|
|
|
|
+ ) {
|
|
|
|
+ return {
|
|
|
|
+ val: false,
|
|
|
|
+ msg: "关联条件不足,请完善关联条件",
|
|
|
|
+ };
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ if (tableFieldList.filter((item) => item.isShow).length == 0) {
|
|
|
|
+ return {
|
|
|
|
+ val: false,
|
|
|
|
+ msg: "显示的字段数不能为空",
|
|
|
|
+ };
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return {
|
|
|
|
+ val: true,
|
|
|
|
+ msg: "",
|
|
|
|
+ };
|
|
|
|
+ },
|
|
// 递归拼接查询语句
|
|
// 递归拼接查询语句
|
|
getSQLString(tableFieldList, fieldArr, tableArr) {
|
|
getSQLString(tableFieldList, fieldArr, tableArr) {
|
|
for (let i = 0; i < tableFieldList.length; i++) {
|
|
for (let i = 0; i < tableFieldList.length; i++) {
|
|
@@ -783,11 +840,12 @@ export default {
|
|
temp.fieldName
|
|
temp.fieldName
|
|
);
|
|
);
|
|
}
|
|
}
|
|
- if (temp.children.length) {
|
|
|
|
- this.getSQLString(temp.children, fieldArr, tableArr);
|
|
|
|
- }
|
|
|
|
|
|
+ // if (temp.relationFieldList.length) {
|
|
|
|
+ // this.getSQLString(temp.relationFieldList, fieldArr, tableArr);
|
|
|
|
+ // }
|
|
}
|
|
}
|
|
},
|
|
},
|
|
|
|
+
|
|
// 拼接查询sql语句
|
|
// 拼接查询sql语句
|
|
getSQLStr() {
|
|
getSQLStr() {
|
|
let sqlType = this.databaseType; //数据库类型
|
|
let sqlType = this.databaseType; //数据库类型
|
|
@@ -827,6 +885,14 @@ export default {
|
|
});
|
|
});
|
|
return resArr;
|
|
return resArr;
|
|
},
|
|
},
|
|
|
|
+ // 下划线命名转驼峰命名
|
|
|
|
+ toUpperCase(str) {
|
|
|
|
+ let nstr = str.replace(/(?:_)+([^_])/g, function ($0, $1) {
|
|
|
|
+ return $1.toUpperCase();
|
|
|
|
+ });
|
|
|
|
+ nstr = nstr.replace(nstr[0], nstr[0].toLowerCase());
|
|
|
|
+ return nstr;
|
|
|
|
+ },
|
|
|
|
|
|
// 递归获取列表信息
|
|
// 递归获取列表信息
|
|
getCol(
|
|
getCol(
|
|
@@ -840,7 +906,13 @@ export default {
|
|
let temp = tableFieldList[i];
|
|
let temp = tableFieldList[i];
|
|
if (temp.isShow) {
|
|
if (temp.isShow) {
|
|
let tempObj = {};
|
|
let tempObj = {};
|
|
- tempObj[temp.fieldName] = temp.fieldDescription;
|
|
|
|
|
|
+ if (temp.isChildren) {
|
|
|
|
+ tempObj[temp.tableName + "_" + temp.fieldName] =
|
|
|
|
+ temp.fieldDescription;
|
|
|
|
+ } else {
|
|
|
|
+ tempObj[temp.fieldName] = temp.fieldDescription;
|
|
|
|
+ }
|
|
|
|
+ console.log(tempObj);
|
|
columns.push(tempObj);
|
|
columns.push(tempObj);
|
|
}
|
|
}
|
|
if (temp.isSearch) {
|
|
if (temp.isSearch) {
|
|
@@ -849,38 +921,18 @@ export default {
|
|
if (temp.isExport) {
|
|
if (temp.isExport) {
|
|
tableExportField[temp.fieldName] = temp.fieldDescription;
|
|
tableExportField[temp.fieldName] = temp.fieldDescription;
|
|
}
|
|
}
|
|
- if (temp.children) {
|
|
|
|
- this.getCol(
|
|
|
|
- temp.children,
|
|
|
|
- columns,
|
|
|
|
- searchFieldList,
|
|
|
|
- tableExportField
|
|
|
|
- );
|
|
|
|
- }
|
|
|
|
|
|
+ // 递归
|
|
|
|
+ // if (temp.relationFieldList) {
|
|
|
|
+ // this.getCol(
|
|
|
|
+ // temp.relationFieldList,
|
|
|
|
+ // columns,
|
|
|
|
+ // searchFieldList,
|
|
|
|
+ // tableExportField
|
|
|
|
+ // );
|
|
|
|
+ // }
|
|
}
|
|
}
|
|
},
|
|
},
|
|
- // 获取列表信息
|
|
|
|
- getColumns() {
|
|
|
|
- let columns = [];
|
|
|
|
- this.getCol(this.tableFieldList, columns);
|
|
|
|
- // this.tableFieldList.forEach((item) => {
|
|
|
|
- // if (item.isShow) {
|
|
|
|
- // let tempObj = {};
|
|
|
|
- // tempObj[item.fieldName] = item.fieldDescription;
|
|
|
|
- // columns.push(tempObj);
|
|
|
|
- // if (item.children.length) {
|
|
|
|
- // item.children
|
|
|
|
- // .filter((val) => val.isShow)
|
|
|
|
- // .map((child) => {
|
|
|
|
- // let tempObj = {};
|
|
|
|
- // tempObj[child.fieldName] = child.fieldDescription;
|
|
|
|
- // columns.push(tempObj);
|
|
|
|
- // });
|
|
|
|
- // }
|
|
|
|
- // }
|
|
|
|
- // });
|
|
|
|
- return columns;
|
|
|
|
- },
|
|
|
|
|
|
+
|
|
// 预览结果回调
|
|
// 预览结果回调
|
|
async previewHandle() {
|
|
async previewHandle() {
|
|
this.$refs.formData.validate(async (valid) => {
|
|
this.$refs.formData.validate(async (valid) => {
|
|
@@ -891,19 +943,35 @@ export default {
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
// 检验表单合法性
|
|
// 检验表单合法性
|
|
- let validateParams = {
|
|
|
|
- isFieldDescrib: false,
|
|
|
|
- };
|
|
|
|
- this.validateField(this.tableFieldList, validateParams);
|
|
|
|
- console.log(validateParams);
|
|
|
|
- if (validateParams.isFieldDescrib) {
|
|
|
|
- this.$message.error("需要显示的字段描述不能为空");
|
|
|
|
|
|
+ let validRes = this.validateTableData(this.tableFieldList);
|
|
|
|
+ if (!validRes.val) {
|
|
|
|
+ this.$message.error(validRes.msg);
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
|
|
+ // let validateParams = {
|
|
|
|
+ // isFieldDescrib: false,
|
|
|
|
+ // isRelationFieldAll: false,
|
|
|
|
+ // };
|
|
|
|
+ // this.validateField(this.tableFieldList, validateParams);
|
|
|
|
+ // console.log(validateParams);
|
|
|
|
+ // if (validateParams.isFieldDescrib) {
|
|
|
|
+ // this.$message.error("需要显示的字段描述不能为空");
|
|
|
|
+ // return;
|
|
|
|
+ // }
|
|
|
|
+ // if (validateParams.isRelationFieldAll) {
|
|
|
|
+ // this.$message.error("请补全关联条件");
|
|
|
|
+ // return;
|
|
|
|
+ // }
|
|
// 拼接预览的sql查询语句
|
|
// 拼接预览的sql查询语句
|
|
this.queryParams.basicMap.sql = this.getSQLStr();
|
|
this.queryParams.basicMap.sql = this.getSQLStr();
|
|
// 获取表头信息
|
|
// 获取表头信息
|
|
- let tempColumns = this.getColumns();
|
|
|
|
|
|
+ let tempColumns = [],
|
|
|
|
+ searchFieldList = [];
|
|
|
|
+ this.getCol(this.tableFieldList, tempColumns, searchFieldList);
|
|
|
|
+ if (!searchFieldList.length) {
|
|
|
|
+ this.$message.warning("请至少选择一个包含查询字段");
|
|
|
|
+ return false;
|
|
|
|
+ }
|
|
this.columns = this.columnsHandler(tempColumns);
|
|
this.columns = this.columnsHandler(tempColumns);
|
|
this.queryParams.isAsc = this.formData.isAsc;
|
|
this.queryParams.isAsc = this.formData.isAsc;
|
|
// 发送请求获取预览数据
|
|
// 发送请求获取预览数据
|
|
@@ -912,8 +980,6 @@ export default {
|
|
res.rows.forEach((item) => {
|
|
res.rows.forEach((item) => {
|
|
this.tableDataList.push(item.resultMap);
|
|
this.tableDataList.push(item.resultMap);
|
|
});
|
|
});
|
|
- console.log(this.tableDataList);
|
|
|
|
- console.log(this.columns);
|
|
|
|
this.total = res.total;
|
|
this.total = res.total;
|
|
this.isShowPreview = true;
|
|
this.isShowPreview = true;
|
|
} else {
|
|
} else {
|
|
@@ -921,22 +987,40 @@ export default {
|
|
return false;
|
|
return false;
|
|
}
|
|
}
|
|
});
|
|
});
|
|
|
|
+
|
|
|
|
+ // this.$refs.tableForm.validate((val) => {
|
|
|
|
+ // if (val) {
|
|
|
|
+
|
|
|
|
+ // } else {
|
|
|
|
+ // this.$message.warning("请完善表单");
|
|
|
|
+ // return false;
|
|
|
|
+ // }
|
|
|
|
+ // });
|
|
},
|
|
},
|
|
// 创建回调
|
|
// 创建回调
|
|
async createHandle() {
|
|
async createHandle() {
|
|
this.$refs.formData.validate(async (valid) => {
|
|
this.$refs.formData.validate(async (valid) => {
|
|
if (valid) {
|
|
if (valid) {
|
|
// 检验表单合法性
|
|
// 检验表单合法性
|
|
- let validateParams = {
|
|
|
|
- isFieldDescrib: false,
|
|
|
|
- };
|
|
|
|
- this.validateField(this.tableFieldList, validateParams);
|
|
|
|
- console.log(validateParams);
|
|
|
|
- if (validateParams.isFieldDescrib) {
|
|
|
|
- this.$message.error("需要显示的字段描述不能为空");
|
|
|
|
|
|
+ let validRes = this.validateTableData(this.tableFieldList);
|
|
|
|
+ if (!validRes.val) {
|
|
|
|
+ this.$message.error(validRes.msg);
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+ // let validateParams = {
|
|
|
|
+ // isFieldDescrib: false,
|
|
|
|
+ // isRelationFieldAll: false,
|
|
|
|
+ // };
|
|
|
|
+ // this.validateField(this.tableFieldList, validateParams);
|
|
|
|
+ // console.log(validateParams);
|
|
|
|
+ // if (validateParams.isFieldDescrib) {
|
|
|
|
+ // this.$message.error("需要显示的字段描述不能为空");
|
|
|
|
+ // return;
|
|
|
|
+ // }
|
|
|
|
+ // if (validateParams.isRelationFieldAll) {
|
|
|
|
+ // this.$message.error("请补全关联条件");
|
|
|
|
+ // return;
|
|
|
|
+ // }
|
|
let uuid = uuidv4();
|
|
let uuid = uuidv4();
|
|
let columns = [],
|
|
let columns = [],
|
|
searchFieldList = [],
|
|
searchFieldList = [],
|