whx hai 1 ano
pai
achega
212deacd48
Modificáronse 24 ficheiros con 868 adicións e 436 borrados
  1. 1 1
      virgo.wzfrontend/console/src/axios/index.js
  2. 3 1
      virgo.wzfrontend/console/src/components/common/cc.vue
  3. 1 1
      virgo.wzfrontend/console/src/components/common/projectItem.vue
  4. 37 0
      virgo.wzfrontend/console/src/components/common/selectHouse.vue
  5. 122 0
      virgo.wzfrontend/console/src/components/work/crm/customer/detail.vue
  6. 142 0
      virgo.wzfrontend/console/src/components/work/crm/customer/edit.vue
  7. 2 2
      virgo.wzfrontend/console/src/components/work/organization/depart/detail.vue
  8. 1 33
      virgo.wzfrontend/console/src/components/work/organization/user/detail.vue
  9. 94 125
      virgo.wzfrontend/console/src/components/work/organization/user/edit.vue
  10. 0 107
      virgo.wzfrontend/console/src/components/work/organization/user/infoForm.vue
  11. 122 122
      virgo.wzfrontend/console/src/components/work/organization/user/role.vue
  12. 2 2
      virgo.wzfrontend/console/src/components/work/space/house/detail.vue
  13. 1 1
      virgo.wzfrontend/console/src/components/work/space/house/edit.vue
  14. 49 17
      virgo.wzfrontend/console/src/config/field.js
  15. 58 0
      virgo.wzfrontend/console/src/httpApi/crm.js
  16. 46 1
      virgo.wzfrontend/console/src/httpApi/organization.js
  17. 4 2
      virgo.wzfrontend/console/src/layout/work.vue
  18. 23 0
      virgo.wzfrontend/console/src/router/modules/crm.js
  19. 8 0
      virgo.wzfrontend/console/src/views/work/crm/agent.vue
  20. 123 0
      virgo.wzfrontend/console/src/views/work/crm/customer.vue
  21. 9 0
      virgo.wzfrontend/console/src/views/work/crm/highseas.vue
  22. 5 1
      virgo.wzfrontend/console/src/views/work/organization/depart.vue
  23. 12 17
      virgo.wzfrontend/console/src/views/work/organization/user.vue
  24. 3 3
      virgo.wzfrontend/console/src/views/work/space/project.vue

+ 1 - 1
virgo.wzfrontend/console/src/axios/index.js

@@ -36,7 +36,7 @@ service.interceptors.response.use(
 		const res = response.data;
 		let url = response.config.url;
 		if (!res.code) return res;
-		if (res.code != '200') tip(res.message || res.msg);
+		if (res.code != '200' && res.code != '20001') tip(res.message || res.msg);
 		return {
 			state: res.code == '200',
 			data: res.data,

+ 3 - 1
virgo.wzfrontend/console/src/components/common/cc.vue

@@ -28,7 +28,9 @@
 				visible: false
 			}
 		},
