whx 6 months ago
parent
commit
0b273d4119
100 changed files with 1201 additions and 1038 deletions
  1. 110 110
      virgo.wzfrontend/console/src/components/work/business/organization/edit.vue
  2. 3 1
      virgo.wzfrontend/console/src/components/work/crm/agent/edit.vue
  3. 188 188
      virgo.wzfrontend/console/src/components/work/crm/customer/edit.vue
  4. 2 1
      virgo.wzfrontend/console/src/components/work/property/propertyFlowForm.vue
  5. 183 183
      virgo.wzfrontend/console/src/components/work/space/project/edit.vue
  6. 2 1
      virgo.wzfrontend/console/src/httpApi/crm.js
  7. 13 0
      virgo.wzfrontend/console/src/httpApi/organization.js
  8. 58 19
      virgo.wzfrontend/console/src/views/work/business/organization.vue
  9. 240 199
      virgo.wzfrontend/console/src/views/work/crm/agent.vue
  10. 338 296
      virgo.wzfrontend/console/src/views/work/crm/customer.vue
  11. 26 1
      virgo.wzfrontend/console/src/views/work/property/register.vue
  12. 1 1
      virgo.wzfrontend/src/main/resources/static/console/index.html
  13. 0 0
      virgo.wzfrontend/src/main/resources/static/console/static/css/2636.e193389d.css
  14. 0 0
      virgo.wzfrontend/src/main/resources/static/console/static/css/3428.e193389d.css
  15. 0 0
      virgo.wzfrontend/src/main/resources/static/console/static/css/4523.b6c7aaf0.css
  16. 0 0
      virgo.wzfrontend/src/main/resources/static/console/static/css/4767.12d58e15.css
  17. 0 0
      virgo.wzfrontend/src/main/resources/static/console/static/css/6393.b6c7aaf0.css
  18. 0 0
      virgo.wzfrontend/src/main/resources/static/console/static/css/9254.32d3f99b.css
  19. 0 0
      virgo.wzfrontend/src/main/resources/static/console/static/css/9812.12d58e15.css
  20. 0 0
      virgo.wzfrontend/src/main/resources/static/console/static/js/109-legacy.e72c0fde.js
  21. 1 0
      virgo.wzfrontend/src/main/resources/static/console/static/js/118.840fba72.js
  22. 0 1
      virgo.wzfrontend/src/main/resources/static/console/static/js/1234-legacy.bcbd6d41.js
  23. 0 1
      virgo.wzfrontend/src/main/resources/static/console/static/js/1234.1497ac43.js
  24. 0 0
      virgo.wzfrontend/src/main/resources/static/console/static/js/1263-legacy.84d6b1df.js
  25. 0 0
      virgo.wzfrontend/src/main/resources/static/console/static/js/1263.a8976893.js
  26. 0 0
      virgo.wzfrontend/src/main/resources/static/console/static/js/1433-legacy.fd4b52fb.js
  27. 0 0
      virgo.wzfrontend/src/main/resources/static/console/static/js/1433.1a644ebb.js
  28. 0 0
      virgo.wzfrontend/src/main/resources/static/console/static/js/1471-legacy.03e752d0.js
  29. 0 0
      virgo.wzfrontend/src/main/resources/static/console/static/js/1471.54862ec2.js
  30. 1 1
      virgo.wzfrontend/src/main/resources/static/console/static/js/1703-legacy.84092482.js
  31. 1 1
      virgo.wzfrontend/src/main/resources/static/console/static/js/1703.8bab3c28.js
  32. 0 0
      virgo.wzfrontend/src/main/resources/static/console/static/js/1821-legacy.09f61a2e.js
  33. 0 0
      virgo.wzfrontend/src/main/resources/static/console/static/js/2059.ca3d667a.js
  34. 1 1
      virgo.wzfrontend/src/main/resources/static/console/static/js/206-legacy.70d18d5f.js
  35. 0 0
      virgo.wzfrontend/src/main/resources/static/console/static/js/2288-legacy.068ceb92.js
  36. 0 0
      virgo.wzfrontend/src/main/resources/static/console/static/js/2587-legacy.e31623e9.js
  37. 0 0
      virgo.wzfrontend/src/main/resources/static/console/static/js/2587.e3045e53.js
  38. 0 0
      virgo.wzfrontend/src/main/resources/static/console/static/js/2610.ebd529de.js
  39. 1 0
      virgo.wzfrontend/src/main/resources/static/console/static/js/2636.7c11b738.js
  40. 0 0
      virgo.wzfrontend/src/main/resources/static/console/static/js/2901-legacy.e93206c4.js
  41. 0 0
      virgo.wzfrontend/src/main/resources/static/console/static/js/2901.4352da11.js
  42. 1 1
      virgo.wzfrontend/src/main/resources/static/console/static/js/3082-legacy.cb042a16.js
  43. 1 1
      virgo.wzfrontend/src/main/resources/static/console/static/js/324.0c5f4efe.js
  44. 1 1
      virgo.wzfrontend/src/main/resources/static/console/static/js/2693-legacy.c87379da.js
  45. 0 0
      virgo.wzfrontend/src/main/resources/static/console/static/js/3437-legacy.6a559f0a.js
  46. 0 0
      virgo.wzfrontend/src/main/resources/static/console/static/js/3437.d3769e4a.js
  47. 1 1
      virgo.wzfrontend/src/main/resources/static/console/static/js/3620-legacy.8726361e.js
  48. 1 1
      virgo.wzfrontend/src/main/resources/static/console/static/js/3620.d6f21564.js
  49. 1 1
      virgo.wzfrontend/src/main/resources/static/console/static/js/4643-legacy.c6d411b3.js
  50. 0 1
      virgo.wzfrontend/src/main/resources/static/console/static/js/4610-legacy.88c62725.js
  51. 1 0
      virgo.wzfrontend/src/main/resources/static/console/static/js/4610-legacy.948b7c9e.js
  52. 1 1
      virgo.wzfrontend/src/main/resources/static/console/static/js/4635.0e1cad9d.js
  53. 1 1
      virgo.wzfrontend/src/main/resources/static/console/static/js/4639-legacy.1029a16e.js
  54. 1 1
      virgo.wzfrontend/src/main/resources/static/console/static/js/4639.96c59c8f.js
  55. 1 0
      virgo.wzfrontend/src/main/resources/static/console/static/js/4767.e3d4f6c7.js
  56. 1 1
      virgo.wzfrontend/src/main/resources/static/console/static/js/4781.0f791097.js
  57. 0 1
      virgo.wzfrontend/src/main/resources/static/console/static/js/4783.134dcfcb.js
  58. 1 0
      virgo.wzfrontend/src/main/resources/static/console/static/js/494-legacy.e4ec375f.js
  59. 1 0
      virgo.wzfrontend/src/main/resources/static/console/static/js/494.ec6d3cb9.js
  60. 1 1
      virgo.wzfrontend/src/main/resources/static/console/static/js/5046.319af867.js
  61. 0 0
      virgo.wzfrontend/src/main/resources/static/console/static/js/5127.116aaaa9.js
  62. 1 1
      virgo.wzfrontend/src/main/resources/static/console/static/js/5501-legacy.1bc3078d.js
  63. 0 0
      virgo.wzfrontend/src/main/resources/static/console/static/js/5523-legacy.2049e33a.js
  64. 0 0
      virgo.wzfrontend/src/main/resources/static/console/static/js/5679.be332698.js
  65. 1 1
      virgo.wzfrontend/src/main/resources/static/console/static/js/3406-legacy.91c60bdf.js
  66. 1 1
      virgo.wzfrontend/src/main/resources/static/console/static/js/2579.f337f1f6.js
  67. 0 1
      virgo.wzfrontend/src/main/resources/static/console/static/js/6095-legacy.4b6ef21d.js
  68. 0 0
      virgo.wzfrontend/src/main/resources/static/console/static/js/6116-legacy.aeca7d33.js
  69. 0 0
      virgo.wzfrontend/src/main/resources/static/console/static/js/6235-legacy.37912118.js
  70. 0 0
      virgo.wzfrontend/src/main/resources/static/console/static/js/6235.1610debb.js
  71. 0 0
      virgo.wzfrontend/src/main/resources/static/console/static/js/6252-legacy.7eab4fab.js
  72. 0 0
      virgo.wzfrontend/src/main/resources/static/console/static/js/6252.89a8d6d9.js
  73. 0 1
      virgo.wzfrontend/src/main/resources/static/console/static/js/6355.316d20c3.js
  74. 1 1
      virgo.wzfrontend/src/main/resources/static/console/static/js/1250.402e032c.js
  75. 0 0
      virgo.wzfrontend/src/main/resources/static/console/static/js/6448.e852bfd6.js
  76. 0 0
      virgo.wzfrontend/src/main/resources/static/console/static/js/7072-legacy.dbc91b28.js
  77. 1 1
      virgo.wzfrontend/src/main/resources/static/console/static/js/7211-legacy.ecd8ee15.js
  78. 1 1
      virgo.wzfrontend/src/main/resources/static/console/static/js/7211.fb3ba277.js
  79. 1 1
      virgo.wzfrontend/src/main/resources/static/console/static/js/7431-legacy.d2ee38a8.js
  80. 1 1
      virgo.wzfrontend/src/main/resources/static/console/static/js/7431.19b7dfec.js
  81. 0 1
      virgo.wzfrontend/src/main/resources/static/console/static/js/7437-legacy.3fbb7b58.js
  82. 1 0
      virgo.wzfrontend/src/main/resources/static/console/static/js/7437-legacy.a85929d5.js
  83. 0 0
      virgo.wzfrontend/src/main/resources/static/console/static/js/7729-legacy.0ba470a1.js
  84. 0 0
      virgo.wzfrontend/src/main/resources/static/console/static/js/7815-legacy.dc7bac77.js
  85. 0 0
      virgo.wzfrontend/src/main/resources/static/console/static/js/7815.8d60ec5a.js
  86. 0 0
      virgo.wzfrontend/src/main/resources/static/console/static/js/8187.5eef8c61.js
  87. 0 0
      virgo.wzfrontend/src/main/resources/static/console/static/js/8245-legacy.969efe3b.js
  88. 0 0
      virgo.wzfrontend/src/main/resources/static/console/static/js/8245.acdd933a.js
  89. 1 1
      virgo.wzfrontend/src/main/resources/static/console/static/js/8645.16f5d00c.js
  90. 1 1
      virgo.wzfrontend/src/main/resources/static/console/static/js/8896-legacy.4b99d1cc.js
  91. 1 1
      virgo.wzfrontend/src/main/resources/static/console/static/js/8896.d433123d.js
  92. 0 1
      virgo.wzfrontend/src/main/resources/static/console/static/js/8954-legacy.5e0c8786.js
  93. 1 1
      virgo.wzfrontend/src/main/resources/static/console/static/js/9023.8f063d30.js
  94. 0 0
      virgo.wzfrontend/src/main/resources/static/console/static/js/9104.31f4af18.js
  95. 1 1
      virgo.wzfrontend/src/main/resources/static/console/static/js/8606-legacy.c51f7f21.js
  96. 1 1
      virgo.wzfrontend/src/main/resources/static/console/static/js/8606.ef0ab5d3.js
  97. 1 1
      virgo.wzfrontend/src/main/resources/static/console/static/js/9380-legacy.c01471c7.js
  98. 1 0
      virgo.wzfrontend/src/main/resources/static/console/static/js/9467-legacy.340f704e.js
  99. 0 1
      virgo.wzfrontend/src/main/resources/static/console/static/js/9593.1ec1d571.js
  100. 0 0
      virgo.wzfrontend/src/main/resources/static/console/static/js/9812-legacy.1c48ed63.js

