jiapeng 8 years ago
parent
commit
f38e1292b2

+ 4 - 1
css/common.css

@ -2419,7 +2419,10 @@ a cite {
2419 2419
    border-color: transparent;
2420 2420
}
2421 2421
2422
2422
.upload-btn{
2423
	position: relative;
2424
	overflow: hidden;
2425
}
2423 2426
.upload-form input {
2424 2427
    position: absolute;
2425 2428
    top: 0px;

+ 66 - 11
css/model/sys/dict.css

@ -1,18 +1,73 @@
1 1
@charset "utf-8";
2
.sys_dict_index .queryForm{
3
	position: relative;
2
.sys_dict_index .queryForm {
3
    position: relative;
4 4
}
5
.sys_dict_index .queryForm .icon-search{
6
	position: absolute;
7
	top:7px;
8
	right:15px;
9
	font-size:25px;
5
6
.sys_dict_index .queryForm .icon-search {
7
    position: absolute;
8
    top: 7px;
9
    right: 15px;
10
    font-size: 25px;
10 11
}
12
11 13
.sys_dict_index .table-opt .icon {
12
	margin: 10px;
13
	font-size: 20px;
14
    margin: 10px;
15
    font-size: 20px;
16
}
17
18
.sys_dict_add, .sys_dict_edit, .sys_dict_itemlist, .sys_dict_itemedit {
19
    width: 800px;
20
    padding: 10px;
21
}
22
.sys_dict_itemedit{
23
	height: 500px;
24
}
25
.sys_dict_itemedit .main {
26
    padding: 20px;
27
}
28
.sys_dict_itemedit .main  {
29
    height: 400px;
30
}
31
.sys_dict_itemedit .main .nav {
32
    height: 100%;
33
    overflow: auto;
34
}
35
36
37
38
.sys_dict_itemlist .ld-item {
39
    padding: 0 10px;
40
}
41
42
.sys_dict_itemlist .ld-caption {
43
    font-weight: bold;
44
}
45
46
.sys_dict_itemedit .nav li {
47
    padding: 5px 0 5px 15px;
48
    position: relative;
49
}
50
51
.sys_dict_itemedit .nav li a {
52
    padding: 0 0 0 10px;
53
}
54
55
.sys_dict_itemedit .nav .branch-item > ul {
56
    display: none;
57
}
58
59
.sys_dict_itemedit .nav .branch-item.open > ul {
60
    display: block;
61
}
62
63
.sys_dict_itemedit .nav .branch-item > i.icon-dict-toggle:before {
64
    content: '\e6f1';
65
}
66
67
.sys_dict_itemedit .nav .branch-item.open > i.icon-dict-toggle:before {
68
    content: '\e6f2';
14 69
}
15
.sys_dict_add,.sys_dict_edit{
16
	width:800px;
17 70
71
.sys_dict_itemedit .main > .btns {
72
    padding: 20px;
18 73
}

+ 43 - 0
css/model/sys/user.css

@ -0,0 +1,43 @@
1
@charset "utf-8";
2
.sys_user_index .tpl-btns .row {
3
    padding-left: 10px;
4
}
5

6
.sys_user_index th.opt-check, .sys_user_index td.opt-check {
7
    width: 35px;
8
}
9

10
.sys_user_new {
11
    width: 800px;
12
    padding: 0 20px 10px;
13
}
14

15
.sys_user_new .newForm {
16
    position: relative;
17
}
18

19
.sys_user_new .newForm .head-ctn {
20
    position: absolute;
21
    top: 3px;
22
    right: 30px;
23
    width: 190px;
24
    height: 190px;
25
}
26

27
.sys_user_new .newForm .head-ctn .upload-btn {
28
    position: absolute;
29
    bottom: 10px;
30
    left: 40px;
31
    width: 110px;
32
    height: 36px;
33
    color: rgba(0, 0, 0, 1);
34
    font-size: 14px;
35
    text-align: center;
36
    border: 1px solid #555555;
37
    padding-top: 6px;
38
}
39

40
.sys_user_new .newForm .head-ctn .upload-btn i {
41
    font-size: 16px;
42
    color: rgb(95,184,120);
43
}

+ 2 - 1
html/demo.html

@ -144,7 +144,8 @@
144 144
	<script type="text/javascript" src="../js/codehtml.js"></script>
145 145
	<script type="text/javascript" src="../js/datagrid.js"></script>
146 146
	<script type="text/javascript" src="../js/pageDataGrid.js"></script>
147
	<script type="text/javascript" src="../js/spa.js"></script>-->
147
	<script type="text/javascript" src="../js/spa.js"></script>
148
	<script type="text/javascript" src="../js/upload.js" ></script>
148 149

149 150
	<script>
150 151
		$(function() {

+ 72 - 0
html/model/sys/dict/itemedit.html

@ -0,0 +1,72 @@
1
<div class="sys_dict_itemedit centerModal">
2
	<div class="modal-ctrl">
3
		<i class="icon icon-times"></i>
4
	</div>
5
	<div class="main row">
6
		<div class="nav col-5">
7

8
		</div>
9
		<div class="info col-7">
10
			<div class="info-edit container">
11
				<div class="row">
12
					<div class="col-4 item-caption">编码</div>
13
					<div class="col-8">
14
						<div class="form-item text" name="code"></div>
15
					</div>
16
				</div>
17
				<div class="row">
18
					<div class="col-4 item-caption">名称</div>
19
					<div class="col-8">
20
						<div class="form-item text" name="caption"></div>
21
					</div>
22
				</div>
23
				<div class="row">
24
					<div class="col-4 item-caption">助记码</div>
25
					<div class="col-8">
26
						<div class="form-item text" name="shortCode"></div>
27
					</div>
28
				</div>
29
				<div class="row">
30
					<div class="col-4 item-caption">是否有效</div>
31
					<div class="col-8">
32
						<div class="form-item select bool" dictCode="bool" name="enabled"></div>
33
					</div>
34
				</div>
35
				<div class="row">
36
					<div class="col-4 item-caption">是否系统保留</div>
37
					<div class="col-8">
38
						<div class="form-item select bool" dictCode="bool" name="system"></div>
39
					</div>
40
				</div>
41
				<div class="row">
42
					<div class="col-4 item-caption">备注</div>
43
					<div class="col-8">
44
						<div class="form-item textarea" name="descp"></div>
45
					</div>
46
				</div>
47
				<div class="row">
48
					<div class="col-12">
49
						<div class="btn opt-ok pull-right">确定</div>
50
						<div class="btn opt-del pull-right">删除</div>
51
						<div class="btn opt-next pull-right">下移</div>
52
						<div class="btn opt-prev pull-right">上移</div>
53
						<div class="btn opt-new pull-right">新建</div>
54

55
					</div>
56
				</div>
57
			</div>
58
		</div>
59
	</div>
60
	<div class=" container btns">
61
		<div class="row ">
62
			<div class="col-12">
63
				<div class="btn opt-newroot pull-left">
64
					NEW
65
				</div>
66
				<div class="btn opt-save pull-right">
67
					Save
68
				</div>
69
			</div>
70
		</div>
71
	</div>
72
</div>

+ 19 - 25
html/model/sys/dict/itemlist.html

@ -1,33 +1,27 @@
1
<div class-"sys_dict_itemlist centerModal">
1
<div class="sys_dict_itemlist centerModal">
2 2
	<div class="modal-ctrl">
3 3
		<i class="icon icon-times"></i>
4 4
	</div>
5
	<ul>
5
	<ul class="ld-caption">
6 6
		<li class="ld-item">
7
			<div class="item-code" ov="{{code}}">{{code}}</div>
8
			<div class="item-code" ov="{{caption}}">{{caption}}</div>
9
			<div class="item-code" ov="{{shortCode}}">{{shortCode}}</div>
10
			<div class="item-code" ov="{{enabled}}">{{enabled-itemE}}</div>
11
			<div class="item-code" ov="{{system}}">{{system-itemS}}</div>
12
			<div ch-dir="each" class="item-code" ov="{{data-json}}"></div>
13
			<div class="item-code" ov="{{code}}">{{code}}</div>
7
			<div class="row">
8
				<div class="col-2">编码</div>
9
				<div class="col-4">名称</div>
10
				<div class="col-2">助记码</div>
11
				<div class="col-2">是否有效</div>
12
				<div class="col-2">是否系统保留</div>
13
			</div>
14 14
		</li>
15 15
	</ul>
16
	
17
	<dvi class="item-list">
18
		<div calss="code-tpl" code-func="data-list">
19
			<div class="item">
20
				<div class="item-code" objVal="{{code}}">{{code}}</div>
21
				<div class="item-caption" objVal="{{caption}}">{{caption}}</div>
22
				<div class="item-shortCode" objVal="{{shortCode}}">{{shortCode}}</div>
23
				<div class="item-enabled" objVal="{{enabled}}">{{enabled}}</div>
24
				<div class="item-system" objVal="{{system}}">{{code}}</div>
25
				<div class="item-data" objVal="{{code}}">{{code}}</div>
16
	<ul class="ld-items">
17
		<li class="ld-item">
18
			<div class="row">
19
				<div class="col-2">{{code}}</div>
20
				<div class="col-4">{{caption}}</div>
21
				<div class="col-2">{{shortCode}}</div>
22
				<div class="col-2">{{enabled-itemE}}</div>
23
				<div class="col-2">{{system-itemS}}</div>
26 24
			</div>
27
		</div>
28
		
29
		
30
	</dvi>
31
	
32
	
25
		</li>
26
	</ul>
33 27
</div>

+ 95 - 0
html/model/sys/user/index.html

@ -0,0 +1,95 @@
1
<div class="sys_user_index" loadUri="../ajax/sys/user/pq" pageSize="5" pageNo="1">
2
	<div class="modal-ctrl">
3
		<i class="icon icon-times"></i>
4
	</div>
5
	<div class="container dt-form">
6
		<div class="row">
7
			<div class="col-2 item-caption">名称</div>
8
			<div class="col-4">
9
				<div class="form-item text" defVal="" name="name"></div>
10
			</div>
11
			<div class="col-2 item-caption ">是否有效</div>
12
			<div class="col-4">
13
				<div class="form-item select bool" dictCode="bool" defVal="" name="actived"></div>
14
			</div>
15
		</div>
16
		<div class="row">
17
			<div class="col-2 item-caption">手机</div>
18
			<div class="col-4">
19
				<div class="form-item text" defVal="" name="mobile"></div>
20
			</div>
21
			<div class="col-2 item-caption ">邮箱</div>
22
			<div class="col-4">
23
				<div class="form-item text" defVal="" name="email"></div>
24
			</div>
25
		</div>
26
		<div class="row">
27
			<div class="col-2 item-caption ">创建日期</div>
28
			<div class="col-4">
29
				<div class="form-item date" defVal="" name="bt"></div>
30
			</div>
31
			<div class="col-2 item-caption center">至</div>
32
			<div class="col-4">
33
				<div class="form-item date" defVal="" name="et"></div>
34
			</div>
35
		</div>
36
		<div class="row">
37
			<div class="col-10">
38

39
			</div>
40
			<div class="col-2">
41
				<div class="btn opt-query pull-right">
42
					<i class="icon-search"></i> 查询
43
				</div>
44
			</div>
45

46
		</div>
47
	</div>
48

49
	<div class="container page-split"></div>
50
	<div class="container tpl-btns">
51
		<div class="row">
52
			<div class="btn opt-new">
53
				<i class="icon-plus"></i> 增加
54
			</div>
55
			<div class="btn opt-edit">
56
				<i class="icon-edit"></i>编缉
57
			</div>
58
			<div class="btn opt-del">
59
				<i class="icon-remove-sign"></i>删除
60
			</div>
61
		</div>
62
	</div>
63
	<div class="container dt-tpl">
64
		<table class="table table-bordered">
65
			<thead>
66
				<tr>
67
					<th class="opt-check" ><i class="icon icon-st-check"></i> </th>
68
					<th>序号</th>
69
					<th>名称</th>
70
					<th>手机</th>
71
					<th>邮箱</th>
72
					<th>是否有效</th>
73
					<th>创建时间</th>
74
				</tr>
75
			</thead>
76
			<tbody>
77
				<tr ch-dir="list">
78
					<td class="opt-check" ><i class="icon icon-st-check" orgId="{{id}}"></i></td>
79
					<td>{{-_index}}</td>
80
					<td>{{name}}</td>
81
					<td>{{mobile}}</td>
82
					<td>{{email}}</td>
83
					<td>{{actived-bool}}</td>
84
					<td>{{createTime-date}}</td>
85
				</tr>
86
			</tbody>
87
			<tbody ch-dir="array.empty">
88
				<tr>
89
					<td class="empty-desc" colspan="7">表格暂无数据</td>
90
				</tr>
91
			</tbody>
92
		</table>
93
	</div>
94
	<ul class="dt-pager"></ul>
95
</div>

+ 50 - 0
html/model/sys/user/new.html

@ -0,0 +1,50 @@
1
<div class="sys_user_new centerModal">
2
	<div class="modal-ctrl">
3
		<i class="icon icon-times"></i>
4
	</div>
5
	<div class="container newForm">
6
		<div class="row">
7
			<div class="col-2 item-caption">名称</div>
8
			<div class="col-6">
9
				<div class="form-item text" defVal="" name="name"></div>
10
			</div>
11
		</div>
12
		<div class="row">
13
			<div class="col-2 item-caption">手机</div>
14
			<div class="col-6">
15
				<div class="form-item text" defVal="" name="mobile"></div>
16
			</div>
17
		</div>
18
		<div class="row">
19
			<div class="col-2 item-caption">邮箱</div>
20
			<div class="col-6">
21
				<div class="form-item text" defVal="" name="email"></div>
22
			</div>
23
		</div>
24
		<div class="row">
25
			<div class="col-2 item-caption">备注</div>
26
			<div class="col-6">
27
				<div class="form-item textarea" defVal="" name="descp"></div>
28
			</div>
29
		</div>
30
		<div class="row">
31
			<div class="col-10"></div>
32
			<div class="col-2">
33
				<div class="btn pull-right opt-save">
34
					<i class="icon-check"></i> SAVE
35
				</div>
36

37
			</div>
38

39
		</div>
40
		
41
		<div class="head-ctn">
42
			
43
			
44
			<div class="upload-btn">
45
				<i class="icon icon-upload"></i>&nbsp;上传头像
46
			</div>
47
		</div>
48
	</div>
49

50
</div>

+ 7 - 0
js/codehtml.js

@ -22,6 +22,13 @@ $.define(["jQuery", "doc", "body", "util"], "code", function($, doc, $body, util
22 22
			},
23 23
			"_index": function(env) {
24 24
				return env.ci+1;
25
			},
26
			"bool":function(env){
27
				return env.cd[this.k]?"是":"否";
28
			},
29
			"date":function(env){
30
				var v = env.cd[this.k];
31
				return v?(v.substring(0,4)+"年"+v.substring(4,6)+"月"+v.substring(6,8)+"日"):((this.p && this.p[0])||"");
25 32
			}
26 33
		},
27 34
		simpleAttrHandler = function(env) {

+ 1 - 1
js/common.js

@ -226,7 +226,7 @@ if(typeof jQuery === 'undefined') {
226 226
			},
227 227
			g_err = {
228 228
				"defErrHand": function(ep) {
229

229
					errMsg(JSON.stringify(ep));
230 230
				},
231 231
				"0": "未定义的错误",
232 232
				"1": function() {

+ 1 - 1
js/form.js

@ -54,7 +54,7 @@ $.define(["jQuery", "util"], "form", function($, util) {
54 54
					item: function(name) {
55 55
						return items[name];
56 56
					},
57
					validate: function(vds) {
57
					validate: function() {
58 58
						if(vd(items)) {
59 59
							return util.validate(rules, this);
60 60
						}

+ 10 - 9
js/model/sys/dict/index.js

@ -1,13 +1,14 @@
1
;spa_define(function() {
2
	return  $.use(["spa","pagedatagrid","util","dict"],function(spa,pdgf,util,dict){
1
;
2
spa_define(function() {
3
	return $.use(["spa", "pagedatagrid", "util", "dict"], function(spa, pdgf, util, dict) {
3 4
		return {
4
			main:function(){
5
			main: function() {
5 6
				var root = spa.findInMain(".sys_dict_index");
6 7
				root.find(".opt-new").on("click", function() {
7 8
					spa.showModal("sys_dict_add", function() { pdg.load() });
8 9
				});
9 10
				var pdg = pdgf.build(root);
10
				var bindDataEvent =function(){
11
				var bindDataEvent = function() {
11 12
					root.find(".table-opt i.icon-edit").on("click", function() {
12 13
						var $this = $(this);
13 14
						var code = $this.parent().attr("dictCode");
@ -26,7 +27,7 @@
26 27
							});
27 28
						}
28 29
					});
29
					root.find(".table-opt i.icon-list-ul").on("click",function(){
30
					root.find(".table-opt i.icon-list-ul").on("click", function() {
30 31
						var $this = $(this);
31 32
						var code = $this.parent().attr("dictCode");
32 33
						if(code) {
@ -40,13 +41,14 @@
40 41
							});
41 42
						}
42 43
					});
43
					root.find(".table-opt i.icon-tasks").on("click",function(){
44
					root.find(".table-opt i.icon-tasks").on("click", function() {
44 45
						var $this = $(this);
45 46
						var code = $this.parent().attr("dictCode");
46 47
						if(code) {
47 48
							util.get("../ajax/sys/dict/editItem/" + code, null, function(data) {
48 49
								spa.showModal("sys_dict_itemedit", {
49 50
									data: data,
51
									code: code,
50 52
									hand: function() {
51 53
										pdg.load();
52 54
									}
@ -57,16 +59,15 @@
57 59
				};
58 60
				pdg.code.listen(dict.doTransfer);
59 61
				pdg.code.listen(bindDataEvent);
60
				pdg.code.shell("bool",function(env){
62
				pdg.code.shell("bool", function(env) {
61 63
					var v = env.cd[this.k];
62
					return v===true?"是":(v===false?"否":"");
64
					return v === true ? "是" : (v === false ? "否" : "");
63 65
				});
64 66
				root.find(".opt-query").on("click", function() {
65 67
					pdg.load();
66 68
				});
67 69
				pdg.load();
68 70

69

70 71
			}
71 72
		};
72 73
	});

+ 216 - 0
js/model/sys/dict/itemedit.js

@ -0,0 +1,216 @@
1
;
2
spa_define(function() {
3
	return $.use(["util", "form", "dict", "spa", "code", "form"], function(util, form, dict, spa, code, form) {
4
		var ahref = { an: "href", av: "javascript:;" };
5
		return {
6
			modal: function(data) {
7
				var root = spa.findInModal(".sys_dict_itemedit");
8
				root.find(".modal-ctrl .icon-times").on("click", function() {
9
					spa.closeModal();
10
				});
11
				var treeCnt = root.find(".main .nav"),
12
					dictData = data.data,
13
					hand = code.parseCode(root.find(".info")),
14
					editForm = {};
15

16
				var findByCode = function(c, items) {
17
					var ret;
18
					for(var i = 0; i < items.length; ++i) {
19
						var item = items[i];
20
						if(item.code === c) return item;
21
						if(item.children && item.children.length) {
22
							ret = findByCode(c, item.children);
23
							if(ret) return ret;
24
						}
25
					}
26
				};
27
				var paint = function(ul, items, pc) {
28
					items.forEach(function(item) {
29
						var li = { tn: "li" },
30
							attrs = li.attrs = [{ an: "class", av: "leaf-item" }];
31
						chs = li.chs = [];
32
						ul.chs.push(li);
33
						attrs.push({ an: "code", av: item.code });
34
						attrs.push({ an: "pcode", av: pc || "" });
35
						var icon = {
36
							tn: "i",
37
							attrs: [{ an: "class", av: "icon icon-star" }]
38
						};
39
						chs.push(icon);
40
						chs.push({ tn: "a", attrs: [ahref], chs: [item.code + ":" + item.caption] });
41
						if(item.children && item.children.length) {
42
							icon.attrs[0].av = "icon icon-dict-toggle";
43
							li.attrs[0].av = "branch-item";
44
							var cul = { tn: "ul", chs: [] };
45
							chs.push(cul);
46
							paint(cul, item.children);
47
						}
48
					});
49
				};
50
				var refreshTree = function() {
51
					var ul = { tn: "ul", chs: [] };
52
					paint(ul, dictData);
53
					treeCnt.empty();
54
					util.appendChild(treeCnt[0], ul);
55
					hand.empty();
56
					editForm.oc = null;
57
					editForm.pc = null;
58
					editForm.form = null;
59
				};
60
				var findParentArray = function(pc) {
61
					if(pc) {
62
						var items = findByCode(pc, dictData);
63
						return items ? (items.children ? items.children : null) : null;
64
					}
65
					return dictData;
66
				};
67
				var movePrev = function() {
68
					if(editForm.oc) {
69
						var items = findParentArray(editForm.pc);
70
						if(items) {
71
							var i = 0;
72
							for(; i < items.length; ++i) {
73
								if(items[i].code === editForm.oc) {
74
									break;
75
								}
76
							}
77
							if(i > 0 && i < items.length) {
78
								var item1 = items[i],
79
									item0 = items[i - 1];
80
								items.splice(i - 1, 2, item1, item0);
81
								refreshTree();
82
							}
83
						}
84
					}
85
				};
86
				var moveNext = function() {
87
					if(editForm.oc) {
88
						var items = findParentArray(editForm.pc);
89
						if(items) {
90
							var i = 0;
91
							for(; i < items.length; ++i) {
92
								if(items[i].code === editForm.oc) {
93
									break;
94
								}
95
							}
96
							if(i < (items.length - 1)) {
97
								var item1 = items[i],
98
									item0 = items[i + 1];
99
								items.splice(i, 2, item0, item1);
100
								refreshTree();
101
							}
102
						}
103
					}
104
				};
105
				var deleteItem = function(pc, oc) {
106
					if(editForm.oc) {
107
					var items = findParentArray(editForm.pc);
108
					if(items) {
109
						var i = 0;
110
						for(; i < items.length; ++i) {
111
							if(items[i].code === editForm.oc) {
112
								break;
113
							}
114
						}
115
						if(i < items.length) {
116
							items.splice(i, 1);
117
							refreshTree();
118
						}
119
					}
120
					}
121
				};
122

123
				var fillEdit = function(pc, di) {
124
					hand.val();
125
					editForm.form = form.build(root.find(".info"));
126
					editForm.pc = pc;
127
					editForm.oc = di.code;
128
					editForm.form.val(di);
129
				};
130

131
				root.on("click", ".nav li", function(evt) {
132
					var $this = $(this);
133
					if($this.hasClass("branch-item")) {
134
						$this.toggleClass("open");
135
					}
136
					var di = findByCode($this.attr("code"), dictData);
137
					if(di) {
138
						fillEdit($this.attr("pcode"), di);
139
					}
140
					evt.stopPropagation();
141
				});
142
				root.on("click", ".opt-newroot", function() {
143
					fillEdit("", {});
144
				});
145
				root.on("click", ".opt-new", function() {
146
					fillEdit(editForm.oc, {});
147
				});
148
				root.on("click", ".opt-prev", function() {
149
					movePrev();
150
				});
151
				root.on("click", ".opt-next", function() {
152
						moveNext();
153
				});
154
				root.on("click", ".opt-del", function() {
155
						deleteItem();
156
				});
157
				root.on("click", ".opt-ok", function() {
158
					if(editForm.form.validate()) {
159
						var item = editForm.form.val();
160
						if(editForm.oc) {
161
							var di = findByCode(item.code, dictData);
162
							if(item.code !== editForm.oc) {
163
								if(di) {
164
									util.alert("存在重复的CODE");
165
									return;
166
								}
167
								di = findByCode(editForm.oc, dictData);
168
							}
169
							if(di) {
170
								di.caption = item.caption;
171
								di.shortCode = item.shortCode;
172
								di.enabled = item.enabled;
173
								di.system = item.system;
174
								di.descp = item.descp;
175
								di.code = item.code;
176
								refreshTree();
177
							}
178
						} else {
179
							var items = dictData;
180
							if(findByCode(item.code, dictData)) {
181
								util.alert("存在重复的CODE");
182
								return;
183
							}
184
							if(editForm.pc) {
185
								items = findByCode(editForm.pc,dictData);
186
								if(items) {
187
									if(items.children) {
188
										items = items.children;
189
									} else {
190
										items = items.children = [];
191
									}
192
								} else {
193
									items = dictData;
194
								}
195
							}
196
							var di = { code: item.code, caption: item.caption, shortCode: item.shortCode, enabled: item.enabled, system: item.system, descp: item.descp };
197
							items.push(di);
198
							refreshTree();
199
						}
200
					}
201
				});
202
				root.find(".opt-save").on("click", function() {
203
					util.put("../ajax/sys/dict/item/" + data.code, dictData, function() {
204
						spa.closeModal();
205
						if(data.hand) {
206
							data.hand();
207
						}
208
					}, {});
209
				});
210

211
				refreshTree();
212

213
			}
214
		};
215
	});
216
});

+ 40 - 0
js/model/sys/dict/itemlist.js

@ -0,0 +1,40 @@
1
;
2
spa_define(function() {
3
	return $.use(["code", "util", "spa", "doc"], function(code, util, spa, doc) {
4
		return {
5
			modal: function(data) {
6
				var root = spa.findInModal(".sys_dict_itemlist");
7
				root.find(".modal-ctrl .icon-times").on("click", function() {
8
					spa.closeModal();
9
				});
10

11
				var ul = root.find(".ld-items");
12
				var codeHand = code.parse(ul[0]);
13
				codeHand.shell("itemE", function(env) {
14
					var val = env.cd[this.k];
15
					return val === true ? "有效的" : (val === false ? "无效的" : "");
16
				});
17
				codeHand.shell("itemS", function(env) {
18
					var val = env.cd[this.k];
19
					return val === true ? "系统保留的": (val === false ? "非系统保留的" : "");
20
				});
21
				var fill = function(e, items) {
22
					items.forEach(function(item) {
23
						codeHand.fill(e, item);
24
						if(item.children && item.children.length) {
25
							var cul = doc.createElement("ul");
26
							e.lastElementChild.appendChild(cul);
27
							fill(cul, item.children);
28
						}
29
					});
30
				};
31
				ul.empty();
32
				var docf = doc.createDocumentFragment();
33
				fill(docf, data.data);
34
				ul[0].appendChild(docf);
35
				docf = null;
36
			}
37
		};
38
	});
39

40
});

+ 1 - 1
js/model/sys/org/new.js

@ -3,7 +3,7 @@ spa_define(function() {
3 3
	return $.use(["spa","util","form"], function(spa,util,fb) {
4 4
		return {
5 5
			modal : function(data) {
6
				var root = spa.findInModal(".sys_resource_new");
6
				var root = spa.findInModal(".sys_org_new");
7 7
				var form =fb(root.find(".newForm"));
8 8
				root.find(".modal-ctrl .icon-times").on("click", function() {
9 9
					spa.closeModal();

+ 76 - 0
js/model/sys/user/index.js

@ -0,0 +1,76 @@
1
;
2
spa_define(function() {
3
	return $.use(["spa", "pagedatagrid", "util"], function(spa, pdgf, util) {
4
		return {
5
			main: function() {
6
				var root = spa.findInMain(".sys_user_index");
7
				var pdg = pdgf.build(root);
8
				root.find(".opt-query").on("click", function() {
9
					pdg.load();
10
				});
11
				root.find(".opt-new").on("click", function() {
12
					spa.showModal("sys_user_new", function() { pdg.load() });
13
				});
14
				root.find(".dt-tpl").on("click", "th.opt-check>i.icon-st-check", function() {
15
					var $this = $(this);
16
					$this.toggleClass("checked");
17
					if($this.hasClass("checked")) {
18
						root.find(".dt-tpl td.opt-check>i.icon-st-check").addClass("checked");
19
					} else {
20
						root.find(".dt-tpl td.opt-check>i.icon-st-check").removeClass("checked");
21
					}
22
				});
23
				root.find(".dt-tpl").on("click", "td.opt-check>i.icon-st-check", function() {
24
					var $this = $(this);
25
					$this.toggleClass("checked");
26
				});
27
				root.find(".opt-edit").on("click", function() {
28
					var $org = root.find("td.opt-check>i.checked");
29
					if($org.length) {
30
						if($org.length > 1) {
31
							util.alertMsg("只能选择一个用户");
32
						} else {
33
							$.util.get("../ajax/sys/user/id/" + $org.attr("userId"), null, function(rd) {
34
								if(rd) {
35
									spa.showModal("sys_user_edit", { data: rd, hand: function() { pdg.load() } })
36
								} else {
37
									util.alertMsg("机构已不存在", function() { pdg.load(); });
38
								}
39
							}, {});
40
						}
41
					} else {
42
						util.alert("请选择一个用户");
43
					}
44
				});
45
				root.find(".opt-del").on("click", function() {
46
					var $org = root.find("td.opt-check>i.checked");
47
					if($org.length) {
48
						var ret = [];
49
						$org.each(function() {
50
							ret.push($(this).attr("orgId"));
51
						});
52
						util.boxMsg({
53
							title: "确认删除",
54
							content: "您是否要删除选中的用户信息,机构信息删除后不可恢复!!!!!!!!!!!!!!!!!!",
55
							btns: [{
56
									caption: "删除",
57
									hand: function() {
58
										util.post("../ajax/sys/user/del", { ids: ret }, function() { pdg.load() }, {});
59
									}
60
								},
61
								{ caption: "取消" }
62
							]
63
						});
64
					} else {
65
						util.alert("请选择一个用户");
66
					}
67
				});
68
				pdg.load();
69

70
			},
71
			mainDestory: function() {
72

73
			},
74
		};
75
	});
76
});

+ 34 - 0
js/model/sys/user/new.js

@ -0,0 +1,34 @@
1
;
2
spa_define(function() {
3
	return $.use(["spa", "util", "form", "upload"], function(spa, util, fb, upload) {
4
		return {
5
			modal: function(data) {
6
				var root = spa.findInModal(".sys_user_new");
7
				var form = fb.build(root.find(".newForm"));
8
				root.find(".modal-ctrl .icon-times").on("click", function() {
9
					spa.closeModal();
10
				});
11
				upload.build({
12
					render: root.find(".upload-btn"),
13
					accept: "image/gif, image/jpeg",
14
					fail: function(errType, errData) { /*this ={id,name,size,type,abort=function}*/ },
15
					async: false,
16
					maxSize: 1024 * 1024 * 10,
17
					done: function(data) { /*this ={id,name,size,type,abort=function}*/ },
18
					start: function() { /*this ={id,name,size,type,abort=function}*/ },
19
					notity: function(total, loaded) { /*this ={id,name,size,type,abort=function}*/ },
20
					uri: "../ajax/sys/user/head"
21
				});
22

23
				root.find(".opt-save").on("click", function() {
24
					form.doPost("../ajax/sys/user", function() {
25
						spa.closeModal();
26
						if(data) {
27
							data();
28
						}
29
					}, {});
30
				});
31
			}
32
		}
33
	});
34
});

+ 3 - 3
js/spa.js

@ -259,9 +259,9 @@ $.define(["jQuery", "util", "doc", "win", "body"], "spa", function($, util, doc,
259 259
					if(model.state < 22) {
260 260
						model.state = 22;
261 261
						util.raise({
262
							code: "loadModelScript_" + err.toString(),
263
							msg: err.toString() || "",
264
							detailMsg: err.toString() || "",
262
							code: "loadModelScript_",
263
							msg:"",
264
							detailMsg: "",
265 265
							url: model.script
266 266
						});
267 267
					}

+ 144 - 0
js/upload.js

@ -0,0 +1,144 @@
1
$.define(["jQuery", "doc", "util"], "upload", function($, doc, util) {
2
	var g_upload_ref = 1,
3
		upload_remove = function(form) {
4
			form.addClass("hide");
5
			setTimeout(function() { form.remove(); }, 1000);
6
		},
7
		over = function(xhr) {
8
			xhr.onerror = null;
9
			xhr.onload = null;
10
			xhr.ontimeout = null;
11
			xhr.onabort = null;
12
			if(xhr.upload) {
13
				xhr.upload.onprogress = null;
14
			}
15
		},
16
		uploader_create = function(uploader) {
17
			var form = doc.createElement("form");
18
			form.setAttribute("enctype", "multipart/form-data");
19
			form.setAttribute("class", "upload-form");
20
			form.setAttribute("testRef", "" + (new Date()).getTime());
21
			finput = doc.createElement("input");
22
			finput.setAttribute("type", "file");
23
			finput.setAttribute("name", "filename");
24
			if(uploader.accept) finput.setAttribute("accept", uploader.accept);
25
			form.appendChild(finput);
26
			$form = $(form);
27
			$file = $(finput);
28
			$file.on("change", function() {
29
				var files = finput.files,
30
					file, fsize, xhr, formData, eobj,eContext = {},
31
					abortUpload = function() {
32
						if(!eContext.state) {
33
							xhr.abort();
34
							raiseError("abort");
35
						}
36
					},
37
					raiseError = function(er, data) {
38
						if(!eContext.state) {
39
							over(xhr);
40
							eContext.state = er;
41
							if(uploader.fail) uploader.fail.call(eContext, er, data);
42
							if(!uploader.async) {
43
								uploader_create(uploader);
44
							}
45
						}
46
					},
47
					formData;
48
				if(files.length) {
49
					file = files[0];
50
					fsize = file.size;
51
					if(uploader.maxSize && uploader.maxSize < fsize) {
52
						(uploader.invalid || util.raise)({ code: "upload_size", msg: "fsize", detailMsg: "上传文件太大[size > " + fsize + "]" });
53
						return;
54
					}
55
					g_upload_ref++;
56
					$file.off("change");
57
					upload_remove($form);
58
					if(uploader.async) {
59
						uploader_create(uploader);
60
					}
61
					eContext.name = file.name;
62
					eContext.size = file.size;
63
					eContext.type = file.type;
64
					eContext.id=g_upload_ref;
65
					eContext.abort = abortUpload;
66
					formData = new FormData(form);
67
					xhr = new XMLHttpRequest();
68
					xhr.onerror = function() {
69
						raiseError("error");
70
					};
71
					xhr.onabort = function() {
72
						raiseError("abort");
73
					};
74
					xhr.ontimeout = function() {
75
						raiseError("timeout");
76
					};
77
					xhr.onload = function() {
78
						if(!eContext.state) {
79
							if(xhr.status == 200) {
80
								var ro, rs = xhr.responseText;
81
								if(rs) {
82
									try {
83
										ro = JSON.parse(rs);
84
									} catch(err) {
85
										raiseError("parse", err);
86
									}
87
									if(ro.success) {
88
										over();
89
										state = "done";
90
										if(uploader.done) {
91
											uploader.done.call(eContext, ro.data);
92
										}
93
										if(!uploader.async) {
94
											uploader_create(uploader);
95
										}
96
									} else {
97
										raiseError("logic", ro);
98
									}
99
								} else {
100
									raiseError("emptyResponseText");
101
								}
102
							} else {
103
								raiseError("invalidHttpStatus", xhr.statusText);
104
							}
105
						}
106
					};
107
					if(uploader.start) uploader.start.call(eContext);
108
					xhr.open("POST", uploader.uri);
109
					if(xhr.upload && uploader.notity) {
110
						xhr.upload.onprogress = function(event) {
111
							if(event.lengthComputable) {
112
								uploader.notity.call(eContext, event.total, event.loaded);
113
							}
114
						};
115
					}
116
					if(uploader.timeout) {
117
						try {
118
							xhr.timeout = uploader.timeout;
119
						} catch(er) {
120
							setTimeout(function() {
121
								raiseError("timeout");
122
							}, uploader.timeout);
123
						}
124
					}
125
					xhr.send(formData);
126
				}
127
			});
128
			$form.appendTo(uploader.render);
129
		};
130

131
	return {
132
		build: function(options) {
133
			if(options.render) {
134
				if(!options.render.jquery) {
135
					options.render = $(options.render);
136
				}
137
				if(options.render.length === 1) {
138
					uploader_create(options);
139
					return true;
140
				}
141
			}
142
		}
143
	};
144
});