mirror of
https://gitee.com/dromara/dbswitch.git
synced 2025-09-12 23:19:06 +00:00
前端页面优化
This commit is contained in:
@@ -32,7 +32,7 @@
|
||||
基于JDBC的分批次读取源端数据库数据,并基于insert/copy方式将数据分批写入目的数据库。
|
||||
</p>
|
||||
<p>
|
||||
支持有主键表的 增量变更同步 (变化数据计算Change Data Calculate)功能。
|
||||
支持有主键表的"变化量"同步 (变化数据计算Change Data Calculate)功能。
|
||||
</p>
|
||||
</ul>
|
||||
</div>
|
||||
@@ -49,7 +49,7 @@
|
||||
<el-card class="box-card">
|
||||
<div class="text item">
|
||||
<p>
|
||||
dbswitch提供异构关系数据库间的数据迁移同步,支持绝大多数关系型数据库,包括:
|
||||
dbswitch提供异构关系数据库间的数据迁移同步,支持多种数据库,包括:
|
||||
</p>
|
||||
<ul>
|
||||
<li>甲骨文的Oracle
|
||||
@@ -75,13 +75,17 @@
|
||||
<li>国产翰高数据库HighGo
|
||||
</li>
|
||||
<li>国产神通数据库Oscar
|
||||
</li>
|
||||
</li>
|
||||
<li>国产南大通用数据库GBase8a
|
||||
</li>
|
||||
<li>Apache Hive(只支持为源端)
|
||||
</li>
|
||||
<li>Apache Hive(基于JdbcStorageHandler)
|
||||
</li>
|
||||
<li>SQLite3
|
||||
</li>
|
||||
<li>OpenGuass
|
||||
</li>
|
||||
<li>MongoDB
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</el-card>
|
||||
@@ -113,10 +117,13 @@
|
||||
├── dbswitch-product-oscar // -> oscar方言实现类
|
||||
├── dbswitch-product-gbase // -> gbase方言实现类
|
||||
├── dbswitch-product-mariadb // -> mariadb方言实现类
|
||||
├── dbswitch-product-openguass// -> openguass方言实现类
|
||||
├── dbswitch-product-db2 // -> db2方言实现类
|
||||
├── dbswitch-product-sybase // -> sybase方言实现类
|
||||
├── dbswitch-product-hive // -> hive方言实现类
|
||||
├── dbswitch-product-sqlite // -> sqlite方言实现类
|
||||
├── dbswitch-product-openguass// -> openguass方言实现类
|
||||
├── dbswitch-product-mongodb // -> mongodb方言实现类
|
||||
├── dbswitch-data // 工具入口模块,读取配置文件中的参数执行异构迁移同步
|
||||
├── dbswitch-admin // 在以上模块的基础上引入Quartz的调度服务与接口
|
||||
├── dbswitch-admin-ui // 基于Vue2的前段WEB交互页面
|
||||
|
@@ -88,6 +88,7 @@ export default {
|
||||
}).then(res => {
|
||||
if (0 === res.data.code) {
|
||||
this.connectionTypes = res.data.data;
|
||||
this.handleChooseClick('MYSQL',0);
|
||||
} else {
|
||||
if (res.data.message) {
|
||||
alert("初始化数据库类型信息失败:" + res.data.message);
|
||||
|
@@ -1,13 +1,24 @@
|
||||
<template>
|
||||
<div>
|
||||
<el-card>
|
||||
<div align="right"
|
||||
style="margin:10px 5px;"
|
||||
width="95%">
|
||||
<el-button type="primary"
|
||||
icon="el-icon-document-add"
|
||||
@click="createFormVisible=true">添加</el-button>
|
||||
<div class="connection-list-top">
|
||||
<div class="left-search-input-group">
|
||||
<div class="left-search-input">
|
||||
<el-input placeholder="请输入连接名称关键字搜索"
|
||||
v-model="keyword"
|
||||
@change="searchByKeyword"
|
||||
clearable=true
|
||||
style="width:300px">
|
||||
</el-input>
|
||||
</div>
|
||||
</div>
|
||||
<div class="right-add-button-group">
|
||||
<el-button type="primary"
|
||||
icon="el-icon-document-add"
|
||||
@click="createFormVisible=true">添加</el-button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<el-table :header-cell-style="{background:'#eef1f6',color:'#606266'}"
|
||||
:data="tableData"
|
||||
size="small"
|
||||
@@ -37,21 +48,42 @@
|
||||
<el-table-column label="操作"
|
||||
min-width="30%">
|
||||
<template slot-scope="scope">
|
||||
<el-button size="small"
|
||||
type="success"
|
||||
@click="handleMore(scope.$index, scope.row)">详情</el-button>
|
||||
<el-button size="small"
|
||||
type="warning"
|
||||
@click="handleTest(scope.$index, scope.row)">测试</el-button>
|
||||
<el-dropdown size="small"
|
||||
split-button
|
||||
type="primary">
|
||||
更多
|
||||
<el-dropdown-menu slot="dropdown">
|
||||
<el-dropdown-item @click.native.prevent="handleUpdate(scope.$index, scope.row)">修改</el-dropdown-item>
|
||||
<el-dropdown-item @click.native.prevent="handleDelete(scope.$index, scope.row)">删除</el-dropdown-item>
|
||||
</el-dropdown-menu>
|
||||
</el-dropdown>
|
||||
<el-tooltip content="测试"
|
||||
placement="top"
|
||||
effect="dark">
|
||||
<el-button size="small"
|
||||
type="danger"
|
||||
icon="el-icon-document-checked"
|
||||
@click="handleTest(scope.$index, scope.row)"
|
||||
circle></el-button>
|
||||
</el-tooltip>
|
||||
<el-tooltip content="详情"
|
||||
placement="top"
|
||||
effect="dark">
|
||||
<el-button size="small"
|
||||
type="primary"
|
||||
icon="el-icon-document"
|
||||
@click="handleMore(scope.$index, scope.row)"
|
||||
circle></el-button>
|
||||
</el-tooltip>
|
||||
<el-tooltip content="编辑"
|
||||
placement="top"
|
||||
effect="dark">
|
||||
<el-button size="small"
|
||||
type="warning"
|
||||
icon="el-icon-edit"
|
||||
@click="handleUpdate(scope.$index, scope.row)"
|
||||
circle></el-button>
|
||||
</el-tooltip>
|
||||
<el-tooltip content="删除"
|
||||
placement="top"
|
||||
effect="dark">
|
||||
<el-button size="small"
|
||||
type="success"
|
||||
icon="el-icon-delete"
|
||||
@click="handleDelete(scope.$index, scope.row)"
|
||||
circle></el-button>
|
||||
</el-tooltip>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
@@ -296,6 +328,7 @@ export default {
|
||||
data () {
|
||||
return {
|
||||
loading: true,
|
||||
keyword: null,
|
||||
lists: [],
|
||||
currentPage: 1,
|
||||
pageSize: 10,
|
||||
@@ -375,25 +408,34 @@ export default {
|
||||
methods: {
|
||||
loadData: function () {
|
||||
this.$http({
|
||||
method: "GET",
|
||||
url: "/dbswitch/admin/api/v1/connection/list/" + this.currentPage + "/" + this.pageSize
|
||||
}).then(
|
||||
res => {
|
||||
if (0 === res.data.code) {
|
||||
this.currentPage = res.data.pagination.page;
|
||||
this.pageSize = res.data.pagination.size;
|
||||
this.totalCount = res.data.pagination.total;
|
||||
this.tableData = res.data.data;
|
||||
} else {
|
||||
alert("加载任务列表失败:" + res.data.message);
|
||||
}
|
||||
method: "POST",
|
||||
headers: {
|
||||
'Content-Type': 'application/json'
|
||||
},
|
||||
url: "/dbswitch/admin/api/v1/connection/list",
|
||||
data: JSON.stringify({
|
||||
searchText: this.keyword,
|
||||
page: this.currentPage,
|
||||
size: this.pageSize
|
||||
})
|
||||
}).then(res => {
|
||||
if (0 === res.data.code) {
|
||||
this.currentPage = res.data.pagination.page;
|
||||
this.pageSize = res.data.pagination.size;
|
||||
this.totalCount = res.data.pagination.total;
|
||||
this.tableData = res.data.data;
|
||||
} else {
|
||||
alert("加载任务列表失败:" + res.data.message);
|
||||
}
|
||||
},
|
||||
function () {
|
||||
console.log("failed");
|
||||
console.log("load connection list failed");
|
||||
}
|
||||
);
|
||||
},
|
||||
|
||||
searchByKeyword: function () {
|
||||
this.loadData();
|
||||
},
|
||||
loadDatabaseTypes: function () {
|
||||
this.databaseType = [];
|
||||
this.$http({
|
||||
@@ -598,4 +640,26 @@ export default {
|
||||
height: 100%;
|
||||
overflow: auto;
|
||||
}
|
||||
.connection-list-top {
|
||||
width: 100%;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
}
|
||||
|
||||
.left-search-input-group {
|
||||
width: calc(100% - 100px);
|
||||
margin-right: auto;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
}
|
||||
.left-search-input {
|
||||
width: 300px;
|
||||
margin-right: auto;
|
||||
margin: 10px 5px;
|
||||
}
|
||||
.right-add-button-group {
|
||||
width: 100px;
|
||||
margin-left: auto;
|
||||
margin: 10px 5px;
|
||||
}
|
||||
</style>
|
||||
|
@@ -1,14 +1,24 @@
|
||||
<template>
|
||||
<div>
|
||||
<el-card>
|
||||
<div align="right"
|
||||
style="margin:10px 5px;"
|
||||
width="65%">
|
||||
<el-button type="primary"
|
||||
icon="el-icon-document-add"
|
||||
size="small"
|
||||
@click="handleCreate">添加</el-button>
|
||||
<div class="assignment-list-top">
|
||||
<div class="left-search-input-group">
|
||||
<div class="left-search-input">
|
||||
<el-input placeholder="请输入任务名称关键字搜索"
|
||||
v-model="keyword"
|
||||
clearable=true
|
||||
@change="searchByKeyword"
|
||||
style="width:300px">
|
||||
</el-input>
|
||||
</div>
|
||||
</div>
|
||||
<div class="right-add-button-group">
|
||||
<el-button type="primary"
|
||||
icon="el-icon-document-add"
|
||||
@click="handleCreate">添加</el-button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<el-table :header-cell-style="{background:'#eef1f6',color:'#606266'}"
|
||||
:data="tableData"
|
||||
size="small"
|
||||
@@ -33,29 +43,38 @@
|
||||
label="时间"
|
||||
min-width="15%"></el-table-column>
|
||||
<el-table-column label="操作"
|
||||
min-width="40%">
|
||||
min-width="30%">
|
||||
<template slot-scope="scope">
|
||||
<el-button size="small"
|
||||
type="success"
|
||||
type="danger"
|
||||
icon="el-icon-timer"
|
||||
v-if="scope.row.isPublished===false"
|
||||
@click="handlePublish(scope.$index, scope.row)"><i class="el-icon-timer el-icon--right"></i>发布</el-button>
|
||||
@click="handlePublish(scope.$index, scope.row)"
|
||||
circle>发布</el-button>
|
||||
<el-button size="small"
|
||||
type="warning"
|
||||
type="primary"
|
||||
icon="el-icon-delete-location"
|
||||
v-if="scope.row.isPublished===true"
|
||||
@click="handleRetireTask(scope.$index, scope.row)"><i class="el-icon-delete-location el-icon--right"></i>下线</el-button>
|
||||
@click="handleRetireTask(scope.$index, scope.row)"
|
||||
circle>下线</el-button>
|
||||
<el-button size="small"
|
||||
type="danger"
|
||||
icon="el-icon-video-play"
|
||||
v-if="scope.row.isPublished===true"
|
||||
@click="handleRunTask(scope.$index, scope.row)"><i class="el-icon-video-play el-icon--right"></i>执行</el-button>
|
||||
<el-dropdown size="small"
|
||||
split-button
|
||||
type="primary">
|
||||
更多
|
||||
<el-dropdown-menu slot="dropdown">
|
||||
<el-dropdown-item @click.native.prevent="handleUpdate(scope.$index, scope.row)">修改</el-dropdown-item>
|
||||
<el-dropdown-item @click.native.prevent="handleDelete(scope.$index, scope.row)">删除</el-dropdown-item>
|
||||
</el-dropdown-menu>
|
||||
</el-dropdown>
|
||||
@click="handleRunTask(scope.$index, scope.row)"
|
||||
circle>执行</el-button>
|
||||
<el-button size="small"
|
||||
type="warning"
|
||||
icon="el-icon-edit"
|
||||
v-if="scope.row.isPublished===false"
|
||||
@click="handleUpdate(scope.$index, scope.row)"
|
||||
circle>修改</el-button>
|
||||
<el-button size="small"
|
||||
type="success"
|
||||
icon="el-icon-delete"
|
||||
v-if="scope.row.isPublished===false"
|
||||
@click="handleDelete(scope.$index, scope.row)"
|
||||
circle>删除</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
@@ -82,30 +101,41 @@ export default {
|
||||
currentPage: 1,
|
||||
pageSize: 10,
|
||||
totalCount: 2,
|
||||
keyword: null,
|
||||
tableData: [],
|
||||
};
|
||||
},
|
||||
methods: {
|
||||
loadData: function () {
|
||||
this.$http({
|
||||
method: "GET",
|
||||
url: "/dbswitch/admin/api/v1/assignment/list/" + this.currentPage + "/" + this.pageSize
|
||||
}).then(
|
||||
res => {
|
||||
if (0 === res.data.code) {
|
||||
this.currentPage = res.data.pagination.page;
|
||||
this.pageSize = res.data.pagination.size;
|
||||
this.totalCount = res.data.pagination.total;
|
||||
this.tableData = res.data.data;
|
||||
} else {
|
||||
alert("加载任务列表失败:" + res.data.message);
|
||||
}
|
||||
method: "POST",
|
||||
headers: {
|
||||
'Content-Type': 'application/json'
|
||||
},
|
||||
url: "/dbswitch/admin/api/v1/assignment/list",
|
||||
data: JSON.stringify({
|
||||
searchText: this.keyword,
|
||||
page: this.currentPage,
|
||||
size: this.pageSize
|
||||
})
|
||||
}).then(res => {
|
||||
if (0 === res.data.code) {
|
||||
this.currentPage = res.data.pagination.page;
|
||||
this.pageSize = res.data.pagination.size;
|
||||
this.totalCount = res.data.pagination.total;
|
||||
this.tableData = res.data.data;
|
||||
} else {
|
||||
alert("加载任务列表失败:" + res.data.message);
|
||||
}
|
||||
},
|
||||
function () {
|
||||
console.log("failed");
|
||||
console.log("load assignments list failed");
|
||||
}
|
||||
);
|
||||
},
|
||||
searchByKeyword: function () {
|
||||
this.loadData();
|
||||
},
|
||||
boolFormatPublish (row, column) {
|
||||
if (row.isPublished === true) {
|
||||
return "是";
|
||||
@@ -256,4 +286,27 @@ export default {
|
||||
color: #c0c4cc;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.assignment-list-top {
|
||||
width: 100%;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
}
|
||||
|
||||
.left-search-input-group {
|
||||
width: calc(100% - 100px);
|
||||
margin-right: auto;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
}
|
||||
.left-search-input {
|
||||
width: 300px;
|
||||
margin-right: auto;
|
||||
margin: 10px 5px;
|
||||
}
|
||||
.right-add-button-group {
|
||||
width: 100px;
|
||||
margin-left: auto;
|
||||
margin: 10px 5px;
|
||||
}
|
||||
</style>
|
||||
|
@@ -44,23 +44,34 @@
|
||||
value="SYSTEM_SCHEDULED"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="Cron表达式"
|
||||
<el-form-item label="执行周期"
|
||||
label-width="240px"
|
||||
style="width:65%"
|
||||
v-if="createform.scheduleMode=='SYSTEM_SCHEDULED'">
|
||||
<el-col :span="10">
|
||||
<el-popover v-model="cronPopover">
|
||||
<vueCron @change="changeCreateCronExpression"
|
||||
@close="cronPopover=false"
|
||||
i18n="cn" />
|
||||
<el-input slot="reference"
|
||||
:disabled=false
|
||||
v-model="createform.cronExpression"
|
||||
placeholder="点击选择或手动输入"
|
||||
@click="cronPopover=true"
|
||||
size="small" />
|
||||
</el-popover>
|
||||
</el-col>
|
||||
<el-tooltip placement="top">
|
||||
<div slot="content">
|
||||
执行周期为CRON表达式,即可以选择以下内置的周期,也可以自行输入或粘贴合法的CRON表达式(最小间隔时间为2分钟)。
|
||||
</div>
|
||||
<i class="el-icon-question"></i>
|
||||
</el-tooltip>
|
||||
<el-select v-model="createform.cronExpression"
|
||||
filterable
|
||||
allow-create>
|
||||
<el-option label="每5分钟执行1次"
|
||||
value="0 0/5 * * * ? *"></el-option>
|
||||
<el-option label="每30分钟执行1次"
|
||||
value="0 0/30 * * * ? *"></el-option>
|
||||
<el-option label="每1小时执行1次"
|
||||
value="0 0 0/1 * * ? *"></el-option>
|
||||
<el-option label="每2小时执行1次"
|
||||
value="0 0 0/2 * * ? *"></el-option>
|
||||
<el-option label="每8小时执行1次"
|
||||
value="0 0 0/8 * * ? *"></el-option>
|
||||
<el-option label="每12小时执行1次"
|
||||
value="0 0 0/12 * * ? *"></el-option>
|
||||
<el-option label="每日0时执行1次"
|
||||
value="0 0 0 1/1 * ? *"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</div>
|
||||
<div v-show="active == 2">
|
||||
@@ -84,6 +95,7 @@
|
||||
prop="sourceSchema"
|
||||
style="width:65%">
|
||||
<el-select v-model="createform.sourceSchema"
|
||||
filterable
|
||||
@change="selectCreateChangedSourceSchema"
|
||||
placeholder="请选择">
|
||||
<el-option v-for="(item,index) in sourceConnectionSchemas"
|
||||
@@ -132,6 +144,7 @@
|
||||
</el-tooltip>
|
||||
<el-select placeholder="请选择表名"
|
||||
multiple
|
||||
filterable
|
||||
v-model="createform.sourceTables">
|
||||
<el-option v-for="(item,index) in sourceSchemaTables"
|
||||
:key="index"
|
||||
@@ -161,6 +174,7 @@
|
||||
prop="targetSchema"
|
||||
style="width:65%">
|
||||
<el-select v-model="createform.targetSchema"
|
||||
filterable
|
||||
placeholder="请选择">
|
||||
<el-option v-for="(item,index) in targetConnectionSchemas"
|
||||
:key="index"
|
||||
@@ -210,6 +224,7 @@
|
||||
</el-form-item>
|
||||
<el-form-item label="表名大小写转换"
|
||||
label-width="240px"
|
||||
:required=true
|
||||
prop="tableNameCase"
|
||||
style="width:45%">
|
||||
<el-tooltip placement="top">
|
||||
@@ -229,6 +244,7 @@
|
||||
</el-form-item>
|
||||
<el-form-item label="列名大小写转换"
|
||||
label-width="240px"
|
||||
:required=true
|
||||
prop="columnNameCase"
|
||||
style="width:45%">
|
||||
<el-tooltip placement="top">
|
||||
@@ -464,7 +480,7 @@
|
||||
</el-dialog>
|
||||
|
||||
<el-dialog v-if="active == 4"
|
||||
title="查看字段影射关系"
|
||||
title="查看字段映射关系"
|
||||
:visible.sync="columnNameMapperDialogVisible"
|
||||
:showClose="false"
|
||||
:before-close="handleClose">
|
||||
|
@@ -6,6 +6,12 @@
|
||||
<div slot="header"
|
||||
class="clearfix">
|
||||
<span>任务安排列表</span>
|
||||
<el-input placeholder="请输入关键字搜索"
|
||||
v-model="keyword"
|
||||
clearable=true
|
||||
@change="changeSearchKeyword"
|
||||
style="width:200px">
|
||||
</el-input>
|
||||
</div>
|
||||
<div class="navsBox">
|
||||
<ul>
|
||||
@@ -55,11 +61,11 @@
|
||||
<el-table-column label="日志"
|
||||
min-width="15%">
|
||||
<template slot-scope="props">
|
||||
<el-button size="small"
|
||||
type="danger"
|
||||
@click="handleShowJobLogs(props.row.jobId)">
|
||||
查看
|
||||
</el-button>
|
||||
<el-button size="small"
|
||||
type="danger"
|
||||
@click="handleShowJobLogs(props.row.jobId)">
|
||||
查看
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
@@ -146,6 +152,7 @@ export default {
|
||||
totalCount: 0,
|
||||
currentTaskAssignmentPage: 1,
|
||||
currentTaskAssignmentPageSize: 10,
|
||||
keyword: null,
|
||||
pageTaskAssignments: [],
|
||||
pageTaskAssignmentsTotalCount: 0,
|
||||
taskId: '请选择一个任务安排',
|
||||
@@ -164,8 +171,16 @@ export default {
|
||||
methods: {
|
||||
loadPageTaskAssignments: function () {
|
||||
this.$http({
|
||||
method: "GET",
|
||||
url: "/dbswitch/admin/api/v1/assignment/list/" + this.currentTaskAssignmentPage + "/" + this.currentTaskAssignmentPageSize
|
||||
method: "POST",
|
||||
headers: {
|
||||
'Content-Type': 'application/json'
|
||||
},
|
||||
url: "/dbswitch/admin/api/v1/assignment/list",
|
||||
data: JSON.stringify({
|
||||
searchText: this.keyword,
|
||||
page: this.currentTaskAssignmentPage,
|
||||
size: this.currentTaskAssignmentPageSize
|
||||
})
|
||||
}).then(res => {
|
||||
if (0 === res.data.code) {
|
||||
this.pageTaskAssignments = res.data.data;
|
||||
@@ -178,6 +193,9 @@ export default {
|
||||
}
|
||||
);
|
||||
},
|
||||
changeSearchKeyword: function () {
|
||||
this.loadPageTaskAssignments();
|
||||
},
|
||||
handleLoadPageTaskAssignments: function (currentPage) {
|
||||
this.currentTaskAssignmentPage = currentPage;
|
||||
this.loadPageTaskAssignments();
|
||||
@@ -383,5 +401,4 @@ export default {
|
||||
padding: 10px;
|
||||
width: calc(100% - 250px);
|
||||
}
|
||||
|
||||
</style>
|
||||
|
@@ -48,19 +48,30 @@
|
||||
label-width="240px"
|
||||
style="width:65%"
|
||||
v-if="updateform.scheduleMode=='SYSTEM_SCHEDULED'">
|
||||
<el-col :span="10">
|
||||
<el-popover v-model="cronPopover">
|
||||
<vueCron @change="changeUpdateCronExpression"
|
||||
@close="cronPopover=false"
|
||||
i18n="cn" />
|
||||
<el-input slot="reference"
|
||||
:disabled=false
|
||||
v-model="updateform.cronExpression"
|
||||
placeholder="点击选择或手动输入"
|
||||
@click="cronPopover=true"
|
||||
size="small" />
|
||||
</el-popover>
|
||||
</el-col>
|
||||
<el-tooltip placement="top">
|
||||
<div slot="content">
|
||||
执行周期为CRON表达式,即可以选择以下内置的周期,也可以自行输入或粘贴合法的CRON表达式(最小间隔时间为2分钟)。
|
||||
</div>
|
||||
<i class="el-icon-question"></i>
|
||||
</el-tooltip>
|
||||
<el-select v-model="updateform.cronExpression"
|
||||
filterable
|
||||
allow-create>
|
||||
<el-option label="每5分钟执行1次"
|
||||
value="0 0/5 * * * ? *"></el-option>
|
||||
<el-option label="每30分钟执行1次"
|
||||
value="0 0/30 * * * ? *"></el-option>
|
||||
<el-option label="每1小时执行1次"
|
||||
value="0 0 0/1 * * ? *"></el-option>
|
||||
<el-option label="每2小时执行1次"
|
||||
value="0 0 0/2 * * ? *"></el-option>
|
||||
<el-option label="每8小时执行1次"
|
||||
value="0 0 0/8 * * ? *"></el-option>
|
||||
<el-option label="每12小时执行1次"
|
||||
value="0 0 0/12 * * ? *"></el-option>
|
||||
<el-option label="每日0时执行1次"
|
||||
value="0 0 0 1/1 * ? *"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</div>
|
||||
<div v-show="active == 2">
|
||||
@@ -84,6 +95,7 @@
|
||||
prop="sourceSchema"
|
||||
style="width:65%">
|
||||
<el-select v-model="updateform.sourceSchema"
|
||||
filterable
|
||||
@change="selectUpdateChangedSourceSchema"
|
||||
placeholder="请选择">
|
||||
<el-option v-for="(item,index) in sourceConnectionSchemas"
|
||||
@@ -132,6 +144,7 @@
|
||||
</el-tooltip>
|
||||
<el-select placeholder="请选择表名"
|
||||
multiple
|
||||
filterable
|
||||
v-model="updateform.sourceTables">
|
||||
<el-option v-for="(item,index) in sourceSchemaTables"
|
||||
:key="index"
|
||||
@@ -186,6 +199,26 @@
|
||||
:value=false></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label-width="240px"
|
||||
:required=true
|
||||
prop="targetDropTable"
|
||||
style="width:65%">
|
||||
<span slot="label">
|
||||
<span style="color: red"><strong>删除同名表</strong> </span>
|
||||
</span>
|
||||
<el-tooltip placement="top">
|
||||
<div slot="content">
|
||||
当目标端存在同名表时,如果配置为“是”,则会删除同步表后再进行创建。如果修改了表或字段的映射关系,请将配置为“是”,否则任务执行时会因映射关系不匹配而报错。
|
||||
</div>
|
||||
<i class="el-icon-question"></i>
|
||||
</el-tooltip>
|
||||
<el-select v-model="updateform.targetDropTable">
|
||||
<el-option label='是'
|
||||
:value=true></el-option>
|
||||
<el-option label='否'
|
||||
:value=false></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="数据处理批次大小"
|
||||
label-width="240px"
|
||||
:required=true
|
||||
@@ -210,6 +243,7 @@
|
||||
</el-form-item>
|
||||
<el-form-item label="表名大小写转换"
|
||||
label-width="240px"
|
||||
:required=true
|
||||
prop="tableNameCase"
|
||||
style="width:45%">
|
||||
<el-tooltip placement="top">
|
||||
@@ -229,6 +263,7 @@
|
||||
</el-form-item>
|
||||
<el-form-item label="列名大小写转换"
|
||||
label-width="240px"
|
||||
:required=true
|
||||
prop="columnNameCase"
|
||||
style="width:45%">
|
||||
<el-tooltip placement="top">
|
||||
@@ -366,6 +401,7 @@
|
||||
<el-descriptions-item label="目地端数据源">[{{updateform.targetConnectionId}}]{{targetConnection.name}}</el-descriptions-item>
|
||||
<el-descriptions-item label="目地端schema">{{updateform.targetSchema}}</el-descriptions-item>
|
||||
<el-descriptions-item label="只创建表">{{updateform.targetOnlyCreate}}</el-descriptions-item>
|
||||
<el-descriptions-item label="删除同名表">{{updateform.targetDropTable}}</el-descriptions-item>
|
||||
<el-descriptions-item label="数据处理批次量">{{updateform.batchSize}}</el-descriptions-item>
|
||||
<el-descriptions-item label="表名大小写转换">
|
||||
<span v-if="updateform.tableNameCase == 'NONE'">
|
||||
@@ -469,7 +505,7 @@
|
||||
</el-dialog>
|
||||
|
||||
<el-dialog v-if="active == 4"
|
||||
title="查看字段影射关系"
|
||||
title="查看字段映射关系"
|
||||
:visible.sync="columnNameMapperDialogVisible"
|
||||
:showClose="false"
|
||||
:before-close="handleClose">
|
||||
@@ -948,7 +984,7 @@ export default {
|
||||
columnNameMapper: this.updateform.columnNameMapper,
|
||||
tableNameCase: this.updateform.tableNameCase,
|
||||
columnNameCase: this.updateform.columnNameCase,
|
||||
targetDropTable: true,
|
||||
targetDropTable: this.updateform.targetDropTable,
|
||||
targetOnlyCreate: this.updateform.targetOnlyCreate,
|
||||
batchSize: this.updateform.batchSize
|
||||
}
|
||||
|
@@ -51,6 +51,7 @@ public class AssignmentDetailConverter extends
|
||||
config.setTargetConnectionName(dstConn.getName());
|
||||
config.setTargetSchema(taskConfig.getTargetSchema());
|
||||
config.setTargetOnlyCreate(taskConfig.getTargetOnlyCreate());
|
||||
config.setTargetDropTable(taskConfig.getTargetDropTable());
|
||||
config.setTableNameCase(taskConfig.getTableNameCase());
|
||||
config.setColumnNameCase(taskConfig.getColumnNameCase());
|
||||
config.setTableNameMapper(taskConfig.getTableNameMap());
|
||||
|
@@ -16,6 +16,7 @@ import com.gitee.dbswitch.admin.common.response.Result;
|
||||
import com.gitee.dbswitch.admin.config.SwaggerConfig;
|
||||
import com.gitee.dbswitch.admin.model.request.AssigmentCreateRequest;
|
||||
import com.gitee.dbswitch.admin.model.request.AssigmentUpdateRequest;
|
||||
import com.gitee.dbswitch.admin.model.request.AssignmentSearchRequest;
|
||||
import com.gitee.dbswitch.admin.model.response.AssignmentDetailResponse;
|
||||
import com.gitee.dbswitch.admin.model.response.AssignmentInfoResponse;
|
||||
import com.gitee.dbswitch.admin.service.AssignmentService;
|
||||
@@ -70,11 +71,9 @@ public class AssignmentController {
|
||||
|
||||
@TokenCheck
|
||||
@ApiOperation(value = "任务列表")
|
||||
@GetMapping(value = "/list/{page}/{size}", produces = MediaType.APPLICATION_JSON_VALUE)
|
||||
public PageResult<AssignmentInfoResponse> listAssignment(
|
||||
@PathVariable("page") Integer page,
|
||||
@PathVariable("size") Integer size) {
|
||||
return assignmentService.listAll(null, page, size);
|
||||
@PostMapping(value = "/list", produces = MediaType.APPLICATION_JSON_VALUE)
|
||||
public PageResult<AssignmentInfoResponse> listAssignment(@RequestBody AssignmentSearchRequest request) {
|
||||
return assignmentService.listAll(request);
|
||||
}
|
||||
|
||||
@TokenCheck
|
||||
|
@@ -58,11 +58,9 @@ public class ConnectionController {
|
||||
|
||||
@TokenCheck
|
||||
@ApiOperation(value = "连接列表")
|
||||
@GetMapping(value = "/list/{page}/{size}", produces = MediaType.APPLICATION_JSON_VALUE)
|
||||
public PageResult<DbConnectionDetailResponse> getConnections(DbConnectionSearchRequest request,
|
||||
@PathVariable(value = "page", required = false) Integer page,
|
||||
@PathVariable(value = "size", required = false) Integer size) {
|
||||
return connectionService.getConnections(request, page, size);
|
||||
@PostMapping(value = "/list", produces = MediaType.APPLICATION_JSON_VALUE)
|
||||
public PageResult<DbConnectionDetailResponse> getConnections(@RequestBody DbConnectionSearchRequest request) {
|
||||
return connectionService.getConnections(request);
|
||||
}
|
||||
|
||||
@TokenCheck
|
||||
|
@@ -0,0 +1,22 @@
|
||||
// Copyright tang. All rights reserved.
|
||||
// https://gitee.com/inrgihc/dbswitch
|
||||
//
|
||||
// Use of this source code is governed by a BSD-style license
|
||||
//
|
||||
// Author: tang (inrgihc@126.com)
|
||||
// Date : 2020/1/2
|
||||
// Location: beijing , china
|
||||
/////////////////////////////////////////////////////////////
|
||||
package com.gitee.dbswitch.admin.model.request;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
@NoArgsConstructor
|
||||
@Data
|
||||
public class AssignmentSearchRequest {
|
||||
|
||||
private String searchText;
|
||||
private Integer page;
|
||||
private Integer size;
|
||||
}
|
@@ -17,4 +17,6 @@ import lombok.NoArgsConstructor;
|
||||
public class DbConnectionSearchRequest {
|
||||
|
||||
private String searchText;
|
||||
private Integer page;
|
||||
private Integer size;
|
||||
}
|
||||
|
@@ -91,6 +91,9 @@ public class AssignmentDetailResponse {
|
||||
@ApiModelProperty("是否只建表")
|
||||
private Boolean targetOnlyCreate;
|
||||
|
||||
@ApiModelProperty("是否删除同名表")
|
||||
private Boolean targetDropTable;
|
||||
|
||||
@ApiModelProperty("表名大小写配置")
|
||||
private CaseConvertEnum tableNameCase;
|
||||
|
||||
|
@@ -23,6 +23,7 @@ import com.gitee.dbswitch.admin.entity.AssignmentTaskEntity;
|
||||
import com.gitee.dbswitch.admin.entity.DatabaseConnectionEntity;
|
||||
import com.gitee.dbswitch.admin.model.request.AssigmentCreateRequest;
|
||||
import com.gitee.dbswitch.admin.model.request.AssigmentUpdateRequest;
|
||||
import com.gitee.dbswitch.admin.model.request.AssignmentSearchRequest;
|
||||
import com.gitee.dbswitch.admin.model.response.AssignmentDetailResponse;
|
||||
import com.gitee.dbswitch.admin.model.response.AssignmentInfoResponse;
|
||||
import com.gitee.dbswitch.admin.type.ScheduleModeEnum;
|
||||
@@ -116,12 +117,12 @@ public class AssignmentService {
|
||||
}
|
||||
}
|
||||
|
||||
public PageResult<AssignmentInfoResponse> listAll(String searchText, Integer page, Integer size) {
|
||||
public PageResult<AssignmentInfoResponse> listAll(AssignmentSearchRequest request) {
|
||||
Supplier<List<AssignmentInfoResponse>> method = () ->
|
||||
ConverterFactory.getConverter(AssignmentInfoConverter.class)
|
||||
.convert(assignmentTaskDAO.listAll(searchText));
|
||||
.convert(assignmentTaskDAO.listAll(request.getSearchText()));
|
||||
|
||||
return PageUtils.getPage(method, page, size);
|
||||
return PageUtils.getPage(method, request.getPage(), request.getSize());
|
||||
}
|
||||
|
||||
public Result<AssignmentDetailResponse> detailAssignment(Long id) {
|
||||
|
@@ -120,8 +120,7 @@ public class ConnectionService {
|
||||
}
|
||||
|
||||
public PageResult<DbConnectionDetailResponse> getConnections(
|
||||
DbConnectionSearchRequest request,
|
||||
Integer page, Integer size) {
|
||||
DbConnectionSearchRequest request) {
|
||||
Supplier<List<DbConnectionDetailResponse>> method = () -> {
|
||||
List<DatabaseConnectionEntity> databaseConnectionEntities = databaseConnectionDAO
|
||||
.listAll(request.getSearchText());
|
||||
@@ -129,7 +128,7 @@ public class ConnectionService {
|
||||
.convert(databaseConnectionEntities);
|
||||
};
|
||||
|
||||
return PageUtils.getPage(method, page, size);
|
||||
return PageUtils.getPage(method, request.getPage(), request.getSize());
|
||||
}
|
||||
|
||||
public DbConnectionDetailResponse getDetailById(Long id) {
|
||||
|
@@ -1 +1 @@
|
||||
<!DOCTYPE html><html><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><title>异构数据迁移工具</title><link href=/static/css/app.d32de86bf73d91875b8703ccf4df784b.css rel=stylesheet></head><body><div id=app></div><script type=text/javascript src=/static/js/manifest.77cf875651e80e93b9d5.js></script><script type=text/javascript src=/static/js/vendor.a3e6dafc4ec8793dd626.js></script><script type=text/javascript src=/static/js/app.a7a6316fe14fe86c7a6f.js></script></body></html>
|
||||
<!DOCTYPE html><html><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><title>异构数据迁移工具</title><link href=/static/css/app.9dc9b6fb7573c2e9456fa7a832cf0a9a.css rel=stylesheet></head><body><div id=app></div><script type=text/javascript src=/static/js/manifest.0fda45902a101132fbc2.js></script><script type=text/javascript src=/static/js/vendor.a3e6dafc4ec8793dd626.js></script><script type=text/javascript src=/static/js/app.40072d5dbf0657cecde3.js></script></body></html>
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1,2 @@
|
||||
webpackJsonp([10],{WfA7:function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var a={data:function(){return{dialogVisible:!1,loading:!0,connectionTypes:[],versionDrivers:[],isActive:-1}},methods:{loadConnectionTypes:function(){var t=this;this.$http({method:"GET",url:"/dbswitch/admin/api/v1/connection/types"}).then(function(e){0===e.data.code?(t.connectionTypes=e.data.data,t.handleChooseClick("MYSQL",0)):e.data.message&&alert("初始化数据库类型信息失败:"+e.data.message)})},handleChooseClick:function(t,e){var i=this;this.isActive=e,this.$http.get("/dbswitch/admin/api/v1/connection/"+t+"/drivers").then(function(t){0===t.data.code?i.versionDrivers=t.data.data:t.data.message&&alert("查询驱动版本信息失败,"+t.data.message)})},handleClose:function(t){this.$confirm("确认关闭?").then(function(e){t()}).catch(function(t){})},formatJarFileList:function(t,e){return t[e.property].join(";\n")}},created:function(){this.loadConnectionTypes()},beforeDestroy:function(){}},n={render:function(){var t=this,e=t.$createElement,i=t._self._c||e;return i("div",[i("el-card",[i("div",{staticClass:"container"},[i("el-card",{staticClass:"box-card"},[i("div",{staticClass:"clearfix",attrs:{slot:"header"},slot:"header"},[i("span",[t._v("数据库类型列表")])]),t._v(" "),i("div",{staticClass:"navsBox"},[i("ul",t._l(t.connectionTypes,function(e,a){return i("li",{key:a,class:{active:a==t.isActive},on:{click:function(i){return t.handleChooseClick(e.type,a)}}},[t._v("["+t._s(e.id)+"]"+t._s(e.type))])}),0)])]),t._v(" "),i("div",{staticClass:"contentBox"},[i("div",{staticStyle:{margin:"10px 5px"},attrs:{align:"right",width:"95%"}},[i("el-button",{attrs:{type:"primary",icon:"el-icon-document-add"},on:{click:function(e){t.dialogVisible=!0}}},[t._v("添加驱动")])],1),t._v(" "),i("el-table",{attrs:{"header-cell-style":{background:"#eef1f6",color:"#606266"},data:t.versionDrivers,size:"small",stripe:"",border:""}},[i("template",{slot:"empty"},[i("span",[t._v("单击左侧数据库类型来查看对应的驱动版本信息")])]),t._v(" "),i("el-table-column",{attrs:{property:"driverVersion",label:"驱动版本号","min-width":"15%"}}),t._v(" "),i("el-table-column",{attrs:{property:"driverClass",label:"驱动类名","min-width":"20%"}}),t._v(" "),i("el-table-column",{attrs:{property:"jarFiles",formatter:t.formatJarFileList,label:"驱动JAR名称","min-width":"30%"}}),t._v(" "),i("el-table-column",{attrs:{property:"driverPath",label:"驱动版本路径","min-width":"50%"}})],2)],1)],1)]),t._v(" "),i("el-dialog",{attrs:{title:"添加数据库驱动JAR说明",visible:t.dialogVisible,width:"40%","before-close":t.handleClose},on:{"update:visible":function(e){t.dialogVisible=e}}},[i("span",[t._v("请按照驱动路径所在的目录${DBSWITCH_HOME}/drivers下,在数据库类型为名称的目录下,以驱动版本号为名称创建目录并放置对应的驱动jar文件,然后重启即可生效。具体可参考https://gitee.com/inrgihc/dbswitch/tree/master/drivers下的目录结构。")]),t._v(" "),i("span"),t._v(" "),i("span",[t._v("特殊说明:驱动版本目录下的所有JAR必须无任何外部依赖,否则,也需将其依赖JAR一起放置到对应的目录下。")]),t._v(" "),i("span",{staticClass:"dialog-footer",attrs:{slot:"footer"},slot:"footer"},[i("el-button",{on:{click:function(e){t.dialogVisible=!1}}},[t._v("取 消")]),t._v(" "),i("el-button",{attrs:{type:"primary"},on:{click:function(e){t.dialogVisible=!1}}},[t._v("确 定")])],1)])],1)},staticRenderFns:[]};var s=i("VU/8")(a,n,!1,function(t){i("ZwLs")},"data-v-de622598",null);e.default=s.exports},ZwLs:function(t,e){}});
|
||||
//# sourceMappingURL=10.52c9cb61b5477d06570b.js.map
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1,2 +1,2 @@
|
||||
webpackJsonp([11],{"0eSS":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var l={data:function(){return{loading:!0,lists:[],currentPage:1,pageSize:10,totalCount:0}},methods:{loadData:function(){var e=this;this.$http.get("/dbswitch/admin/api/v1/syslog/list/2/"+this.currentPage+"/"+this.pageSize).then(function(t){e.loading=!1,0===t.data.code?(e.currentPage=t.data.pagination.page,e.pageSize=t.data.pagination.size,e.totalCount=t.data.pagination.total,e.lists=t.data.data):alert("加载数据失败:"+t.data.message)},function(t){e.$message({showClose:!0,message:"数据加载错误",type:"error"})})},boolFormat:function(e,t){return!0===e.failed?"是":"否"},handleSizeChange:function(e){this.loading=!0,this.pageSize=e,this.loadData()},handleCurrentChange:function(e){this.loading=!0,this.currentPage=e,this.loadData()},handleDetail:function(e,t){this.$message({showClose:!0,message:"查看日志详情"+e+" "+t,type:"info"})}},created:function(){this.loadData()}},o={render:function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("div",{staticStyle:{"margin-top":"15px"}},[a("el-table",{directives:[{name:"loading",rawName:"v-loading",value:e.loading,expression:"loading"}],staticStyle:{width:"100%"},attrs:{"header-cell-style":{background:"#eef1f6",color:"#606266"},"element-loading-text":"拼命加载中","element-loading-spinner":"el-icon-loading","element-loading-background":"rgba(0, 0, 0, 0.8)",data:e.lists,stripe:"",size:"small",border:""}},[a("el-table-column",{attrs:{type:"expand"},scopedSlots:e._u([{key:"default",fn:function(t){return[a("el-form",{staticClass:"demo-table-expand",attrs:{"label-position":"left",inline:""}},[a("el-form-item",{attrs:{label:"日志编号:"}},[a("span",[e._v(e._s(t.row.id))])]),e._v(" "),a("el-form-item",{attrs:{label:"日志时间:"}},[a("span",[e._v(e._s(t.row.createTime))])]),e._v(" "),a("el-form-item",{attrs:{label:"操作用户:"}},[a("span",[e._v(e._s(t.row.username))])]),e._v(" "),a("el-form-item",{attrs:{label:"请求IP地址:"}},[a("span",[e._v(e._s(t.row.ipAddress))])]),e._v(" "),a("el-form-item",{attrs:{label:"操作模块:"}},[a("span",[e._v(e._s(t.row.moduleName))])]),e._v(" "),a("el-form-item",{attrs:{label:"操作描述:"}},[a("span",[e._v(e._s(t.row.content))])]),e._v(" "),a("el-form-item",{attrs:{label:"处理耗时(ms):"}},[a("span",[e._v(e._s(t.row.elapseSeconds))])]),e._v(" "),a("el-form-item",{attrs:{label:"请求路径:"}},[a("span",[e._v(e._s(t.row.urlPath))])]),e._v(" "),a("el-form-item",{attrs:{label:"异常状态:"}},[a("span",[e._v(e._s(t.row.failed))])]),e._v(" "),a("el-form-item",{attrs:{label:""}},[a("span")]),e._v(" "),a("el-form-item",{attrs:{label:"异常日志:"}},[a("el-input",{staticStyle:{"font-size":"12px",width:"700px"},attrs:{type:"textarea",autosize:{minRows:2,maxRows:5}},model:{value:t.row.exception,callback:function(a){e.$set(t.row,"exception",a)},expression:"props.row.exception"}})],1)],1)]}}])}),e._v(" "),a("el-table-column",{attrs:{prop:"createTime",label:"日志时间","min-width":"15%","show-overflow-tooltip":!0}}),e._v(" "),a("el-table-column",{attrs:{prop:"username",label:"操作用户","min-width":"10%","show-overflow-tooltip":!0}}),e._v(" "),a("el-table-column",{attrs:{prop:"ipAddress",label:"请求IP","min-width":"10%","show-overflow-tooltip":!0}}),e._v(" "),a("el-table-column",{attrs:{prop:"moduleName",label:"操作类型","min-width":"10%","show-overflow-tooltip":!0}}),e._v(" "),a("el-table-column",{attrs:{prop:"elapseSeconds",label:"耗时(ms)","min-width":"10%","show-overflow-tooltip":!0}}),e._v(" "),a("el-table-column",{attrs:{prop:"urlPath",label:"请求路径","min-width":"20%","show-overflow-tooltip":!0}}),e._v(" "),a("el-table-column",{attrs:{prop:"failed",label:"异常",formatter:e.boolFormat,"min-width":"10%","show-overflow-tooltip":!0}})],1),e._v(" "),a("div",{staticClass:"page",attrs:{align:"right"}},[a("el-pagination",{attrs:{"current-page":e.currentPage,"page-sizes":[5,10,20,40],"page-size":e.pageSize,layout:"total, sizes, prev, pager, next, jumper",total:e.totalCount},on:{"size-change":e.handleSizeChange,"current-change":e.handleCurrentChange}})],1)],1)},staticRenderFns:[]};var n=a("VU/8")(l,o,!1,function(e){a("3GnV")},"data-v-aee4e92e",null);t.default=n.exports},"3GnV":function(e,t){}});
|
||||
//# sourceMappingURL=11.c61c0ebee350b7e0cba3.js.map
|
||||
webpackJsonp([12],{"0eSS":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var l={data:function(){return{loading:!0,lists:[],currentPage:1,pageSize:10,totalCount:0}},methods:{loadData:function(){var e=this;this.$http.get("/dbswitch/admin/api/v1/syslog/list/2/"+this.currentPage+"/"+this.pageSize).then(function(t){e.loading=!1,0===t.data.code?(e.currentPage=t.data.pagination.page,e.pageSize=t.data.pagination.size,e.totalCount=t.data.pagination.total,e.lists=t.data.data):alert("加载数据失败:"+t.data.message)},function(t){e.$message({showClose:!0,message:"数据加载错误",type:"error"})})},boolFormat:function(e,t){return!0===e.failed?"是":"否"},handleSizeChange:function(e){this.loading=!0,this.pageSize=e,this.loadData()},handleCurrentChange:function(e){this.loading=!0,this.currentPage=e,this.loadData()},handleDetail:function(e,t){this.$message({showClose:!0,message:"查看日志详情"+e+" "+t,type:"info"})}},created:function(){this.loadData()}},o={render:function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("div",{staticStyle:{"margin-top":"15px"}},[a("el-table",{directives:[{name:"loading",rawName:"v-loading",value:e.loading,expression:"loading"}],staticStyle:{width:"100%"},attrs:{"header-cell-style":{background:"#eef1f6",color:"#606266"},"element-loading-text":"拼命加载中","element-loading-spinner":"el-icon-loading","element-loading-background":"rgba(0, 0, 0, 0.8)",data:e.lists,stripe:"",size:"small",border:""}},[a("el-table-column",{attrs:{type:"expand"},scopedSlots:e._u([{key:"default",fn:function(t){return[a("el-form",{staticClass:"demo-table-expand",attrs:{"label-position":"left",inline:""}},[a("el-form-item",{attrs:{label:"日志编号:"}},[a("span",[e._v(e._s(t.row.id))])]),e._v(" "),a("el-form-item",{attrs:{label:"日志时间:"}},[a("span",[e._v(e._s(t.row.createTime))])]),e._v(" "),a("el-form-item",{attrs:{label:"操作用户:"}},[a("span",[e._v(e._s(t.row.username))])]),e._v(" "),a("el-form-item",{attrs:{label:"请求IP地址:"}},[a("span",[e._v(e._s(t.row.ipAddress))])]),e._v(" "),a("el-form-item",{attrs:{label:"操作模块:"}},[a("span",[e._v(e._s(t.row.moduleName))])]),e._v(" "),a("el-form-item",{attrs:{label:"操作描述:"}},[a("span",[e._v(e._s(t.row.content))])]),e._v(" "),a("el-form-item",{attrs:{label:"处理耗时(ms):"}},[a("span",[e._v(e._s(t.row.elapseSeconds))])]),e._v(" "),a("el-form-item",{attrs:{label:"请求路径:"}},[a("span",[e._v(e._s(t.row.urlPath))])]),e._v(" "),a("el-form-item",{attrs:{label:"异常状态:"}},[a("span",[e._v(e._s(t.row.failed))])]),e._v(" "),a("el-form-item",{attrs:{label:""}},[a("span")]),e._v(" "),a("el-form-item",{attrs:{label:"异常日志:"}},[a("el-input",{staticStyle:{"font-size":"12px",width:"700px"},attrs:{type:"textarea",autosize:{minRows:2,maxRows:5}},model:{value:t.row.exception,callback:function(a){e.$set(t.row,"exception",a)},expression:"props.row.exception"}})],1)],1)]}}])}),e._v(" "),a("el-table-column",{attrs:{prop:"createTime",label:"日志时间","min-width":"15%","show-overflow-tooltip":!0}}),e._v(" "),a("el-table-column",{attrs:{prop:"username",label:"操作用户","min-width":"10%","show-overflow-tooltip":!0}}),e._v(" "),a("el-table-column",{attrs:{prop:"ipAddress",label:"请求IP","min-width":"10%","show-overflow-tooltip":!0}}),e._v(" "),a("el-table-column",{attrs:{prop:"moduleName",label:"操作类型","min-width":"10%","show-overflow-tooltip":!0}}),e._v(" "),a("el-table-column",{attrs:{prop:"elapseSeconds",label:"耗时(ms)","min-width":"10%","show-overflow-tooltip":!0}}),e._v(" "),a("el-table-column",{attrs:{prop:"urlPath",label:"请求路径","min-width":"20%","show-overflow-tooltip":!0}}),e._v(" "),a("el-table-column",{attrs:{prop:"failed",label:"异常",formatter:e.boolFormat,"min-width":"10%","show-overflow-tooltip":!0}})],1),e._v(" "),a("div",{staticClass:"page",attrs:{align:"right"}},[a("el-pagination",{attrs:{"current-page":e.currentPage,"page-sizes":[5,10,20,40],"page-size":e.pageSize,layout:"total, sizes, prev, pager, next, jumper",total:e.totalCount},on:{"size-change":e.handleSizeChange,"current-change":e.handleCurrentChange}})],1)],1)},staticRenderFns:[]};var n=a("VU/8")(l,o,!1,function(e){a("3GnV")},"data-v-aee4e92e",null);t.default=n.exports},"3GnV":function(e,t){}});
|
||||
//# sourceMappingURL=12.e325228628d3c50a96e7.js.map
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1,2 +0,0 @@
|
||||
webpackJsonp([14],{WfA7:function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var a={data:function(){return{dialogVisible:!1,loading:!0,connectionTypes:[],versionDrivers:[],isActive:-1}},methods:{loadConnectionTypes:function(){var t=this;this.$http({method:"GET",url:"/dbswitch/admin/api/v1/connection/types"}).then(function(e){0===e.data.code?t.connectionTypes=e.data.data:e.data.message&&alert("初始化数据库类型信息失败:"+e.data.message)})},handleChooseClick:function(t,e){var i=this;this.isActive=e,this.$http.get("/dbswitch/admin/api/v1/connection/"+t+"/drivers").then(function(t){0===t.data.code?i.versionDrivers=t.data.data:t.data.message&&alert("查询驱动版本信息失败,"+t.data.message)})},handleClose:function(t){this.$confirm("确认关闭?").then(function(e){t()}).catch(function(t){})},formatJarFileList:function(t,e){return t[e.property].join(";\n")}},created:function(){this.loadConnectionTypes()},beforeDestroy:function(){}},n={render:function(){var t=this,e=t.$createElement,i=t._self._c||e;return i("div",[i("el-card",[i("div",{staticClass:"container"},[i("el-card",{staticClass:"box-card"},[i("div",{staticClass:"clearfix",attrs:{slot:"header"},slot:"header"},[i("span",[t._v("数据库类型列表")])]),t._v(" "),i("div",{staticClass:"navsBox"},[i("ul",t._l(t.connectionTypes,function(e,a){return i("li",{key:a,class:{active:a==t.isActive},on:{click:function(i){return t.handleChooseClick(e.type,a)}}},[t._v("["+t._s(e.id)+"]"+t._s(e.type))])}),0)])]),t._v(" "),i("div",{staticClass:"contentBox"},[i("div",{staticStyle:{margin:"10px 5px"},attrs:{align:"right",width:"95%"}},[i("el-button",{attrs:{type:"primary",icon:"el-icon-document-add"},on:{click:function(e){t.dialogVisible=!0}}},[t._v("添加驱动")])],1),t._v(" "),i("el-table",{attrs:{"header-cell-style":{background:"#eef1f6",color:"#606266"},data:t.versionDrivers,size:"small",stripe:"",border:""}},[i("template",{slot:"empty"},[i("span",[t._v("单击左侧数据库类型来查看对应的驱动版本信息")])]),t._v(" "),i("el-table-column",{attrs:{property:"driverVersion",label:"驱动版本号","min-width":"15%"}}),t._v(" "),i("el-table-column",{attrs:{property:"driverClass",label:"驱动类名","min-width":"20%"}}),t._v(" "),i("el-table-column",{attrs:{property:"jarFiles",formatter:t.formatJarFileList,label:"驱动JAR名称","min-width":"30%"}}),t._v(" "),i("el-table-column",{attrs:{property:"driverPath",label:"驱动版本路径","min-width":"50%"}})],2)],1)],1)]),t._v(" "),i("el-dialog",{attrs:{title:"添加数据库驱动JAR说明",visible:t.dialogVisible,width:"40%","before-close":t.handleClose},on:{"update:visible":function(e){t.dialogVisible=e}}},[i("span",[t._v("请按照驱动路径所在的目录${DBSWITCH_HOME}/drivers下,在数据库类型为名称的目录下,以驱动版本号为名称创建目录并放置对应的驱动jar文件,然后重启即可生效。具体可参考https://gitee.com/inrgihc/dbswitch/tree/master/drivers下的目录结构。")]),t._v(" "),i("span"),t._v(" "),i("span",[t._v("特殊说明:驱动版本目录下的所有JAR必须无任何外部依赖,否则,也需将其依赖JAR一起放置到对应的目录下。")]),t._v(" "),i("span",{staticClass:"dialog-footer",attrs:{slot:"footer"},slot:"footer"},[i("el-button",{on:{click:function(e){t.dialogVisible=!1}}},[t._v("取 消")]),t._v(" "),i("el-button",{attrs:{type:"primary"},on:{click:function(e){t.dialogVisible=!1}}},[t._v("确 定")])],1)])],1)},staticRenderFns:[]};var s=i("VU/8")(a,n,!1,function(t){i("g7vK")},"data-v-5f908938",null);e.default=s.exports},g7vK:function(t,e){}});
|
||||
//# sourceMappingURL=14.cf28f7dc3d2e1f1276e9.js.map
|
@@ -1,2 +1,2 @@
|
||||
webpackJsonp([12],{oQRv:function(t,e,a){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n={data:function(){return{loading:!0,lists:[],currentPage:1,pageSize:10,totalCount:0}},methods:{loadData:function(){var t=this;this.$http.get("/dbswitch/admin/api/v1/syslog/list/1/"+this.currentPage+"/"+this.pageSize).then(function(e){t.loading=!1,0===e.data.code?(t.currentPage=e.data.pagination.page,t.pageSize=e.data.pagination.size,t.totalCount=e.data.pagination.total,t.lists=e.data.data):alert("加载数据失败:"+e.data.message)},function(e){t.$message({showClose:!0,message:"数据加载错误",type:"error"})})},handleSizeChange:function(t){this.loading=!0,this.pageSize=t,this.loadData()},handleCurrentChange:function(t){this.loading=!0,this.currentPage=t,this.loadData()}},created:function(){this.loadData()}},i={render:function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticStyle:{"margin-top":"15px"}},[a("el-table",{directives:[{name:"loading",rawName:"v-loading",value:t.loading,expression:"loading"}],staticStyle:{width:"100%"},attrs:{"header-cell-style":{background:"#eef1f6",color:"#606266"},"element-loading-text":"拼命加载中","element-loading-spinner":"el-icon-loading","element-loading-background":"rgba(0, 0, 0, 0.8)",data:t.lists,stripe:"",size:"small",border:""}},[a("el-table-column",{attrs:{prop:"createTime",label:"日志时间","min-width":"15%","show-overflow-tooltip":!0}}),t._v(" "),a("el-table-column",{attrs:{prop:"ipAddress",label:"请求IP","min-width":"10%","show-overflow-tooltip":!0}}),t._v(" "),a("el-table-column",{attrs:{prop:"content",label:"操作内容","min-width":"20%","show-overflow-tooltip":!0}}),t._v(" "),a("el-table-column",{attrs:{prop:"userAgent",label:"请求代理","min-width":"50%","show-overflow-tooltip":!0}})],1),t._v(" "),a("div",{staticClass:"page",attrs:{align:"right"}},[a("el-pagination",{attrs:{"current-page":t.currentPage,"page-sizes":[5,10,20,40],"page-size":t.pageSize,layout:"total, sizes, prev, pager, next, jumper",total:t.totalCount},on:{"size-change":t.handleSizeChange,"current-change":t.handleCurrentChange}})],1)],1)},staticRenderFns:[]};var o=a("VU/8")(n,i,!1,function(t){a("rPsM")},"data-v-86686ab2",null);e.default=o.exports},rPsM:function(t,e){}});
|
||||
//# sourceMappingURL=12.e59d78e330bd5e2703c1.js.map
|
||||
webpackJsonp([14],{oQRv:function(t,e,a){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n={data:function(){return{loading:!0,lists:[],currentPage:1,pageSize:10,totalCount:0}},methods:{loadData:function(){var t=this;this.$http.get("/dbswitch/admin/api/v1/syslog/list/1/"+this.currentPage+"/"+this.pageSize).then(function(e){t.loading=!1,0===e.data.code?(t.currentPage=e.data.pagination.page,t.pageSize=e.data.pagination.size,t.totalCount=e.data.pagination.total,t.lists=e.data.data):alert("加载数据失败:"+e.data.message)},function(e){t.$message({showClose:!0,message:"数据加载错误",type:"error"})})},handleSizeChange:function(t){this.loading=!0,this.pageSize=t,this.loadData()},handleCurrentChange:function(t){this.loading=!0,this.currentPage=t,this.loadData()}},created:function(){this.loadData()}},i={render:function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticStyle:{"margin-top":"15px"}},[a("el-table",{directives:[{name:"loading",rawName:"v-loading",value:t.loading,expression:"loading"}],staticStyle:{width:"100%"},attrs:{"header-cell-style":{background:"#eef1f6",color:"#606266"},"element-loading-text":"拼命加载中","element-loading-spinner":"el-icon-loading","element-loading-background":"rgba(0, 0, 0, 0.8)",data:t.lists,stripe:"",size:"small",border:""}},[a("el-table-column",{attrs:{prop:"createTime",label:"日志时间","min-width":"15%","show-overflow-tooltip":!0}}),t._v(" "),a("el-table-column",{attrs:{prop:"ipAddress",label:"请求IP","min-width":"10%","show-overflow-tooltip":!0}}),t._v(" "),a("el-table-column",{attrs:{prop:"content",label:"操作内容","min-width":"20%","show-overflow-tooltip":!0}}),t._v(" "),a("el-table-column",{attrs:{prop:"userAgent",label:"请求代理","min-width":"50%","show-overflow-tooltip":!0}})],1),t._v(" "),a("div",{staticClass:"page",attrs:{align:"right"}},[a("el-pagination",{attrs:{"current-page":t.currentPage,"page-sizes":[5,10,20,40],"page-size":t.pageSize,layout:"total, sizes, prev, pager, next, jumper",total:t.totalCount},on:{"size-change":t.handleSizeChange,"current-change":t.handleCurrentChange}})],1)],1)},staticRenderFns:[]};var o=a("VU/8")(n,i,!1,function(t){a("rPsM")},"data-v-86686ab2",null);e.default=o.exports},rPsM:function(t,e){}});
|
||||
//# sourceMappingURL=14.ebafac48d154df9f8737.js.map
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1,2 @@
|
||||
webpackJsonp([19],{NHnr:function(n,e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var o=t("//Fk"),r=t.n(o),c=t("7+uW"),a={render:function(){var n=this.$createElement,e=this._self._c||n;return e("div",{staticClass:"body-wrapper"},[e("router-view")],1)},staticRenderFns:[]};var i=t("VU/8")({name:"App"},a,!1,function(n){t("Pibb")},"data-v-a97617c2",null).exports,u=t("/ocq");c.default.use(u.a);var l=new u.a({routes:[{path:"/",name:"首页",component:function(){return t.e(4).then(t.bind(null,"4er+"))},redirect:"/dashboard",children:[{path:"/dashboard",name:"概览",icon:"el-icon-menu",component:function(){return Promise.all([t.e(0),t.e(9)]).then(t.bind(null,"ARoL"))}},{path:"/connection",name:"连接配置",icon:"el-icon-s-order",component:function(){return t.e(8).then(t.bind(null,"Hoc+"))},children:[{path:"/connection/driver",name:"驱动配置",icon:"el-icon-help",component:function(){return t.e(10).then(t.bind(null,"WfA7"))}},{path:"/connection/list",name:"连接管理",icon:"el-icon-bank-card",component:function(){return Promise.all([t.e(0),t.e(15)]).then(t.bind(null,"qdtB"))}}]},{path:"/metadata",name:"数据目录",icon:"el-icon-coin",component:function(){return t.e(1).then(t.bind(null,"PJ2q"))}},{path:"/task",name:"任务管理",icon:"el-icon-s-tools",component:function(){return t.e(6).then(t.bind(null,"4KEO"))},children:[{path:"/task/assignment",name:"任务安排",icon:"el-icon-eleme",component:function(){return Promise.all([t.e(0),t.e(13)]).then(t.bind(null,"D0I9"))}},{path:"/task/schedule",name:"调度记录",icon:"el-icon-pie-chart",component:function(){return Promise.all([t.e(0),t.e(11)]).then(t.bind(null,"mKp/"))}}]},{path:"/log",name:"审计日志",icon:"el-icon-platform-eleme",component:function(){return t.e(7).then(t.bind(null,"QWih"))},children:[{path:"/log/access",name:"登录日志",icon:"el-icon-place",component:function(){return t.e(14).then(t.bind(null,"oQRv"))}},{path:"/log/action",name:"操作日志",icon:"el-icon-s-check",component:function(){return t.e(12).then(t.bind(null,"0eSS"))}}]},{path:"/about",name:"关于系统",icon:"el-icon-s-custom",component:function(){return t.e(2).then(t.bind(null,"m25N"))}},{path:"/user/personal",name:"个人中心",hidden:!0,component:function(){return t.e(3).then(t.bind(null,"uTKz"))}},{path:"/task/create",name:"创建任务",hidden:!0,component:function(){return Promise.all([t.e(0),t.e(17)]).then(t.bind(null,"/rCC"))}},{path:"/task/update",name:"修改任务",hidden:!0,component:function(){return Promise.all([t.e(0),t.e(16)]).then(t.bind(null,"txod"))}}]},{path:"/login",name:"登录",component:function(){return t.e(5).then(t.bind(null,"T+/8"))}}]}),p=t("mtWM"),s=t.n(p).a.create();s.interceptors.request.use(function(n){return n.url=""+n.url,n});var d=s,m=t("zL8q"),h=t.n(m),f=(t("muQq"),t("tvR6"),t("7Vno")),b=t.n(f),v=t("XLwt"),g=t.n(v);c.default.use(d),c.default.use(h.a),c.default.use(b.a),c.default.prototype.$http=d,c.default.config.productionTip=!1,c.default.prototype.$echarts=g.a,d.interceptors.request.use(function(n){var e=sessionStorage.getItem("token");return e&&(n.headers.Authorization="Bearer "+e),n},function(n){return r.a.reject(n)}),d.interceptors.response.use(function(n){return!n.data||401!==n.data.code&&403!==n.data.code&&404!==n.data.code||l.push({path:"/login"}),n},function(n){return console.log(n),r.a.reject(n.response)}),new c.default({el:"#app",router:l,components:{App:i},template:"<App/>"})},Pibb:function(n,e){},muQq:function(n,e){},tvR6:function(n,e){}},["NHnr"]);
|
||||
//# sourceMappingURL=app.40072d5dbf0657cecde3.js.map
|
@@ -1,2 +0,0 @@
|
||||
webpackJsonp([19],{NHnr:function(n,e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var o=t("//Fk"),r=t.n(o),c=t("7+uW"),a={render:function(){var n=this.$createElement,e=this._self._c||n;return e("div",{staticClass:"body-wrapper"},[e("router-view")],1)},staticRenderFns:[]};var i=t("VU/8")({name:"App"},a,!1,function(n){t("Pibb")},"data-v-a97617c2",null).exports,u=t("/ocq");c.default.use(u.a);var l=new u.a({routes:[{path:"/",name:"首页",component:function(){return t.e(4).then(t.bind(null,"4er+"))},redirect:"/dashboard",children:[{path:"/dashboard",name:"概览",icon:"el-icon-menu",component:function(){return Promise.all([t.e(0),t.e(9)]).then(t.bind(null,"ARoL"))}},{path:"/connection",name:"连接配置",icon:"el-icon-s-order",component:function(){return t.e(8).then(t.bind(null,"Hoc+"))},children:[{path:"/connection/driver",name:"驱动配置",icon:"el-icon-help",component:function(){return t.e(14).then(t.bind(null,"WfA7"))}},{path:"/connection/list",name:"连接管理",icon:"el-icon-bank-card",component:function(){return Promise.all([t.e(0),t.e(10)]).then(t.bind(null,"qdtB"))}}]},{path:"/metadata",name:"数据目录",icon:"el-icon-coin",component:function(){return t.e(1).then(t.bind(null,"PJ2q"))}},{path:"/task",name:"任务管理",icon:"el-icon-s-tools",component:function(){return t.e(6).then(t.bind(null,"4KEO"))},children:[{path:"/task/assignment",name:"任务安排",icon:"el-icon-eleme",component:function(){return Promise.all([t.e(0),t.e(16)]).then(t.bind(null,"D0I9"))}},{path:"/task/schedule",name:"调度记录",icon:"el-icon-pie-chart",component:function(){return t.e(17).then(t.bind(null,"mKp/"))}}]},{path:"/log",name:"审计日志",icon:"el-icon-platform-eleme",component:function(){return t.e(7).then(t.bind(null,"QWih"))},children:[{path:"/log/access",name:"登录日志",icon:"el-icon-place",component:function(){return t.e(12).then(t.bind(null,"oQRv"))}},{path:"/log/action",name:"操作日志",icon:"el-icon-s-check",component:function(){return t.e(11).then(t.bind(null,"0eSS"))}}]},{path:"/about",name:"关于系统",icon:"el-icon-s-custom",component:function(){return t.e(2).then(t.bind(null,"m25N"))}},{path:"/user/personal",name:"个人中心",hidden:!0,component:function(){return t.e(3).then(t.bind(null,"uTKz"))}},{path:"/task/create",name:"创建任务",hidden:!0,component:function(){return Promise.all([t.e(0),t.e(13)]).then(t.bind(null,"/rCC"))}},{path:"/task/update",name:"修改任务",hidden:!0,component:function(){return Promise.all([t.e(0),t.e(15)]).then(t.bind(null,"txod"))}}]},{path:"/login",name:"登录",component:function(){return t.e(5).then(t.bind(null,"T+/8"))}}]}),p=t("mtWM"),d=t.n(p).a.create();d.interceptors.request.use(function(n){return n.url=""+n.url,n});var s=d,h=t("zL8q"),m=t.n(h),f=(t("muQq"),t("tvR6"),t("7Vno")),b=t.n(f),v=t("XLwt"),g=t.n(v);c.default.use(s),c.default.use(m.a),c.default.use(b.a),c.default.prototype.$http=s,c.default.config.productionTip=!1,c.default.prototype.$echarts=g.a,s.interceptors.request.use(function(n){var e=sessionStorage.getItem("token");return e&&(n.headers.Authorization="Bearer "+e),n},function(n){return r.a.reject(n)}),s.interceptors.response.use(function(n){return!n.data||401!==n.data.code&&403!==n.data.code&&404!==n.data.code||l.push({path:"/login"}),n},function(n){return console.log(n),r.a.reject(n.response)}),new c.default({el:"#app",router:l,components:{App:i},template:"<App/>"})},Pibb:function(n,e){},muQq:function(n,e){},tvR6:function(n,e){}},["NHnr"]);
|
||||
//# sourceMappingURL=app.a7a6316fe14fe86c7a6f.js.map
|
@@ -0,0 +1,2 @@
|
||||
!function(e){var n=window.webpackJsonp;window.webpackJsonp=function(r,c,o){for(var f,d,i,u=0,s=[];u<r.length;u++)d=r[u],t[d]&&s.push(t[d][0]),t[d]=0;for(f in c)Object.prototype.hasOwnProperty.call(c,f)&&(e[f]=c[f]);for(n&&n(r,c,o);s.length;)s.shift()();if(o)for(u=0;u<o.length;u++)i=a(a.s=o[u]);return i};var r={},t={20:0};function a(n){if(r[n])return r[n].exports;var t=r[n]={i:n,l:!1,exports:{}};return e[n].call(t.exports,t,t.exports,a),t.l=!0,t.exports}a.e=function(e){var n=t[e];if(0===n)return new Promise(function(e){e()});if(n)return n[2];var r=new Promise(function(r,a){n=t[e]=[r,a]});n[2]=r;var c=document.getElementsByTagName("head")[0],o=document.createElement("script");o.type="text/javascript",o.charset="utf-8",o.async=!0,o.timeout=12e4,a.nc&&o.setAttribute("nonce",a.nc),o.src=a.p+"static/js/"+e+"."+{0:"ca67e87d8c000a42e592",1:"d0db995e4146b5e72cf1",2:"5d584a7e3f04041f0d4a",3:"d4c1dc7b68edb49b61d2",4:"c4abd62fbe15189d37a5",5:"837a4a67f1fcf6ee6c6a",6:"7f56c2238fb7e4ee2ecd",7:"d5dc80a855f66a3208ff",8:"0b82703c6f3d2dd72354",9:"9b19245845e7fa49300a",10:"52c9cb61b5477d06570b",11:"4f4f786a1368f729ad67",12:"e325228628d3c50a96e7",13:"e070a44a625afa974861",14:"ebafac48d154df9f8737",15:"29f439cdda1d78880f9c",16:"8aeafd6e382957be1c15",17:"830d0c7cf66ae4ca86c3"}[e]+".js";var f=setTimeout(d,12e4);function d(){o.onerror=o.onload=null,clearTimeout(f);var n=t[e];0!==n&&(n&&n[1](new Error("Loading chunk "+e+" failed.")),t[e]=void 0)}return o.onerror=o.onload=d,c.appendChild(o),r},a.m=e,a.c=r,a.d=function(e,n,r){a.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},a.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return a.d(n,"a",n),n},a.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},a.p="/",a.oe=function(e){throw console.error(e),e}}([]);
|
||||
//# sourceMappingURL=manifest.0fda45902a101132fbc2.js.map
|
@@ -1,2 +0,0 @@
|
||||
!function(e){var n=window.webpackJsonp;window.webpackJsonp=function(r,o,a){for(var f,d,i,u=0,b=[];u<r.length;u++)d=r[u],t[d]&&b.push(t[d][0]),t[d]=0;for(f in o)Object.prototype.hasOwnProperty.call(o,f)&&(e[f]=o[f]);for(n&&n(r,o,a);b.length;)b.shift()();if(a)for(u=0;u<a.length;u++)i=c(c.s=a[u]);return i};var r={},t={20:0};function c(n){if(r[n])return r[n].exports;var t=r[n]={i:n,l:!1,exports:{}};return e[n].call(t.exports,t,t.exports,c),t.l=!0,t.exports}c.e=function(e){var n=t[e];if(0===n)return new Promise(function(e){e()});if(n)return n[2];var r=new Promise(function(r,c){n=t[e]=[r,c]});n[2]=r;var o=document.getElementsByTagName("head")[0],a=document.createElement("script");a.type="text/javascript",a.charset="utf-8",a.async=!0,a.timeout=12e4,c.nc&&a.setAttribute("nonce",c.nc),a.src=c.p+"static/js/"+e+"."+{0:"ca67e87d8c000a42e592",1:"d0db995e4146b5e72cf1",2:"e8530496bfc5633541cd",3:"d4c1dc7b68edb49b61d2",4:"c4abd62fbe15189d37a5",5:"837a4a67f1fcf6ee6c6a",6:"7f56c2238fb7e4ee2ecd",7:"d5dc80a855f66a3208ff",8:"0b82703c6f3d2dd72354",9:"9b19245845e7fa49300a",10:"b9e09bc05c7d8239e93b",11:"c61c0ebee350b7e0cba3",12:"e59d78e330bd5e2703c1",13:"1a23a103b05b99d58001",14:"cf28f7dc3d2e1f1276e9",15:"c8f8271138d0a2e8e5cc",16:"aeaac7f46732356168a8",17:"953b93ad4217ddda621f"}[e]+".js";var f=setTimeout(d,12e4);function d(){a.onerror=a.onload=null,clearTimeout(f);var n=t[e];0!==n&&(n&&n[1](new Error("Loading chunk "+e+" failed.")),t[e]=void 0)}return a.onerror=a.onload=d,o.appendChild(a),r},c.m=e,c.c=r,c.d=function(e,n,r){c.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},c.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return c.d(n,"a",n),n},c.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},c.p="/",c.oe=function(e){throw console.error(e),e}}([]);
|
||||
//# sourceMappingURL=manifest.77cf875651e80e93b9d5.js.map
|
Reference in New Issue
Block a user