+ 110 - 110
virgo.wzfrontend/console/src/components/work/business/organization/edit.vue

@@ -1,111 +1,111 @@
-<template>
-	<div class="hui-flex hui-dialog">
-		<div class="hui-flex-box hui-dialog-content">
-			<el-form ref="organizationForm" label-position="top" :model="organizationForm">
-				<el-form-item label="企业名称" prop="name" :rules="[{required: true, message: '请输入企业名称'}]">
-					<el-input type="text" v-model="organizationForm.name" placeholder="请输入企业名称"></el-input>
-				</el-form-item>
-				<el-form-item label="企业类型" prop="industryType" :rules="[{required: true, message: '请选择企业类型'}]">
-					<el-select v-model="organizationForm.industryType" placeholder="请选择企业类型">
-						<el-option :label="item.name" :value="String(item.id)"
-							v-for="(item,index) in $field.field.industryType" :key="item.id">
-						</el-option>
-					</el-select>
-				</el-form-item>
-				<el-form-item label="企业法人" prop="legalPerson" :rules="[{required: true, message: '请输入企业法人'}]">
-					<el-input type="text" v-model="organizationForm.legalPerson" placeholder="请输入企业法人"></el-input>
-				</el-form-item>
-				<el-form-item label="成立时间" prop="establishDate" :rules="[{required: true, message: '请选择成立时间'}]">
-					<el-date-picker v-model="organizationForm.establishDate" value-format="yyyy-MM-dd" type="date"
-						placeholder="请选择启用日期">
-					</el-date-picker>
-				</el-form-item>
-				<el-form-item label="营业期限" prop="businessTerm" :rules="[{required: true, message: '请输入营业期限'}]">
-					<el-input type="text" v-model="organizationForm.businessTerm" placeholder="请输入营业期限"></el-input>
-				</el-form-item>
-				<el-form-item label="注册资本" prop="registeredCapital" :rules="[{required: true, message: '请输入注册资本'}]">
-					<el-input type="text" v-model="organizationForm.registeredCapital" placeholder="请输入注册资本"></el-input>
-				</el-form-item>
-				<el-form-item label="自定义信息" class="hui-textarea">
-					<custom-data ref="customData" :list="customList"></custom-data>
-				</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" :loading="loading">保 存</el-button>
-		</div>
-	</div>
-</template>
-
-<script>
-	import {
-		insertOrganization,
-		updateOrganization,
-		getOrganizationDetailById
-	} from '@/httpApi/business'
-	import customData from '@/components/common/customData'
-	export default {
-		props: ['isUpdate', 'detailId'],
-		data() {
-			return {
-				organizationForm: {
-					name: '',
-					legalPerson: '',
-					establishDate: '',
-					businessTerm: '',
-					organizationId: '',
-					registeredCapital: '',
-					industryType: '',
-					data: '',
-				},
-				customList: [],
-				loading: false
-			}
-		},
-		created() {
-			if (this.isUpdate) {
-				getOrganizationDetailById(this.detailId).then(res => {
-					if (res.state) {
-						this.organizationForm = res.data;
-						if (this.organizationForm.data) this.customList = JSON.parse(this.organizationForm.data);
-					}
-				})
-			} else {
-				this.organizationForm['organizationId'] = this.$store.getters.user.organization.id;
-				this.organizationForm['projectId'] = this.$store.getters.project.id;
-			}
-		},
-		methods: {
-			submit() {
-				this.loading = true;
-				this.$refs.organizationForm.validate((valid) => {
-					if (valid) {
-						let postData = JSON.parse(JSON.stringify(this.organizationForm));
-						postData['data'] = JSON.stringify(this.$refs.customData.listData);
-						if (this.isUpdate) {
-							updateOrganization(postData).then(this.successFunc);
-						} else {
-							insertOrganization(postData).then(this.successFunc);
-						}
-					} else {
-						this.loading = false;
-						return false;
-					}
-				});
-			},
-			successFunc(res) {
-				this.loading = false;
-				if (res.state) {
-					this.$message.success('操作成功');
-					this.$emit('callback', 'init');
-				}
-			}
-		},
-		components: {
-			customData
-		},
-	}
-</script>
-
+<template>
+	<div class="hui-flex hui-dialog">
+		<div class="hui-flex-box hui-dialog-content">
+			<el-form ref="organizationForm" label-position="top" :model="organizationForm">
+				<el-form-item label="企业名称" prop="name" :rules="[{required: true, message: '请输入企业名称'}]">
+					<el-input type="text" v-model="organizationForm.name" placeholder="请输入企业名称"></el-input>
+				</el-form-item>
+				<el-form-item label="企业类型" prop="industryType" :rules="[{required: true, message: '请选择企业类型'}]">
+					<el-select v-model="organizationForm.industryType" placeholder="请选择企业类型">
+						<el-option :label="item.name" :value="String(item.id)"
+							v-for="(item,index) in $field.field.industryType" :key="item.id">
+						</el-option>
+					</el-select>
+				</el-form-item>
+				<el-form-item label="企业法人" prop="legalPerson" :rules="[{required: true, message: '请输入企业法人'}]">
+					<el-input type="text" v-model="organizationForm.legalPerson" placeholder="请输入企业法人"></el-input>
+				</el-form-item>
+				<el-form-item label="成立时间" prop="establishDate" :rules="[{required: true, message: '请选择成立时间'}]">
+					<el-date-picker v-model="organizationForm.establishDate" value-format="yyyy-MM-dd" type="date"
+						placeholder="请选择启用日期">
+					</el-date-picker>
+				</el-form-item>
+				<el-form-item label="营业期限" prop="businessTerm" :rules="[{required: true, message: '请输入营业期限'}]">
+					<el-input type="text" v-model="organizationForm.businessTerm" placeholder="请输入营业期限"></el-input>
+				</el-form-item>
+				<el-form-item label="注册资本" prop="registeredCapital" :rules="[{required: true, message: '请输入注册资本'}]">
+					<el-input type="text" v-model="organizationForm.registeredCapital" placeholder="请输入注册资本"></el-input>
+				</el-form-item>
+				<el-form-item label="自定义信息" class="hui-textarea">
+					<custom-data ref="customData" :list="customList"></custom-data>
+				</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" :loading="loading">保 存</el-button>
+		</div>
+	</div>
+</template>
+
+<script>
+	import {
+		insertOrganization,
+		updateOrganization,
+		getOrganizationDetailById
+	} from '@/httpApi/business'
+	import customData from '@/components/common/customData'
+	export default {
+		props: ['isUpdate', 'detailId'],
+		data() {
+			return {
+				organizationForm: {
+					name: '',
+					legalPerson: '',
+					establishDate: '',
+					businessTerm: '',
+					organizationId: '',
+					registeredCapital: '',
+					industryType: '',
+					data: '',
+				},
+				customList: [],
+				loading: false
+			}
+		},
+		created() {
+			if (this.isUpdate) {
+				getOrganizationDetailById(this.detailId).then(res => {
+					if (res.state) {
+						this.organizationForm = res.data;
+						if (this.organizationForm.data) this.customList = JSON.parse(this.organizationForm.data);
+					}
+				})
+			} else {
+				this.organizationForm['organizationId'] = this.$store.getters.organization.id;
+				this.organizationForm['projectId'] = this.$store.getters.project.id;
+			}
+		},
+		methods: {
+			submit() {
+				this.loading = true;
+				this.$refs.organizationForm.validate((valid) => {
+					if (valid) {
+						let postData = JSON.parse(JSON.stringify(this.organizationForm));
+						postData['data'] = JSON.stringify(this.$refs.customData.listData);
+						if (this.isUpdate) {
+							updateOrganization(postData).then(this.successFunc);
+						} else {
+							insertOrganization(postData).then(this.successFunc);
+						}
+					} else {
+						this.loading = false;
+						return false;
+					}
+				});
+			},
+			successFunc(res) {
+				this.loading = false;
+				if (res.state) {
+					this.$message.success('操作成功');
+					this.$emit('callback', 'init');
+				}
+			}
+		},
+		components: {
+			customData
+		},
+	}
+</script>
+
 <style lang="scss"></style>

+ 3 - 1
virgo.wzfrontend/console/src/components/work/crm/agent/edit.vue

