还原巡检点位静态页面

This commit is contained in:
xhc 2025-05-30 17:02:59 +08:00
parent 0e4b41adc5
commit b76a2e36f4
24 changed files with 997 additions and 722 deletions

6
.env Normal file
View File

@ -0,0 +1,6 @@
# .env.development
# VITE_API_URL=http://localhost:3000/api
# # .env.production
# VITE_API_URL=https://api.yourdomain.com

View File

@ -53,15 +53,12 @@
"@dcloudio/uni-mp-xhs": "3.0.0-4060520250512001",
"@dcloudio/uni-quickapp-webview": "3.0.0-4060520250512001",
"@dcloudio/uni-ui": "^1.5.7",
"axios": "^1.9.0",
"axios-miniprogram-adapter": "^0.3.5",
"echarts": "^5.6.0",
"pinia": "^3.0.2",
"pinia-plugin-unistorage": "^0.1.2",
"sass": "^1.89.0",
"sass-loader": "^16.0.5",
"vue": "^3.4.21",
"vue-i18n": "^9.1.9"
"sass": "1.63.2",
"sass-loader": "10.4.1",
"vue": "^3.4.21"
},
"devDependencies": {
"@dcloudio/types": "^3.4.8",

View File

@ -2,7 +2,7 @@
* @Author: XHC
* @Date: 2025-05-19 10:21:48
* @LastEditors: XHC
* @LastEditTime: 2025-05-26 16:34:09
* @LastEditTime: 2025-05-30 10:44:11
* @Description:
-->
<script>
@ -29,6 +29,9 @@ export default {
#app {
background: url('@/static/image/index/bg.png') no-repeat;
background-size: 100% auto;
:deep(.uni-tag--inverted) {
background-color: transparent;
}
}
.grey {
color: #808185;
@ -101,4 +104,40 @@ export default {
}
}
}
//
.info-card {
padding: 30rpx 0;
margin: 0 30rpx;
border-radius: 10rpx;
background: #fff;
.info-box {
border: 10rpx solid #0A61B9;
border-top: none;
border-bottom: none;
.info-item {
margin: 0 30rpx;
padding: 20rpx 20rpx;
border-bottom: 1rpx solid #EFF6FD;
&:first-child {
padding-top: 0;
}
&:last-child {
padding-bottom: 0;
border-bottom: none;
}
}
}
}
:deep(.checklist-box.is--tag.is-checked), :deep(uni-button) {
background-color: #004894!important;
border-color: #004894!important;
}
:deep(.uni-easyinput__content), :deep(.file-picker__box-content), :deep(.uni-select), :deep(.uni-date-single), :deep(.uni-date-x--border) {
background-color: #DCEDFD!important;
border-color: #A3C3E3!important;
}
:deep(.file-picker__box-content) {
border: dashed #003e8f99!important;
}
</style>

View File

@ -1,9 +1,19 @@
/*
* @Author: xhc 15171145581@163.com
* @Author: xhc
* @Date: 2025-05-19 10:44:34
* @LastEditors: xhc 15171145581@163.com
* @LastEditTime: 2025-05-19 10:45:00
* @LastEditors: XHC
* @LastEditTime: 2025-05-29 17:28:49
* @FilePath: \bht-app\src\api\api.js
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
* @Description: api
*/
import request from '@/utils/request'
import { http } from '@/http/http.js'
// 查询巡查路线
export const getRouteList = () => {
return http('/bht/patrolRoute/findList', 'post')
}
// 查询点位路线
export const getPointList = () => {
return http('/bht/patrolPoint/findList', 'post')
}

View File

@ -1,67 +0,0 @@
/*
* @Author: xhc 15171145581@163.com
* @Date: 2025-05-19 10:42:57
* @LastEditors: xhc 15171145581@163.com
* @LastEditTime: 2025-05-19 10:47:11
* @FilePath: \bht-app\src\axios\request.js
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
*/
import axios from 'axios';
import mpAdapter from "axios-miniprogram-adapter";
axios.defaults.adapter = mpAdapter;
import { netConfig } from '@/config/net.config';
const { baseURL, contentType, requestTimeout, successCode } = netConfig;
let tokenLose = true;
const instance = axios.create({
baseURL,
timeout: requestTimeout,
headers: {
'Content-Type': contentType,
},
});
// request interceptor
instance.interceptors.request.use(
(config) => {
// do something before request is sent
return config;
},
(error) => {
// do something with request error
return Promise.reject(error);
}
);
// response interceptor
instance.interceptors.response.use(
/**
* If you want to get http information such as headers or status
* Please return response => response
*/
(response) => {
const res = response.data;
// 请求出错处理
// -1 超时、token过期或者没有获得授权
if (res.status === -1 && tokenLose) {
tokenLose = false;
uni.showToast({
title: '服务器异常',
duration: 2000
});
return Promise.reject(res);
}
if (successCode.indexOf(res.status) !== -1) {
return Promise.reject(res);
}
return res;
},
(error) => {
return Promise.reject(error);
}
);
export default instance;

