Browse Source

调整

develop
lingxiao 1 year ago
parent
commit
6e90ef0fba
9 changed files with 855 additions and 28210 deletions
  1. +5
    -0
      .env.dev
  2. +0
    -27759
      package-lock.json
  3. +1
    -0
      package.json
  4. +4
    -4
      src/router/routers.js
  5. +26
    -26
      src/utils/costum.js
  6. +473
    -250
      src/views/etl/components/edit.vue
  7. +343
    -168
      src/views/etl/index.vue
  8. +2
    -2
      src/views/record/index.vue
  9. +1
    -1
      vue.config.js

+ 5
- 0
.env.dev View File

@ -0,0 +1,5 @@
NODE_ENV = 'production'
VUE_APP_LOGIN_TITLE = ETL服务程序
VUE_APP_LOGIN_LOGO = ../assets/img/logo.png
#本地服务器
VUE_APP_BASE_URL = http://192.168.2.22:60010/

+ 0
- 27759
package-lock.json
File diff suppressed because it is too large
View File


+ 1
- 0
package.json View File

@ -3,6 +3,7 @@
"version": "0.1.0",
"private": true,
"scripts": {
"serve": "vue-cli-service serve",
"TRIM": "vue-cli-service --mode TRIM",
"JIS5300": "vue-cli-service --mode JIS5300",
"ETL": "vue-cli-service --mode ETL",


+ 4
- 4
src/router/routers.js View File

@ -3,16 +3,16 @@ const routes = [
icon: "el-icon-set-up",
path: "/etl",
name: "etl",
title: "ETL列表",
meta: { title: 'ETL列表' },
title: "ETL任务",
meta: { title: 'ETL任务' },
component: () => import("../views/etl"),
},
{
icon: "el-icon-document",
path: "/record",
name: "record",
title: "ETL记录",
meta: { title: 'ETL记录' },
title: "ETL执行日志",
meta: { title: 'ETL执行日志' },
component: () => import("../views/record"),
},
{


+ 26
- 26
src/utils/costum.js View File

@ -1,6 +1,6 @@
// 日期格式化
export function parseTime (time, pattern) {
export function parseTime(time, pattern) {
if (arguments.length === 0 || !time) {
return null
}
@ -9,14 +9,14 @@ export function parseTime (time, pattern) {
}
// 表单重置
export function resetForm (refName) {
export function resetForm(refName) {
if (this.$refs[refName]) {
this.$refs[refName].resetFields()
}
}
// 添加日期范围
export function addDateRange (params, dateRange) {
export function addDateRange(params, dateRange) {
var search = params
search.beginTime = ''
search.endTime = ''
@ -28,7 +28,7 @@ export function addDateRange (params, dateRange) {
}
// 回显数据字典
export function selectDictLabel (datas, value) {
export function selectDictLabel(datas, value) {
var actions = []
Object.keys(datas).map((key) => {
if (datas[key].dictValue === ('' + value)) {
@ -40,7 +40,7 @@ export function selectDictLabel (datas, value) {
}
// 字符串格式化(%s )
export function sprintf (str) {
export function sprintf(str) {
var args = arguments; var flag = true; var i = 1
str = str.replace(/%s/g, function () {
var arg = args[i++]
@ -54,7 +54,7 @@ export function sprintf (str) {
}
// 转换字符串,undefined,null等转化为""
export function praseStrEmpty (str) {
export function praseStrEmpty(str) {
if (!str || str === 'undefined' || str === 'null') {
return ''
}
@ -62,37 +62,37 @@ export function praseStrEmpty (str) {
}
// 表格列宽自适应
export function columnWidth (el) {
export function columnWidth(el) {
let widthList = [];
let thWidthList = [];
// 计算表头宽度
el.querySelectorAll('.has-gutter tr').forEach((tr) => {
tr.querySelectorAll('th').forEach((th, i) => {
console.log(th.lastChild.innerText, th.lastChild.innerText.length*16+20);
if(th.lastChild.innerText && th.lastChild.innerText.length){
if(thWidthList[i] && thWidthList[i].push){
thWidthList[i].push(th.lastChild.innerText.length*16+20);
}else{
thWidthList[i]=[];
thWidthList[i].push(th.lastChild.innerText.length*16+20);
// console.log(th.lastChild.innerText, th.lastChild.innerText.length*16+20);
if (th.lastChild.innerText && th.lastChild.innerText.length) {
if (thWidthList[i] && thWidthList[i].push) {
thWidthList[i].push(th.lastChild.innerText.length * 16 + 20);
} else {
thWidthList[i] = [];
thWidthList[i].push(th.lastChild.innerText.length * 16 + 20);
}
}
});
});
})
// 计算内容宽度
el.querySelectorAll('.el-table__body tr').forEach((tr) => {
tr.querySelectorAll('td').forEach((td, i) => {
if(td.lastChild.innerText && td.lastChild.innerText.length){
if(widthList[i] && widthList[i].push){
widthList[i].push(td.lastChild.innerText.length*14+20);
el.querySelectorAll('.el-table__body tr').forEach((tr) => {
tr.querySelectorAll('td').forEach((td, i) => {
if (td.lastChild.innerText && td.lastChild.innerText.length) {
if (widthList[i] && widthList[i].push) {
widthList[i].push(td.lastChild.innerText.length * 14 + 20);
widthList[i].push(thWidthList[i]?.[0] || 0);
}else{
widthList[i]=[];
widthList[i].push(td.lastChild.innerText.length*14+20);
} else {
widthList[i] = [];
widthList[i].push(td.lastChild.innerText.length * 14 + 20);
widthList[i].push(thWidthList[i]?.[0] || 0);
}
}
});
});
return widthList.map(width => Math.max(...width));
});
});
return widthList.map(width => Math.max(...width));
}

+ 473
- 250
src/views/etl/components/edit.vue View File

@ -1,15 +1,32 @@
<template>
<el-dialog :title="title" model-value width="90%" :close-on-click-modal="false" :before-close="cancel">
<el-form ref="form" :model="form" :rules="rules" label-width="130px">
<el-row>
<el-col :span="8">
<el-form-item :label="getColumnName('TaskHead-Descr')" prop="TaskHead-Descr">
<el-dialog
:title="title"
model-value
width="90%"
:close-on-click-modal="false"
:before-close="cancel"
>
<el-form ref="form" :model="form" :rules="rules" label-width="140px">
<el-row>
<el-col :span="8">
<el-form-item
:label="getColumnName('TaskHead-Descr')"
prop="TaskHead-Descr"
>
<el-input v-model="form['TaskHead-Descr']" clearable />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item :label="getColumnName('TaskHead-SourceDB')" prop="TaskHead-SourceDB">
<el-select v-model="form['TaskHead-SourceDB']" placeholder="请选择">
<el-col :span="8">
<el-form-item
:label="getColumnName('TaskHead-SourceDB')"
prop="TaskHead-SourceDB"
>
<el-select
filterable
@change="getSourceTable"
v-model="form['TaskHead-SourceDB']"
placeholder="请选择"
>
<el-option
v-for="item in dataBaseArray"
:key="item['DB-ID']"
@ -19,9 +36,17 @@
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item :label="getColumnName('TaskHead-TargetDB')" prop="TaskHead-TargetDB">
<el-select v-model="form['TaskHead-TargetDB']" placeholder="请选择">
<el-col :span="8">
<el-form-item
:label="getColumnName('TaskHead-TargetDB')"
prop="TaskHead-TargetDB"
>
<el-select
filterable
v-model="form['TaskHead-TargetDB']"
placeholder="请选择"
@change="getTargetTable"
>
<el-option
v-for="item in dataBaseArray"
:key="item['DB-ID']"
@ -31,9 +56,16 @@
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item :label="getColumnName('TaskHead-SearchType')" prop="TaskHead-SearchType">
<el-select v-model="form['TaskHead-SearchType']" placeholder="请选择">
<el-col :span="8">
<el-form-item
:label="getColumnName('TaskHead-SearchType')"
prop="TaskHead-SearchType"
>
<el-select
filterable
v-model="form['TaskHead-SearchType']"
placeholder="请选择"
>
<el-option
v-for="item in searchTypeArray"
:key="item['Stdef-StdefTyp']"
@ -43,23 +75,79 @@
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item :label="getColumnName('TaskHead-SourceTable')" prop="TaskHead-SourceTable">
<el-input v-model="form['TaskHead-SourceTable']" clearable>
<template #append>
<el-button v-if="form['TaskHead-ExtractType'] === 'TABLE'" type="primary" size="small" @click="getColumnEvent">获取表字段</el-button>
</template>
</el-input>
<el-col :span="8">
<el-form-item
:label="getColumnName('TaskHead-SourceTable')"
prop="TaskHead-SourceTable"
>
<!-- <el-input v-model="form['TaskHead-SourceTable']" clearable>
<template #append>
<el-button
v-if="form['TaskHead-ExtractType'] === 'TABLE'"
type="primary"
size="small"
@click="getColumnEvent"
>获取表字段</el-button
>
</template>
</el-input> -->
<el-select
filterable
:style="{
width:
form['TaskHead-ExtractType'] === 'TABLE'
? 'calc( 100% - 100px )'
: '100%',
}"
v-model="form['TaskHead-SourceTable']"
placeholder="请选择"
>
<el-option
v-for="item in sourceTable"
:key="item['TableInfo-TableName']"
:label="item['TableInfo-TableName']"
:value="item['TableInfo-TableName']"
/>
</el-select>
<el-button
style="width: 100px; margin: 0"
v-if="form['TaskHead-ExtractType'] === 'TABLE'"
type="primary"
size="small"
@click="getColumnEvent"
>获取表字段</el-button
>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item :label="getColumnName('TaskHead-TargetTable')" prop="TaskHead-TargetTable">
<el-input v-model="form['TaskHead-TargetTable']" clearable />
<el-col :span="8">
<el-form-item
:label="getColumnName('TaskHead-TargetTable')"
prop="TaskHead-TargetTable"
>
<el-select
filterable
v-model="form['TaskHead-TargetTable']"
placeholder="请选择"
>
<el-option
v-for="item in targetTable"
:key="item['TableInfo-TableName']"
:label="item['TableInfo-TableName']"
:value="item['TableInfo-TableName']"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item :label="getColumnName('TaskHead-ExtractType')" prop="TaskHead-ExtractType">
<el-select v-model="form['TaskHead-ExtractType']" placeholder="请选择">
<el-col :span="8">
<el-form-item
:label="getColumnName('TaskHead-ExtractType')"
prop="TaskHead-ExtractType"
>
<el-select
filterable
v-model="form['TaskHead-ExtractType']"
placeholder="请选择"
>
<el-option
v-for="item in extractTypeArray"
:key="item['Stdef-StdefTyp']"
@ -69,35 +157,88 @@
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item :label="getColumnName('TaskHead-Status')" prop="TaskHead-Status">
<el-col :span="8">
<el-form-item
:label="getColumnName('TaskHead-Status')"
prop="TaskHead-Status"
>
<el-radio-group v-model="form['TaskHead-Status']">
<el-radio
v-for="item in statusArray"
:key="item['Stdef-StdefTyp']"
:label="item['Stdef-StdefTyp']"
>{{ item['Stdef-Bez'] }}</el-radio>
>{{ item["Stdef-Bez"] }}</el-radio
>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item :label="getColumnName('TaskHead-StatusField')" prop="TaskHead-StatusField">
<el-input v-model="form['TaskHead-StatusField']" clearable />
<el-col :span="8">
<el-form-item
:label="getColumnName('TaskHead-StatusField')"
prop="TaskHead-StatusField"
>
<el-select
filterable
v-model="form['TaskHead-StatusField']"
placeholder="请选择"
>
<el-option
v-for="item in sourceTable"
:key="item['TableInfo-TableName']"
:label="item['TableInfo-TableName']"
:value="item['TableInfo-TableName']"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item :label="getColumnName('TaskHead-SortField')" prop="TaskHead-SortField">
<el-input v-model="form['TaskHead-SortField']" clearable />
<el-col :span="8">
<el-form-item
:label="getColumnName('TaskHead-SortField')"
prop="TaskHead-SortField"
>
<el-select
filterable
v-model="form['TaskHead-SortField']"
placeholder="请选择"
>
<el-option
v-for="item in sourceTable"
:key="item['TableInfo-TableName']"
:label="item['TableInfo-TableName']"
:value="item['TableInfo-TableName']"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item :label="getColumnName('TaskHead-UniqueField')" prop="TaskHead-UniqueField">
<el-input v-model="form['TaskHead-UniqueField']" clearable />
<el-col :span="8">
<el-form-item
:label="getColumnName('TaskHead-UniqueField')"
prop="TaskHead-UniqueField"
>
<el-select
filterable
v-model="form['TaskHead-UniqueField']"
placeholder="请选择"
>
<el-option
v-for="item in sourceTable"
:key="item['TableInfo-TableName']"
:label="item['TableInfo-TableName']"
:value="item['TableInfo-TableName']"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item :label="getColumnName('TaskHead-CtlParam3')" prop="TaskHead-CtlParam3">
<el-select v-model="form['TaskHead-CtlParam3']" placeholder="请选择">
<el-col :span="8">
<el-form-item
:label="getColumnName('TaskHead-CtlParam3')"
prop="TaskHead-CtlParam3"
>
<el-select
filterable
v-model="form['TaskHead-CtlParam3']"
placeholder="请选择"
>
<el-option
v-for="item in ctlParamArray"
:key="item['Stdef-StdefTyp']"
@ -107,278 +248,360 @@
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-col :span="form['TaskHead-ExtractType'] === 'SQL' ? 12 : 24">
<el-form-item :label="getColumnName('TaskHead-WhereSQL')">
<el-input v-model="form['TaskHead-WhereSQL']" :rows="3" type="textarea" placeholder="请输入" />
<el-input
v-model="form['TaskHead-WhereSQL']"
:rows="3"
placeholder="请输入"
/>
</el-form-item>
</el-col>
<el-col v-if="form['TaskHead-ExtractType'] === 'SQL'" :span="8">
<el-col v-if="form['TaskHead-ExtractType'] === 'SQL'" :span="12">
<el-form-item :label="getColumnName('TaskHead-SQLStr')">
<el-input v-model="form['TaskHead-SQLStr']" :rows="3" type="textarea" placeholder="请输入" />
<el-button type="primary" size="small" @click="getSqlTest" style="margin-top: 10px;">测试</el-button>
<el-input
style="width: calc(100% - 75px)"
v-model="form['TaskHead-SQLStr']"
:rows="3"
placeholder="请输入"
/>
<el-button
type="primary"
size="small"
@click="getSqlTest"
style="margin: 0"
>测试</el-button
>
</el-form-item>
</el-col>
<el-col v-if="form['TaskHead-ExtractType']" :span="24">
<el-table size="mini" :data="form['TaskHead-TaskLstLi']" :height="tableHeight" border>
<el-table-column prop="TaskLst-SourceField" :label="getColumnName('TaskLst-SourceField')">
<el-col v-if="form['TaskHead-ExtractType']" :span="24">
<el-table
size="mini"
:data="form['TaskHead-TaskLstLi']"
:height="tableHeight"
border
>
<el-table-column
prop="TaskLst-SourceField"
:label="getColumnName('TaskLst-SourceField')"
>
<template #default="scope">
<el-input v-model="scope.row['TaskLst-SourceField']" clearable placeholder="请输入" />
<el-input
v-model="scope.row['TaskLst-SourceField']"
clearable
placeholder="请输入"
/>
</template>
</el-table-column>
<el-table-column :label="getColumnName('TaskLst-TargetField')">
<template #default="scope">
<el-input v-model="scope.row['TaskLst-TargetField']" clearable placeholder="请输入" />
<el-input
v-model="scope.row['TaskLst-TargetField']"
clearable
placeholder="请输入"
/>
</template>
</el-table-column>
<el-table-column :label="getColumnName('TaskLst-TargetFieldType')">
<template #default="scope">
<el-select v-model="scope.row['TaskLst-TargetFieldType']" placeholder="请选择">
<el-select
filterable
v-model="scope.row['TaskLst-TargetFieldType']"
placeholder="请选择"
>
<el-option
v-for="item in targetFieldTypeArray"
:key="item['Stdef-StdefTyp']"
:label="item['Stdef-Bez']"
:value="item['Stdef-StdefTyp']"
:label="item['Stdef-Bez']"
:value="item['Stdef-StdefTyp']"
/>
</el-select>
</template>
</el-table-column>
<el-table-column :label="getColumnName('TaskLst-FieldDesc')">
<template #default="scope">
<el-input v-model="scope.row['TaskLst-FieldDesc']" clearable placeholder="请输入" />
<el-input
v-model="scope.row['TaskLst-FieldDesc']"
clearable
placeholder="请输入"
/>
</template>
</el-table-column>
<el-table-column :label="getColumnName('TaskLst-Func')">
<template #default="scope">
<el-select v-model="scope.row['TaskLst-Func']" placeholder="请选择">
<el-select
filterable
v-model="scope.row['TaskLst-Func']"
placeholder="请选择"
>
<el-option
v-for="item in funcArray"
:key="item['Stdef-StdefTyp']"
:label="item['Stdef-Bez']"
:value="item['Stdef-StdefTyp']"
:label="item['Stdef-Bez']"
:value="item['Stdef-StdefTyp']"
/>
</el-select>
</template>
</el-table-column>
<el-table-column :label="getColumnName('TaskLst-DefaultValue')">
<el-table-column :label="getColumnName('TaskLst-DefaultValue')">
<template #default="scope">
<el-input v-model="scope.row['TaskLst-DefaultValue']" clearable placeholder="请输入" />
<el-input
v-model="scope.row['TaskLst-DefaultValue']"
clearable
placeholder="请输入"
/>
</template>
</el-table-column>
<el-table-column :label="getColumnName('TaskLst-SetValue')">
<el-table-column :label="getColumnName('TaskLst-SetValue')">
<template #default="scope">
<el-input v-model="scope.row['TaskLst-SetValue']" clearable placeholder="请输入" />
<el-input
v-model="scope.row['TaskLst-SetValue']"
clearable
placeholder="请输入"
/>
</template>
</el-table-column>
<el-table-column :label="getColumnName('TaskLst-Format')">
<el-table-column :label="getColumnName('TaskLst-Format')">
<template #default="scope">
<el-input v-model="scope.row['TaskLst-Format']" clearable placeholder="请输入" />
<el-input
v-model="scope.row['TaskLst-Format']"
clearable
placeholder="请输入"
/>
</template>
</el-table-column>
<el-table-column align="center" width="100px">
<template #header>
<el-button
size="mini"
type="primary"
@click="handleAddValst()"
>新增</el-button>
<el-button size="mini" type="primary" @click="handleAddValst()"
>新增</el-button
>
</template>
<template #default="scope">
<el-button
size="mini"
type="danger"
@click="handleDeleteValst(scope.$index)"
>删除</el-button>
>删除</el-button
>
</template>
</el-table-column>
</el-table>
</el-col>
</el-row>
</el-form>
<template #footer>
<span class="dialog-footer">
<el-button type="primary" class="dialog-submit-button" @click="submitForm"> </el-button>
<el-button class="dialog-cancel-button" @click="cancel"> </el-button>
</span>
</template>
</el-dialog>
</el-row>
</el-form>
<template #footer>
<span class="dialog-footer">
<el-button
type="primary"
class="dialog-submit-button"
@click="submitForm"
> </el-button
>
<el-button class="dialog-cancel-button" @click="cancel"
> </el-button
>
</span>
</template>
</el-dialog>
</template>
<script>
import { get, post, put } from "../../../server/api.js";
export default {
name: 'editField',
props: {
item: {
default: null,
}
},
mounted() {
if (this.item) {
this.handleUpdate(this.item)
} else {
this.handleAdd()
}
},
data() {
return {
dataBaseArray: [], //
statusArray: [], //
searchTypeArray: [], //
extractTypeArray: [], //
targetFieldTypeArray: [], //
funcArray: [], //
ctlParamArray: [], //
tableHeight: 300,
title: '添加', //
form: {
'TaskHead-TaskLstLi': []
}, //
rules: { //
'TaskHead-SourceDB': [
{ required: true, message: '此项不能为空', trigger: 'blur' }
],
'TaskHead-TargetDB': [
{ required: true, message: '此项不能为空', trigger: 'blur' }
],
'TaskHead-Status': [
{ required: true, message: '此项不能为空', trigger: 'blur' }
],
'TaskHead-ExtractType': [
{ required: true, message: '此项不能为空', trigger: 'blur' }
],
'TaskHead-SearchType': [
{ required: true, message: '此项不能为空', trigger: 'blur' }
],
},
url: {
updateUrl: "/admin/etl/taskhead/updateone", //
addUrl: "/admin/etl/taskhead/insertone", //
etlStdef: "/admin/etl/database/query", //
},
}
},
created() {
//
get(this.url.etlStdef).then((res) => {
if (res.code === 200) {
this.dataBaseArray = res.data || []
}
})
//
this.getStanderOne({ 'StatId': 'TaskHead-Status' }).then(res => {
this.statusArray = res.data || []
})
//
this.getStanderOne({ 'StatId': 'TaskHead-SearchType' }).then(res => {
this.searchTypeArray = res.data || []
})
//
this.getStanderOne({ 'StatId': 'TaskHead-ExtractType' }).then(res => {
this.extractTypeArray = res.data || []
})
//
this.getStanderOne({ 'StatId': 'TaskLst-TargetFieldType' }).then(res => {
this.targetFieldTypeArray = res.data || []
})
//
this.getStanderOne({ 'StatId': 'TaskLst-Func' }).then(res => {
this.funcArray = res.data || []
})
//
this.getStanderOne({ 'StatId': 'TaskHead-CtlParam3' }).then(res => {
this.ctlParamArray = res.data || []
})
},
methods: {
/** 新增字段 */
name: "editField",
props: {
item: {
default: null,
},
dataBaseArray: {
default: [],
},
statusArray: {
default: [],
},
searchTypeArray: {
default: [],
},
extractTypeArray: {
default: [],
},
},
mounted() {
if (this.item) {
this.handleUpdate(this.item);
} else {
this.handleAdd();
}
},
data() {
return {
// dataBaseArray: [], //
// statusArray: [], //
// searchTypeArray: [], //
// extractTypeArray: [], //
targetFieldTypeArray: [], //
funcArray: [], //
ctlParamArray: [], //
tableHeight: 300,
title: "添加", //
form: {
"TaskHead-TaskLstLi": [],
}, //
rules: {
//
"TaskHead-SourceDB": [
{ required: true, message: "此项不能为空", trigger: "blur" },
],
"TaskHead-TargetDB": [
{ required: true, message: "此项不能为空", trigger: "blur" },
],
"TaskHead-Status": [
{ required: true, message: "此项不能为空", trigger: "blur" },
],
"TaskHead-ExtractType": [
{ required: true, message: "此项不能为空", trigger: "blur" },
],
"TaskHead-SearchType": [
{ required: true, message: "此项不能为空", trigger: "blur" },
],
},
url: {
updateUrl: "/admin/etl/taskhead/updateone", //
addUrl: "/admin/etl/taskhead/insertone", //
etlStdef: "/admin/etl/database/table", //
},
sourceTable: [], //
targetTable: [], //
};
},
created() {
//
this.getStanderOne({ StatId: "TaskLst-TargetFieldType" }).then((res) => {
this.targetFieldTypeArray = res.data || [];
});
//
this.getStanderOne({ StatId: "TaskLst-Func" }).then((res) => {
this.funcArray = res.data || [];
});
//
this.getStanderOne({ StatId: "TaskHead-CtlParam3" }).then((res) => {
this.ctlParamArray = res.data || [];
});
},
methods: {
//
getSourceTable(value) {
this.form["TaskHead-SourceTable"] = undefined;
this.form["TaskHead-SortField"] = undefined;
this.form["TaskHead-StatusField"] = undefined;
this.form["TaskHead-UniqueField"] = undefined;
this.form["TaskHead-TaskLstLi"] = [];
get(this.url.etlStdef, { engineId: value }).then(({ data }) => {
this.sourceTable = data || [];
});
},
//
getTargetTable(value) {
this.form["TaskHead-TargetTable"] = undefined;
get(this.url.etlStdef, { engineId: value }).then(({ data }) => {
this.targetTable = data || [];
});
},
/** 新增字段 */
handleAddValst() {
this.form['TaskHead-TaskLstLi'].push({
'TaskLst-SourceField': undefined,
'TaskLst-TargetField': undefined,
'TaskLst-TargetFieldType': undefined,
'TaskLst-FieldDesc': undefined,
'TaskLst-Func': undefined,
'TaskLst-DefaultValue': undefined,
'TaskLst-SetValue': undefined,
'TaskLst-Format': undefined
})
this.form["TaskHead-TaskLstLi"].push({});
},
/** 删除字段 */
handleDeleteValst(index) {
this.form['TaskHead-TaskLstLi'].splice(index, 1)
this.form["TaskHead-TaskLstLi"].splice(index, 1);
},
//
getSqlTest() {
let params = {
dbId: this.form["TaskHead-SourceDB"],
sql: this.form["TaskHead-SQLStr"],
};
get("/admin/etl/taskhead/testsql", params)
.then((res) => {
if (res.code === 200) {
this.msgSuccess("测试通过");
} else {
this.msgError(res.msg);
}
})
.catch((err) => {
this.msgError(err.msg);
});
},
//
getSqlTest() {
let params = {
dbId: this.form['TaskHead-SourceDB'],
sql: this.form['TaskHead-SQLStr']
}
get('/admin/etl/taskhead/testsql', params)
.then((res) => {
if (res.code === 200) {
this.msgSuccess("测试通过")
} else {
this.msgError(res.msg)
}
}).catch((err) => {
this.msgError(err.msg)
})
},
//
//
getColumnEvent() {
let params = {
dbId: this.form['TaskHead-SourceDB'],
tableName: this.form['TaskHead-SourceTable']
}
get('/admin/etl/taskhead/tablefield', params).then((res) => {
if (res.code === 200) {
let newDataArray = []
res.data.forEach(el => {
newDataArray.push({
'TaskLst-SourceField': el.fieldName,
'TaskLst-TargetFieldType': el.fieldType
})
})
this.form['TaskHead-TaskLstLi'] = newDataArray
}
})
let params = {
dbId: this.form["TaskHead-SourceDB"],
tableName: this.form["TaskHead-SourceTable"],
};
get("/admin/etl/taskhead/tablefield", params).then((res) => {
if (res.code === 200) {
let newDataArray = [];
res.data.forEach((el) => {
newDataArray.push({
"TaskLst-SourceField": el.fieldName,
"TaskLst-TargetFieldType": el.fieldType,
});
});
this.form["TaskHead-TaskLstLi"] = newDataArray;
}
});
},
cancel() {
//
this.$emit("update:isShowDialog", "");
},
handleAdd() {
//
this.title = "添加";
},
handleUpdate(row) {
//
get(`/admin/etl/taskhead/get/${row["TaskHead-TaskId"]}`).then((res) => {
this.form = res.data;
this.title = "修改";
get(this.url.etlStdef, {
engineId: this.form["TaskHead-SourceDB"],
}).then(({ data }) => {
this.sourceTable = data || [];
});
get(this.url.etlStdef, {
engineId: this.form["TaskHead-TargetDB"],
}).then(({ data }) => {
this.targetTable = data || [];
});
});
},
submitForm() {
//
this.$refs["form"].validate((valid) => {
if (valid) {
if (this.item) {
put(this.url.updateUrl, this.form).then((res) => {
if (res.code === 200) {
this.msgSuccess("修改成功");
this.$emit("editCallBack");
} else {
this.msgError(res.msg);
}
});
} else {
post(this.url.addUrl, this.form).then((res) => {
if (res.code === 200) {
this.msgSuccess("新增成功");
this.$emit("editCallBack");
} else {
this.msgError(res.msg);
}
});
}
}
});
},
cancel() { //
this.$emit('update:isShowDialog','')
},
handleAdd() { //
this.title = '添加'
},
handleUpdate(row) { //
get(`/admin/etl/taskhead/get/${row['TaskHead-TaskId']}`).then(res => {
this.form = res.data
this.title = '修改'
})
},
submitForm() { //
this.$refs['form'].validate(valid => {
if (valid) {
if (this.item) {
put(this.url.updateUrl, this.form).then(res => {
if (res.code === 200) {
this.msgSuccess('修改成功')
this.$emit('editCallBack')
} else {
this.msgError(res.msg)
}
})
} else {
post(this.url.addUrl, this.form).then(res => {
if (res.code === 200) {
this.msgSuccess('新增成功')
this.$emit('editCallBack')
} else {
this.msgError(res.msg)
}
})
}
}
})
},
}
}
</script>
},
};
</script>

+ 343
- 168
src/views/etl/index.vue View File

@ -1,172 +1,347 @@
<template>
<div class="home">
<!-- 搜索条件容器 -->
<SearchTemplate>
<el-form ref="queryForm" :model="pagination" :inline="true" class="clearfix search-content">
<el-form-item :label="getColumnName('TaskHead-SourceTable')">
<el-input v-model.trim="pagination.sourcetable" placeholder="请输入查询内容" clearable
prefix-icon="el-icon-search" size="medium" style="width: 240px" />
</el-form-item>
<!-- <el-form-item :label="getColumnName('TabColName-ColName')" style="margin-left:32px;">
<el-input v-model.trim="pagination.colname" placeholder="请输入查询内容" clearable
prefix-icon="el-icon-search" size="medium" style="width: 240px" />
</el-form-item> -->
<el-form-item>
<el-button icon="el-icon-search" size="mini" class="search-button-style" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" class="reset-button-style" @click="resetQuery">重置</el-button>
</el-form-item>
<el-form-item class="fr">
<el-button icon="el-icon-plus" class="add-button-style" @click="handleAdd">新增</el-button>
</el-form-item>
</el-form>
</SearchTemplate>
<!-- 页面主题容器 -->
<ContentContainer>
<el-table :data="dataList" ref="tableRef" v-loading="loading" size="mini" style="width: 100%" border>
<el-table-column v-for="(item, index) in headers" :key="index" :label="getColumnName(item)" show-overflow-tooltip :min-width="colWidthList[index]">
<template #default="scope">
<span v-if="item === 'TaskHead-LastModify' || item === 'TaskHead-CreateTime'">{{ parseTime(scope.row[item]) }}</span>
<span v-else-if="item === 'TaskHead-Status'">{{orderTypeTrans(scope.row[item])}}</span>
<!-- orderTypeTrans -->
<span v-else>{{ scope.row[item] }}</span>
</template>
</el-table-column>
<el-table-column label="操作" width="460" fixed="right">
<template #default="scope">
<el-button class="edit-button-style" @click="configuration(scope.row)" icon="el-icon-setting" size="small">配置</el-button>
<el-button class="edit-button-style" @click="handlePerform(scope.row)" icon="el-icon-s-open" size="small">执行</el-button>
<el-button class="edit-button-style" @click="handleUpdate(scope.row)" icon="el-icon-edit" size="small">修改</el-button>
<el-button class="edit-button-style" @click="handleDelete(scope.row)" icon="el-icon-delete" size="small">删除</el-button>
<el-button class="edit-button-style" style="width: 120px;" @click="configuringParameters(scope.row)" icon="el-icon-setting" size="small">配置脚本参数</el-button>
</template>
</el-table-column>
</el-table>
<!-- 分页 -->
<Pagination v-show="pagination.total>0" v-model:pagination="pagination" @change="getList" />
<!-- 新增/修改子组件 -->
<EditTemplate v-if="isShowDialog === 'edit' ? true : false" :item="item" v-model:isShowDialog="isShowDialog" @editCallBack="completeCallBack"></EditTemplate>
<!-- 任务配置项 -->
<Configuration v-if="isShowDialog === 'configuration'" :item="item" v-model:isShowDialog="isShowDialog" @editCallBack="completeCallBack" />
<!-- 配置脚本参数 -->
<ConfiguringParameters v-if="isShowDialog === 'configuringParameters'" :item="item" v-model:isShowDialog="isShowDialog" @editCallBack="completeCallBack" />
</ContentContainer>
</div>
<div class="home">
<!-- 搜索条件容器 -->
<SearchTemplate>
<el-form
ref="queryForm"
:model="pagination"
:inline="true"
class="clearfix search-content"
>
<el-form-item :label="getColumnName('TaskHead-SourceTable')">
<el-input
v-model.trim="pagination.sourcetable"
placeholder="请输入查询内容"
clearable
prefix-icon="el-icon-search"
size="medium"
style="width: 240px"
/>
</el-form-item>
<el-form-item>
<el-button
icon="el-icon-search"
size="mini"
class="search-button-style"
@click="handleQuery"
>搜索</el-button
>
<el-button
icon="el-icon-refresh"
size="mini"
class="reset-button-style"
@click="resetQuery"
>重置</el-button
>
</el-form-item>
<el-form-item class="fr">
<el-button
icon="el-icon-plus"
class="add-button-style"
@click="handleAdd"
>新增</el-button
>
</el-form-item>
</el-form>
</SearchTemplate>
<!-- 页面主题容器 -->
<ContentContainer>
<el-table
:data="dataList"
ref="tableRef"
v-loading="loading"
size="mini"
style="width: 100%"
border
>
<el-table-column
v-for="(item, index) in headers"
:key="index"
:label="getColumnName(item)"
show-overflow-tooltip
:min-width="colWidthList[index]"
>
<template #default="scope">
<span
v-if="
item === 'TaskHead-LastModify' || item === 'TaskHead-CreateTime'
"
>{{ parseTime(scope.row[item]) }}</span
>
<span
v-else-if="
item === 'TaskHead-SourceDB' || item === 'TaskHead-TargetDB'
"
>
{{ sourceDBTrans(scope.row[item]) }}
</span>
<span v-else-if="item === 'TaskHead-Status'">
{{ orderTypeTrans(scope.row[item], "statusArray") }}
</span>
<span v-else-if="item === 'TaskHead-SearchType'">
{{ orderTypeTrans(scope.row[item], "searchTypeArray") }}
</span>
<span v-else-if="item === 'TaskHead-ExtractStatus'">
{{ orderTypeTrans(scope.row[item].toString(), "extractStatus") }}
</span>
<span v-else-if="item === 'TaskHead-LoadStatus'">
{{ orderTypeTrans(scope.row[item].toString(), "loadStatus") }}
</span>
<span v-else-if="item === 'TaskHead-ExtractType'">
{{ orderTypeTrans(scope.row[item], "extractTypeArray") }}
</span>
<!-- orderTypeTrans -->
<span v-else>{{ scope.row[item] }}</span>
</template>
</el-table-column>
<el-table-column label="操作" width="460" fixed="right">
<template #default="scope">
<el-button
class="edit-button-style"
@click="configuration(scope.row)"
icon="el-icon-setting"
size="small"
>配置</el-button
>
<el-button
class="edit-button-style"
@click="handlePerform(scope.row)"
icon="el-icon-s-open"
size="small"
>执行</el-button
>
<el-button
class="edit-button-style"
@click="handleUpdate(scope.row)"
icon="el-icon-edit"
size="small"
>修改</el-button
>
<el-button
class="edit-button-style"
@click="handleDelete(scope.row)"
icon="el-icon-delete"
size="small"
>删除</el-button
>
<el-button
class="edit-button-style"
style="width: 120px"
@click="configuringParameters(scope.row)"
icon="el-icon-setting"
size="small"
>配置脚本参数</el-button
>
</template>
</el-table-column>
</el-table>
<!-- 分页 -->
<Pagination
v-show="pagination.total > 0"
v-model:pagination="pagination"
@change="getList"
/>
<!-- 新增/修改子组件 -->
<EditTemplate
v-if="isShowDialog === 'edit' ? true : false"
:item="item"
v-model:isShowDialog="isShowDialog"
@editCallBack="completeCallBack"
:dataBaseArray="dataBaseArray"
:statusArray="statusArray"
:searchTypeArray="searchTypeArray"
:extractTypeArray="extractTypeArray"
></EditTemplate>
<!-- 任务配置项 -->
<Configuration
v-if="isShowDialog === 'configuration'"
:item="item"
v-model:isShowDialog="isShowDialog"
@editCallBack="completeCallBack"
/>
<!-- 配置脚本参数 -->
<ConfiguringParameters
v-if="isShowDialog === 'configuringParameters'"
:item="item"
v-model:isShowDialog="isShowDialog"
@editCallBack="completeCallBack"
/>
</ContentContainer>
</div>
</template>
<script>
import SearchTemplate from "../../components/SearchTemplate.vue"
import ContentContainer from "../../components/ContentContainer.vue"
import EditTemplate from "./components/edit.vue"
import Configuration from "./components/configuration.vue"
import ConfiguringParameters from "./components/configuringParameters.vue"
import { ListMixin } from '@/mixins/ListMixin'
import { post } from "../../server/api.js";
export default {
name: "field",
components: {
SearchTemplate,
ContentContainer,
EditTemplate,
Configuration,
ConfiguringParameters
},
mixins: [ListMixin], // mixins mixins
data() {
return {
item:{}, //
statusHeadArray: [], //
headers: [
'TaskHead-TaskId',
"TaskHead-Descr",
'TaskHead-SourceDB',
'TaskHead-SourceTable',
'TaskHead-TargetDB',
'TaskHead-TargetTable',
'TaskHead-Status',
'TaskHead-ExtractStatus',
'TaskHead-LoadStatus',
'TaskHead-ExtractType',
'TaskHead-SearchType',
'TaskHead-LastModify',
'TaskHead-CreateTime'
], //
url: {
queryListUrl: "/admin/etl/taskhead/query" //
},
}
},
created() {
//
this.getStanderOne({ 'StatId': 'TaskHead-Status' }).then(res => {
this.statusHeadArray = res.data || []
})
},
methods: {
//
handlePerform(row) {
this.loading = true
this.$confirm('是否确认执行"' + row['TaskHead-TaskId'] + '"的数据项?', '警告', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
post('/admin/etl/taskhead/execute', {taskId: row['TaskHead-TaskId']})
.then(res => {
this.loading = false
if (res.code === 200) {
this.msgSuccess('执行成功')
} else {
this.msgError(res.msg)
}
}).catch(res => {
this.loading = false
this.msgError(res.msg)
})
}).catch(() => { this.loading = false})
},
//
orderTypeTrans (value) {
if (this.statusHeadArray.length > 0) {
let fieldValue = ''
this.statusHeadArray.forEach(el => {
if (value === el['Stdef-StdefTyp']) {
fieldValue = el['Stdef-Bez']
}
})
return fieldValue
}
},
//
configuration(item){
this.item=item;
this.changeDialogStatus('configuration');
},
//
configuringParameters(item) {
this.item=item;
this.changeDialogStatus('configuringParameters');
},
//
handleQuery() {
if (this.pagination.sourcetable === '') this.pagination.sourcetable = undefined
this.pagination.pageNumber = 1
this.getList()
},
//
resetQuery() {
this.pagination.sourcetable = undefined
this.handleQuery()
},
//
handleDelete(row) {
let keyName = row['TaskHead-TaskId']
let deteleUrl = `/admin/etl/taskhead/deleteone/${row['TaskHead-TaskId']}`
/*
* 第一个参数 删除数据的标志
* 第二个参数 删除的接口拼接参数
*/
this.delHanle(keyName, deteleUrl)
}
},
}
</script>
import SearchTemplate from "../../components/SearchTemplate.vue";
import ContentContainer from "../../components/ContentContainer.vue";
import EditTemplate from "./components/edit.vue";
import Configuration from "./components/configuration.vue";
import ConfiguringParameters from "./components/configuringParameters.vue";
import { ListMixin } from "@/mixins/ListMixin";
import { post, get } from "../../server/api.js";
export default {
name: "field",
components: {
SearchTemplate,
ContentContainer,
EditTemplate,
Configuration,
ConfiguringParameters,
},
mixins: [ListMixin], // mixins mixins
data() {
return {
item: {}, //
headers: [
"TaskHead-TaskId",
"TaskHead-Descr",
"TaskHead-SourceDB",
"TaskHead-SourceTable",
"TaskHead-TargetDB",
"TaskHead-TargetTable",
"TaskHead-Status",
"TaskHead-ExtractStatus",
"TaskHead-LoadStatus",
"TaskHead-ExtractType",
"TaskHead-SearchType",
"TaskHead-LastModify",
"TaskHead-CreateTime",
], //
url: {
queryListUrl: "/admin/etl/taskhead/query", //
etlStdef: "/admin/etl/database/query", //
},
dataBaseArray: [], //
statusArray: [], //
searchTypeArray: [], //
extractTypeArray: [], //
extractStatus: [], //
loadStatus: [], //
};
},
created() {
//
get(this.url.etlStdef).then((res) => {
if (res.code === 200) {
this.dataBaseArray = res.data || [];
}
});
//
this.getStanderOne({ StatId: "TaskHead-ExtractStatus" }).then((res) => {
this.extractStatus = res.data || [];
});
//
this.getStanderOne({ StatId: "TaskHead-LoadStatus" }).then((res) => {
this.loadStatus = res.data || [];
});
//
this.getStanderOne({ StatId: "TaskHead-Status" }).then((res) => {
this.statusArray = res.data || [];
});
//
this.getStanderOne({ StatId: "TaskHead-SearchType" }).then((res) => {
this.searchTypeArray = res.data || [];
});
//
this.getStanderOne({ StatId: "TaskHead-ExtractType" }).then((res) => {
this.extractTypeArray = res.data || [];
});
},
methods: {
//
handlePerform(row) {
this.loading = true;
this.$confirm(
'是否确认执行"' + row["TaskHead-TaskId"] + '"的数据项?',
"警告",
{
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
}
)
.then(() => {
post("/admin/etl/taskhead/execute", {
taskId: row["TaskHead-TaskId"],
})
.then((res) => {
this.loading = false;
if (res.code === 200) {
this.msgSuccess("执行成功");
} else {
this.msgError(res.msg);
}
})
.catch((res) => {
this.loading = false;
this.msgError(res.msg);
});
})
.catch(() => {
this.loading = false;
});
},
//
sourceDBTrans(value) {
let fieldValue = value;
if (this.dataBaseArray.length > 0) {
this.dataBaseArray.forEach((el) => {
if (value === el["DB-ID"]) {
fieldValue = el["DB-EngineName"];
}
});
}
return fieldValue;
},
//
orderTypeTrans(value, dataName) {
let fieldValue = value;
if (this[dataName].length > 0) {
this[dataName].forEach((el) => {
if (value == el["Stdef-StdefTyp"]) {
fieldValue = el["Stdef-Bez"];
}
});
}
return fieldValue;
},
//
configuration(item) {
this.item = item;
this.changeDialogStatus("configuration");
},
//
configuringParameters(item) {
this.item = item;
this.changeDialogStatus("configuringParameters");
},
//
handleQuery() {
if (this.pagination.sourcetable === "")
this.pagination.sourcetable = undefined;
this.pagination.pageNumber = 1;
this.getList();
},
//
resetQuery() {
this.pagination.sourcetable = undefined;
this.handleQuery();
},
//
handleDelete(row) {
let keyName = row["TaskHead-TaskId"];
let deteleUrl = `/admin/etl/taskhead/deleteone/${row["TaskHead-TaskId"]}`;
/*
* 第一个参数 删除数据的标志
* 第二个参数 删除的接口拼接参数
*/
this.delHanle(keyName, deteleUrl);
},
},
mounted() {
this.$nextTick(() => {
this.getList();
});
},
};
</script>

+ 2
- 2
src/views/record/index.vue View File

@ -6,11 +6,11 @@
<el-form-item :label="getColumnName('Record-TaskId')">
<!-- <el-input v-model.trim="pagination.taskId" placeholder="请输入查询内容" clearable
prefix-icon="el-icon-search" size="medium" style="width: 240px" /> -->
<el-select v-model="pagination.taskId" placeholder="请选择" style="width: 240px">
<el-select v-model="pagination.taskId" filterable placeholder="请选择" style="width: 240px">
<el-option
v-for="item in etlListArray"
:key="item['TaskHead-TaskId']"
:label="item['TaskHead-TaskId']"
:label="item['TaskHead-TaskId']+'-'+item['TaskHead-Descr']"
:value="item['TaskHead-TaskId']"
/>
</el-select>


+ 1
- 1
vue.config.js View File

@ -18,7 +18,7 @@ module.exports = {
open: true,
proxy: {
"/sylxzk/etl/": {
target: process.env.VUE_APP_BASE_URL || 'http://101.201.121.115:9010/', //要跨域的域名 目标地址
target: process.env.VUE_APP_BASE_URL || 'http://192.168.2.22:60010/', //要跨域的域名 目标地址
changeOrigin: true, //是否开启跨域 是否更改源路径
ws: true,
pathRewrite: {


Loading…
Cancel
Save