@@ -66,7 +66,6 @@
 			}
 		},
 		created() {
-			this.agentForm['organizationId'] = this.$store.getters.user.organization.id;
 			if (this.isUpdate) {
 				getAgentDetailById(this.detailId).then(res => {
 					if (res.state) {
@@ -75,6 +74,9 @@
 							.businessCard);
 					}
 				})
+			} else {
+				this.agentForm['organizationId'] = this.$store.getters.organization.id;
+				this.agentForm['projectId'] = this.$store.getters.project.id;
 			}
 		},
 		components: {

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

@@ -1,189 +1,189 @@
-<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="customerRulers.phone">
-					<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 ref="selectHouse" :ids="customerForm.firsTimeRoom"></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" :loading="loading">保 存</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: ''
-				},
-				customerRulers: {
-					phone: [{
-						required: true,
-						message: '请输入手机号',
-						trigger: 'blur'
-					}, {
-						validator: (rule, value, callback) => {
-							if (!/^1[123456789]\d{9}$/.test(value)) {
-								callback(new Error("请输入正确的手机号"));
-							} else {
-								callback()
-							}
-						},
-						trigger: 'blur'
-					}],
-				},
-				isCache: true,
-				loading: false
-			}
-		},
-		created() {
-			if (this.isUpdate) {
-				this.isCache = false;
-				getCustomerDetailById(this.detailId).then(res => {
-					if (res.state) {
-						this.customerForm = res.data;
-					}
-				})
-			} else {
-				console.log(this.$store.getters.customerData);
-				if (this.$store.getters.customerData && JSON.stringify(this.$store.getters.customerData) != '{}') {
-					if (this.$store.getters.customerData.organizationId != this.$store.getters.user.organization.id) {
-						return this.$store.dispatch('projectBase/changeCustomerData', {});
-					}
-					this.initForm(this.$store.getters.customerData);
-				}
-				this.customerForm['organizationId'] = this.$store.getters.user.organization.id;
-			}
-		},
-		beforeDestroy() {
-			this.cacheData();
-		},
-		methods: {
-			initForm(data) {
-				this.customerForm = data;
-			},
-			cacheData() {
-				if (!this.isCache) return;
-				this.$store.dispatch('projectBase/changeCustomerData', this.setData());
-			},
-			setData() {
-				let postData = JSON.parse(JSON.stringify(this.customerForm));
-				postData['firsTimeRoom'] = this.$refs.selectHouse.selectNodeId;
-				return postData;
-			},
-			submit() {
-				this.loading = true;
-				this.$refs.customerForm.validate((valid) => {
-					if (valid) {
-						let postData = this.setData();
-						if (this.isUpdate) {
-							updateCustomer(postData).then(this.successFunc);
-						} else {
-							insertCustomer(postData).then(this.successFunc);
-						}
-					} else {
-						this.loading = false;
-						return false;
-					}
-				});
-			},
-			successFunc(res) {
-				this.loading = false;
-				if (res.state) {
-					this.$message.success('操作成功');
-					this.$store.dispatch('projectBase/changeCustomerData', {});
-					this.isCache = false;
-					this.$emit('callback', 'init');
-				}
-			}
-		},
-		components: {
-			selectHouse
-		},
-	}
-</script>
-
+<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="customerRulers.phone">
+					<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 ref="selectHouse" :ids="customerForm.firsTimeRoom"></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" :loading="loading">保 存</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: ''
+				},
+				customerRulers: {
+					phone: [{
+						required: true,
+						message: '请输入手机号',
+						trigger: 'blur'
+					}, {
+						validator: (rule, value, callback) => {
+							if (!/^1[123456789]\d{9}$/.test(value)) {
+								callback(new Error("请输入正确的手机号"));
+							} else {
+								callback()
+							}
+						},
+						trigger: 'blur'
+					}],
+				},
+				isCache: true,
+				loading: false
+			}
+		},
+		created() {
+			if (this.isUpdate) {
+				this.isCache = false;
+				getCustomerDetailById(this.detailId).then(res => {
+					if (res.state) {
+						this.customerForm = res.data;
+					}
+				})
+			} else {
+				if (this.$store.getters.customerData && JSON.stringify(this.$store.getters.customerData) != '{}') {
+					if (this.$store.getters.customerData.organizationId != this.$store.getters.organization.id) {
+						return this.$store.dispatch('projectBase/changeCustomerData', {});
+					}
+					this.initForm(this.$store.getters.customerData);
+				}
+				this.customerForm['organizationId'] = this.$store.getters.organization.id;
+				this.customerForm['projectId'] = this.$store.getters.project.id;
+			}
+		},
+		beforeDestroy() {
+			this.cacheData();
+		},
+		methods: {
+			initForm(data) {
+				this.customerForm = data;
+			},
+			cacheData() {
+				if (!this.isCache) return;
+				this.$store.dispatch('projectBase/changeCustomerData', this.setData());
+			},
+			setData() {
+				let postData = JSON.parse(JSON.stringify(this.customerForm));
+				postData['firsTimeRoom'] = this.$refs.selectHouse.selectNodeId;
+				return postData;
+			},
+			submit() {
+				this.loading = true;
+				this.$refs.customerForm.validate((valid) => {
+					if (valid) {
+						let postData = this.setData();
+						if (this.isUpdate) {
+							updateCustomer(postData).then(this.successFunc);
+						} else {
+							insertCustomer(postData).then(this.successFunc);
+						}
+					} else {
+						this.loading = false;
+						return false;
+					}
+				});
+			},
+			successFunc(res) {
+				this.loading = false;
+				if (res.state) {
+					this.$message.success('操作成功');
+					this.$store.dispatch('projectBase/changeCustomerData', {});
+					this.isCache = false;
+					this.$emit('callback', 'init');
+				}
+			}
+		},
+		components: {
+			selectHouse
+		},
+	}
+</script>
+
 <style lang="scss"></style>

+ 2 - 1
virgo.wzfrontend/console/src/components/work/property/propertyFlowForm.vue

@@ -114,7 +114,8 @@
 						projectItemId: obj.projectItem.id,
 						projectItemName: obj.projectItem.name,
 						projectItemTargetId: obj.projectItemTarget.id,
-						projectItemTargetName: obj.projectItemTarget.name
+						projectItemTargetName: obj.projectItemTarget.name,
+						deviceLevelId: this.propertyForm.operateDeviceLevelId
 					}
 				}
 			}

+ 183 - 183
virgo.wzfrontend/console/src/components/work/space/project/edit.vue

