Răsfoiți Sursa

海康摄像头管理

qzyReal 2 ani în urmă
părinte
comite
03261098d7
62 a modificat fișierele cu 1853 adăugiri și 779 ștergeri
  1. 8 8
      index.html
  2. 4 4
      login.html
  3. 2 1
      sa-frame/com/sa-info.vue
  4. 1 0
      sa-frame/com/sa-item.vue
  5. 72 18
      sa-frame/menu-list-sp.js
  6. 1 1
      sa-frame/sa-code.js
  7. 180 76
      sa-view-sp/console/console-main.html
  8. 2 2
      sa-view-sp/sp-admin/admin-add.html
  9. 5 5
      sa-view-sp/sp-admin/admin-list.html
  10. 131 0
      sa-view/hc-camera/hc-camera-add.html
  11. 71 0
      sa-view/hc-camera/hc-camera-info.html
  12. 160 0
      sa-view/hc-camera/hc-camera-list.html
  13. 205 0
      sa-view/mini-user/mini-user-list.html
  14. 1 3
      sa-view/sys-dict/sys-dict-add.html
  15. 113 0
      sa-view/sys-dict/sys-dict-addChild.html
  16. 5 7
      sa-view/sys-dict/sys-dict-list.html
  17. 1 1
      sa-view/tb-alarm-person/tb-alarm-person-add.html
  18. 2 2
      sa-view/tb-car-black/tb-car-black-add.html
  19. 1 1
      sa-view/tb-car-black/tb-car-black-list.html
  20. 13 17
      sa-view/tb-car-filing/tb-car-filing-add.html
  21. 3 2
      sa-view/tb-car-filing/tb-car-filing-info.html
  22. 19 10
      sa-view/tb-car-filing/tb-car-filing-judge.html
  23. 45 10
      sa-view/tb-car-filing/tb-car-filing-list.html
  24. 22 6
      sa-view/tb-car-visit-record/tb-car-visit-record-add.html
  25. 3 3
      sa-view/tb-car-visit-record/tb-car-visit-record-handler.html
  26. 1 1
      sa-view/tb-car-visit-record/tb-car-visit-record-info.html
  27. 37 10
      sa-view/tb-car-visit-record/tb-car-visit-record-list.html
  28. 3 3
      sa-view/tb-command-log/tb-command-log-add.html
  29. 1 1
      sa-view/tb-command-log/tb-command-log-list.html
  30. 1 11
      sa-view/tb-department/tb-department-add.html
  31. 5 9
      sa-view/tb-department/tb-department-list.html
  32. 36 18
      sa-view/tb-dept/tb-dept-add.html
  33. 47 40
      sa-view/tb-dept/tb-dept-list.html
  34. 3 3
      sa-view/tb-gate-command-log/tb-gate-command-log-add.html
  35. 1 1
      sa-view/tb-gate-command-log/tb-gate-command-log-info.html
  36. 1 1
      sa-view/tb-gate-command-log/tb-gate-command-log-list.html
  37. 2 2
      sa-view/tb-gate-terminal/tb-gate-terminal-add.html
  38. 1 1
      sa-view/tb-gate-terminal/tb-gate-terminal-info.html
  39. 2 2
      sa-view/tb-gate-terminal/tb-gate-terminal-list.html
  40. 1 1
      sa-view/tb-manager/tb-manager-add.html
  41. 1 1
      sa-view/tb-manager/tb-manager-list.html
  42. 2 2
      sa-view/tb-person-black/tb-person-black-add.html
  43. 5 5
      sa-view/tb-person-black/tb-person-black-list.html
  44. 49 29
      sa-view/tb-person-filing/tb-person-filing-add.html
  45. 5 5
      sa-view/tb-person-filing/tb-person-filing-info.html
  46. 61 16
      sa-view/tb-person-filing/tb-person-filing-judge.html
  47. 81 17
      sa-view/tb-person-filing/tb-person-filing-list.html
  48. 1 1
      sa-view/tb-person-visit-record/health-code-record-info.html
  49. 1 1
      sa-view/tb-person-visit-record/health-code-record-list.html
  50. 50 60
      sa-view/tb-person-visit-record/tb-person-visit-record-add.html
  51. 3 3
      sa-view/tb-person-visit-record/tb-person-visit-record-edit.html
  52. 1 1
      sa-view/tb-person-visit-record/tb-person-visit-record-info.html
  53. 29 17
      sa-view/tb-person-visit-record/tb-person-visit-record-list.html
  54. 2 2
      sa-view/tb-tactics/tb-tactics-list.html
  55. 1 1
      sa-view/tb-terminal/tb-terminal-add.html
  56. 2 2
      sa-view/tb-terminal/tb-terminal-list.html
  57. 1 18
      sa-view/tb-venues/tb-venues-add.html
  58. 2 2
      sa-view/tb-venues/tb-venues-addchildren.html
  59. 2 3
      sa-view/tb-venues/tb-venues-list.html
  60. 1 1
      static/sa.css
  61. 341 311
      static/sa.js
  62. BIN
      static/template/备案导入模板.xlsx

+ 8 - 8
index.html

@@ -5,7 +5,7 @@
 		<meta charset="utf-8">
 		<link rel="shortcut icon" type="image/x-icon" href="sa-frame/admin-logo.png" class="admin-icon">
 		<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
-		<link rel="stylesheet" href="https://unpkg.com/element-ui@2.13.0/lib/theme-chalk/index.css">
+		<link rel="stylesheet" href="static/kj/element-ui/theme-chalk/index.css">
 		<link rel="stylesheet" href="sa-frame/index/index.css">
 		<link rel="stylesheet" href="sa-frame/index/theme.css">
 		<link rel="stylesheet" href="static/sa.css">
@@ -49,19 +49,19 @@
 		<!-- js依赖库 -->
 		<script src="https://unpkg.com/vue@2.6.10/dist/vue.js"></script>
 		<script type="text/javascript">Vue.config.productionTip = false;</script>
-		<script src="https://unpkg.com/http-vue-loader@1.4.2/src/httpVueLoader.js"></script>
-		<script src="https://unpkg.com/element-ui@2.13.0/lib/index.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="https://unpkg.com/sortablejs@1.14.0/Sortable.min.js"></script>
-		<script src="https://unpkg.com/vuedraggable@2.24.3/dist/vuedraggable.umd.min.js"></script>
+		<script src="static/kj/httpVueLoader.js"></script>
+		<script src="static/kj/element-ui/index.js"></script>
+		<script src="static/kj/jquery.min.js"></script>
+		<script src="static/kj/layer/layer.js"></script>
+		<script src="static/kj/layer/Sortable.min.js"></script>
+		<script src="static/kj/layer/vuedraggable.umd.min.js"></script>
 		<!-- <script src="https://www.itxst.com/package/sortable/sortable.min.js"></script> -->
 		<!-- <script src="https://www.itxst.com/package/vuedraggable/vuedraggable.umd.min.js"></script> -->
 		
 		<!-- js本地库 -->
 		<script src="sa-frame/index/admin-util.js"></script>
 		<script src="sa-frame/index/index.js"></script>
-		<script src="sa-frame/menu-list.js"></script>
+		<script src="sa-frame/menu-list.js?v=2394"></script>
 		<script src="sa-frame/menu-list-sp.js"></script>
 		<script src="static/sa.js"></script>
 		<script src="sa-frame/sa-code.js?v=112344"></script>

+ 4 - 4
login.html

@@ -71,15 +71,15 @@
 		<!-- scripts -->
 		<script src="sa-frame/login/particles.min.js"></script>
 		<script src="sa-frame/login/app.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/kj/jquery.min.js"></script>
+		<script src="static/kj/layer/layer.js"></script>
 		<script src="static/sa.js"></script>
 		<script type="text/javascript">
 
 			// 你所有要改的代码全在这里   ↓↓↓↓↓
 
 			// 所有参考属性
-			var page_title = '钦州码头智慧湾卡口智能防疫系统';		// 页面标题
+			var page_title = '东兴互市智慧来访系统';		// 页面标题
 			var key = '';							// 默认的账号
 			var password = '';				// 默认的password
 			var logo = 'sa-frame/admin-logo.png';	// logo地址,为空字符串则不显示
@@ -112,6 +112,7 @@
 					sa.$sys.setCurrUser(res.data.admin);
 					// 写入权限码
 					sa.setAuth(res.data.perList);
+					sa.setDepartmentId(res.data.admin.departmentId);
 					// 写入全局配置
 					sa.$sys.setAppCfg(res.data.appCfg);
 
@@ -152,7 +153,6 @@
 				document.querySelector('.login').style.opacity = '1';
 			}, 0)
 
-			console.log('本页面参考于jq22,原作者:http://www.jq22.com/jquery-info20074');
 		</script>
 	</body>
 </html>

+ 2 - 1
sa-frame/com/sa-info.vue

@@ -37,8 +37,9 @@
 	</div>
 	<!-- img -->
 	<div class="c-item" :class="{br: br}" v-else-if="type == 'img'">
-		<label class="c-label">{{name}}:</label> 
+		<label class="c-label">{{name}}:</label>
 		<img :src="value" class="info-img" @click="sa.showImage(value, '400px', '400px')" v-if="value">
+		 <slot name="tip"></slot>
 		<span v-else>无</span>
 	</div>
 	<!-- audio、video、file -->

+ 1 - 0
sa-frame/com/sa-item.vue

@@ -60,6 +60,7 @@
 	<div class="c-item" :class="{br: br}" v-else-if="type == 'img'">
 		<label class="c-label"><span v-if="need" style="color: red;">*</span>{{name}}:</label> 
 		<img :src="value" class="info-img" @click="sa.showImage(value, '400px', '400px')" v-if="!sa.isNull(value)">
+		 <slot name="tip"></slot>
 		<el-link type="primary" @click="sa.uploadImage(src => {$emit('input', src); sa.ok2('上传成功');})">上传</el-link>
 	</div>
 	<!-- audio -->

+ 72 - 18
sa-frame/menu-list-sp.js

