From cffe8b855beabe845e1dc1268e0d689252cac2fa Mon Sep 17 00:00:00 2001 From: liyuanchao <438964165@qq.com> Date: Sun, 10 Aug 2025 18:56:52 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AE=A2=E5=8D=95=E7=AE=A1=E7=90=86=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=20=E8=AE=A2=E5=8D=95=E8=AF=A6=E6=83=85=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=20=20=E7=9B=91=E6=8E=A7=E5=AE=A4=E5=88=97=E8=A1=A8?= =?UTF-8?q?=E5=92=8C=E6=92=AD=E6=94=BE=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- common/config.js | 2 +- common/http.api.js | 5 + pages.json | 14 ++ pages/sys/user/myRepair/myRepair.vue | 1 - pages/sys/workbench/monitor/TreeNode.vue | 89 ++++++++++ pages/sys/workbench/monitor/monitorplay.vue | 129 +++++++++++++++ pages/sys/workbench/monitor/monitors.vue | 45 ++++++ pages/sys/workbench/order/order.vue | 171 ++++++++++++++++++-- pages/sys/workbench/order/orderDetail.vue | 125 ++++++++------ pages/sys/workbench/workbench.vue | 3 +- static/ic_down_arrow_g.png | Bin 0 -> 667 bytes static/ic_monitor.webp | Bin 0 -> 8080 bytes 12 files changed, 518 insertions(+), 66 deletions(-) create mode 100644 pages/sys/workbench/monitor/TreeNode.vue create mode 100644 pages/sys/workbench/monitor/monitorplay.vue create mode 100644 pages/sys/workbench/monitor/monitors.vue create mode 100644 static/ic_down_arrow_g.png create mode 100644 static/ic_monitor.webp diff --git a/common/config.js b/common/config.js index 4e59770..5841e5c 100644 --- a/common/config.js +++ b/common/config.js @@ -25,6 +25,6 @@ const config = { // 设置后台接口服务的基础地址 // config.baseUrl = 'http://tc.cqsznc.com:7080/api'; -config.baseUrl = 'http://3deb348c.r28.cpolar.top'; +config.baseUrl = 'http://183.230.235.66:11010/api'; export default config; \ No newline at end of file diff --git a/common/http.api.js b/common/http.api.js index 68ee134..85a4e1d 100644 --- a/common/http.api.js +++ b/common/http.api.js @@ -31,6 +31,11 @@ const install = (Vue, vm) => { //会议列表 getMeetings:(params = {})=>vm.$u.get(config.adminPath+'/property/roomBooking/list',params), + //监控列表 + getMonitors:(params = {})=>vm.$u.get(config.adminPath+'/sis/deviceChannel/treeList',params), + + getPlay:(params = {})=>vm.$u.post(config.adminPath+'/sis/stream/realtime/add',params), + // 基础服务:登录登出、身份信息、菜单授权、切换系统、字典数据等 lang: (params = {}) => vm.$u.get('/lang/'+params.lang), index: (params = {}) => vm.$u.get(config.adminPath+'/mobile/index', params), diff --git a/pages.json b/pages.json index 8c443ba..7ea8fa2 100644 --- a/pages.json +++ b/pages.json @@ -430,6 +430,20 @@ { "navigationStyle": "custom" } + }, + { + "path" : "pages/sys/workbench/monitor/monitors", + "style" : + { + "navigationBarTitleText" : "监控室" + } + }, + { + "path" : "pages/sys/workbench/monitor/monitorplay", + "style" : + { + "navigationStyle": "custom" + } } ], "tabBar": { diff --git a/pages/sys/user/myRepair/myRepair.vue b/pages/sys/user/myRepair/myRepair.vue index f514bc6..1793d3a 100644 --- a/pages/sys/user/myRepair/myRepair.vue +++ b/pages/sys/user/myRepair/myRepair.vue @@ -79,7 +79,6 @@ } }, onLoad() { - // uni.$on('refreshData', this.getOrders); this.getOrders() }, onShow() { diff --git a/pages/sys/workbench/monitor/TreeNode.vue b/pages/sys/workbench/monitor/TreeNode.vue new file mode 100644 index 0000000..956f22b --- /dev/null +++ b/pages/sys/workbench/monitor/TreeNode.vue @@ -0,0 +1,89 @@ + + + + + diff --git a/pages/sys/workbench/monitor/monitorplay.vue b/pages/sys/workbench/monitor/monitorplay.vue new file mode 100644 index 0000000..65b06aa --- /dev/null +++ b/pages/sys/workbench/monitor/monitorplay.vue @@ -0,0 +1,129 @@ + + + + + diff --git a/pages/sys/workbench/monitor/monitors.vue b/pages/sys/workbench/monitor/monitors.vue new file mode 100644 index 0000000..e9ef600 --- /dev/null +++ b/pages/sys/workbench/monitor/monitors.vue @@ -0,0 +1,45 @@ + + + + + \ No newline at end of file diff --git a/pages/sys/workbench/order/order.vue b/pages/sys/workbench/order/order.vue index 2aa0a45..502226e 100644 --- a/pages/sys/workbench/order/order.vue +++ b/pages/sys/workbench/order/order.vue @@ -1,5 +1,17 @@ @@ -32,15 +67,18 @@ export default { data() { return { - tabs: ['待办', '全部', '发起 '], + tabs: ['待办', '全部'], activeTab: 1, tabData: [ - [], [], [] ], // 每个tab的数据 - tabLoaded: [false, false, false], // 每个tab是否已加载 + tabLoaded: [false, false], // 每个tab是否已加载 loading: false, + lastScrollTop: 0, + isAddBtnHidden: false, + showPopup: false, + selectedType: '' } }, computed: { @@ -55,6 +93,26 @@ goBack() { uni.navigateBack(); }, + addOrder() { + uni.navigateTo({ + url: '/pages/sys/workbench/order/addOrder' + }); + }, + handleScroll(e) { + const scrollTop = e.detail.scrollTop; + // 为了避免过于频繁的触发,可以设置一个阈值 + if (Math.abs(scrollTop - this.lastScrollTop) < 20) { + return; + } + if (scrollTop > this.lastScrollTop && scrollTop > 50) { + // 向下滚动,隐藏按钮 + this.isAddBtnHidden = true; + } else { + // 向上滚动,显示按钮 + this.isAddBtnHidden = false; + } + this.lastScrollTop = scrollTop; + }, async changeTab(idx) { this.activeTab = idx; if (!this.tabLoaded[idx]) { @@ -66,8 +124,7 @@ // 模拟接口请求,不同tab返回不同mock数据 let params = {} if (idx === 0) { - params = { - } + params = {} } let data = []; @@ -108,6 +165,22 @@ uni.navigateTo({ url: '/pages/sys/workbench/order/orderDetail?item=' + itemStr }); + }, + togglePopup() { + this.showPopup = !this.showPopup; + }, + selectType(type) { + this.selectedType = type; + }, + closePopup() { + this.showPopup = false; + }, + confirmSelection() { + if (this.selectedType) { + // 处理确认逻辑,例如更新筛选条件 + console.log('Selected type:', this.selectedType); + } + this.showPopup = false; } } } @@ -121,6 +194,33 @@ flex-direction: column; } + .filter { + display: flex; + flex-direction: row; + background: #fff; + padding-left: 36rpx; + padding-top: 15rpx; + padding-bottom: 15rpx; + } + + .filter-btn { + padding: 15rpx 22rpx 15rpx 22rpx; + background: #F7F7F7; + border-radius: 25rpx; + height: 58rpx; + color: #9A9A9A; + font-size: 28rpx; + display: flex; + justify-content: center; + align-items: center; + margin-right: 24rpx; + } + + .filter-img { + width: 18rpx; + height: 10rpx; + margin-left: 8rpx; + } .order-tabs { display: flex; @@ -166,8 +266,10 @@ /* 占据所有剩余空间 */ overflow-y: auto; /* 内容超出时,开启垂直滚动 */ - padding-bottom: 200rpx; + padding-bottom: 30rpx; /* 为底部按钮留出空间 */ + height: calc(100vh - 80rpx - 32rpx); + /* 减去tab栏高度和margin-top */ } .order-card { @@ -190,41 +292,78 @@ margin-left: 19rpx; margin-right: 50rpx; } - + .order-no { font-size: 24rpx; color: #0B0B0B; font-weight: 500; } - + .order-status { font-size: 24rpx; font-weight: 500; } - + .order-line-image { margin: left 29rpx; margin-right: 39rpx; height: 2rpx; margin-bottom: 29rpx; } - + .order-status.orange { color: #F3AB44; } - + .order-status.doing { color: #00C9AA; } - + .order-status.done { color: #8A8A8A; } - + .order-info { font-size: 24rpx; color: #888; margin-bottom: 30rpx; margin-left: 47rpx; } + + .order-add-btn-fixed { + position: fixed; + right: 40rpx; + bottom: 80rpx; + width: 100rpx; + height: 100rpx; + z-index: 100; + transition: transform 0.3s ease; + transform: translateX(0); + } + + .order-add-btn-fixed.hide { + transform: translateX(200%); + } + + .popup-content { + background-color: #fff; + width: 100%; + } + + .popup-header { + display: flex; + justify-content: space-between; + align-items: center; + padding: 20rpx; + border-bottom: 1px solid #f0f0f0; + } + + .popup-header text { + color: #2186FF; + font-size: 30rpx; + } + + .popup-body { + padding: 20rpx; + } \ No newline at end of file diff --git a/pages/sys/workbench/order/orderDetail.vue b/pages/sys/workbench/order/orderDetail.vue index b5bfa19..1ac5fac 100644 --- a/pages/sys/workbench/order/orderDetail.vue +++ b/pages/sys/workbench/order/orderDetail.vue @@ -1,5 +1,5 @@