whx 3 kuukautta sitten
vanhempi
commit
cb2536e104

+ 333 - 128
virgo.wzfrontend/yui_wx/pages/projectAdmin/projectAdmin.vue

@@ -9,33 +9,33 @@
 				<view class="air-item">
 					<view class="test-item">
 						<view class="name">总面积(㎡)</view>
-						<view class="number">120</view>
+						<view class="number">{{houseData.totalArea}}</view>
 					</view>
 					<view class="line"></view>
 					<view class="test-item">
 						<view class="name">已租面积(㎡)</view>
-						<view class="number">120</view>
+						<view class="number">{{houseData.remainArea}}</view>
 					</view>
 					<view class="line"></view>
 					<view class="test-item">
 						<view class="name">剩余面积(㎡)</view>
-						<view class="number">120</view>
+						<view class="number">{{houseData.haveRentedArea}}</view>
 					</view>
 				</view>
 				<view class="air-item">
 					<view class="test-item">
 						<view class="name">总房源(个)</view>
-						<view class="number">64</view>
+						<view class="number">{{houseData.totalRoom}}</view>
 					</view>
 					<view class="line"></view>
 					<view class="test-item">
 						<view class="name">已租房源(个)</view>
-						<view class="number">63</view>
+						<view class="number">{{houseData.remainRoom}}</view>
 					</view>
 					<view class="line"></view>
 					<view class="test-item">
 						<view class="name">剩余房源(个)</view>
-						<view class="number">1</view>
+						<view class="number">{{houseData.haveRentedRoom}}</view>
 					</view>
 				</view>
 			</view>
@@ -45,8 +45,9 @@
 				<view class="title-line"></view>
 				<view class="title-label">费用管理</view>
 				<view class="title-tab">
-					<uv-subsection :list="list" :current="current" activeColor="#08979c"
-						custom-style="border-radius: 16rpx;" custom-item-style="border-radius: 12rpx;" @change="change">
+					<uv-subsection :list="billList" :current="billIndex" activeColor="#08979c"
+						custom-style="border-radius: 16rpx;" custom-item-style="border-radius: 12rpx;"
+						@change="changeBill">
 					</uv-subsection>
 				</view>
 			</view>
@@ -56,17 +57,17 @@
 					<view class="air-item">
 						<view class="test-item">
 							<view class="name">应收(元)</view>
-							<view class="number">120</view>
+							<view class="number">{{nowPaymentData.property.receivable}}</view>
 						</view>
 						<view class="line"></view>
 						<view class="test-item">
 							<view class="name">已收(元)</view>
-							<view class="number">120</view>
+							<view class="number">{{nowPaymentData.property.received}}</view>
 						</view>
 						<view class="line"></view>
 						<view class="test-item">
 							<view class="name">逾期(元)</view>
-							<view class="number">120</view>
+							<view class="number">{{nowPaymentData.property.overdue}}</view>
 						</view>
 					</view>
 				</view>
@@ -75,17 +76,17 @@
 					<view class="air-item">
 						<view class="test-item">
 							<view class="name">应收(元)</view>
-							<view class="number">120</view>
+							<view class="number">{{nowPaymentData.rent.receivable}}</view>
 						</view>
 						<view class="line"></view>
 						<view class="test-item">
 							<view class="name">已收(元)</view>
-							<view class="number">120</view>
+							<view class="number">{{nowPaymentData.rent.received}}</view>
 						</view>
 						<view class="line"></view>
 						<view class="test-item">
 							<view class="name">逾期(元)</view>
-							<view class="number">120</view>
+							<view class="number">{{nowPaymentData.rent.overdue}}</view>
 						</view>
 					</view>
 				</view>
@@ -94,17 +95,17 @@
 					<view class="air-item">
 						<view class="test-item">
 							<view class="name">应收(元)</view>
-							<view class="number">120</view>
+							<view class="number">{{nowPaymentData.hydropower.receivable}}</view>
 						</view>
 						<view class="line"></view>
 						<view class="test-item">
 							<view class="name">已收(元)</view>