@@ -22,46 +22,46 @@ window.menuList.unshift({
 		icon: 'el-icon-unlock',
 		parent: true,
 		childList: [{
-				id: 'tb-dept-list',
-				name: '备案组织',
+				id: 'tb-department-list',
 				icon: 'el-icon-s-operation',
-				url: 'sa-view/tb-dept/tb-dept-list.html',
+				name: '单位管理',
+				url: 'sa-view/tb-department/tb-department-list.html',
 				childList: [{
-						id: 'tb-dept-add',
+						id: 'tb-department-add',
 						name: '添加',
 						isShow: false,
 					},
 					{
-						id: 'tb-dept-del',
+						id: 'tb-department-del',
 						name: '删除',
 						isShow: false,
 
 					},
 					{
-						id: 'tb-dept-edit',
+						id: 'tb-department-edit',
 						name: '编辑',
 						isShow: false,
 
 					},
 				]
 			}, {
-				id: 'tb-department-list',
+				id: 'tb-dept-list',
+				name: '备案组织',
 				icon: 'el-icon-s-operation',
-				name: '部门管理',
-				url: 'sa-view/tb-department/tb-department-list.html',
+				url: 'sa-view/tb-dept/tb-dept-list.html',
 				childList: [{
-						id: 'tb-department-add',
+						id: 'tb-dept-add',
 						name: '添加',
 						isShow: false,
 					},
 					{
-						id: 'tb-department-del',
+						id: 'tb-dept-del',
 						name: '删除',
 						isShow: false,
 
 					},
 					{
-						id: 'tb-department-edit',
+						id: 'tb-dept-edit',
 						name: '编辑',
 						isShow: false,
 
@@ -99,6 +99,25 @@ window.menuList.unshift({
 				]
 			},
 			{
+				id: 'tb-mini-user',
+				name: '微信用户',
+				icon: 'el-icon-user',
+				url: 'sa-view/mini-user/mini-user-list.html',
+				info: '微信用户账号管理',
+				childList: [{
+						id: 'mini-user-del',
+						name: '删除',
+						isShow: false,
+
+					},
+					{
+						id: 'mini-user-edit',
+						name: '编辑',
+						isShow: false,
+					},
+				]
+			},
+			{
 				id: 'role-list',
 				name: '角色管理',
 				icon: 'el-icon-s-custom',
@@ -322,8 +341,28 @@ window.menuList.unshift({
 					}
 				]
 			},
-
-
+			{
+				id: 'hc-camera-list',
+				icon: 'el-icon-video-camera-solid',
+				name: '摄像头管理',
+				url: 'sa-view/hc-camera/hc-camera-list.html',
+				childList: [{
+						id: 'hc-camera-add',
+						name: '添加',
+						isShow: false,
+					},
+					{
+						id: 'hc-camera-edit',
+						name: '修改',
+						isShow: false,
+					},
+					{
+						id: 'hc-camera-del',
+						name: '删除',
+						isShow: false
+					}
+				]
+			}
 		]
 
 	}, {
@@ -348,6 +387,16 @@ window.menuList.unshift({
 								isShow: false,
 							},
 							{
+								id: 'tb-person-filing-export',
+								name: '导出',
+								isShow: false,
+							},
+							{
+								id: 'tb-person-filing-issued',
+								name: '下发人脸',
+								isShow: false,
+							},
+							{
 								id: 'tb-person-filing-add',
 								name: '添加',
 								isShow: false,
@@ -371,7 +420,7 @@ window.menuList.unshift({
 
 							},
 						]
-					},{
+					}, {
 						id: 'tb-car-filing-list',
 						name: '车辆备案',
 						icon: 'el-icon-receiving',
@@ -382,6 +431,11 @@ window.menuList.unshift({
 								isShow: false,
 							},
 							{
+								id: 'tb-car-filing-export',
+								name: '导出',
+								isShow: false,
+							},
+							{
 								id: 'tb-car-filing-add',
 								name: '添加',
 								isShow: false,
@@ -400,7 +454,7 @@ window.menuList.unshift({
 							},
 						]
 					},
-					
+
 				]
 			},
 			{
@@ -503,7 +557,7 @@ window.menuList.unshift({
 		parent: true,
 		childList: [{
 				id: 'tb-person-visit-record-list',
-				name: '出入记录',
+				name: '访问记录',
 				icon: 'el-icon-s-unfold',
 				url: 'sa-view/tb-person-visit-record/tb-person-visit-record-list.html',
 				childList: [{
@@ -525,7 +579,7 @@ window.menuList.unshift({
 			},
 			{
 				id: 'tb-person-visit-temperature-list',
-				name: '出入体温检测',
+				name: '访问体温检测',
 				icon: 'el-icon-set-up',
 				url: 'sa-view/tb-person-visit-record/tb-person-visit-temperature-list.html'
 			},

+ 1 - 1
sa-frame/sa-code.js

@@ -20,7 +20,7 @@ sa.ajax('/AccAdmin/getLoginInfo', function(res) {
 		//return sa.alert('当前账号暂无进入后台权限');
 	}
 	// 配置 
-	sa_admin.title = "钦州码头智慧湾卡口智能防疫系统";
+	sa_admin.title = "东兴互市智慧来访系统";
 	sa_admin.logo = 'sa-frame/admin-logo.png'; // 设置logo图标地址 
 	sa_admin.icon = "sa-frame/admin-logo.png"; // 设置logo图标地址 
 

+ 180 - 76
sa-view-sp/console/console-main.html

@@ -1,101 +1,205 @@
 <!DOCTYPE html>
 <html>
 	<head>
-		<title>Sa-Admin 控制台</title>
+		<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="https://unpkg.com/element-ui@2.13.0/lib/theme-chalk/index.css">
+		<link rel="stylesheet" href="../../static/kj/element-ui/theme-chalk/index.css">
 		<link rel="stylesheet" href="../../static/sa.css">
-		<style type="text/css">
-			.vue-box{margin: 0; padding: 0; height: 100%;}
-			.el-card{border-radius: 0px; border: 1px #ddd solid ; margin-bottom: 14px;}
-			.s-row{/* background-color: antiquewhite; */ padding: 0 14px; padding-bottom: 0px;}
-			.s-row-1{padding-top: 14px;}
-			.s-row-2{/* margin-top: -10px; */}
-			.s-row-2 .el-card .el-card__body{height: 250px;}
-			.s-row-3 .el-card{/* height: 100%; */}
-			
-			.echarts-div{height: 100%;}
-			.s-row-3 .el-alert{margin-bottom: 14px;}
-			
-			.vue-box .el-alert{padding: 1em 0.5em; }
+		<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>
+			/* 第一行 */
+			.sa-wnk {
+				background-color: #FFF;
+				border: 1px #ddd solid;
+				margin-bottom: 14px;
+				min-height: 100px;
+				cursor: pointer;
+				transition: all 0.3s;
+				overflow: hidden;
+			}
+
+			.sa-wnk:hover {
+				box-shadow: 0 0 20px #999;
+			}
+
+			.sa-wnk img {
+				float: left;
+				line-height: 100px;
+				margin: 25px 0px 0 20px;
+				width: 50px;
+				height: 50px;
+				vertical-align: middle;
+			}
+
+			.sa-wnk .sa-wnk-tv {
+				float: left;
+				margin-left: 10px;
+				max-width: calc(100% - 100px);
+			}
+
+			.sa-wnk-title {
+				margin-top: 25px;
+				font-size: 16px;
+			}
+
+			.sa-wnk-value {
+				margin-top: 4px;
+				font-size: 24px;
+				padding-bottom: 20px;
+			}
 		</style>
 	</head>
 	<body>
 		<div class="vue-box" style="display: none;" :style="'display: block;'">
-			
-			<!-- ------------ 第一栏 - 统计数据 ------------- -->
-			<div class="s-row s-row-1">
-				<!-- <com-sta-data></com-sta-data> -->
-			</div>
-			
-			<!-- ------------ 第二栏 - 图表 ------------- -->
-			<div class="s-row s-row-2">
-				<!-- <el-row :gutter="14">
-					<el-col :lg="8" :xs="24">
-						<el-card shadow="never" header="柱状图">
-							<com-chart-1></com-chart-1>
-						</el-card>
+			<el-card>
+				<div slot="header">
+					<h2>进出记录监控</h2>
+				</div>
+				<el-row :gutter="14">
+					<el-col :lg="5" :sm="8" :xs="24">
+						<div class="sa-wnk">
+							<img src="../../static/icon/icon-user.png">
+							<div class="sa-wnk-tv">
+								<p class="sa-wnk-title">今日进出人数</p>
+								<p class="sa-wnk-value">{{sta.todayCount}}</p>
+							</div>
+						</div>
+					</el-col>
+					<el-col :lg="5" :sm="8" :xs="24">
+						<div class="sa-wnk">
+							<img src="../../static/icon/icon-user.png">
+							<div class="sa-wnk-tv">
+								<p class="sa-wnk-title">最近一周进出人数</p>
+								<p class="sa-wnk-value">{{sta.weekCount}}</p>
+							</div>
+						</div>
+					</el-col>
+					<el-col :lg="5" :sm="8" :xs="24">
+						<div class="sa-wnk">
+							<img src="../../static/icon/icon-user.png">
+							<div class="sa-wnk-tv">
+								<p class="sa-wnk-title">最近一个月进出人数</p>
+								<p class="sa-wnk-value">{{sta.monthCount}}</p>
+							</div>
+						</div>
+					</el-col>
+					<el-col :lg="5" :sm="8" :xs="24">
+						<div class="sa-wnk">
+							<img src="../../static/icon/icon-user.png">
+							<div class="sa-wnk-tv">
+								<p class="sa-wnk-title">最近一年进出人数</p>
+								<p class="sa-wnk-value">{{sta.yearCount}}</p>
+							</div>
+						</div>
 					</el-col>
-					<el-col :lg="8" :xs="24">
-						<el-card shadow="never" header="饼图">
-							<com-chart-2></com-chart-2>
-						</el-card>
+					<el-col :lg="4" :sm="8" :xs="24">
+						<div class="sa-wnk">
+							<img src="../../static/icon/icon-user.png">
+							<div class="sa-wnk-tv">
+								<p class="sa-wnk-title">平均每天进出人数</p>
+								<p class="sa-wnk-value">{{sta.avg}}</p>
+							</div>
+						</div>
 					</el-col>
-					<el-col :lg="8" :xs="24">
-						<el-card shadow="never" header="折线图">
-							<com-chart-3></com-chart-3>
-						</el-card>
+				</el-row>
+			</el-card>
+			<el-card>
+				<div slot="header">
+					<h2>健康码监控</h2>
+				</div>
+				<el-row :gutter="14">
+					<el-col :lg="5" :sm="8" :xs="24">
+						<div class="sa-wnk">
+							<img src="../../static/icon/icon-error.png">
+							<div class="sa-wnk-tv">
+								<p class="sa-wnk-title">今日健康码异常数</p>
+								<p class="sa-wnk-value">{{sta.todayHealthErrorCount}}</p>
+							</div>
+						</div>
 					</el-col>
-				</el-row> -->
-			</div>
-			
-			<!-- ------------ 第三栏 - 框架信息 ------------- -->
-			<div class="s-row s-row-3">
-				
-			</div>
-			
+					<el-col :lg="5" :sm="8" :xs="24">
+						<div class="sa-wnk">
+							<img src="../../static/icon/icon-error.png">
+							<div class="sa-wnk-tv">
+								<p class="sa-wnk-title">最近一周健康码异常数</p>
+								<p class="sa-wnk-value">{{sta.weekHealthErrorCount}}</p>
+							</div>
+						</div>
+					</el-col>
+					<el-col :lg="5" :sm="8" :xs="24">
+						<div class="sa-wnk">
+							<img src="../../static/icon/icon-error.png">
+							<div class="sa-wnk-tv">
+								<p class="sa-wnk-title">最近一个月健康码异常数</p>
+								<p class="sa-wnk-value">{{sta.monthHealthErrorCount}}</p>
+							</div>
+						</div>
+					</el-col>
+					<el-col :lg="5" :sm="8" :xs="24">
+						<div class="sa-wnk">
+							<img src="../../static/icon/icon-error.png">
+							<div class="sa-wnk-tv">
+								<p class="sa-wnk-title">最近一年健康码异常数</p>
+								<p class="sa-wnk-value">{{sta.yearHealthErrorCount}}</p>
+							</div>
+						</div>
+					</el-col>
+					<el-col :lg="4" :sm="8" :xs="24">
+						<div class="sa-wnk">
+							<img src="../../static/icon/icon-error.png">
+							<div class="sa-wnk-tv">
+								<p class="sa-wnk-title">平均每天健康码异常数</p>
+								<p class="sa-wnk-value">{{sta.avgError}}</p>
+							</div>
+						</div>
+					</el-col>
+				</el-row>
+			</el-card>
 		</div>
-		<script src="https://unpkg.com/vue@2.6.10/dist/vue.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.js"></script>
-		<script src="https://www.layuicdn.com/layer-v3.1.1/layer.js"></script>
-		<script src="https://unpkg.com/echarts@4.6.0/dist/echarts-en.min.js"></script>
-		<script src="../../static/sa.js"></script>
-		<script type="text/javascript">
+		<script>
 			var app = new Vue({
-				components: {
-					'com-sta-data': httpVueLoader('com-sta-data.vue'),
-					'com-chart-1': httpVueLoader('com-chart-1.vue'),
-					'com-chart-2': httpVueLoader('com-chart-2.vue'),
-					'com-chart-3': httpVueLoader('com-chart-3.vue'),
-					'com-stack': httpVueLoader('com-stack.vue'),
-					'com-update-log': httpVueLoader('com-update-log.vue'),
-					'com-origin': httpVueLoader('com-origin.vue'),
-					// 'com-intro': httpVueLoader('com-intro.vue'),
-				},
+
 				el: '.vue-box',
 				data: {
+					timmer:null,
+					sta: {
+						todayCount: 0,
+						todayHealthErrorCount: 0,
+						weekCount: 0,
+						weekHealthErrorCount: 0,
+						monthCount: 0,
+						monthHealthErrorCount: 0,
+						yearCount: 0,
+						yearHealthErrorCount: 0,
+						avg: 0,
+						avgError: 0
+					},
 				},
 				methods: {
+					getMonitor() {
+						sa.ajax('/monitor/watch', function(res) {
+							this.sta = res.data;
+						}.bind(this));
+					}
+				},
+				created: function() {
+					this.getMonitor();
+					this.timmer=setInterval(()=>{
+						this.getMonitor()
+					},30000)
 				},
-				mounted: function() {
+				onbeforeunload() {
+					clearInterval(this.timmer)
 				}
 			})
-			
-			// 设置监听,改变窗口大小时重绘图表 
-			window.myChartList = [];
-			window.onresize = function() {
-				myChartList.forEach(function(myChart) {
-					myChart.resize();
-				})
-			}
 		</script>
-		<!-- 百度统计(下载到本地后请删除) -->
-		<div style="height: 0px; overflow: hidden;">
-			<script type="text/javascript" src="https://v1.cnzz.com/z_stat.php?id=1279021391&web_id=1279021391"></script>
-		</div>
 	</body>
 </html>

+ 2 - 2
sa-view-sp/sp-admin/admin-add.html

@@ -31,7 +31,7 @@
 					<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>
+						<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">
@@ -94,7 +94,7 @@
 							sa.error('请输入正确的手机号');
 							return;
 						}
-						sa.checkNull(m.departmentId, '请选择部门');
+						sa.checkNull(m.departmentId, '请选择单位');
 						sa.checkNull(m.password, '请输入密码');
 						sa.checkNull(m.roleId, '请选择角色');
 

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

@@ -55,14 +55,14 @@
 				<el-table class="data-table" ref="data-table" :data="dataList">
 					<sa-td type="selection"></sa-td>
 					<sa-td type="text" name="姓名" prop="nickname"></sa-td>
-					<sa-td type="text" name="账号" prop="name"></sa-td>
+					<sa-td type="text" name="账号" prop="name" width="140"></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="departmentName" not='-' width="130"></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>
@@ -120,9 +120,9 @@
 				<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>
+					<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>

+ 131 - 0
sa-view/hc-camera/hc-camera-add.html

@@ -0,0 +1,131 @@
+<!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">
+						<div class="c-item">
+							<label class="c-label"><span style="color: red;">*</span>所在场所:</label>
+							<el-select v-model="m.venuesId">
+								<el-option label="请选择" v-for="(item,index) in venuesList" :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="text" name="IP地址" v-model="m.ip" br need></sa-item>
+						<sa-item type="text" name="端口" v-model="m.port" br need></sa-item>
+						<sa-item type="text" name="用户名" v-model="m.uname" br need></sa-item>
+						<sa-item type="password" name="密码" v-model="m.pwd" br need></sa-item>
+						<sa-item name="" class="s-ok" br>
+							<el-button type="primary" icon="el-icon-plus" @click="ok()">保存</el-button>
+						</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: {
+						id: '', // 主键 
+						venuesId: '', // 所在场所 
+						name: '', // 名称 
+						ip: '', // IP地址 
+						port: '8000', // 端口 
+						uname: 'admin', // 用户名 
+						pwd: 'ap123456', // 密码 
+					}, // 实体对象 
+					venuesList: [],
+				},
+				methods: {
+					getVenuesList() {
+						sa.ajax('/TbVenues/getParentList', function(res) {
+							this.venuesList = res.data; // 数据
+						}.bind(this));
+					},
+					// 提交数据 
+					ok: function() {
+						// 表单校验 
+						let m = this.m;
+						sa.checkNull(m.venuesId, '请选择 [场所]');
+						sa.checkNull(m.name, '请输入 [名称]');
+						sa.checkNull(m.ip, '请输入 [IP地址]');
+						sa.checkNull(m.port, '请输入 [端口]');
+						sa.checkNull(m.uname, '请输入 [用户名]');
+						sa.checkNull(m.pwd, '请输入 [密码]');
+						// 开始增加或修改
+						if (this.id <= 0) { // 添加
+							sa.ajax('/HcCamera/add', m, function(res) {
+								sa.alert('增加成功', this.clean);
+							}.bind(this));
+						} else { // 修改
+							sa.ajax('/HcCamera/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() {
+					this.getVenuesList();
+					// 初始化数据 
+					if (this.id > 0) {
+						sa.ajax('/HcCamera/getById?id=' + this.id, function(res) {
+							this.m = res.data;
+							if (res.data == null) {
+								sa.alert('未能查找到 id=' + this.id + " 详细数据");
+							}
+						}.bind(this))
+					}
+				}
+			})
+		</script>
+	</body>
+</html>

+ 71 - 0
sa-view/hc-camera/hc-camera-info.html

@@ -0,0 +1,71 @@
+<!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.venuesId}}</sa-info>
+						<sa-info name="名称" br>{{m.name}}</sa-info>
+						<sa-info name="IP地址" br>{{m.ip}}</sa-info>
+						<sa-info name="设备唯一标识" br>{{m.userId}}</sa-info>
+						<sa-info name="端口" br>{{m.port}}</sa-info>
+						<sa-info name="用户名" br>{{m.uname}}</sa-info>
+						<sa-info name="密码" br>{{m.pwd}}</sa-info>
+						<sa-info name="创建时间" br>{{m.createTime}}</sa-info>
+						<sa-info name="创建人" br>{{m.createBy}}</sa-info>
+						<sa-info name="更新时间" br>{{m.updateTime}}</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('/HcCamera/getById?id=' + this.id, function(res) {
+						this.m = res.data;
+						if(res.data == null) {
+							sa.alert('未能查找到 id=' + this.id + " 详细数据");
+						}
+					}.bind(this))
+				}
+			})
+			
+		</script>
+	</body>
+</html>

+ 160 - 0
sa-view/hc-camera/hc-camera-list.html

@@ -0,0 +1,160 @@
+<!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="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('hc-camera-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 name="序号" type="index"></sa-td>
+					<sa-td name="所在场所" prop="venuesName" ></sa-td>
+					<sa-td name="名称" prop="name" ></sa-td>
+					<sa-td name="IP地址" prop="ip" ></sa-td>
+					<sa-td name="标识" prop="flag" ></sa-td>
+					<sa-td name="状态" prop="statusStr" ></sa-td>
+					<sa-td name="端口" prop="port" ></sa-td>
+					<sa-td name="用户名" prop="uname" ></sa-td>
+					<sa-td name="创建时间" prop="createTime" ></sa-td>
+					<sa-td name="创建人" prop="createBy" ></sa-td>
+					<sa-td name="更新时间" prop="updateTime" ></sa-td>
+					<el-table-column label="操作" fixed="right"  width="240px">
+						<template slot-scope="s">
+							<el-button class="c-btn" type="primary"  @click="openFn(s.row)">抬杆</el-button>
+							<el-button class="c-btn" type="success"  @click="get(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>
+			</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: { // 查询参数  
+						id: '',		// 主键 
+						venuesId: '',		// 所在场所 
+						name: '',		// 名称 
+						ip: '',		// IP地址 
+						userId: '',		// 设备唯一标识 
+						port: '',		// 端口 
+						uname: '',		// 用户名 
+						pwd: '',		// 密码 
+						createTime: '',		// 创建时间 
+						createBy: '',		// 创建人 
+						updateTime: '',		// 更新时间 
+						updateBy: '',		// 更新人 
+						pageNo: 1,		// 当前页 
+						pageSize: 10,	// 页大小 
+						sortType: 0		// 排序方式 
+					},
+					dataCount: 0,
+					dataList: [], // 数据集合 
+				},
+				methods: {
+					openFn(data){
+						let status=data.status;
+						if(status==0){
+							sa.error('已离线,无法抬杆');
+							return;
+						}
+						sa.confirm('是否确定远程抬杆?', function() {
+							sa.ajax('/HcCamera/open' ,data, function(res) {
+								sa.success('已抬杆')
+							}.bind(this))
+						}.bind(this));
+					},
+					// 刷新
+					f5: function() {
+						sa.ajax('/HcCamera/getList', sa.removeNull(this.p), function(res) {
+							this.dataList = res.data; // 数据
+							this.dataCount = res.dataCount; // 数据总数 
+							sa.f5TableHeight();		// 刷新表格高度 
+						}.bind(this));
+					},
+					// 查看
+					get: function(data) {
+						sa.showIframe('数据详情', 'hc-camera-info.html?id=' + data.id, '1050px', '90%');
+					},
+					// 查看 - 根据选中的
+					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('修改数据', 'hc-camera-add.html?id=' + data.id, '600px', '60%');
+					},
+					// 新增
+					add: function(data) {
+						sa.showIframe('新增数据', 'hc-camera-add.html?id=-1', '600px', '60%');
+					},
+					// 删除
+					del: function(data) {
+						sa.confirm('是否删除,此操作不可撤销', function() {
+							sa.ajax('/HcCamera/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('/HcCamera/deleteByIds', {ids: ids.join(',')}, function(res) {
+								sa.arrayDelete(this.dataList, selection);
+								sa.ok('删除成功');
+								sa.f5TableHeight();		// 刷新表格高度 
+							}.bind(this))
+						}.bind(this));
+					},
+				},
+				created: function() {
+					this.f5();
+					sa.onInputEnter();
+				}
+			})
+		</script>
+	</body>
+</html>

+ 205 - 0
sa-view/mini-user/mini-user-list.html

@@ -0,0 +1,205 @@
+<!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>
+					<div class="c-item" v-if="sa.isAdmin()">
+						<label class="c-label">备案组织:</label>
+						<el-select v-model="p.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="p.name"></sa-item>
+					<sa-item type="text" name="手机号" v-model="p.phone"></sa-item>
+					<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.name='';p.phone='';f5()">重置</el-button>
+				</el-form>
+
+				<!-- ------------- 数据列表 ------------- -->
+				<el-table class="data-table" ref="data-table" :data="dataList">
+					<sa-td type="index" name="序号"></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="deptName" not='-'></sa-td>
+					<sa-td type="text" name="审核单位" prop="departmentName" not='-' width="130"></sa-td>
+					<sa-td type="datetime" name="创建日期" prop="createTime" width="150px"></sa-td>
+					<sa-td type="datetime" name="最后登录" prop="lastLoginTime" width="150px" not='-'></sa-td>
+					<el-table-column label="操作" fixed="right" width="200px">
+						<template slot-scope="s">
+							<el-dropdown trigger="click" style="font-size: 0.85em;" v-if="sa.isAuth('mini-user-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="updateDept(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>
+							<span @click="del(s.row)">
+								<el-button v-if="sa.isAuth('mini-user-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>
+			<el-dialog title="修改组织" :modal="false" :visible.sync="dept.visible" width="400px">
+				<div class="c-item">
+					<label class="c-label"><span style="color: red;">*</span>组织:</label>
+					<el-select v-model="dept.deptId">
+						<el-option label="请选择" v-for="(item,index) in deptList" :key="item.id" :label="item.name"
+							:value="item.id"></el-option>
+					</el-select>
+				</div>
+				<span slot="footer" class="dialog-footer">
+					<el-button @click="dept.visible=false">取 消</el-button>
+					<el-button type="primary" @click="sureFn">确 定</el-button>
+				</span>
+			</el-dialog>
+		</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: '',
+						pageNo: 1,
+						pageSize: 10,
+					},
+					dept:{
+						visible:false,
+						deptId:''
+					},
+					deptList: [],
+					modal: {
+						visible: false,
+						form: {
+							id: '',
+							departmentId: ''
+						}
+					},
+					dataCount: 0,
+					dataList: [], // 数据集合
+					roleList: [], // 角色集合 
+				},
+				methods: {
+					updateDept(data) {
+						Object.assign(this.dept, {
+							visible: true,
+							deptId:data.deptId,
+							id:data.id
+						})
+					},
+					sureFn() {
+						let data = this.dept;
+						let deptId = data.deptId;
+						if (!deptId) {
+							sa.error('请选择组织');
+							return;
+						}
+						sa.ajax('/TbMiniUser/updateDept', data, function(res) {
+							this.dept.visible = false;
+							this.f5();
+						}.bind(this));
+					},
+					getDeptList() {
+						sa.ajax('/TbDept/getList', {
+							pageNo: 1,
+							pageSize: 100
+						}, function(resp) {
+							let list = resp.data;
+							
+							this.deptList = list;
+						}.bind(this))
+					},
+					// 刷新
+					f5: function(isPage) {
+						sa.ajax('/TbMiniUser/getList', this.p, function(res) {
+							this.dataList = res.data; // 数据
+							this.dataCount = res.dataCount;
+							sa.f5TableHeight(); // 刷新表格高度 
+						}.bind(this));
+					},
+					// 修改密码
+					updatePassword: function(data) {
+						layer.prompt({
+							title: '修改密码'
+						}, function(pass, index) {
+							layer.close(index);
+							if (pass.length < 4) {
+								return layer.msg('新密码长度请不要低于4位');
+							}
+							sa.ajax('/TbMiniUser/updatePassword', {
+								id: data.id,
+								password: pass
+							}, function(res) {
+								layer.msg('修改成功');
+							})
+						});
+					},
+					// 删除 
+					del: function(data) {
+						sa.confirm('是否删除,此操作不可撤销', function() {
+							sa.ajax('/TbMiniUser/delete', {
+								id: data.id
+							}, function(res) {
+								sa.arrayDelete(app.dataList, data);
+								sa.ok('删除成功');
+								sa.f5TableHeight(); // 刷新表格高度 
+							})
+						});
+					},
+				},
+				created: function() {
+					this.f5();
+					this.getDeptList();
+					sa.onInputEnter(); // 监听回车执行查询 
+				}
+			})
+		</script>
+	</body>
+</html>

+ 1 - 3
sa-view/sys-dict/sys-dict-add.html

@@ -26,9 +26,7 @@
                     <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="父ID" v-model="m.pid" v-if="sa.p('pid', 'nof') == 'nof'" br></sa-item>
-						<sa-item type="text" name="数据编码" v-model="m.dataCode" br></sa-item>
-						<sa-item type="text" name="数据名称/值" v-model="m.dataValue" br></sa-item>
+						<sa-item type="text" name="类型编码" v-model="m.sysCode" br></sa-item>
 						<sa-item type="text" name="数据描述" v-model="m.dataDesc" br></sa-item>
 						<sa-item name="" class="s-ok" br>
 							<el-button type="primary" icon="el-icon-plus" @click="ok()">保存</el-button>

+ 113 - 0
sa-view/sys-dict/sys-dict-addChild.html

@@ -0,0 +1,113 @@
+<!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="父ID" v-model="m.pid" v-if="sa.p('pid', 'nof') == 'nof'" br></sa-item>
+						<sa-item type="text" name="数据编码" v-model="m.dataCode" br></sa-item>
+						<sa-item type="text" name="数据名称/值" v-model="m.dataValue" br></sa-item>
+						<sa-item type="text" name="数据描述" v-model="m.dataDesc" br></sa-item>
+						<sa-item name="" class="s-ok" br>
+							<el-button type="primary" icon="el-icon-plus" @click="ok()">保存</el-button>
+						</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: '',		// id 
+							pid: sa.p('pid', '-1'),		//  父ID  
+							dataCode: '',		//  数据编码  
+							dataValue: '',		//  数据名称/值  
+							dataDesc: '',		// 数据描述 
+						}
+					},
+					// 提交数据 
+					ok: function(){
+						// 表单校验 
+						let m = this.m;
+						sa.checkNull(m.dataCode, '请输入 [数据编码]');
+						sa.checkNull(m.dataValue, '请输入 [数据名称/值]');
+						sa.checkNull(m.dataDesc, '请输入 [数据描述]');
+				
+						// 开始增加或修改
+						if(this.id <= 0) {	// 添加
+							sa.ajax('/SysDict/add', m, function(res){
+								sa.alert('增加成功', this.clean); 
+							}.bind(this));
+						} else {	// 修改
+							sa.ajax('/SysDict/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('/SysDict/getById?id=' + this.id, function(res) {
+							this.m = res.data;
+							if(res.data == null) {
+								sa.alert('未能查找到 id=' + this.id + " 详细数据");
+							}
+						}.bind(this))
+					}
+				}
+			})
+			
+		</script>
+	</body>
+</html>

