whx 5 月之前
父節點
當前提交
9ebc4ba046
共有 67 個文件被更改,包括 468 次插入409 次删除
  1. 12 3
      virgo.wzfrontend/console/src/components/work/operation/meeting/detail.vue
  2. 9 4
      virgo.wzfrontend/console/src/components/work/operation/meeting/edit.vue
  3. 25 3
      virgo.wzfrontend/console/src/components/work/organization/user/role.vue
  4. 4 2
      virgo.wzfrontend/console/src/main.js
  5. 11 67
      virgo.wzfrontend/console/src/uitls/permission.js
  6. 70 0
      virgo.wzfrontend/console/src/uitls/routerPermission.js
  7. 162 160
      virgo.wzfrontend/console/src/views/system/main.vue
  8. 5 3
      virgo.wzfrontend/console/src/views/work/operation/meeting/organization.vue
  9. 152 149
      virgo.wzfrontend/console/src/views/work/operation/meeting/project.vue
  10. 1 1
      virgo.wzfrontend/console/src/views/work/property/register.vue
  11. 1 1
      virgo.wzfrontend/src/main/resources/static/console/index.html
  12. 0 1
      virgo.wzfrontend/src/main/resources/static/console/static/css/1911.48fa06e5.css
  13. 0 0
      virgo.wzfrontend/src/main/resources/static/console/static/css/2632.f275a232.css
  14. 1 0
      virgo.wzfrontend/src/main/resources/static/console/static/css/4238.86bf52d4.css
  15. 0 1
      virgo.wzfrontend/src/main/resources/static/console/static/css/7857.48fa06e5.css
  16. 0 0
      virgo.wzfrontend/src/main/resources/static/console/static/css/8409.f275a232.css
  17. 1 0
      virgo.wzfrontend/src/main/resources/static/console/static/css/9310.86bf52d4.css
  18. 0 0
      virgo.wzfrontend/src/main/resources/static/console/static/js/1184-legacy.4aa8f86e.js
  19. 0 0
      virgo.wzfrontend/src/main/resources/static/console/static/js/1589-legacy.cfe975b5.js
  20. 0 0
      virgo.wzfrontend/src/main/resources/static/console/static/js/1888.7481c504.js
  21. 0 1
      virgo.wzfrontend/src/main/resources/static/console/static/js/1911-legacy.a51161ab.js
  22. 0 0
      virgo.wzfrontend/src/main/resources/static/console/static/js/2550-legacy.09d8909c.js
  23. 0 0
      virgo.wzfrontend/src/main/resources/static/console/static/js/258.97fc8042.js
  24. 1 0
      virgo.wzfrontend/src/main/resources/static/console/static/js/2632-legacy.5976db66.js
  25. 0 1
      virgo.wzfrontend/src/main/resources/static/console/static/js/2942.7a0eeee4.js
  26. 0 0
      virgo.wzfrontend/src/main/resources/static/console/static/js/3006.9f4a8aca.js
  27. 1 0
      virgo.wzfrontend/src/main/resources/static/console/static/js/4238-legacy.66a46740.js
  28. 0 1
      virgo.wzfrontend/src/main/resources/static/console/static/js/4352-legacy.6a005707.js
  29. 0 1
      virgo.wzfrontend/src/main/resources/static/console/static/js/4352.137c98a5.js
  30. 0 1
      virgo.wzfrontend/src/main/resources/static/console/static/js/494-legacy.e2670ad4.js
  31. 0 1
      virgo.wzfrontend/src/main/resources/static/console/static/js/494.331fa70c.js
  32. 0 0
      virgo.wzfrontend/src/main/resources/static/console/static/js/4947.7d27793c.js
  33. 0 0
      virgo.wzfrontend/src/main/resources/static/console/static/js/5401-legacy.3c1c1c66.js
  34. 1 0
      virgo.wzfrontend/src/main/resources/static/console/static/js/7156-legacy.7fdc8ced.js
  35. 1 0
      virgo.wzfrontend/src/main/resources/static/console/static/js/7156.77a18210.js
  36. 0 0
      virgo.wzfrontend/src/main/resources/static/console/static/js/7527.9da382a7.js
  37. 0 1
      virgo.wzfrontend/src/main/resources/static/console/static/js/7857.3bfbcc13.js
  38. 0 0
      virgo.wzfrontend/src/main/resources/static/console/static/js/7888.999bb001.js
  39. 0 1
      virgo.wzfrontend/src/main/resources/static/console/static/js/8126-legacy.cbd0503d.js
  40. 1 0
      virgo.wzfrontend/src/main/resources/static/console/static/js/8160-legacy.e345906c.js
  41. 1 0
      virgo.wzfrontend/src/main/resources/static/console/static/js/8160.4dc059a8.js
  42. 0 0
      virgo.wzfrontend/src/main/resources/static/console/static/js/8334-legacy.7a65c2c4.js
  43. 1 0
      virgo.wzfrontend/src/main/resources/static/console/static/js/8409.6f90facf.js
  44. 0 1
      virgo.wzfrontend/src/main/resources/static/console/static/js/8463-legacy.00f4be91.js
  45. 0 1
      virgo.wzfrontend/src/main/resources/static/console/static/js/8463.93113765.js
  46. 1 0
      virgo.wzfrontend/src/main/resources/static/console/static/js/8526-legacy.867b30a4.js
  47. 1 0
      virgo.wzfrontend/src/main/resources/static/console/static/js/8526.d4e28b3f.js
  48. 0 0
      virgo.wzfrontend/src/main/resources/static/console/static/js/862.9c327a23.js
  49. 0 0
      virgo.wzfrontend/src/main/resources/static/console/static/js/8663-legacy.50f62b06.js
  50. 0 0
      virgo.wzfrontend/src/main/resources/static/console/static/js/8719.fca584ae.js
  51. 0 0
      virgo.wzfrontend/src/main/resources/static/console/static/js/8722-legacy.ac545969.js
  52. 1 0
      virgo.wzfrontend/src/main/resources/static/console/static/js/8862-legacy.9c9b39eb.js
  53. 1 0
      virgo.wzfrontend/src/main/resources/static/console/static/js/8862.d9b7e3aa.js
  54. 0 1
      virgo.wzfrontend/src/main/resources/static/console/static/js/8988-legacy.4147bd12.js
  55. 0 1
      virgo.wzfrontend/src/main/resources/static/console/static/js/8988.df0b3747.js
  56. 0 0
      virgo.wzfrontend/src/main/resources/static/console/static/js/9254-legacy.b88a403d.js
  57. 0 0
      virgo.wzfrontend/src/main/resources/static/console/static/js/9254.4b474e27.js
  58. 1 0
      virgo.wzfrontend/src/main/resources/static/console/static/js/9310.d6f078b7.js
  59. 0 0
      virgo.wzfrontend/src/main/resources/static/console/static/js/946-legacy.0737e635.js
  60. 0 0
      virgo.wzfrontend/src/main/resources/static/console/static/js/9579.3e647f86.js
  61. 0 0
      virgo.wzfrontend/src/main/resources/static/console/static/js/9733-legacy.d46e6f39.js
  62. 0 0
      virgo.wzfrontend/src/main/resources/static/console/static/js/9794-legacy.2cbeaea9.js
  63. 0 0
      virgo.wzfrontend/src/main/resources/static/console/static/js/9794.0e34e0b2.js
  64. 1 0
      virgo.wzfrontend/src/main/resources/static/console/static/js/app-legacy.7443fe1e.js
  65. 0 1
      virgo.wzfrontend/src/main/resources/static/console/static/js/app-legacy.ef565797.js
  66. 0 1
      virgo.wzfrontend/src/main/resources/static/console/static/js/app.52613df3.js
  67. 1 0
      virgo.wzfrontend/src/main/resources/static/console/static/js/app.82a1beef.js

