detection-business/pages/manage/deviceManage.vue
2025-03-18 17:43:58 +08:00

790 lines
16 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!-- 默认复制 -->
<template>
<view class="content">
<u-loading-page style="z-index: 999" bg-color="#e8e8e8" loading-mode="semicircle" :loading="isLoading"></u-loading-page>
<view class="top-heder">
<view class="t-left" @click="getback()">
<uni-icons type="left" size="18" color="white"></uni-icons>
</view>
<view class="t-title">
<text>资料管理</text>
</view>
<view class="t-you"></view>
</view>
<!-- <headersVue titles="资料管理" style="position: static !important;">-->
<!-- <u-icon name="arrow-left" color="#fff" size="18"></u-icon>-->
<!-- </headersVue>-->
<view class="searchContent">
<view class="t-input">
<uni-icons type="search" color="#BCBCBC" size="22"></uni-icons>
<input type="text" v-model="fileName" placeholder="请输入文件名称.....">
</view>
<view class="sou" @click="getlist()">搜索</view>
</view>
<view class="cont">
<view class="c-box" @click="addwenjian()">
<!-- <view class="">
<image src="../../static/imgs/wenjianjia.png" mode=""></image>
</view> -->
<view style="width: 100%; display: flex;justify-content: center;">
<text> + 新增文件</text>
</view>
</view>
<view class="bjimg" v-if="arrlist == ''">
<image src="http://www.nuoyunr.com/lananRsc/detection/qs.png" mode=""></image>
</view>
<view class="wrap-box">
<view class="w-box" v-for="(item,index) in arrlist" :key="index">
<view class=" wimg" v-if="item.type=='1'" @click="enrtryFile(item.id)">
<image src="../../static/imgs/wenjianjia.png" mode=""></image>
</view>
<view class="wimg" v-else>
<image src="../../static/imgs/wenjian.png" mode="" v-if="!item.isImage"></image>
<image :src="imageUrl + item.filePath" style="width: 100px;height: 100px;" v-else></image>
</view>
<view class="file-name">{{ item.fileName }}</view>
<view class="" v-if="item.warnTime">{{ item.warnTime }}</view>
<view class="" v-if="!item.warnTime" style=" visibility: hidden;">{{ '1' }}</view>
<!-- <view class="" v-if="item.count">文件数:{{ item.count }}</view>-->
<view class="" v-if="!item.count" style=" visibility: hidden;">{{ '1' }}</view>
<view class="bsd-dis">
<view class="bianji" v-if="item.type == '2'" @click="viewFile(item.filePath)">预览</view>
<view class="bianji" @click="editFile(item.id)">编辑</view>
<view class="bianji" @click="showHistory(item.id)">历史</view>
<view class="sanchu" @click="delFile(item.id)">删除</view>
</view>
</view>
</view>
</view>
<u-popup :show="isShow" mode="bottom" @close="isShow = false">
<view>
<!-- 弹出层 -->
<view v-if="isShow" class="popup">
<view class="popup-content">
<view class="popup-title">修改记录</view>
<!-- 步骤条 -->
<view class="steps" v-if="drawerData.length > 0">
<view v-for="(item, index) in drawerData" :key="index" class="step">
<view class="step-index">{{ index + 1 }}</view>
<view class="step-content">
<text class="step-file-name">📄 文件名称:{{ item.fileName }}</text>
<text class="step-time">🕒 修改时间:{{ formatDate(item.createTime) }}</text>
<text class="step-time">🕒 提醒时间:{{ item.warnTime != null ? formatDate(item.warnTime) : '' }}</text>
<text class="step-download" @click="viewFile(item.filePath)" v-if="item.type == '2'">📂 预览文件</text>
</view>
</view>
</view>
<view v-else>
暂无历史记录
</view>
<!-- <button class="close-btn" @click="isShow = false">关闭</button>-->
</view>
</view>
</view>
</u-popup>
</view>
</template>
<script>
import config from '@/config'
import request from '../../utils/request';
import {formatDate} from "@/utils/utils";
import headersVue from "@/components/header/headers.vue";
export default {
components: {headersVue},
data() {
return {
arrlist: [],
fileId: null,
pageNum: 1,//第几页
pageSize: 20,//一页多少张
totalPages: 0,//总数
nowFile: {},
fileName: null,
isShow: false,
drawerData: [],
isLoading: false,
imageUrl: config.baseImageUrl + '/',
}
},
onLoad(data) {
console.log('传递进来的数据', data)
if (data.folderId) {
this.fileId = data.folderId
}
this.getlist()
},
onShow() {
this.getlist()
},
onBackPress(options) {
// 点击虚拟键或者侧滑的时候触发(不允许返回)
if (options.from === 'backbutton') {
this.getback()
return true
}
// 否则则允许返回
return false;
},
onReachBottom() {
// if (this.pageNum >= this.totalPages) {
// uni.showToast({
// title: '没有下一页数据',
// icon: 'none'
// })
//
// } else {
// this.pageNum++
// this.getlist()
// }
},
methods: {
formatDate,
async getlist(flag) {
this.isLoading = true
let data = {
pageSize: this.pageSize,
pageNum: this.pageNum,
fatherId: this.fileId,
fileName: this.fileName,
}
if (flag) {
data.fileName = null
}
let res = await request({
url: '/inspectionFile/inspectionFile/listByPermission',
method: 'get',
data: data
})
if (this.pageNum != 1) {
this.arrlist = this.arrlist.concat(res.data)
} else {
this.arrlist = res.data
}
let total = res.total
this.totalPages = Math.ceil(total / this.pageSize);
this.isLoading = false
// this.getCountByDirectory()
},
showHistory(id) {
this.isShow = true
this.isShow = true
request({
url: '/system/fileRecord/get/' + id,
method: 'get',
}).then(res => {
if (res && res.data) {
this.drawerData = res.data
}
})
},
getCountByDirectory() {
if (this.arrlist && this.arrlist.length > 0) {
const ids = this.arrlist.filter(item => (item.type === '1' && !item.count)).map(item => item.id)
if (ids && ids.length > 0) {
request({
url: '/inspectionFile/inspectionFile/getCountByIds?ids=' + ids,
method: 'get',
}).then(res => {
if (res && res.data) {
const map = new Map(Object.entries(res.data))
this.arrlist.filter(item => (item.type === '1' && !item.count)).forEach(item => {
this.$set(item, 'count', map.get(item.id + ''))
})
}
})
}
}
},
async getback() {
if (!this.fileId) {
uni.navigateBack()
} else {
let res = await request({
url: '/inspectionFile/inspectionFile/' + this.fileId,
method: 'get',
})
this.nowFile = res.data
this.arrlist = []
this.pageNum = 1
this.fileId = this.nowFile.fatherId
this.getlist()
}
},
addwenjian() {
uni.navigateTo({
url: '/pages/manage/deviceAdd?fileId=' + this.fileId + '&type=add'
})
},
enrtryFile(fileId) {
this.fileId = fileId
this.arrlist = []
this.pageNum = 1
this.getlist(true)
},
viewFile(filePath) {
this.isLoading = true;
uni.downloadFile({
url: this.$baseImageUrl + '/' + filePath,
success: (res) => { // 使用箭头函数
var filePath = res.tempFilePath;
this.isLoading = false;
uni.openDocument({
filePath: filePath,
showMenu: true,
success: (res) => {
console.log("文件打开成功");
},
fail: (err) => {
console.error("文件打开失败", err);
uni.showToast({
title: '文件打开失败',
icon: 'none'
});
}
});
},
fail: (err) => {
console.error("文件下载失败", err);
}
});
},
editFile(fileId) {
uni.navigateTo({
url: '/pages/manage/deviceAdd?fileId=' + fileId + '&type=edit'
})
},
delFile(fileId) {
let that = this
uni.showModal({
title: '确认',
content: '是否确认删除',
success: function (res) {
if (res.confirm) {
request({
url: '/inspectionFile/inspectionFile/del/' + fileId,
method: 'post'
}).then(res => {
that.getlist()
})
}
}
});
},
gostaff() {
uni.navigateTo({
url: '/pages/manage/staffManage'
})
},
goinformation() {
uni.navigateTo({
url: '/pages/manage/informationManage'
})
},
godevice() {
uni.navigateTo({
url: '/pages/manage/deviceManage'
})
},
},
}
</script>
<style scoped lang="scss">
.content {
width: 100%;
height: calc(100vh);
background-color: white;
box-sizing: border-box;
// padding-top: 45px;
}
.top-icon {
margin-bottom: 45px;
}
.q-fab {
position: fixed;
bottom: 50px;
right: 15px;
width: 55px;
height: 55px;
border-radius: 50%;
overflow: hidden;
image {
width: 100%;
height: 100%;
}
}
.fab-z1 {
position: fixed;
bottom: 115px;
right: 15px;
width: 50px;
height: 50px;
border-radius: 50%;
overflow: hidden;
image {
width: 100%;
height: 100%;
}
}
.fab-z2 {
position: fixed;
bottom: 50px;
right: 80px;
width: 50px;
height: 50px;
border-radius: 50%;
overflow: hidden;
image {
width: 100%;
height: 100%;
}
}
.c-tap {
width: 100%;
height: 40px;
box-sizing: border-box;
padding: 15px;
display: flex;
background-color: white;
align-items: center;
}
.c-top {
display: flex;
align-items: center;
justify-content: space-between;
}
.c-title {
font-size: 18px;
font-weight: bold
}
.cont {
width: 100%;
padding: 15px;
padding-top: 0px;
box-sizing: border-box;
background-color: white;
}
.hongdian {
width: 15px;
height: 15px;
background-color: crimson;
border-radius: 50%;
overflow: hidden;
position: absolute;
top: 5px;
right: 5px;
z-index: 9999;
}
.c-box {
width: 100%;
box-sizing: border-box;
padding: 10px;
background-color: #327DFB;
margin-top: 10px;
border-radius: 10px;
display: flex;
color: white;
align-items: flex-start;
font-size: 18px;
font-weight: bold;
image {
width: 30px;
height: 30px;
margin-right: 10px;
}
}
.c-b-top {
width: 100%;
display: flex;
justify-content: space-between;
align-items: center;
}
.t-left {
width: 40%;
height: 100px;
border-radius: 7px;
margin-right: 10px;
overflow: hidden;
image {
width: 100%;
height: 100%;
}
}
.t-right {
width: 60%;
}
.t-tilte {
font-size: 20px;
font-weight: bold;
color: #333333;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.tw-tilte {
width: 100%;
text-align: right;
font-size: 16px;
font-weight: bold;
color: #5e5e5e;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.t-zi {
font-size: 14px;
font-weight: 400;
color: #666666;
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 3;
-webkit-box-orient: vertical;
}
.bjimg {
width: 255px;
height: 236px;
margin: 0px auto;
margin-top: 100px;
image {
width: 100%;
height: 100%;
}
}
.c-b-bom {
width: 100%;
display: flex;
justify-content: space-between;
align-items: center;
margin-top: 5px;
}
.b-left {
color: #0D2E8D;
font-size: 14px;
}
.b-right {
display: flex;
justify-content: space-between;
align-items: center;
}
.z-lv {
display: flex;
align-items: center;
color: #0D2E8D;
font-size: 15px;
margin-right: 10px;
}
.y-hong {
display: flex;
align-items: center;
color: #fa3534;
font-size: 15px;
margin-right: 15px;
}
.z-img {
width: 20px;
height: 15px;
image {
width: 100%;
height: 100%;
}
margin-right: 2px;
}
.tap-box {
width: 30%;
text-align: center;
}
.gang {
height: 4px;
background: #0D2E8D;
width: 80%;
margin: 0px auto;
}
.lan {
color: #0D2E8D;
}
.top-heder {
width: 100%;
height: 98px;
//background: white;
display: flex;
align-items: center;
justify-content: space-between;
box-sizing: border-box;
padding: 5px 15px;
color: white;
//margin-top: 2rem;
background: linear-gradient(180deg, #054DF3 0%, #55A3FF 100%);
}
.t-title {
font-size: 17px;
font-weight: bold;
color: white;
}
.t-left {
width: 20%;
height: 20px;
}
.t-you {
width: 20%;
height: 20px;
}
.wrap-box {
width: 100%;
display: flex;
justify-content: space-between;
box-sizing: border-box;
flex-wrap: wrap;
}
.w-box {
width: 48%;
background-color: #F7F8FC;
margin-top: 10px;
border-radius: 10px;
box-sizing: border-box;
padding: 10px;
text-align: center;
}
.wimg {
width: 100%;
height: 120px;
image {
width: 100%;
height: 100%;
}
}
.bsd-dis {
display: flex;
width: 100%;
align-items: center;
justify-content: space-around;
margin-top: 10px;
}
.bianji {
width: 50px;
height: 24px;
color: #0D2E8D;
display: flex;
align-items: center;
justify-content: center;
border-radius: 8px;
}
.sanchu {
width: 50px;
height: 24px;
color: #FF571A;
display: flex;
align-items: center;
justify-content: center;
border-radius: 8px;
}
.t-input {
width: 75%;
height: 36px;
background: #F0F0F0;
border-radius: 50px;
box-sizing: border-box;
padding: 0 15px;
display: flex;
align-items: center;
}
.sou {
width: 10%;
margin-left: 5px;
display: flex;
justify-content: center;
align-items: center;
}
.searchContent {
display: flex;
justify-content: center;
margin-top: 20rpx;
}
/* 弹出层背景 */
.popup {
position: fixed;
bottom: 0;
left: 0;
width: 100%;
background: rgba(0, 0, 0, 0.3);
display: flex;
justify-content: center;
align-items: flex-end;
}
/* 弹出层内容 */
.popup-content {
width: 90%;
background: #fff;
border-radius: 10px 10px 0 0;
padding: 20px;
box-shadow: 0 -2px 10px rgba(0, 0, 0, 0.1);
}
/* 标题 */
.popup-title {
font-size: 18px;
font-weight: bold;
text-align: center;
margin-bottom: 15px;
}
/* 步骤条 */
.steps {
padding: 10px;
}
/* 单个步骤 */
.step {
display: flex;
align-items: flex-start;
margin-bottom: 15px;
}
/* 序号样式 */
.step-index {
width: 30px;
height: 30px;
line-height: 30px;
text-align: center;
border-radius: 50%;
background: #007aff;
color: #fff;
font-size: 14px;
font-weight: bold;
margin-right: 10px;
}
/* 步骤内容 */
.step-content {
flex: 1;
background: #f8f8f8;
padding: 10px;
border-radius: 5px;
}
/* 文字样式 */
.step-file-name {
font-size: 16px;
font-weight: bold;
display: block;
}
.step-time {
font-size: 14px;
color: #666;
display: block;
margin: 5px 0;
}
.step-download {
font-size: 14px;
color: #007aff;
text-decoration: underline;
cursor: pointer;
}
/* 关闭按钮 */
.close-btn {
width: 100%;
padding: 10px;
background: #007aff;
color: white;
text-align: center;
border-radius: 5px;
margin-top: 10px;
}
.file-name {
width: 100%; /* 重要需要固定宽度 */
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
padding: 0 5px; /* 根据实际布局调整 */
}
</style>