-							<view class="number">120</view>
+							<view class="number">{{nowPaymentData.hydropower.received}}</view>
 						</view>
 						<view class="line"></view>
 						<view class="test-item">
 							<view class="name">逾期(元)</view>
-							<view class="number">120</view>
+							<view class="number">{{nowPaymentData.hydropower.overdue}}</view>
 						</view>
 					</view>
 				</view>
@@ -117,7 +118,7 @@
 			</view>
 			<view class="project-content">
 				<view class="remind-chart">
-					<qiun-data-charts type="pie" :opts="opts" :chartData="chartData" :canvas2d="true"
+					<qiun-data-charts type="pie" :opts="remindData.option" :chartData="remindData.data" :canvas2d="true"
 						canvasId="remind1">
 					</qiun-data-charts>
 				</view>
@@ -133,21 +134,27 @@
 				<view class="order-item">
 					<view class="order-content">
 						<view class="order-item-li">
-							<view class="order-number">0</view>
+							<view class="order-number">
+								{{orderData.internal.totalNumber}}
+							</view>
 							<view class="order-label">工单数</view>
 						</view>
 						<view class="order-item-li">
-							<view class="order-number">0</view>
+							<view class="order-number">
+								{{orderData.internal.completedNumber}}
+							</view>
 							<view class="order-label">已完成</view>
 						</view>
 						<view class="order-item-li">
-							<view class="order-number">0</view>
+							<view class="order-number">
+								{{orderData.internal.incompleteNumber}}
+							</view>
 							<view class="order-label">未完成</view>
 						</view>
 					</view>
 					<view class="order-chart">
-						<qiun-data-charts type="arcbar" :opts="orderOpts" :chartData="orderChartData" :canvas2d="true"
-							canvasId="order1">
+						<qiun-data-charts type="arcbar" :opts="internal.option" :chartData="internal.data"
+							:canvas2d="true" canvasId="order1">
 						</qiun-data-charts>
 					</view>
 				</view>
@@ -155,21 +162,21 @@
 				<view class="order-item">
 					<view class="order-content">
 						<view class="order-item-li">
-							<view class="order-number">0</view>
+							<view class="order-number">{{orderData.external.totalNumber}}</view>
 							<view class="order-label">工单数</view>
 						</view>
 						<view class="order-item-li">
-							<view class="order-number">0</view>
+							<view class="order-number">{{orderData.external.completedNumber}}</view>
 							<view class="order-label">已完成</view>
 						</view>
 						<view class="order-item-li">
-							<view class="order-number">0</view>
+							<view class="order-number">{{orderData.external.incompleteNumber}}</view>
 							<view class="order-label">未完成</view>
 						</view>
 					</view>
 					<view class="order-chart">
-						<qiun-data-charts type="arcbar" :opts="orderOpts" :chartData="orderChartData" :canvas2d="true"
-							canvasId="order2">
+						<qiun-data-charts type="arcbar" :opts="external.option" :chartData="external.data"
+							:canvas2d="true" canvasId="order2">
 						</qiun-data-charts>
 					</view>
 				</view>
@@ -183,43 +190,43 @@
 			<view class="project-content">
 				<view class="device-content">
 					<view class="order-item-li">
-						<view class="order-number">0</view>
+						<view class="order-number">{{deviceData.device.totalNumber}}</view>
 						<view class="order-label">总设备</view>
 					</view>
 					<view class="line"></view>
 					<view class="order-item-li">
-						<view class="order-number">0</view>
+						<view class="order-number">{{deviceData.device.onLineNumber}}</view>
 						<view class="order-label">在线</view>
 					</view>
 					<view class="line"></view>
 					<view class="order-item-li">
-						<view class="order-number">0</view>
+						<view class="order-number">{{deviceData.device.offLineNumber}}</view>
 						<view class="order-label">离线</view>
 					</view>
 					<view class="line"></view>
 					<view class="order-item-li">
