efront 3.5.11 → 3.7.0
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/apps/pivot/api.yml +8 -5
- package/apps/pivot/auth/login.js +20 -4
- package/apps/pivot/home/welcome.html +5 -1
- package/apps/pivot/link/list.html +12 -0
- package/apps/pivot/link/list.js +25 -0
- package/apps/pivot/link/list.less +9 -0
- package/apps/pivot/main.js +3 -0
- package/apps/pivot/main.less +1 -0
- package/apps/pivot/menu.yml +2 -1
- package/apps/pivot/share/edit.html +1 -1
- package/apps/pivot/share/edit.js +4 -2
- package/apps/pivot/share/list.js +41 -21
- package/apps/pivot/share/list.less +7 -0
- package/apps/pivot/token/edit.js +9 -0
- package/apps/pivot/token/list.js +13 -0
- package/coms/basic/JSAM.js +8 -0
- package/coms/basic/loader.js +43 -18
- package/coms/basic/refilm_decode.js +2 -2
- package/coms/crypt/encode62.js +3 -1
- package/coms/frame/edit.html +10 -0
- package/coms/frame/edit.js +29 -0
- package/coms/frame/edit.less +0 -0
- package/coms/frame/list.html +4 -0
- package/coms/frame/list.js +64 -0
- package/coms/frame/list.less +3 -0
- package/coms/zimoli/LoadingArray.ts +3 -0
- package/coms/zimoli/data.js +11 -9
- package/coms/zimoli/dispatch.js +13 -6
- package/coms/zimoli/encode62.js +3 -2
- package/coms/zimoli/input.js +0 -6
- package/coms/zimoli/input.less +6 -6
- package/coms/zimoli/model.js +20 -3
- package/coms/zimoli/popup.js +15 -10
- package/coms/zimoli/prompt.js +40 -0
- package/coms/zimoli/rootElements.js +1 -0
- package/coms/zimoli/search.js +15 -0
- package/coms/zimoli/select.js +26 -12
- package/coms/zimoli/selectLIstEdit.less +21 -0
- package/coms/zimoli/selectList.js +68 -8
- package/coms/zimoli/selectList.less +15 -2
- package/coms/zimoli/selectListEdit.html +15 -0
- package/coms/zimoli/selectListEdit.js +68 -0
- package/coms/zimoli/table.html +3 -2
- package/coms/zimoli/zimoli.js +22 -2
- package/package.json +1 -1
- package/public/efront.js +1 -1
package/apps/pivot/api.yml
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
login: options
|
|
3
|
-
run: options
|
|
4
|
-
share: options
|
|
5
|
-
folder: options
|
|
1
|
+
/ authorization:
|
|
2
|
+
login: options ::login-:a
|
|
3
|
+
run: options :::run
|
|
4
|
+
share: options ::share-:opt?:path
|
|
5
|
+
folder: options ::file-:opt:::path?:to
|
|
6
|
+
cluster: options ::cluster-:opt?:id
|
|
7
|
+
private-list: options ::private
|
|
8
|
+
private-edit: options ::private-:key?:value
|
package/apps/pivot/auth/login.js
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
|
+
var hosts = data.getItem("hosts");
|
|
2
|
+
if (!hosts.length) hosts.push({ key: location.host, name: location.host });
|
|
1
3
|
var fields = refilm`
|
|
4
|
+
服务器地址/host* select?a ${hosts}
|
|
2
5
|
密码/password* password
|
|
3
6
|
`;
|
|
4
|
-
|
|
7
|
+
console.log(fields)
|
|
5
8
|
function main() {
|
|
6
9
|
var page = view();
|
|
7
10
|
page.innerHTML = login;
|
|
@@ -9,20 +12,33 @@ function main() {
|
|
|
9
12
|
on("append")(page, function () {
|
|
10
13
|
move.bindPosition(page, [.5, .5]);
|
|
11
14
|
});
|
|
12
|
-
renderWithDefaults(page, {
|
|
15
|
+
renderWithDefaults(page, {
|
|
16
|
+
fields, data: {
|
|
17
|
+
host: location.host,
|
|
18
|
+
}, pending: false
|
|
19
|
+
});
|
|
13
20
|
on("submit")(page, async function () {
|
|
21
|
+
data.setInstance("hosts", hosts, true);
|
|
14
22
|
var { password } = submit(fields, this.$scope.data);
|
|
15
23
|
this.$scope.pending = true;
|
|
16
24
|
page.disabled = true;
|
|
17
25
|
try {
|
|
18
|
-
var
|
|
26
|
+
var login = await data.getApi("login");
|
|
27
|
+
login.base = location.protocol + "//" + parseURL(this.$scope.data.host).host + "/";
|
|
28
|
+
cross.addDirect(login.base);
|
|
29
|
+
var info = await data.from(login, {
|
|
19
30
|
a: encode62.timeencode(encode62.geta(password))
|
|
20
31
|
}).loading_promise;
|
|
32
|
+
var apimap = await data.getConfig();
|
|
33
|
+
for (var k in apimap) {
|
|
34
|
+
apimap[k].base = login.base;
|
|
35
|
+
}
|
|
21
36
|
info = encode62.timeupdate(info);
|
|
22
37
|
data.setSource({ authorization: info });
|
|
23
38
|
user.login({})
|
|
24
39
|
go('/main')
|
|
25
|
-
} catch {
|
|
40
|
+
} catch (e) {
|
|
41
|
+
console.log(e);
|
|
26
42
|
}
|
|
27
43
|
this.$scope.pending = false;
|
|
28
44
|
})
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
|
|
2
1
|
<div>
|
|
3
2
|
已登录到服务器,您可以进行如下操作
|
|
4
3
|
</div>
|
|
@@ -7,6 +6,11 @@
|
|
|
7
6
|
清理服务器缓存 <btn @click="run('clear-cache',this)">清理</btn>
|
|
8
7
|
</padding>
|
|
9
8
|
</block>
|
|
9
|
+
<block>
|
|
10
|
+
<padding>
|
|
11
|
+
重启服务器 <btn @click="run('rehost',this)" type="danger">重启</btn>
|
|
12
|
+
</padding>
|
|
13
|
+
</block>
|
|
10
14
|
<block>
|
|
11
15
|
<padding>
|
|
12
16
|
退出登录 <btn @click="logout()">退出</btn>
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
<div class="clusters">
|
|
2
|
+
<a -repeat="(c,i) in clusters" @click="active(i)">
|
|
3
|
+
<span -text="c"></span>
|
|
4
|
+
</a>
|
|
5
|
+
</div>
|
|
6
|
+
<lattice -src="c in clients">
|
|
7
|
+
<padding>
|
|
8
|
+
<span -text=c.id></span>
|
|
9
|
+
<span class="time" -text=filterTime(c.optime)></span>
|
|
10
|
+
|
|
11
|
+
</padding>
|
|
12
|
+
</lattice>
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
function main() {
|
|
2
|
+
var page = div();
|
|
3
|
+
page.innerHTML = template;
|
|
4
|
+
renderWithDefaults(page, {
|
|
5
|
+
async load() {
|
|
6
|
+
var cs = this.clusters = data.from("cluster", { opt: "list" });
|
|
7
|
+
await cs.loading_promise;
|
|
8
|
+
this.active();
|
|
9
|
+
},
|
|
10
|
+
index: 0,
|
|
11
|
+
clusters: [],
|
|
12
|
+
filterTime(d) {
|
|
13
|
+
return ((new Date - d) / 1000 | 0) + "秒";
|
|
14
|
+
},
|
|
15
|
+
clients: [],
|
|
16
|
+
async active() {
|
|
17
|
+
var index = this.index;
|
|
18
|
+
var clusters = this.clusters;
|
|
19
|
+
if (index >= clusters.length) index = clusters.length - 1;
|
|
20
|
+
this.clients = data.lazyInstance("cluster", { opt: "list", id: clusters[index] });
|
|
21
|
+
},
|
|
22
|
+
});
|
|
23
|
+
page.$scope.load();
|
|
24
|
+
return page;
|
|
25
|
+
}
|
package/apps/pivot/main.js
CHANGED
package/apps/pivot/main.less
CHANGED
package/apps/pivot/menu.yml
CHANGED
package/apps/pivot/share/edit.js
CHANGED
|
@@ -6,8 +6,10 @@ function main({ fields, item }) {
|
|
|
6
6
|
close() {
|
|
7
7
|
return remove(page);
|
|
8
8
|
},
|
|
9
|
-
save() {
|
|
10
|
-
|
|
9
|
+
async save() {
|
|
10
|
+
await data.from("share", { opt: 'create', path: this.data.path }).loading_promise;
|
|
11
|
+
dispatch(page, 'submited');
|
|
12
|
+
remove(page);
|
|
11
13
|
},
|
|
12
14
|
data: Object.assign({}, item)
|
|
13
15
|
});
|
package/apps/pivot/share/list.js
CHANGED
|
@@ -1,36 +1,56 @@
|
|
|
1
1
|
var fields = refilm`
|
|
2
2
|
路径/path
|
|
3
|
-
挂载点/name
|
|
4
3
|
`;
|
|
5
|
-
var options = [
|
|
6
|
-
{
|
|
7
|
-
name: "删除",
|
|
8
|
-
do(e) {
|
|
9
|
-
data.from('share', { opt: 'delete', item: e });
|
|
10
|
-
}
|
|
11
|
-
},
|
|
12
|
-
{
|
|
13
|
-
name: "修改",
|
|
14
|
-
do(e) {
|
|
15
|
-
popup('/share/edit', { fields, item: e });
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
];
|
|
19
|
-
console.log(fields)
|
|
20
4
|
function main() {
|
|
5
|
+
var options = [
|
|
6
|
+
{
|
|
7
|
+
name(e) {
|
|
8
|
+
return this.confirm === e ? "确认取消" : "取消"
|
|
9
|
+
},
|
|
10
|
+
type: 'danger',
|
|
11
|
+
confirm: false,
|
|
12
|
+
timer: 0,
|
|
13
|
+
async do(e) {
|
|
14
|
+
if (this.confirm !== e) {
|
|
15
|
+
this.confirm = e;
|
|
16
|
+
clearTimeout(this.timer);
|
|
17
|
+
this.timer = setTimeout(() => render.refresh(this.confirm = null), 2000);
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
await data.from('share', { opt: 'delete', path: e.path }).loading_promise;
|
|
21
|
+
page.$scope.load();
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
];
|
|
21
25
|
var page = div();
|
|
22
26
|
page.innerHTML = list;
|
|
23
|
-
var a = data.from("share", { opt: 'list' }, a => {
|
|
24
|
-
if (a) return a.map(b => ({ path: b }));
|
|
25
|
-
});
|
|
26
27
|
renderWithDefaults(page, {
|
|
27
|
-
data:
|
|
28
|
+
data: [],
|
|
29
|
+
load() {
|
|
30
|
+
this.data = data.from("share", { opt: 'list' }, a => {
|
|
31
|
+
if (a) return a.map(b => ({ path: b }));
|
|
32
|
+
});
|
|
33
|
+
},
|
|
28
34
|
fields: fields.concat({
|
|
29
35
|
name: "操作",
|
|
36
|
+
width: 200,
|
|
30
37
|
type: 'button',
|
|
31
38
|
options,
|
|
32
39
|
}),
|
|
33
40
|
});
|
|
34
|
-
|
|
41
|
+
page.$scope.load();
|
|
42
|
+
contextmenu(page, [
|
|
43
|
+
{
|
|
44
|
+
name: "添加",
|
|
45
|
+
do(e) {
|
|
46
|
+
zimoli.prepare("/share/edit", function () {
|
|
47
|
+
var p = popup("/share/edit", { fields });
|
|
48
|
+
on('submited')(p, function () {
|
|
49
|
+
page.$scope.load();
|
|
50
|
+
})
|
|
51
|
+
})
|
|
52
|
+
}
|
|
53
|
+
},
|
|
54
|
+
])
|
|
35
55
|
return page;
|
|
36
56
|
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
frame$list.bind(null, "密钥管理", {
|
|
2
|
+
load() {
|
|
3
|
+
return data.from("private-list", a => JSAM.parse(encode62.timedecode(a)));
|
|
4
|
+
},
|
|
5
|
+
remove(o) {
|
|
6
|
+
return data.from("private-edit", { key: encode62.timeencode(o.key), value: encode62.timeencode("") }).loading_promise;
|
|
7
|
+
},
|
|
8
|
+
fields: refilm`
|
|
9
|
+
显示名/name input
|
|
10
|
+
*键名/key
|
|
11
|
+
密钥/value
|
|
12
|
+
备注/comment
|
|
13
|
+
`}, "/token/edit");
|
package/coms/basic/JSAM.js
CHANGED
|
@@ -40,6 +40,10 @@ function stringify(memery) {
|
|
|
40
40
|
if (memery instanceof Date) return date(memery);
|
|
41
41
|
if (memery instanceof RegExp) return regexp(memery);
|
|
42
42
|
if (!convertReg.test(typeof memery)) return string(memery);
|
|
43
|
+
m: if (typeof memery === 'function') {
|
|
44
|
+
for (var k in memery) break m;
|
|
45
|
+
return '';
|
|
46
|
+
}
|
|
43
47
|
var dist = [memery];
|
|
44
48
|
var rest = [memery];
|
|
45
49
|
var trimed = [memery instanceof Array ? [] : {}];
|
|
@@ -51,6 +55,10 @@ function stringify(memery) {
|
|
|
51
55
|
o[""] = arr;
|
|
52
56
|
for (var k in memery) {
|
|
53
57
|
var m = memery[k];
|
|
58
|
+
f: if (typeof m === 'function') {
|
|
59
|
+
for (var k in m) break f;
|
|
60
|
+
continue;
|
|
61
|
+
}
|
|
54
62
|
if (inc === +k && k !== '') {
|
|
55
63
|
var kindex = "";
|
|
56
64
|
inc++;
|
package/coms/basic/loader.js
CHANGED
|
@@ -521,39 +521,63 @@ var createModule = function (exec, originNames, compiledNames, prebuilds = {}) {
|
|
|
521
521
|
return exec.apply(_this, args);
|
|
522
522
|
});
|
|
523
523
|
};
|
|
524
|
-
var bindthen = function (callback) {
|
|
525
|
-
return function (data) {
|
|
526
|
-
if (Promise && data instanceof Promise) {
|
|
527
|
-
data.then(callback);
|
|
528
|
-
} else {
|
|
529
|
-
callback(data);
|
|
530
|
-
}
|
|
531
|
-
};
|
|
532
|
-
};
|
|
533
|
-
|
|
534
524
|
|
|
535
525
|
var init = function (name, then, prebuilds) {
|
|
536
|
-
then = bindthen(then);
|
|
526
|
+
// then = bindthen(then);
|
|
537
527
|
var key = keyprefix + name;
|
|
538
528
|
if (prebuilds) {
|
|
539
529
|
if (name in prebuilds) {
|
|
540
|
-
|
|
530
|
+
if (then) then(prebuilds[name]);
|
|
531
|
+
return prebuilds[name];
|
|
541
532
|
}
|
|
542
533
|
}
|
|
543
534
|
if (hasOwnProperty.call(modules, name)) {
|
|
544
|
-
then(modules[name]);
|
|
545
|
-
return;
|
|
535
|
+
if (then) then(modules[name]);
|
|
536
|
+
return modules[name];
|
|
546
537
|
}
|
|
547
538
|
if (window[name] !== null && window[name] !== void 0 && !hasOwnProperty.call(forceRequest, name)) {
|
|
548
|
-
|
|
549
|
-
|
|
539
|
+
modules[name] = window[name]
|
|
540
|
+
if (then) then(modules[name]);
|
|
541
|
+
return modules[name];
|
|
550
542
|
}
|
|
543
|
+
var oks = [];
|
|
544
|
+
if (then) oks.push(then);
|
|
545
|
+
var ohs = [];
|
|
546
|
+
var res = {
|
|
547
|
+
oks,
|
|
548
|
+
ohs,
|
|
549
|
+
resolved: null,
|
|
550
|
+
errored: null,
|
|
551
|
+
then(ok, oh) {
|
|
552
|
+
if (ok) this.oks.push(ok);
|
|
553
|
+
if (oh) this.ohs.push(oh);
|
|
554
|
+
this.fire();
|
|
555
|
+
},
|
|
556
|
+
fire() {
|
|
557
|
+
if (this.resolved || this.errored) {
|
|
558
|
+
var oks = this.oks.splice(0, this.oks.length);
|
|
559
|
+
var ohs = this.ohs.splice(0, this.ohs.length);
|
|
560
|
+
if (this.resolved) for (var o of oks) o(this.resolved);
|
|
561
|
+
if (this.errored) for (var o of ohs) o(this.errored);
|
|
562
|
+
}
|
|
563
|
+
},
|
|
564
|
+
};
|
|
565
|
+
then = function (created) {
|
|
566
|
+
if (Promise && created instanceof Promise) return created.then(then, crack);
|
|
567
|
+
res.resolved = created;
|
|
568
|
+
res.fire();
|
|
569
|
+
};
|
|
570
|
+
var crack = function (error) {
|
|
571
|
+
res.errored = error;
|
|
572
|
+
res.fire();
|
|
573
|
+
};
|
|
551
574
|
loadModule(name, function (error) {
|
|
552
575
|
if (hasOwnProperty.call(modules, name)) {
|
|
553
576
|
then(modules[name]);
|
|
554
577
|
return;
|
|
555
578
|
}
|
|
556
|
-
if (error) return;
|
|
579
|
+
if (error) return crack(error);
|
|
580
|
+
|
|
557
581
|
var module = loadedModules[key];
|
|
558
582
|
var args = module.args || [];
|
|
559
583
|
|
|
@@ -593,6 +617,7 @@ var init = function (name, then, prebuilds) {
|
|
|
593
617
|
|
|
594
618
|
then(created);
|
|
595
619
|
}, prebuilds);
|
|
620
|
+
return res;
|
|
596
621
|
};
|
|
597
622
|
var forceRequest = {};
|
|
598
623
|
var removeGlobalProperty = function (property) {
|
|
@@ -809,7 +834,7 @@ modules.modules = modules;
|
|
|
809
834
|
var requires_count = 3;
|
|
810
835
|
var hook = function (requires_count) {
|
|
811
836
|
if (requires_count !== 0) return;
|
|
812
|
-
"alert confirm innerWidth innerHeight close".split(/\s+/).map(removeGlobalProperty);
|
|
837
|
+
"alert confirm innerWidth innerHeight close prompt".split(/\s+/).map(removeGlobalProperty);
|
|
813
838
|
initPixelDecoder();
|
|
814
839
|
modules.Promise = Promise;
|
|
815
840
|
modules.hook_time = +new Date;
|
|
@@ -268,7 +268,7 @@ function parse(piece) {
|
|
|
268
268
|
delete_onempty, delete_onsubmit,
|
|
269
269
|
} = name;
|
|
270
270
|
} else {
|
|
271
|
-
var test = (reg,a) => {
|
|
271
|
+
var test = (reg, a) => {
|
|
272
272
|
if (reg.test(a)) {
|
|
273
273
|
return true;
|
|
274
274
|
}
|
|
@@ -388,7 +388,7 @@ function parse(piece) {
|
|
|
388
388
|
options = is(options);
|
|
389
389
|
var needUnfold = /^\[|\]$/.test(options);
|
|
390
390
|
options = options.replace(/^\[|\]$/g, '');
|
|
391
|
-
if (/,/.test(options)) options = scanSlant(options, ',');
|
|
391
|
+
if (needUnfold || /,/.test(options)) options = scanSlant(options, ',');
|
|
392
392
|
else options = scanSlant(options, "");
|
|
393
393
|
if (needUnfold) unfoldOptions(size, options);
|
|
394
394
|
}
|
package/coms/crypt/encode62.js
CHANGED
|
@@ -31,7 +31,8 @@ Object.assign(encode62, {
|
|
|
31
31
|
var time_rest = string.slice(string.length - time_delta.toString(36).length, string.length);
|
|
32
32
|
var time_start = parseInt((new Date() - parseInt(time_rest, 36)) / time_delta) * time_delta;
|
|
33
33
|
var time_stamp = time_start + parseInt(time_rest, 36);
|
|
34
|
-
|
|
34
|
+
string = this.decode62(string.slice(0, string.length - time_delta.toString(36).length), time_stamp.toString(36)).replace(/\.\.?/g, a => a === '.' ? "%" : ".");
|
|
35
|
+
return decodeURIComponent(string);
|
|
35
36
|
},
|
|
36
37
|
timeencode(string) {
|
|
37
38
|
var { time_delta } = this;
|
|
@@ -40,6 +41,7 @@ Object.assign(encode62, {
|
|
|
40
41
|
var time_rest = time_stamp % time_delta;
|
|
41
42
|
var time_rest_str = time_rest.toString(36);
|
|
42
43
|
var time_delta_str = time_delta.toString(36);
|
|
44
|
+
string = encodeURIComponent(string).replace(/\./g, '..').replace(/%/g, '.');
|
|
43
45
|
return this.encode62(string, time_stamp.toString(36)) + repeat("0", time_delta_str.length - time_rest_str.length) + time_rest_str;
|
|
44
46
|
},
|
|
45
47
|
timeupdate(string) {
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
<div head>
|
|
2
|
+
<span v-text="origin?'修改':'添加'"></span><span -text="title"></span>
|
|
3
|
+
</div>
|
|
4
|
+
<div body>
|
|
5
|
+
<field v-if="!f.readonly||!!data[f.key]" -repeat="f in fields" ng-src="[f,data]"></field>
|
|
6
|
+
</div>
|
|
7
|
+
<div foot>
|
|
8
|
+
<btn @click="remove()" class="white">取消</btn>
|
|
9
|
+
<button type="submit">保存</button>
|
|
10
|
+
</div>
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
function main(title, { submit }, { data: origin, fields, }) {
|
|
2
|
+
var page = view();
|
|
3
|
+
var item = Object.assign({}, origin);
|
|
4
|
+
page.innerHTML = edit;
|
|
5
|
+
drag.on(page.firstChild, page);
|
|
6
|
+
resize.on(page);
|
|
7
|
+
page.onback = function () {
|
|
8
|
+
return false;
|
|
9
|
+
};
|
|
10
|
+
renderWithDefaults(page, {
|
|
11
|
+
fields,
|
|
12
|
+
title,
|
|
13
|
+
origin: item,
|
|
14
|
+
data: item,
|
|
15
|
+
remove() {
|
|
16
|
+
remove(page);
|
|
17
|
+
},
|
|
18
|
+
});
|
|
19
|
+
on('submit')(page, async function (e) {
|
|
20
|
+
e.preventDefault();
|
|
21
|
+
await submit(item);
|
|
22
|
+
dispatch(this, 'submited');
|
|
23
|
+
remove(this);
|
|
24
|
+
});
|
|
25
|
+
on("append")(page, lazy(function () {
|
|
26
|
+
page.querySelector("input").focus();
|
|
27
|
+
}));
|
|
28
|
+
return page;
|
|
29
|
+
}
|
|
File without changes
|
package/coms/frame/list.html
CHANGED
package/coms/frame/list.js
CHANGED
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
function main(title, { fields, load, remove }, edit_ref) {
|
|
2
|
+
prepare(edit_ref);
|
|
3
|
+
var page = document.createElement("div");
|
|
4
|
+
var edit = function (o) {
|
|
5
|
+
zimoli.prepare(edit_ref, function () {
|
|
6
|
+
var p = popup(edit_ref, { fields, data: o })
|
|
7
|
+
on("submited")(p, function () {
|
|
8
|
+
console.log("submited")
|
|
9
|
+
page.$scope.load();
|
|
10
|
+
})
|
|
11
|
+
})
|
|
12
|
+
};
|
|
13
|
+
page.innerHTML = template;
|
|
14
|
+
renderWithDefaults(page, {
|
|
15
|
+
title,
|
|
16
|
+
load() {
|
|
17
|
+
this.data = load();
|
|
18
|
+
},
|
|
19
|
+
fields: fields.concat({
|
|
20
|
+
name: "操作",
|
|
21
|
+
options: [
|
|
22
|
+
{
|
|
23
|
+
name: "修改",
|
|
24
|
+
do(o) {
|
|
25
|
+
edit(o);
|
|
26
|
+
},
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
type: "danger",
|
|
30
|
+
name(o) {
|
|
31
|
+
return this.confirm === o ? "确认删除" : "删除";
|
|
32
|
+
},
|
|
33
|
+
type(o) {
|
|
34
|
+
return this.confirm === o ? "dark" : "danger";
|
|
35
|
+
},
|
|
36
|
+
confirm: false,
|
|
37
|
+
timer: 0,
|
|
38
|
+
async do(o) {
|
|
39
|
+
if (this.confirm !== o) {
|
|
40
|
+
this.confirm = o;
|
|
41
|
+
clearTimeout(this.timer);
|
|
42
|
+
var that = this;
|
|
43
|
+
this.timer = setTimeout(function () {
|
|
44
|
+
that.confirm = null;
|
|
45
|
+
render.refresh();
|
|
46
|
+
}, 2000);
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
await remove(o);
|
|
50
|
+
page.$scope.load();
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
]
|
|
54
|
+
}),
|
|
55
|
+
data: [],
|
|
56
|
+
add() {
|
|
57
|
+
edit();
|
|
58
|
+
},
|
|
59
|
+
});
|
|
60
|
+
on("append")(page, function () {
|
|
61
|
+
page.$scope.load();
|
|
62
|
+
});
|
|
63
|
+
return page;
|
|
64
|
+
}
|
package/coms/frame/list.less
CHANGED
package/coms/zimoli/data.js
CHANGED
|
@@ -333,25 +333,23 @@ function fixApi(api, href) {
|
|
|
333
333
|
}
|
|
334
334
|
api.base = href;
|
|
335
335
|
api.path = api.url;
|
|
336
|
-
if (/^\.([\?\#][\s\S]*)?$/.test(api.
|
|
337
|
-
api.
|
|
338
|
-
} else {
|
|
339
|
-
api.url = href + api.url;
|
|
336
|
+
if (/^\.([\?\#][\s\S]*)?$/.test(api.path)) {
|
|
337
|
+
api.path = api.path.replace(/^\./, "");
|
|
340
338
|
}
|
|
341
339
|
if (extraSearch || extraHash) {
|
|
342
340
|
if (/[\?#]/.test(api.url)) {
|
|
343
341
|
var [, search, hash] = paramReg.exec(api.url);
|
|
344
342
|
}
|
|
345
|
-
var
|
|
343
|
+
var path = api.path.replace(paramReg, '');
|
|
346
344
|
if (extraSearch) {
|
|
347
345
|
search = search ? extraSearch + '&' + search : extraSearch;
|
|
348
346
|
}
|
|
349
347
|
if (extraHash) {
|
|
350
348
|
hash = hash ? extraHash + '&' + hash : extraHash;
|
|
351
349
|
}
|
|
352
|
-
if (search)
|
|
353
|
-
if (hash)
|
|
354
|
-
api.
|
|
350
|
+
if (search) path += '?' + search;
|
|
351
|
+
if (hash) path += "#" + hash;
|
|
352
|
+
api.path = path;
|
|
355
353
|
}
|
|
356
354
|
}
|
|
357
355
|
}
|
|
@@ -434,7 +432,8 @@ var privates = {
|
|
|
434
432
|
},
|
|
435
433
|
fromApi(api, params) {
|
|
436
434
|
let url = api.url;
|
|
437
|
-
|
|
435
|
+
var base = api.base;
|
|
436
|
+
if (base) url = base + api.path;
|
|
438
437
|
if (this.validApi(api, params)) {
|
|
439
438
|
params = this.repare(api, params);
|
|
440
439
|
return this.loadIgnoreConfig(api.method, url, params, api);
|
|
@@ -657,6 +656,9 @@ var data = {
|
|
|
657
656
|
data = this.parseConfig(data);
|
|
658
657
|
configPormise = Promise.resolve(data);
|
|
659
658
|
},
|
|
659
|
+
getConfig() {
|
|
660
|
+
return privates.getConfigPromise();
|
|
661
|
+
},
|
|
660
662
|
parseConfig(o) {
|
|
661
663
|
if (o instanceof Promise) {
|
|
662
664
|
return o.then(createApiMap);
|
package/coms/zimoli/dispatch.js
CHANGED
|
@@ -9,15 +9,22 @@ var dispatch = "dispatchEvent" in document ? function dispatchEvent(target, even
|
|
|
9
9
|
}
|
|
10
10
|
};
|
|
11
11
|
function main() {
|
|
12
|
-
var target, event;
|
|
12
|
+
var target, event, value;
|
|
13
13
|
for (var cx = 0, dx = arguments.length; cx < dx; cx++) {
|
|
14
14
|
var arg = arguments[cx];
|
|
15
|
-
if (
|
|
16
|
-
event = createEvent(arg);
|
|
17
|
-
} else if (isNode(arg) || arg === window || arg === document) {
|
|
15
|
+
if (isNode(arg) || arg === window || arg === document) {
|
|
18
16
|
target = arg;
|
|
19
|
-
}
|
|
20
|
-
|
|
17
|
+
}
|
|
18
|
+
else if (!event) {
|
|
19
|
+
if (isString(arg)) {
|
|
20
|
+
event = createEvent(arg);
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
event = arg;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
event.value = arg;
|
|
21
28
|
}
|
|
22
29
|
}
|
|
23
30
|
if (dispatch(target || window, event)) {
|