@ajaxjs/ui 1.2.5 → 1.2.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/iam/iam.d.ts +6 -0
- package/dist/iam/iam.js +44 -0
- package/dist/iam/iam.js.map +1 -0
- package/dist/iam/iam.ts +53 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/index.ts +4 -1
- package/dist/table-selector/table-selector.vue +180 -0
- package/package.json +1 -1
package/dist/iam/iam.js
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
/**
|
|
4
|
+
* 获取登录信息
|
|
5
|
+
*
|
|
6
|
+
* @returns 用户 JWT
|
|
7
|
+
*/
|
|
8
|
+
function getLoginInfo(loginUrl, thisPageUrl) {
|
|
9
|
+
const token = getQueryParam("token", false);
|
|
10
|
+
let accessToken = localStorage.getItem("accessToken");
|
|
11
|
+
if (!accessToken && !token) {
|
|
12
|
+
console.log('你未登录!');
|
|
13
|
+
let target = `${loginUrl}?web_url=${encodeURIComponent(thisPageUrl)}`;
|
|
14
|
+
confirm('你未登录。是否跳转到登录页面?') && location.assign(target);
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
if (token) {
|
|
18
|
+
accessToken = decodeURIComponent(token);
|
|
19
|
+
localStorage.setItem("accessToken", accessToken);
|
|
20
|
+
// 只需要第一次的参数,之后不需要,现在清除
|
|
21
|
+
const url = new URL(location.href); // 创建一个包含查询参数的URL
|
|
22
|
+
const params = new URLSearchParams(url.search); // 获取URL中的查询参数
|
|
23
|
+
params.delete('token'); // 删除名为'b'的参数
|
|
24
|
+
url.search = params.toString(); // 更新URL的查询参数
|
|
25
|
+
location.assign(url.href);
|
|
26
|
+
}
|
|
27
|
+
// window.JWT_TOKEN = JSON.parse(accessToken);
|
|
28
|
+
// 将 JWT Token 拆分为三个部分
|
|
29
|
+
const tokenParts = accessToken.split('.');
|
|
30
|
+
const payload = JSON.parse(atob(tokenParts[1])); // 解析载荷
|
|
31
|
+
return payload;
|
|
32
|
+
}
|
|
33
|
+
exports.default = getLoginInfo;
|
|
34
|
+
function getQueryParam(variable, isParent) {
|
|
35
|
+
var query = (isParent ? parent.location : window.location).search.substring(1);
|
|
36
|
+
var vars = query.split("&");
|
|
37
|
+
for (var i = 0; i < vars.length; i++) {
|
|
38
|
+
var pair = vars[i].split("=");
|
|
39
|
+
if (pair[0] == variable)
|
|
40
|
+
return pair[1];
|
|
41
|
+
}
|
|
42
|
+
return null;
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=iam.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"iam.js","sourceRoot":"","sources":["../../src/iam/iam.ts"],"names":[],"mappings":";;AAAA;;;;GAIG;AACH,SAAwB,YAAY,CAAC,QAAgB,EAAE,WAAmB;IACtE,MAAM,KAAK,GAAG,aAAa,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAC5C,IAAI,WAAW,GAAW,YAAY,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IAE9D,IAAI,CAAC,WAAW,IAAI,CAAC,KAAK,EAAE;QACxB,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACrB,IAAI,MAAM,GAAW,GAAG,QAAQ,YAAY,kBAAkB,CAAC,WAAW,CAAC,EAAE,CAAC;QAE9E,OAAO,CAAC,iBAAiB,CAAC,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAEtD,OAAO;KACV;IAED,IAAI,KAAK,EAAE;QACP,WAAW,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;QACxC,YAAY,CAAC,OAAO,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;QAEjD,8BAA8B;QAC9B,MAAM,GAAG,GAAQ,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,iBAAiB;QAC1D,MAAM,MAAM,GAAoB,IAAI,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAA,cAAc;QAC9E,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAA,aAAa;QACpC,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAA,aAAa;QAE5C,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;KAC7B;IAED,8CAA8C;IAE9C,sBAAsB;IACtB,MAAM,UAAU,GAAa,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IACnD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO;IAExD,OAAO,OAAO,CAAC;AACnB,CAAC;AAjCD,+BAiCC;AAED,SAAS,aAAa,CAAC,QAAgB,EAAE,QAAiB;IACtD,IAAI,KAAK,GAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IACvF,IAAI,IAAI,GAAa,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAEtC,KAAK,IAAI,CAAC,GAAW,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QAC1C,IAAI,IAAI,GAAa,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAExC,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,QAAQ;YACnB,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC;KACtB;IAED,OAAO,IAAI,CAAC;AAChB,CAAC"}
|
package/dist/iam/iam.ts
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 获取登录信息
|
|
3
|
+
*
|
|
4
|
+
* @returns 用户 JWT
|
|
5
|
+
*/
|
|
6
|
+
export default function getLoginInfo(loginUrl: string, thisPageUrl: string): any {
|
|
7
|
+
const token = getQueryParam("token", false);
|
|
8
|
+
let accessToken: string = localStorage.getItem("accessToken");
|
|
9
|
+
|
|
10
|
+
if (!accessToken && !token) {
|
|
11
|
+
console.log('你未登录!');
|
|
12
|
+
let target: string = `${loginUrl}?web_url=${encodeURIComponent(thisPageUrl)}`;
|
|
13
|
+
|
|
14
|
+
confirm('你未登录。是否跳转到登录页面?') && location.assign(target);
|
|
15
|
+
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
if (token) {
|
|
20
|
+
accessToken = decodeURIComponent(token);
|
|
21
|
+
localStorage.setItem("accessToken", accessToken);
|
|
22
|
+
|
|
23
|
+
// 只需要第一次的参数,之后不需要,现在清除
|
|
24
|
+
const url: URL = new URL(location.href); // 创建一个包含查询参数的URL
|
|
25
|
+
const params: URLSearchParams = new URLSearchParams(url.search);// 获取URL中的查询参数
|
|
26
|
+
params.delete('token');// 删除名为'b'的参数
|
|
27
|
+
url.search = params.toString();// 更新URL的查询参数
|
|
28
|
+
|
|
29
|
+
location.assign(url.href);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
// window.JWT_TOKEN = JSON.parse(accessToken);
|
|
33
|
+
|
|
34
|
+
// 将 JWT Token 拆分为三个部分
|
|
35
|
+
const tokenParts: string[] = accessToken.split('.')
|
|
36
|
+
const payload = JSON.parse(atob(tokenParts[1])); // 解析载荷
|
|
37
|
+
|
|
38
|
+
return payload;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
function getQueryParam(variable: string, isParent: boolean): string | null {
|
|
42
|
+
var query: string = (isParent ? parent.location : window.location).search.substring(1);
|
|
43
|
+
var vars: string[] = query.split("&");
|
|
44
|
+
|
|
45
|
+
for (var i: number = 0; i < vars.length; i++) {
|
|
46
|
+
var pair: string[] = vars[i].split("=");
|
|
47
|
+
|
|
48
|
+
if (pair[0] == variable)
|
|
49
|
+
return pair[1];
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
return null;
|
|
53
|
+
}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import iViewListCommon from './iView-ext/fast-iview-table/fast-iview-table.vue';
|
|
2
|
+
import IAM from './iam/iam';
|
|
2
3
|
/**
|
|
3
4
|
* 暴露各个组件
|
|
4
5
|
*/
|
|
@@ -36,5 +37,20 @@ declare const _default: {
|
|
|
36
37
|
copyBeanClean(bean: {}): {};
|
|
37
38
|
};
|
|
38
39
|
iViewListCommon: import("vue").VueConstructor<iViewListCommon<Record<string, any>, Record<string, any>, never, never, (event: string, ...args: any[]) => iViewListCommon<Record<string, any>, Record<string, any>, never, never, any>>>;
|
|
40
|
+
DataSource: {
|
|
41
|
+
data(): {};
|
|
42
|
+
mounted(): void;
|
|
43
|
+
methods: {
|
|
44
|
+
active(item: any): void;
|
|
45
|
+
getList(cb: any): void;
|
|
46
|
+
add(): void;
|
|
47
|
+
create(): void;
|
|
48
|
+
update(): void;
|
|
49
|
+
del(id: any, name: any): void;
|
|
50
|
+
test(): void;
|
|
51
|
+
};
|
|
52
|
+
};
|
|
53
|
+
TableSelector: import("vue").VueConstructor<iViewListCommon<Record<string, any>, Record<string, any>, never, never, (event: string, ...args: any[]) => iViewListCommon<Record<string, any>, Record<string, any>, never, never, any>>>;
|
|
54
|
+
IAM: typeof IAM;
|
|
39
55
|
};
|
|
40
56
|
export default _default;
|
package/dist/index.js
CHANGED
|
@@ -10,10 +10,13 @@ const list_1 = __importDefault(require("./iView-ext/fast-iview-table/list"));
|
|
|
10
10
|
const fast_iview_table_vue_1 = __importDefault(require("./iView-ext/fast-iview-table/fast-iview-table.vue"));
|
|
11
11
|
const index_vue_1 = __importDefault(require("./api-selector/index.vue"));
|
|
12
12
|
const index_vue_2 = __importDefault(require("./api-helper/index.vue"));
|
|
13
|
+
const data_source_1 = __importDefault(require("./data-source/data-source"));
|
|
14
|
+
const table_selector_vue_1 = __importDefault(require("./table-selector/table-selector.vue"));
|
|
15
|
+
const iam_1 = __importDefault(require("./iam/iam"));
|
|
13
16
|
/**
|
|
14
17
|
* 暴露各个组件
|
|
15
18
|
*/
|
|
16
19
|
exports.default = {
|
|
17
|
-
ApiHelper: index_vue_2.default, ApiSelector: index_vue_1.default, Fast_iViewTable: list_1.default, iViewListCommon: fast_iview_table_vue_1.default
|
|
20
|
+
ApiHelper: index_vue_2.default, ApiSelector: index_vue_1.default, Fast_iViewTable: list_1.default, iViewListCommon: fast_iview_table_vue_1.default, DataSource: data_source_1.default, TableSelector: table_selector_vue_1.default, IAM: iam_1.default
|
|
18
21
|
};
|
|
19
22
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA,sDAAsD;AACtD,wCAAwC;AACxC,kDAAkD;;;;;AAElD,6EAAgE;AAChE,6GAAgF;AAChF,yEAAmD;AACnD,uEAA+C;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA,sDAAsD;AACtD,wCAAwC;AACxC,kDAAkD;;;;;AAElD,6EAAgE;AAChE,6GAAgF;AAChF,yEAAmD;AACnD,uEAA+C;AAC/C,4EAAmD;AACnD,6FAAgE;AAChE,oDAA4B;AAE5B;;GAEG;AACH,kBAAe;IACX,SAAS,EAAT,mBAAS,EAAE,WAAW,EAAX,mBAAW,EAAE,eAAe,EAAf,cAAe,EAAE,eAAe,EAAf,8BAAe,EAAE,UAAU,EAAV,qBAAU,EAAE,aAAa,EAAb,4BAAa,EAAE,GAAG,EAAH,aAAG;CAC3F,CAAC"}
|
package/dist/index.ts
CHANGED
|
@@ -6,10 +6,13 @@ import Fast_iViewTable from './iView-ext/fast-iview-table/list';
|
|
|
6
6
|
import iViewListCommon from './iView-ext/fast-iview-table/fast-iview-table.vue';
|
|
7
7
|
import ApiSelector from './api-selector/index.vue';
|
|
8
8
|
import ApiHelper from './api-helper/index.vue';
|
|
9
|
+
import DataSource from './data-source/data-source';
|
|
10
|
+
import TableSelector from './table-selector/table-selector.vue';
|
|
11
|
+
import IAM from './iam/iam';
|
|
9
12
|
|
|
10
13
|
/**
|
|
11
14
|
* 暴露各个组件
|
|
12
15
|
*/
|
|
13
16
|
export default {
|
|
14
|
-
ApiHelper, ApiSelector, Fast_iViewTable, iViewListCommon
|
|
17
|
+
ApiHelper, ApiSelector, Fast_iViewTable, iViewListCommon, DataSource, TableSelector, IAM
|
|
15
18
|
};
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div class="table-selector">
|
|
3
|
+
<Row style="margin:20px 0;" type="flex" justify="center" align="middle">
|
|
4
|
+
<i-Col v-if="isCrossDb" span="6" style="padding-right:10px;">
|
|
5
|
+
<i-Select placeholder="请选择数据库名" v-model="databaseName">
|
|
6
|
+
<i-Option v-for="d in databaseList" :key="d" :value="d">{{d}}</i-Option>
|
|
7
|
+
</i-Select>
|
|
8
|
+
</i-Col>
|
|
9
|
+
<i-Col :span="isCrossDb ? 6 : 12">
|
|
10
|
+
<i-Input search enter-button placeholder="按表名模糊搜索" @on-keyup="search" ref="inputEl"></i-Input>
|
|
11
|
+
</i-Col>
|
|
12
|
+
<i-Col span="12">
|
|
13
|
+
<a @click="resetData">重置</a>
|
|
14
|
+
</i-Col>
|
|
15
|
+
</Row>
|
|
16
|
+
|
|
17
|
+
<i-Table :columns="list_column" :data="data" width="100%" @on-selection-change="onSelect" max-height="300" :loading="loading" class="table-selector-table">
|
|
18
|
+
<template slot-scope="{row}" slot="select">
|
|
19
|
+
<a @click="$emit('on-select', row, databaseName)">选择</a>
|
|
20
|
+
</template>
|
|
21
|
+
</i-Table>
|
|
22
|
+
<br />
|
|
23
|
+
|
|
24
|
+
<div class="ivu-mt ivu-text-right" v-if="!isFilter">
|
|
25
|
+
<Page :total="total" :current.sync="current" show-total :page-size="pageSize" />
|
|
26
|
+
</div>
|
|
27
|
+
</div>
|
|
28
|
+
</template>
|
|
29
|
+
|
|
30
|
+
<script>
|
|
31
|
+
import { xhr_get, getPageList } from '@ajaxjs/util/dist/util/xhr';
|
|
32
|
+
|
|
33
|
+
// 选择表
|
|
34
|
+
export default {
|
|
35
|
+
data() {
|
|
36
|
+
return {
|
|
37
|
+
// isCrossDb: false,
|
|
38
|
+
list_column: [
|
|
39
|
+
{
|
|
40
|
+
title: "#",
|
|
41
|
+
// key: 'id',
|
|
42
|
+
width: 60,
|
|
43
|
+
type: "index",
|
|
44
|
+
// type: 'selection'
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
title: "表名",
|
|
48
|
+
key: "tableName",
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
title: "说明",
|
|
52
|
+
key: "comment",
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
title: "操作",
|
|
56
|
+
slot: "select",
|
|
57
|
+
},
|
|
58
|
+
],
|
|
59
|
+
listData: [], // 显示数据
|
|
60
|
+
data: [], // 全部数据
|
|
61
|
+
total: 0,
|
|
62
|
+
current: 1,
|
|
63
|
+
pageSize: 5,
|
|
64
|
+
isFilter: false,
|
|
65
|
+
start: 0,
|
|
66
|
+
searchKeyword: "",
|
|
67
|
+
loading: false,
|
|
68
|
+
databaseList: [],
|
|
69
|
+
databaseName: "",
|
|
70
|
+
};
|
|
71
|
+
},
|
|
72
|
+
props: {
|
|
73
|
+
isCrossDb: { type: Boolean, required: true },
|
|
74
|
+
dataSourceId: { type: Number, required: true },
|
|
75
|
+
},
|
|
76
|
+
mounted() {
|
|
77
|
+
// this.isCrossDb = true;
|
|
78
|
+
this.getData();
|
|
79
|
+
},
|
|
80
|
+
methods: {
|
|
81
|
+
getData() {
|
|
82
|
+
this.loading = true;
|
|
83
|
+
let url =`${window.config.dsApiRoot}/datasource/${this.dataSourceId}/get_all_tables?start=${this.start}&limit=${this.pageSize}`;
|
|
84
|
+
// let url = `${DS_CONFIG.API_ROOT}/admin0/${this.dataSourceId}/getAllTables?start=${this.start}&limit=${this.pageSize}`;
|
|
85
|
+
|
|
86
|
+
if (this.searchKeyword) url += `&tableName=${this.searchKeyword}`;
|
|
87
|
+
if (this.databaseName) url += `&dbName=${this.databaseName}`;
|
|
88
|
+
|
|
89
|
+
xhr_get(url, (j) => {
|
|
90
|
+
if (j.status) {
|
|
91
|
+
this.data = j.data.rows;
|
|
92
|
+
this.total = j.data.total;
|
|
93
|
+
} else this.$Message.error(j.message);
|
|
94
|
+
|
|
95
|
+
this.loading = false;
|
|
96
|
+
});
|
|
97
|
+
},
|
|
98
|
+
handleChangePageSize() {
|
|
99
|
+
let start = (this.current - 1) * this.pageSize,
|
|
100
|
+
end = start + this.pageSize;
|
|
101
|
+
|
|
102
|
+
this.listData = this.data.slice(start, end);
|
|
103
|
+
},
|
|
104
|
+
onSelect(arr) {
|
|
105
|
+
arr.forEach((item) => {
|
|
106
|
+
this.data.forEach((_item) => {});
|
|
107
|
+
});
|
|
108
|
+
},
|
|
109
|
+
resetData() {
|
|
110
|
+
this.searchKeyword = "";
|
|
111
|
+
|
|
112
|
+
this.start = 0;
|
|
113
|
+
this.getData();
|
|
114
|
+
this.$refs.inputEl.$el.querySelector("input").value = "";
|
|
115
|
+
},
|
|
116
|
+
search(ev) {
|
|
117
|
+
let input = ev.target,
|
|
118
|
+
v = input.value;
|
|
119
|
+
|
|
120
|
+
if (v) {
|
|
121
|
+
this.searchKeyword = v;
|
|
122
|
+
this.start = 0;
|
|
123
|
+
this.current = 1;
|
|
124
|
+
this.getData();
|
|
125
|
+
}
|
|
126
|
+
},
|
|
127
|
+
onkeypress(ev) {
|
|
128
|
+
let input = ev.target,
|
|
129
|
+
v = input.value;
|
|
130
|
+
|
|
131
|
+
if (v) {
|
|
132
|
+
this.isFilter = true;
|
|
133
|
+
let arr = this.data.filter((item) => item.tableName.indexOf(v) != -1);
|
|
134
|
+
this.listData = arr;
|
|
135
|
+
} else {
|
|
136
|
+
this.resetData();
|
|
137
|
+
}
|
|
138
|
+
},
|
|
139
|
+
},
|
|
140
|
+
watch: {
|
|
141
|
+
/**
|
|
142
|
+
* 分页
|
|
143
|
+
*
|
|
144
|
+
* @param v
|
|
145
|
+
*/
|
|
146
|
+
current(v) {
|
|
147
|
+
this.start = (v - 1) * this.pageSize;
|
|
148
|
+
this.getData();
|
|
149
|
+
},
|
|
150
|
+
dataSourceId(id) {
|
|
151
|
+
if (id) {
|
|
152
|
+
if (this.isCrossDb)
|
|
153
|
+
aj.xhr.get(
|
|
154
|
+
`${DS_CONFIG.API_ROOT}/admin/${this.dataSourceId}/get_databases`,
|
|
155
|
+
(j) => {
|
|
156
|
+
if (j.status) {
|
|
157
|
+
// 过滤 mysql 自带的库
|
|
158
|
+
let not = ["information_schema", "performance_schema", "sys", "mysql"];
|
|
159
|
+
let arr = j.data.filter((db) => !not.includes(db));
|
|
160
|
+
this.databaseList = arr;
|
|
161
|
+
|
|
162
|
+
// 默认选中第一个
|
|
163
|
+
this.start = 0;
|
|
164
|
+
this.current = 1;
|
|
165
|
+
this.databaseName = arr[0];
|
|
166
|
+
} else this.$Message.error(j.message);
|
|
167
|
+
}
|
|
168
|
+
);
|
|
169
|
+
else {
|
|
170
|
+
this.databaseName = null;
|
|
171
|
+
this.getData();
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
},
|
|
175
|
+
databaseName(v) {
|
|
176
|
+
this.getData(); // 会重复请求
|
|
177
|
+
},
|
|
178
|
+
},
|
|
179
|
+
};
|
|
180
|
+
</script>
|