+ 5 - 7
sa-view/sys-dict/sys-dict-list.html

@@ -22,15 +22,13 @@
 				<el-form ref="form" :model='p' @submit.native.prevent>
 					<sa-item type="text" name="数据编码" v-model="p.dataCode"></sa-item>
 					<el-button type="primary" icon="el-icon-search" @click="p.pageNo = 1; f5()">查询</el-button>
-				</el-form>
-				<div class="fast-btn">
 					<el-button v-if="sa.isAuth('sys-dict-add')" type="primary" icon="el-icon-plus" @click="add">新增</el-button>
 					<el-button type="info"  icon="el-icon-refresh"  @click="f5">重置</el-button>
-					<slot></slot>
-				</div>
+				</el-form>
 				<!-- ------------- 数据列表 ------------- -->
 				<el-table class="data-table" ref="data-table" :data="dataList"  row-key="id" border @expand-change="sa.f5TableHeight()">
 					<sa-td name="序号" type="index"></sa-td>
+					<sa-td name="类型编码" prop="sysCode" ></sa-td>
 					<sa-td name="数据编码" prop="dataCode" ></sa-td>
 					<sa-td name="数据名称/值" prop="dataValue" ></sa-td>
 					<sa-td name="数据描述" prop="dataDesc" ></sa-td>