+ 12 - 3
virgo.wzfrontend/console/src/components/work/operation/meeting/detail.vue

@@ -10,18 +10,26 @@
 				<div class="hui-detail-label">会议日期</div>
 				<div class="hui-detail-value">{{detail.date}}</div>
 			</div>
+			<div class="hui-detail-item">
+				<div class="hui-detail-label">会议类型</div>
+				<div class="hui-detail-value">{{detail.typeName}}</div>
+			</div>
 			<div class="hui-detail-item">
 				<div class="hui-detail-label">会议时长</div>
 				<div class="hui-detail-value">{{detail.duration}}</div>
 			</div>
 			<div class="hui-detail-item">
-				<div class="hui-detail-label">会议类型</div>
-				<div class="hui-detail-value">{{detail.typeName}}</div>
+				<div class="hui-detail-label">发起人</div>
+				<div class="hui-detail-value">{{detail.userName}}</div>
 			</div>
 			<div class="hui-detail-item">
-				<div class="hui-detail-label">会议场所</div>
+				<div class="hui-detail-label">会议地点</div>
 				<div class="hui-detail-value">{{detail.placeName}}</div>
 			</div>
+			<div class="hui-detail-item">
+				<div class="hui-detail-label">会议纪要</div>
+				<div class="hui-detail-value">{{detail.meetingMinutes}}</div>
+			</div>
 		</div>
 		<div v-if="detail.joinUserList.length > 0">
 			<div class="hui-detail-title">参与人员</div>
@@ -60,6 +68,7 @@
 					duration: '',
 					placeId: '',
 					typeId: '',
+					joinUserList: []
 				}
 			}
 		},

+ 9 - 4
virgo.wzfrontend/console/src/components/work/operation/meeting/edit.vue

@@ -5,7 +5,6 @@
 				<el-form-item label="会议名称" prop="name" :rules="[{required: true, message: '请输入会议名称'}]">
 					<el-input type="text" v-model="form.name" placeholder="请输入会议名称"></el-input>
 				</el-form-item>
-
 				<el-form-item label="会议日期" prop="date" :rules="[{required: true, message: '请选择会议日期'}]">
 					<el-date-picker v-model="form.date" value-format="yyyy-MM-dd" type="date" placeholder="请选择会议日期">
 					</el-date-picker>
@@ -32,6 +31,10 @@
 				<el-form-item label="会议内容" class="hui-textarea">
 					<meeting-content ref="content" :list="contentList"></meeting-content>
 				</el-form-item>
+				<el-form-item label="会议纪要" class="hui-textarea">
+					<el-input type="textarea" v-model="form.meetingMinutes" placeholder="请输入会议纪要" resize="none">
+					</el-input>
+				</el-form-item>
 				<el-form-item label="上传附件" class="hui-textarea">
 					<upload ref="upload" :list="responsibility" type="insert" text="上传附件" accept="*"></upload>
 				</el-form-item>
@@ -64,6 +67,7 @@
 					duration: '',
 					placeId: '',
 					typeId: '',
+					meetingMinutes: ''
 				},
 				responsibility: [],
 				meetingPlace: [],
@@ -79,6 +83,7 @@
 				this.form['organizationId'] = this.$store.getters.organization.id;
 				this.form['projectId'] = this.$store.getters.project.id;
 				this.form['type'] = this.type;