View File

@ -153,11 +153,11 @@ const initChart = async () => {
options && myChart.setOption(options);
window.addEventListener('resize', () => {
setTimeout(() => {
myChart.resize();
}, 500)
})
// window.addEventListener('resize', () => {
// setTimeout(() => {
// myChart.resize();
// }, 500)
// })
};
</script>

43
src/http/http.js Normal file
View File

@ -0,0 +1,43 @@
/*
* @Author: XHC
* @Date: 2025-05-19 10:42:57
* @LastEditors: XHC
* @LastEditTime: 2025-05-28 14:00:10
* @Description:
*/
let baseUrl
// 针对 H5 环境
// #ifdef H5
baseUrl = "/bht"
// #endif
// 针对 App 或小程序
// #ifdef APP-PLUS || MP
baseUrl = "http://192.168.2.67:9652"
// #endif
export const http = function (url, method = 'get', data = {}) {
return new Promise((resolve, reject) => {
uni.request({
url: baseUrl + url,
data,
method,
header: {
'token': uni.getStorageSync('token') || '',
}, // 自定义请求头
success: res => { // 成功的回调
// if (res.data.code == 401) {
// uni.reLaunch({
// url: "/pages/login/login"
// });
// }
resolve(res.data);
},
fail: (err) => { // 失败的回调
reject(err);
},
complete: () => { // 不论成功失败的回调
// 可以在这里写一些通用的逻辑,比如隐藏加载动画
}
});
});
};

View File

@ -39,12 +39,6 @@
"navigationBarTitleText": "开始巡检"
}
},
{
"path": "pages/scanCode/scanCode",
"style": {
"navigationBarTitleText": "扫描二维码"
}
},
{
"path": "pages/feedback/feedback",
"style": {
@ -56,6 +50,12 @@
"style": {
"navigationBarTitleText": "巡查统计"
}
},
{
"path": "pages/points/points",
"style": {
"navigationBarTitleText": "巡检点位"
}
}
],
"globalStyle": {

View File

@ -2,7 +2,7 @@
* @Author: XHC
* @Date: 2025-05-26 11:59:36
* @LastEditors: XHC
* @LastEditTime: 2025-05-26 15:52:32
* @LastEditTime: 2025-05-29 14:03:25
* @Description: 系统反馈
-->
<template>
@ -47,7 +47,7 @@ let feedbackForm = ref(null)
let formData = reactive({
radio: 0,
described: '',
imageValue: '',
imageValue: [],
type: '',
datetime:''
})
@ -105,17 +105,11 @@ const submit = (ref) => {
margin: 10rpx;
}
}
:deep(.checklist-box.is--tag.is-checked), :deep(uni-button) {
background-color: #004894!important;
border-color: #004894!important;
}
:deep(uni-button) {
margin: 0 60rpx;
}
:deep(.uni-easyinput__content), :deep(.file-picker__box-content), :deep(.uni-select), :deep(.uni-date-single), :deep(.uni-date-x--border) {
background-color: #DCEDFD!important;
border-color: #A3C3E3!important;
}
}
</style>

View File