@@ -90,15 +88,15 @@
 					},
 					// 修改
 					update: function(data) {
-						sa.showIframe('修改数据', 'sys-dict-add.html?id=' + data.id, '1000px', '90%');
+						sa.showIframe('修改数据', 'sys-dict-add.html?id=' + data.id, '600px', '70%');
 					},
 					// 新增
 					add: function(data) {
-						sa.showIframe('新增数据', 'sys-dict-add.html?id=-1', '600px', '90%');
+						sa.showIframe('新增数据', 'sys-dict-add.html?id=0', '600px', '50%');
 					},
 					// 新增子级
 					addChildren: function(data) {
-						sa.showIframe('新增数据', 'sys-dict-add.html?id=-1&pid=' + data.id, '600px', '60%');
+						sa.showIframe('新增数据', 'sys-dict-addChild.html?id=-1&pid=' + data.id, '600px', '60%');
 					},
 					// 删除
 					del: function(data) {

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

@@ -106,7 +106,7 @@
 							id: '', // 主键 
 							name: '', // 姓名 
 							phone: '', // 联系号码 
-							deptId: '', // 部门ID
+							deptId: '', // 单位ID
 							deptName: '',
 							position: '', // 职能 
 							venuesId: '', // 场所ID 

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

@@ -83,7 +83,7 @@
 					createModel: function() {
 						return {
 							id: '', // 主键 
-							deptId: '', // 部门ID 
+							deptId: '', // 单位ID 
 							carNo: '', // 车牌号 
 							reason: '', // 禁行原因 
 							startTime: '', // 禁行开始 
@@ -98,7 +98,7 @@
 					ok: function() {
 						// 表单校验 
 						let m = this.m;
-						sa.checkNull(m.deptId, '请选择部门');
+						sa.checkNull(m.deptId, '请选择单位');
 						sa.checkNull(m.startTime, '请输入 [禁行开始]');
 						sa.checkNull(m.endTime, '请输入 [禁行结束]');
 						m = sa.removeNull(m);

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

@@ -59,7 +59,7 @@
 				data: {
 					p: { // 查询参数  
 						id: '',		// 主键 
-						deptId: '',		// 部门ID 
+						deptId: '',		// 单位ID 
 						carNo: '',		// 车牌号 
 						reason: '',		// 禁行原因 
 						startTime: '',		// 禁行开始 

+ 13 - 17
sa-view/tb-car-filing/tb-car-filing-add.html

@@ -43,21 +43,12 @@
 											: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>
+								<sa-item type="num" name="联系电话" v-model="m.driverContact" br :need="need"></sa-item>
+								<sa-item type="text" name="商铺号" v-model="m.shopCode" br :need="need" v-if="m.deptName.indexOf('商铺')!==-1"></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="need"></sa-item>
 								<sa-item type="text" name="联系人身份证" v-model="m.driverIdCard" br :need="need"></sa-item>
 								<sa-item type="img" name="人脸" v-model="m.driverPhoto" br :need="need"></sa-item>
 								<sa-item type="textarea" name="备注" v-model="m.remark" br></sa-item>
@@ -88,7 +79,8 @@
 					id: sa.p('id', 0), // 获取超链接中的id参数(0=添加,非0=修改)
 					m: {
 						id: '', //
-						deptId: '', // 部门ID
+						deptId: '', // 单位ID
+						deptName:'',
 						venuesId: '',
 						carNo: '', // 车牌号
 						type: 1, // 类型(1=临时,2=内部)
@@ -107,8 +99,9 @@
 					deptChange(v) {
 						let deptList = this.deptList;
 						let dept = deptList.filter(obj => obj.id == v)[0];
-						let passType=dept.passType;
-						this.need=passType==1;
+						let passType = dept.passType;
+						this.need = passType == 1;
+						this.m.deptName=dept.name;
 					},
 					getVenuesList() {
 						sa.ajax('/TbVenues/getParentList', function(res) {
@@ -120,12 +113,11 @@
 						// 表单校验
 						let m = this.m;
 						sa.checkNull(m.deptId, '请选择备案组织');
-						sa.checkNull(m.venuesId, '请选择备案场所');
 						let carNo = m.carNo;
 						sa.checkNull(carNo, '请输入 [车牌号]');
 						sa.checkNull(m.driverName, '请输入 [联系人]');
-						let need=this.need;
-						if(need){
+						let need = this.need;
+						if (need) {
 							let contact = m.driverContact;
 							if (!sa.isPhone(contact)) {
 								sa.error('请输入正确的号码');
@@ -141,6 +133,10 @@
 								sa.error('请上传司机人脸');
 								return false;
 							}
+							if (!m.shopCode&&m.deptName.indexOf('商铺')!==-1) {
+								sa.error('请填写商铺号');
+								return false;
+							}
 						}
 						m = sa.removeNull(m);
 						// 开始增加或修改

+ 3 - 2
sa-view/tb-car-filing/tb-car-filing-info.html

@@ -35,9 +35,10 @@
 								<sa-info name="联系人身份证" br>{{m.driverIdCard}}</sa-info>
 							</el-col>
 							<el-col :span="12">
-								<sa-info type="enum" name="类型" :value="m.type" :jv="{1: '临时', 2: '内部'}" br></sa-info>
+								<sa-info name="商铺号" br v-if="m.shopCode">{{m.shopCode}}</sa-info>
 								<sa-info name="创建时间" br>{{m.createTime}}</sa-info>
-								<sa-info type="enum" name="审核状态" :value="m.judgeState" :jv="{0: '未审核', 1: '通过',2:'不通过'}" br></sa-info>
+								<sa-info type="enum" name="审核状态" :value="m.judgeState" :jv="{0: '未审核', 1: '通过',2:'不通过'}"
+									br></sa-info>
 								<sa-info name="审核时间" br>{{m.judgeTime}}</sa-info>
 								<sa-info name="审核人" br>{{m.judgeBy}}</sa-info>
 							</el-col>

+ 19 - 10
sa-view/tb-car-filing/tb-car-filing-judge.html

@@ -32,12 +32,14 @@
 								<sa-info name="联系人" br>{{m.driverName}}</sa-info>
 								<sa-info name="联系电话" br>{{m.driverContact}}</sa-info>
 								<sa-info name="联系人身份证" br>{{m.driverIdCard}}</sa-info>
+								<sa-item type="datetime" name="备案过期" v-model="m.endTime" br></sa-item>
 							</el-col>
 							<el-col :span="12">
 								<sa-info name="车牌号" br>{{m.carNo}}</sa-info>
-								<sa-info type="enum" name="类型" :value="m.type" :jv="{1: '临时', 2: '内部'}" br></sa-info>
+								<sa-info name="商铺号" br v-if="m.shopCode">{{m.shopCode}}</sa-info>
 								<sa-info name="创建时间" br>{{m.createTime}}</sa-info>
 								<sa-info name="备注" br>{{m.remark}}</sa-info>
+								<sa-item name="审核意见" type="textarea" v-model="m.judgeContent" br></sa-item>
 							</el-col>
 						</el-row>
 					</el-form>
@@ -52,21 +54,28 @@
 		<script>
 			var app = new Vue({
 				components: {
-					"sa-info": httpVueLoader('../../sa-frame/com/sa-info.vue')
+					"sa-info": httpVueLoader('../../sa-frame/com/sa-info.vue'),
+					"sa-item": httpVueLoader('../../sa-frame/com/sa-item.vue')
 				},
 				el: '.vue-box',
 				data: {
 					id: sa.p('id', 0), // 获取数据ID 
-					m: null
+					m: {
+						endTime: '',
+						judgeContent: ''
+					}
 				},
 				methods: {
-					judge(state){
-						sa.ajax('/TbCarFiling/judge',{id:this.id,judgeState:state} ,function(res) {
-						sa.alert('操作成功');
-						setTimeout(() => {
-							parent.app.f5(); // 刷新父页面列表
-							sa.closeCurrIframe(); // 关闭本页 
-						}, 2000)
+					judge(state) {
+						sa.ajax('/TbCarFiling/judge', {
+							id: this.id,
+							judgeState: state
+						}, function(res) {
+							sa.alert('操作成功');
+							setTimeout(() => {
+								parent.app.f5(); // 刷新父页面列表
+								sa.closeCurrIframe(); // 关闭本页 
+							}, 2000)
 						}.bind(this))
 					}
 				},

+ 45 - 10
sa-view/tb-car-filing/tb-car-filing-list.html

@@ -21,33 +21,48 @@
 				<!-- ------------- 检索参数 ------------- -->
 				<div class="c-title">检索参数</div>
 				<el-form ref="form" :model='p' @submit.native.prevent>
+					<div class="c-item" v-if="sa.isAdmin()">
+						<label class="c-label">备案组织:</label>
+						<el-select v-model="p.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="p.carNo"></sa-item>
-					<sa-item type="enum" name="类型" v-model="p.type" :jv="{1: '临时', 2: '内部'}" jtype="2" def="不限">
-					</sa-item>
 					<sa-item type="text" name="联系人" v-model="p.driverName"></sa-item>
 					<sa-item type="text" name="联系电话" v-model="p.driverContact"></sa-item>
-					<sa-item type="enum" name="审核状态" v-model="p.judgeState" :jv="{0: '未审核', 1: '通过',2:'不通过'}" jtype="4"
-						def="全部">
-					</sa-item>
+					<div class="c-item">
+						<label class="c-label">审核状态:</label>
+						<el-select v-model="p.judgeState">
+							<el-option label="全部" value=""></el-option>
+							<el-option label="未审核" :value="0"></el-option>
+							<el-option label="通过" :value="1"></el-option>
+							<el-option label="不通过" :value="2"></el-option>
+						</el-select>
+					</div>
 					<div>
-						<el-button type="primary" icon="el-icon-search" @click="p.pageNo = 1; f5()">查询</el-button>
+						<el-button type="primary" icon="el-icon-search" @click="f5()">查询</el-button>
 						<el-button type="info" icon="el-icon-refresh"
-							@click="p.carNo='',p.type='',p.driverName='',p.driverContact='',p.judgeState='',f5()">重置
+							@click="p.pageNo = 1;p.deptId='';p.carNo='';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>
+						<el-button type="primary" icon="el-icon-upload" v-if="sa.isAuth('tb-car-filing-export')"
+							@click='exportFn'>
+							导出</el-button>
 					</div>
 				</el-form>
 
 				<!-- ------------- 数据列表 ------------- -->
 				<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="departmentName" width="130"></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>
+					<sa-td name="商铺" prop="shopCode"></sa-td>
 					<sa-td name="联系电话" prop="driverContact" width="120"></sa-td>
 					<sa-td name="审核状态" prop="judgeState" type="enum" :jv="{0: '未审核', 1: '通过', 2: '不通过'}"></sa-td>
 					<sa-td name="审核时间" prop="judgeTime" not="-" width="140"></sa-td>
@@ -88,16 +103,33 @@
 						driverName: '', // 联系人 
 						driverContact: '', // 联系电话 
 						driverIdCard: '', // 联系人身份证 
-						visit: '', // 状态 
+						deptId: '', // 状态 
 						judgeState: '', // 备注 
 						pageNo: 1, // 当前页 
 						pageSize: 10, // 页大小 
 						sortType: 0 // 排序方式 
 					},
 					dataCount: 0,
+					deptList: [],
 					dataList: [], // 数据集合 
 				},
 				methods: {
+					exportFn() {
+						sa.confirm('是否导出符合筛选条件的车辆备案信息?', function() {
+							sa.ajax('/TbCarFiling/export', sa.removeNull(this.p), function(res) {
+								window.location.href = res.data;
+							}.bind(this))
+						}.bind(this));
+					},
+					getDeptList() {
+						sa.ajax('/TbDept/getList', {
+							pageNo: 1,
+							pageSize: 100
+						}, function(resp) {
+							let list = resp.data;
+							this.deptList = list;
+						}.bind(this))
+					},
 					judgeFn(data) {
 						sa.showIframe('审核', 'tb-car-filing-judge.html?id=' + data.id, '700px', '70%');
 					},
@@ -162,6 +194,9 @@
 				created: function() {
 					this.f5();
 					sa.onInputEnter();
+					if (sa.isAdmin()) {
+						this.getDeptList();
+					}
 				}
 			})
 		</script>

+ 22 - 6
sa-view/tb-car-visit-record/tb-car-visit-record-add.html

@@ -34,6 +34,13 @@
 					<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" v-if="sa.isAdmin()">
+							<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.channelId" placeholder="请选择">
@@ -46,7 +53,7 @@
 						</div>
 						<sa-item type="text" name="车牌" v-model="m.carNo" br need></sa-item>
 						<sa-item type="text" name="联系人" v-model="m.driverName" br need></sa-item>
-						<sa-item type="text" name="联系电话" v-model="m.driverContact" br need></sa-item>
+						<sa-item type="text" name="联系电话" v-model="m.driverContact" br></sa-item>
 						<sa-item type="enum" name="出/入" v-model="m.direction" :jv="{1: '入场', 2: '离场'}" jtype="1" br>
 						</sa-item>
 						<sa-item type="datetime" name="时间" v-model="m.visitTime" br need></sa-item>
@@ -67,10 +74,20 @@
 				el: '.vue-box',
 				data: {
 					areaList: [],
+					deptList: [],
 					id: sa.p('id', 0), // 获取超链接中的id参数(0=添加,非0=修改) 
 					m: null, // 实体对象 
 				},
 				methods: {
+					getDeptList() {
+						sa.ajax('/TbDept/getList', {
+							pageNo: 1,
+							pageSize: 100
+						}, function(resp) {
+							let list = resp.data;
+							this.deptList = list;
+						}.bind(this))
+					},
 					getVenuesList() {
 						sa.ajax('/TbVenues/getTree', function(res) {
 							this.areaList = res.data; // 数据
@@ -96,15 +113,11 @@
 					ok: function() {
 						// 表单校验 
 						let m = this.m;
+						sa.checkNull(m.deptId, '请选择 [所属组织]');
 						sa.checkNull(m.channelId, '请选择 [通道]');
 						sa.checkNull(m.carNo, '请输入 [车牌]');
 						sa.checkNull(m.visitTime, '请输入 [通过时间]');
 						sa.checkNull(m.driverName, '请输入 [联系人]');
-						let driverContact=m.driverContact;
-						if(!sa.isPhone(driverContact)){
-							sa.error('请输入正确的联系号码');
-							return false;
-						}
 						m = sa.removeNull(m);
 						// 开始增加或修改
 						if (this.id <= 0) { // 添加
@@ -128,6 +141,9 @@
 					}
 				},
 				mounted: function() {
+					if (sa.isAdmin()) {
+						this.getDeptList();
+					}
 					this.getVenuesList();
 					// 初始化数据 
 					if (this.id <= 0) {

+ 3 - 3
sa-view/tb-car-visit-record/tb-car-visit-record-handler.html

@@ -31,7 +31,7 @@
 				<!-- ------------- 数据列表 ------------- -->
 				<el-table class="data-table" ref="data-table" :data="dataList"  row-key="id" border @expand-change="sa.f5TableHeight()">
 					<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="createTime" ></sa-td>
 					<sa-td name="更新时间" prop="updateTime" ></sa-td>
@@ -58,8 +58,8 @@
 				data: {
 					p: { // 查询参数  
 						id: '',		//  
-						deptId: '',		// 部门ID 
-						deptName: '',		// 部门 
+						deptId: '',		// 单位ID 
+						deptName: '',		// 单位 
 						pId: '',		// 父ID 
 						name: '',		// 名称 
 						createTime: '',		// 创建时间 

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

@@ -26,7 +26,7 @@
 						<el-row>
 							<el-col :span="12">
 								<sa-info name="车牌" br>{{m.carNo}}</sa-info>
-								<sa-info name="部门" br>{{m.deptName}}</sa-info>
+								<sa-info name="单位" br>{{m.deptName}}</sa-info>
 								<sa-info name="联系人" br>{{m.driverName}}</sa-info>
 								<sa-info name="联系电话" br>{{m.driverContact}}</sa-info>
 							</el-col>

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

@@ -21,30 +21,42 @@
 				<!-- ------------- 检索参数 ------------- -->
 				<div class="c-title">检索参数</div>
 				<el-form ref="form" :model='p' @submit.native.prevent>
+					<div class="c-item" v-if="sa.isAdmin()">
+						<label class="c-label">备案组织:</label>
+						<el-select v-model="p.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="p.carNo"></sa-item>
 					<sa-item type="text" name="联系人" v-model="p.driverName"></sa-item>
 					<sa-item type="text" name="联系电话" v-model="p.driverContact"></sa-item>
 					<sa-item type="enum" name="方式" v-model="p.recordType" :jv="{1: '手动', 2: '自动'}" jtype="2" def="不限">
 					</sa-item>
-					<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.driverName='';p.driverContact='';p.recordType='';f5()">
-						重置</el-button>
-					<el-button type="primary" icon="el-icon-plus" @click="add"
-						v-if="sa.isAuth('tb-car-visit-record-add')">新增</el-button>
-					<el-button type="primary" v-if="sa.isAuth('tb-car-visit-record-export')" icon="el-icon-s-unfold"
-						@click="exportFn">导出</el-button>
+					<sa-item type="datetime" name="开始时间" v-model="p.startTime"></sa-item>
+					<sa-item type="datetime" name="结束时间" v-model="p.endTime"></sa-item>
+					<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.driverName='';p.driverContact='';p.recordType='';p.startTime='';p.endTime='';f5()">
+							重置</el-button>
+						<el-button type="primary" icon="el-icon-plus" @click="add"
+							v-if="sa.isAuth('tb-car-visit-record-add')">新增</el-button>
+						<el-button type="primary" v-if="sa.isAuth('tb-car-visit-record-export')" icon="el-icon-s-unfold"
+							@click="exportFn">导出</el-button>
+					</div>
 				</el-form>
 				<!-- ------------- 快捷按钮 ------------- -->
 				<!-- ------------- 数据列表 ------------- -->
 				<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="channel"></sa-td>
+					<sa-td name="场所" prop="venuesName" width="140"></sa-td>
+					<sa-td name="通道" prop="channel" width="140"></sa-td>
 					<sa-td name="车牌" prop="carNo"></sa-td>
 					<sa-td name="联系人" prop="driverName"></sa-td>
 					<sa-td name="联系电话" prop="driverContact"></sa-td>
-					<sa-td name="时间" prop="visitTime"></sa-td>
+					<sa-td name="时间" prop="visitTime" width="140"></sa-td>
 					<sa-td name="方向" prop="direction" type="enum" :jv="{1: '入场', 2: '离场'}"></sa-td>
 					<sa-td name="是否放行" prop="allowPass" type="enum" :jv="{1: '放行', 0: '禁止'}"></sa-td>
 					<sa-td name="图片" prop="image" type="img"></sa-td>
@@ -84,14 +96,26 @@
 						driverContact: '', // 联系电话 
 						driverIdCard: '', // 联系人身份证 
 						recordType: '', // 方式(1=手动,2=自动) 
+						startTime:'',
+						endTime:'',
 						pageNo: 1, // 当前页 
 						pageSize: 10, // 页大小 
 						sortType: 0 // 排序方式 
 					},
 					dataCount: 0,
+					deptList:[],
 					dataList: [], // 数据集合 
 				},
 				methods: {
+					getDeptList() {
+						sa.ajax('/TbDept/getList', {
+							pageNo: 1,
+							pageSize: 100
+						}, function(resp) {
+							let list = resp.data;
+							this.deptList = list;
+						}.bind(this))
+					},
 					exportFn() {
 						sa.confirm('是否导出符合条件的记录?', function() {
 							sa.ajax('/TbCarVisitRecord/export', sa.removeNull(this.p), function(res) {
@@ -160,6 +184,9 @@
 				created: function() {
 					this.f5();
 					sa.onInputEnter();
+					if (sa.isAdmin()) {
+						this.getDeptList();
+					}
 				}
 			})
 		</script>

+ 3 - 3
sa-view/tb-command-log/tb-command-log-add.html

@@ -26,7 +26,7 @@
                     <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="部门ID" v-model="m.deptId" br></sa-item>
+						<sa-item type="text" name="单位ID" v-model="m.deptId" br></sa-item>
 						<sa-item type="text" name="命令" v-model="m.command" br></sa-item>
 						<sa-item type="text" name="设备SN" v-model="m.sn" br></sa-item>
 						<sa-item type="text" name="设备名" v-model="m.terminalName" br></sa-item>
@@ -64,7 +64,7 @@
 					createModel: function() {
 						return {
 							id: '',		// 主键 
-							deptId: '',		// 部门ID 
+							deptId: '',		// 单位ID 
 							command: '',		// 命令 
 							sn: '',		// 设备SN 
 							terminalName: '',		// 设备名 
@@ -81,7 +81,7 @@
 						// 表单校验 
 						let m = this.m;
 						// sa.checkNull(m.id, '请输入 [主键]');
-						sa.checkNull(m.deptId, '请输入 [部门ID]');
+						sa.checkNull(m.deptId, '请输入 [单位ID]');
 						sa.checkNull(m.command, '请输入 [命令]');
 						sa.checkNull(m.sn, '请输入 [设备SN]');
 						sa.checkNull(m.terminalName, '请输入 [设备名]');

+ 1 - 1
sa-view/tb-command-log/tb-command-log-list.html

@@ -80,7 +80,7 @@
 					commandContent:'',
 					p: { // 查询参数  
 						id: '', // 主键 
-						deptId: '', // 部门ID 
+						deptId: '', // 单位ID 
 						command: '', // 命令 
 						sn: '', // 设备SN 
 						terminalName: '', // 设备名 

+ 1 - 11
sa-view/tb-department/tb-department-add.html

@@ -33,9 +33,7 @@
 					<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>
+						<sa-item type="text" name="单位名称" v-model="m.name" br need></sa-item>
 					</el-form>
 				</div>
 			</div>
@@ -70,14 +68,6 @@
 						// 表单校验 
 						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) {

+ 5 - 9
sa-view/tb-department/tb-department-list.html

@@ -22,8 +22,6 @@
 				<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>
@@ -32,10 +30,8 @@
 				<!-- ------------- 数据列表 ------------- -->
 				<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="锁定的部门为系统维持正常运行的重要部门,不可删除">
+					<sa-td name="单位名称" prop="name"></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>
@@ -102,16 +98,16 @@
 					},
 					// 修改
 					update: function(data) {
-						sa.showIframe('修改数据', 'tb-department-add.html?id=' + data.id, '500px', '60%');
+						sa.showIframe('修改数据', 'tb-department-add.html?id=' + data.id, '450px', '40%');
 					},
 					// 新增
 					add: function(data) {
-						sa.showIframe('新增数据', 'tb-department-add.html?id=-1', '500px', '60%');
+						sa.showIframe('新增数据', 'tb-department-add.html?id=-1', '450px', '40%');
 					},
 					// 删除
 					del: function(data) {
 						if(data.status == 1){
-							return layer.alert('锁定的部门为系统维持正常运行的重要部门,不可删除');
+							return layer.alert('锁定的单位为系统维持正常运行的重要单位,不可删除');
 						};
 						sa.confirm('是否删除,此操作不可撤销', function() {
 							sa.ajax('/TbDepartment/delete?id=' + data.id, function(res) {

+ 36 - 18
sa-view/tb-dept/tb-dept-add.html

@@ -15,6 +15,9 @@
 		<script src="../../static/sa.js"></script>
 		<style type="text/css">
 			.c-panel .el-form .c-label{width: 7em !important;}
+			.item-num .el-input__inner {
+				width: 130px;
+			}
 			.c-panel .el-form .el-input, .c-panel .el-form .el-textarea__inner{width: 250px;}
 		</style>
 	</head>
@@ -27,12 +30,24 @@
 					<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.chargePerson" br need></sa-item>
-						<sa-item type="text" name="联系号码" v-model="m.contact" 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-option v-for="item in venuesList" :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.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="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.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>
 						<sa-item name="" class="s-ok" br>
 							<el-button type="primary" icon="el-icon-plus" @click="ok()">保存</el-button>
@@ -54,26 +69,33 @@
 				},
 				el: '.vue-box',
 				data: {
+					venuesList:[],
+					departmentList:[],
 					id: sa.p('id', 0),		// 获取超链接中的id参数(0=添加,非0=修改) 
 					m: null,		// 实体对象 
 				},
 				methods: {
+					getDepartmenttList() {
+						sa.ajax('/TbDepartment/getList', {
+							pageNo: 1,
+							pageSize: 100
+						}, function(resp) {
+							this.departmentList = resp.data;
+						}.bind(this))
+					},
+					getVenuesList() {
+						sa.ajax('/TbVenues/getParentList', function(res) {
+							this.venuesList = res.data; // 数据
+						}.bind(this));
+					},
 					// 创建一个 默认Model 
 					createModel: function() {
 						return {
 							id: '',		// 主键 
 							name: '',		// 名称 
-							peopleNum: '',		// 人数 
-							desc: '',		// 描述 
-							chargePerson: '',		// 负责人 
 							passType:1,
 							adminType:0,
 							needJudge:1,
-							contact: '',		// 联系号码 
-							createTime: '',		// 创建时间 
-							createBy: '',		// 创建人 
-							updateTime: '',		// 更新时间 
-							updateBy: '',		// 更新人 
 							remark: '',		// 备注 
 						}
 					},
@@ -83,12 +105,6 @@
 						let m = this.m;
 						let contact=m.contact;
 						sa.checkNull(m.name, '请输入 [名称]');
-						sa.checkNull(m.chargePerson, '请输入 [负责人]');
-						sa.checkNull(contact, '请输入 [联系号码]');
-						if(!sa.isPhone(contact)){
-							sa.error('请输入正确的联系号码');
-							return;
-						}
 						// 开始增加或修改
 						if(this.id <= 0) {	// 添加
 							sa.ajax('/TbDept/add', m, function(res){
@@ -111,6 +127,8 @@
 					}
 				},
 				mounted: function(){
+					this.getVenuesList();
+					this.getDepartmenttList();
 					// 初始化数据 
 					if(this.id <= 0) {	
 						this.m = this.createModel();

+ 47 - 40
sa-view/tb-dept/tb-dept-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">
@@ -20,72 +21,75 @@
 				<!-- ------------- 检索参数 ------------- -->
 				<div class="c-title">检索参数</div>
 				<el-form ref="form" :model='p' @submit.native.prevent>
+					<div class="c-item">
+						<label class="c-label">场所:</label>
+						<el-select v-model="p.venuesId">
+							<el-option label="请选择" v-for="(item,index) in venuesList" :key="item.id"
+								:label="item.name" :value="item.id"></el-option>
+						</el-select>
+					</div>
 					<sa-item type="text" name="名称" v-model="p.name"></sa-item>
-					<sa-item type="text" name="负责人" v-model="p.chargePerson"></sa-item>
-					<sa-item type="text" name="联系号码" v-model="p.contact"></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-dept-add')">新增
+					</el-button>
+					<el-button type="info" icon="el-icon-refresh" @click="p.name='';p.venuesId='';f5()">重置</el-button>
 					<br />
 				</el-form>
-				<!-- ------------- 快捷按钮 ------------- -->
-				<div class="fast-btn">
-					<el-button type="primary" icon="el-icon-plus" @click="add" v-if="sa.isAuth('tb-dept-add')">新增</el-button>
-					<el-button type="info"  icon="el-icon-refresh"  @click="f5()">重置</el-button>
-				</div>
+
 				<!-- ------------- 数据列表 ------------- -->
-				<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="adminType" type="enum" :jv="{0: '临时', 1: '普通组织', 2: '管理组织'}"></sa-td> -->
+					<sa-td name="组织名称" prop="name"></sa-td>
+					<sa-td name="备案场所" prop="venuesName"></sa-td>
+					<sa-td name="审核单位" prop="departmentName"></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>
-					<sa-td name="负责人" prop="chargePerson" ></sa-td>
-					<sa-td name="联系号码" prop="contact" ></sa-td>
-					<sa-td name="创建时间" prop="createTime" ></sa-td>
-					<el-table-column label="操作" fixed="right"  width="240px">
+					<sa-td name="创建时间" prop="createTime"></sa-td>
+					<el-table-column label="操作" fixed="right" width="240px">
 						<template slot-scope="s">
-							<el-button v-if="sa.isAuth('tb-dept-edit')" class="c-btn" type="primary" icon="el-icon-edit" @click="update(s.row)">修改</el-button>
-							<el-button v-if="sa.isAuth('tb-dept-del')" class="c-btn" type="danger" icon="el-icon-delete" @click="del(s.row)">删除</el-button>
+							<el-button v-if="sa.isAuth('tb-dept-edit')" class="c-btn" type="primary" icon="el-icon-edit"
+								@click="update(s.row)">修改</el-button>
+							<el-button v-if="sa.isAuth('tb-dept-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>
+				<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: { // 查询参数  
-						name: '',		// 名称 
-						peopleNum: '',		// 人数 
-						desc: '',		// 描述 
-						chargePerson: '',		// 负责人 
-						contact: '',		// 联系号码 
-						createTime: '',		// 创建时间 
-						createBy: '',		// 创建人 
-						updateTime: '',		// 更新时间 
-						updateBy: '',		// 更新人 
-						remark: '',		// 备注 
-						pageNo: 1,		// 当前页 
-						pageSize: 10,	// 页大小 
-						sortType: 0		// 排序方式 
+						name: '', // 名称 
+						venuesId: '', // 备注 
+						pageNo: 1, // 当前页 
+						pageSize: 20, // 页大小 
+						sortType: 0 // 排序方式 
 					},
 					dataCount: 0,
+					venuesList:[],
 					dataList: [], // 数据集合 
 				},
 				methods: {
+					getVenuesList() {
+						sa.ajax('/TbVenues/getParentList', function(res) {
+							this.venuesList=res.data;
+						}.bind(this));
+					},
 					// 刷新
 					f5: function() {
 						sa.ajax('/TbDept/getList', sa.removeNull(this.p), function(res) {
 							this.dataList = res.data; // 数据
 							this.dataCount = res.dataCount; // 数据总数 
-							sa.f5TableHeight();		// 刷新表格高度 
+							sa.f5TableHeight(); // 刷新表格高度 
 						}.bind(this));
 					},
 					// 查看
@@ -95,7 +99,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]);
@@ -114,7 +118,7 @@
 							sa.ajax('/TbDept/delete?id=' + data.id, function(res) {
 								sa.arrayDelete(this.dataList, data);
 								sa.ok('删除成功');
-								sa.f5TableHeight();		// 刷新表格高度 
+								sa.f5TableHeight(); // 刷新表格高度 
 							}.bind(this))
 						}.bind(this));
 					},
@@ -123,15 +127,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('/TbDept/deleteByIds', {ids: ids.join(',')}, function(res) {
+							sa.ajax('/TbDept/deleteByIds', {
+								ids: ids.join(',')
+							}, function(res) {
 								sa.arrayDelete(this.dataList, selection);
 								sa.ok('删除成功');
-								sa.f5TableHeight();		// 刷新表格高度 
+								sa.f5TableHeight(); // 刷新表格高度 
 							}.bind(this))
 						}.bind(this));
 					},
@@ -139,6 +145,7 @@
 				created: function() {
 					this.f5();
 					sa.onInputEnter();
+					this.getVenuesList();
 				}
 			})
 		</script>

+ 3 - 3
sa-view/tb-gate-command-log/tb-gate-command-log-add.html

@@ -26,7 +26,7 @@
                     <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="部门ID" v-model="m.deptId" br></sa-item>
+						<sa-item type="text" name="单位ID" v-model="m.deptId" br></sa-item>
 						<sa-item type="text" name="命令" v-model="m.command" br></sa-item>
 						<sa-item type="text" name="设备SN" v-model="m.sn" br></sa-item>
 						<sa-item type="text" name="设备名" v-model="m.terminalName" br></sa-item>
@@ -62,7 +62,7 @@
 					createModel: function() {
 						return {
 							id: '',		// 主键 
-							deptId: '',		// 部门ID 
+							deptId: '',		// 单位ID 
 							command: '',		// 命令 
 							sn: '',		// 设备SN 
 							terminalName: '',		// 设备名 
@@ -77,7 +77,7 @@
 						// 表单校验 
 						let m = this.m;
 						// sa.checkNull(m.id, '请输入 [主键]');
-						sa.checkNull(m.deptId, '请输入 [部门ID]');
+						sa.checkNull(m.deptId, '请输入 [单位ID]');
 						sa.checkNull(m.command, '请输入 [命令]');
 						sa.checkNull(m.sn, '请输入 [设备SN]');
 						sa.checkNull(m.terminalName, '请输入 [设备名]');

+ 1 - 1
sa-view/tb-gate-command-log/tb-gate-command-log-info.html

@@ -24,7 +24,7 @@
 				<div class="c-panel">
 					<el-form v-if="m">
 						<sa-info type="num" name="主键" :value="m.id" br></sa-info>
-						<sa-info name="部门ID" br>{{m.deptId}}</sa-info>
+						<sa-info name="单位ID" br>{{m.deptId}}</sa-info>
 						<sa-info name="命令" br>{{m.command}}</sa-info>
 						<sa-info name="设备SN" br>{{m.sn}}</sa-info>
 						<sa-info name="设备名" br>{{m.terminalName}}</sa-info>

+ 1 - 1
sa-view/tb-gate-command-log/tb-gate-command-log-list.html

@@ -77,7 +77,7 @@
 					commandContent:'',
 					p: { // 查询参数  
 						id: '', // 主键 
-						deptId: '', // 部门ID 
+						deptId: '', // 单位ID 
 						command: '', // 命令 
 						sn: '', // 设备SN 
 						terminalName: '', // 设备名 

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

@@ -35,7 +35,7 @@
 					<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>
+							<label class="c-label"><span style="color: red;">*</span>通道:</label>
 							<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"
@@ -75,7 +75,7 @@
 						return {
 							id: '', // 主键 
 							name: '', // 名称 
-							deptId: '', // 部门id 
+							deptId: '', // 单位id 
 							direction: 1, // 序列号 
 							ip: '', // IP地址 
 							state: '', // 状态 

+ 1 - 1
sa-view/tb-gate-terminal/tb-gate-terminal-info.html

@@ -24,7 +24,7 @@
 				<div class="c-panel">
 					<el-form v-if="m">
 						<sa-info name="名称" br>{{m.name}}</sa-info>
-						<sa-info name="部门id" br>{{m.deptId}}</sa-info>
+						<sa-info name="单位id" br>{{m.deptId}}</sa-info>
 						<sa-info name="序列号" br>{{m.sn}}</sa-info>
 						<sa-info name="IP地址" br>{{m.ip}}</sa-info>
 						<sa-info name="状态" br>{{m.state}}</sa-info>

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

@@ -33,7 +33,7 @@
 				<el-table class="data-table" ref="data-table" :data="dataList">
 					<sa-td name="序号" type="index"></sa-td>
 					<sa-td name="名称" prop="name" width="140"></sa-td>
-					<sa-td name="所属部门" prop="departmentName" width="140"></sa-td>
+					<sa-td name="所在场所" prop="venuesName"></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" width="140"></sa-td>
@@ -70,7 +70,7 @@
 					p: { // 查询参数  
 						id: '', // 主键 
 						name: '', // 名称 
-						deptId: '', // 部门id 
+						deptId: '', // 单位id 
 						sn: '', // 序列号 
 						ip: '', // IP地址 
 						pageNo: 1, // 当前页 

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

@@ -106,7 +106,7 @@
 							id: '', // 主键 
 							name: '', // 姓名 
 							phone: '', // 联系号码 
-							deptId: '', // 部门ID
+							deptId: '', // 单位ID
 							deptName: '',
 							position: '', // 职能 
 							venuesId: '', // 场所ID 

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

@@ -70,7 +70,7 @@
 						id: '', // 主键 
 						name: '', // 姓名 
 						phone: '', // 联系号码 
-						deptId: '', // 部门ID 
+						deptId: '', // 单位ID 
 						position: '', // 职能 
 						venuesId: '', // 场所ID 
 						venuesName: '', // 值班地点 

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

@@ -88,7 +88,7 @@
 					// 创建一个 默认Model 
 					createModel: function() {
 						return {
-							deptId: '', // 部门ID 
+							deptId: '', // 单位ID 
 							name: '', // 名字 
 							idCard: '', // 身份证 
 							reason: '', // 禁行原因 
@@ -100,7 +100,7 @@
 					ok: function() {
 						// 表单校验 
 						let m = this.m;
-						sa.checkNull(m.deptId, '请选择部门');
+						sa.checkNull(m.deptId, '请选择单位');
 						sa.checkNull(m.name, '请输入 [名字]');
 						sa.checkNull(m.idCard, '请输入 [身份证]');
 						let idCard = m.idCard;

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

@@ -30,12 +30,12 @@
 					<sa-td name="序号" type="index"></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="idCadStr" width="150"></sa-td>
 					<sa-td name="禁行原因" prop="reason" ></sa-td>
-					<sa-td name="禁行开始" prop="startTime" ></sa-td>
-					<sa-td name="禁行结束" prop="endTime" ></sa-td>
-					<sa-td name="创建时间" prop="createTime" ></sa-td>
-					<sa-td name="更新时间" prop="updateTime" ></sa-td>
+					<sa-td name="禁行开始" prop="startTime" width="150"></sa-td>
+					<sa-td name="禁行结束" prop="endTime" width="150"></sa-td>
+					<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" icon="el-icon-view" @click="get(s.row)">查看</el-button>

+ 49 - 29
sa-view/tb-person-filing/tb-person-filing-add.html

@@ -24,6 +24,16 @@
 			.c-panel .el-form .el-textarea__inner {
 				width: 250px;
 			}
+			.rota {
+				position: relative;
+				right: 6px;
+				font-size: 10px;
+				cursor: pointer;
+				padding: 3px;
+				border-radius: 5px;
+				bottom: 5em;
+				color: cornflowerblue
+			}
 		</style>
 	</head>
 	<body>
@@ -38,29 +48,30 @@
 							<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-select v-model="m.deptId" @change="deptChange">
 										<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>
+								<sa-item type="num" name="联系电话" v-model="m.phone" br></sa-item>
+							</el-col>
+							<el-col :span="12">
+								<sa-item type="text" name="商铺号" v-if="m.deptName.indexOf('商铺')!==-1" v-model="m.shopCode" br need></sa-item>
+								<sa-item type="text" name="边民证" v-if="m.icCard" v-model="m.icCard" 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 type="img" name="人脸" v-model="m.photo" br need>
+									<span slot="tip" class="rota">
+										<span @click="rotaFn(-90)">
+											<i class="el-icon-refresh-left"></i>
+										</span>
+										<span style="margin-left: 10px;" @click="rotaFn(90)">
+											<i class="el-icon-refresh-right"></i>
+										</span>
+									</span>
+								</sa-item>
 
 							</el-col>
 						</el-row>
@@ -85,7 +96,8 @@
 					id: sa.p('id', 0), // 获取超链接中的id参数(0=添加,非0=修改) 
 					m: {
 						id: '', //  
-						deptId: '', // 部门ID 
+						deptId: '', // 单位ID 
+						deptName:'',
 						name: '', // 姓名 
 						phone: '', // 联系电话 
 						type: 1, // 类型(1=临时,2=内部) 
@@ -95,10 +107,20 @@
 					deptList: []
 				},
 				methods: {
-					getVenuesList() {
-						sa.ajax('/TbVenues/getParentList', function(res) {
-							this.venuesList = res.data; // 数据
-						}.bind(this));
+					rotaFn(rota) {
+						let m = this.m;
+						sa.ajax('/TbPersonFiling/rota', {
+							rota: rota,
+							id:m.id
+						}, function(resp) {
+							this.init();
+						}.bind(this))
+					},
+					deptChange(id) {
+						let deptList = this.deptList;
+						let dept = deptList.filter(obj => obj.id == id)[0];
+						this.m.deptName=dept.name;
+						console.log(this.m.deptName.indexOf('商铺'))
 					},
 					getDeptList() {
 						sa.ajax('/TbDept/getList', {
@@ -113,20 +135,19 @@
 					ok: function() {
 						// 表单校验 
 						let m = this.m;
-						let phone = m.phone;
 						sa.checkNull(m.deptId, '请选择备案组织');
-						sa.checkNull(m.venuesId, '请选择备案场所');
 						sa.checkNull(m.name, '请输入 [姓名]');
-						if (!sa.isPhone(phone)) {
-							sa.error('请输入正确的联系号码');
-							return false;
-						}
+
 						sa.checkNull(m.idCard, '请输入 [身份证]');
 						let idCard = m.idCard;
 						if (idCard.length < 15) {
 							sa.error('请输入正确的身份证');
 							return false;
 						}
+						if (m.deptName.indexOf('商铺')!==-1&&!m.shopCode) {
+							sa.error('请输入商铺号');
+							return false;
+						}
 						sa.checkNull(m.photo, '请上传 [人脸]');
 						m = sa.removeNull(m);
 						// 开始增加或修改
@@ -160,7 +181,6 @@
 				mounted: function() {
 					this.init();
 					this.getDeptList();
-					this.getVenuesList();
 				}
 			})
 		</script>

+ 5 - 5
sa-view/tb-person-filing/tb-person-filing-info.html

@@ -29,21 +29,21 @@
 						<el-row>
 							<el-col :span="12">
 								<sa-info name="姓名" br>{{m.name}}</sa-info>
-								<sa-info name="部门" br>{{m.deptName}}</sa-info>
-								<sa-info type="enum" name="类型" :value="m.type" :jv="{1: '临时', 2: '内部'}" br></sa-info>
+								<sa-info name="单位" br>{{m.deptName}}</sa-info>
 								<sa-info name="身份证" br>{{m.idCadStr}}</sa-info>
-								<sa-info name="来访事由" br>{{m.visitReason}}</sa-info>
+								<sa-info name="边民证" br v-if="m.icCard">{{m.icCard}}</sa-info>
+								<sa-info name="过期时间" br v-if="m.endTime">{{m.endTime}}</sa-info>
+								<sa-info type="img" name="人脸" :value="m.photo" br></sa-info>
 							</el-col>
 							<el-col :span="12">
-
 								<sa-info name="创建时间" br>{{m.createTime}}</sa-info>
 								<sa-info name="更新时间" br>{{m.updateTime}}</sa-info>
 								<sa-info type="enum" name="审核状态" :value="m.judgeState"
 									:jv="{0: '未审核', 1: '已审核',2:'不通过'}" br></sa-info>
+								<sa-info name="审核意见" br>{{m.judgeContent}}</sa-info>
 								<sa-info name="审核时间" br>{{m.judgeTime}}</sa-info>
 								<sa-info name="审核人" br>{{m.judgeBy}}</sa-info>
 							</el-col>
-							<sa-info name="备注" br>{{m.remark}}</sa-info>
 						</el-row>
 
 					</el-form>

+ 61 - 16
sa-view/tb-person-filing/tb-person-filing-judge.html

@@ -18,6 +18,17 @@
 			.c-panel .c-label {
 				width: 8em;
 			}
+
+			.rota {
+				position: relative;
+				right: 6px;
+				font-size: 10px;
+				cursor: pointer;
+				padding: 3px;
+				border-radius: 5px;
+				bottom: 5em;
+				color: cornflowerblue
+			}
 		</style>
 	</head>
 	<body>
@@ -29,18 +40,27 @@
 						<el-row>
 							<el-col :span="12">
 								<sa-info name="姓名" br>{{m.name}}</sa-info>
-								<sa-info name="部门" br>{{m.deptName}}</sa-info>
-								<sa-info type="enum" name="类型" :value="m.type" :jv="{1: '临时', 2: '内部'}" br></sa-info>
+								<sa-info name="单位" br>{{m.deptName}}</sa-info>
 								<sa-info name="身份证" br>{{m.idCadStr}}</sa-info>
+								<sa-item type="datetime" name="备案过期" v-model="m.endTime" br></sa-item>
+								<sa-item name="审核意见" type="textarea" v-model="m.judgeContent" br></sa-item>
 							</el-col>
 							<el-col :span="12">
-								<sa-info name="来访事由" br>{{m.visitReason}}</sa-info>
-								<sa-info name="备注" br>{{m.remark}}</sa-info>
+								<sa-info name="联系号码" br>{{m.phone}}</sa-info>
 								<sa-info name="创建时间" br>{{m.createTime}}</sa-info>
 								<sa-info name="更新时间" br>{{m.updateTime}}</sa-info>
+								<sa-info type="img" name="人脸" :value="m.photo" br>
+									<span slot="tip" class="rota">
+										<span @click="rotaFn(-90)">
+											<i class="el-icon-refresh-left"></i>
+										</span>
+										<span style="margin-left: 10px;" @click="rotaFn(90)">
+											<i class="el-icon-refresh-right"></i>
+										</span>
+									</span>
+								</sa-info>
 							</el-col>
 						</el-row>
-
 					</el-form>
 				</div>
 			</div>
@@ -49,38 +69,63 @@
 				<el-button type="success" @click="judge(1)">通过</el-button>
 				<el-button type="danger" @click="judge(2)">不通过</el-button>
 			</div>
+
 		</div>
 		<script>
 			var app = new Vue({
 				components: {
-					"sa-info": httpVueLoader('../../sa-frame/com/sa-info.vue')
+					"sa-info": httpVueLoader('../../sa-frame/com/sa-info.vue'),
+					"sa-item": httpVueLoader('../../sa-frame/com/sa-item.vue')
 				},
 				el: '.vue-box',
 				data: {
+					dialogVisible: false,
+					form: {
+						direction: 1,
+						num: 90
+					},
 					id: sa.p('id', 0), // 获取数据ID 
-					m: null
+					m: {}
 				},
 				methods: {
+					rotaFn(rota) {
+						let m = this.m;
+						sa.ajax('/TbPersonFiling/rota', {
+							rota: rota,
+							id:m.id
+						}, function(resp) {
+							this.getInfo();
+						}.bind(this))
+					},
 					judge(state) {
+						if (state == 2 && !this.m.judgeContent) {
+							sa.error('请录入审核意见');
+							return;
+						}
 						sa.ajax('/TbPersonFiling/judge', {
 							id: this.id,
-							judgeState: state
+							judgeState: state,
+							judgeContent: this.m.judgeContent,
+							endTime: this.m.endTime
 						}, function(res) {
 							sa.alert('操作成功');
 							setTimeout(() => {
-								parent.app.f5(); // 刷新父页面列表
 								sa.closeCurrIframe(); // 关闭本页 
-							}, 2000)
+								parent.app.f5(); // 刷新父页面列表
+							}, 1000)
+						}.bind(this))
+					},
+					getInfo(){
+						sa.ajax('/TbPersonFiling/getById?id=' + this.id, function(res) {
+							this.m = res.data;
+							if (res.data == null) {
+								sa.alert('未能查找到 id=' + this.id + " 详细数据");
+							}
 						}.bind(this))
 					}
 				},
 				mounted: function() {
-					sa.ajax('/TbPersonFiling/getById?id=' + this.id, function(res) {
-						this.m = res.data;
-						if (res.data == null) {
-							sa.alert('未能查找到 id=' + this.id + " 详细数据");
-						}
-					}.bind(this))
+					this.getInfo();
 				}
 			})
 		</script>

+ 81 - 17
sa-view/tb-person-filing/tb-person-filing-list.html

@@ -23,43 +23,62 @@
 				<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="enum" name="类型" v-model="p.type" :jv="{1: '临时', 2: '内部'}" jtype="2" def="不限">
-					</sa-item>
+					<sa-item type="text" name="联系号码" v-model="p.phone"></sa-item>
 					<sa-item type="text" name="身份证" v-model="p.idCard"></sa-item>
-					<sa-item type="enum" name="审核状态" v-model="p.judgeState" :jv="{0: '未审核', 1: '通过',2:'不通过'}" jtype="4"
-						def="全部">
-					</sa-item>
+					<div class="c-item" v-if="sa.isAdmin()">
+						<label class="c-label">备案组织:</label>
+						<el-select v-model="p.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-if="sa.isAdmin()" v-model="p.shopCode"></sa-item>
+					<div class="c-item">
+						<el-select v-model="p.judgeState">
+							<el-option label="全部" value=""></el-option>
+							<el-option label="未审核" :value="0"></el-option>
+							<el-option label="通过" :value="1"></el-option>
+							<el-option label="不通过" :value="2"></el-option>
+						</el-select>
+					</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.name='',p.type='',p.idCard='',p.judgeState='',f5()">重置</el-button>
+						@click="p.name='';p.phone='';p.deptId='';p.idCard='';p.judgeState='';p.shopCode='';f5()">重置</el-button>
 					<el-button type="primary" icon="el-icon-plus" @click="add" v-if="sa.isAuth('tb-person-filing-add')">
 						新增</el-button>
 					<el-button type="primary" icon="el-icon-upload" @click="importFn"
 						v-if="sa.isAuth('tb-person-filing-import')">
-						导入</el-button>
+						导入备案</el-button>
+					<el-button type="primary" icon="el-icon-upload" @click="face.visible=true"
+						v-if="sa.isAuth('tb-person-filing-import')">
+						导入人脸</el-button>
+					<el-button type="primary" icon="el-icon-upload" v-if="sa.isAuth('tb-person-filing-export')"
+						@click='exportFn'>
+						导出</el-button>
 				</el-form>
 
 				<!-- ------------- 数据列表 ------------- -->
-				<el-table class="data-table" ref="data-table" :data="dataList">
+				<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="name"></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 name="身份证" prop="idCadStr" width="160"></sa-td>
 					<sa-td type="img" name="人脸" prop="photo"> </sa-td>
-					<sa-td name="类型" prop="type" type="enum" :jv="{1: '临时', 2: '内部'}"></sa-td>
-					<sa-td name="来访事由" prop="visitReason"></sa-td>
+					<sa-td name="商铺号" prop="shopCode" not="-"> </sa-td>
 					<sa-td name="审核状态" prop="judgeState" type="enum" :jv="{0: '未审核', 1: '通过', 2: '不通过'}"></sa-td>
 					<sa-td name="审核时间" prop="judgeTime" not="-" width="140"></sa-td>
 					<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 v-if="sa.isAuth('tb-person-filing-judge')&&s.row.judgeState==0" class="c-btn"
+							<el-button v-if="sa.isAuth('tb-person-filing-judge')&&s.row.judgeState!=1" class="c-btn"
 								type="success" @click="judgeFn(s.row)">审核
 							</el-button>
+							<el-button class="c-btn" type="primary" @click="issuedFn(s.row)"
+								v-if="sa.isAuth('tb-person-filing-issued')&&s.row.judgeState==1">下发人脸
+							</el-button>
 							<el-button class="c-btn" type="success" @click="get(s.row)">查看
 							</el-button>
 							<el-button v-if="sa.isAuth('tb-person-filing-edit')" class="c-btn" type="primary"
@@ -75,7 +94,7 @@
 				<sa-item type="page" :curr.sync="p.pageNo" :size.sync="p.pageSize" :total="dataCount" @change="f5()">
 				</sa-item>
 			</div>
-			<el-dialog title="批量导入" :visible.sync="form.visible" width="30%">
+			<el-dialog title="批量导入" :visible.sync="form.visible" width="35%">
 				<el-card class="box-card">
 					<div slot="header" class="clearfix">
 						<el-button style="float: right; padding-bottom: 10px" type="text" @click="downTemplate">模板下载
@@ -93,6 +112,21 @@
 					<el-button type="primary" @click="sureImport">确定导入</el-button>
 				</span>
 			</el-dialog>
+			<el-dialog title="导入人脸信息" :visible.sync="face.visible" width="35%">
+				<el-card class="box-card">
+					<el-upload class="upload-demo" ref="importExcel" :headers="headers" drag accept=".zip"
+						:on-success="onSuccess" :action="importFaceUrl">
+						<i class="el-icon-upload"></i>
+						<div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
+						<div class="el-upload__tip" slot="tip">只能上传.zip压缩文件</div>
+					</el-upload>
+					<div style="margin-top: 10px;">
+						<p>1、人脸图片请以<span style="color: red;font-weight: bold;">身份证号</span>命名</p>
+						<p>2、上传的人脸人员信息需要已在系统备案</p>
+						<p>3、将人员人脸图片打包成zip格式上传</p>
+					</div>
+				</el-card>
+			</el-dialog>
 		</div>
 		<script>
 			var app = new Vue({
@@ -102,19 +136,25 @@
 				},
 				el: '.vue-box',
 				data: {
+					face: {
+						visible: false,
+					},
 					form: {
 						visible: false,
 						deptId: ''
 					},
 					importUrl: sa.cfg.api_url + '/TbPersonFiling/import',
+					importFaceUrl: sa.cfg.api_url + '/TbPersonFiling/importFace',
 					headers: {
 						'satoken': sessionStorage.satoken
 					},
 					deptList: [],
 					p: { // 查询参数  
 						id: '', //  
-						judgeState: '', // 部门ID 
+						judgeState: '', // 单位ID 
+						deptId: '',
 						name: '', // 姓名 
+						phone:'',
 						type: '', // 类型(1=临时,2=内部) 
 						idCard: '', // 身份证 
 						pageSize: 15, // 页大小 
@@ -122,11 +162,31 @@
 					},
 					dataCount: 0,
 					dataList: [], // 数据集合 
+					shopCodeList: []
 				},
 				methods: {
+					exportFn() {
+						sa.confirm('是否导出符合筛选条件的人员备案信息?', function() {
+							sa.ajax('/TbPersonFiling/export', sa.removeNull(this.p), function(res) {
+								window.location.href = res.data;
+							}.bind(this))
+						}.bind(this));
+					},
+					issuedFn(data) {
+						sa.confirm('是否下发【' + data.name + '】的人脸信息到对应备案场所', function() {
+							sa.ajax('/TbPersonFiling/issued', data, function(res) {
+								sa.ok('人员信息已下发');
+							}.bind(this))
+						}.bind(this));
+					},
+					getShopCodeList() {
+						sa.ajax('/TbPersonFiling/getShopCodeList', function(resp) {
+							let list = resp.data;
+							this.shopCodeList = list;
+						}.bind(this))
+					},
 					importFn() {
 						this.form.visible = true;
-						this.getDeptList()
 					},
 					downTemplate() {
 						window.location.href = '../../static/template/' + encodeURIComponent('备案导入模板.xlsx')
@@ -134,6 +194,7 @@
 					cancelImport() {
 						this.$refs.importExcel.clearFiles();
 						this.form.visible = false;
+						this.face.visible = false;
 					},
 					sureImport() {
 						sa.loading('正在上传');
@@ -223,7 +284,10 @@
 				created: function() {
 					this.f5();
 					sa.onInputEnter();
-					console.log()
+					this.getShopCodeList();
+					if (sa.isAdmin()) {
+						this.getDeptList();
+					}
 				}
 			})
 		</script>

+ 1 - 1
sa-view/tb-person-visit-record/health-code-record-info.html

@@ -26,7 +26,7 @@
                 <el-row>
                     <el-col :span="12">
                         <sa-info type="enum" name="出入" :value="m.direction" :jv="{1: '入场', 2: '离场'}" br></sa-info>
-                        <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 type="img" name="图片" :value="m.picture" br></sa-info>
                         <sa-info name="身份证" br>{{m.idCard}}</sa-info>

+ 1 - 1
sa-view/tb-person-visit-record/health-code-record-list.html

@@ -136,7 +136,7 @@
             p: { // 查询参数
                 id: '', // 主键
                 direction: '', // 出入(1=入场,2=离场)
-                deptName: '', // 部门名称
+                deptName: '', // 单位名称
                 startTime: '',
                 endTime: '',
                 name: '', // 姓名

+ 50 - 60
sa-view/tb-person-visit-record/tb-person-visit-record-add.html

@@ -39,74 +39,56 @@
 								<span>人员信息</span>
 							</div>
 							<el-row>
-								<el-col :span="12">
+								<el-col :span="8">
+									<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="text" name="身份证" v-model="m.idCard" br need></sa-item>
-								</el-col>
-								<el-col :span="12">
-									<sa-item 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.healthStatus">
 											<el-option label="请选择" v-for="(item,index) in healthList" :key="index"
 												:label="item" :value="item"></el-option>
-
 										</el-select>
 									</div>
 								</el-col>
+								<el-col :span="8">
+									<div class="c-item">
+										<label class="c-label"><span style="color: red;">*</span>入场通道:</label>
+										<el-select v-model="m.inChannel" 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">
+												</el-option>
+											</el-option-group>
+										</el-select>
+									</div>
+									<sa-item type="datetime" name="入场时间" v-model="m.inTime" br need></sa-item>
+									<sa-item type="num" name="入场体温" v-model="m.inTemperature" br need></sa-item>
+								</el-col>
+								<el-col :span="8">
+									<sa-item type="text" name="联系号码" v-model="m.phone"></sa-item>
+									<sa-item type="text" name="身份证" v-model="m.idCard" br></sa-item>
 
+								</el-col>
 							</el-row>
 						</el-card>
-						<el-card>
-							<div slot="header" class="clearfix">
-								<span>出入信息</span>
-							</div>
-							<div style="display: flex;">
-								<div class="c-item">
-									<label class="c-label">入场通道:</label>
-									<el-select v-model="m.inChannel" 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">
-											</el-option>
-
-
-										</el-option-group>
-									</el-select>
-								</div>
-								<sa-item type="num" name="入场体温" v-model="m.inTemperature" br></sa-item>
-								<sa-item type="datetime" name="入场时间" v-model="m.inTime" br></sa-item>
-							</div>
-							<div style="display: flex;">
-								<div class="c-item">
-									<label class="c-label">离场通道:</label>
-									<el-select v-model="m.outChannel" 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">
-											</el-option>
-										</el-option-group>
-									</el-select>
-								</div>
-								<sa-item type="text" name="离场体温" v-model="m.outTemperature" br></sa-item>
-								<sa-item type="datetime" name="离场时间" v-model="m.outTime" br></sa-item>
-							</div>
-						</el-card>
 						<sa-item name="" class="s-ok" br>
 							<el-button type="primary" icon="el-icon-plus" @click="ok()">保存</el-button>
 						</sa-item>
-
-
-				</el-form>
+					</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>
-		<!-- ------- 底部按钮 ------- -->
-		<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({
@@ -120,10 +102,11 @@
 						'绿码', '黄码', '红码', '未知'
 					],
 					areaList: [],
+					deptList: [],
 					id: sa.p('id', 0), // 获取超链接中的id参数(0=添加,非0=修改) 
 					m: {
 						id: '', // 主键 
-						deptId: '', // 部门ID 
+						deptId: '', // 单位ID 
 						healthStatus: '绿码', // 健康码 
 						name: '', // 姓名 
 						idCard: '', // 身份证 
@@ -137,6 +120,15 @@
 					}, // 实体对象 
 				},
 				methods: {
+					getDeptList() {
+						sa.ajax('/TbDept/getList', {
+							pageNo: 1,
+							pageSize: 100
+						}, function(resp) {
+							let list = resp.data;
+							this.deptList = list;
+						}.bind(this))
+					},
 					getVenuesList() {
 						sa.ajax('/TbVenues/getTree', function(res) {
 							this.areaList = res.data; // 数据
@@ -146,7 +138,7 @@
 					createModel: function() {
 						return {
 							id: '', // 主键 
-							deptId: '', // 部门ID 
+							deptId: '', // 单位ID 
 							healthStatus: '绿码', // 健康码 
 							name: '', // 姓名 
 							idCard: '', // 身份证 
@@ -164,13 +156,10 @@
 					ok: function() {
 						// 表单校验 
 						let m = this.m;
+						sa.checkNull(m.deptId, '请选择 [所属组织]');
 						sa.checkNull(m.name, '请输入 [姓名]');
-						let phone = m.phone;
-						if (!sa.isPhone(phone)) {
-							sa.error('请输入正确的号码');
-							return false;
-						}
-						sa.checkNull(m.idCard, '请输入 [身份证]');
+						sa.checkNull(m.inChannel, '请选择 [入场通道]');
+						sa.checkNull(m.inTime, '请选择[入场时间]');
 						sa.ajax('/TbPersonVisitRecord/add', m, function(res) {
 							sa.alert('增加成功', this.clean);
 						}.bind(this));
@@ -182,6 +171,7 @@
 				},
 				mounted: function() {
 					this.getVenuesList();
+					this.getDeptList();
 				}
 			})
 		</script>

+ 3 - 3
sa-view/tb-person-visit-record/tb-person-visit-record-edit.html

@@ -37,7 +37,7 @@
 						<el-row>
 							<el-col :span="12">
 								<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>
 										<el-option label="请选择" v-for="(item,index) in deptList" :key="item.id"
 											:label="item.name" :value="item.id"></el-option>
@@ -103,8 +103,8 @@
 						return {
 							id: '', // 主键 
 							direction: '', // 出入(1=入场,2=离场) 
-							deptId: '', // 部门ID 
-							phone: '', // 部门名称 
+							deptId: '', // 单位ID 
+							phone: '', // 单位名称 
 							name: '', // 姓名 
 							picture: '', // 图片 
 							idCard: '', // 身份证 

+ 1 - 1
sa-view/tb-person-visit-record/tb-person-visit-record-info.html

@@ -26,7 +26,7 @@
 						<el-row>
 							<el-col :span="12">
 								<sa-info type="enum" name="出入" :value="m.direction" :jv="{1: '入场', 2: '离场'}" br></sa-info>
-								<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 type="img" name="图片" :value="m.picture" br></sa-info>
 								<sa-info name="身份证" br>{{m.idCard}}</sa-info>

+ 29 - 17
sa-view/tb-person-visit-record/tb-person-visit-record-list.html

@@ -24,10 +24,14 @@
 					<el-row>
 						<el-col :span="20">
 							<div>
+								<div class="c-item" v-if="sa.isAdmin()">
+									<label class="c-label">所属组织:</label>
+									<el-select v-model="p.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="p.name"></sa-item>
-								<sa-item type="enum" name="出入场" v-model="p.direction" :jv="{1: '入场', 2: '离场'}" jtype="4"
-									def="不限">
-								</sa-item>
 								<sa-item type="enum" name="健康码" v-model="p.healthStatus"
 									:jv="{'绿码': '绿码', '黄码': '黄码', '红码': '红码'}" jtype="4" def="全部">
 								</sa-item>
@@ -41,16 +45,12 @@
 								<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.direction='';p.name='';p.allowPass='';p.healthStatus='';p.startTime='';p.endTime='';f5()">
+									@click="p.deptId='';p.name='';p.allowPass='';p.healthStatus='';p.startTime='';p.endTime='';f5()">
 									重置</el-button>
-								<el-button type="primary" v-if="sa.isAuth('tb-person-visit-record-export')"
-									icon="el-icon-s-unfold" @click="exportFn">导出</el-button>
-							</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" v-if="sa.isAuth('tb-person-visit-record-export')"
+									icon="el-icon-s-unfold" @click="exportFn">导出</el-button>
 							</div>
 						</el-col>
 						<el-col :span="4">
@@ -61,7 +61,7 @@
 				<!-- ------------- 快捷按钮 ------------- -->
 				<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="departmentName" 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>
@@ -78,6 +78,7 @@
 							<label v-else>禁止通行</label>
 						</template>
 					</sa-td>
+					<sa-td name="禁行原因" prop="reason" width="130"></sa-td>
 					<sa-td name="分类" prop="type" type="enum" :jv="{1: '补录', 2: '设备上传'}"></sa-td>
 					<el-table-column label="操作" fixed="right" width="240px">
 						<template slot-scope="s">
@@ -103,6 +104,7 @@
 				},
 				el: '.vue-box',
 				data: {
+					deptList: [],
 					healthStatusList: [{
 							name: '全部',
 							value: ''
@@ -123,24 +125,31 @@
 					p: { // 查询参数  
 						id: '', // 主键 
 						direction: '', // 出入(1=入场,2=离场) 
-						deptName: '', // 部门名称 
+						deptName: '', // 单位名称 
 						allowPass: '',
 						startTime: '',
 						endTime: '',
 						name: '', // 姓名 
 						idCard: '', // 身份证 
-						channel: '', // 通过通道 
-						venues: '', // 场所 
-						temperature: '', // 体温 
+						deptId: '', // 通过通道 
 						healthStatus: '', // 健康码 
 						pageNo: 1, // 当前页 
-						pageSize: 10, // 页大小 
+						pageSize: 15, // 页大小 
 						sortType: 0 // 排序方式 
 					},
 					dataCount: 0,
 					dataList: [], // 数据集合 
 				},
 				methods: {
+					getDeptList() {
+						sa.ajax('/TbDept/getList', {
+							pageNo: 1,
+							pageSize: 100
+						}, function(resp) {
+							let list = resp.data;
+							this.deptList = list;
+						}.bind(this))
+					},
 					exportFn() {
 						sa.confirm('是否导出符合条件的记录?', function() {
 							sa.ajax('/TbPersonVisitRecord/export', sa.removeNull(this.p), function(res) {
@@ -157,7 +166,7 @@
 						}.bind(this));
 					},
 					add() {
-						sa.showIframe('新增数据', 'tb-person-visit-record-add.html?id=-1', '1200px', '90%');
+						sa.showIframe('新增数据', 'tb-person-visit-record-add.html?id=-1', '1200px', '70%');
 					},
 					// 查看
 					get: function(data) {
@@ -190,6 +199,9 @@
 				created: function() {
 					this.f5();
 					sa.onInputEnter();
+					if (sa.isAdmin()) {
+						this.getDeptList();
+					}
 				}
 			})
 		</script>

+ 2 - 2
sa-view/tb-tactics/tb-tactics-list.html

@@ -71,8 +71,8 @@
 				data: {
 					p: { // 查询参数  
 						id: '', //  
-						deptId: '', // 部门ID 
-						deptName: '', // 部门 
+						deptId: '', // 单位ID 
+						deptName: '', // 单位 
 						pId: '', // 父ID 
 						name: '', // 名称 
 						createTime: '', // 创建时间 

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

@@ -69,7 +69,7 @@
 					id: sa.p('id', 0), // 获取超链接中的id参数(0=添加,非0=修改) 
 					m: {
 						id: '', //  
-						deptId: '', // 部门ID 
+						deptId: '', // 单位ID 
 						name: '', // 名称 
 						ipAddress: '', // IP地址 
 						state: '', // 状态(0=离线,1=正常 no-add no-s) 

+ 2 - 2
sa-view/tb-terminal/tb-terminal-list.html

@@ -37,12 +37,12 @@
 				<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="所属场所" prop="venuesName"></sa-td>
+					<sa-td name="所在通道" prop="channelName" width="170"></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>
 					<sa-td name="人员数" prop="personNum"></sa-td>
-					<sa-td name="通道名称" prop="channelName"></sa-td>
 					<sa-td name="创建时间" prop="createTime" width="160"></sa-td>
 					<el-table-column label="操作" fixed="right" width="420px">
 						<template slot-scope="s">

+ 1 - 18
sa-view/tb-venues/tb-venues-add.html

@@ -42,13 +42,6 @@
 					<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.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>
@@ -97,15 +90,6 @@
 					}, // 实体对象 
 				},
 				methods: {
-					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 {
@@ -121,7 +105,7 @@
 					ok: function() {
 						// 表单校验 
 						let m = this.m;
-						sa.checkNull(m.departmentId, '请选择 [部门]');
+						sa.checkNull(m.departmentId, '请选择 [单位]');
 						sa.checkNull(m.name, '请输入 [名称]');
 						if (this.id == 0 && !this.checked) {
 							sa.error('请勾选阅读')
@@ -148,7 +132,6 @@
 					}
 				},
 				mounted: function() {
-					this.getDepartmentList();
 					// 初始化数据 
 					if (this.id <= 0) {
 						this.m = this.createModel();

+ 2 - 2
sa-view/tb-venues/tb-venues-addchildren.html

@@ -61,8 +61,8 @@
 					createModel: function() {
 						return {
 							id: '', //  
-							departmentId: sa.p('departmentId', '-2'), // 部门ID 
-							deptName: '', // 部门 
+							departmentId: sa.p('departmentId', '-2'), // 单位ID 
+							deptName: '', // 单位 
 							pId: sa.p('pId', '-1'), // 父ID 
 							name: '', // 名称 
 							type: 1,

+ 2 - 3
sa-view/tb-venues/tb-venues-list.html

@@ -42,7 +42,6 @@
 								<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">
@@ -81,8 +80,8 @@
 				data: {
 					p: { // 查询参数  
 						id: '', //  
-						deptId: '', // 部门ID 
-						deptName: '', // 部门 
+						deptId: '', // 单位ID 
+						deptName: '', // 单位 
 						pId: '', // 父ID 
 						name: '', // 名称 
 						pageNo: 1, // 当前页 

+ 1 - 1
static/sa.css

@@ -108,7 +108,7 @@ input::-webkit-inner-spin-button {
 /* .el-table{padding-top: 10px;} */
 /* 表格里的img */
 .td-img{width: 3em; height: 3em; border-radius: 2px; cursor: pointer;}
-.info-img{width: 3em; height: 3em; cursor: pointer; margin-right: 5px; vertical-align: middle;}
+.info-img{width: 8em; height: 8em; cursor: pointer; margin-right: 5px; vertical-align: middle;}
 .c-price{color: red;}
 
 /* 分页盒子调整一下间距 */

Fișier diff suprimat deoarece este prea mare
+ 341 - 311
static/sa.js


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


Unele fișiere nu au fost afișate deoarece prea multe fișiere au fost modificate în acest diff