qzyReal %!s(int64=3) %!d(string=hai) anos
pai
achega
67a96ef44f
Modificáronse 33 ficheiros con 1399 adicións e 475 borrados
  1. 237 209
      sa-frame/menu-list-sp.js
  2. 9 10
      sa-frame/menu-list.js
  3. 6 5
      sa-view-sp/sp-admin/admin-add.html
  4. 13 13
      sa-view-sp/sp-admin/admin-list.html
  5. 14 11
      sa-view-sp/sp-cfg/server-cfg.html
  6. 2 5
      sa-view-sp/sp-role/role-add.html
  7. 0 1
      sa-view-sp/sp-role/role-list.html
  8. 1 1
      sa-view/tb-car-black/tb-car-black-add.html
  9. 1 1
      sa-view/tb-car-black/tb-car-black-info.html
  10. 42 24
      sa-view/tb-car-filing/tb-car-filing-add.html
  11. 13 9
      sa-view/tb-car-filing/tb-car-filing-list.html
  12. 1 1
      sa-view/tb-car-visit-record/tb-car-visit-record-list.html
  13. 105 0
      sa-view/tb-department/admin-add.html
  14. 341 0
      sa-view/tb-department/admin-list.html
  15. 118 0
      sa-view/tb-department/tb-department-add.html
  16. 70 0
      sa-view/tb-department/tb-department-info.html
  17. 170 0
      sa-view/tb-department/tb-department-list.html
  18. 1 1
      sa-view/tb-dept/tb-dept-add.html
  19. 1 1
      sa-view/tb-dept/tb-dept-list.html
  20. 2 2
      sa-view/tb-gate-terminal/tb-gate-terminal-add.html
  21. 37 31
      sa-view/tb-gate-terminal/tb-gate-terminal-list.html
  22. 1 1
      sa-view/tb-person-black/tb-person-black-add.html
  23. 1 1
      sa-view/tb-person-black/tb-person-black-info.html
  24. 1 1
      sa-view/tb-person-black/tb-person-black-list.html
  25. 40 17
      sa-view/tb-person-filing/tb-person-filing-add.html
  26. 33 38
      sa-view/tb-person-filing/tb-person-filing-list.html
  27. 13 10
      sa-view/tb-person-visit-record/tb-person-visit-record-list.html
  28. 11 10
      sa-view/tb-terminal/tb-terminal-list.html
  29. 90 49
      sa-view/tb-venues/tb-venues-add.html
  30. 10 12
      sa-view/tb-venues/tb-venues-addchildren.html
  31. 12 8
      sa-view/tb-venues/tb-venues-list.html
  32. 3 3
      static/sa.js
  33. BIN=BIN
      static/template/备案导入模板.xlsx

+ 237 - 209
sa-frame/menu-list-sp.js