-						<view class="order-number">0</view>
+						<view class="order-number">{{deviceData.device.faultNumber}}</view>
 						<view class="order-label">故障</view>
 					</view>
 				</view>
 				<view class="device-content">
 					<view class="order-item-li">
-						<view class="order-number">0</view>
+						<view class="order-number">{{deviceData.alarm.totalNumber}}</view>
 						<view class="order-label">总设备</view>
 					</view>
 					<view class="line"></view>
 					<view class="order-item-li">
-						<view class="order-number">0</view>
+						<view class="order-number">{{deviceData.alarm.dayNumber}}</view>
 						<view class="order-label">在线</view>
 					</view>
 					<view class="line"></view>
 					<view class="order-item-li">
-						<view class="order-number">0</view>
+						<view class="order-number">{{deviceData.alarm.handledNumber}}</view>
 						<view class="order-label">离线</view>
 					</view>
 					<view class="line"></view>
 					<view class="order-item-li">
-						<view class="order-number">0</view>
+						<view class="order-number">{{deviceData.alarm.unhandledNumber}}</view>
 						<view class="order-label">故障</view>
 					</view>
 				</view>
@@ -235,17 +242,17 @@
 					<view class="air-item">
 						<view class="test-item">
 							<view class="name">总客户</view>
-							<view class="number">120</view>
+							<view class="number">{{clientData.totalNumber}}</view>
 						</view>
 						<view class="line"></view>
 						<view class="test-item">
 							<view class="name">月新增</view>
-							<view class="number">120</view>
+							<view class="number">{{clientData.monthNowAddNumber}}</view>
 						</view>
 						<view class="line"></view>
 						<view class="test-item">
 							<view class="name">洽商客户</view>
-							<view class="number">120</view>
+							<view class="number">{{clientData.negotiateNumber}}</view>
 						</view>
 					</view>
 				</view>
@@ -260,78 +267,108 @@
 </template>
 
 <script>