@ -2,7 +2,7 @@
* @Author: XHC
* @Date: 2025-05-19 11:07:37
* @LastEditors: XHC
* @LastEditTime: 2025-05-26 16:31:15
* @LastEditTime: 2025-05-29 16:55:28
* @Description: 首页
-->
<template>
@ -45,9 +45,9 @@
<view class="completion-rate">
<Dashboard :data="70.8"></Dashboard>
</view>
<div class="points-box">
<view class="points-box">
<view class="points" v-for="(item, index) in patrolData.points" :key="index"><text class="title">{{ item.title }}</text><text class="num">{{ item.total }}</text></view>
</div>
</view>
</view>
</view>
<view class="inlet-box">
@ -79,22 +79,23 @@
</view>
</view>
<view class="category-content">
<view v-if="categoryCurIndex == 0">
<view>
<uni-card class="list-card" v-for="(item, index) in listData" :key="index" @click="goToStartInspection(item)">
<view class="head">
<text class="title">{{ item.title }}</text>
<uni-tag :inverted="true" :text="item.state" :type="item.state == '未巡检' ? 'error' : item.state == '巡检中' ? 'warning' : 'success'" />
<text class="title">{{ item.routeName }}</text>
<uni-tag :inverted="true" :text="item.state == 0 ? '已巡检' : '未巡检'" :type="item.state == 0 ? 'success' : 'error'" />
</view>
<view class="num grey">线路编号{{ item.num }}</view>
<view class="num grey">线路编号{{ item.routeNumber }}</view>
<view class="info-box grey">
<view class="info"> <uni-icons fontFamily="iconfont" color="#808185">{{'&#xe74e;'}}</uni-icons> {{ item.info }}</view>
<view class="info"> <uni-icons fontFamily="iconfont" color="#808185">{{'&#xe74e;'}}</uni-icons> {{ item.patrolPersonnel }}</view>
<text class="info">任务 {{ item.task }}</text>
</view>
</uni-card>
<uni-load-more status="more" />
</view>
<view v-if="categoryCurIndex == 1"></view>
<!-- <view v-if="categoryCurIndex == 1"></view>
<view v-if="categoryCurIndex == 2"></view>
<view v-if="categoryCurIndex == 3"></view>
<view v-if="categoryCurIndex == 3"></view> -->
</view>
</view>
<view v-if="navCurIndex == 1">发电分部</view>
@ -105,9 +106,10 @@
</template>
<script setup>
import { reactive, ref } from "vue";
import { onReachBottom } from "@dcloudio/uni-app";
import { nextTick, onMounted, reactive, ref } from "vue";
import { onReachBottom, onLoad, onShow, onPullDownRefresh } from "@dcloudio/uni-app";
import Dashboard from "@/components/echarts/dashboard.vue";
import { getRouteList } from '@/api/api.js'
//
let navCurIndex = ref(0)
@ -144,39 +146,77 @@ const category = reactive([
])
//
let listData = reactive([
{ title: '左岸白班机组', state: '巡检中', num: 'BHT-YX-XJ-L1.2', info: '白班每班一次,由当班值执行', task: '5/32' },
{ title: '左岸白班机组', state: '已巡检', num: 'BHT-YX-XJ-L1.2', info: '白班每班一次,由当班值执行', task: '5/32' },
{ title: '左岸白班机组', state: '巡检中', num: 'BHT-YX-XJ-L1.2', info: '白班每班一次,由当班值执行', task: '5/32' },
{ title: '左岸白班机组', state: '已巡检', num: 'BHT-YX-XJ-L1.2', info: '白班每班一次,由当班值执行', task: '5/32' },
{ title: '左岸白班机组', state: '未巡检', num: 'BHT-YX-XJ-L1.2', info: '白班每班一次,由当班值执行', task: '5/32' },
{ title: '左岸白班机组', state: '巡检中', num: 'BHT-YX-XJ-L1.2', info: '白班每班一次,由当班值执行', task: '5/32' },
{ title: '左岸白班机组', state: '未巡检', num: 'BHT-YX-XJ-L1.2', info: '白班每班一次,由当班值执行', task: '5/32' },
{ title: '左岸白班机组', state: '巡检中', num: 'BHT-YX-XJ-L1.2', info: '白班每班一次,由当班值执行', task: '5/32' },
{ title: '左岸白班机组', state: '巡检中', num: 'BHT-YX-XJ-L1.2', info: '白班每班一次,由当班值执行', task: '5/32' },
{ title: '左岸白班机组', state: '巡检中', num: 'BHT-YX-XJ-L1.2', info: '白班每班一次,由当班值执行', task: '5/32' },
{ title: '左岸白班机组', state: '巡检中', num: 'BHT-YX-XJ-L1.2', info: '白班每班一次,由当班值执行', task: '5/32' },
let listData = ref([
// { title: '', state: '', num: 'BHT-YX-XJ-L1.2', info: '', task: '5/32' },
// { title: '', state: '', num: 'BHT-YX-XJ-L1.2', info: '', task: '5/32' },
// { title: '', state: '', num: 'BHT-YX-XJ-L1.2', info: '', task: '5/32' },
// { title: '', state: '', num: 'BHT-YX-XJ-L1.2', info: '', task: '5/32' },
// { title: '', state: '', num: 'BHT-YX-XJ-L1.2', info: '', task: '5/32' },
// { title: '', state: '', num: 'BHT-YX-XJ-L1.2', info: '', task: '5/32' },
// { title: '', state: '', num: 'BHT-YX-XJ-L1.2', info: '', task: '5/32' },
// { title: '', state: '', num: 'BHT-YX-XJ-L1.2', info: '', task: '5/32' },
// { title: '', state: '', num: 'BHT-YX-XJ-L1.2', info: '', task: '5/32' },
// { title: '', state: '', num: 'BHT-YX-XJ-L1.2', info: '', task: '5/32' },
// { title: '', state: '', num: 'BHT-YX-XJ-L1.2', info: '', task: '5/32' },
])
onPullDownRefresh(() => {
nextTick(() => {
console.log('下拉刷新完成');
queryList({})
//
uni.stopPullDownRefresh();
});
})
onReachBottom(() => {
loadMore()
})
const loadMore = async () => {
let data = [
{ title: '右岸白班机组', state: '巡检中', num: 'BHT-YX-XJ-L1.2', info: '白班每班一次,由当班值执行', task: '5/32' },
{ title: '右岸白班机组', state: '巡检中', num: 'BHT-YX-XJ-L1.2', info: '白班每班一次,由当班值执行', task: '5/32' },
{ title: '右岸白班机组', state: '巡检中', num: 'BHT-YX-XJ-L1.2', info: '白班每班一次,由当班值执行', task: '5/32' },
]
listData = [ ...listData, ...data]
onLoad(() => {
queryList({})
})
const queryList = (data) => {
console.log(data)
getRouteList(data).then((res) => {
console.log(res.data);
if (res.code == 200) {
listData.value = res.data
}
}).catch((err) => {
});
}
const loadMore = () => {
}
//
const changeTitle = (index) => {
navCurIndex.value = index
};
const changeCategory = (index) => {
categoryCurIndex.value = index
console.log(index);
switch (index) {
case 1:
queryList({ state: 1 })
break;
case 2:
// queryList({ state: 1 })
break;
case 3:
queryList({ state: 0 })
break;
default:
// queryList({})
break;
}
}
//
@ -189,10 +229,12 @@ const goToHistory = () => {
//
const goToStartInspection = (item) => {
console.log(item);
// if (item.state == 0) {
uni.navigateTo({
url: `/pages/startInspection/startInspection?data=${JSON.stringify(item)}`
});
// }
}
</script>

View File

@ -2,7 +2,7 @@
* @Author: XHC
* @Date: 2025-05-19 15:18:26
* @LastEditors: XHC
* @LastEditTime: 2025-05-23 15:56:29
* @LastEditTime: 2025-05-29 16:14:30
* @Description: 知识库
-->
<template>
@ -38,13 +38,13 @@
</view>
</uni-card>
</view>
</view>
</template>
<script setup>
import { reactive, ref } from 'vue';
//
let titleCurIndex = ref(0)
let titleList = reactive([
@ -57,16 +57,16 @@ let titleList = reactive([
//
const listData = reactive([
{ title: '白鹤滩电站运行巡检作业指导书', num: 'Q/BHTHP.ZDS 7008-2024', departments: '白鹤滩水力发电厂运行部', time: '2025-02-20' },
{ title: '白鹤滩电站运行巡检作业指导书', num: 'Q/BHTHP.ZDS 7008-2024', departments: '白鹤滩水力发电厂运行部', time: '2025-02-20' },
{ title: '白鹤滩电站运行巡检作业指导书', num: 'Q/BHTHP.ZDS 7008-2024', departments: '白鹤滩水力发电厂运行部', time: '2025-02-20' },
{ title: '白鹤滩电站运行巡检作业指导书', num: 'Q/BHTHP.ZDS 7008-2024', departments: '白鹤滩水力发电厂运行部', time: '2025-02-20' },
{ title: '白鹤滩电站运行巡检作业指导书', num: 'Q/BHTHP.ZDS 7008-2024', departments: '白鹤滩水力发电厂运行部', time: '2025-02-20' },
{ title: '白鹤滩电站运行巡检作业指导书', num: 'Q/BHTHP.ZDS 7008-2024', departments: '白鹤滩水力发电厂运行部', time: '2025-02-20' },
{ title: '白鹤滩电站运行巡检作业指导书', num: 'Q/BHTHP.ZDS 7008-2024', departments: '白鹤滩水力发电厂运行部', time: '2025-02-20' },
{ title: '白鹤滩电站运行巡检作业指导书', num: 'Q/BHTHP.ZDS 7008-2024', departments: '白鹤滩水力发电厂运行部', time: '2025-02-20' },
{ title: '白鹤滩电站运行巡检作业指导书', num: 'Q/BHTHP.ZDS 7008-2024', departments: '白鹤滩水力发电厂运行部', time: '2025-02-20' },
{ title: '白鹤滩电站运行巡检作业指导书', num: 'Q/BHTHP.ZDS 7008-2024', departments: '白鹤滩水力发电厂运行部', time: '2025-02-20' },
{ title: '电站运行巡检作业指导书', num: 'Q/BHTHP.ZDS 7008-2024', departments: '水力发电厂运行部', time: '2025-02-20' },
{ title: '电站运行巡检作业指导书', num: 'Q/BHTHP.ZDS 7008-2024', departments: '水力发电厂运行部', time: '2025-02-20' },
{ title: '电站运行巡检作业指导书', num: 'Q/BHTHP.ZDS 7008-2024', departments: '水力发电厂运行部', time: '2025-02-20' },
{ title: '电站运行巡检作业指导书', num: 'Q/BHTHP.ZDS 7008-2024', departments: '水力发电厂运行部', time: '2025-02-20' },
{ title: '电站运行巡检作业指导书', num: 'Q/BHTHP.ZDS 7008-2024', departments: '水力发电厂运行部', time: '2025-02-20' },
{ title: '电站运行巡检作业指导书', num: 'Q/BHTHP.ZDS 7008-2024', departments: '水力发电厂运行部', time: '2025-02-20' },
{ title: '电站运行巡检作业指导书', num: 'Q/BHTHP.ZDS 7008-2024', departments: '水力发电厂运行部', time: '2025-02-20' },
{ title: '电站运行巡检作业指导书', num: 'Q/BHTHP.ZDS 7008-2024', departments: '水力发电厂运行部', time: '2025-02-20' },
{ title: '电站运行巡检作业指导书', num: 'Q/BHTHP.ZDS 7008-2024', departments: '水力发电厂运行部', time: '2025-02-20' },
{ title: '电站运行巡检作业指导书', num: 'Q/BHTHP.ZDS 7008-2024', departments: '水力发电厂运行部', time: '2025-02-20' },
])
//
const search = () => {

View File

@ -2,7 +2,7 @@
* @Author: XHC
* @Date: 2025-05-19 15:19:14
* @LastEditors: XHC
* @LastEditTime: 2025-05-26 16:21:29
* @LastEditTime: 2025-05-30 17:01:11
* @Description: 我的
-->
<template>
@ -82,11 +82,17 @@ const goToPages = (index) => {
url: '/pages/feedback/feedback'
});
break;
case 2:
// uni.navigateTo({
// url: '/pages/points/points'
// });
break
default:
break;
}
}
</script>
<style lang="scss" scoped>
@ -97,6 +103,10 @@ const goToPages = (index) => {
align-items: center;
.avatar {
width: auto;
:deep(.file-picker__box-content) {
border: solid #0B5CAE!important;
background-color: transparent!important;
}
}
.name {
color: #045BB7;

231
src/pages/points/points.vue Normal file
View File

@ -0,0 +1,231 @@
<template>
<view class="points">
<view class="info-card">
<view class="info-box">
<view class="info-item" v-for="(item, index) in infoData" :key="index">
<view><text class="grey">{{ item.key }}</text>{{ item.value }}</view>
</view>
</view>
</view>
<scroll-view
scroll-x="true"
class="content-scroll"
:show-scrollbar="false"
enable-flex
>
<view
v-for="(item, index) in positionData"
:key="index"
:class="navCurIndex == index ? 'active' : ''"
class="control-item"
@click="changeTitle(index)"
>
{{ item.title }}
</view>
</scroll-view>
<view class="collapse-box" v-if="navCurIndex == 0">
<uni-collapse ref="collapse" v-model="collapseValue" accordion @change="change">
<uni-collapse-item v-for="(item, index) in collapsetitle" :key="index">
<template v-slot:title>
<uni-section class="section" :title="item.title" type="line"></uni-section>
</template>
<view class="content">
<view class="content-item" v-for="(item, index) in contentList" :key="index">
<view class="title">
<view>{{ item.title }}</view>
<uni-tag :inverted="true" :text="item.tag" :type="item.tag == '重点关注' ? 'error' : 'warning'" />
</view>
<view class="btn">
<button size="mini" type="primary" @click="standard">巡检标准</button>
<button size="mini" type="primary" @click="history">巡检历史</button>
</view>
<view class="input" :class="item.selectedImg ? 'warp' : ''" v-if="item.tag">
<uni-easyinput class="textarea" type="textarea" v-model="item.described" placeholder="请输入" />
<uni-file-picker class="picker" file-mediatype="image" :limit="9" v-model="item.imageValue" @select="selectImg(item)" @delete="deleteImg(e,item)"><uni-icons type="camera-filled" color="#004894" size="50"></uni-icons></uni-file-picker>
</view>
<view v-else>
<view class="state"><text>状态</text><uni-data-checkbox class="checkbox" mode="button" v-model="item.radio" :localdata="localdata"></uni-data-checkbox></view>
<view v-if="item.radio != 0">
<view class="described">描述<uni-easyinput class="textarea" type="textarea" v-model="item.described" placeholder="请输入" /></view>
<view>照片<uni-file-picker class="picker" limit="9" v-model="item.imageValue"><uni-icons type="camera-filled" color="#004894" size="50"></uni-icons></uni-file-picker></view>
</view>
</view>
</view>
</view>
</uni-collapse-item>
</uni-collapse>
</view>
<uni-popup ref="popup" background-color="#fff" @change="change">
<view class="popup-content" :class="{ 'popup-height': type === 'left' || type === 'right' }"><text
class="text">popup 内容</text></view>
</uni-popup>
</view>
</template>
<script setup>
import { reactive } from 'vue';
let popup = ref(null)
let navCurIndex = ref(0)
//
let infoData = reactive([
{ key: '点位名称', value: '厂外0.4KV供电点' },
{ key: '点位编码', value: '' },
])
//
let positionData = reactive([
{ id: 1, title: "左岸" },
{ id: 2, title: "右岸" },
{ id: 3, title: "大坝" }
])
let collapseValue = ref('0')
//
let collapsetitle = reactive([
{ id: 1, title: '左岸进水口配电系统' },
{ id: 2, title: '左岸排风竖井配电系统' },
{ id: 3, title: '左岸尾水管配电系统(南端)' },
{ id: 4, title: '左岸尾水管配电系统(北端)' },
{ id: 5, title: '左岸尾水洞出口配电系统' },
{ id: 6, title: '左岸水垫塘渗漏排水配电系统' },
{ id: 7, title: '左岸水垫塘检修排水配电系统' },
{ id: 8, title: '控制管理楼及左岸出线场配电系统' },
])
//
let contentList = ref([
{ title: '环境温湿度(°C/%)', tag: '重点关注', described: '', imageValue: [], selectedImg: false },
{ title: 'Ⅰ段干式变三相绕组温度', tag: '请确认', described: '', imageValue: [], selectedImg: false },
{ title: '带电显示装置及电磁锁正常;铁芯端部无散片、流胶;', radio: 0, described: '', imageValue: [] },
{ title: '盘柜无异常声音、气味;无放电、过热现象外观正常;开关状态及指示灯正常',radio: 0, described: '', imageValue: [] },
{ title: '备自投及指示灯正常' }
])
//
let localdata = reactive([
{ text: '正常', value: 0 },
{ text: '待观察', value: 1 },
{ text: '异常', value: 2 }
])
//
const changeTitle = (index) => {
navCurIndex.value = index
}
const change = () => {
}
//
const selectImg = (item) => {
console.log(item);
item.selectedImg = true
}
//
const deleteImg = (e,item) => {
console.log(item);
console.log(item.imageValue);
console.log(item.imageValue.length);
// if (item.imageValue.length == 0) {
// item.selectedImg = false
// }
}
//
const standard = () => {
popup.value.open()
}
const history = () => {
popup.value.open()
}
</script>
<style lang="scss" scoped>
.points {
.content-scroll {
height: 100rpx;
line-height: 100rpx;
white-space: nowrap;
.control-item {
width: 160rpx;
height: 35rpx;
line-height: 35rpx;
display: inline-block;
padding: 0 20rpx;
margin-left: 30rpx;
position: relative;
&.active {
padding: 15rpx 20rpx!important;
}
}
}
.collapse-box {
margin: 10rpx 30rpx;
border-radius: 10rpx;
padding: 10rpx;
background: #fff;
:deep(.uni-icons) {
color: #1464BB!important;
}
}
.content-item {
padding: 20rpx;
margin: 0 20rpx 20rpx;
background: #F1F7FD;
border-radius: 10rpx;
.title, .btn, .input {
display: flex;
align-items: center;
}
.title {
color: #004895;
justify-content: space-between;
}
.btn {
:deep(uni-button) {
margin:30rpx 20rpx 30rpx 0!important;
}
}
.input {
.textarea {
width: 400rpx;
flex: none!important;
}
.picker {
margin-left: 10rpx;
:deep(.uni-file-picker__container) {
width: 580rpx;
height: 200rpx;
}
}
}
.warp {
display: block !important;
}
.state {
display: flex;
align-items: center;
.checkbox {
:deep(.uni-label-pointer) {
margin-right: 10rpx;
}
}
}
.described {
margin: 30rpx 0;
}
.textarea, .picker {
margin-top: 10rpx;
}
}
}
</style>

View File

@ -1,8 +0,0 @@
<template>
<view class="scanCode">scanCode</view>
</template>
<script setup>
</script>
<style lang="scss" scoped></style>

View File

@ -2,7 +2,7 @@
* @Author: XHC
* @Date: 2025-05-23 16:46:57
* @LastEditors: XHC
* @LastEditTime: 2025-05-26 11:49:57
* @LastEditTime: 2025-05-29 17:06:12
* @Description: 开始巡检
-->
<template>
@ -19,7 +19,7 @@
<text class="title">路线名称</text>
</uni-col>
<uni-col :span="17">
<text>{{ infoData.title }}</text>
<text>{{ infoData.routeName }}</text>
</uni-col>
</uni-row>
</view>
@ -29,7 +29,7 @@
<text class="title">路线编号</text>
</uni-col>
<uni-col :span="17">
<text>{{ infoData.num }}</text>
<text>{{ infoData.routeNumber }}</text>
</uni-col>
</uni-row>
</view>
@ -49,7 +49,17 @@
<text class="title">巡检人员</text>
</uni-col>
<uni-col :span="17">
<text>{{ infoData.person }}</text>
<text>{{ infoData.patrolPersonnel }}</text>
</uni-col>
</uni-row>
</view>
<view class="info-item" v-if="infoData.state == 0">
<uni-row :gutter="10">
<uni-col :span="7">
<text class="title">巡检时间</text>
</uni-col>
<uni-col :span="17">
<text>{{ infoData.modifyTime }}</text>
</uni-col>
</uni-row>
</view>
@ -59,7 +69,7 @@
<text class="title">巡检内容</text>
</uni-col>
<uni-col :span="17">
<text>{{ infoData.content }}</text>
<text>{{ infoData.patrolDescription }}</text>
</uni-col>
</uni-row>
</view>
@ -71,27 +81,35 @@
<uni-icons type="scan" size="26" @click="scanQRCode" ></uni-icons>
</view>
<view class="list-box">
<view class="list-item" v-for="(item, index) in listData" :key="index">
<view class="list-item" v-for="(item, index) in listData" :key="index" @click="scanQRCode">
<view class="line">
<uni-icons fontFamily="iconfont" color="#1469BC">{{'&#xe600;'}}</uni-icons>
<view class="dashed-line"></view>
</view>
<view class="list-info">
<view>
<view class="item-title">
<uni-section class="section" :title="item.title" type="line"></uni-section>
<uni-tag :inverted="true" :text="item.state" :type="item.state == '正常' ? 'success' : 'warning'" />
<view class="info-title">
<uni-section class="section" :title="item.pointName" type="line"></uni-section>
<uni-tag :inverted="true" :text="item.delFlag == 0 ? '正常' : '异常'" :type="item.delFlag == '0' ? 'success' : 'warning'" />
</view>
<view class="content">
<text>{{ item.time }}</text> <text class="name">{{ item.name }}</text>
<text>{{ item.modifyTime }}</text> <text class="name">{{ item.name }}</text>
</view>
</view>
<uni-icons type="right" color="#0E65BA" size="26"></uni-icons>
</view>
</view>
</view>
</view>
</view>
</template>
<script setup>
import { onLoad } from "@dcloudio/uni-app";
import { onLoad, onReady } from "@dcloudio/uni-app";
import { reactive } from "vue";
import { getPointList } from '@/api/api.js'
let infoData = reactive({
title: '',
@ -101,21 +119,37 @@ let infoData = reactive({
content: '主要巡检没备:左岸电站}-8号机組发电机层、中间层(含机組自用电))、GcB及水轮机层没备。'
})
let listData = reactive([
{ title: '发电机出口断路器', state: '异常', time: '2025-02-20 8:40', name: '张三' },
{ title: '励磁系统', state: '正常', time: '2025-02-20 8:40', name: '张三' },
{ title: '励磁变', state: '异常', time: '2025-02-20 8:40', name: '张三' },
{ title: '发电机出口断路器', state: '异常', time: '2025-02-20 8:40', name: '张三' },
{ title: '发电机出口断路器', state: '异常', time: '2025-02-20 8:40', name: '张三' },
{ title: '发电机出口断路器', state: '异常', time: '2025-02-20 8:40', name: '张三' },
{ title: '发电机出口断路器', state: '异常', time: '2025-02-20 8:40', name: '张三' },
let listData = ref([
// { title: '', state: '', time: '2025-02-20 8:40', name: '' },
// { title: '', state: '', time: '2025-02-20 8:40', name: '' },
// { title: '', state: '', time: '2025-02-20 8:40', name: '' },
// { title: '', state: '', time: '2025-02-20 8:40', name: '' },
// { title: '', state: '', time: '2025-02-20 8:40', name: '' },
// { title: '', state: '', time: '2025-02-20 8:40', name: '' },
// { title: '', state: '', time: '2025-02-20 8:40', name: '' },
])
onLoad((options) => {
infoData = { ...infoData, ...JSON.parse(options.data) }
console.log(infoData);
onReady(() => {
})
onLoad((options) => {
infoData = { ...infoData, ...JSON.parse(options.data) }
if (infoData.state == 0) {
uni.setNavigationBarTitle({
title: '巡检详情'
});
}
queryPointList()
})
//
const queryPointList = () => {
getPointList({}).then(res => {
console.log(res.data);
listData.value = res.data
})
}
//
const scanQRCode = () => {
@ -125,7 +159,7 @@ const scanQRCode = () => {
// res.result
console.log('扫描结果:', res.result);
uni.navigateTo({
url: '/pages/scanCode/scanCode'
url: '/pages/points/points'
});
},
//
@ -180,6 +214,25 @@ const scanQRCode = () => {
}
.list-box {
.list-item {
display: flex;
align-items: baseline;
justify-content: space-between;
.line {
margin: 0 15rpx;
display: flex;
flex-direction: column;
align-items: center;
position: relative;
.dashed-line {
position: absolute;
top: 35rpx;
height: 140rpx;
border: 1rpx dashed #8CB4DB;
}
}
.list-info {
width: 100%;
display: flex;
align-items: center;
justify-content: space-between;
@ -187,7 +240,7 @@ const scanQRCode = () => {
border-radius: 15rpx;
margin: 20rpx;
padding: 10rpx 20rpx 20rpx 0;
.item-title {
.info-title {
display: flex;
align-items: center;
@ -215,6 +268,11 @@ const scanQRCode = () => {
}
}
}
&:last-child .dashed-line {
height: 60rpx;
}
}
}
}
}

View File

@ -54,6 +54,12 @@
<div class="content unicode" style="display: block;">
<ul class="icon_lists dib-box">
<li class="dib">
<span class="icon iconfont">&#xe600;</span>
<div class="name">圆圈</div>
<div class="code-name">&amp;#xe600;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe627;</span>
<div class="name">意见反馈</div>
@ -180,9 +186,9 @@
<pre><code class="language-css"
>@font-face {
font-family: 'iconfont';
src: url('iconfont.woff2?t=1748240865474') format('woff2'),
url('iconfont.woff?t=1748240865474') format('woff'),
url('iconfont.ttf?t=1748240865474') format('truetype');
src: url('iconfont.woff2?t=1748502480273') format('woff2'),
url('iconfont.woff?t=1748502480273') format('woff'),
url('iconfont.ttf?t=1748502480273') format('truetype');
}
</code></pre>
<h3 id="-iconfont-">第二步:定义使用 iconfont 的样式</h3>
@ -208,6 +214,15 @@
<div class="content font-class">
<ul class="icon_lists dib-box">
<li class="dib">
<span class="icon iconfont icon-yuanquan"></span>
<div class="name">
圆圈
</div>
<div class="code-name">.icon-yuanquan
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-yijianfankui"></span>
<div class="name">
@ -397,6 +412,14 @@
<div class="content symbol">
<ul class="icon_lists dib-box">
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-yuanquan"></use>
</svg>
<div class="name">圆圈</div>
<div class="code-name">#icon-yuanquan</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-yijianfankui"></use>

View File

@ -1,8 +1,8 @@
@font-face {
font-family: "iconfont"; /* Project id 4926721 */
src: url('iconfont.woff2?t=1748240865474') format('woff2'),
url('iconfont.woff?t=1748240865474') format('woff'),
url('iconfont.ttf?t=1748240865474') format('truetype');
src: url('iconfont.woff2?t=1748502480273') format('woff2'),
url('iconfont.woff?t=1748502480273') format('woff'),
url('iconfont.ttf?t=1748502480273') format('truetype');
}
.iconfont {
@ -13,6 +13,10 @@
-moz-osx-font-smoothing: grayscale;
}
.icon-yuanquan:before {
content: "\e600";
}
.icon-yijianfankui:before {
content: "\e627";
}

File diff suppressed because one or more lines are too long

View File

@ -5,6 +5,13 @@
"css_prefix_text": "icon-",
"description": "",
"glyphs": [
{
"icon_id": "9371816",
"name": "圆圈",
"font_class": "yuanquan",
"unicode": "e600",
"unicode_decimal": 58880
},
{
"icon_id": "25439277",
"name": "意见反馈",

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -1,8 +1,8 @@
/*
* @Author: xhc 15171145581@163.com
* @Date: 2025-05-19 10:21:48
* @LastEditors: xhc 15171145581@163.com
* @LastEditTime: 2025-05-19 10:45:58
* @LastEditors: XHC
* @LastEditTime: 2025-05-29 12:31:36
* @FilePath: \bht-app\vite.config.js
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
*/
@ -17,4 +17,30 @@ export default defineConfig({
imports: ["vue"]
})
],
// resolve: {
// alias: {
// '@': resolve(__dirname, 'src'),
// '/static': resolve(__dirname, 'static')
// }
// },
css: {
preprocessorOptions: {
scss: {
silenceDeprecations: ['legacy-js-api']
},
},
},
server: {
// 端口
host: '0.0.0.0',
// 代理配置
proxy: {
'/bht': {
target: 'http://192.168.2.67:9652',
changeOrigin: true,
rewrite: (p) => p.replace(/^\/bht/, '')
}
}
}
})

862
yarn.lock

File diff suppressed because it is too large Load Diff