@@ -1,184 +1,184 @@
-<template>
-	<div class="hui-flex hui-dialog">
-		<div class="hui-flex-box hui-dialog-content">
-			<el-form ref="projectForm" label-position="top" :model="projectForm">
-				<el-form-item label="项目名称" prop="name" :rules="[{required: true, message: '请输入项目名称'}]">
-					<el-input type="text" v-model="projectForm.name" placeholder="请输入项目名称"></el-input>
-				</el-form-item>
-				<el-form-item label="项目类型" prop="type" :rules="[{required: true, message: '请选择项目类型'}]">
-					<el-select v-model="projectForm.type" placeholder="请选择项目类型">
-						<el-option :label="item.name" :value="item.id" v-for="(item,index) in $field.field.projectType"
-							:key="item.id">
-						</el-option>
-					</el-select>
-				</el-form-item>
-				<el-form-item label="项目区域" prop="address" :rules="[{required: true, message: '请选择项目区域'}]">
-					<city ref="city" v-model="projectForm.address"></city>
-				</el-form-item>
-				<el-form-item label="具体地点">
-					<el-input type="text" v-model="specific" placeholder="请输入具体地点">
-					</el-input>
-				</el-form-item>
-				<el-form-item label="配套设施" prop="type">
-					<el-select v-model="supportingFacilities" placeholder="请选择配套设施" multiple collapse-tags>
-						<el-option :label="item.name" :value="item.id"
-							v-for="(item,index) in $field.field.supportingFacilities" :key="item.id">
-						</el-option>
-					</el-select>
-				</el-form-item>
-				<el-form-item label="项目描述" class="hui-textarea">
-					<el-input type="textarea" v-model="projectForm.comment" placeholder="请输入项目描述" resize="none">
-					</el-input>
-				</el-form-item>
-				<el-form-item label="地图位置" class="hui-textarea">
-					<select-location ref="map" v-if="showMap" type="insert" :coordinates="projectForm.coordinates">
-					</select-location>
-				</el-form-item>
-				<el-form-item label="项目配图" class="hui-textarea">
-					<upload ref="upload" :list="responsibility" type="insert"></upload>
-				</el-form-item>
-				<el-form-item label="项目标签" class="hui-textarea">
-					<tag ref="tag" type="insert" :tagType="1"
-						:tagActive="projectForm.tagIds ? projectForm.tagIds.split(',') : []">
-					</tag>
-				</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" :loading="loading">保 存</el-button>
-		</div>
-	</div>
-</template>
-
-<script>
-	import {
-		insertProject,
-		getProjectDetailById,
-		updateProject
-	} from '@/httpApi/space'
-	import upload from '@/components/common/upload'
-	import city from '@/components/common/city'
-	import tag from '@/components/common/tag'
-	import selectLocation from '@/components/work/common/selectLocation'
-	export default {
-		props: ['isUpdate', 'detailId'],
-		data() {
-			return {
-				projectForm: {
-					name: '', //项目名称
-					address: [],
-					comment: '',
-					data: '',
-					organizationId: '',
-					picture: '',
-					tagIds: '',
-					type: 1,
-					coordinates: '',
-					supportingFacilities: ''
-				},
-				specific: '',
-				responsibility: [],
-				showMap: false,
-				supportingFacilities: [],
-				isCache: true,
-				loading: false
-			}
-		},
-		created() {
-			if (this.isUpdate) {
-				this.isCache = false;
-				getProjectDetailById(this.detailId).then(res => {
-					if (res.state) {
-						this.projectForm = res.data;
-						this.showMap = true;
-						this.projectForm.address = JSON.parse(this.projectForm.address);
-						if (this.projectForm.picture) this.responsibility = JSON.parse(this.projectForm.picture);
-						if (this.projectForm.supportingFacilities) this.supportingFacilities = this.projectForm
-							.supportingFacilities.split(',').map(node => Number(node));
-						if (this.projectForm.data) {
-							let data = JSON.parse(this.projectForm.data);
-							this.specific = data.specific;
-						}
-					}
-				})
-			} else {
-				if (this.$store.getters.projectData && JSON.stringify(this.$store.getters.projectData) != '{}') {
-					if (this.$store.getters.projectData.organizationId != this.$store.getters.user.organization.id) {
-						return this.$store.dispatch('projectBase/changeProjectData', {});
-					}
-					this.initForm(this.$store.getters.projectData);
-				}
-				this.projectForm['organizationId'] = this.$store.getters.user.organization.id;
-				this.showMap = true;
-			}
-		},
-		beforeDestroy() {
-			this.cacheData();
-		},
-		methods: {
-			initForm(data) {
-				this.projectForm = data;
-				this.projectForm.address = JSON.parse(this.projectForm.address);
-				if (this.projectForm.picture) this.responsibility = JSON.parse(this.projectForm.picture);
-				if (this.projectForm.supportingFacilities) this.supportingFacilities = this.projectForm
-					.supportingFacilities.split(',').map(node => Number(node));
-				if (this.projectForm.data) {
-					let data = JSON.parse(this.projectForm.data);
-					this.specific = data.specific;
-				}
-			},
-			cacheData() {
-				if (!this.isCache) return;
-				this.$store.dispatch('projectBase/changeProjectData', this.setData());
-			},
-			setData() {
-				let postData = JSON.parse(JSON.stringify(this.projectForm));
-				postData.data = JSON.stringify({
-					specific: this.specific
-				});
-				postData['picture'] = JSON.stringify(this.$refs.upload.fileList);
-				postData['address'] = JSON.stringify(this.projectForm.address);
-				postData['tagIds'] = this.$refs.tag.tagIds();
-				postData['coordinates'] = this.$refs.map.address;
-				postData['supportingFacilities'] = this.supportingFacilities.join(',');
-				postData['addressCode'] = this.$refs.city.addressCode();
-				return postData;
-			},
-			submit() {
-				this.loading = true;
-				this.$refs.projectForm.validate((valid) => {
-					if (valid) {
-						let postData = this.setData();
-						if (this.isUpdate) {
-							updateProject(postData).then(this.successFunc);
-						} else {
-							insertProject(postData).then(this.successFunc);
-						}
-					} else {
-						this.loading = false;
-						return false;
-					}
-				});
-			},
-			successFunc(res) {
-				this.loading = false;
-				if (res.state) {
-					this.$store.dispatch('projectBase/changeProjectData', {});
-					this.isCache = false;
-					this.$message.success('操作成功');
-					this.$emit('callback', 'init');
-				}
-
-			}
-		},
-		components: {
-			city,
-			upload,
-			tag,
-			selectLocation
-		},
-	}
-</script>
-
+<template>
+	<div class="hui-flex hui-dialog">
+		<div class="hui-flex-box hui-dialog-content">
+			<el-form ref="projectForm" label-position="top" :model="projectForm">
+				<el-form-item label="项目名称" prop="name" :rules="[{required: true, message: '请输入项目名称'}]">
+					<el-input type="text" v-model="projectForm.name" placeholder="请输入项目名称"></el-input>
+				</el-form-item>
+				<el-form-item label="项目类型" prop="type" :rules="[{required: true, message: '请选择项目类型'}]">
+					<el-select v-model="projectForm.type" placeholder="请选择项目类型">
+						<el-option :label="item.name" :value="item.id" v-for="(item,index) in $field.field.projectType"
+							:key="item.id">
+						</el-option>
+					</el-select>
+				</el-form-item>
+				<el-form-item label="项目区域" prop="address" :rules="[{required: true, message: '请选择项目区域'}]">
+					<city ref="city" v-model="projectForm.address"></city>
+				</el-form-item>
+				<el-form-item label="具体地点">
+					<el-input type="text" v-model="specific" placeholder="请输入具体地点">
+					</el-input>
+				</el-form-item>
+				<el-form-item label="配套设施" prop="type">
+					<el-select v-model="supportingFacilities" placeholder="请选择配套设施" multiple collapse-tags>
+						<el-option :label="item.name" :value="item.id"
+							v-for="(item,index) in $field.field.supportingFacilities" :key="item.id">
+						</el-option>
+					</el-select>
+				</el-form-item>
+				<el-form-item label="项目描述" class="hui-textarea">
+					<el-input type="textarea" v-model="projectForm.comment" placeholder="请输入项目描述" resize="none">
+					</el-input>
+				</el-form-item>
+				<el-form-item label="地图位置" class="hui-textarea">
+					<select-location ref="map" v-if="showMap" type="insert" :coordinates="projectForm.coordinates">
+					</select-location>
+				</el-form-item>
+				<el-form-item label="项目配图" class="hui-textarea">
+					<upload ref="upload" :list="responsibility" type="insert"></upload>
+				</el-form-item>
+				<el-form-item label="项目标签" class="hui-textarea">
+					<tag ref="tag" type="insert" :tagType="1"
+						:tagActive="projectForm.tagIds ? projectForm.tagIds.split(',') : []">
+					</tag>
+				</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" :loading="loading">保 存</el-button>
+		</div>
+	</div>
+</template>
+
+<script>
+	import {
+		insertProject,
+		getProjectDetailById,
+		updateProject
+	} from '@/httpApi/space'
+	import upload from '@/components/common/upload'
+	import city from '@/components/common/city'
+	import tag from '@/components/common/tag'
+	import selectLocation from '@/components/work/common/selectLocation'
+	export default {
+		props: ['isUpdate', 'detailId'],
+		data() {
+			return {
+				projectForm: {
+					name: '', //项目名称
+					address: [],
+					comment: '',
+					data: '',
+					organizationId: '',
+					picture: '',
+					tagIds: '',
+					type: 1,
+					coordinates: '',
+					supportingFacilities: ''
+				},
+				specific: '',
+				responsibility: [],
+				showMap: false,
+				supportingFacilities: [],
+				isCache: true,
+				loading: false
+			}
+		},
+		created() {
+			if (this.isUpdate) {
+				this.isCache = false;
+				getProjectDetailById(this.detailId).then(res => {
+					if (res.state) {
+						this.projectForm = res.data;
+						this.showMap = true;
+						this.projectForm.address = JSON.parse(this.projectForm.address);
+						if (this.projectForm.picture) this.responsibility = JSON.parse(this.projectForm.picture);
+						if (this.projectForm.supportingFacilities) this.supportingFacilities = this.projectForm
+							.supportingFacilities.split(',').map(node => Number(node));
+						if (this.projectForm.data) {
+							let data = JSON.parse(this.projectForm.data);
+							this.specific = data.specific;
+						}
+					}
+				})
+			} else {
+				if (this.$store.getters.projectData && JSON.stringify(this.$store.getters.projectData) != '{}') {
+					if (this.$store.getters.projectData.organizationId != this.$store.getters.organization.id) {
+						return this.$store.dispatch('projectBase/changeProjectData', {});
+					}
+					this.initForm(this.$store.getters.projectData);
+				}
+				this.projectForm['organizationId'] = this.$store.getters.organization.id;
+				this.showMap = true;
+			}
+		},
+		beforeDestroy() {
+			this.cacheData();
+		},
+		methods: {
+			initForm(data) {
+				this.projectForm = data;
+				this.projectForm.address = JSON.parse(this.projectForm.address);
+				if (this.projectForm.picture) this.responsibility = JSON.parse(this.projectForm.picture);
+				if (this.projectForm.supportingFacilities) this.supportingFacilities = this.projectForm
+					.supportingFacilities.split(',').map(node => Number(node));
+				if (this.projectForm.data) {
+					let data = JSON.parse(this.projectForm.data);
+					this.specific = data.specific;
+				}
+			},
+			cacheData() {
+				if (!this.isCache) return;
+				this.$store.dispatch('projectBase/changeProjectData', this.setData());
+			},
+			setData() {
+				let postData = JSON.parse(JSON.stringify(this.projectForm));
+				postData.data = JSON.stringify({
+					specific: this.specific
+				});
+				postData['picture'] = JSON.stringify(this.$refs.upload.fileList);
+				postData['address'] = JSON.stringify(this.projectForm.address);
+				postData['tagIds'] = this.$refs.tag.tagIds();
+				postData['coordinates'] = this.$refs.map.address;
+				postData['supportingFacilities'] = this.supportingFacilities.join(',');
+				postData['addressCode'] = this.$refs.city.addressCode();
+				return postData;
+			},
+			submit() {
+				this.loading = true;
+				this.$refs.projectForm.validate((valid) => {
+					if (valid) {
+						let postData = this.setData();
+						if (this.isUpdate) {
+							updateProject(postData).then(this.successFunc);
+						} else {
+							insertProject(postData).then(this.successFunc);
+						}
+					} else {
+						this.loading = false;
+						return false;
+					}
+				});
+			},
+			successFunc(res) {
+				this.loading = false;
+				if (res.state) {
+					this.$store.dispatch('projectBase/changeProjectData', {});
+					this.isCache = false;
+					this.$message.success('操作成功');
+					this.$emit('callback', 'init');
+				}
+
+			}
+		},
+		components: {
+			city,
+			upload,
+			tag,
+			selectLocation
+		},
+	}
+</script>
+
 <style lang="scss"></style>

+ 2 - 1
virgo.wzfrontend/console/src/httpApi/crm.js