+	import {
+		houseManagement,
+		paymentManagement,
+		clientManagement,
+		eventManagement,
+		orderManagement,
+		deviceManagement
+	} from '@/request/api/staging.js'
+	import {
+		getCustomerListByPage
+	} from '@/request/api/my.js'
+	const color = ["#1890FF", "#91CB74", "#FAC858", "#EE6666", "#73C0DE", "#3CA272", "#FC8452", "#9A60B4", "#ea7ccc"];
 	export default {
 		data() {
 			return {
-				list: ['当月', '当年', '累计'],
-				current: 0,
-				chartData: {},
-				//您可以通过修改 config-ucharts.js 文件中下标为 ['pie'] 的节点来配置全局默认参数,如都是默认参数,此处可以不传 opts 。实际应用过程中 opts 只需传入与全局默认参数中不一致的【某一个属性】即可实现同类型的图表显示不同的样式,达到页面简洁的需求。
-				opts: {
-					color: ["#1890FF", "#91CB74", "#FAC858", "#EE6666", "#73C0DE", "#3CA272", "#FC8452", "#9A60B4",
-						"#ea7ccc"
-					],
-					padding: [5, 5, 5, 5],
-					enableScroll: false,
-					extra: {
-						pie: {
-							activeOpacity: 0.5,
-							activeRadius: 10,
-							offsetAngle: 0,
-							labelWidth: 15,
-							border: true,
-							borderWidth: 3,
-							borderColor: "#FFFFFF",
-							linearType: "custom"
-						}
+				project: {},
+				houseData: {
+					remainArea: 0,
+					remainRoom: 0,
+					totalRoom: 0,
+					totalArea: 0,
+					haveRentedRoom: 0,
+					haveRentedArea: 0,
+				},
+				paymentData: {},
+				nowPaymentData: {
+					hydropower: { //水电
+						overdue: 0,
+						received: 0,
+						receivable: 0
+					},
+					property: { //房租
+						overdue: 0,
+						received: 0,
+						receivable: 0
+					},
+					rent: { //物业
+						overdue: 0,
+						received: 0,
+						receivable: 0
 					}
 				},
-				orderChartData: {
-					series: [{
-						name: "",
-						color: "#2fc25b",
-						data: 0.8
-					}]
+				billList: [{
+					id: 1,
+					name: '当月',
+					type: 'month'
+				}, {
+					id: 2,
+					name: '当年',
+					type: 'year'
+				}, {
+					id: 3,
+					name: '累计',
+					type: 'accumulate'
+				}],
+				billIndex: 0,
+				remindData: {
+					option: {},
+					data: {}
 				},
-				orderOpts: {
-					color: ["#1890FF", "#91CB74", "#FAC858", "#EE6666", "#73C0DE", "#3CA272", "#FC8452", "#9A60B4",
-						"#ea7ccc"
-					],
-					padding: undefined,
-					title: {
-						name: "80%",
-						fontSize: 15,
-						color: "#2fc25b"
+				orderData: {
+					external: {
+						totalNumber: 0,
+						completedNumber: 0,
+						incompleteNumber: 0
 					},
-					subtitle: {
-						name: "",
-						fontSize: 25,
-						color: "#666666"
+					internal: {
+						totalNumber: 0,
+						completedNumber: 0,
+						incompleteNumber: 0
+					}
+				},
+				external: {
+					option: {},
+					data: {}
+				},
+				internal: {
+					option: {},
+					data: {}
+				},
+				deviceData: {
+					alarm: {
+						totalNumber: 0,
+						handledNumber: 0,
+						dayNumber: 0,
+						unhandledNumber: 0
 					},
-					extra: {
-						arcbar: {
-							type: "default",
-							width: 12,
-							backgroundColor: "#E9E9E9",
-							startAngle: 0.75,
-							endAngle: 0.25,
-							gap: 2,
-							linearType: "custom"
-						}
+					device: {
+						totalNumber: 0,
+						faultNumber: 0,
+						onLineNumber: 0,
+						offLineNumber: 0
 					}
 				},
-				clientChartData: {
-					categories: ["24/01", "24/02", "24/03", "24/04", "24/05", "24/06"],
-					series: [{
-						name: "新增客户",
-						data: [35, 8, 25, 37, 4, 20]
-					}]
+				clientData: {
+					monthNowAddNumber: 0,
+					totalNumber: 0,
+					negotiateNumber: 0
 				},
-				//您可以通过修改 config-ucharts.js 文件中下标为 ['line'] 的节点来配置全局默认参数,如都是默认参数,此处可以不传 opts 。实际应用过程中 opts 只需传入与全局默认参数中不一致的【某一个属性】即可实现同类型的图表显示不同的样式,达到页面简洁的需求。
+				clientChartData: {},
 				clientOpts: {
-					color: ["#1890FF", "#91CB74", "#FAC858", "#EE6666", "#73C0DE", "#3CA272", "#FC8452", "#9A60B4",
-						"#ea7ccc"
-					],
+					color: color,
 					padding: [15, 15, 0, 5],
 					enableScroll: true,
 					legend: {},
@@ -341,8 +378,7 @@
 						itemCount: 4
 					},
 					yAxis: {
-						gridType: "dash",
-						dashLength: 2
+						gridType: "dash"
 					},
 					extra: {
 						line: {
@@ -355,36 +391,205 @@
 			}
 		},
 		onReady() {
-			this.getServerData();
+			this.project = this.$store.getters.project;
+			this.init();
 		},
 		methods: {
-			getServerData() {
-				//模拟从服务器获取数据时的延时
-				setTimeout(() => {
-					//模拟服务器返回数据,如果数据格式和标准格式不同,需自行按下面的格式拼接
-					let res = {
-						series: [{
-							data: [{
-								"name": "重要",
-								"value": 3,
-								"labelShow": false
-							}, {
-								"name": "会议",
-								"value": 1,
-								"labelShow": false
-							}, {
-								"name": "看房",
-								"value": 1,
-								"labelShow": false
-							}, {
-								"name": "日常",
-								"value": 1,
-								"labelShow": false
+			init() {
+				this.initHouseData();
+				this.initPaymentData();
+				this.initRemind();
+				this.initOrder();
+				this.initDevice();
+				this.initClientData();
+			},
+			initHouseData() {
+				houseManagement(this.project.id).then(res => {
+					if (res.code === 200) this.houseData = res.data;
+				})
+			},
+			initPaymentData() {
+				paymentManagement(this.project.id).then(res => {
+					if (res.code === 200) {
+						this.paymentData = res.data;
+						this.nowPaymentData = this.paymentData[this.billList[this.billIndex].type];
+					}
+				})
+			},
+			initRemind() {
+				eventManagement(this.project.id).then(res => {
+					if (res.code === 200) {
+						let data = res.data;
+						this.remindData = {
+							option: {
+								color: color,
+								padding: [5, 5, 5, 5],
+								enableScroll: false,
+								extra: {
+									pie: {
+										activeOpacity: 0.5,
+										activeRadius: 10,
+										offsetAngle: 0,
+										labelWidth: 15,
+										border: true,
+										borderWidth: 3,
+										borderColor: "#FFFFFF",
+										linearType: "custom"
+									}
+								}
+							},
+							data: {
+								series: [{
+									data: [{
+										"name": "重要",
+										"value": data.importantNumber,
+										"labelShow": false
+									}, {
+										"name": "会议",
+										"value": data.meetingNumber,
+										"labelShow": false
+									}, {
+										"name": "看房",
+										"value": data.seeRoomNumber,
+										"labelShow": false
+									}, {
+										"name": "日常",
+										"value": data.remoteNumber,
+										"labelShow": false
+									}]
+								}]
+							}
+						}
+					}
+				})
+			},
+			initOrder() {
+				orderManagement(this.project.id).then(res => {
+					if (res.code === 200) {
+						this.orderData = res.data;
+						this.internal = {
+							option: {
+								color: color,
+								padding: undefined,
+								title: {
+									name: this.returnPercent(this.orderData.internal) + '%',
+									fontSize: 15,
+									color: "#2fc25b"
+								},
+								subtitle: {
+									name: "",
+									fontSize: 25,
+									color: "#666666"
+								},
+								extra: {
+									arcbar: {
+										type: "default",
+										width: 12,
+										backgroundColor: "#E9E9E9",
+										startAngle: 0.75,
+										endAngle: 0.25,
+										gap: 2,
+										linearType: "custom"
+									}
+								}
+							},
+							data: {
+								series: [{
+									name: "",
+									color: "#2fc25b",
+									data: this.returnPercent(this.orderData.internal) / 100
+								}]
+							}
+						}
+						this.external = {
+							option: {
+								color: color,
+								padding: undefined,
+								title: {
+									name: this.returnPercent(this.orderData.external) + '%',
+									fontSize: 15,
+									color: "#2fc25b"
+								},
+								subtitle: {
+									name: "",
+									fontSize: 25,
+									color: "#666666"
+								},
+								extra: {
+									arcbar: {
+										type: "default",
+										width: 12,
+										backgroundColor: "#E9E9E9",
+										startAngle: 0.75,
+										endAngle: 0.25,
+										gap: 2,
+										linearType: "custom"
+									}
+								}
+							},
+							data: {
+								series: [{
+									name: "",
+									color: "#2fc25b",
+									data: this.returnPercent(this.orderData.external) / 100
+								}]
+							}
+						}
+					}
+				})
+			},
+			initClientData() {
+				clientManagement(this.project.id).then(res => {
+					if (res.code === 200) this.clientData = res.data;
+				})
+				getCustomerListByPage({
+					currPage: 1,
+					pageSize: 100,
+					organizationId: this.$store.getters.organization.id,
+					projectId: this.project.id
+				}).then(res => {
+					if (res.code === 200) {
+						let resData = res.data.dataList;
+						let obj = {},
+							x = [],
+							data = [];
+						for (let i = 0; i < resData.length; i++) {
+							let date = this.$dayjs(resData[i].visitingTime).format('YY/MM');
+							if (!obj[date]) obj[date] = 0;
+							obj[date]++
+						}
+						for (let key in obj) {
+							x.push(key);
+							data.push(obj[key]);
+						}
+						this.clientChartData = {
+							categories: x,
+							series: [{
+								name: "客户分析",
+								data: data
 							}]
-						}]
-					};
-					this.chartData = JSON.parse(JSON.stringify(res));
-				}, 500);
+						}
+					}
+				})
+
+
+
+			},
+			initDevice() {
+				deviceManagement(this.project.id).then(res => {
+					if (res.code === 200) this.deviceData = res.data;
+				})
+			},
+			returnPercent(data) {
+				let num = 0
+				if (data.totalNumber) {
+					num = parseInt(data.completedNumber / data.totalNumber * 100)
+				}
+				return num;
+			},
+			changeBill(index) {
+				this.billIndex = index;
+				this.nowPaymentData = this.paymentData[this.billList[this.billIndex].type];
 			},
 			change(index) {
 				this.current = index;

+ 91 - 0
virgo.wzfrontend/yui_wx/request/api/staging.js

@@ -0,0 +1,91 @@
+import {
+	request
+} from '@/request/request.js';
+/* 
+ * 房源管理
+ * 
+ * 
+ */
+export function houseManagement(projectId) {
+	return request({
+		url: `/api/projectItemTargetRoom/roomCount/${projectId}`,
+		method: 'get'
+	})
+}
+/* 
+ * 费用管理
+ * 
+ * 
+ */
+export function paymentManagement(projectId) {
+	return request({
+		url: `/api/payment/count/${projectId}`,
+		method: 'get'
+	})
+}
+/* 
+ * 客户管理
+ * 
+ * 
+ */
+export function clientManagement(projectId) {
+	return request({
+		url: `/manager/client/count/${projectId}`,
+		method: 'get'
+	})
+}
+/* 
+ * 获取天气
+ * @data {Object}
+ * 
+ */
+export function getWeather(cityId) {
+	return request({
+		url: `https://www.weatherol.cn/api/home/getCurrAnd15dAnd24h?cityid=${cityId}`,
+		method: 'get'
+	})
+}
+/* 
+ * 事件提醒
+ * 
+ * 
+ */
+export function eventManagement(projectId) {
+	return request({
+		url: `/api/reminder/count/${projectId}`,
+		method: 'get'
+	})
+}
+/* 
+ * 工单
+ * 
+ * 
+ */
+export function orderManagement(projectId) {
+	return request({
+		url: `/api/workOrder/count/${projectId}`,
+		method: 'get'
+	})
+}
+/* 
+ * 设备
+ * 
+ * 
+ */
+export function deviceManagement(projectId) {
+	return request({
+		url: `/api/operateDevice/count/${projectId}`,
+		method: 'get'
+	})
+}
+/* 
+ * 获取账单统计列表
+ * 
+ * 
+ */
+export function getPaymentList(projectId) {
+	return request({
+		url: `/api/payment/monthCount/${projectId}`,
+		method: 'get'
+	})
+}

Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 1 - 1
virgo.wzfrontend/yui_wx/unpackage/dist/dev/.sourcemap/mp-weixin/common/vendor.js.map


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 1 - 1
virgo.wzfrontend/yui_wx/unpackage/dist/dev/.sourcemap/mp-weixin/pages/projectAdmin/projectAdmin.js.map


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 1 - 1
virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/common/vendor.js


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 1 - 1
virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/pages/projectAdmin/projectAdmin.js


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 1 - 1
virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/pages/projectAdmin/projectAdmin.wxml