+				this.form['userId'] = this.$store.getters.user.userId;
 			} else {
 				getMeetingDetailById(this.detailId).then(res => {
 					if (res.state) {
@@ -104,7 +109,7 @@
 				getMeetingPlaceListByQuery(data).then(res => successFunc(res, 'meetingPlace'));
 				getMeetingTypeListByQuery(data).then(res => successFunc(res, 'meetingType'));
 			},
-			submit() {
+			submit() {
 				this.loading = true;
 				this.$refs.form.validate((valid) => {
 					if (valid) {
@@ -118,13 +123,13 @@
 						} else {
 							insertMeeting(postData).then(this.successFunc);
 						}
-					} else {
+					} else {
 						this.loading = false;
 						return false;
 					}
 				});
 			},
-			successFunc(res) {
+			successFunc(res) {
 				this.loading = false;
 				if (res.state) {
 					this.$message.success('操作成功');

+ 25 - 3
virgo.wzfrontend/console/src/components/work/organization/user/role.vue

@@ -3,8 +3,7 @@
 		<div class="hui-flex-box hui-dialog-content">
 			<el-tree :data="roleData" :props="defaultProps" show-checkbox node-key="id"
 				:default-checked-keys="checkedKeys" ref="tree" :render-after-expand="false">
-				<div :class="(node.childNodes.length == 0 && node.level == 4)? 'tree-node especially' : 'tree-node'"
-					slot-scope="{ node, data }">
+				<div :class="classNode(node)? 'tree-node especially' : 'tree-node'" slot-scope="{ node, data }">
 					<div class="tree-node-label">
 						<span>{{ node.label }}</span>
 					</div>
@@ -44,6 +43,9 @@
 			}
 		},
 		methods: {
+			classNode(node) {
+				return node.data.isMenu === '2';
+			},
 			cssTree() {
 				let classDomList = document.getElementsByClassName('especially')
 				// 改变这几个样式
@@ -117,7 +119,27 @@
 			.el-tree-node__content>.el-tree-node__expand-icon {
 				padding: 6px;
 			}
-		}
 
+			.tree-children-list {
+				display: flex !important;
+
+				.el-tree-node__content {
+					padding: 0 !important;
+				}
+
+				.el-tree-node__expand-icon.el-icon-caret-right {
+					display: none !important;
+				}
+
+				.especially {
+					padding-right: 15px;
+				}
+
+				.el-tree-node__content:hover,
+				.el-tree .el-tree-node:focus>.el-tree-node__content {
+					background: transparent !important;
+				}
+			}
+		}
 	}
 </style>

+ 4 - 2
virgo.wzfrontend/console/src/main.js

@@ -41,9 +41,11 @@ Vue.prototype.$confirm = (title, callback) => {
 		cancelButtonText: '取 消',
 		type: 'warning'
 	}).then(callback).catch(() => {});
-};
-//router拦截器
+};
+//权限控制
 import './uitls/permission'