@@ -23,7 +23,7 @@ window.menuList.unshift({
 		parent: true,
 		childList: [{
 				id: 'tb-dept-list',
-				name: '组织管理',
+				name: '备案组织',
 				icon: 'el-icon-s-operation',
 				url: 'sa-view/tb-dept/tb-dept-list.html',
 				childList: [{
@@ -44,7 +44,31 @@ window.menuList.unshift({
 
 					},
 				]
+			}, {
+				id: 'tb-department-list',
+				icon: 'el-icon-s-operation',
+				name: '部门管理',
+				url: 'sa-view/tb-department/tb-department-list.html',
+				childList: [{
+						id: 'tb-department-add',
+						name: '添加',
+						isShow: false,
+					},
+					{
+						id: 'tb-department-del',
+						name: '删除',
+						isShow: false,
+
+					},
+					{
+						id: 'tb-department-edit',
+						name: '编辑',
+						isShow: false,
+
+					},
+				]
 			},
+
 			{
 				id: 'admin-list',
 				name: '用户管理',
@@ -66,7 +90,11 @@ window.menuList.unshift({
 						id: 'sp-admin-edit',
 						name: '编辑',
 						isShow: false,
-
+					},
+					{
+						id: 'sp-admin-role-edit',
+						name: '改角色',
+						isShow: false,
 					},
 				]
 			},
@@ -142,81 +170,174 @@ window.menuList.unshift({
 			},
 		]
 	}, {
-		id: 'console',
-		name: '监控中心',
+		id: 'tb-terminal-venues',
+		name: '设备场所子系统',
+		icon: 'el-icon-monitor',
+		info: '设备管理表数据的维护',
 		parent: true,
-		icon: 'el-icon-view',
-		info: '对本系统的各种监控',
 		childList: [{
-				id: 'redis-console',
-				icon: 'el-icon-tickets',
-				name: 'Redis控制台',
-				url: 'sa-view-sp/sp-console/redis-console.html',
-				info: 'redis常用工具'
-			},
+				id: 'tb-venues-list',
+				name: '场所管理',
+				url: 'sa-view/tb-venues/tb-venues-list.html',
+				icon: 'el-icon-s-operation',
+				childList: [{
+						id: 'tb-venues-add',
+						name: '添加',
+						isShow: false,
+					},
+					{
+						id: 'tb-venues-del',
+						name: '删除',
+						isShow: false,
 
-			{
-				id: 'sql-console',
-				name: 'SQL 监控台',
-				icon: 'el-icon-set-up',
-				url: 'sa-view-sp/sp-console/sql-console.html',
-				info: 'sql控制台'
+					},
+					{
+						id: 'tb-venues-edit',
+						name: '编辑',
+						isShow: false,
+
+					},
+				]
 			},
+			{
+				id: 'tb-terminal',
+				name: '人脸设备管理',
+				icon: 'el-icon-user-solid',
+				parent: true,
+				childList: [{
+						id: 'tb-terminal-list',
+						name: '人脸设备',
+						icon: 'el-icon-s-custom',
+						url: 'sa-view/tb-terminal/tb-terminal-list.html',
+						childList: [{
+								id: 'tb-terminal-down',
+								name: '下发数据',
+								isShow: false,
+							},
+							{
+								id: 'tb-terminal-clear',
+								name: '清除数据',
+								isShow: false,
 
-		]
-	}, {
-		id: 'sp-cfg',
-		name: '防疫参数设置',
-		parent: true,
-		icon: 'el-icon-setting',
-		info: '有防疫的一些配置',
-		childList: [{
-			id: 'sp-cfg-server',
-			name: '参数设置',
-			icon: 'el-icon-s-grid',
-			url: 'sa-view-sp/sp-cfg/server-cfg.html'
-		}, ]
-	}, {
-		id: 'filing-system',
-		name: '备案管理子系统',
-		parent: true,
-		icon: 'el-icon-suitcase',
-		childList: [{
-				id: 'tb-filing',
-				name: '备案管理',
+							},
+							{
+								id: 'tb-terminal-reboot',
+								name: '重启',
+								isShow: false,
+
+							},
+							{
+								id: 'tb-terminal-open',
+								name: '远程开门',
+								isShow: false,
+
+							},
+							{
+								id: 'tb-terminal-sync-time',
+								name: '时钟同步',
+								isShow: false,
+
+							},
+							{
+								id: 'tb-terminal-unbind',
+								name: '解绑',
+								isShow: false,
+
+							},
+							{
+								id: 'tb-terminal-edit',
+								name: '编辑',
+								isShow: false,
+
+							},
+							{
+								id: 'tb-terminal-del',
+								name: '删除',
+								isShow: false,
+
+							},
+						]
+					}, {
+						id: 'tb-command-log-list',
+						name: '命令日志',
+						icon: 'el-icon-document-copy',
+						url: 'sa-view/tb-command-log/tb-command-log-list.html',
+						childList: [{
+							id: 'tb-command-log-del',
+							name: '删除',
+							isShow: false,
+
+						}, ]
+					},
+
+				]
+			},
+			{
+				id: 'tb-gate-terminal',
+				name: '车辆道闸',
 				parent: true,
-				icon: 'el-icon-date',
-				url: 'sa-view/tb-car-black/tb-car-black-list.html',
+				icon: 'el-icon-s-platform',
 				childList: [{
-						id: 'tb-car-filing-list',
-						name: '车辆备案',
-						icon: 'el-icon-receiving',
-						url: 'sa-view/tb-car-filing/tb-car-filing-list.html',
+						id: 'tb-gate-terminal-list',
+						name: '道闸设备',
+						icon: 'el-icon-takeaway-box',
+						url: 'sa-view/tb-gate-terminal/tb-gate-terminal-list.html',
 						childList: [{
-								id: 'tb-car-filing-judge',
-								name: '审核',
+								id: 'tb-gate-terminal-open',
+								name: '远程开闸',
 								isShow: false,
+
 							},
 							{
-								id: 'tb-car-filing-add',
+								id: 'tb-gate-terminal-add',
 								name: '添加',
 								isShow: false,
+
 							},
 							{
-								id: 'tb-car-filing-del',
+								id: 'tb-gate-terminal-del',
 								name: '删除',
 								isShow: false,
 
 							},
 							{
-								id: 'tb-car-filing-edit',
-								name: '编辑',
+								id: 'tb-gate-terminal-edit',
+								name: '修改',
 								isShow: false,
 
 							},
 						]
 					},
 					{
+						id: 'tb-gate-command-log-list',
+						name: '命令日志',
+						icon: 'el-icon-document-copy',
+						url: 'sa-view/tb-gate-command-log/tb-gate-command-log-list.html',
+						childList: [{
+							id: 'tb-gate-command-log-del',
+							name: '删除',
+							isShow: false,
+
+						}]
+					}
+				]
+			},
+
+
+		]
+
+	}, {
+		id: 'filing-system',
+		name: '备案管理子系统',
+		parent: true,
+		icon: 'el-icon-suitcase',
+		childList: [{
+				id: 'tb-filing',
+				name: '备案管理',
+				parent: true,
+				icon: 'el-icon-date',
+				url: 'sa-view/tb-car-black/tb-car-black-list.html',
+				childList: [{
 						id: 'tb-person-filing-list',
 						name: '人员备案',
 						icon: 'el-icon-s-custom',
@@ -250,7 +371,36 @@ window.menuList.unshift({
 
 							},
 						]
-					}
+					},{
+						id: 'tb-car-filing-list',
+						name: '车辆备案',
+						icon: 'el-icon-receiving',
+						url: 'sa-view/tb-car-filing/tb-car-filing-list.html',
+						childList: [{
+								id: 'tb-car-filing-judge',
+								name: '审核',
+								isShow: false,
+							},
+							{
+								id: 'tb-car-filing-add',
+								name: '添加',
+								isShow: false,
+							},
+							{
+								id: 'tb-car-filing-del',
+								name: '删除',
+								isShow: false,
+
+							},
+							{
+								id: 'tb-car-filing-edit',
+								name: '编辑',
+								isShow: false,
+
+							},
+						]
+					},
+					
 				]
 			},
 			{
@@ -312,6 +462,41 @@ window.menuList.unshift({
 
 		]
 	}, {
+		id: 'console',
+		name: '监控中心',
+		parent: true,
+		icon: 'el-icon-view',
+		info: '对本系统的各种监控',
+		childList: [{
+				id: 'redis-console',
+				icon: 'el-icon-tickets',
+				name: 'Redis控制台',
+				url: 'sa-view-sp/sp-console/redis-console.html',
+				info: 'redis常用工具'
+			},
+
+			{
+				id: 'sql-console',
+				name: 'SQL 监控台',
+				icon: 'el-icon-set-up',
+				url: 'sa-view-sp/sp-console/sql-console.html',
+				info: 'sql控制台'
+			},
+
+		]
+	}, {
+		id: 'sp-cfg',
+		name: '防疫参数设置',
+		parent: true,
+		icon: 'el-icon-setting',
+		info: '有防疫的一些配置',
+		childList: [{
+			id: 'sp-cfg-server',
+			name: '参数设置',
+			icon: 'el-icon-s-grid',
+			url: 'sa-view-sp/sp-cfg/server-cfg.html'
+		}, ]
+	}, {
 		id: 'tb-person-visit-record',
 		name: '人脸识别子系统',
 		icon: 'el-icon-camera-solid',
@@ -386,163 +571,6 @@ window.menuList.unshift({
 	},
 
 	{
-		id: 'tb-terminal-venues',
-		name: '设备场所子系统',
-		icon: 'el-icon-monitor',
-		info: '设备管理表数据的维护',
-		parent: true,
-		childList: [{
-				id: 'tb-venues-list',
-				name: '场所管理',
-				url: 'sa-view/tb-venues/tb-venues-list.html',
-				icon: 'el-icon-s-operation',
-				childList: [{
-						id: 'tb-venues-add',
-						name: '添加',
-						isShow: false,
-					},
-					{
-						id: 'tb-venues-del',
-						name: '删除',
-						isShow: false,
-
-					},
-					{
-						id: 'tb-venues-edit',
-						name: '编辑',
-						isShow: false,
-
-					},
-				]
-			},
-			{
-				id: 'tb-terminal',
-				name: '人脸设备管理',
-				icon: 'el-icon-user-solid',
-				parent: true,
-				childList: [{
-						id: 'tb-terminal-list',
-						name: '人脸设备',
-						icon: 'el-icon-s-custom',
-						url: 'sa-view/tb-terminal/tb-terminal-list.html',
-						childList: [{
-								id: 'tb-terminal-down',
-								name: '下发数据',
-								isShow: false,
-							},
-							{
-								id: 'tb-terminal-clear',
-								name: '清除数据',
-								isShow: false,
-
-							},
-							{
-								id: 'tb-terminal-reboot',
-								name: '重启',
-								isShow: false,
-
-							},
-							{
-								id: 'tb-terminal-open',
-								name: '远程开门',
-								isShow: false,
-
-							},
-							{
-								id: 'tb-terminal-sync-time',
-								name: '时钟同步',
-								isShow: false,
-
-							},
-							{
-								id: 'tb-terminal-unbind',
-								name: '解绑',
-								isShow: false,
-
-							},
-							{
-								id: 'tb-terminal-edit',
-								name: '编辑',
-								isShow: false,
-
-							},
-							{
-								id: 'tb-terminal-del',
-								name: '删除',
-								isShow: false,
-
-							},
-						]
-					}, {
-						id: 'tb-command-log-list',
-						name: '命令日志',
-						icon: 'el-icon-document-copy',
-						url: 'sa-view/tb-command-log/tb-command-log-list.html',
-						childList: [{
-							id: 'tb-command-log-del',
-							name: '删除',
-							isShow: false,
-
-						}, ]
-					},
-
-				]
-			},
-			{
-				id: 'tb-gate-terminal',
-				name: '车辆道闸',
-				parent: true,
-				icon: 'el-icon-s-platform',
-				childList: [{
-						id: 'tb-gate-terminal-list',
-						name: '道闸设备',
-						icon: 'el-icon-takeaway-box',
-						url: 'sa-view/tb-gate-terminal/tb-gate-terminal-list.html',
-						childList: [{
-								id: 'tb-gate-terminal-open',
-								name: '远程开闸',
-								isShow: false,
-
-							},
-							{
-								id: 'tb-gate-terminal-add',
-								name: '添加',
-								isShow: false,
-
-							},
-							{
-								id: 'tb-gate-terminal-del',
-								name: '删除',
-								isShow: false,
-
-							},
-							{
-								id: 'tb-gate-terminal-edit',
-								name: '修改',
-								isShow: false,
-
-							},
-						]
-					},
-					{
-						id: 'tb-gate-command-log-list',
-						name: '命令日志',
-						icon: 'el-icon-document-copy',
-						url: 'sa-view/tb-gate-command-log/tb-gate-command-log-list.html',
-						childList: [{
-							id: 'tb-gate-command-log-del',
-							name: '删除',
-							isShow: false,
-
-						}]
-					}
-				]
-			},
-
-
-		]
-
-	}, {
 		id: 'ep-monitor-system',
 		name: '防疫监控子系统',
 		icon: 'el-icon-user',

+ 9 - 10
sa-frame/menu-list.js

@@ -1,21 +1,20 @@
-// 一个菜单可以包括的所有属性
+// 一个菜单可以包括的所有属性 
 // {
 // 	id: '12345',		// 菜单id, 必须唯一
 // 	name: '用户中心',		// 菜单名称, 同时也是tab选项卡上显示的名称
 // 	icon: 'el-icon-user',	// 菜单图标, 参考地址:  https://element.eleme.cn/#/zh-CN/component/icon
-//	info: '管理所有用户',	// 菜单介绍, 在菜单预览和分配权限时会有显示
+//	info: '管理所有用户',	// 菜单介绍, 在菜单预览和分配权限时会有显示 
 // 	url: 'sa-html/user/user-list.html',	// 菜单指向地址
-// 	parentId: 1,			// 所属父菜单id, 如果指定了一个值, sa-admin在初始化时会将此菜单转移到指定菜单上
+// 	parentId: 1,			// 所属父菜单id, 如果指定了一个值, sa-admin在初始化时会将此菜单转移到指定菜单上 
 // 	isShow: true,			// 是否显示, 默认true
-// 	isBlank: false,		// 是否属于外部链接, 如果为true, 则点击菜单时从新窗口打开
+// 	isBlank: false,		// 是否属于外部链接, 如果为true, 则点击菜单时从新窗口打开 
 // 	childList: [			// 指定这个菜单所有的子菜单, 子菜单可以继续指定子菜单, 至多支持三级菜单
-// 		// ....
+// 		// .... 
 // 	],
-//	click: function(){}		// 点击菜单执行一个函数
+//	click: function(){}		// 点击菜单执行一个函数 
 // }
 
-// 定义菜单列表
+// 定义菜单列表 
 var menuList =	[
-
-
-]
+	
+]

+ 6 - 5
sa-view-sp/sp-admin/admin-add.html

@@ -31,11 +31,11 @@
 					<sa-item type="text" name="姓名" v-model="m.nickname" br need></sa-item>
 					<sa-item style="display: inline;" type="text" name="手机号" v-model="m.phone" br need></sa-item>
 					<div class="c-item">
-						<label class="c-label"><span style="color: red;">*</span>所属组织:</label>
-						<el-select v-model="m.deptId">
+						<label class="c-label"><span style="color: red;">*</span>所属部门:</label>
+						<el-select v-model="m.departmentId">
 							<el-option label="请选择" v-for="(item,index) in deptList" :key="item.id" :label="item.name"
 								:value="item.id">
-								</el-option>
+							</el-option>
 						</el-select>
 					</div>
 					<sa-item type="password" name="密码" v-model="m.password" br need></sa-item>
@@ -63,7 +63,7 @@
 					m: {
 						id: 0,
 						name: '',
-						deptId:'',
+						departmentId: '',
 						avatar: '',
 						password: '',
 						roleId: 0
@@ -75,7 +75,7 @@
 				},
 				methods: {
 					getDeptList() {
-						sa.ajax('/TbDept/getList', {
+						sa.ajax('/TbDepartment/getList', {
 							pageNo: 1,
 							pageSize: 100
 						}, function(resp) {
@@ -94,6 +94,7 @@
 							sa.error('请输入正确的手机号');
 							return;
 						}
+						sa.checkNull(m.departmentId, '请选择部门');
 						sa.checkNull(m.password, '请输入密码');
 						sa.checkNull(m.roleId, '请选择角色');
 

+ 13 - 13
sa-view-sp/sp-admin/admin-list.html

@@ -62,7 +62,7 @@
 							<span v-else>{{s.row.name}}</span>
 						</template>
 					</sa-td>
-					<sa-td type="text" name="所属组织" prop="deptName" not='-'></sa-td>
+					<sa-td type="text" name="所属部门" prop="departmentName" not='-' width="130"></sa-td>
 					<sa-td type="text" name="所属角色" prop="roleName" not='-'></sa-td>
 					<sa-td type="datetime" name="创建日期" prop="createTime" width="150px"></sa-td>
 					<sa-td type="datetime" name="最后登录" prop="loginTime" width="150px" not='-'></sa-td>
@@ -80,7 +80,7 @@
 								</el-button>
 								<el-dropdown-menu slot="dropdown">
 									<span @click="updateDept(s.row)">
-										<el-dropdown-item>修改组织</el-dropdown-item>
+										<el-dropdown-item>修改部门</el-dropdown-item>
 									</span>
 									<span @click="updateName(s.row)">
 										<el-dropdown-item>修改账号</el-dropdown-item>
@@ -97,7 +97,7 @@
 									</span>
 								</el-dropdown-menu>
 							</el-dropdown>
-							<el-dropdown trigger="click" style="font-size: 0.85em;" v-if="sa.isAuth('sp-admin-edit')">
+							<el-dropdown trigger="click" style="font-size: 0.85em;" v-if="sa.isAuth('sp-admin-role-edit')">
 								<el-button type="primary" class="c-btn">
 									修改角色为 <i class="el-icon-arrow-down el-icon--right"></i>
 								</el-button>
@@ -120,10 +120,10 @@
 				<sa-item type="page" :curr.sync="p.pageNo" :size.sync="p.pageSize" :total="dataCount" @change="f5()">
 				</sa-item>
 			</div>
-			<el-dialog title="修改组织" :modal="false" :visible.sync="modal.visible" width="400px">
+			<el-dialog title="修改部门" :modal="false" :visible.sync="modal.visible" width="400px">
 				<div class="c-item">
-					<label class="c-label"><span style="color: red;">*</span>组织:</label>
-					<el-select v-model="modal.form.deptId">
+					<label class="c-label"><span style="color: red;">*</span>部门:</label>
+					<el-select v-model="modal.form.departmentId">
 						<el-option label="请选择" v-for="(item,index) in deptList" :key="item.id" :label="item.name"
 							:value="item.id"></el-option>
 					</el-select>
@@ -156,7 +156,7 @@
 						visible:false,
 						form: {
 							id: '',
-							deptId: ''
+							departmentId: ''
 						}
 					},
 					dataCount: 0,
@@ -169,25 +169,25 @@
 							visible:true,
 							form:{
 								id:data.id,
-								deptId:data.deptId
+								departmentId:data.departmentId
 							}
 						})
 					},
 					sureFn(){
 						let data=this.modal.form;
-						let deptId=data.deptId;
-						if(!deptId){
+						let departmentId=data.departmentId;
+						if(!departmentId){
 							sa.error('请选择组织');
 							return;
 						}
-						data.deptId=deptId;
-						sa.ajax('/admin/updateDept', data, function(res) {
+						data.departmentId=departmentId;
+						sa.ajax('/admin/updateDepartment', data, function(res) {
 							this.modal.visible=false;
 							this.f5();
 						}.bind(this));
 					},
 					getDeptList() {
-						sa.ajax('/TbDept/getList', {
+						sa.ajax('/TbDepartment/getList', {
 							pageNo: 1,
 							pageSize: 100
 						}, function(resp) {

+ 14 - 11
sa-view-sp/sp-cfg/server-cfg.html

@@ -97,18 +97,21 @@
 						<sa-item type="enum" name="设备端备案" v-model="m.termianlFilling" :jv="{1: '允许', 0: '禁止'}" jtype="1"
 							br>
 						</sa-item>
-						<sa-item type="enum" name="行程卡限制" v-model="m.tourLimit" :jv="{1: '开启', 0: '关闭'}" jtype="1"
-							>
+						<sa-item type="enum" name="行程卡限制" v-model="m.tourLimit" :jv="{1: '开启', 0: '关闭'}" jtype="1">
 						</sa-item><span>开启:近期去过中高风险区不予开闸;关闭:不限制</span>
 						<br />
 						<div class="c-item">
 							<label class="c-label">
-								核酸检测(小时内):</label>
-							<el-input-number step-strictly :step="24" class="item-num" v-model="m.acidLimit" :min="0" :max="72" size="mini">
+								核酸时效(小时内):</label>
+							<el-input-number step-strictly :step="24" class="item-num" v-model="m.acidLimit" :min="0"
+								:max="72" size="mini">
 							</el-input-number>
 							<span style="margin-left: 10px;">0表示不限制</span>
 						</div>
-						<br/>
+						<br />
+						<sa-item type="enum" name="核酸校验模式" v-model="m.verifyMode" :jv="{0: '不校验', 1: '高中风险地区', 2: '高中低风险地区'}" jtype="1">
+						</sa-item>
+						<br />
 						<div class="c-item">
 							<label class="c-label">
 								体温阈值(℃):</label>
@@ -119,8 +122,7 @@
 						<sa-item type="enum" name="是否发送预警通知" v-model="m.sendAlarm" :jv="{1: '发送', 0: '不发送'}" jtype="1"
 							br>
 						</sa-item>
-						<sa-item  name="短信签名" v-model="m.smsSign"
-							br>
+						<sa-item name="短信签名" v-model="m.smsSign" br>
 						</sa-item>
 					</el-tab-pane>
 
@@ -141,12 +143,13 @@
 			// 创建一个默认的配置对象
 			function create_m() {
 				return {
-					termianlFilling:1,
+					termianlFilling: 1,
 					minTemperature: 37.0,
-					tourLimit:1,
-					acidLimit:24,
+					tourLimit: 1,
+					verifyMode:0,
+					acidLimit: 24,
 					sendAlarm: 1, // 新用户默认头像 
-					smsSign:'钦州码头智慧湾卡口智能防疫系统'
+					smsSign: '钦州码头智慧湾卡口智能防疫系统'
 				}
 			}
 		</script>

+ 2 - 5
sa-view-sp/sp-role/role-add.html

@@ -69,15 +69,12 @@
 						let m = this.m;		// 获取 m对象 
 						sa.checkNull(m.name, '请输入角色名字');
 						sa.checkNull(m.info, '请输入责任描述');
-						
 						// 开始增加
 						sa.ajax('/role/add', this.m, function(res){
 							sa.alert('增加成功', function() {
 								if(parent.app) {
-									res.data.is_update = false;
-									parent.app.dataList.push(res.data);
-									parent.sa.f5TableHeight();		// 刷新表格高度 
-									sa.closeCurrIframe();	// 关闭本页 
+									parent.app.f5(); // 刷新父页面列表
+									sa.closeCurrIframe(); // 关闭本页 
 								} else {
 									app.m = this.createModel();
 								}

+ 0 - 1
sa-view-sp/sp-role/role-list.html

@@ -30,7 +30,6 @@
 				</el-form>
 				<!-- 数据列表 -->
 				<el-table class="data-table" ref="data-table" :data="dataList">
-					<el-table-column label="编号" prop="id" width="70px" > </el-table-column>
 					<el-table-column label="角色名称">
 						<template slot-scope="s">
 							<el-input v-if="s.row.is_update" v-model="s.row.name"></el-input>

+ 1 - 1
sa-view/tb-car-black/tb-car-black-add.html

@@ -34,7 +34,7 @@
 					<div class="c-title" v-else>数据修改</div>
 					<el-form v-if="m">
 						<div class="c-item">
-							<label class="c-label"><span style="color: red;">*</span>部门:</label>
+							<label class="c-label"><span style="color: red;">*</span>所属组织:</label>
 							<el-select v-model="m.deptId">
 								<el-option label="请选择" v-for="(item,index) in deptList" :key="item.id"
 									:label="item.name" :value="item.id"></el-option>

+ 1 - 1
sa-view/tb-car-black/tb-car-black-info.html

@@ -25,7 +25,7 @@
 					<el-form v-if="m">
 						<el-row>
 							<el-col :span="12">
-								<sa-info name="部门" br>{{m.deptName}}</sa-info>
+								<sa-info name="所属组织" br>{{m.deptName}}</sa-info>
 								<sa-info name="车牌号" br>{{m.carNo}}</sa-info>
 								<sa-info name="禁行原因" br>{{m.reason}}</sa-info>
 							</el-col>

+ 42 - 24
sa-view/tb-car-filing/tb-car-filing-add.html

@@ -33,19 +33,34 @@
 					<div class="c-title" v-if="id == 0">数据添加</div>
 					<div class="c-title" v-else>数据修改</div>
 					<el-form v-if="m">
-						<div class="c-item">
-							<label class="c-label"><span style="color: red;">*</span>所属组织:</label>
-							<el-select v-model="m.deptId">
-								<el-option label="请选择" v-for="(item,index) in deptList" :key="item.id"
-									:label="item.name" :value="item.id"></el-option>
-							</el-select>
-						</div>
-						<sa-item type="text" name="车牌号" v-model="m.carNo" br need></sa-item>
-						<sa-item type="enum" name="类型" v-model="m.type" :jv="{1: '临时', 2: '内部'}" jtype="3" br></sa-item>
-						<sa-item type="text" name="联系人" v-model="m.driverName" br need></sa-item>
-						<sa-item type="num" name="联系电话" v-model="m.driverContact" br need></sa-item>
-						<sa-item type="text" name="联系人身份证" v-model="m.driverIdCard" br need></sa-item>
-						<sa-item type="textarea" name="备注" v-model="m.remark" br></sa-item>
+						<el-row>
+							<el-col :span="12">
+								<div class="c-item">
+									<label class="c-label"><span style="color: red;">*</span>备案组织:</label>
+									<el-select v-model="m.deptId">
+										<el-option label="请选择" v-for="(item,index) in deptList" :key="item.id"
+											:label="item.name" :value="item.id"></el-option>
+									</el-select>
+								</div>
+								<div class="c-item">
+									<label class="c-label"><span style="color: red;">*</span>备案场所:</label>
+									<el-select v-model="m.venuesId" placeholder="请选择">
+										<el-option v-for="item in venuesList" :key="item.id" :label="item.name"
+											:value="item.id">
+										</el-option>
+									</el-select>
+								</div>
+								<sa-item type="text" name="车牌号" v-model="m.carNo" br need></sa-item>
+								<sa-item type="enum" name="类型" v-model="m.type" :jv="{1: '临时', 2: '内部'}" jtype="3" br>
+								</sa-item>
+							</el-col>
+							<el-col :span="12">
+								<sa-item type="text" name="联系人" v-model="m.driverName" br need></sa-item>
+								<sa-item type="num" name="联系电话" v-model="m.driverContact" br need></sa-item>
+								<sa-item type="text" name="联系人身份证" v-model="m.driverIdCard" br need></sa-item>
+								<sa-item type="textarea" name="备注" v-model="m.remark" br></sa-item>
+							</el-col>
+						</el-row>
 						<sa-item name="" class="s-ok" br>
 							<el-button type="primary" icon="el-icon-plus" @click="ok()">保存</el-button>
 						</sa-item>
@@ -65,11 +80,13 @@
 				},
 				el: '.vue-box',
 				data: {
+					venuesList: [],
 					currentUser: sa.$sys.getCurrUser(),
 					id: sa.p('id', 0), // 获取超链接中的id参数(0=添加,非0=修改) 
 					m: {
 						id: '', //  
 						deptId: '', // 部门ID 
+						venuesId:'',
 						carNo: '', // 车牌号 
 						type: 1, // 类型(1=临时,2=内部) 
 						driverName: '', // 联系人 
@@ -83,19 +100,19 @@
 					deptList: []
 				},
 				methods: {
-
+					getVenuesList() {
+						sa.ajax('/TbVenues/getParentList', function(res) {
+							this.venuesList = res.data; // 数据
+						}.bind(this));
+					},
 					// 提交数据 
 					ok: function() {
 						// 表单校验 
 						let m = this.m;
-						sa.checkNull(m.deptId, '请选择部门');
-						let carNo=m.carNo;
+						sa.checkNull(m.deptId, '请选择备案组织');
+						sa.checkNull(m.venuesId, '请选择备案场所');
+						let carNo = m.carNo;
 						sa.checkNull(carNo, '请输入 [车牌号]');
-						carNo=carNo.toUpperCase();
-						if(!sa.isCarNo(carNo)){
-							sa.error('请填写正确的车牌号');
-							return false;
-						}
 						sa.checkNull(m.driverName, '请输入 [联系人]');
 						let contact = m.driverContact;
 						if (!sa.isPhone(contact)) {
@@ -103,12 +120,12 @@
 							return false;
 						}
 						sa.checkNull(m.driverIdCard, '请输入 [联系人身份证]');
-						let driverIdCard=m.driverIdCard;
-						if(driverIdCard.length<15){
+						let driverIdCard = m.driverIdCard;
+						if (driverIdCard.length < 15) {
 							sa.error('请输入正确的身份证');
 							return false;
 						}
-						m=sa.removeNull(m);
+						m = sa.removeNull(m);
 						// 开始增加或修改
 						if (this.id <= 0) { // 添加
 							sa.ajax('/TbCarFiling/add', m, function(res) {
@@ -149,6 +166,7 @@
 				mounted() {
 					this.init();
 					this.getDeptList();
+					this.getVenuesList();
 				}
 			})
 		</script>

+ 13 - 9
sa-view/tb-car-filing/tb-car-filing-list.html

@@ -32,7 +32,8 @@
 					<div>
 						<el-button type="primary" icon="el-icon-search" @click="p.pageNo = 1; f5()">查询</el-button>
 						<el-button type="info" icon="el-icon-refresh"
-							@click="p.carNo='',p.type='',p.driverName='',p.driverContact='',p.judgeState='',f5()">重置</el-button>
+							@click="p.carNo='',p.type='',p.driverName='',p.driverContact='',p.judgeState='',f5()">重置
+						</el-button>
 						<el-button type="primary" icon="el-icon-plus" @click="add"
 							v-if="sa.isAuth('tb-car-filing-add')">新增</el-button>
 					</div>
@@ -41,7 +42,9 @@
 				<!-- ------------- 数据列表 ------------- -->
 				<el-table class="data-table" ref="data-table" :data="dataList" style="margin-top: 5px;">
 					<sa-td name="序号" type="index"></sa-td>
-					<sa-td name="所属组织" prop="deptName" width="200"></sa-td>
+					<sa-td name="所属部门" prop="departmentName" width="130"></sa-td>
+					<sa-td name="备案组织" prop="deptName" width="150"></sa-td>
+					<sa-td name="备案场所" prop="venuesName" width="150"></sa-td>
 					<sa-td name="车牌号" prop="carNo"></sa-td>
 					<sa-td name="类型" prop="type" type="enum" :jv="{1: '临时', 2: '内部'}"></sa-td>
 					<sa-td name="联系人" prop="driverName"></sa-td>
@@ -52,15 +55,16 @@
 					<sa-td name="更新时间" prop="updateTime" width="140"></sa-td>
 					<el-table-column label="操作" fixed="right" width="240px">
 						<template slot-scope="s">
-							<el-button v-if="sa.isAuth('tb-car-filing-judge')&&s.row.judgeState==0" class="c-btn" type="success"  @click="judgeFn(s.row)">审核
+							<el-button v-if="sa.isAuth('tb-car-filing-judge')&&s.row.judgeState==0" class="c-btn"
+								type="success" @click="judgeFn(s.row)">审核
 							</el-button>
-							<el-button class="c-btn" type="success"  @click="get(s.row)">查看
+							<el-button class="c-btn" type="success" @click="get(s.row)">查看
 							</el-button>
 							<el-button v-if="sa.isAuth('tb-car-filing-edit')" class="c-btn" type="primary"
-								 @click="update(s.row)">修改
+								@click="update(s.row)">修改
 							</el-button>
 							<el-button v-if="sa.isAuth('tb-car-filing-del')" class="c-btn" type="danger"
-								 @click="del(s.row)">删除
+								@click="del(s.row)">删除
 							</el-button>
 						</template>
 					</el-table-column>
@@ -94,7 +98,7 @@
 					dataList: [], // 数据集合 
 				},
 				methods: {
-					judgeFn(data){
+					judgeFn(data) {
 						sa.showIframe('审核', 'tb-car-filing-judge.html?id=' + data.id, '700px', '70%');
 					},
 					// 刷新
@@ -119,11 +123,11 @@
 					},
 					// 修改
 					update: function(data) {
-						sa.showIframe('修改数据', 'tb-car-filing-add.html?id=' + data.id, '700px', '90%');
+						sa.showIframe('修改数据', 'tb-car-filing-add.html?id=' + data.id, '900px', '90%');
 					},
 					// 新增
 					add: function(data) {
-						sa.showIframe('新增数据', 'tb-car-filing-add.html?id=-1', '700px', '80%');
+						sa.showIframe('新增数据', 'tb-car-filing-add.html?id=-1', '900px', '80%');
 					},
 					// 删除
 					del: function(data) {

+ 1 - 1
sa-view/tb-car-visit-record/tb-car-visit-record-list.html

@@ -39,7 +39,7 @@
 				<!-- ------------- 数据列表 ------------- -->
 				<el-table class="data-table" ref="data-table" :data="dataList">
 					<sa-td name="序号" type="index"></sa-td>
-					<sa-td name="组织" prop="deptName"></sa-td>
+					<sa-td name="所属组织" prop="deptName"></sa-td>
 					<sa-td name="通道" prop="channel"></sa-td>
 					<sa-td name="车牌" prop="carNo"></sa-td>
 					<sa-td name="联系人" prop="driverName"></sa-td>

+ 105 - 0
sa-view/tb-department/admin-add.html

@@ -0,0 +1,105 @@
+<!DOCTYPE html>
+<html>
+	<head>
+		<title>添加管理员</title>
+		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+		<meta name="viewport"
+			content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
+		<!-- 所有的 css & js 资源 -->
+		<link rel="stylesheet" href="https://unpkg.com/element-ui@2.13.0/lib/theme-chalk/index.css">
+		<link rel="stylesheet" href="../../static/sa.css">
+		<script src="https://unpkg.com/vue@2.6.10/dist/vue.min.js"></script>
+		<script src="https://unpkg.com/element-ui@2.13.0/lib/index.js"></script>
+		<script src="https://unpkg.com/http-vue-loader@1.4.2/src/httpVueLoader.js"></script>
+		<script src="https://unpkg.com/jquery@3.4.1/dist/jquery.min.js"></script>
+		<script src="https://www.layuicdn.com/layer-v3.1.1/layer.js"></script>
+		<script src="../../static/sa.js"></script>
+		<script src="../../static/kj/upload-util.js"></script>
+	</head>
+	<body>
+		<div class="vue-box" style="display: none;" :style="'display: block;'">
+			<!-- 参数栏 -->
+			<div class="c-panel">
+				<h4 class="c-title">添加用户</h4>
+				<el-form>
+					<!-- 防止密码框被填充 -->
+					<div style="height: 0px; overflow: hidden;">
+						<el-input></el-input>
+						<el-input type="password"></el-input>
+					</div>
+					<sa-item type="text" name="账号" v-model="m.name" br need></sa-item>
+					<sa-item type="text" name="姓名" v-model="m.nickname" br need></sa-item>
+					<sa-item style="display: inline;" type="text" name="手机号" v-model="m.phone" br need></sa-item>
+					<sa-item type="password" name="密码" v-model="m.password" br need></sa-item>
+					<sa-item name="角色" br>
+						<el-select v-model="m.roleId">
+							<el-option label="请选择" :value="0" disabled></el-option>
+							<el-option v-for="role in roleList" :key="role.id" :label="role.name" :value="role.id">
+							</el-option>
+						</el-select>
+					</sa-item>
+					<sa-item name="" br>
+						<el-button type="primary" icon="el-icon-plus" @click="ok()">保存</el-button>
+					</sa-item>
+				</el-form>
+			</div>
+		</div>
+		<script>
+			var app = new Vue({
+				components: {
+					"sa-item": httpVueLoader('../../sa-frame/com/sa-item.vue')
+				},
+				el: '.vue-box',
+				data: {
+					sa: sa, // 超级对象
+					m: {
+						id: 0,
+						name: '',
+						customerId:sa.p('customerId',-2),
+						superAdmin:0,
+						avatar: '',
+						password: '',
+						roleId: 0
+					},
+					roleList: [],
+					deptList: [],
+					currentUser: sa.$sys.getCurrUser(),
+					deptIds: [],
+				},
+				methods: {
+					// 修改
+					ok: function() {
+						// 表单校验 
+						let m = this.m;
+						sa.checkNull(m.name, '请输入账号');
+						sa.checkNull(m.nickname, '请输入姓名');
+						let phone = m.phone;
+						if (!sa.isPhone(phone)) {
+							sa.error('请输入正确的手机号');
+							return;
+						}
+						sa.checkNull(m.password, '请输入密码');
+						sa.checkNull(m.roleId, '请选择角色');
+						// 添加
+						sa.ajax('/admin/addCustomerAdmin', sa.removeNull(m), function(res) {
+							sa.alert('增加成功', this.clean);
+							parent.app.f5(); // 刷新父页面列表
+							sa.closeCurrIframe();
+						}.bind(this));
+					},
+					getRoleList() {
+						sa.ajax('/role/getCustomerRoleList',{customerId:this.m.customerId}, function(res) {
+							this.roleList = res.data; // 数据  
+						}.bind(this), {
+							msg: null
+						});
+					}
+				},
+				mounted: function() {
+					// 加载角色 
+					this.getRoleList();
+				}
+			})
+		</script>
+	</body>
+</html>

+ 341 - 0
sa-view/tb-department/admin-list.html

@@ -0,0 +1,341 @@
+<!DOCTYPE html>
+<html>
+	<head>
+		<title>管理员列表</title>
+		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+		<meta name="viewport"
+			content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
+		<!-- 所有的 css & js 资源 -->
+		<link rel="stylesheet" href="https://unpkg.com/element-ui@2.13.0/lib/theme-chalk/index.css">
+		<link rel="stylesheet" href="../../static/sa.css">
+		<script src="https://unpkg.com/vue@2.6.10/dist/vue.min.js"></script>
+		<script src="https://unpkg.com/element-ui@2.13.0/lib/index.js"></script>
+		<script src="https://unpkg.com/http-vue-loader@1.4.2/src/httpVueLoader.js"></script>
+		<script src="https://unpkg.com/jquery@3.4.1/dist/jquery.min.js"></script>
+		<script src="https://www.layuicdn.com/layer-v3.1.1/layer.js"></script>
+		<script src="../../static/sa.js"></script>
+		<script src="../../static/kj/upload-util.js"></script>
+		<style type="text/css">
+			.el-radio {
+				margin-right: 10px;
+			}
+		</style>
+	</head>
+	<body>
+		<div class="vue-box" style="display: none;" :style="'display: block;'">
+			<div class="c-panel">
+				<!-- ------------- 检索参数 ------------- -->
+				<h4 class="c-title">检索参数</h4>
+				<el-form>
+					<sa-item type="text" name="账号" v-model="p.name"></sa-item>
+					<el-button type="primary" icon="el-icon-search" @click="p.pageNo = 1; f5()">查询</el-button>
+					<el-button type="primary" icon="el-icon-plus" @click="add" v-if="sa.isAuth('sp-admin-add')">新增
+					</el-button>
+					<el-button type="info" icon="el-icon-refresh" @click="p.name='';f5()">重置</el-button>
+				</el-form>
+				<!-- ------------- 数据列表 ------------- -->
+				<el-table class="data-table" ref="data-table" :data="dataList">
+					<sa-td type="text" name="姓名" prop="nickname"></sa-td>
+					<sa-td type="text" name="账号" prop="name"></sa-td>
+					<sa-td type="text" name="手机" prop="phone" min-width="120px">
+						<template slot-scope="s">
+							<span v-if="s.row.phone">{{s.row.phone}}</span>
+							<span v-else>{{s.row.name}}</span>
+						</template>
+					</sa-td>
+					<sa-td type="text" name="所属角色" prop="roleName" not='-'></sa-td>
+					<sa-td type="datetime" name="创建日期" prop="createTime" width="150px"></sa-td>
+					<sa-td type="datetime" name="最后登录" prop="loginTime" width="150px" not='-'></sa-td>
+					<sa-td type="text" name="登录次数" prop="loginCount" not="0" width="100px"></sa-td>
+					<sa-td type="switch" name="账号状态" prop="status" :jv="{1: '正常', 2: '禁用[#ff4949]'}"
+						@change="s => updateStatus(s.row)" width="120px"></sa-td>
+					<el-table-column label="操作" fixed="right" width="330px">
+						<template slot-scope="s">
+							<span @click="getInfo(s.row)">
+								<el-button type="success" class="c-btn" icon="el-icon-view">查看</el-button>
+							</span>
+							<el-dropdown trigger="click" style="font-size: 0.85em;" v-if="sa.isAuth('sp-admin-edit')">
+								<el-button type="primary" class="c-btn">
+									修改资料 <i class="el-icon-arrow-down el-icon--right"></i>
+								</el-button>
+								<el-dropdown-menu slot="dropdown">
+									<span @click="updateName(s.row)">
+										<el-dropdown-item>修改账号</el-dropdown-item>
+									</span>
+									<span @click="updatePhone(s.row)">
+										<el-dropdown-item>改手机号</el-dropdown-item>
+									</span>
+									<span @click="updateNickName(s.row)">
+										<el-dropdown-item>改姓名</el-dropdown-item>
+									</span>
+
+									<span @click="updatePassword(s.row)">
+										<el-dropdown-item>改密码</el-dropdown-item>
+									</span>
+								</el-dropdown-menu>
+							</el-dropdown>
+							<el-dropdown trigger="click" style="font-size: 0.85em;" v-if="sa.isAuth('sp-admin-edit')">
+								<el-button type="primary" class="c-btn">
+									修改角色为 <i class="el-icon-arrow-down el-icon--right"></i>
+								</el-button>
+								<el-dropdown-menu slot="dropdown">
+									<span v-for="role in roleList" :key="role.id"
+										@click="updateRoleId(s.row, role.id, role.name)">
+										<el-dropdown-item :style=" s.row.roleId == role.id ? {color: 'blue'} : null ">
+											{{role.name}}
+										</el-dropdown-item>
+									</span>
+								</el-dropdown-menu>
+							</el-dropdown>
+							<span @click="del(s.row)">
+								<el-button v-if="sa.isAuth('sp-admin-del')" type="danger" class="c-btn"
+									icon="el-icon-delete">删除</el-button>
+							</span>
+						</template>
+					</el-table-column>
+				</el-table>
+				<!-- 分页 -->
+				<sa-item type="page" :curr.sync="p.pageNo" :size.sync="p.pageSize" :total="dataCount" @change="f5()">
+				</sa-item>
+			</div>
+		</div>
+		<script>
+			var app = new Vue({
+				components: {
+					"sa-item": httpVueLoader('../../sa-frame/com/sa-item.vue'),
+					"sa-td": httpVueLoader('../../sa-frame/com/sa-td.vue')
+				},
+				el: '.vue-box',
+				data: {
+					sa: sa, // 超级对象
+					p: { // 查询参数
+						id: '',
+						name: '',
+						roleId: '',
+						customerId: sa.p('customerId', '-2'),
+						sortType: 'id',
+						pageNo: 1,
+						pageSize: 10,
+					},
+					deptList: [],
+					modal: {
+						visible: false,
+						form: {
+							id: '',
+							deptId: ''
+						}
+					},
+					dataCount: 0,
+					dataList: [], // 数据集合
+					roleList: [], // 角色集合 
+				},
+				methods: {
+					// 刷新
+					f5: function(isPage) {
+						sa.ajax('/admin/getCustomerList', sa.removeNull(this.p), function(res) {
+							this.dataList = res.data; // 数据
+							this.dataCount = res.dataCount;
+							sa.f5TableHeight(); // 刷新表格高度 
+						}.bind(this));
+					},
+					// 新增
+					add: function() {
+						sa.showIframe('添加用户', 'admin-add.html?customerId=' + this.p.customerId, '600px', '80%');
+					},
+					// 查看详情
+					getInfo: function(data) {
+						//sa.showIframe('账号详情', 'admin-info.html?id=' + data.id, '700px', '80%');
+						sa.$page.openAdminInfo(data.id, data.name);
+					},
+					// 查看登录日志 
+					getAdminLogin: function(data) {
+						sa.showIframe('登录日志', '../sp-admin-login/sp-admin-login-list.html?accId=' + data.id, '90%',
+							'90%');
+					},
+					// 查看 - 根据选中的
+					getBySelect: function(data) {
+						var selection = this.$refs['data-table'].selection;
+						if (selection.length == 0) {
+							return sa.msg('请选择一条数据')
+						}
+						this.getInfo(selection[0]);
+					},
+					updateNickName: function(data) {
+						layer.prompt({
+							title: '修改姓名'
+						}, function(pass, index) {
+							layer.close(index);
+							sa.ajax('/admin/updateNickName', {
+								id: data.id,
+								nickname: pass
+							}, function(res) {
+								data.nickname = pass;
+								layer.msg('修改成功');
+							})
+						});
+					},
+					updatePhone: function(data) {
+						layer.prompt({
+							title: '请输入新的手机号'
+						}, function(pass, index) {
+							layer.close(index);
+							sa.ajax('/admin/updatePhone', {
+								id: data.id,
+								phone: pass
+							}, function(res) {
+								data.phone = pass;
+								layer.msg('修改成功');
+							})
+						});
+					},
+					// 修改名称 
+					updateName: function(data) {
+						layer.prompt({
+							title: '请输入新账号'
+						}, function(pass, index) {
+							layer.close(index);
+							sa.ajax('/admin/updateName', {
+								id: data.id,
+								name: pass
+							}, function(res) {
+								data.name = pass;
+								layer.msg('修改成功');
+							})
+						});
+					},
+					// 修改头像 
+					updateAvatar: function(data) {
+						sa.uploadImage(function(src) {
+							var p = {
+								id: data.id,
+								avatar: src
+							};
+							sa.ajax('/admin/updateAvatar', p, function(res) {
+								sa.msg('上传成功');
+								data.avatar = src;
+							}.bind(this));
+						})
+					},
+					// 修改密码
+					updatePassword: function(data) {
+						layer.prompt({
+							title: '修改密码'
+						}, function(pass, index) {
+							layer.close(index);
+							if (pass.length < 4) {
+								return layer.msg('新密码长度请不要低于4位');
+							}
+							sa.ajax('/admin/updatePassword', {
+								id: data.id,
+								password: pass
+							}, function(res) {
+								layer.msg('修改成功');
+							})
+						});
+					},
+					// 修改角色 
+					updateRoleId: function(data, roleId, roleName) {
+						if (data.id == sa.$sys.getCurrUser().id) {
+							return sa.alert('不能自己修改自己的角色');
+						}
+						if (data.roleId == roleId) {
+							return sa.alert('该用户已经是' + roleName + '了');
+						}
+						var str = '将此账号修改为 [' + roleName + '], 请确认?';
+						layer.confirm(str, {
+							title: '请确认'
+						}, function() {
+							sa.ajax('/admin/updateRole', {
+								id: data.id,
+								roleId: roleId
+							}, function(res) {
+								sa.msg('修改成功');
+								data.roleId = roleId;
+								data.roleName = roleName;
+							}.bind(this));
+						}.bind(this));
+					},
+					// 修改用户的状态
+					updateStatus: function(data) {
+						if (data.id == sa.$sys.getCurrUser().id) {
+							data.status = 3 - data.status;
+							return sa.alert('不能自己封禁自己');
+						}
+						var is_ok = false; // 记录是否成功 
+						var ajax = sa.ajax('/admin/updateStatus', {
+							id: data.id,
+							status: data.status
+						}, function(res) {
+							sa.msg('修改成功');
+							is_ok = true;
+						}.bind(this));
+						// 如果未能修改成功, 则回滚 
+						$.when(ajax).done(function() {
+							if (is_ok == false) {
+								data.status = 3 - data.status;
+							}
+						})
+					},
+					// 模拟登陆
+					runAs: function(data) {
+						// 提交删除 
+						sa.confirm('将要以账号 [ ' + data.name + ' ] 模拟登录,是否确认?', function() {
+							sa.ajax('/admin/runAs?adminId=' + data.id, function(res) {
+								sa.ok('登录成功,即将刷新页面');
+								sessionStorage.runAsToken = res.data;
+								setTimeout(function() {
+									top.location.reload(true);
+								}, 1000)
+							}.bind(this))
+						}.bind(this));
+					},
+					// 删除 
+					del: function(data) {
+						sa.confirm('是否删除,此操作不可撤销', function() {
+							sa.ajax('/admin/delete', {
+								id: data.id
+							}, function(res) {
+								sa.arrayDelete(app.dataList, data);
+								sa.ok('删除成功');
+								sa.f5TableHeight(); // 刷新表格高度 
+							})
+						});
+					},
+					getRoleList() {
+						sa.ajax('/role/getCustomerRoleList', {
+							customerId: this.p.customerId
+						}, function(res) {
+							this.roleList = res.data; // 数据  
+						}.bind(this), {
+							msg: null
+						});
+					},
+					// 批量删除
+					deleteByIds: function() {
+						// 获取选中元素的id列表
+						let selection = this.$refs['data-table'].selection;
+						let ids = sa.getArrayField(selection, 'id');
+						if (selection.length == 0) {
+							return sa.msg('请至少选择一条数据')
+						}
+						// 提交删除 
+						sa.confirm('是否批量删除选中数据?此操作不可撤销', function() {
+							sa.ajax('/admin/deleteByIds', {
+								ids: ids.join(',')
+							}, function(res) {
+								sa.arrayDelete(this.dataList, selection);
+								sa.ok('删除成功');
+								sa.f5TableHeight(); // 刷新表格高度 
+							}.bind(this))
+						}.bind(this));
+					},
+				},
+				created: function() {
+					this.f5();
+					this.getRoleList();
+					sa.onInputEnter(); // 监听回车执行查询 
+				}
+			})
+		</script>
+	</body>
+</html>

+ 118 - 0
sa-view/tb-department/tb-department-add.html

@@ -0,0 +1,118 @@
+<!DOCTYPE html>
+<html>
+	<head>
+		<title>客户管理-添加/修改</title>
+		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+		<meta name="viewport"
+			content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
+		<!-- 所有的 css js 资源 -->
+		<link rel="stylesheet" href="../../static/kj/element-ui/theme-chalk/index.css">
+		<link rel="stylesheet" href="../../static/sa.css">
+		<script src="../../static/kj/vue.min.js"></script>
+		<script src="../../static/kj/element-ui/index.js"></script>
+		<script src="../../static/kj/httpVueLoader.js"></script>
+		<script src="../../static/kj/jquery.min.js"></script>
+		<script src="../../static/kj/layer/layer.js"></script>
+		<script src="../../static/sa.js"></script>
+		<style type="text/css">
+			.c-panel .el-form .c-label {
+				width: 7em !important;
+			}
+
+			.c-panel .el-form .el-input,
+			.c-panel .el-form .el-textarea__inner {
+				width: 250px;
+			}
+		</style>
+	</head>
+	<body>
+		<div class="vue-box" :class="{sbot: id}" style="display: none;" :style="'display: block;'">
+			<!-- ------- 内容部分 ------- -->
+			<div class="s-body">
+				<div class="c-panel">
+					<div class="c-title" v-if="id == 0">数据添加</div>
+					<div class="c-title" v-else>数据修改</div>
+					<el-form v-if="m">
+						<sa-item type="text" name="部门名称" v-model="m.name" br need></sa-item>
+						<sa-item type="text" name="负责人" v-model="m.dutyPeople" br need></sa-item>
+						<sa-item type="text" name="联系号码" v-model="m.phone" br need></sa-item>
+					</el-form>
+				</div>
+			</div>
+			<!-- ------- 底部按钮 ------- -->
+			<div class="s-foot">
+				<el-button type="primary" @click="ok()">确定</el-button>
+				<el-button @click="sa.closeCurrIframe()">取消</el-button>
+			</div>
+		</div>
+		<script>
+			var app = new Vue({
+				components: {
+					"sa-item": httpVueLoader('../../sa-frame/com/sa-item.vue')
+				},
+				el: '.vue-box',
+				data: {
+					id: sa.p('id', 0), // 获取超链接中的id参数(0=添加,非0=修改) 
+					m: null, // 实体对象 
+				},
+				methods: {
+					// 创建一个 默认Model 
+					createModel: function() {
+						return {
+							id: '', // 主键 
+							name: '', // 名称 
+							phone: '', // 联系号码 
+							dutyPeople: '', // 负责人 
+						}
+					},
+					// 提交数据 
+					ok: function() {
+						// 表单校验 
+						let m = this.m;
+						sa.checkNull(m.name, '请输入 [名称]');
+						let phone =m.phone;
+						sa.checkNull(phone, '请输入 [联系号码]');
+						if(!sa.isPhone(phone)){
+							sa.error('请输入正确的手机号码')
+							return;
+						}
+						sa.checkNull(m.dutyPeople, '请输入 [负责人]');
+
+						// 开始增加或修改
+						if (this.id <= 0) { // 添加
+							sa.ajax('/TbDepartment/add', sa.removeNull(m), function(res) {
+								sa.alert('增加成功', this.clean);
+							}.bind(this));
+						} else { // 修改
+							sa.ajax('/TbDepartment/update', m, function(res) {
+								sa.alert('修改成功', this.clean);
+							}.bind(this));
+						}
+					},
+					// 添加/修改 完成后的动作
+					clean: function() {
+						if (this.id == 0) {
+							this.m = this.createModel();
+						} else {
+							parent.app.f5(); // 刷新父页面列表
+							sa.closeCurrIframe(); // 关闭本页 
+						}
+					}
+				},
+				mounted: function() {
+					// 初始化数据 
+					if (this.id <= 0) {
+						this.m = this.createModel();
+					} else {
+						sa.ajax('/TbDepartment/getById?id=' + this.id, function(res) {
+							this.m = res.data;
+							if (res.data == null) {
+								sa.alert('未能查找到 id=' + this.id + " 详细数据");
+							}
+						}.bind(this))
+					}
+				}
+			})
+		</script>
+	</body>
+</html>

+ 70 - 0
sa-view/tb-department/tb-department-info.html

@@ -0,0 +1,70 @@
+<!DOCTYPE html>
+<html>
+	<head>
+		<title>客户管理-详情</title>
+		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+		<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
+		<!-- 所有的 css js 资源 -->
+		<link rel="stylesheet" href="../../static/kj/element-ui/theme-chalk/index.css">
+		<link rel="stylesheet" href="../../static/sa.css">
+		<script src="../../static/kj/vue.min.js"></script>
+		<script src="../../static/kj/element-ui/index.js"></script>
+		<script src="../../static/kj/httpVueLoader.js"></script>
+		<script src="../../static/kj/jquery.min.js"></script>
+		<script src="../../static/kj/layer/layer.js"></script>
+		<script src="../../static/sa.js"></script>
+		<style type="text/css">
+			.c-panel .c-label{width: 8em;}
+		</style>
+	</head>
+	<body>
+		<div class="vue-box sbot" style="display: none;" :style="'display: block;'">
+			<!-- ------- 内容部分 ------- -->
+			<div class="s-body">
+				<div class="c-panel">
+					<el-form v-if="m">
+						<sa-info type="num" name="主键" :value="m.id" br></sa-info>
+						<sa-info name="名称" br>{{m.name}}</sa-info>
+						<sa-info name="联系号码" br>{{m.phone}}</sa-info>
+						<sa-info name="负责人" br>{{m.dutyPeople}}</sa-info>
+						<sa-info name="地址id" br>{{m.addressIds}}</sa-info>
+						<sa-info name="地址" br>{{m.addressStr}}</sa-info>
+						<sa-info type="enum" name="状态" :value="m.status" :jv="{0: '否', 1: '是'}" br></sa-info>
+						<sa-info name="创建时间" br>{{m.createTime}}</sa-info>
+						<sa-info name="更新时间" br>{{m.updateTime}}</sa-info>
+						<sa-info name="" br>{{m.createBy}}</sa-info>
+						<sa-info name="" br>{{m.updateBy}}</sa-info>
+					</el-form>
+				</div>
+			</div>
+			<!-- ------- 底部按钮 ------- -->
+			<div class="s-foot">
+				<el-button type="success" @click="sa.closeCurrIframe()">确定</el-button>
+				<el-button @click="sa.closeCurrIframe()">取消</el-button>
+			</div>
+		</div>
+		<script>
+			var app = new Vue({
+				components: {
+					"sa-info": httpVueLoader('../../sa-frame/com/sa-info.vue')
+				},
+				el: '.vue-box',
+				data: {
+					id: sa.p('id', 0),	// 获取数据ID 
+					m: null
+				},
+				methods: {
+				},
+				mounted: function() {
+					sa.ajax('/TbDepartment/getById?id=' + this.id, function(res) {
+						this.m = res.data;
+						if(res.data == null) {
+							sa.alert('未能查找到 id=' + this.id + " 详细数据");
+						}
+					}.bind(this))
+				}
+			})
+			
+		</script>
+	</body>
+</html>

+ 170 - 0
sa-view/tb-department/tb-department-list.html

@@ -0,0 +1,170 @@
+<!DOCTYPE html>
+<html>
+	<head>
+		<title>客户管理-列表</title>
+		<meta charset="utf-8">
+		<meta name="viewport"
+			content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
+		<!-- 所有的 css & js 资源 -->
+		<link rel="stylesheet" href="../../static/kj/element-ui/theme-chalk/index.css">
+		<link rel="stylesheet" href="../../static/sa.css">
+		<script src="../../static/kj/vue.min.js"></script>
+		<script src="../../static/kj/element-ui/index.js"></script>
+		<script src="../../static/kj/httpVueLoader.js"></script>
+		<script src="../../static/kj/jquery.min.js"></script>
+		<script src="../../static/kj/layer/layer.js"></script>
+		<script src="../../static/sa.js"></script>
+	</head>
+	<body>
+		<div class="vue-box" style="display: none;" :style="'display: block;'">
+			<div class="c-panel">
+				<!-- ------------- 检索参数 ------------- -->
+				<div class="c-title">检索参数</div>
+				<el-form ref="form" :model='p' @submit.native.prevent>
+					<sa-item type="text" name="名称" v-model="p.name"></sa-item>
+					<sa-item type="text" name="联系号码" v-model="p.phone"></sa-item>
+					<sa-item type="text" name="负责人" v-model="p.dutyPeople"></sa-item>
+					<el-button type="primary" icon="el-icon-search" @click="p.pageNo = 1; f5()">查询</el-button>
+					<el-button type="primary" icon="el-icon-plus" @click="add" v-if="sa.isAuth('tb-department-add')">新增
+					</el-button>
+					<el-button type="info" icon="el-icon-refresh" @click="f5()">重置</el-button>
+				</el-form>
+				<!-- ------------- 数据列表 ------------- -->
+				<el-table class="data-table" ref="data-table" :data="dataList">
+					<sa-td type="index" name="序号"></sa-td>
+					<sa-td name="部门名称" prop="name"></sa-td>
+					<sa-td name="负责人" prop="dutyPeople"></sa-td>
+					<sa-td name="联系号码" prop="phone"></sa-td>
+					<el-table-column label="是否锁定" title="锁定的部门为系统维持正常运行的重要部门,不可删除">
+						<template slot-scope="s">
+							<el-tag v-if="s.row.status == 1">已锁定</el-tag>
+							<el-tag v-else type="success">未锁定</el-tag>
+						</template>
+					</el-table-column>
+					<sa-td name="创建时间" prop="createTime" width="140"></sa-td>
+					<sa-td name="更新时间" prop="updateTime" width="140"></sa-td>
+					<el-table-column label="操作" fixed="right" width="280px">
+						<template slot-scope="s">
+							<el-button v-if="sa.isAuth('tb-department-edit')" class="c-btn" type="primary" icon="el-icon-edit" @click="update(s.row)">修改
+							</el-button>
+							<el-button v-if="sa.isAuth('tb-department-del')" class="c-btn" type="danger" icon="el-icon-delete" @click="del(s.row)">删除
+							</el-button>
+						</template>
+					</el-table-column>
+				</el-table>
+				<!-- ------------- 分页 ------------- -->
+				<sa-item type="page" :curr.sync="p.pageNo" :size.sync="p.pageSize" :total="dataCount" @change="f5()">
+				</sa-item>
+			</div>
+		</div>
+		<script>
+			var app = new Vue({
+				components: {
+					"sa-item": httpVueLoader('../../sa-frame/com/sa-item.vue'),
+					"sa-td": httpVueLoader('../../sa-frame/com/sa-td.vue'),
+				},
+				el: '.vue-box',
+				data: {
+					p: { // 查询参数  
+						name: '', // 名称 
+						phone: '', // 联系号码 
+						dutyPeople: '', // 负责人 
+						pageNo: 1, // 当前页 
+						pageSize: 10, // 页大小 
+						sortType: 0 // 排序方式 
+					},
+					dataCount: 0,
+					dataList: [], // 数据集合 
+				},
+				methods: {
+					// 刷新
+					f5: function() {
+						sa.ajax('/TbDepartment/getList', sa.removeNull(this.p), function(res) {
+							this.dataList = res.data; // 数据
+							this.dataCount = res.dataCount; // 数据总数 
+							sa.f5TableHeight(); // 刷新表格高度 
+						}.bind(this));
+					},
+					adminFn(data){
+						sa.showIframe('管理员', 'admin-list.html?customerId=' + data.id, '1080px', '80%');
+					},
+					// 查看
+					get: function(data) {
+						sa.showIframe('数据详情', 'tb-department-info.html?id=' + data.id, '550px', '60%');
+					},
+					// 查看 - 根据选中的
+					getBySelect: function(data) {
+						var selection = this.$refs['data-table'].selection;
+						if (selection.length == 0) {
+							return sa.msg('请选择一条数据')
+						}
+						this.get(selection[0]);
+					},
+					// 修改
+					update: function(data) {
+						sa.showIframe('修改数据', 'tb-department-add.html?id=' + data.id, '500px', '60%');
+					},
+					// 新增
+					add: function(data) {
+						sa.showIframe('新增数据', 'tb-department-add.html?id=-1', '500px', '60%');
+					},
+					// 删除
+					del: function(data) {
+						if(data.status == 1){
+							return layer.alert('锁定的部门为系统维持正常运行的重要部门,不可删除');
+						};
+						sa.confirm('是否删除,此操作不可撤销', function() {
+							sa.ajax('/TbDepartment/delete?id=' + data.id, function(res) {
+								sa.arrayDelete(this.dataList, data);
+								sa.ok('删除成功');
+								sa.f5TableHeight(); // 刷新表格高度 
+							}.bind(this))
+						}.bind(this));
+					},
+					// 批量删除
+					deleteByIds: function() {
+						// 获取选中元素的id列表 
+						let selection = this.$refs['data-table'].selection;
+						let ids = sa.getArrayField(selection, 'id');
+						if (selection.length == 0) {
+							return sa.msg('请至少选择一条数据')
+						}
+						// 提交删除 
+						sa.confirm('是否批量删除选中数据?此操作不可撤销', function() {
+							sa.ajax('/TbDepartment/deleteByIds', {
+								ids: ids.join(',')
+							}, function(res) {
+								sa.arrayDelete(this.dataList, selection);
+								sa.ok('删除成功');
+								sa.f5TableHeight(); // 刷新表格高度 
+							}.bind(this))
+						}.bind(this));
+					},
+					// 改 - 状态(0=否,1=是)
+					updateStatus: function(data) {
+						// 声明变量记录是否成功 
+						var isOk = false;
+						var oldValue = data.status;
+						var ajax = sa.ajax('/TbDepartment/updateStatus', {
+							id: data.id,
+							value: data.status
+						}, function(res) {
+							isOk = true;
+							sa.msg('修改成功');
+						}.bind(this));
+						// 如果未能修改成功, 则回滚 
+						$.when(ajax).done(function() {
+							if (isOk == false) {
+								data.status = oldValue;
+							}
+						})
+					},
+				},
+				created: function() {
+					this.f5();
+					sa.onInputEnter();
+				}
+			})
+		</script>
+	</body>
+</html>

+ 1 - 1
sa-view/tb-dept/tb-dept-add.html

@@ -30,7 +30,7 @@
 						<sa-item type="text" name="负责人" v-model="m.chargePerson" br need></sa-item>
 						<sa-item type="text" name="联系号码" v-model="m.contact" br need></sa-item>
 						<sa-item type="enum" name="放行条件" v-model="m.passType" :jv="{1: '人车均备案', 2: '满足其一'}" jtype="3" br></sa-item>
-						<sa-item type="enum" name="管理组织" v-model="m.adminType" :jv="{0: '临时', 1: '普通组织', 2: '管理组织'}" jtype="3" br></sa-item>
+						<!-- <sa-item type="enum" name="管理组织" v-model="m.adminType" :jv="{0: '临时', 1: '普通组织', 2: '管理组织'}" jtype="3" br></sa-item> -->
 						<sa-item type="enum" name="备案审核" v-model="m.needJudge" :jv="{0: '系统审核', 1: '人工审核'}" jtype="3" br></sa-item>
 						<sa-item type="text" name="部门描述" v-model="m.deptDesc" br ></sa-item>
 						<sa-item type="textarea" name="备注" v-model="m.remark" br></sa-item>

+ 1 - 1
sa-view/tb-dept/tb-dept-list.html

@@ -35,7 +35,7 @@
 				<el-table class="data-table" ref="data-table" :data="dataList" >
 					<sa-td name="序号" type="index"></sa-td>
 					<sa-td name="名称" prop="name" ></sa-td>
-					<sa-td name="类型" prop="adminType" type="enum" :jv="{0: '临时', 1: '普通组织', 2: '管理组织'}"></sa-td>
+					<!-- <sa-td name="类型" prop="adminType" type="enum" :jv="{0: '临时', 1: '普通组织', 2: '管理组织'}"></sa-td> -->
 					<sa-td name="通行条件" prop="passType" type="enum" :jv="{1: '人车均备案', 2: '满足其一'}"></sa-td>
 					<sa-td name="备案审核" prop="needJudge" type="enum" :jv="{0: '自动审核', 1: '人工审核'}"></sa-td>
 					<sa-td name="部门描述" prop="deptDesc" ></sa-td>

+ 2 - 2
sa-view/tb-gate-terminal/tb-gate-terminal-add.html

@@ -36,7 +36,7 @@
 						<sa-item type="text" name="名称" v-model="m.name" br need></sa-item>
 						<div class="c-item">
 							<label class="c-label"><span style="color: red;">*</span>入场通道:</label>
-							<el-select v-model="m.venuesId" placeholder="请选择">
+							<el-select v-model="m.channelId" placeholder="请选择">
 								<el-option-group v-for="(area,index) in areaList" :key="index" :label="area.name">
 									<el-option v-for="item in area.children" :key="item.id" :label="item.name"
 										:value="item.id">
@@ -94,7 +94,7 @@
 						let m = this.m;
 						// sa.checkNull(m.id, '请输入 [主键]');
 						sa.checkNull(m.name, '请输入 [名称]');
-						sa.checkNull(m.venuesId, '请选择道闸通道');
+						sa.checkNull(m.channelId, '请选择道闸通道');
 						sa.checkNull(m.ip, '请填写IP地址');
 						// 开始增加或修改
 						if (this.id <= 0) { // 添加

+ 37 - 31
sa-view/tb-gate-terminal/tb-gate-terminal-list.html

@@ -3,7 +3,8 @@
 	<head>
 		<title>车辆道闸-列表</title>
 		<meta charset="utf-8">
-		<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
+		<meta name="viewport"
+			content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
 		<!-- 所有的 css & js 资源 -->
 		<link rel="stylesheet" href="../../static/kj/element-ui/theme-chalk/index.css">
 		<link rel="stylesheet" href="../../static/sa.css">
@@ -23,17 +24,19 @@
 					<sa-item type="text" name="名称" v-model="p.name"></sa-item>
 					<sa-item type="text" name="IP地址" v-model="p.ip"></sa-item>
 					<el-button type="primary" icon="el-icon-search" @click="p.pageNo = 1; f5()">查询</el-button>
-					<el-button type="primary" icon="el-icon-plus" @click="add" v-if="sa.isAuth('tb-gate-terminal-add')">新增</el-button>
-					<el-button type="info"  icon="el-icon-refresh"  @click="p.name='',p.ip='',f5()">重置</el-button>
-					
+					<el-button type="primary" icon="el-icon-plus" @click="add" v-if="sa.isAuth('tb-gate-terminal-add')">
+						新增</el-button>
+					<el-button type="info" icon="el-icon-refresh" @click="p.name='',p.ip='',f5()">重置</el-button>
+
 				</el-form>
 				<!-- ------------- 数据列表 ------------- -->
-				<el-table class="data-table" ref="data-table" :data="dataList" >
+				<el-table class="data-table" ref="data-table" :data="dataList">
 					<sa-td name="序号" type="index"></sa-td>
-					<sa-td name="名称" prop="name" ></sa-td>
-					<sa-td name="所在道闸" prop="venuesName" ></sa-td>
+					<sa-td name="名称" prop="name" width="140"></sa-td>
+					<sa-td name="所属部门" prop="departmentName" width="140"></sa-td>
+					<sa-td name="所在通道" prop="channelName"></sa-td>
 					<sa-td name="方向" prop="direction" type="enum" :jv="{1: '入场', 2: '离场'}"></sa-td>
-					<sa-td name="IP地址" prop="ip" ></sa-td>
+					<sa-td name="IP地址" prop="ip" width="140"></sa-td>
 					<sa-td name="状态" prop="state"></sa-td>
 					<el-table-column label="通讯">
 						<template slot-scope="s">
@@ -41,50 +44,51 @@
 							</el-button>
 						</template>
 					</el-table-column>
-					<sa-td name="创建时间" prop="createTime" ></sa-td>
-					<sa-td name="更新时间" prop="updateTime" ></sa-td>
-					<el-table-column label="操作" fixed="right"  width="240px">
+					<sa-td name="创建时间" prop="createTime" width="140"></sa-td>
+					<sa-td name="更新时间" prop="updateTime" width="140"></sa-td>
+					<el-table-column label="操作" fixed="right" width="240px">
 						<template slot-scope="s">
 							<el-button class="c-btn" type="success" @click="open(s.row)">开闸</el-button>
-							<el-button class="c-btn" type="primary"  @click="update(s.row)">修改</el-button>
+							<el-button class="c-btn" type="primary" @click="update(s.row)">修改</el-button>
 							<el-button class="c-btn" type="danger" @click="del(s.row)">删除</el-button>
 						</template>
 					</el-table-column>
 				</el-table>
 				<!-- ------------- 分页 ------------- -->
-				<sa-item type="page" :curr.sync="p.pageNo" :size.sync="p.pageSize" :total="dataCount" @change="f5()"></sa-item>
+				<sa-item type="page" :curr.sync="p.pageNo" :size.sync="p.pageSize" :total="dataCount" @change="f5()">
+				</sa-item>
 			</div>
 		</div>
 		<script>
 			var app = new Vue({
 				components: {
-					"sa-item": httpVueLoader('../../sa-frame/com/sa-item.vue'),  
-					"sa-td": httpVueLoader('../../sa-frame/com/sa-td.vue'),		
+					"sa-item": httpVueLoader('../../sa-frame/com/sa-item.vue'),
+					"sa-td": httpVueLoader('../../sa-frame/com/sa-td.vue'),
 				},
 				el: '.vue-box',
 				data: {
 					p: { // 查询参数  
-						id: '',		// 主键 
-						name: '',		// 名称 
-						deptId: '',		// 部门id 
-						sn: '',		// 序列号 
-						ip: '',		// IP地址 
-						pageNo: 1,		// 当前页 
-						pageSize: 10,	// 页大小 
-						sortType: 0		// 排序方式 
+						id: '', // 主键 
+						name: '', // 名称 
+						deptId: '', // 部门id 
+						sn: '', // 序列号 
+						ip: '', // IP地址 
+						pageNo: 1, // 当前页 
+						pageSize: 10, // 页大小 
+						sortType: 0 // 排序方式 
 					},
 					dataCount: 0,
 					dataList: [], // 数据集合 
 				},
 				methods: {
-					open(data){
+					open(data) {
 						sa.confirm('是否远程开闸?', function() {
 							sa.ajax('/TbGateTerminal/open?id=' + data.id, function(res) {
 								sa.ok('开闸成功');
 							}.bind(this))
 						}.bind(this));
 					},
-					checkFn(data){
+					checkFn(data) {
 						sa.ajax('/TbGateTerminal/check', data, function(res) {
 							sa.ok('通讯正常');
 						}.bind(this));
@@ -94,7 +98,7 @@
 						sa.ajax('/TbGateTerminal/getList', sa.removeNull(this.p), function(res) {
 							this.dataList = res.data; // 数据
 							this.dataCount = res.dataCount; // 数据总数 
-							sa.f5TableHeight();		// 刷新表格高度 
+							sa.f5TableHeight(); // 刷新表格高度 
 						}.bind(this));
 					},
 					// 查看
@@ -104,7 +108,7 @@
 					// 查看 - 根据选中的
 					getBySelect: function(data) {
 						var selection = this.$refs['data-table'].selection;
-						if(selection.length == 0) {
+						if (selection.length == 0) {
 							return sa.msg('请选择一条数据')
 						}
 						this.get(selection[0]);
@@ -123,7 +127,7 @@
 							sa.ajax('/TbGateTerminal/delete?id=' + data.id, function(res) {
 								sa.arrayDelete(this.dataList, data);
 								sa.ok('删除成功');
-								sa.f5TableHeight();		// 刷新表格高度 
+								sa.f5TableHeight(); // 刷新表格高度 
 							}.bind(this))
 						}.bind(this));
 					},
@@ -132,15 +136,17 @@
 						// 获取选中元素的id列表 
 						let selection = this.$refs['data-table'].selection;
 						let ids = sa.getArrayField(selection, 'id');
-						if(selection.length == 0) {
+						if (selection.length == 0) {
 							return sa.msg('请至少选择一条数据')
 						}
 						// 提交删除 
 						sa.confirm('是否批量删除选中数据?此操作不可撤销', function() {
-							sa.ajax('/TbGateTerminal/deleteByIds', {ids: ids.join(',')}, function(res) {
+							sa.ajax('/TbGateTerminal/deleteByIds', {
+								ids: ids.join(',')
+							}, function(res) {
 								sa.arrayDelete(this.dataList, selection);
 								sa.ok('删除成功');
-								sa.f5TableHeight();		// 刷新表格高度 
+								sa.f5TableHeight(); // 刷新表格高度 
 							}.bind(this))
 						}.bind(this));
 					},

+ 1 - 1
sa-view/tb-person-black/tb-person-black-add.html

@@ -34,7 +34,7 @@
 					<div class="c-title" v-else>数据修改</div>
 					<el-form v-if="m">
 						<div class="c-item">
-							<label class="c-label"><span style="color: red;">*</span>部门:</label>
+							<label class="c-label"><span style="color: red;">*</span>所属组织:</label>
 <!--							<el-select v-model="m.deptId" :disabled="currentUser.deptId!=='9999999'">-->
 							<el-select v-model="m.deptId" >
 								<el-option label="请选择" v-for="(item,index) in deptList" :key="item.id"

+ 1 - 1
sa-view/tb-person-black/tb-person-black-info.html

@@ -25,7 +25,7 @@
 					<el-form v-if="m">
 						<el-row>
 							<el-col :span="12">
-								<sa-info name="部门" br>{{m.deptName}}</sa-info>
+								<sa-info name="所属组织" br>{{m.deptName}}</sa-info>
 								<sa-info name="名字" br>{{m.name}}</sa-info>
 								<sa-info name="身份证" br>{{m.idCard}}</sa-info>
 								<sa-info name="禁行原因" br>{{m.reason}}</sa-info>

+ 1 - 1
sa-view/tb-person-black/tb-person-black-list.html

@@ -28,7 +28,7 @@
 				<!-- ------------- 数据列表 ------------- -->
 				<el-table class="data-table" ref="data-table" :data="dataList" >
 					<sa-td name="序号" type="index"></sa-td>
-					<sa-td name="部门" prop="deptName" ></sa-td>
+					<sa-td name="所属组织" prop="deptName" ></sa-td>
 					<sa-td name="名字" prop="name" ></sa-td>
 					<sa-td name="身份证" prop="idCadStr" ></sa-td>
 					<sa-td name="禁行原因" prop="reason" ></sa-td>

+ 40 - 17
sa-view/tb-person-filing/tb-person-filing-add.html

@@ -34,21 +34,36 @@
 					<div class="c-title" v-if="id == 0">数据添加</div>
 					<div class="c-title" v-else>数据修改</div>
 					<el-form v-if="m">
-						<div class="c-item">
-							<label class="c-label"><span style="color: red;">*</span>备案组织:</label>
-							<el-select v-model="m.deptId">
-								<el-option label="请选择" v-for="(item,index) in deptList" :key="item.id"
-									:label="item.name" :value="item.id"></el-option>
-							</el-select>
-						</div>
-						<sa-item type="text" name="姓名" v-model="m.name" br need></sa-item>
-						<sa-item type="num" name="联系电话" v-model="m.phone" br need></sa-item>
-						<sa-item type="text" name="身份证" v-model="m.idCard" br need></sa-item>
-						<sa-item type="img" name="人脸" v-model="m.photo" br need></sa-item>
-						<sa-item type="enum" name="类型" v-model="m.type" :jv="{1: '临时', 2: '内部'}" jtype="3" br></sa-item>
-						<sa-item type="text" name="来访事由" v-model="m.visitReason" br></sa-item>
-						<sa-item type="textarea" name="备注" v-model="m.remark" br></sa-item>
-						</sa-item>
+						<el-row>
+							<el-col :span="12">
+								<div class="c-item">
+									<label class="c-label"><span style="color: red;">*</span>备案组织:</label>
+									<el-select v-model="m.deptId">
+										<el-option label="请选择" v-for="(item,index) in deptList" :key="item.id"
+											:label="item.name" :value="item.id"></el-option>
+									</el-select>
+								</div>
+								<div class="c-item">
+									<label class="c-label"><span style="color: red;">*</span>备案场所:</label>
+									<el-select v-model="m.venuesId" placeholder="请选择">
+										<el-option v-for="item in venuesList" :key="item.id" :label="item.name"
+											:value="item.id">
+										</el-option>
+									</el-select>
+								</div>
+								<sa-item type="enum" name="类型" v-model="m.type" :jv="{1: '临时', 2: '内部'}" jtype="3" br>
+								</sa-item>
+								<sa-item type="text" name="来访事由" v-model="m.visitReason" br></sa-item>
+								<sa-item type="textarea" name="备注" v-model="m.remark" br></sa-item>
+							</el-col>
+							<el-col :span="12">
+								<sa-item type="text" name="姓名" v-model="m.name" br need></sa-item>
+								<sa-item type="num" name="联系电话" v-model="m.phone" br need></sa-item>
+								<sa-item type="text" name="身份证" v-model="m.idCard" br need></sa-item>
+								<sa-item type="img" name="人脸" v-model="m.photo" br need></sa-item>
+
+							</el-col>
+						</el-row>
 					</el-form>
 				</div>
 			</div>
@@ -65,6 +80,7 @@
 				},
 				el: '.vue-box',
 				data: {
+					venuesList: [],
 					currentUser: sa.$sys.getCurrUser(),
 					id: sa.p('id', 0), // 获取超链接中的id参数(0=添加,非0=修改) 
 					m: {
@@ -79,6 +95,11 @@
 					deptList: []
 				},
 				methods: {
+					getVenuesList() {
+						sa.ajax('/TbVenues/getParentList', function(res) {
+							this.venuesList = res.data; // 数据
+						}.bind(this));
+					},
 					getDeptList() {
 						sa.ajax('/TbDept/getList', {
 							pageNo: 1,
@@ -93,7 +114,8 @@
 						// 表单校验 
 						let m = this.m;
 						let phone = m.phone;
-						sa.checkNull(m.deptId, '请选择部门');
+						sa.checkNull(m.deptId, '请选择备案组织');
+						sa.checkNull(m.venuesId, '请选择备案场所');
 						sa.checkNull(m.name, '请输入 [姓名]');
 						if (!sa.isPhone(phone)) {
 							sa.error('请输入正确的联系号码');
@@ -105,7 +127,7 @@
 							sa.error('请输入正确的身份证');
 							return false;
 						}
-							sa.checkNull(m.photo, '请上传 [人脸]');
+						sa.checkNull(m.photo, '请上传 [人脸]');
 						m = sa.removeNull(m);
 						// 开始增加或修改
 						if (this.id <= 0) { // 添加
@@ -138,6 +160,7 @@
 				mounted: function() {
 					this.init();
 					this.getDeptList();
+					this.getVenuesList();
 				}
 			})
 		</script>

+ 33 - 38
sa-view/tb-person-filing/tb-person-filing-list.html

@@ -43,8 +43,10 @@
 				<el-table class="data-table" ref="data-table" :data="dataList">
 					<sa-td name="序号" type="index"></sa-td>
 					<sa-td name="姓名" prop="name"></sa-td>
-					<sa-td name="组织" prop="deptName"></sa-td>
-					<sa-td name="联系号码" prop="phone"></sa-td>
+					<sa-td name="所属部门" prop="departmentName" width="130"></sa-td>
+					<sa-td name="备案组织" prop="deptName" width="130"></sa-td>
+					<sa-td name="备案场所" prop="venuesName" width="130"></sa-td>
+					<sa-td name="联系号码" prop="phone" width="120"></sa-td>
 					<sa-td name="身份证" prop="idCadStr" width="150"></sa-td>
 					<sa-td type="img" name="人脸" prop="photo"> </sa-td>
 					<sa-td name="类型" prop="type" type="enum" :jv="{1: '临时', 2: '内部'}"></sa-td>
@@ -75,23 +77,16 @@
 			</div>
 			<el-dialog title="批量导入" :visible.sync="form.visible" width="30%">
 				<el-card class="box-card">
-				  <div slot="header" class="clearfix">
-				    <el-button style="float: right; padding-bottom: 10px" type="text" @click="downTemplate">模板下载</el-button>
-				  </div>
-				<el-upload
-				  class="upload-demo"
-				  ref="importExcel"
-				  :headers="headers"
-				  drag
-				  :auto-upload="false"
-				  accept=".xls,.xlsx"
-				  :on-success="onSuccess"
-				  :action="importUrl"
-				  >
-				  <i class="el-icon-upload"></i>
-				  <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
-				  <div class="el-upload__tip" slot="tip">只能上传excel文件</div>
-				</el-upload>
+					<div slot="header" class="clearfix">
+						<el-button style="float: right; padding-bottom: 10px" type="text" @click="downTemplate">模板下载
+						</el-button>
+					</div>
+					<el-upload class="upload-demo" ref="importExcel" :headers="headers" drag :auto-upload="false"
+						accept=".xls,.xlsx" :on-success="onSuccess" :action="importUrl">
+						<i class="el-icon-upload"></i>
+						<div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
+						<div class="el-upload__tip" slot="tip">只能上传excel文件</div>
+					</el-upload>
 				</el-card>
 				<span slot="footer" class="dialog-footer">
 					<el-button @click="cancelImport">取 消</el-button>
@@ -109,13 +104,13 @@
 				data: {
 					form: {
 						visible: false,
-						deptId:''
+						deptId: ''
 					},
-					importUrl:sa.cfg.api_url+'/TbPersonFiling/import',
-					headers:{
-						'satoken':sessionStorage.satoken
+					importUrl: sa.cfg.api_url + '/TbPersonFiling/import',
+					headers: {
+						'satoken': sessionStorage.satoken
 					},
-					deptList:[],
+					deptList: [],
 					p: { // 查询参数  
 						id: '', //  
 						judgeState: '', // 部门ID 
@@ -130,29 +125,29 @@
 				},
 				methods: {
 					importFn() {
-						this.form.visible=true;
+						this.form.visible = true;
 						this.getDeptList()
 					},
-					downTemplate(){
-						window.location.href='../../static/template/'+encodeURIComponent('备案导入模板.xlsx')
+					downTemplate() {
+						window.location.href = '../../static/template/' + encodeURIComponent('备案导入模板.xlsx')
 					},
-					cancelImport(){
+					cancelImport() {
 						this.$refs.importExcel.clearFiles();
-						this.form.visible=false;
+						this.form.visible = false;
 					},
-					sureImport(){
+					sureImport() {
 						sa.loading('正在上传');
 						this.$refs.importExcel.submit();
 					},
-					onSuccess(resp){
+					onSuccess(resp) {
 						sa.hideLoading();
-						if(resp.code!==200){
+						if (resp.code !== 200) {
 							sa.error(resp.msg);
-						}else{
-							sa.alert('导入成功',this.cancelImport());
-							setTimeout(()=>{
+						} else {
+							sa.alert('导入成功', this.cancelImport());
+							setTimeout(() => {
 								this.f5();
-							},1000)
+							}, 1000)
 						}
 					},
 					getDeptList() {
@@ -189,11 +184,11 @@
 					},
 					// 修改
 					update: function(data) {
-						sa.showIframe('修改数据', 'tb-person-filing-add.html?id=' + data.id, '700px', '80%');
+						sa.showIframe('修改数据', 'tb-person-filing-add.html?id=' + data.id, '900px', '80%');
 					},
 					// 新增
 					add: function(data) {
-						sa.showIframe('新增数据', 'tb-person-filing-add.html?id=-1', '700px', '80%');
+						sa.showIframe('新增数据', 'tb-person-filing-add.html?id=-1', '900px', '80%');
 					},
 					// 删除
 					del: function(data) {

+ 13 - 10
sa-view/tb-person-visit-record/tb-person-visit-record-list.html

@@ -31,8 +31,8 @@
 								<sa-item type="enum" name="健康码" v-model="p.healthStatus"
 									:jv="{'绿码': '绿码', '黄码': '黄码', '红码': '红码'}" jtype="4" def="全部">
 								</sa-item>
-								<sa-item type="enum" name="是否放行" v-model="p.allowPass"
-									:jv="{1: '放行', 0: '禁止'}" jtype="4" def="全部">
+								<sa-item type="enum" name="是否放行" v-model="p.allowPass" :jv="{1: '放行', 0: '禁止'}"
+									jtype="4" def="全部">
 								</sa-item>
 							</div>
 							<div>
@@ -48,7 +48,8 @@
 							</div>
 							<div>
 
-								<el-button type="primary" icon="el-icon-plus" @click="add" v-if="sa.isAuth('tb-person-visit-record-add')">新增</el-button>
+								<el-button type="primary" icon="el-icon-plus" @click="add"
+									v-if="sa.isAuth('tb-person-visit-record-add')">新增</el-button>
 
 							</div>
 						</el-col>
@@ -60,7 +61,8 @@
 				<!-- ------------- 快捷按钮 ------------- -->
 				<el-table class="data-table" ref="data-table" :data="dataList" style="margin-top: 10px;">
 					<sa-td name="序号" type="index"></sa-td>
-					<sa-td name="组织" prop="deptName" width="120"></sa-td>
+					<sa-td name="所属部门" prop="departmentName" width="120"></sa-td>
+					<sa-td name="所属组织" prop="deptName" width="120"></sa-td>
 					<sa-td name="姓名" prop="name"></sa-td>
 					<sa-td name="联系号码" prop="phone" width="120"></sa-td>
 					<sa-td name="图片" prop="picture" type="img"></sa-td>
@@ -81,9 +83,10 @@
 						<template slot-scope="s">
 							<el-button class="c-btn" type="success" icon="el-icon-view" @click="get(s.row)">查看
 							</el-button>
-							<el-button v-if="sa.isAuth('tb-person-visit-record-edit')" class="c-btn" type="primary" icon="el-icon-edit" @click="update(s.row)">修改</el-button>
-							<el-button v-if="sa.isAuth('tb-person-visit-record-del')" class="c-btn" type="danger" icon="el-icon-delete"
-								@click="del(s.row)">删除</el-button>
+							<el-button v-if="sa.isAuth('tb-person-visit-record-edit')" class="c-btn" type="primary"
+								icon="el-icon-edit" @click="update(s.row)">修改</el-button>
+							<el-button v-if="sa.isAuth('tb-person-visit-record-del')" class="c-btn" type="danger"
+								icon="el-icon-delete" @click="del(s.row)">删除</el-button>
 						</template>
 					</el-table-column>
 				</el-table>
@@ -121,7 +124,7 @@
 						id: '', // 主键 
 						direction: '', // 出入(1=入场,2=离场) 
 						deptName: '', // 部门名称 
-						allowPass:'',
+						allowPass: '',
 						startTime: '',
 						endTime: '',
 						name: '', // 姓名 
@@ -153,7 +156,7 @@
 							sa.f5TableHeight(); // 刷新表格高度 
 						}.bind(this));
 					},
-					add(){
+					add() {
 						sa.showIframe('新增数据', 'tb-person-visit-record-add.html?id=-1', '1200px', '90%');
 					},
 					// 查看
@@ -182,7 +185,7 @@
 							}.bind(this))
 						}.bind(this));
 					},
-					
+
 				},
 				created: function() {
 					this.f5();

+ 11 - 10
sa-view/tb-terminal/tb-terminal-list.html

@@ -37,6 +37,7 @@
 				<el-table class="data-table" ref="data-table" :data="dataList">
 					<sa-td name="序号" type="index"></sa-td>
 					<sa-td name="名称" prop="name"></sa-td>
+					<sa-td name="所属部门" prop="departmentName" width="140"></sa-td>
 					<sa-td name="IP地址" prop="ipAddress" width="140"></sa-td>
 					<sa-td name="方向" prop="direction" type="enum" :jv="{1: '入场', 2: '离场'}"></sa-td>
 					<sa-td name="状态" prop="state"></sa-td>
@@ -46,28 +47,28 @@
 					<el-table-column label="操作" fixed="right" width="420px">
 						<template slot-scope="s">
 							<el-button v-if="sa.isAuth('tb-terminal-edit')" class="c-btn" type="primary"
-								 @click="update(s.row)">修改
+								@click="update(s.row)">修改
 							</el-button>
 							<el-button v-if="sa.isAuth('tb-terminal-reboot')" class="c-btn" type="success"
-								 @click="restart(s.row)">重启
+								@click="restart(s.row)">重启
 							</el-button>
 							<el-button v-if="sa.isAuth('tb-terminal-open')" class="c-btn" type="success"
-								 @click="open(s.row)">开门
+								@click="open(s.row)">开门
 							</el-button>
 							<el-button v-if="sa.isAuth('tb-terminal-sync-time')" class="c-btn" type="primary"
-								 @click="sync(s.row)">时钟同步
+								@click="sync(s.row)">时钟同步
 							</el-button>
 							<el-button v-if="sa.isAuth('tb-terminal-down')" class="c-btn" type="primary"
-								 @click="down(s.row)">下发数据
+								@click="down(s.row)">下发数据
 							</el-button>
 							<el-button v-if="sa.isAuth('tb-terminal-clear')" class="c-btn" type="danger"
-								 @click="clear(s.row)">清除
+								@click="clear(s.row)">清除
 							</el-button>
 							<el-button v-if="sa.isAuth('tb-terminal-unbind')&&s.row.channelId" class="c-btn"
-								type="danger"  @click="unbind(s.row)">解绑
+								type="danger" @click="unbind(s.row)">解绑
 							</el-button>
 							<el-button v-if="sa.isAuth('tb-terminal-del')" class="c-btn" type="danger"
-								 @click="del(s.row)">删除
+								@click="del(s.row)">删除
 							</el-button>
 						</template>
 					</el-table-column>
@@ -96,12 +97,12 @@
 					dataList: [], // 数据集合 
 				},
 				methods: {
-					sync(data){
+					sync(data) {
 						sa.ajax('/TbTerminal/sync-time?id=' + data.id, function(res) {
 							sa.ok('命令已下发');
 						}.bind(this))
 					},
-					down(data){
+					down(data) {
 						sa.confirm('是否确定下发数据?', function() {
 							sa.ajax('/TbTerminal/down?id=' + data.id, function(res) {
 								sa.ok('命令已下发');

+ 90 - 49
sa-view/tb-venues/tb-venues-add.html

@@ -3,7 +3,8 @@
 	<head>
 		<title>场所管理-添加/修改</title>
 		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-		<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
+		<meta name="viewport"
+			content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
 		<!-- 所有的 css js 资源 -->
 		<link rel="stylesheet" href="../../static/kj/element-ui/theme-chalk/index.css">
 		<link rel="stylesheet" href="../../static/sa.css">
@@ -14,8 +15,23 @@
 		<script src="../../static/kj/layer/layer.js"></script>
 		<script src="../../static/sa.js"></script>
 		<style type="text/css">
-			.c-panel .el-form .c-label{width: 7em !important;}
-			.c-panel .el-form .el-input, .c-panel .el-form .el-textarea__inner{width: 250px;}
+			.c-panel .el-form .c-label {
+				width: 7em !important;
+			}
+
+			.c-panel .el-form .el-input,
+			.c-panel .el-form .el-textarea__inner {
+				width: 250px;
+			}
+
+			.item-num .el-input__inner {
+				width: 130px;
+			}
+
+			.notice {
+				margin: 10px 0 0 20px;
+				line-height: 30px;
+			}
 		</style>
 	</head>
 	<body>
@@ -23,10 +39,35 @@
 			<!-- ------- 内容部分 ------- -->
 			<div class="s-body">
 				<div class="c-panel">
-                    <div class="c-title" v-if="id == 0">数据添加</div>
+					<div class="c-title" v-if="id == 0">数据添加</div>
 					<div class="c-title" v-else>数据修改</div>
 					<el-form v-if="m">
-						<sa-item type="text" name="场所名称" v-model="m.name" br need></sa-item>
+						<div class="c-item">
+							<label class="c-label"><span style="color: red;">*</span>所属部门:</label>
+							<el-select v-model="m.departmentId">
+								<el-option label="请选择" v-for="(item,index) in departmentList" :key="item.id"
+									:label="item.name" :value="item.id"></el-option>
+							</el-select>
+						</div>
+						<sa-item type="text" name="名称" v-model="m.name" br need></sa-item>
+						<div class="c-item">
+							<label class="c-label"><span style="color: red;">*</span>等级:</label>
+							<el-input-number class="item-num" v-model="m.level" :min="1" step-strictly :step="1"
+								:max="99" size="mini"></el-input-number>
+						</div>
+						<div class="notice">
+							<div>
+								<span style="color: red;">*</span>说明:
+							</div>
+							<div>
+								<p>1、场所等级高的人员备案可以通行等级低的场所</p>
+								<p>2、同等级的备案可以相互通行</p>
+								<p>3、1表示等级最高</p>
+							</div>
+							<div v-if="id==0">
+								<el-checkbox v-model="checked"><label style="color: red;">已阅读</label></el-checkbox>
+							</div>
+						</div>
 						<sa-item name="" class="s-ok" br>
 							<el-button type="primary" icon="el-icon-plus" @click="ok()">保存</el-button>
 						</sa-item>
@@ -39,88 +80,88 @@
 				<el-button @click="sa.closeCurrIframe()">取消</el-button>
 			</div>
 		</div>
-        <script>
-			
+		<script>
 			var app = new Vue({
 				components: {
 					"sa-item": httpVueLoader('../../sa-frame/com/sa-item.vue')
 				},
 				el: '.vue-box',
 				data: {
-					deptList:[],
+					checked: false,
+					departmentList: [],
 					currentUser: sa.$sys.getCurrUser(),
-					id: sa.p('id', 0),		// 获取超链接中的id参数(0=添加,非0=修改) 
-					m: null,		// 实体对象 
+					id: sa.p('id', 0), // 获取超链接中的id参数(0=添加,非0=修改) 
+					m: {
+						departmentId: '',
+						level: 1
+					}, // 实体对象 
 				},
 				methods: {
-					getDeptList() {
-						sa.ajax('/TbDept/getList', {
-							pageNo: 1,
-							pageSize: 100
-						}, function(resp) {
-							let list = resp.data;
-							// let deptId = this.currentUser.deptId;
-							// if (deptId != '9999999') {
-							// 	this.m.deptId = deptId;
-							// }
-							this.deptList = list;
-						}.bind(this))
+					getDepartmentList() {
+						sa.ajax('/TbDepartment/getList', function(res) {
+							let list = res.data;
+							if (list.length === 1) {
+								this.m.departmentId = list[0].id;
+							}
+							this.departmentList = list; // 数据
+						}.bind(this));
 					},
 					// 创建一个 默认Model 
 					createModel: function() {
 						return {
-							id: '',		//  
-							pId: sa.p('pId', '-1'),		// 父ID 
-							name: '',		// 名称 
-							type:3,
-							createTime: '',		// 创建时间 
-							createBy: '',		// 创建人 
-							updateTime: '',		// 更新时间 
-							updateBy: '',		// 更新人 
+							id: '', //  
+							pId: sa.p('pId', '-1'), // 父ID 
+							name: '', // 名称 
+							type: 3,
+							level: 1,
+							departmentId: ''
 						}
 					},
 					// 提交数据 
-					ok: function(){
+					ok: function() {
 						// 表单校验 
 						let m = this.m;
+						sa.checkNull(m.departmentId, '请选择 [部门]');
 						sa.checkNull(m.name, '请输入 [名称]');
+						if (this.id == 0 && !this.checked) {
+							sa.error('请勾选阅读')
+							return;
+						}
 						// 开始增加或修改
-						if(this.id <= 0) {	// 添加
-							sa.ajax('/TbVenues/add', m, function(res){
-								sa.alert('增加成功', this.clean); 
+						if (this.id <= 0) { // 添加
+							sa.ajax('/TbVenues/add', m, function(res) {
+								sa.alert('增加成功', this.clean);
 							}.bind(this));
-						} else {	// 修改
-							sa.ajax('/TbVenues/update', m, function(res){
+						} else { // 修改
+							if (m.pid && !m.pId) {
+								m.pId = m.pid;
+							}
+							sa.ajax('/TbVenues/update', m, function(res) {
 								sa.alert('修改成功', this.clean);
 							}.bind(this));
 						}
 					},
 					// 添加/修改 完成后的动作
 					clean: function() {
-						if(this.id == 0) {
-							this.m = this.createModel();
-						} else {
-							parent.app.f5();		// 刷新父页面列表
-							sa.closeCurrIframe();	// 关闭本页 
-						}
+						parent.app.f5(); // 刷新父页面列表
+						sa.closeCurrIframe(); // 关闭本页 
 					}
 				},
-				mounted: function(){
-					this.getDeptList();
+				mounted: function() {
+					this.getDepartmentList();
 					// 初始化数据 
-					if(this.id <= 0) {	
+					if (this.id <= 0) {
 						this.m = this.createModel();
-					} else {	
+					} else {
 						sa.ajax('/TbVenues/getById?id=' + this.id, function(res) {
 							this.m = res.data;
-							if(res.data == null) {
+							if (res.data == null) {
 								sa.alert('未能查找到 id=' + this.id + " 详细数据");
 							}
 						}.bind(this))
 					}
 				}
 			})
-			
 		</script>
 	</body>
-</html>
+</html>

+ 10 - 12
sa-view/tb-venues/tb-venues-addchildren.html

@@ -30,11 +30,10 @@
 			<!-- ------- 内容部分 ------- -->
 			<div class="s-body">
 				<div class="c-panel">
-					<div class="c-title" v-if="id == 0">数据添加</div>
-					<div class="c-title" v-else>数据修改</div>
-					<el-form v-if="m">
+					<el-form>
 						<sa-item type="text" name="通道名称" v-model="m.name" br need></sa-item>
-						<sa-item type="enum" name="类型" v-model="m.type" :jv="{1: '人行通道', 2: '车行通道'}" jtype="3" br></sa-item>
+						<sa-item type="enum" name="类型" v-model="m.type" :jv="{1: '人行通道', 2: '车行通道'}" jtype="3" br>
+						</sa-item>
 						<sa-item name="" class="s-ok" br>
 							<el-button type="primary" icon="el-icon-plus" @click="ok()">保存</el-button>
 						</sa-item>
@@ -62,11 +61,11 @@
 					createModel: function() {
 						return {
 							id: '', //  
-							deptId: sa.p('deptId', '-1'), // 部门ID 
+							departmentId: sa.p('departmentId', '-2'), // 部门ID 
 							deptName: '', // 部门 
 							pId: sa.p('pId', '-1'), // 父ID 
 							name: '', // 名称 
-							type:1,
+							type: 1,
 						}
 					},
 					// 提交数据 
@@ -80,6 +79,9 @@
 								sa.alert('增加成功', this.clean);
 							}.bind(this));
 						} else { // 修改
+							if (m.pid && !m.pId) {
+								m.pId = m.pid;
+							}
 							sa.ajax('/TbVenues/update', m, function(res) {
 								sa.alert('修改成功', this.clean);
 							}.bind(this));
@@ -87,12 +89,8 @@
 					},
 					// 添加/修改 完成后的动作
 					clean: function() {
-						if (this.id == 0) {
-							this.m = this.createModel();
-						} else {
-							parent.app.f5(); // 刷新父页面列表
-							sa.closeCurrIframe(); // 关闭本页 
-						}
+						parent.app.f5(); // 刷新父页面列表
+						sa.closeCurrIframe(); // 关闭本页 
 					}
 				},
 				mounted: function() {

+ 12 - 8
sa-view/tb-venues/tb-venues-list.html

@@ -42,6 +42,15 @@
 								<span v-else-if="s.row.type==3">场所</span>
 							</template>
 					</el-table-column>
+					<sa-td name="所属部门" prop="departmentName"></sa-td>
+					<el-table-column label="场所等级" prop="level">
+							<template slot-scope="s">
+								<span v-if="s.row.type==3">
+									{{s.row.level}}级
+								</span>
+								<span v-else>-</span>
+							</template>
+					</el-table-column>
 					<sa-td name="创建时间" prop="createTime"></sa-td>
 					<sa-td name="更新时间" prop="updateTime"></sa-td>
 					<el-table-column label="操作" fixed="right" width="320px">
@@ -76,13 +85,9 @@
 						deptName: '', // 部门 
 						pId: '', // 父ID 
 						name: '', // 名称 
-						createTime: '', // 创建时间 
-						createBy: '', // 创建人 
-						updateTime: '', // 更新时间 
-						updateBy: '', // 更新人 
 						pageNo: 1, // 当前页 
 						pageSize: 10, // 页大小 
-						sortType: 0 // 排序方式 
+						sortType:10 // 排序方式 
 					},
 					dataCount: 0,
 					dataList: [], // 数据集合 
@@ -119,12 +124,11 @@
 					},
 					// 新增
 					add: function(data) {
-						sa.showIframe('新增场所', 'tb-venues-add.html?id=-1', '500px', '50%');
+						sa.showIframe('新增场所', 'tb-venues-add.html?id=0', '500px', '60%');
 					},
 					// 新增子级
 					addChildren: function(data) {
-						sa.showIframe('新增通道', 'tb-venues-addchildren.html?id=-1&pId=' + data.id + '&deptId=' + data
-							.deptId, '500px', '50%');
+						sa.showIframe('新增通道', 'tb-venues-addchildren.html?departmentId='+data.departmentId+'&pId=' + data.id, '500px', '50%');
 					},
 					// 删除
 					del: function(data) {

+ 3 - 3
static/sa.js

@@ -8,7 +8,7 @@ var sa = {
 (function(){
 	// 公司开发环境
 	var cfg_dev = {
-		api_url: 'http://192.168.3.27:8099/pro',	// 所有ajax请求接口父地址
+		api_url: 'http://127.0.0.1:8099/pro',	// 所有ajax请求接口父地址
 		web_url: 'http://www.baidu.com'		// 此项目前台地址 (此配置项非必须)
 	}
 	// 服务器测试环境
@@ -18,10 +18,10 @@ var sa = {
 	}
 	// 正式生产环境
 	var cfg_prod = {
-		api_url: 'http://10.3.2.193:9898/pro',
+		api_url: 'http://192.168.1.38:9898/pro',
 		web_url: 'http://www.baidu.com'
 	}
-	sa.cfg = cfg_dev; // 最终环境 , 上线前请选择正确的环境 
+	sa.cfg = cfg_prod; // 最终环境 , 上线前请选择正确的环境 
 })();
 
 

BIN=BIN
static/template/备案导入模板.xlsx