-		created() {},
+		created() {
+			if (!!this.ccList) this.list = this.ccList;
+		},
 		methods: {
 			callBack(data) {
 				this.visible = false;

+ 1 - 1
virgo.wzfrontend/console/src/components/common/projectItem.vue

@@ -20,7 +20,7 @@
 		getProjectDetailById,
 	} from '@/httpApi/space'
 	export default {
-		props: ['form', 'room'],
+		props: ['form'],
 		data() {
 			return {
 				formBox: {

+ 37 - 0
virgo.wzfrontend/console/src/components/common/selectHouse.vue

@@ -0,0 +1,37 @@
+<template>
+	<div class="select-house">
+		<el-cascader :options="options" :props="props" collapse-tags clearable></el-cascader>
+	</div>
+</template>
+
+<script>
+	import {
+		getProjectDetailById,
+	} from '@/httpApi/space'
+	export default {
+		name: 'selectHouse',
+		data() {
+			return {
+				props: {
+					options: [],
+					multiple: true
+				},
+			}
+		},
+		created() {
+			this.init();
+		},
+		methods: {
+			init() {
+				getProjectDetailById(this.$store.getters.project.id).then(res => {
+					if (res.state) {
+						console.log(res.data);
+					}
+				})
+			},
+		},
+	}
+</script>
+
+<style>
+</style>

+ 122 - 0
virgo.wzfrontend/console/src/components/work/crm/customer/detail.vue

@@ -0,0 +1,122 @@
+<template>
+	<div class="hui-detail">
+		<div class="hui-detail-title">基础信息</div>
+		<div class="hui-detail-content">
+			<div class="hui-detail-item">
+				<div class="hui-detail-label">客户名称</div>
+				<div class="hui-detail-value">{{detail.name}}</div>
+			</div>
+			<div class="hui-detail-item">
+				<div class="hui-detail-label">客户类型</div>
+				<div class="hui-detail-value">{{$field.findTypeName('customerType',detail.type)}}</div>
+			</div>
+			<div class="hui-detail-item">
+				<div class="hui-detail-label">联系人</div>
+				<div class="hui-detail-value">{{detail.person}}</div>
+			</div>
+			<div class="hui-detail-item">
+				<div class="hui-detail-label">联系电话</div>
+				<div class="hui-detail-value">{{detail.phone}}</div>
+			</div>
+
+			<div class="hui-detail-item">
+				<div class="hui-detail-label">微信号</div>
+				<div class="hui-detail-value">{{detail.weChatAccount}}</div>
+			</div>
+			<div class="hui-detail-item">
+				<div class="hui-detail-label">职位</div>
+				<div class="hui-detail-value">{{detail.job}}</div>
+			</div>
+			<div class="hui-detail-item">
+				<div class="hui-detail-label">跟进状态</div>
+				<div class="hui-detail-value">{{$field.findTypeName('followUpState',detail.followUpState)}}</div>
+			</div>
+			<div class="hui-detail-item">
+				<div class="hui-detail-label">需求区间</div>
+				<div class="hui-detail-value">{{detail.demand}}</div>
+			</div>
+			<div class="hui-detail-item">
+				<div class="hui-detail-label">装修需求</div>
+				<div class="hui-detail-value">{{detail.decorationRequirements}}</div>
+			</div>
+			<div class="hui-detail-item">
+				<div class="hui-detail-label">客户行业</div>
+				<div class="hui-detail-value">{{detail.customerIndustry}}</div>
+			</div>
+			<div class="hui-detail-item">
+				<div class="hui-detail-label">跟进人</div>
+				<div class="hui-detail-value">{{detail.followUpPerson}}</div>
+			</div>
+			<div class="hui-detail-item">
+				<div class="hui-detail-label">联系人</div>
+				<div class="hui-detail-value">{{detail.person}}</div>
+			</div>
+
+			<div class="hui-detail-item">
+				<div class="hui-detail-label">备注</div>
+				<div class="hui-detail-value">{{detail.remark}}</div>
+			</div>
+		</div>
+		<div class="hui-detail-title">首次来访</div>
+		<div class="hui-detail-content">
+			<div class="hui-detail-item">
+				<div class="hui-detail-label">来访时间</div>
+				<div class="hui-detail-value">{{detail.visitingTime}}</div>
+			</div>
+			<div class="hui-detail-item">
+				<div class="hui-detail-label">带看房源</div>
+				<div class="hui-detail-value">{{detail.firsTimeRoom}}</div>
+			</div>
+			<div class="hui-detail-item">
+				<div class="hui-detail-label">来访渠道</div>
+				<div class="hui-detail-value">{{detail.visitingChannels}}</div>
+			</div>
+		</div>
+	</div>
+</template>
+
+<script>
+	import {
+		getCustomerDetailById
+	} from '@/httpApi/crm'
+	export default {
+		props: ['detailId'],
+		data() {
+			return {
+				detail: {
+					name: '',
+					type: '',
+					person: '',
+					phone: '',
+					organizationId: '',
+					weChatAccount: '',
+					followUpState: '',
+					job: '',
+					demand: '',
+					decorationRequirements: '',
+					customerIndustry: '',
+					followUpPerson: '',
+					firsTimeRoom: '',
+					visitingChannels: '',
+					visitingTime: '',
+					remark: ''
+				}
+			}
+		},
+		created() {
+			if (this.detailId) this.init();
+		},
+		methods: {
+			init() {
+				getCustomerDetailById(this.detailId).then(res => {
+					if (res.state) {
+						this.detail = res.data;
+					}
+				})
+			}
+		},
+	}
+</script>
+<style lang="scss">
+
+</style>

+ 142 - 0
virgo.wzfrontend/console/src/components/work/crm/customer/edit.vue

@@ -0,0 +1,142 @@
+<template>
+	<div class="hui-flex hui-dialog">
+		<div class="hui-flex-box hui-dialog-content">
+			<el-form ref="customerForm" label-position="top" :model="customerForm">
+				<el-form-item label="客户名称" prop="name" :rules="[{required: true, message: '请输入客户名称'}]">
+					<el-input type="text" v-model="customerForm.name" placeholder="请输入客户名称"></el-input>
+				</el-form-item>
+				<el-form-item label="客户类型" prop="type" :rules="[{required: true, message: '请选择客户类型'}]">
+					<el-select v-model="customerForm.type" placeholder="请选择客户类型">
+						<el-option :label="item.name" :value="item.id" v-for="(item,index) in $field.field.customerType"
+							:key="item.id">
+						</el-option>
+					</el-select>
+				</el-form-item>
+				<el-form-item label="联系人" prop="person" :rules="[{required: true, message: '请输入联系人'}]">
+					<el-input type="text" v-model="customerForm.person" placeholder="请输入联系人"></el-input>
+				</el-form-item>
+				<el-form-item label="联系电话" prop="phone" :rules="[{required: true, message: '请输入客户名称'}]">
+					<el-input type="text" v-model="customerForm.phone" placeholder="请输入客户名称"></el-input>
+				</el-form-item>
+				<el-form-item label="微信号" prop="weChatAccount">
+					<el-input type="text" v-model="customerForm.weChatAccount" placeholder="请输入微信号"></el-input>
+				</el-form-item>
+				<el-form-item label="职位" prop="job">
+					<el-input type="text" v-model="customerForm.job" placeholder="请输入职位"></el-input>
+				</el-form-item>
+				<el-form-item label="跟进状态" prop="followUpState" :rules="[{required: true, message: '请选择跟进状态'}]">
+					<el-select v-model="customerForm.followUpState" placeholder="请选择跟进状态">
+						<el-option :label="item.name" :value="item.id"
+							v-for="(item,index) in $field.field.followUpState" :key="item.id">
+						</el-option>
+					</el-select>
+				</el-form-item>
+				<el-form-item label="需求区间" prop="demand" :rules="[{required: true, message: '请输入需求区间'}]">
+					<el-input type="text" v-model="customerForm.demand" placeholder="请输入需求区间"></el-input>
+				</el-form-item>
+				<el-form-item label="装修需求" prop="decorationRequirements"
+					:rules="[{required: true, message: '请输入装修需求'}]">
+					<el-input type="text" v-model="customerForm.decorationRequirements" placeholder="请输入装修需求">
+					</el-input>
+				</el-form-item>
+				<el-form-item label="客户行业" prop="customerIndustry" :rules="[{required: true, message: '请输入客户行业'}]">
+					<el-input type="text" v-model="customerForm.customerIndustry" placeholder="请输入客户行业"></el-input>
+				</el-form-item>
+				<el-form-item label="跟进人" prop="followUpPerson">
+					<el-input type="text" v-model="customerForm.followUpPerson" placeholder="请输入跟进人"></el-input>
+				</el-form-item>
+				<el-form-item label="来访渠道" prop="visitingChannels" :rules="[{required: true, message: '请输入来访渠道'}]">
+					<el-input type="text" v-model="customerForm.visitingChannels" placeholder="请输入来访渠道"></el-input>
+				</el-form-item>
+				<el-form-item label="首次来访时间" prop="visitingTime" :rules="[{required: true, message: '请选择首次来访时间'}]">
+					<el-date-picker v-model="customerForm.visitingTime" value-format="yyyy-MM-dd" type="date"
+						placeholder="请选择首次来访时间">
+					</el-date-picker>
+				</el-form-item>
+				<el-form-item label="首次带看房源" prop="firsTimeRoom">
+					<select-house></select-house>
+				</el-form-item>
+				<el-form-item label="备注" class="hui-textarea">
+					<el-input type="textarea" v-model="customerForm.remark" placeholder="请输入备注" resize="none">
+					</el-input>
+				</el-form-item>
+			</el-form>
+		</div>
+		<div class="hui-dialog-submit">
+			<el-button size="medium" @click="$emit('callback')">取 消</el-button>
+			<el-button size="medium" type="primary" @click="submit">保 存</el-button>
+		</div>
+	</div>
+</template>
+
+<script>
+	import {
+		insertCustomer,
+		getCustomerDetailById,
+		updateCustomer
+	} from '@/httpApi/crm'
+	import selectHouse from '@/components/common/selectHouse';
+
+	export default {
+		props: ['isUpdate', 'detailId'],
+		data() {
+			return {
+				customerForm: {
+					name: '',
+					type: '',
+					person: '',
+					phone: '',
+					organizationId: '',
+					weChatAccount: '',
+					followUpState: '',
+					job: '',
+					demand: '',
+					decorationRequirements: '',
+					customerIndustry: '',
+					followUpPerson: '',
+					firsTimeRoom: '',
+					visitingChannels: '',
+					visitingTime: '',
+					remark: ''
+				}
+			}
+		},
+		created() {
+			this.customerForm['organizationId'] = this.$store.getters.user.organization.id;
+			if (this.isUpdate) {
+				getCustomerDetailById(this.detailId).then(res => {
+					if (res.state) {
+						this.customerForm = res.data;
+					}
+				})
+			}
+		},
+		methods: {
+			submit() {
+				this.$refs.customerForm.validate((valid) => {
+					if (valid) {
+						let postData = JSON.parse(JSON.stringify(this.customerForm));
+						if (this.isUpdate) {
+							updateCustomer(postData).then(this.successFunc);
+						} else {
+							insertCustomer(postData).then(this.successFunc);
+						}
+					} else {
+						return false;
+					}
+				});
+			},
+			successFunc(res) {
+				if (res.state) {
+					this.$message.success('操作成功');
+					this.$emit('callback', 'init');
+				}
+			}
+		},
+		components: {
+			selectHouse
+		},
+	}
+</script>
+
+<style lang="scss"></style>

+ 2 - 2
virgo.wzfrontend/console/src/components/work/organization/depart/detail.vue

@@ -8,10 +8,10 @@
 			</div>
 			<div class="hui-detail-item">
 				<div class="hui-detail-label">部门人数</div>
-				<div class="hui-detail-value">{{detail.userCount}}</div>
+				<div class="hui-detail-value">{{!detail.users ? 0 : detail.users.length}}</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.remark}}</div>
 			</div>
 		</div>

+ 1 - 33
virgo.wzfrontend/console/src/components/work/organization/user/detail.vue

@@ -26,33 +26,11 @@
 				<div class="hui-detail-label">部门</div>
 				<div class="hui-detail-value">{{user.partName}}</div>
 			</div>
-			<div class="hui-detail-item">
-				<div class="hui-detail-label">入职时间</div>
-				<div class="hui-detail-value">{{operateUserInfo.entryDate || '-'}}</div>
-			</div>
-			<div class="hui-detail-item">
-				<div class="hui-detail-label">工作状态</div>
-				<div class="hui-detail-value">
-					<div class="hui-tag" v-if="operateUserInfo.state === 1">在职</div>
-					<div class="hui-tag hui-tag-warning" v-else-if="operateUserInfo.state === 2">请假</div>
-					<div class="hui-tag hui-tag-error" v-else-if="operateUserInfo.state === 3">离职</div>
-					<span v-else>-</span>
-				</div>
-			</div>
-			<div class="hui-detail-item">
-				<div class="hui-detail-label">空间位置</div>
-				<div class="hui-detail-value">
-					{{operateUserInfo.projectItemTargetRoomName || operateUserInfo.projectItemTargetName || operateUserInfo.projectItemName || '-'}}
-				</div>
-			</div>
 		</div>
 	</div>
 </template>
 
 <script>
-	import {
-		getOperationUserInfo
-	} from '@/httpApi/loginRegister'
 	import avatar from '@/components/common/avatar'
 	export default {
 		props: ['user'],
@@ -66,17 +44,7 @@
 			if (this.user.id) this.init();
 		},
 		methods: {
-			init() {
-				getOperationUserInfo({
-					projectId: this.$store.getters.project.id,
-					operateOrganizationId: this.$store.getters.organization.id,
-					userId: this.user.id
-				}).then(res => {
-					if (res.state) {
-						this.operateUserInfo = res.data || {}
-					}
-				})
-			}
+			init() {}
 		},
 		components: {
 			avatar

+ 94 - 125
virgo.wzfrontend/console/src/components/work/organization/user/edit.vue

@@ -1,126 +1,95 @@
-<template>
-	<div class="hui-flex hui-dialog">
-		<div class="hui-flex-box hui-dialog-content">
-			<el-form :model="userForm" :rules="userRulers" ref="userForm" label-position="top">
-				<el-alert title="该账号已存在,请直接保存" show-icon type="success" :closable="false" v-if="alertShow"
-					style="margin-bottom: 10px;"></el-alert>
-				<el-form-item label="手机号" prop="phone">
-					<el-input v-model="userForm.phone"></el-input>
-				</el-form-item>
-				<el-form-item label="密码" prop="pwd" v-if="show">
-					<el-input type="password" v-model="userForm.pwd"></el-input>
-				</el-form-item>
-				<el-form-item label="确认密码" prop="checkPwd" v-if="show">
-					<el-input type="password" v-model="userForm.checkPwd"></el-input>
-				</el-form-item>
-				<el-form-item label="姓名" prop="name" v-if="show">
-					<el-input v-model="userForm.name"></el-input>
-				</el-form-item>
-				<el-form-item label="性别" v-if="show">
-					<el-radio-group v-model="userForm.sex">
-						<el-radio label="M">男</el-radio>
-						<el-radio label="W">女</el-radio>
-					</el-radio-group>
-				</el-form-item>
-				<el-form-item label="邮箱" v-if="show">
-					<el-input v-model="userForm.email"></el-input>
-				</el-form-item>
-			</el-form>
-		</div>
-		<div class="hui-dialog-submit">
-			<el-button size="medium" @click="$emit('callback')">取 消</el-button>
-			<el-button size="medium" type="primary" @click="submit">保 存</el-button>
-		</div>
-	</div>
-</template>
-
-<script>
-	import {
-		insertUser
-	} from '@/httpApi/space'
-	import {
-		testPhone
-	} from '@/httpApi/loginRegister'
-	export default {
-		props: ['part'],
-		data() {
-			return {
-				userForm: {
-					pwd: '',
-					checkPwd: '',
-					name: '',
-					sex: 'M',
-					phone: '',
-					email: ''
-				},
-				userRulers: {
-					name: [{
-						required: true,
-						message: '请输入姓名',
-						trigger: 'blur'
-					}],
-					pwd: [{
-						required: true,
-						message: '请输入密码',
-						trigger: 'blur'
-					}, {
-						min: 6,
-						max: 18,
-						message: '密码长度在6-18位之间',
-					}],
-					checkPwd: [{
-						validator: (rule, value, callback) => {
-							//再次输入密码验证规则
-							if (value !== this.userForm.pwd) {
-								callback(new Error('两次输入密码不一致!'));
-							} else {
-								callback();
-							}
-						},
-						trigger: 'change'
-					}],
-					phone: [{
-						required: true,
-						message: '请输入手机号',
-						trigger: 'blur'
-					}, {
-						validator: (rule, value, callback) => {
-							if (!/^1[123456789]\d{9}$/.test(value)) {
-								callback(new Error("请输入正确的手机号"));
-							} else {
-								testPhone(value).then(data => {
-									this.show = data.state;
-									this.alertShow = !data.state;
-									callback()
-								})
-							}
-						},
-						trigger: 'blur'
-					}],
-				},
-				show: false,
-				alertShow: false
-			}
-		},
-		methods: {
-			submit() {
-				this.$nextTick(() => {
-					this.$refs.userForm.validate(valid => {
-						if (valid) {
-							insertUser(this.$store.getters.organization.id, this.$store.getters.project.id,
-								this.part.id, this.userForm).then(res => {
-								if (res.state) {
-									this.$emit('callback', 'init');
-									this.$message.success('操作成功');
-								}
-							})
-						} else {
-							return false;
-						}
-					});
-				});
-
-			}
-		}
-	}
+<template>
+	<div class="hui-flex hui-dialog">
+		<div class="hui-flex-box hui-dialog-content">
+			<el-form :model="userForm" :rules="userRulers" ref="userForm" label-position="top">
+				<el-alert title="该账号已存在,请直接保存" show-icon type="success" :closable="false" v-if="alertShow"
+					style="margin-bottom: 10px;"></el-alert>
+				<el-form-item label="手机号" prop="phone">
+					<el-input v-model="userForm.phone" autocomplete="off"></el-input>
+				</el-form-item>
+				<el-form-item label="姓名" prop="name" v-if="show">
+					<el-input v-model="userForm.name" autocomplete="off"></el-input>
+				</el-form-item>
+				<el-form-item label="性别" v-if="show">
+					<el-radio-group v-model="userForm.sex">
+						<el-radio label="M">男</el-radio>
+						<el-radio label="W">女</el-radio>
+					</el-radio-group>
+				</el-form-item>
+				<el-form-item label="邮箱" v-if="show">
+					<el-input v-model="userForm.email"></el-input>
+				</el-form-item>
+			</el-form>
+		</div>
+		<div class="hui-dialog-submit">
+			<el-button size="medium" @click="$emit('callback')">取 消</el-button>
+			<el-button size="medium" type="primary" @click="submit">保 存</el-button>
+		</div>
+	</div>
+</template>
+
+<script>
+	import {
+		insertUser,
+		testPhone
+	} from '@/httpApi/organization'
+	export default {
+		props: ['part'],
+		data() {
+			return {
+				userForm: {
+					name: '',
+					sex: 'M',
+					phone: '',
+					email: ''
+				},
+				userRulers: {
+					name: [{
+						required: true,
+						message: '请输入姓名',
+						trigger: 'blur'
+					}],
+					phone: [{
+						required: true,
+						message: '请输入手机号',
+						trigger: 'blur'
+					}, {
+						validator: (rule, value, callback) => {
+							if (!/^1[123456789]\d{9}$/.test(value)) {
+								callback(new Error("请输入正确的手机号"));
+							} else {
+								testPhone(value).then(data => {
+									this.show = !data.data;
+									this.alertShow = !this.show;
+									callback()
+								})
+							}
+						},
+						trigger: 'blur'
+					}],
+				},
+				show: false,
+				alertShow: false
+			}
+		},
+		methods: {
+			submit() {
+				this.$nextTick(() => {
+					this.$refs.userForm.validate(valid => {
+						if (valid) {
+							insertUser(this.$store.getters.organization.id, this.part.id, this.userForm)
+								.then(res => {
+									if (res.state) {
+										this.$emit('callback', 'init');
+										this.$message.success('操作成功');
+									}
+								})
+						} else {
+							return false;
+						}
+					});
+				});
+			}
+		}
+	}
 </script>

+ 0 - 107
virgo.wzfrontend/console/src/components/work/organization/user/infoForm.vue

@@ -1,107 +0,0 @@
-<template>
-	<div class="hui-flex hui-dialog">
-		<div class="hui-flex-box hui-dialog-content">
-			<project-item ref="projectItem" :form="userForm">
-				<el-form-item label="入职时间">
-					<el-date-picker v-model="userForm.entryDate" value-format="yyyy-MM-dd" type="date"
-						placeholder="选择入职时间">
-					</el-date-picker>
-				</el-form-item>
-			</project-item>
-			<el-form :model="userForm" ref="userForm" label-position="top">
-				<el-form-item label="工作状态">
-					<el-select v-model="userForm.state" placeholder="请选择工作状态">
-						<el-option :value="1" label="在职"></el-option>
-						<el-option :value="2" label="请假"></el-option>
-						<el-option :value="3" label="离职"></el-option>
-					</el-select>
-				</el-form-item>
-			</el-form>
-		</div>
-		<div class="hui-dialog-submit">
-			<el-button size="medium" @click="$emit('callback')">取 消</el-button>
-			<el-button size="medium" type="primary" @click="submit">保 存</el-button>
-		</div>
-	</div>
-</template>
-
-<script>
-	import {
-		insertOperationUserInfo,
-		updateOperationUserInfo,
-		getOperationUserInfo
-	} from '@/httpApi/loginRegister'
-	import projectItem from '@/components/common/projectItem'
-	export default {
-		props: ['user'],
-		data() {
-			return {
-				operateUserInfo: {},
-				userForm: {
-					userId: '',
-					projectId: '',
-					projectName: '',
-					projectItemId: '',
-					projectItemName: '',
-					projectItemTargetId: '',
-					projectItemTargetName: '',
-					projectItemTargetRoomId: '',
-					projectItemTargetRoomName: '',
-					operateOrganizationId: '',
-					operateOrganizationName: '',
-					entryDate: '',
-					state: 1
-				}
-			}
-		},
-		created() {
-			this.init();
-		},
-		methods: {
-			init() {
-				getOperationUserInfo({
-					projectId: this.$store.getters.project.id,
-					operateOrganizationId: this.$store.getters.organization.id,
-					userId: this.user.id
-				}).then(res => {
-					if (res.state) {
-						this.operateUserInfo = res.data || {};
-						if (this.operateUserInfo.id) {
-							this.userForm = JSON.parse(JSON.stringify(this.operateUserInfo));
-						} else {
-							this.userForm['userId'] = this.user.id;
-							this.userForm['projectId'] = this.$store.getters.project.id;
-							this.userForm['projectName'] = this.$store.getters.project.projectName;
-							this.userForm['operateOrganizationId'] = this.$store.getters.organization.id;
-							this.userForm['operateOrganizationName'] = this.$store.getters.organization.name;
-						}
-					}
-				})
-
-			},
-			submit() {
-				let data = this.$refs.projectItem.returnItem();
-				this.userForm['projectItemId'] = data.projectItem.id;
-				this.userForm['projectItemName'] = data.projectItem.name;
-				this.userForm['projectItemTargetId'] = data.projectItemTarget.id;
-				this.userForm['projectItemTargetName'] = data.projectItemTarget.name;
-				this.userForm['projectItemTargetRoomId'] = data.projectItemTargetRoom.id;
-				this.userForm['projectItemTargetRoomName'] = data.projectItemTargetRoom.name;
-				this.userForm.id ? updateOperationUserInfo(this.userForm).then(this.successFunc) : insertOperationUserInfo(
-					this.userForm).then(this.successFunc);
-			},
-			successFunc(res) {
-				if (res.state) {
-					this.$message.success('操作成功');
-					this.$emit('callback', 'init');
-				}
-			},
-			close() {
-				this.$emit('callback', 'cancel')
-			}
-		},
-		components: {
-			projectItem
-		},
-	}
-</script>

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

@@ -1,123 +1,123 @@
-<template>
-	<div class="hui-flex hui-dialog role-box">
-		<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="tree-node-label">
-						<span>{{ node.label }}</span>
-					</div>
-				</div>
-			</el-tree>
-		</div>
-		<div class="hui-dialog-submit">
-			<el-button size="medium" @click="$emit('callback')">取 消</el-button>
-			<el-button size="medium" type="primary" @click="updateMenu">保 存</el-button>
-		</div>
-	</div>
-</template>
-
-<script>
-	import {
-		updateOperateUserRole
-	} from '@/httpApi/space'
-	export default {
-		props: ['projectId', 'user'],
-		data() {
-			return {
-				roleData: [],
-				defaultProps: {
-					label: 'title'
-				},
-				checkedKeys: []
-			}
-		},
-		created() {
-			this.roleData = JSON.parse(JSON.stringify(this.$store.getters.menuData));
-			this.$nextTick(() => {
-				this.cssTree();
-			})
-			if (this.user.id) {
-				this.checkedKeys = [];
-				this.testCheck(this.user.resources ? JSON.parse(this.user.resources) : []);
-			}
-		},
-		methods: {
-			cssTree() {
-				let classDomList = document.getElementsByClassName('especially')
-				// 改变这几个样式
-				if (classDomList.length == 0) return;
-				let paddingleft = parseInt(classDomList[0].parentNode.style.paddingLeft);
-				for (let i = 0; i < classDomList.length; i++) {
-					let node = classDomList[i].parentNode.parentNode;
-					node.parentNode.style.paddingLeft = (paddingleft + 24) + 'px';
-					node.parentNode.classList.add('tree-children-list')
-				}
-			},
-			filterArr(opArr, partId) {
-				function circle(opArr) {
-					for (let i = 0; i < opArr.length; i++) {
-						const isAccord = partId.find(r => r === opArr[i].id)
-						if (!isAccord) {
-							opArr.splice(i, 1)
-							i--
-						} else if (opArr[i].children && opArr[i].children.length) {
-							circle(opArr[i].children)
-						}
-					}
-				}
-				circle(opArr)
-				return opArr
-			},
-			testCheck(data) {
-				for (var i = 0; i < data.length; i++) {
-					if (data[i].children && data[i].children.length > 0) {
-						this.testCheck(data[i].children);
-					} else {
-						this.checkedKeys.push(data[i].id);
-					}
-				}
-			},
-			updateMenu() {
-				let resultData = JSON.parse(JSON.stringify(this.$store.getters.menuData));
-				let data = this.$refs.tree.getCheckedNodes(false, true);
-				let partId = data.map(node => node.id);
-				let obj = {
-					resource: JSON.stringify(this.filterArr(resultData, partId)),
-					comment: JSON.stringify(data.filter(item => !!item.index).map(item => item.index))
-				}
-				updateOperateUserRole({
-					menus: obj.comment,
-					operateOrganizationId: this.$store.getters.organization.id,
-					resources: obj.resource,
-					userId: this.user.id,
-					projectId: this.$store.getters.project.id
-				}).then(res => {
-					if (res.state) {
-						this.$emit('callback', 'init');
-						this.$message.success('操作成功')
-					}
-				})
-			}
-		},
-	}
-</script>
-
-<style lang="scss">
-	.role-box {
-		width: 100%;
-		height: 100%;
-
-		.el-tree {
-			.tree-node {
-				left: 0;
-			}
-
-			.el-tree-node__content>.el-tree-node__expand-icon {
-				padding: 6px;
-			}
-		}
-
-	}
+<template>
+	<div class="hui-flex hui-dialog role-box">
+		<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="tree-node-label">
+						<span>{{ node.label }}</span>
+					</div>
+				</div>
+			</el-tree>
+		</div>
+		<div class="hui-dialog-submit">
+			<el-button size="medium" @click="$emit('callback')">取 消</el-button>
+			<el-button size="medium" type="primary" @click="updateMenu">保 存</el-button>
+		</div>
+	</div>
+</template>
+
+<script>
+	import {
+		updateUserRole
+	} from '@/httpApi/organization'
+	export default {
+		props: ['projectId', 'user'],
+		data() {
+			return {
+				roleData: [],
+				defaultProps: {
+					label: 'title'
+				},
+				checkedKeys: []
+			}
+		},
+		created() {
+			this.roleData = JSON.parse(JSON.stringify(this.$store.getters.menuData));
+			this.$nextTick(() => {
+				this.cssTree();
+			})
+			if (this.user.id) {
+				this.checkedKeys = [];
+				this.testCheck(this.user.resources ? JSON.parse(this.user.resources) : []);
+			}
+		},
+		methods: {
+			cssTree() {
+				let classDomList = document.getElementsByClassName('especially')
+				// 改变这几个样式
+				if (classDomList.length == 0) return;
+				let paddingleft = parseInt(classDomList[0].parentNode.style.paddingLeft);
+				for (let i = 0; i < classDomList.length; i++) {
+					let node = classDomList[i].parentNode.parentNode;
+					node.parentNode.style.paddingLeft = (paddingleft + 24) + 'px';
+					node.parentNode.classList.add('tree-children-list')
+				}
+			},
+			filterArr(opArr, partId) {
+				function circle(opArr) {
+					for (let i = 0; i < opArr.length; i++) {
+						const isAccord = partId.find(r => r === opArr[i].id)
+						if (!isAccord) {
+							opArr.splice(i, 1)
+							i--
+						} else if (opArr[i].children && opArr[i].children.length) {
+							circle(opArr[i].children)
+						}
+					}
+				}
+				circle(opArr)
+				return opArr
+			},
+			testCheck(data) {
+				for (var i = 0; i < data.length; i++) {
+					if (data[i].children && data[i].children.length > 0) {
+						this.testCheck(data[i].children);
+					} else {
+						this.checkedKeys.push(data[i].id);
+					}
+				}
+			},
+			updateMenu() {
+				let resultData = JSON.parse(JSON.stringify(this.$store.getters.menuData));
+				let data = this.$refs.tree.getCheckedNodes(false, true);
+				let partId = data.map(node => node.id);
+				let obj = {
+					resource: JSON.stringify(this.filterArr(resultData, partId)),
+					comment: JSON.stringify(data.filter(item => !!item.index).map(item => item.index))
+				}
+				updateUserRole({
+					menus: obj.comment,
+					organizationId: this.$store.getters.organization.id,
+					resources: obj.resource,
+					userId: this.user.id,
+					projectId: this.$store.getters.project.id
+				}).then(res => {
+					if (res.state) {
+						this.$emit('callback', 'init');
+						this.$message.success('操作成功')
+					}
+				})
+			}
+		},
+	}
+</script>
+
+<style lang="scss">
+	.role-box {
+		width: 100%;
+		height: 100%;
+
+		.el-tree {
+			.tree-node {
+				left: 0;
+			}
+
+			.el-tree-node__content>.el-tree-node__expand-icon {
+				padding: 6px;
+			}
+		}
+
+	}
 </style>

+ 2 - 2
virgo.wzfrontend/console/src/components/work/space/house/detail.vue

@@ -20,7 +20,7 @@
 			</div>
 			<div class="hui-detail-item">
 				<div class="hui-detail-label">房源类型</div>
-				<div class="hui-detail-value">{{$field.findHouseTypeName(detail.roomTypeId)}}</div>
+				<div class="hui-detail-value">{{$field.findTypeName('houseType',detail.roomTypeId)}}</div>
 			</div>
 			<div class="hui-detail-item">
 				<div class="hui-detail-label">房源单价</div>
@@ -36,7 +36,7 @@
 			</div>
 			<div class="hui-detail-item">
 				<div class="hui-detail-label">付款方式</div>
-				<div class="hui-detail-value">{{$field.findPayWayName(detail.payWay)}}</div>
+				<div class="hui-detail-value">{{$field.findTypeName('payWay',detail.payWay)}}</div>
 			</div>
 			<div class="hui-detail-item">
 				<div class="hui-detail-label">产权证书</div>

+ 1 - 1
virgo.wzfrontend/console/src/components/work/space/house/edit.vue

@@ -39,7 +39,7 @@
 				</el-form-item>
 				<el-form-item label="启用日期">
 					<el-date-picker v-model="houseForm.invocationDate" value-format="yyyy-MM-dd" type="date"
-						placeholder="选择启用日期">
+						placeholder="选择启用日期">
 					</el-date-picker>
 				</el-form-item>
 				<el-form-item label="招商状态">

+ 49 - 17
virgo.wzfrontend/console/src/config/field.js

@@ -19,29 +19,61 @@ const payWay = [{
 	name: '微信小程序支付'
 }]
 
+const customerType = [{
+	id: 1,
+	name: '潜在客户'
+}, {
+	id: 2,
+	name: '新客户'
+}, {
+	id: 3,
+	name: '忠诚客户'
+}, {
+	id: 4,
+	name: '流失客户'
+}, {
+	id: 5,
+	name: '重要客户'
+}]
+
+const followUpState = [{
+	id: 1,
+	name: '初次接触'
+}, {
+	id: 2,
+	name: '沟通中'
+}, {
+	id: 3,
+	name: '已成交'
+}, {
+	id: 4,
+	name: '失败/放弃'
+}, {
+	id: 5,
+	name: '暂不考虑'
+}, {
+	id: 6,
+	name: '待定'
+}, {
+	id: 7,
+	name: '未联系上'
+}]
+
 const findItem = (type, id) => {
-	if (type === 'houseType') {
-		return houseType.find(node => node.id === id) || {
-			id: 0,
-			name: '-'
-		};
-	} else if (type === 'payWay') {
-		return payWay.find(node => node.id === id) || {
-			id: 0,
-			name: '-'
-		};
-	}
+	return eval(type).find(node => node.id === id) || {
+		id: 0,
+		name: '-'
+	};
 }
 
 export default {
 	field: {
 		houseType,
-		payWay
+		payWay,
+		customerType,
+		followUpState
 	},
-	findHouseTypeName(id) {
-		return findItem('houseType', id).name;
+	findTypeName(type, id) {
+		return findItem(type, id).name;
 	},
-	findPayWayName(id) {
-		return findItem('payWay', id).name;
-	}
 }

+ 58 - 0
virgo.wzfrontend/console/src/httpApi/crm.js

@@ -0,0 +1,58 @@
+import request from '@/axios'
+/* 
+ * 获取客户列表
+ * 
+ */
+export function getCustomerListByPage(data) {
+	return request({
+		url: `/manager/client/${data.currPage}/${data.pageSize}`,
+		method: 'post',
+		data: data
+	})
+}
+/* 
+ * 新增客户
+ * 
+ * 
+ */
+export function insertCustomer(data) {
+	return request({
+		url: `/manager/client`,
+		method: 'post',
+		data: data
+	})
+}
+/* 
+ * 编辑客户
+ * 
+ * 
+ */
+export function updateCustomer(data) {
+	return request({
+		url: `/manager/client/update`,
+		method: 'put',
+		data: data
+	})
+}
+/* 
+ * 获取客户详情
+ * 
+ * 
+ */
+export function getCustomerDetailById(id) {
+	return request({
+		url: `/manager/client/${id}`,
+		method: 'get'
+	})
+}
+/* 
+ * 删除客户
+ * 
+ * 
+ */
+export function deleteCustomerById(id) {
+	return request({
+		url: `/manager/client/delete/${id}`,
+		method: 'delete'
+	})
+}

+ 46 - 1
virgo.wzfrontend/console/src/httpApi/organization.js

@@ -65,8 +65,53 @@ export function deleteDepartment(id) {
  */
 export function getUserListByPart(data) {
 	return request({
-		url: `/manager/admin/list`,
+		url: `/manager/user/list/${data.organizationId}/${data.partId}`,
+		method: 'post'
+	})
+}
+/* 
+ * 判断用户手机号是否存在
+ * 
+ * 
+ */
+export function testPhone(phone) {
+	return request({
+		url: `/manager/user/exist/${phone}`,
+		method: 'get'
+	})
+}
+/* 
+ * 新增用户
+ * 
+ * 
+ */
+export function insertUser(organizationId, roleIds, data) {
+	return request({
+		url: `/manager/user/add/${organizationId}/${roleIds}`,
 		method: 'post',
 		data: data
 	})
+}
+/* 
+ * 更新运营用户权限和菜单
+ * 
+ * 
+ */
+export function updateUserRole(data) {
+	return request({
+		url: `/manager/user/userRole`,
+		method: 'put',
+		data: data
+	})
+}
+/* 
+ * 删除用户
+ * 
+ * 
+ */
+export function deleteUser(organizationId, userId) {
+	return request({
+		url: `/manager/user/delete/${organizationId}/${userId}`,
+		method: 'delete'
+	})
 }

+ 4 - 2
virgo.wzfrontend/console/src/layout/work.vue

@@ -15,7 +15,7 @@
 				<i :class="'iconfont '+ (isCollapse ? 'huifont-xiala-right':'huifont-xiala-left')"></i>
 			</div>
 		</div>
-		<bread-crumb :class="isCollapse ? 'small-crumb':''"></bread-crumb>
+		<bread-crumb :class="isCollapse ? 'small-crumb':''" :key="crumbKey"></bread-crumb>
 		<div :class="isCollapse ? 'small-content work-layout-content':'work-layout-content'">
 			<transition name="slide-fade">
 				<router-view :key="key" />
@@ -35,7 +35,8 @@
 		data() {
 			return {
 				menuList: [],
-				isCollapse: false
+				isCollapse: false,
+				crumbKey: false
 			}
 		},
 		created() {
@@ -68,6 +69,7 @@
 		watch: {
 			menuData() {
 				this.menuList = this.$store.getters.menuData.filter(node => node.title !== '系统设置');
+				this.crumbKey = !this.crumbKey;
 			}
 		},
 	}

+ 23 - 0
virgo.wzfrontend/console/src/router/modules/crm.js

@@ -0,0 +1,23 @@
+const crm = [{
+	path: 'crm/customer',
+	component: () => import('@/views/work/crm/customer'),
+	name: '客户管理',
+	meta: {
+		title: '客户管理'
+	}
+}, {
+	path: 'crm/agent',
+	component: () => import('@/views/work/crm/agent'),
+	name: '经纪人管理',
+	meta: {
+		title: '经纪人管理'
+	}
+}, {
+	path: 'crm/highseas',
+	component: () => import('@/views/work/crm/highseas'),
+	name: '公海客户',
+	meta: {
+		title: '公海客户'
+	}
+}]
+export default crm;

+ 8 - 0
virgo.wzfrontend/console/src/views/work/crm/agent.vue

@@ -0,0 +1,8 @@
+<template>
+</template>
+
+<script>
+</script>
+
+<style>
+</style>

+ 123 - 0
virgo.wzfrontend/console/src/views/work/crm/customer.vue

@@ -0,0 +1,123 @@
+<template>
+	<div class="hui-flex hui-content">
+		<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="insertProject">新增客户</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="操作" width="150">
+						<template slot-scope="scope">
+							<div class="hui-table-operation">
+								<span class="table-operation" @click="lookProject(scope.row)">详情</span>
+								<span class="table-operation" @click="updateProject(scope.row)">编辑</span>
+								<span class="table-operation" @click="deleteProject(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>
+		<el-dialog :title="isUpdate?'编辑':'新增'" :visible.sync="visible" width="900px" :append-to-body="true">
+			<edit v-if="visible" @callback="callback" :isUpdate="isUpdate" :detailId="detailId"></edit>
+		</el-dialog>
+		<el-drawer title="客户详情" :visible.sync="drawer" :size="400" :append-to-body="true">
+			<detail v-if="drawer" :detailId="detailId"></detail>
+		</el-drawer>
+	</div>
+</template>
+
+<script>
+	import {
+		getCustomerListByPage,
+		deleteCustomerById
+	} from '@/httpApi/crm'
+	import edit from '@/components/work/crm/customer/edit'
+	import detail from '@/components/work/crm/customer/detail'
+	export default {
+		data() {
+			return {
+				tableData: [],
+				currPage: 1,
+				pageSize: 10,
+				totalCount: 0,
+				visible: false,
+				detailId: '',
+				isUpdate: false,
+				drawer: false
+			}
+		},
+		created() {
+			this.init();
+		},
+		methods: {
+			init() {
+				getCustomerListByPage({
+					currPage: this.currPage,
+					pageSize: this.pageSize,
+					organizationId: this.$store.getters.organization.id
+				}).then(res => {
+					if (res.state) {
+						this.tableData = res.data.dataList;
+						this.totalCount = res.data.totalCount;
+					}
+				})
+			},
+			currentChange(currPage) {
+				this.currPage = currPage;
+				this.init();
+			},
+			insertProject() {
+				this.isUpdate = false;
+				this.visible = true;
+			},
+			updateProject(val) {
+				this.detailId = val.id;
+				this.isUpdate = true;
+				this.visible = true;
+			},
+			lookProject(val) {
+				this.detailId = val.id;
+				this.drawer = true;
+			},
+			deleteCustomerById(val) {
+				this.$confirm('确定要删除该客户?', () => {
+					deleteProjectById(val.id).then(res => {
+						if (res.state) {
+							this.init();
+							this.$message.success('操作成功');
+						}
+					})
+				});
+			},
+			callback(type) {
+				if (type === 'init') this.init();
+				this.visible = false;
+			}
+		},
+		components: {
+			edit,
+			detail
+		},
+	}
+</script>
+
+<style lang="scss"></style>

+ 9 - 0
virgo.wzfrontend/console/src/views/work/crm/highseas.vue

@@ -0,0 +1,9 @@
+<template>
+	<div class="high-seas"></div>
+</template>
+
+<script>
+</script>
+
+<style>
+</style>

+ 5 - 1
virgo.wzfrontend/console/src/views/work/organization/depart.vue

@@ -10,7 +10,11 @@
 			<div class="hui-flex-box">
 				<el-table :data="treeData" row-key="id" border height="100%">
 					<el-table-column label="部门名称" prop="name"></el-table-column>
-					<el-table-column label="部门人数" prop="userCount"></el-table-column>
+					<el-table-column label="部门人数">
+						<template slot-scope="scope">
+							<span>{{!scope.row.users ?0: scope.row.users.length}}</span>
+						</template>
+					</el-table-column>
 					<el-table-column label="部门责任人">
 						<template slot-scope="scope">
 							<div class="hui-table-user" v-if="scope.row.responsible && scope.row.responsible!='[]'">

+ 12 - 17
virgo.wzfrontend/console/src/views/work/organization/user.vue

@@ -74,10 +74,6 @@
 										<span class="table-operation" @click="lookUser(scope.row)">
 											详情
 										</span>
-										<span class="table-operation" v-if="!scope.row.projectFlowId"
-											@click="updateUser(scope.row,3,'修改用户')">
-											编辑
-										</span>
 										<span class="table-operation" v-if="!scope.row.projectFlowId"
 											@click="deleteUser(scope.row)">
 											删除
@@ -93,14 +89,13 @@
 				</div>
 			</div>
 		</div>
-		<!-- <el-dialog :title="title" :visible.sync="visible" width="900px" :append-to-body="true">
-			<user-form v-if="visible && type === 1" :part="part" @callback="callback"></user-form>
+		<el-dialog :title="title" :visible.sync="visible" width="900px" :append-to-body="true">
+			<edit v-if="visible && type === 1" :part="part" @callback="callback"></edit>
 			<role v-if="visible && type === 2" :user="user" @callback="callback"></role>
-			<info-form v-if="visible && type === 3" :user="user" @callback="callback"></info-form>
 		</el-dialog>
 		<el-drawer title="用户详情" :visible.sync="drawer" :size="400" :append-to-body="true">
-			<user-detail v-if="drawer" :user="user"></user-detail>
-		</el-drawer> -->
+			<detail v-if="drawer" :user="user"></detail>
+		</el-drawer>
 	</div>
 </template>
 
@@ -108,12 +103,12 @@
 	import {
 		getPartList,
 		getUserListByPart,
-		// deleteUser
+		deleteUser
 	} from '@/httpApi/organization'
 	import avatar from '@/components/common/avatar'
-	// import role from '@/components/work/organization/user/role'
-	// import detail from '@/components/work/organization/user/detail'
-	// import edit from '@/components/work/organization/user/edit'
+	import role from '@/components/work/organization/user/role'
+	import detail from '@/components/work/organization/user/detail'
+	import edit from '@/components/work/organization/user/edit'
 	// import infoForm from '@/components/work/organization/user/infoForm'
 	export default {
 		data() {
@@ -186,8 +181,7 @@
 			},
 			deleteUser(user) {
 				this.$confirm('确定要删除该员工?', () => {
-					deleteUser(this.organization.id, this.project.id, this.part.id,
-						user.id).then(res => {
+					deleteUser(this.organization.id, user.id).then(res => {
 						if (res.state) {
 							this.selectPart(this.part);
 							this.$message.success('操作成功');
@@ -202,8 +196,9 @@
 		},
 		components: {
 			avatar,
-			// role,
-			// userDetail,
+			edit,
+			role,
+			detail,
 			// userForm,
 			// infoForm
 		}

+ 3 - 3
virgo.wzfrontend/console/src/views/work/space/project.vue

@@ -14,8 +14,8 @@
 							<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="name"></el-table-column>
+					<el-table-column label="项目描述" prop="comment"></el-table-column>
 					<el-table-column label="操作" width="150">
 						<template slot-scope="scope">
 							<div class="hui-table-operation">
@@ -79,7 +79,7 @@
 				getProjectListByPage({
 					currPage: this.currPage,
 					pageSize: this.pageSize,
-					operateOrganizationId: this.$store.getters.organization.id
+					organizationId: this.$store.getters.organization.id
 				}).then(res => {
 					if (res.state) {
 						this.tableData = res.data.dataList;