+//router拦截器
+import './uitls/routerPermission'
 new Vue({
 	router,
 	store,

+ 11 - 67
virgo.wzfrontend/console/src/uitls/permission.js

@@ -1,71 +1,15 @@
-import router from '../router'
-import NProgress from 'nprogress'
-import 'nprogress/nprogress.css'
+import Vue from 'vue'
 import {
-	getToken,
-	getComment,
-	removeToken
+	auth
 } from '@/uitls/auth'
-import store from '../store';
-import {
-	Message
-} from 'element-ui'
-NProgress.configure({
-	showSpinner: false
-})
-const baseUrl = ['/', '/401', '/404', '/loginRegister/login', '/work', '/message', '/work/space/project',
-	'/iot/device/detail', '/work/staging/project', '/work/operation/week/detail'
-];
-
-const testBaseUrl = (path) => { //判断公共路由
-	let nowBaseUrl = ['/loginRegister/login'].filter((item) => {
-		return (item == path && item != '/')
-	})
-	return nowBaseUrl.length == 0;
-}
-/* 消息提示 */
-const tip = (msg, type) => {
-	let types = type || 'warning';
-	Message({
-		message: msg,
-		type: types,
-		duration: 2000
-	});
-}
-const testComment = (path) => { //判断权限路由
-	let comment = getComment() ? JSON.parse(getComment()) : [];
-	let nowComment = comment.concat(baseUrl).filter((item) => {
-		return item == path
-	})
-	return nowComment.length == 0;
-}
-
-
-router.beforeEach((to, from, next) => {
-	if (getToken() && !(store.getters && store.getters.user && store.getters.user.userId) && !sessionStorage
-		.getItem('store')) removeToken();
-	if (to.path.indexOf('website') === -1) {
-		/* 判断是否登录 */
-		if (!getToken() && testBaseUrl(to.path)) return next('/loginRegister/login');
-		/* 判断路由是否存在 */
-		if (to.matched.length === 0) return next('/404');
-		/* 判断是否有权限 */
-		if (testComment(to.path)) return next('/401');
-		/* 无项目时跳转项目列表页面 */
-		if (getToken() && localStorage.getItem('projectId') == 0 && to.path !== '/work/space/project') {
-			tip('暂无项目,请先添加项目');
-			return next('/work/space/project');
-		}
+// 注册一个全局自定义指令 `v-permission`
+Vue.directive('permission', {
+	// 当绑定元素挂载到 DOM 上时
+	inserted: function(el, binding, vnode) {
+		// 获取绑定的权限值
+		const permissionValue = binding.value;
+		// 检查用户权限
+		if (auth(permissionValue)) return;
+		el.style.display = 'none';
 	}
-	NProgress.start();
-	next();
-});
-
-router.afterEach(() => {
-	NProgress.done();
-});
-
-router.onError((error) => {
-	NProgress.done();
-	location.reload();
 });

+ 70 - 0
virgo.wzfrontend/console/src/uitls/routerPermission.js

@@ -0,0 +1,70 @@
+import router from '../router'
+import NProgress from 'nprogress'
+import 'nprogress/nprogress.css'
+import {
+	getToken,
+	getComment,
+	removeToken
+} from '@/uitls/auth'
+import store from '../store';
+import {
+	Message
+} from 'element-ui'
+NProgress.configure({
+	showSpinner: false
+})
+const baseUrl = ['/', '/401', '/404', '/loginRegister/login', '/work', '/message', '/work/space/project',
+	'/iot/device/detail', '/work/staging/project', '/work/operation/week/detail'
+];
+
+const testBaseUrl = (path) => { //判断公共路由
+	let nowBaseUrl = ['/loginRegister/login'].filter((item) => {
+		return (item == path && item != '/')
+	})
+	return nowBaseUrl.length == 0;
+}
+/* 消息提示 */
+const tip = (msg, type) => {
+	let types = type || 'warning';
+	Message({
+		message: msg,
+		type: types,
+		duration: 2000
+	});
+}
+const testComment = (path) => { //判断权限路由
+	let comment = getComment() ? JSON.parse(getComment()) : [];
+	let nowComment = comment.concat(baseUrl).filter((item) => {
+		return item == path
+	})
+	return nowComment.length == 0;
+}
+
+router.beforeEach((to, from, next) => {
+	if (getToken() && !(store.getters && store.getters.user && store.getters.user.userId) && !sessionStorage
+		.getItem('store')) removeToken();
+	if (to.path.indexOf('website') === -1) {
+		/* 判断是否登录 */
+		if (!getToken() && testBaseUrl(to.path)) return next('/loginRegister/login');
+		/* 判断路由是否存在 */
+		if (to.matched.length === 0) return next('/404');
+		/* 判断是否有权限 */
+		if (testComment(to.path)) return next('/401');
+		/* 无项目时跳转项目列表页面 */
+		if (getToken() && localStorage.getItem('projectId') == 0 && to.path !== '/work/space/project') {
+			tip('暂无项目,请先添加项目');
+			return next('/work/space/project');
+		}
+	}
+	NProgress.start();
+	next();
+});
+
+router.afterEach(() => {
+	NProgress.done();
+});
+
+router.onError((error) => {
+	NProgress.done();
+	location.reload();
+});

+ 162 - 160
virgo.wzfrontend/console/src/views/system/main.vue

@@ -1,161 +1,163 @@
-<template>
-	<div class="hui-flex">
-		<div class="hui-flex-box hui-flex hui-table">
-			<div class="hui-content-insert">
-				<el-button type="primary" size="medium" @click="insert(-1)">新增主菜单</el-button>
-			</div>
-			<div class="hui-flex-box">
-				<el-table :data="tableData" row-key="id" border height="100%">
-					<el-table-column prop="title" label="菜单名称" width="180">
-					</el-table-column>
-					<el-table-column prop="iconClass" label="菜单图标" width="180">
-					</el-table-column>
-					<el-table-column prop="index" label="菜单URL">
-					</el-table-column>
-					<el-table-column label="操作" width="180">
-						<template slot-scope="scope">
-							<div class="hui-table-operation">
-								<span class="table-operation" @click="insert(scope.row.id)">新增</span>
-								<span class="table-operation" @click="update(scope.row)">编辑</span>
-								<span class="table-operation" @click="deleteItem(scope.row.id)">删除</span>
-							</div>
-						</template>
-					</el-table-column>
-					<template slot="empty">
-						<empty description="暂无数据"></empty>
-					</template>
-				</el-table>
-			</div>
-		</div>
-		<el-dialog :close-on-click-modal="false" title="菜单" :visible.sync="dialogVisible" width="900px" :append-to-body="true">
-			<edit v-if="dialogVisible" :updateData="updateData" ref="mainForm" @callback="dialogVisible = false"
-				@sure="sure">
-			</edit>
-		</el-dialog>
-	</div>
-</template>
-
-<script>
-	import {
-		getMenuList,
-		insertMenu,
-		updateMenu
-	} from '@/httpApi/system'
-	import edit from '@/components/system/main/edit'
-	import {
-		setComment
-	} from '@/uitls/auth';
-	export default {
-		data() {
-			return {
-				tableData: [],
-				comment: [],
-				dialogVisible: false,
-				tableId: 1,
-				nowDataId: -1,
-				updateData: {},
-				menuData: {},
-				type: ''
-			}
-		},
-		created() {
-			this.init()
-		},
-		methods: {
-			init(type) {
-				getMenuList().then(res => {
-					if (res.state) {
-						if (!res.data || res.data.length === 0) return;
-						this.menuData = res.data[0];
-						this.tableData = JSON.parse(this.menuData.data);
-						this.comment = [];
-						this.testIndex(this.tableData);
-						this.testComment(this.tableData);
-						if (type === 'reload') {
-							this.$store.dispatch('app/changeMenuData', this.tableData);
-							setComment(JSON.stringify(this.comment));
-						}
-					}
-				})
-			},
-			testIndex(tableData) {
-				for (let i = 0; i < tableData.length; i++) {
-					if (tableData[i].id + 1 > this.tableId) this.tableId = tableData[i].id + 1;
-					if (tableData[i].children) this.testIndex(tableData[i].children);
-				}
-			},
-			testComment(item, id, form) {
-				if (id == -1) return item.push(form);
-				if (this.type == 'delete') {
-					let index = item.findIndex(node => node.id == id);
-					if (index > -1) item.splice(index, 1);
-				}
-				for (let i = 0; i < item.length; i++) {
-					if (item[i].id == id) {
-						if (this.type == 'insert') {
-							if (!item[i].children) item[i].children = [];
-							item[i].children.push(form);
-						} else if (this.type == 'update') {
-							item[i] = form;
-						}
-					}
-					if (item[i].index && this.comment.filter(node => node == item[i].index).length == 0) this.comment.push(
-						item[i].index);
-					if (item[i].children) this.testComment(item[i].children, id, form);
-				}
-			},
-			insert(id) {
-				this.type = 'insert';
-				this.nowDataId = id;
-				this.updateData = {};
-				this.dialogVisible = true;
-			},
-			update(item) {
-				this.type = 'update';
-				this.nowDataId = item.id;
-				this.updateData = JSON.parse(JSON.stringify(item));
-				this.dialogVisible = true;
-			},
-			deleteItem(id) {
-				this.type = 'delete';
-				this.nowDataId = id;
-				this.updateData = {};
-				this.sure();
-			},
-			sure() {
-				let obj = JSON.parse(JSON.stringify(this.tableData));
-				this.comment = [];
-				this.testComment(obj, this.nowDataId, this.returnForm());
-				this.menuData.id ? updateMenu({
-					id: this.menuData.id,
-					data: JSON.stringify(obj),
-					comment: JSON.stringify(this.comment)
-				}).then(this.successFunc) : insertMenu({
-					data: JSON.stringify(obj),
-					comment: JSON.stringify(this.comment)
-				}).then(this.successFunc);
-			},
-			returnForm() {
-				if (this.type == 'delete') return {};
-				let form = this.$refs.mainForm.sureIncrease();
-				if (this.type == 'insert') form['id'] = this.tableId;
-				return form;
-			},
-			successFunc(res) {
-				if (res.state) {
-					this.$message({
-						type: 'success',
-						message: '操作成功'
-					})
-					this.init('reload');
-					this.dialogVisible = false;
-				}
-			}
-		},
-		components: {
-			edit
-		},
-	}
-</script>
-
+<template>
+	<div class="hui-flex">
+		<div class="hui-flex-box hui-flex hui-table">
+			<div class="hui-content-insert">
+				<el-button type="primary" size="medium" @click="insert(-1)">新增主菜单</el-button>
+			</div>
+			<div class="hui-flex-box">
+				<el-table :data="tableData" row-key="id" border height="100%">
+					<el-table-column prop="title" label="菜单名称" width="180">
+					</el-table-column>
+					<el-table-column prop="iconClass" label="菜单图标" width="180">
+					</el-table-column>
+					<el-table-column prop="index" label="菜单URL">
+					</el-table-column>
+					<el-table-column label="操作" width="180">
+						<template slot-scope="scope">
+							<div class="hui-table-operation">
+								<span class="table-operation" v-if="scope.row.isMenu === '1'"
+									@click="insert(scope.row.id)">新增</span>
+								<span class="table-operation" @click="update(scope.row)">编辑</span>
+								<span class="table-operation" @click="deleteItem(scope.row.id)">删除</span>
+							</div>
+						</template>
+					</el-table-column>
+					<template slot="empty">
+						<empty description="暂无数据"></empty>
+					</template>
+				</el-table>
+			</div>
+		</div>
+		<el-dialog :close-on-click-modal="false" title="菜单" :visible.sync="dialogVisible" width="900px"
+			:append-to-body="true">
+			<edit v-if="dialogVisible" :updateData="updateData" ref="mainForm" @callback="dialogVisible = false"
+				@sure="sure">
+			</edit>
+		</el-dialog>
+	</div>
+</template>
+
+<script>
+	import {
+		getMenuList,
+		insertMenu,
+		updateMenu
+	} from '@/httpApi/system'
+	import edit from '@/components/system/main/edit'
+	import {
+		setComment
+	} from '@/uitls/auth';
+	export default {
+		data() {
+			return {
+				tableData: [],
+				comment: [],
+				dialogVisible: false,
+				tableId: 1,
+				nowDataId: -1,
+				updateData: {},
+				menuData: {},
+				type: ''
+			}
+		},
+		created() {
+			this.init()
+		},
+		methods: {
+			init(type) {
+				getMenuList().then(res => {
+					if (res.state) {
+						if (!res.data || res.data.length === 0) return;
+						this.menuData = res.data[0];
+						this.tableData = JSON.parse(this.menuData.data);
+						this.comment = [];
+						this.testIndex(this.tableData);
+						this.testComment(this.tableData);
+						if (type === 'reload') {
+							this.$store.dispatch('app/changeMenuData', this.tableData);
+							setComment(JSON.stringify(this.comment));
+						}
+					}
+				})
+			},
+			testIndex(tableData) {
+				for (let i = 0; i < tableData.length; i++) {
+					if (tableData[i].id + 1 > this.tableId) this.tableId = tableData[i].id + 1;
+					if (tableData[i].children) this.testIndex(tableData[i].children);
+				}
+			},
+			testComment(item, id, form) {
+				if (id == -1) return item.push(form);
+				if (this.type == 'delete') {
+					let index = item.findIndex(node => node.id == id);
+					if (index > -1) item.splice(index, 1);
+				}
+				for (let i = 0; i < item.length; i++) {
+					if (item[i].id == id) {
+						if (this.type == 'insert') {
+							if (!item[i].children) item[i].children = [];
+							item[i].children.push(form);
+						} else if (this.type == 'update') {
+							item[i] = form;
+						}
+					}
+					if (item[i].index && this.comment.filter(node => node == item[i].index).length == 0) this.comment.push(
+						item[i].index);
+					if (item[i].children) this.testComment(item[i].children, id, form);
+				}
+			},
+			insert(id) {
+				this.type = 'insert';
+				this.nowDataId = id;
+				this.updateData = {};
+				this.dialogVisible = true;
+			},
+			update(item) {
+				this.type = 'update';
+				this.nowDataId = item.id;
+				this.updateData = JSON.parse(JSON.stringify(item));
+				this.dialogVisible = true;
+			},
+			deleteItem(id) {
+				this.type = 'delete';
+				this.nowDataId = id;
+				this.updateData = {};
+				this.sure();
+			},
+			sure() {
+				let obj = JSON.parse(JSON.stringify(this.tableData));
+				this.comment = [];
+				this.testComment(obj, this.nowDataId, this.returnForm());
+				this.menuData.id ? updateMenu({
+					id: this.menuData.id,
+					data: JSON.stringify(obj),
+					comment: JSON.stringify(this.comment)
+				}).then(this.successFunc) : insertMenu({
+					data: JSON.stringify(obj),
+					comment: JSON.stringify(this.comment)
+				}).then(this.successFunc);
+			},
+			returnForm() {
+				if (this.type == 'delete') return {};
+				let form = this.$refs.mainForm.sureIncrease();
+				if (this.type == 'insert') form['id'] = this.tableId;
+				return form;
+			},
+			successFunc(res) {
+				if (res.state) {
+					this.$message({
+						type: 'success',
+						message: '操作成功'
+					})
+					this.init('reload');
+					this.dialogVisible = false;
+				}
+			}
+		},
+		components: {
+			edit
+		},
+	}
+</script>
+
 <style lang="scss"></style>

+ 5 - 3
virgo.wzfrontend/console/src/views/work/operation/meeting/organization.vue

@@ -15,11 +15,13 @@
 								<div style="text-align: center;">{{scope.$index + 1}}</div>
 							</template>
 						</el-table-column>
-						<el-table-column label="会议日期" prop="date"></el-table-column>
 						<el-table-column label="会议名称" prop="name"></el-table-column>
-						<el-table-column label="会议时长" prop="duration"></el-table-column>
+						<el-table-column label="会议时间" prop="date"></el-table-column>
 						<el-table-column label="会议类型" prop="typeName"></el-table-column>
-						<el-table-column label="会议场所" prop="placeName"></el-table-column>
+						<el-table-column label="会议时长" prop="duration"></el-table-column>
+						<el-table-column label="发起人" prop="userName"></el-table-column>
+						<el-table-column label="会议地点" prop="placeName"></el-table-column>
+						<el-table-column label="会议纪要" prop="meetingMinutes"></el-table-column>
 						<el-table-column label="操作" width="150">
 							<template slot-scope="scope">
 								<div class="hui-table-operation">

+ 152 - 149
virgo.wzfrontend/console/src/views/work/operation/meeting/project.vue

@@ -1,150 +1,153 @@
-<template>
-	<div class="hui-flex hui-content">
-		<div class="hui-flex">
-			<div class="hui-content-title">
-				<div class="hui-title-item active">项目会议</div>
-			</div>
-			<div class="hui-flex-box hui-flex hui-table">
-				<div class="hui-content-insert">
-					<el-button type="primary" size="medium" @click="insert">新增会议</el-button>
-				</div>
-				<div class="hui-flex-box">
-					<el-table :data="tableData" row-key="id" border height="100%">
-						<el-table-column label="序号" width="50">
-							<template slot-scope="scope">
-								<div style="text-align: center;">{{scope.$index + 1}}</div>
-							</template>
-						</el-table-column>
-						<el-table-column label="会议名称" prop="name"></el-table-column>
-						<el-table-column label="会议时间" prop="date"></el-table-column>
-						<el-table-column label="会议类型" prop="typeName"></el-table-column>
-						<el-table-column label="会议时长" prop="duration"></el-table-column>
-						<el-table-column label="会议地点" prop="placeName"></el-table-column>
-						<el-table-column label="操作" width="150">
-							<template slot-scope="scope">
-								<div class="hui-table-operation">
-									<span class="table-operation" @click="detailItem(scope.row)">
-										详情
-									</span>
-									<span class="table-operation" @click="updateItem(scope.row)">
-										编辑
-									</span>
-									<span class="table-operation" @click="deleteItem(scope.row)">
-										删除
-									</span>
-								</div>
-							</template>
-						</el-table-column>
-						<template slot="empty">
-							<empty description="暂无数据"></empty>
-						</template>
-					</el-table>
-				</div>
-				<div class="hui-content-pagination">
-					<el-pagination :page-size="pageSize" :pager-count="9" layout="prev, pager, next" :total="totalCount"
-						@current-change="currentChange">
-					</el-pagination>
-				</div>
-			</div>
-		</div>
-		<el-dialog :close-on-click-modal="false" :title="isUpdate?'编辑':'新增'" :visible.sync="visible" width="900px" :append-to-body="true">
-			<edit v-if="visible" @callback="callback" :isUpdate="isUpdate" :detailId="detailId" :type="type"></edit>
-		</el-dialog>
-		<el-drawer title="会议详情" :visible.sync="drawer" :size="400" :append-to-body="true">
-			<detail v-if="drawer" :detailId="detailId" @callback="callback"></detail>
-		</el-drawer>
-	</div>
-</template>
-
-<script>
-	import {
-		getMeetingListByQuery,
-		deleteMeetingById
-	} from '@/httpApi/operation'
-	import edit from '@/components/work/operation/meeting/edit'
-	import detail from '@/components/work/operation/meeting/detail'
-	export default {
-		data() {
-			return {
-				tableData: [],
-				currPage: 1,
-				pageSize: 10,
-				totalCount: 0,
-				filterOption: {},
-				type: 1,
-				isUpdate: false,
-				visible: false,
-				detailId: '',
-				drawer: false
-			}
-		},
-		created() {
-			this.init();
-		},
-		methods: {
-			init() {
-				let postData = {
-					currPage: this.currPage,
-					pageSize: this.pageSize,
-					organizationId: this.$store.getters.organization.id,
-					projectId: this.$store.getters.project.id,
-					type: this.type
-				}
-				postData = Object.assign(postData, this.filterOption);
-				getMeetingListByQuery(postData).then(res => {
-					if (res.state) {
-						this.tableData = res.data.dataList;
-						this.totalCount = res.data.totalCount;
-					}
-				})
-			},
-			filterInit(option) {
-				this.filterOption = option;
-				this.currPage = 1;
-				this.init();
-			},
-			insert() {
-				this.detailId = '';
-				this.isUpdate = false;
-				this.visible = true;
-			},
-			updateItem(item) {
-				this.detailId = item.id;
-				this.isUpdate = true;
-				this.visible = true;
-			},
-			detailItem(item) {
-				this.detailId = item.id;
-				this.drawer = true;
-			},
-			currentChange(currPage) {
-				this.currPage = currPage;
-				this.init();
-			},
-			deleteItem(item) {
-				this.$confirm('确定要删除该会议记录?', () => {
-					deleteMeetingById(item.id).then(res => {
-						if (res.state) {
-							this.$message({
-								type: 'success',
-								message: '操作成功'
-							})
-							this.init();
-						}
-					})
-				});
-			},
-			callback(type) {
-				if (type === 'init') this.init();
-				this.visible = false;
-			}
-		},
-		components: {
-			edit,
-			detail
-		},
-	}
-</script>
-
-<style>
+<template>
+	<div class="hui-flex hui-content">
+		<div class="hui-flex">
+			<div class="hui-content-title">
+				<div class="hui-title-item active">项目会议</div>
+			</div>
+			<div class="hui-flex-box hui-flex hui-table">
+				<div class="hui-content-insert">
+					<el-button type="primary" size="medium" @click="insert">新增会议</el-button>
+				</div>
+				<div class="hui-flex-box">
+					<el-table :data="tableData" row-key="id" border height="100%">
+						<el-table-column label="序号" width="50">
+							<template slot-scope="scope">
+								<div style="text-align: center;">{{scope.$index + 1}}</div>
+							</template>
+						</el-table-column>
+						<el-table-column label="会议名称" prop="name"></el-table-column>
+						<el-table-column label="会议时间" prop="date"></el-table-column>
+						<el-table-column label="会议类型" prop="typeName"></el-table-column>
+						<el-table-column label="会议时长" prop="duration"></el-table-column>
+						<el-table-column label="发起人" prop="userName"></el-table-column>
+						<el-table-column label="会议地点" prop="placeName"></el-table-column>
+						<el-table-column label="会议纪要" prop="meetingMinutes"></el-table-column>
+						<el-table-column label="操作" width="150">
+							<template slot-scope="scope">
+								<div class="hui-table-operation">
+									<span class="table-operation" @click="detailItem(scope.row)">
+										详情
+									</span>
+									<span class="table-operation" @click="updateItem(scope.row)">
+										编辑
+									</span>
+									<span class="table-operation" @click="deleteItem(scope.row)">
+										删除
+									</span>
+								</div>
+							</template>
+						</el-table-column>
+						<template slot="empty">
+							<empty description="暂无数据"></empty>
+						</template>
+					</el-table>
+				</div>
+				<div class="hui-content-pagination">
+					<el-pagination :page-size="pageSize" :pager-count="9" layout="prev, pager, next" :total="totalCount"
+						@current-change="currentChange">
+					</el-pagination>
+				</div>
+			</div>
+		</div>
+		<el-dialog :close-on-click-modal="false" :title="isUpdate?'编辑':'新增'" :visible.sync="visible" width="900px"
+			:append-to-body="true">
+			<edit v-if="visible" @callback="callback" :isUpdate="isUpdate" :detailId="detailId" :type="type"></edit>
+		</el-dialog>
+		<el-drawer title="会议详情" :visible.sync="drawer" :size="400" :append-to-body="true">
+			<detail v-if="drawer" :detailId="detailId" @callback="callback"></detail>
+		</el-drawer>
+	</div>
+</template>
+
+<script>
+	import {
+		getMeetingListByQuery,
+		deleteMeetingById
+	} from '@/httpApi/operation'
+	import edit from '@/components/work/operation/meeting/edit'
+	import detail from '@/components/work/operation/meeting/detail'
+	export default {
+		data() {
+			return {
+				tableData: [],
+				currPage: 1,
+				pageSize: 10,
+				totalCount: 0,
+				filterOption: {},
+				type: 1,
+				isUpdate: false,
+				visible: false,
+				detailId: '',
+				drawer: false
+			}
+		},
+		created() {
+			this.init();
+		},
+		methods: {
+			init() {
+				let postData = {
+					currPage: this.currPage,
+					pageSize: this.pageSize,
+					organizationId: this.$store.getters.organization.id,
+					projectId: this.$store.getters.project.id,
+					type: this.type
+				}
+				postData = Object.assign(postData, this.filterOption);
+				getMeetingListByQuery(postData).then(res => {
+					if (res.state) {
+						this.tableData = res.data.dataList;
+						this.totalCount = res.data.totalCount;
+					}
+				})
+			},
+			filterInit(option) {
+				this.filterOption = option;
+				this.currPage = 1;
+				this.init();
+			},
+			insert() {
+				this.detailId = '';
+				this.isUpdate = false;
+				this.visible = true;
+			},
+			updateItem(item) {
+				this.detailId = item.id;
+				this.isUpdate = true;
+				this.visible = true;
+			},
+			detailItem(item) {
+				this.detailId = item.id;
+				this.drawer = true;
+			},
+			currentChange(currPage) {
+				this.currPage = currPage;
+				this.init();
+			},
+			deleteItem(item) {
+				this.$confirm('确定要删除该会议记录?', () => {
+					deleteMeetingById(item.id).then(res => {
+						if (res.state) {
+							this.$message({
+								type: 'success',
+								message: '操作成功'
+							})
+							this.init();
+						}
+					})
+				});
+			},
+			callback(type) {
+				if (type === 'init') this.init();
+				this.visible = false;
+			}
+		},
+		components: {
+			edit,
+			detail
+		},
+	}
+</script>
+
+<style>
 </style>

+ 1 - 1
virgo.wzfrontend/console/src/views/work/property/register.vue

@@ -37,7 +37,7 @@
 					</div>
 					<div class="hui-flex-box hui-flex hui-table">
 						<div class="hui-content-insert">
-							<el-button type="primary" size="medium" @click="insert">新增登记</el-button>
+							<el-button v-permission="'/work/property/register/add'" type="primary" size="medium" @click="insert">新增登记</el-button>
 						</div>
 						<div class="hui-flex-box">
 							<el-table :data="tableData" row-key="id" border height="100%">

File diff suppressed because it is too large
+ 1 - 1
virgo.wzfrontend/src/main/resources/static/console/index.html


File diff suppressed because it is too large
+ 0 - 1
virgo.wzfrontend/src/main/resources/static/console/static/css/1911.48fa06e5.css


virgo.wzfrontend/src/main/resources/static/console/static/css/2942.f275a232.css → virgo.wzfrontend/src/main/resources/static/console/static/css/2632.f275a232.css


File diff suppressed because it is too large
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/console/static/css/4238.86bf52d4.css


File diff suppressed because it is too large
+ 0 - 1
virgo.wzfrontend/src/main/resources/static/console/static/css/7857.48fa06e5.css


virgo.wzfrontend/src/main/resources/static/console/static/css/8126.f275a232.css → virgo.wzfrontend/src/main/resources/static/console/static/css/8409.f275a232.css


File diff suppressed because it is too large
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/console/static/css/9310.86bf52d4.css


virgo.wzfrontend/src/main/resources/static/console/static/js/1184-legacy.025934d0.js → virgo.wzfrontend/src/main/resources/static/console/static/js/1184-legacy.4aa8f86e.js


virgo.wzfrontend/src/main/resources/static/console/static/js/1589-legacy.d96e6a2b.js → virgo.wzfrontend/src/main/resources/static/console/static/js/1589-legacy.cfe975b5.js


virgo.wzfrontend/src/main/resources/static/console/static/js/1888.d6fba9bc.js → virgo.wzfrontend/src/main/resources/static/console/static/js/1888.7481c504.js


File diff suppressed because it is too large
+ 0 - 1
virgo.wzfrontend/src/main/resources/static/console/static/js/1911-legacy.a51161ab.js


virgo.wzfrontend/src/main/resources/static/console/static/js/2550-legacy.e4302610.js → virgo.wzfrontend/src/main/resources/static/console/static/js/2550-legacy.09d8909c.js


virgo.wzfrontend/src/main/resources/static/console/static/js/258.7f089b51.js → virgo.wzfrontend/src/main/resources/static/console/static/js/258.97fc8042.js


File diff suppressed because it is too large
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/console/static/js/2632-legacy.5976db66.js


File diff suppressed because it is too large
+ 0 - 1
virgo.wzfrontend/src/main/resources/static/console/static/js/2942.7a0eeee4.js


virgo.wzfrontend/src/main/resources/static/console/static/js/3006.95e3608d.js → virgo.wzfrontend/src/main/resources/static/console/static/js/3006.9f4a8aca.js


File diff suppressed because it is too large
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/console/static/js/4238-legacy.66a46740.js


File diff suppressed because it is too large
+ 0 - 1
virgo.wzfrontend/src/main/resources/static/console/static/js/4352-legacy.6a005707.js


File diff suppressed because it is too large
+ 0 - 1
virgo.wzfrontend/src/main/resources/static/console/static/js/4352.137c98a5.js


File diff suppressed because it is too large
+ 0 - 1
virgo.wzfrontend/src/main/resources/static/console/static/js/494-legacy.e2670ad4.js


File diff suppressed because it is too large
+ 0 - 1
virgo.wzfrontend/src/main/resources/static/console/static/js/494.331fa70c.js


virgo.wzfrontend/src/main/resources/static/console/static/js/4947.b6571952.js → virgo.wzfrontend/src/main/resources/static/console/static/js/4947.7d27793c.js


virgo.wzfrontend/src/main/resources/static/console/static/js/5401-legacy.e387793c.js → virgo.wzfrontend/src/main/resources/static/console/static/js/5401-legacy.3c1c1c66.js


File diff suppressed because it is too large
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/console/static/js/7156-legacy.7fdc8ced.js


File diff suppressed because it is too large
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/console/static/js/7156.77a18210.js


virgo.wzfrontend/src/main/resources/static/console/static/js/7527.353b5886.js → virgo.wzfrontend/src/main/resources/static/console/static/js/7527.9da382a7.js


File diff suppressed because it is too large
+ 0 - 1
virgo.wzfrontend/src/main/resources/static/console/static/js/7857.3bfbcc13.js


virgo.wzfrontend/src/main/resources/static/console/static/js/7888.938ddf2c.js → virgo.wzfrontend/src/main/resources/static/console/static/js/7888.999bb001.js


File diff suppressed because it is too large
+ 0 - 1
virgo.wzfrontend/src/main/resources/static/console/static/js/8126-legacy.cbd0503d.js


File diff suppressed because it is too large
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/console/static/js/8160-legacy.e345906c.js


File diff suppressed because it is too large
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/console/static/js/8160.4dc059a8.js


virgo.wzfrontend/src/main/resources/static/console/static/js/8334-legacy.636221a3.js → virgo.wzfrontend/src/main/resources/static/console/static/js/8334-legacy.7a65c2c4.js


File diff suppressed because it is too large
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/console/static/js/8409.6f90facf.js


File diff suppressed because it is too large
+ 0 - 1
virgo.wzfrontend/src/main/resources/static/console/static/js/8463-legacy.00f4be91.js


File diff suppressed because it is too large
+ 0 - 1
virgo.wzfrontend/src/main/resources/static/console/static/js/8463.93113765.js


File diff suppressed because it is too large
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/console/static/js/8526-legacy.867b30a4.js


File diff suppressed because it is too large
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/console/static/js/8526.d4e28b3f.js


virgo.wzfrontend/src/main/resources/static/console/static/js/862.0fb2e72b.js → virgo.wzfrontend/src/main/resources/static/console/static/js/862.9c327a23.js


virgo.wzfrontend/src/main/resources/static/console/static/js/8663-legacy.e1c691f0.js → virgo.wzfrontend/src/main/resources/static/console/static/js/8663-legacy.50f62b06.js


virgo.wzfrontend/src/main/resources/static/console/static/js/8719.a13647b5.js → virgo.wzfrontend/src/main/resources/static/console/static/js/8719.fca584ae.js


virgo.wzfrontend/src/main/resources/static/console/static/js/8722-legacy.6d8c67c3.js → virgo.wzfrontend/src/main/resources/static/console/static/js/8722-legacy.ac545969.js


File diff suppressed because it is too large
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/console/static/js/8862-legacy.9c9b39eb.js


File diff suppressed because it is too large
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/console/static/js/8862.d9b7e3aa.js


File diff suppressed because it is too large
+ 0 - 1
virgo.wzfrontend/src/main/resources/static/console/static/js/8988-legacy.4147bd12.js


File diff suppressed because it is too large
+ 0 - 1
virgo.wzfrontend/src/main/resources/static/console/static/js/8988.df0b3747.js


virgo.wzfrontend/src/main/resources/static/console/static/js/9254-legacy.195266dc.js → virgo.wzfrontend/src/main/resources/static/console/static/js/9254-legacy.b88a403d.js


virgo.wzfrontend/src/main/resources/static/console/static/js/9254.45264b57.js → virgo.wzfrontend/src/main/resources/static/console/static/js/9254.4b474e27.js


File diff suppressed because it is too large
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/console/static/js/9310.d6f078b7.js


virgo.wzfrontend/src/main/resources/static/console/static/js/946-legacy.76a9107d.js → virgo.wzfrontend/src/main/resources/static/console/static/js/946-legacy.0737e635.js


virgo.wzfrontend/src/main/resources/static/console/static/js/9579.9fd65441.js → virgo.wzfrontend/src/main/resources/static/console/static/js/9579.3e647f86.js


virgo.wzfrontend/src/main/resources/static/console/static/js/9733-legacy.78b77527.js → virgo.wzfrontend/src/main/resources/static/console/static/js/9733-legacy.d46e6f39.js


virgo.wzfrontend/src/main/resources/static/console/static/js/9794-legacy.abfec201.js → virgo.wzfrontend/src/main/resources/static/console/static/js/9794-legacy.2cbeaea9.js


virgo.wzfrontend/src/main/resources/static/console/static/js/9794.2519d250.js → virgo.wzfrontend/src/main/resources/static/console/static/js/9794.0e34e0b2.js


File diff suppressed because it is too large
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/console/static/js/app-legacy.7443fe1e.js


File diff suppressed because it is too large
+ 0 - 1
virgo.wzfrontend/src/main/resources/static/console/static/js/app-legacy.ef565797.js


File diff suppressed because it is too large
+ 0 - 1
virgo.wzfrontend/src/main/resources/static/console/static/js/app.52613df3.js


File diff suppressed because it is too large
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/console/static/js/app.82a1beef.js