@@ -14,7 +14,8 @@ export function getCustomerListByPage(data) {
  * 获取客户统计
  * 
  */
-export function getCustomerCount(data) {
+export function getCustomerCount(data) {
+	console.log(data);
 	return request({
 		url: `/manager/client/typeCount`,
 		method: 'post',

+ 13 - 0
virgo.wzfrontend/console/src/httpApi/organization.js

@@ -58,6 +58,19 @@ export function bindProjectDetail(data) {
 	})
 }
 /* 
+ * 更改绑定客户/经纪人/组织至组织项目
+ * 
+ * 
+ */
+export function putBindProject(data) {
+	return request({
+		url: `/manager/bindProject/update`,
+		method: 'put',
+		data: data
+	})
+}
+/* 
+
  * 获取组织项目部门列表
  * 
  * 

+ 58 - 19
virgo.wzfrontend/console/src/views/work/business/organization.vue

@@ -38,7 +38,7 @@
 							<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>
+								<span class="table-operation" @click="deleteOrganization(scope.row)">删除</span>
 							</div>
 						</template>
 					</el-table-column>
@@ -71,7 +71,9 @@
 	} from '@/httpApi/business'
 	import {
 		getOrganizationByCode,
-		bindProject
+		bindProject,
+		bindProjectDetail,
+		putBindProject
 	} from '@/httpApi/organization'
 
 	import edit from '@/components/work/business/organization/edit'
@@ -123,18 +125,9 @@
 				this.detailId = item.id;
 				this.drawer = true;
 			},
-			deleteProject(item) {
-				this.$confirm('确定要删除该企业?', () => {
-					deleteOrganizationById(item.id).then(res => {
-						if (res.state) {
-							this.init();
-							this.$message.success('操作成功');
-						}
-					})
-				});
-			},
 			bindOrganization(item) {
-				let organizationId = '';
+				let organizationId = '',
+					_self = this;
 				this.$prompt('请输入组织编码', '红链提示', {
 					confirmButtonText: '确 定',
 					cancelButtonClass: 'cancel',
@@ -146,9 +139,20 @@
 						if (action === 'confirm') {
 							getOrganizationByCode(instance.inputValue).then(res => {
 								if (res.state) {
-									if (!res.data) return this.$message.warning('该组织编码无效,请重新输入');
+									if (!res.data) return _self.$message.warning('该组织编码无效,请重新输入');
 									organizationId = res.data.id;
-									done();
+									bindProjectDetail({
+										organizationId: _self.$store.getters.organization.id,
+										projectId: _self.$store.getters.project.id,
+										bindOrganizationId: organizationId,
+										identityId: 4
+									}).then(node => {
+										if (node.state) {
+											if (node.data.length > 0) return _self.$message
+												.warning('该组织已被绑定,不能再次绑定');
+											done();
+										}
+									})
 								}
 							})
 						} else {
@@ -157,8 +161,8 @@
 					}
 				}).then((data) => {
 					bindProject({
-						organizationId: this.$store.getters.organization.id,
-						projectId: this.$store.getters.project.id,
+						organizationId: _self.$store.getters.organization.id,
+						projectId: _self.$store.getters.project.id,
 						merchantId: item.id,
 						bindOrganizationId: organizationId,
 						identityId: 4
@@ -169,14 +173,49 @@
 								status: 1
 							}).then(res => {
 								if (res.state) {
-									this.init();
-									this.$message.success('操作成功');
+									_self.init();
+									_self.$message.success('操作成功');
 								}
 							})
 						}
 					})
 				}).catch(() => {});
 			},
+			deleteOrganization(val) {
+				let _self = this;
+				this.$confirm('确定要删除该企业?', () => {
+					if (val.status == 1) {
+						bindProjectDetail({
+							organizationId: _self.$store.getters.organization.id,
+							projectId: _self.$store.getters.project.id,
+							merchantId: val.id,
+							identityId: 4
+						}).then(node => {
+							if (node.state) {
+								let data = node.data;
+								if (data.length === 0) return _self.deleteOrganizaitonFunc(val.id);
+								putBindProject({
+									id: data[0].id,
+									merchantId: 0,
+									bindOrganizationId: 0
+								}).then(res => {
+									if (res.state) _self.deleteOrganizaitonFunc(val.id);
+								})
+							}
+						})
+					} else {
+						_self.deleteOrganizaitonFunc(val.id);
+					}
+				});
+			},
+			deleteOrganizaitonFunc(id) {
+				deleteOrganizationById(id).then(res => {
+					if (res.state) {
+						this.init();
+						this.$message.success('操作成功');
+					}
+				})
+			},
 			callback(type) {
 				if (type === 'init') this.init();
 				this.visible = false;

+ 240 - 199
virgo.wzfrontend/console/src/views/work/crm/agent.vue

@@ -1,200 +1,241 @@
-<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">
-			<list-filter type="agent" @filter="filterInit"></list-filter>
-			<div class="hui-content-insert">
-				<el-button type="primary" size="medium" @click="insertAgent">新增经纪人</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="primaryArea"></el-table-column>
-					<el-table-column label="邀请项目" width="150">
-						<template slot-scope="scope">
-							<div class="hui-table-operation" v-if="!scope.row.status">
-								<span class="table-operation" @click="inviteAgent(scope.row)">发送邀请</span>
-							</div>
-							<div class="hui-table-operation" v-if="scope.row.status === 3">
-								<span class="table-operation" @click="inviteAgent(scope.row)">重新邀请</span>
-							</div>
-						</template>
-					</el-table-column>
-					<el-table-column label="邀请状态" width="150">
-						<template slot-scope="scope">
-							<div v-if="!scope.row.status" class="hui-state">
-								<span class="hui-state-bage hui-state-primary"></span>
-								<span class="hui-state-label">待邀请</span>
-							</div>
-							<div v-if="scope.row.status == 1" class="hui-state">
-								<span class="hui-state-bage hui-state-info"></span>
-								<span class="hui-state-label">邀请中</span>
-							</div>
-							<div v-if="scope.row.status == 2" class="hui-state">
-								<span class="hui-state-bage hui-state-success"></span>
-								<span class="hui-state-label">通过邀请</span>
-							</div>
-							<div v-if="scope.row.status == 3" class="hui-state">
-								<span class="hui-state-bage hui-state-error"></span>
-								<span class="hui-state-label">拒绝邀请</span>
-							</div>
-						</template>
-					</el-table-column>
-					<el-table-column label="操作" width="200">
-						<template slot-scope="scope">
-							<div class="hui-table-operation">
-								<span class="table-operation" @click="lookAgent(scope.row)">详情</span>
-								<span class="table-operation" @click="updateAgent(scope.row)">编辑</span>
-								<span class="table-operation" @click="deleteAgent(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 :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"></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 {
-		getAgentListByPage,
-		deleteAgentById,
-		updateAgent
-	} from '@/httpApi/crm'
-	import {
-		testPhone
-	} from '@/httpApi/organization'
-	import edit from '@/components/work/crm/agent/edit'
-	import detail from '@/components/work/crm/agent/detail'
-	import listFilter from '@/components/common/listFilter'
-	export default {
-		data() {
-			return {
-				tableData: [],
-				currPage: 1,
-				pageSize: 10,
-				totalCount: 0,
-				visible: false,
-				detailId: '',
-				isUpdate: false,
-				drawer: false,
-				filterOption: {}
-			}
-		},
-		created() {
-			this.init();
-		},
-		methods: {
-			init() {
-				let postData = {
-					currPage: this.currPage,
-					pageSize: this.pageSize,
-					organizationId: this.$store.getters.organization.id,
-					userId: this.$store.getters.user.id
-				}
-				postData = Object.assign(postData, this.filterOption);
-				getAgentListByPage(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();
-			},
-			currentChange(currPage) {
-				this.currPage = currPage;
-				this.init();
-			},
-			insertAgent() {
-				this.isUpdate = false;
-				this.visible = true;
-			},
-			updateAgent(val) {
-				this.detailId = val.id;
-				this.isUpdate = true;
-				this.visible = true;
-			},
-			lookAgent(val) {
-				this.detailId = val.id;
-				this.drawer = true;
-			},
-			inviteAgent(user) {
-				testPhone(user.phone).then(res => {
-					if (res.state) {
-						this.$confirm('是否邀请该经纪人至当前项目?', () => {
-							this.$msg.send({
-								dataId: user.id,
-								identityId: 2
-							}, {
-								messageType: 6,
-								userIds: res.data.id
-							}).then(node => {
-								if (node.state) {
-									updateAgent({
-										id: user.id,
-										status: 1
-									}).then(res => {
-										if (res.state) {
-											this.init();
-											this.$message.success('邀请成功');
-										}
-									})
-								}
-							})
-						});
-					} else {
-						this.$message.warning('用户不存在,无法绑定');
-					}
-				})
-			},
-			deleteAgent(val) {
-				this.$confirm('确定要删除该经纪人?', () => {
-					deleteAgentById(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,
-			listFilter
-		},
-	}
-</script>
-
-<style lang="scss">
-
+<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">
+			<list-filter type="agent" @filter="filterInit"></list-filter>
+			<div class="hui-content-insert">
+				<el-button type="primary" size="medium" @click="insertAgent">新增经纪人</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="primaryArea"></el-table-column>
+					<el-table-column label="邀请项目" width="150">
+						<template slot-scope="scope">
+							<div class="hui-table-operation" v-if="!scope.row.status">
+								<span class="table-operation" @click="inviteAgent(scope.row)">发送邀请</span>
+							</div>
+							<div class="hui-table-operation" v-if="scope.row.status === 3">
+								<span class="table-operation" @click="inviteAgent(scope.row)">重新邀请</span>
+							</div>
+						</template>
+					</el-table-column>
+					<el-table-column label="邀请状态" width="150">
+						<template slot-scope="scope">
+							<div v-if="!scope.row.status" class="hui-state">
+								<span class="hui-state-bage hui-state-primary"></span>
+								<span class="hui-state-label">待邀请</span>
+							</div>
+							<div v-if="scope.row.status == 1" class="hui-state">
+								<span class="hui-state-bage hui-state-info"></span>
+								<span class="hui-state-label">邀请中</span>
+							</div>
+							<div v-if="scope.row.status == 2" class="hui-state">
+								<span class="hui-state-bage hui-state-success"></span>
+								<span class="hui-state-label">通过邀请</span>
+							</div>
+							<div v-if="scope.row.status == 3" class="hui-state">
+								<span class="hui-state-bage hui-state-error"></span>
+								<span class="hui-state-label">拒绝邀请</span>
+							</div>
+						</template>
+					</el-table-column>
+					<el-table-column label="操作" width="200">
+						<template slot-scope="scope">
+							<div class="hui-table-operation">
+								<span class="table-operation" @click="lookAgent(scope.row)">详情</span>
+								<span class="table-operation" @click="updateAgent(scope.row)">编辑</span>
+								<span class="table-operation" @click="deleteAgent(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 :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"></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 {
+		getAgentListByPage,
+		deleteAgentById,
+		updateAgent
+	} from '@/httpApi/crm'
+	import {
+		testPhone,
+		bindProjectDetail,
+		putBindProject
+	} from '@/httpApi/organization'
+	import edit from '@/components/work/crm/agent/edit'
+	import detail from '@/components/work/crm/agent/detail'
+	import listFilter from '@/components/common/listFilter'
+	export default {
+		data() {
+			return {
+				tableData: [],
+				currPage: 1,
+				pageSize: 10,
+				totalCount: 0,
+				visible: false,
+				detailId: '',
+				isUpdate: false,
+				drawer: false,
+				filterOption: {}
+			}
+		},
+		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,
+					userId: this.$store.getters.user.userId
+				}
+				postData = Object.assign(postData, this.filterOption);
+				getAgentListByPage(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();
+			},
+			currentChange(currPage) {
+				this.currPage = currPage;
+				this.init();
+			},
+			insertAgent() {
+				this.isUpdate = false;
+				this.visible = true;
+			},
+			updateAgent(val) {
+				this.detailId = val.id;
+				this.isUpdate = true;
+				this.visible = true;
+			},
+			lookAgent(val) {
+				this.detailId = val.id;
+				this.drawer = true;
+			},
+			inviteAgent(user) {
+				let _self = this;
+				testPhone(user.phone).then(res => {
+					if (res.state) {
+						bindProjectDetail({
+							organizationId: _self.$store.getters.organization.id,
+							projectId: _self.$store.getters.project.id,
+							userId: res.data.id,
+							identityId: 2
+						}).then(node => {
+							if (node.state) {
+								if (node.data.length > 0) return _self.$message
+									.warning('该经纪人已被绑定,不能再次绑定');
+								_self.$confirm('是否邀请该经纪人至当前项目?', () => {
+									_self.$msg.send({
+										dataId: user.id,
+										identityId: 2
+									}, {
+										messageType: 6,
+										userIds: res.data.id
+									}).then(node => {
+										if (node.state) {
+											updateAgent({
+												id: user.id,
+												status: 1
+											}).then(res => {
+												if (res.state) {
+													_self.init();
+													_self.$message.success('邀请成功');
+												}
+											})
+										}
+									})
+								});
+							}
+						})
+					} else {
+						this.$message.warning('用户不存在,无法邀请');
+					}
+				})
+			},
+			deleteAgent(val) {
+				let _self = this;
+				this.$confirm('确定要删除该经纪人?', () => {
+					if (val.status == 2) {
+						bindProjectDetail({
+							organizationId: _self.$store.getters.organization.id,
+							projectId: _self.$store.getters.project.id,
+							agentId: val.id,
+							identityId: 2
+						}).then(node => {
+							if (node.state) {
+								let data = node.data;
+								if (data.length === 0) return _self.deleteAgentFunc(val.id);
+								putBindProject({
+									id: data[0].id,
+									agentId: 0,
+									userId: 0
+								}).then(res => {
+									if (res.state) _self.deleteAgentFunc(val.id);
+								})
+							}
+						})
+					} else {
+						_self.deleteAgentFunc(val.id);
+					}
+				});
+			},
+			deleteAgentFunc(id) {
+				deleteAgentById(id).then(res => {
+					if (res.state) {
+						this.init();
+						this.$message.success('操作成功');
+					}
+				})
+			},
+			callback(type) {
+				if (type === 'init') this.init();
+				this.visible = false;
+			}
+		},
+		components: {
+			edit,
+			detail,
+			listFilter
+		},
+	}
+</script>
+
+<style lang="scss">
+
 </style>

+ 338 - 296
virgo.wzfrontend/console/src/views/work/crm/customer.vue

@@ -1,297 +1,339 @@
-<template>
-	<div class="hui-flex hui-content">
-		<div class="customer-test">
-			<div class="test-item" v-for="(item,index) in $field.field.customerType" :key="item.id">
-				<div class="name">{{item.name}}</div>
-				<div class="label alibaba color-cyan">{{countItem(item)}}</div>
-			</div>
-		</div>
-		<div class="customer-line"></div>
-		<div class="hui-content-title">
-			<div class="hui-title-item active">客户列表</div>
-		</div>
-		<div class="hui-flex-box hui-flex hui-table">
-			<list-filter type="customer" @filter="filterInit"></list-filter>
-			<div class="hui-content-insert">
-				<el-button type="primary" size="medium" @click="insertCustomer">新增客户</el-button>
-				<el-button type="info" size="medium" @click="downloadFile">标准模板下载</el-button>
-				<el-button type="info" size="medium" @click="$refs.upload.reloadUpload()">批量导入</el-button>
-				<customer-upload ref="upload" v-show="false" @changeFile="init"></customer-upload>
-			</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="客户类型">
-						<template slot-scope="scope">
-							<span>{{$field.findTypeName('customerType',scope.row.type)}}</span>
-						</template>
-					</el-table-column>
-					<el-table-column label="客户名称" prop="name"></el-table-column>
-					<el-table-column label="客户行业" prop="customerIndustry"></el-table-column>
-					<el-table-column label="需求区间" prop="demand"></el-table-column>
-					<el-table-column label="公海客户" width="100">
-						<template slot-scope="scope">
-							<div class="hui-table-operation">
-								<el-switch v-model="scope.row.highSeas" :active-value="1" :inactive-value="2"
-									@change="val=>putHighSeas(val,scope.row)">
-								</el-switch>
-							</div>
-						</template>
-					</el-table-column>
-					<el-table-column label="跟进记录" width="100">
-						<template slot-scope="scope">
-							<div class="hui-table-operation">
-								<span class="table-operation" @click="lookCustomer(scope.row,'followUpRecord')">
-									查看
-								</span>
-							</div>
-						</template>
-					</el-table-column>
-					<el-table-column label="邀请项目" width="150">
-						<template slot-scope="scope">
-							<div class="hui-table-operation" v-if="!scope.row.status">
-								<span class="table-operation" @click="inviteCustomer(scope.row)">发送邀请</span>
-							</div>
-							<div class="hui-table-operation" v-if="scope.row.status === 3">
-								<span class="table-operation" @click="inviteCustomer(scope.row)">重新邀请</span>
-							</div>
-						</template>
-					</el-table-column>
-					<el-table-column label="邀请状态" width="150">
-						<template slot-scope="scope">
-							<div v-if="!scope.row.status" class="hui-state">
-								<span class="hui-state-bage hui-state-primary"></span>
-								<span class="hui-state-label">待邀请</span>
-							</div>
-							<div v-if="scope.row.status == 1" class="hui-state">
-								<span class="hui-state-bage hui-state-info"></span>
-								<span class="hui-state-label">邀请中</span>
-							</div>
-							<div v-if="scope.row.status == 2" class="hui-state">
-								<span class="hui-state-bage hui-state-success"></span>
-								<span class="hui-state-label">通过邀请</span>
-							</div>
-							<div v-if="scope.row.status == 3" class="hui-state">
-								<span class="hui-state-bage hui-state-error"></span>
-								<span class="hui-state-label">拒绝邀请</span>
-							</div>
-						</template>
-					</el-table-column>
-					<el-table-column label="操作" width="200">
-						<template slot-scope="scope">
-							<div class="hui-table-operation">
-								<span class="table-operation" @click="lookCustomer(scope.row,'customer')">详情</span>
-								<span class="table-operation" @click="updateCustomer(scope.row)">编辑</span>
-								<span class="table-operation" @click="deleteCustomer(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 :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"></edit>
-		</el-dialog>
-		<el-drawer :title="type === 'customer'?'客户详情':'跟进列表'" :visible.sync="drawer" :size="400" :append-to-body="true">
-			<detail v-if="drawer && type === 'customer'" :detailId="detailId"></detail>
-			<follow-up-record-detail v-if="drawer && type === 'followUpRecord'" :detailId="detailId">
-			</follow-up-record-detail>
-		</el-drawer>
-	</div>
-</template>
-
-<script>
-	import {
-		getCustomerListByPage,
-		deleteCustomerById,
-		updateCustomer,
-		getCustomerCount
-	} from '@/httpApi/crm'
-	import {
-		testPhone
-	} from '@/httpApi/organization'
-	import edit from '@/components/work/crm/customer/edit'
-	import detail from '@/components/work/crm/customer/detail'
-	import followUpRecordDetail from '@/components/work/crm/customer/followUpRecordDetail'
-	import listFilter from '@/components/common/listFilter'
-	import customerUpload from '@/components/work/crm/customer/customerUpload'
-	import config from '@/config'
-	export default {
-		data() {
-			return {
-				tableData: [],
-				currPage: 1,
-				pageSize: 10,
-				totalCount: 0,
-				visible: false,
-				detailId: '',
-				isUpdate: false,
-				drawer: false,
-				type: 'customer',
-				filterOption: {},
-				countBox: []
-			}
-		},
-		created() {
-			this.init();
-		},
-		methods: {
-			init() {
-				let postData = {
-					currPage: this.currPage,
-					pageSize: this.pageSize,
-					organizationId: this.$store.getters.organization.id,
-					userId: this.$store.getters.user.id
-				}
-				postData = Object.assign(postData, this.filterOption);
-				getCustomerListByPage(postData).then(res => {
-					if (res.state) {
-						this.tableData = res.data.dataList;
-						this.totalCount = res.data.totalCount;
-					}
-				})
-				getCustomerCount({
-					organizationId: this.$store.getters.organization.id,
-					userId: this.$store.getters.user.id
-				}).then(res => {
-					if (res.state) {
-						this.countBox = res.data;
-					}
-				})
-			},
-			downloadFile() {
-				window.location.href = config.baseURL + '/manager/client/downloadModel';
-			},
-			countItem(item) {
-				let list = this.countBox.filter(node => node.type === item.id);
-				if (list.length === 0) return 0;
-				return list[0].number;
-			},
-			filterInit(option) {
-				this.filterOption = option;
-				this.currPage = 1;
-				this.init();
-			},
-			currentChange(currPage) {
-				this.currPage = currPage;
-				this.init();
-			},
-			insertCustomer() {
-				this.isUpdate = false;
-				this.visible = true;
-			},
-			updateCustomer(val) {
-				this.detailId = val.id;
-				this.isUpdate = true;
-				this.visible = true;
-			},
-			lookCustomer(val, type) {
-				this.detailId = val.id;
-				this.type = type;
-				this.drawer = true;
-			},
-			putHighSeas(val, item) {
-				updateCustomer({
-					id: item.id,
-					highSeas: val
-				}).then(res => {
-					if (res.state) {
-						this.init();
-						this.$message.success('操作成功');
-					}
-				})
-			},
-			inviteCustomer(user) {
-				testPhone(user.phone).then(res => {
-					if (res.state) {
-						this.$confirm('是否邀请该客户至当前项目?', () => {
-							this.$msg.send({
-								dataId: user.id,
-								identityId: 1
-							}, {
-								messageType: 6,
-								userIds: res.data.id
-							}).then(node => {
-								if (node.state) {
-									updateCustomer({
-										id: user.id,
-										status: 1
-									}).then(res => {
-										if (res.state) {
-											this.init();
-											this.$message.success('邀请成功');
-										}
-									})
-								}
-							})
-						});
-					} else {
-						this.$message.warning('用户不存在,无法绑定');
-					}
-				})
-			},
-			deleteCustomer(val) {
-				this.$confirm('确定要删除该客户?', () => {
-					deleteCustomerById(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,
-			followUpRecordDetail,
-			listFilter,
-			customerUpload
-		},
-	}
-</script>
-
-<style lang="scss">
-	.customer-test {
-		padding: 15px 20px;
-		display: flex;
-
-		.test-item {
-			border-right: 1px solid $--color-border;
-			width: 160px;
-			margin-right: 20px;
-
-			.name {
-				font-size: 12px;
-				opacity: 0.8;
-			}
-
-			.label {
-				font-size: 16px;
-				font-weight: 600;
-				padding-top: 5px;
-			}
-		}
-	}
-
-	.customer-line {
-		height: 12px;
-		background: $--background;
-	}
+<template>
+	<div class="hui-flex hui-content">
+		<div class="customer-test">
+			<div class="test-item" v-for="(item,index) in $field.field.customerType" :key="item.id">
+				<div class="name">{{item.name}}</div>
+				<div class="label alibaba color-cyan">{{countItem(item)}}</div>
+			</div>
+		</div>
+		<div class="customer-line"></div>
+		<div class="hui-content-title">
+			<div class="hui-title-item active">客户列表</div>
+		</div>
+		<div class="hui-flex-box hui-flex hui-table">
+			<list-filter type="customer" @filter="filterInit"></list-filter>
+			<div class="hui-content-insert">
+				<el-button type="primary" size="medium" @click="insertCustomer">新增客户</el-button>
+				<el-button type="info" size="medium" @click="downloadFile">标准模板下载</el-button>
+				<el-button type="info" size="medium" @click="$refs.upload.reloadUpload()">批量导入</el-button>
+				<customer-upload ref="upload" v-show="false" @changeFile="init"></customer-upload>
+			</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="客户类型">
+						<template slot-scope="scope">
+							<span>{{$field.findTypeName('customerType',scope.row.type)}}</span>
+						</template>
+					</el-table-column>
+					<el-table-column label="客户名称" prop="name"></el-table-column>
+					<el-table-column label="客户行业" prop="customerIndustry"></el-table-column>
+					<el-table-column label="需求区间" prop="demand"></el-table-column>
+					<el-table-column label="公海客户" width="100">
+						<template slot-scope="scope">
+							<div class="hui-table-operation">
+								<el-switch v-model="scope.row.highSeas" :active-value="1" :inactive-value="2"
+									@change="val=>putHighSeas(val,scope.row)">
+								</el-switch>
+							</div>
+						</template>
+					</el-table-column>
+					<el-table-column label="跟进记录" width="100">
+						<template slot-scope="scope">
+							<div class="hui-table-operation">
+								<span class="table-operation" @click="lookCustomer(scope.row,'followUpRecord')">
+									查看
+								</span>
+							</div>
+						</template>
+					</el-table-column>
+					<el-table-column label="邀请项目" width="150">
+						<template slot-scope="scope">
+							<div class="hui-table-operation" v-if="!scope.row.status">
+								<span class="table-operation" @click="inviteCustomer(scope.row)">发送邀请</span>
+							</div>
+							<div class="hui-table-operation" v-if="scope.row.status === 3">
+								<span class="table-operation" @click="inviteCustomer(scope.row)">重新邀请</span>
+							</div>
+						</template>
+					</el-table-column>
+					<el-table-column label="邀请状态" width="150">
+						<template slot-scope="scope">
+							<div v-if="!scope.row.status" class="hui-state">
+								<span class="hui-state-bage hui-state-primary"></span>
+								<span class="hui-state-label">待邀请</span>
+							</div>
+							<div v-if="scope.row.status == 1" class="hui-state">
+								<span class="hui-state-bage hui-state-info"></span>
+								<span class="hui-state-label">邀请中</span>
+							</div>
+							<div v-if="scope.row.status == 2" class="hui-state">
+								<span class="hui-state-bage hui-state-success"></span>
+								<span class="hui-state-label">通过邀请</span>
+							</div>
+							<div v-if="scope.row.status == 3" class="hui-state">
+								<span class="hui-state-bage hui-state-error"></span>
+								<span class="hui-state-label">拒绝邀请</span>
+							</div>
+						</template>
+					</el-table-column>
+					<el-table-column label="操作" width="200">
+						<template slot-scope="scope">
+							<div class="hui-table-operation">
+								<span class="table-operation" @click="lookCustomer(scope.row,'customer')">详情</span>
+								<span class="table-operation" @click="updateCustomer(scope.row)">编辑</span>
+								<span class="table-operation" @click="deleteCustomer(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 :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"></edit>
+		</el-dialog>
+		<el-drawer :title="type === 'customer'?'客户详情':'跟进列表'" :visible.sync="drawer" :size="400" :append-to-body="true">
+			<detail v-if="drawer && type === 'customer'" :detailId="detailId"></detail>
+			<follow-up-record-detail v-if="drawer && type === 'followUpRecord'" :detailId="detailId">
+			</follow-up-record-detail>
+		</el-drawer>
+	</div>
+</template>
+
+<script>
+	import {
+		getCustomerListByPage,
+		deleteCustomerById,
+		updateCustomer,
+		getCustomerCount
+	} from '@/httpApi/crm'
+	import {
+		testPhone,
+		bindProjectDetail,
+		putBindProject
+	} from '@/httpApi/organization'
+	import edit from '@/components/work/crm/customer/edit'
+	import detail from '@/components/work/crm/customer/detail'
+	import followUpRecordDetail from '@/components/work/crm/customer/followUpRecordDetail'
+	import listFilter from '@/components/common/listFilter'
+	import customerUpload from '@/components/work/crm/customer/customerUpload'
+	import config from '@/config'
+	export default {
+		data() {
+			return {
+				tableData: [],
+				currPage: 1,
+				pageSize: 10,
+				totalCount: 0,
+				visible: false,
+				detailId: '',
+				isUpdate: false,
+				drawer: false,
+				type: 'customer',
+				filterOption: {},
+				countBox: []
+			}
+		},
+		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,
+					userId: this.$store.getters.user.userId
+				}
+				postData = Object.assign(postData, this.filterOption);
+				getCustomerListByPage(postData).then(res => {
+					if (res.state) {
+						this.tableData = res.data.dataList;
+						this.totalCount = res.data.totalCount;
+					}
+				})
+				getCustomerCount({
+					organizationId: this.$store.getters.organization.id,
+					projectId: this.$store.getters.project.id,
+					userId: this.$store.getters.user.userId
+				}).then(res => {
+					if (res.state) {
+						this.countBox = res.data;
+					}
+				})
+			},
+			downloadFile() {
+				window.location.href = config.baseURL + '/manager/client/downloadModel';
+			},
+			countItem(item) {
+				let list = this.countBox.filter(node => node.type === item.id);
+				if (list.length === 0) return 0;
+				return list[0].number;
+			},
+			filterInit(option) {
+				this.filterOption = option;
+				this.currPage = 1;
+				this.init();
+			},
+			currentChange(currPage) {
+				this.currPage = currPage;
+				this.init();
+			},
+			insertCustomer() {
+				this.isUpdate = false;
+				this.visible = true;
+			},
+			updateCustomer(val) {
+				this.detailId = val.id;
+				this.isUpdate = true;
+				this.visible = true;
+			},
+			lookCustomer(val, type) {
+				this.detailId = val.id;
+				this.type = type;
+				this.drawer = true;
+			},
+			putHighSeas(val, item) {
+				updateCustomer({
+					id: item.id,
+					highSeas: val
+				}).then(res => {
+					if (res.state) {
+						this.init();
+						this.$message.success('操作成功');
+					}
+				})
+			},
+			inviteCustomer(user) {
+				let _self = this;
+				testPhone(user.phone).then(res => {
+					if (res.state) {
+						bindProjectDetail({
+							organizationId: _self.$store.getters.organization.id,
+							projectId: _self.$store.getters.project.id,
+							userId: res.data.id,
+							identityId: 1
+						}).then(node => {
+							if (node.state) {
+								if (node.data.length > 0) return _self.$message
+									.warning('该客户已被绑定,不能再次绑定');
+								_self.$confirm('是否邀请该客户至当前项目?', () => {
+									_self.$msg.send({
+										dataId: user.id,
+										identityId: 1
+									}, {
+										messageType: 6,
+										userIds: res.data.id
+									}).then(node => {
+										if (node.state) {
+											updateCustomer({
+												id: user.id,
+												status: 1
+											}).then(res => {
+												if (res.state) {
+													_self.init();
+													_self.$message.success('邀请成功');
+												}
+											})
+										}
+									})
+								});
+							}
+						})
+					} else {
+						_self.$message.warning('用户不存在,无法邀请');
+					}
+				})
+			},
+			deleteCustomer(val) {
+				let _self = this;
+				_self.$confirm('确定要删除该客户?', () => {
+					if (val.status == 2) {
+						bindProjectDetail({
+							organizationId: _self.$store.getters.organization.id,
+							projectId: _self.$store.getters.project.id,
+							clientId: val.id,
+							identityId: 1
+						}).then(node => {
+							if (node.state) {
+								let data = node.data;
+								if (data.length === 0) return _self.deleteCustomerFunc(val.id);
+								putBindProject({
+									id: data[0].id,
+									clientId: 0,
+									userId: 0
+								}).then(res => {
+									if (res.state) _self.deleteCustomerFunc(val.id);
+								})
+							}
+						})
+					} else {
+						_self.deleteCustomerFunc(val.id);
+					}
+				});
+			},
+			deleteCustomerFunc(id) {
+				deleteCustomerById(id).then(res => {
+					if (res.state) {
+						this.init();
+						this.$message.success('操作成功');
+					}
+				})
+			},
+			callback(type) {
+				if (type === 'init') this.init();
+				this.visible = false;
+			}
+		},
+		components: {
+			edit,
+			detail,
+			followUpRecordDetail,
+			listFilter,
+			customerUpload
+		},
+	}
+</script>
+
+<style lang="scss">
+	.customer-test {
+		padding: 15px 20px;
+		display: flex;
+
+		.test-item {
+			border-right: 1px solid $--color-border;
+			width: 160px;
+			margin-right: 20px;
+
+			.name {
+				font-size: 12px;
+				opacity: 0.8;
+			}
+
+			.label {
+				font-size: 16px;
+				font-weight: 600;
+				padding-top: 5px;
+			}
+		}
+	}
+
+	.customer-line {
+		height: 12px;
+		background: $--background;
+	}
 </style>

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

@@ -199,12 +199,37 @@
 					if (this.nowData.deviceId) {
 						this.filterOption['deviceId'] = this.nowData.deviceId;
 					} else {
-						this.filterOption['deviceLevelId'] = this.nowData.id;
+						this.filterOption['deviceLevelIds'] = this.getStorageIds([data]);
 					}
 				}
 				this.currPage = 1;
 				this.init();
 			},
+			getStorageIds(array) {
+				//获取档案库id
+				let ids = [];
+
+				function getIds(array, ids) {
+					array.forEach(item => {
+						if (item.id) {
+							ids.push(item.id);
+						}
+						if (item.children) {
+							ids = getIds(item.children, ids);
+						}
+					})
+					return ids;
+				}
+				if (Array.isArray(array)) {
+					if (array.length == 0) {
+						return [];
+					}
+				} else {
+					return [];
+				}
+				ids = getIds(array, ids);
+				return ids;
+			},
 			currentChange(currPage) {
 				this.currPage = currPage;
 				this.init();

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


virgo.wzfrontend/src/main/resources/static/console/static/css/2693.e193389d.css → virgo.wzfrontend/src/main/resources/static/console/static/css/2636.e193389d.css


virgo.wzfrontend/src/main/resources/static/console/static/css/6355.e193389d.css → virgo.wzfrontend/src/main/resources/static/console/static/css/3428.e193389d.css


virgo.wzfrontend/src/main/resources/static/console/static/css/1250.b6c7aaf0.css → virgo.wzfrontend/src/main/resources/static/console/static/css/4523.b6c7aaf0.css


virgo.wzfrontend/src/main/resources/static/console/static/css/8954.12d58e15.css → virgo.wzfrontend/src/main/resources/static/console/static/css/4767.12d58e15.css


virgo.wzfrontend/src/main/resources/static/console/static/css/4643.b6c7aaf0.css → virgo.wzfrontend/src/main/resources/static/console/static/css/6393.b6c7aaf0.css


virgo.wzfrontend/src/main/resources/static/console/static/css/8606.32d3f99b.css → virgo.wzfrontend/src/main/resources/static/console/static/css/9254.32d3f99b.css


virgo.wzfrontend/src/main/resources/static/console/static/css/9593.12d58e15.css → virgo.wzfrontend/src/main/resources/static/console/static/css/9812.12d58e15.css


virgo.wzfrontend/src/main/resources/static/console/static/js/109-legacy.bfd6bd1b.js → virgo.wzfrontend/src/main/resources/static/console/static/js/109-legacy.e72c0fde.js


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


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


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


virgo.wzfrontend/src/main/resources/static/console/static/js/1263-legacy.dc9fb2c6.js → virgo.wzfrontend/src/main/resources/static/console/static/js/1263-legacy.84d6b1df.js


virgo.wzfrontend/src/main/resources/static/console/static/js/1263.e2513cb7.js → virgo.wzfrontend/src/main/resources/static/console/static/js/1263.a8976893.js


virgo.wzfrontend/src/main/resources/static/console/static/js/1433-legacy.b3395657.js → virgo.wzfrontend/src/main/resources/static/console/static/js/1433-legacy.fd4b52fb.js


virgo.wzfrontend/src/main/resources/static/console/static/js/1433.723ae51d.js → virgo.wzfrontend/src/main/resources/static/console/static/js/1433.1a644ebb.js


virgo.wzfrontend/src/main/resources/static/console/static/js/1471-legacy.f908c3a5.js → virgo.wzfrontend/src/main/resources/static/console/static/js/1471-legacy.03e752d0.js


virgo.wzfrontend/src/main/resources/static/console/static/js/1471.00b47cac.js → virgo.wzfrontend/src/main/resources/static/console/static/js/1471.54862ec2.js


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


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


virgo.wzfrontend/src/main/resources/static/console/static/js/1821-legacy.1e9563b9.js → virgo.wzfrontend/src/main/resources/static/console/static/js/1821-legacy.09f61a2e.js


virgo.wzfrontend/src/main/resources/static/console/static/js/2059.0575ca39.js → virgo.wzfrontend/src/main/resources/static/console/static/js/2059.ca3d667a.js


File diff suppressed because it is too large
+ 1 - 1
virgo.wzfrontend/src/main/resources/static/console/static/js/206-legacy.70d18d5f.js


virgo.wzfrontend/src/main/resources/static/console/static/js/2288-legacy.b10a6382.js → virgo.wzfrontend/src/main/resources/static/console/static/js/2288-legacy.068ceb92.js


virgo.wzfrontend/src/main/resources/static/console/static/js/2587-legacy.916c04d3.js → virgo.wzfrontend/src/main/resources/static/console/static/js/2587-legacy.e31623e9.js


virgo.wzfrontend/src/main/resources/static/console/static/js/2587.a2b7577d.js → virgo.wzfrontend/src/main/resources/static/console/static/js/2587.e3045e53.js


virgo.wzfrontend/src/main/resources/static/console/static/js/2610.8f9df572.js → virgo.wzfrontend/src/main/resources/static/console/static/js/2610.ebd529de.js


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


virgo.wzfrontend/src/main/resources/static/console/static/js/2901-legacy.a82cae57.js → virgo.wzfrontend/src/main/resources/static/console/static/js/2901-legacy.e93206c4.js


virgo.wzfrontend/src/main/resources/static/console/static/js/2901.4836bcbb.js → virgo.wzfrontend/src/main/resources/static/console/static/js/2901.4352da11.js


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


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


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


virgo.wzfrontend/src/main/resources/static/console/static/js/3437-legacy.66cf5ab8.js → virgo.wzfrontend/src/main/resources/static/console/static/js/3437-legacy.6a559f0a.js


virgo.wzfrontend/src/main/resources/static/console/static/js/3437.97ea242f.js → virgo.wzfrontend/src/main/resources/static/console/static/js/3437.d3769e4a.js


File diff suppressed because it is too large
+ 1 - 1
virgo.wzfrontend/src/main/resources/static/console/static/js/3620-legacy.8726361e.js


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


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


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


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


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


File diff suppressed because it is too large
+ 1 - 1
virgo.wzfrontend/src/main/resources/static/console/static/js/4639-legacy.1029a16e.js


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


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


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


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


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


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


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


virgo.wzfrontend/src/main/resources/static/console/static/js/5127.bc5476d2.js → virgo.wzfrontend/src/main/resources/static/console/static/js/5127.116aaaa9.js


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


virgo.wzfrontend/src/main/resources/static/console/static/js/5523-legacy.e9c8a5ac.js → virgo.wzfrontend/src/main/resources/static/console/static/js/5523-legacy.2049e33a.js


virgo.wzfrontend/src/main/resources/static/console/static/js/5679.dca7e079.js → virgo.wzfrontend/src/main/resources/static/console/static/js/5679.be332698.js


File diff suppressed because it is too large
+ 1 - 1
virgo.wzfrontend/src/main/resources/static/console/static/js/3406-legacy.91c60bdf.js


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


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


virgo.wzfrontend/src/main/resources/static/console/static/js/6116-legacy.c3c3e0a4.js → virgo.wzfrontend/src/main/resources/static/console/static/js/6116-legacy.aeca7d33.js


virgo.wzfrontend/src/main/resources/static/console/static/js/6235-legacy.8cdf3e49.js → virgo.wzfrontend/src/main/resources/static/console/static/js/6235-legacy.37912118.js


virgo.wzfrontend/src/main/resources/static/console/static/js/6235.1cb3d524.js → virgo.wzfrontend/src/main/resources/static/console/static/js/6235.1610debb.js


virgo.wzfrontend/src/main/resources/static/console/static/js/6252-legacy.69f74ea7.js → virgo.wzfrontend/src/main/resources/static/console/static/js/6252-legacy.7eab4fab.js


virgo.wzfrontend/src/main/resources/static/console/static/js/6252.632c3571.js → virgo.wzfrontend/src/main/resources/static/console/static/js/6252.89a8d6d9.js


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


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


virgo.wzfrontend/src/main/resources/static/console/static/js/6448.085e8e84.js → virgo.wzfrontend/src/main/resources/static/console/static/js/6448.e852bfd6.js


virgo.wzfrontend/src/main/resources/static/console/static/js/7072-legacy.d51f8e3c.js → virgo.wzfrontend/src/main/resources/static/console/static/js/7072-legacy.dbc91b28.js


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


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


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


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


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


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


virgo.wzfrontend/src/main/resources/static/console/static/js/7729-legacy.b2c5c7c3.js → virgo.wzfrontend/src/main/resources/static/console/static/js/7729-legacy.0ba470a1.js


virgo.wzfrontend/src/main/resources/static/console/static/js/7815-legacy.6d72e92a.js → virgo.wzfrontend/src/main/resources/static/console/static/js/7815-legacy.dc7bac77.js


virgo.wzfrontend/src/main/resources/static/console/static/js/7815.ffb78b69.js → virgo.wzfrontend/src/main/resources/static/console/static/js/7815.8d60ec5a.js


virgo.wzfrontend/src/main/resources/static/console/static/js/8187.920bc391.js → virgo.wzfrontend/src/main/resources/static/console/static/js/8187.5eef8c61.js


virgo.wzfrontend/src/main/resources/static/console/static/js/8245-legacy.d7e1f2ab.js → virgo.wzfrontend/src/main/resources/static/console/static/js/8245-legacy.969efe3b.js


virgo.wzfrontend/src/main/resources/static/console/static/js/8245.b8150439.js → virgo.wzfrontend/src/main/resources/static/console/static/js/8245.acdd933a.js


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


File diff suppressed because it is too large
+ 1 - 1
virgo.wzfrontend/src/main/resources/static/console/static/js/8896-legacy.4b99d1cc.js


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


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


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


virgo.wzfrontend/src/main/resources/static/console/static/js/9104.29837d0f.js → virgo.wzfrontend/src/main/resources/static/console/static/js/9104.31f4af18.js


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


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


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


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


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


+ 0 - 0
virgo.wzfrontend/src/main/resources/static/console/static/js/9812-legacy.1c48ed63.js


Some files were not shown because too many files changed in this diff