<template>  
 | 
    <view class="main_app">  
 | 
        <view class="list">  
 | 
            <view class="item">  
 | 
                <view class="la"><text class="red">*</text>选择设备</view>  
 | 
                <view class="line">  
 | 
                    <view class="sel_wrap" @click="showModal = true">  
 | 
                        <view class="left" :class="(param.deviceName || param.deviceCode) ? '' : 'placeholder9'">  
 | 
                            {{ (param.deviceName || param.deviceCode) ? param.deviceName ? `[${param.deviceCode}] ` + param.deviceName : `[${param.deviceCode}]` : '请选择设备' }}  
 | 
                        </view>  
 | 
                        <u-icon name="arrow-right" color="#999999" size="17"></u-icon>  
 | 
                    </view>  
 | 
                    <image @click="openQrcode" class="icon" src="@/static/side/scan.png" mode=""></image>  
 | 
                </view>  
 | 
            </view>  
 | 
            <view class="item">  
 | 
                <view class="la">设备状态</view>  
 | 
                <view class="line">  
 | 
                    <view class="radio_wrap">  
 | 
                        <view class="ite" :class="{active: param.status == 0}" @click="statusChange(0)">正常</view>  
 | 
                        <view class="ite" :class="{active: param.status == 1}" @click="statusChange(1)">损坏</view>  
 | 
                        <view class="ite" :class="{active: param.status == 2}" @click="statusChange(2)">报废</view>  
 | 
                    </view>  
 | 
                </view>  
 | 
            </view>  
 | 
            <view class="item">  
 | 
                <view class="la">上传视频/图片</view>  
 | 
                <view class="upload_wrap">  
 | 
                    <view class="upload_file" @click="showUpload = true">  
 | 
                        <u-icon name="plus" color="rgb(153, 153, 153)" size="28"></u-icon>  
 | 
                        <view class="mt6">图片/视频</view>  
 | 
                    </view>  
 | 
                    <view class="upload_file" v-for="(item, i) in fileList" :key="i">  
 | 
                        <u-icon class="close" size="20" name="close-circle-fill" color="red"  
 | 
                            @click="fileDel('fileList', i)"></u-icon>  
 | 
                        <image v-if="item.type == 0" :src="item.fileurlFull" mode="widthFix"></image>  
 | 
                        <video v-if="item.type == 1" :src="item.fileurlFull" :controls="false"></video>  
 | 
                    </view>  
 | 
                </view>  
 | 
            </view>  
 | 
            <view class="item">  
 | 
                <view class="la">运维备注</view>  
 | 
                <view class="line">  
 | 
                    <textarea v-model="param.content" placeholder="请输入" placeholder-class="placeholder9" />  
 | 
                </view>  
 | 
            </view>  
 | 
        </view>  
 | 
        <view class="sub_btn" @click="onSubmit">提交</view>  
 | 
        <!--  -->  
 | 
        <u-popup :show="showUpload" @close="showUpload = false" closeOnClickOverlay>  
 | 
            <view class="sel_upload_wrap">  
 | 
                <view class="btn" @click="uploadImage">选择图片</view>  
 | 
                <view class="btn" @click="uploadVideo">选择视频</view>  
 | 
            </view>  
 | 
        </u-popup>  
 | 
        <!--  -->  
 | 
        <u-popup :show="showModal" @close="showModal = false" :safeAreaInsetBottom="true" :round="10" closeable  
 | 
            closeOnClickOverlay>  
 | 
            <view class="appr_modal">  
 | 
                <view class="title">请选择设备</view>  
 | 
                <view class="search_wrap">  
 | 
                    <image class="mr12 search" src="@/static/home/ic_search@2x.png" mode="widthFix"></image>  
 | 
                    <input v-model="searchValue" @confirm="getDevice()" type="text" placeholder="搜索设备名称/编号"  
 | 
                        placeholder-class="placeholder9" />  
 | 
                </view>  
 | 
                <view class="modal_list">  
 | 
                    <view class="item" v-for="item,i in deviceList" @click="deviceClick(item)">  
 | 
                        <view class="name">[{{item.code}}] {{ item.name }}</view>  
 | 
                        <image v-if="activeDevice.id == item.id" src="@/static/radioed.png" mode=""></image>  
 | 
                    </view>  
 | 
                </view>  
 | 
                <view class="sub_btn" @click="handleDevice">确定选择</view>  
 | 
            </view>  
 | 
        </u-popup>  
 | 
        <!--  -->  
 | 
        <view class="reader-box" @click="stopScan" v-if="isScaning">  
 | 
            <view class="reader" id="reader"></view>  
 | 
        </view>  
 | 
    </view>  
 | 
</template>  
 | 
  
 | 
<script>  
 | 
    import {  
 | 
        uploadUrl,  
 | 
        ywDevicePost,  
 | 
        ywDeviceCreate, 
 | 
        getFindByCode  
 | 
    } from '@/api'  
 | 
    import dayjs from 'dayjs';  
 | 
    import {  
 | 
        Html5Qrcode  
 | 
    } from 'html5-qrcode';  
 | 
    export default {  
 | 
        data() {  
 | 
            return {  
 | 
                param: {  
 | 
                    status: 0  
 | 
                },  
 | 
                showUpload: false,  
 | 
                showModal: false,  
 | 
                fileList: [],  
 | 
  
 | 
                searchValue: '',  
 | 
                deviceList: [],  
 | 
                activeDevice: {},  
 | 
  
 | 
                html5Qrcode: null,  
 | 
                isScaning: false,  
 | 
            };  
 | 
        },  
 | 
        onLoad() {  
 | 
            this.getDevice()  
 | 
        },  
 | 
        methods: {  
 | 
            onSubmit() {  
 | 
                const {  
 | 
                    param,  
 | 
                    fileList  
 | 
                } = this  
 | 
  
 | 
                if (!param.deviceId) return this.showToast('请先选择要维护的设备')  
 | 
                this.handleP()  
 | 
            },  
 | 
            handleP() {  
 | 
                const {  
 | 
                    param,   
 | 
                    fileList  
 | 
                } = this  
 | 
                ywDeviceCreate({  
 | 
                    ...param,  
 | 
                    userId: uni.getStorageSync('userInfo').id,  
 | 
                    dealDate: dayjs().format('YYYY-MM-DD HH:mm:ss'),  
 | 
                    multifileList: fileList  
 | 
                }).then(res => {  
 | 
                    if (param.status != 0) {  
 | 
                        uni.showModal({  
 | 
                            title: '温馨提示',  
 | 
                            content: '设备运维结果异常,是否前往提交工单?',  
 | 
                            success: function(res) {  
 | 
                                if (res.confirm) {  
 | 
                                    uni.redirectTo({ 
 | 
                                        url: '/pages/workOrder/edit' 
 | 
                                    })  
 | 
                                } else if (res.cancel) { 
 | 
                                    uni.navigateBack() 
 | 
                                }  
 | 
                            }  
 | 
                        });  
 | 
                    }else{ 
 | 
                        this.showToast('提交成功') 
 | 
                        uni.navigateBack() 
 | 
                    }  
 | 
                })  
 | 
            },  
 | 
            getDevice() {  
 | 
                ywDevicePost({  
 | 
                    capacity: 9999,  
 | 
                    page: 1,  
 | 
                    model: {  
 | 
                        name: this.searchValue  
 | 
                    }  
 | 
                }).then(res => {  
 | 
                    this.deviceList = res.data.records || []  
 | 
                })  
 | 
            },  
 | 
            handleDevice() {  
 | 
                const {  
 | 
                    activeDevice  
 | 
                } = this  
 | 
                if (!activeDevice.id) return this.showToast('请先选择设备')  
 | 
                this.$set(this.param, 'deviceId', activeDevice.id)  
 | 
                this.$set(this.param, 'deviceCode', activeDevice.code)  
 | 
                this.$set(this.param, 'deviceName', activeDevice.name)  
 | 
                this.showModal = false  
 | 
            },  
 | 
            deviceClick(item) {  
 | 
                this.activeDevice = item  
 | 
                this.$forceUpdate()  
 | 
            },  
 | 
            statusChange(val) {  
 | 
                this.param.status = val  
 | 
            },  
 | 
            fileDel(str, i) {  
 | 
                this[str].splice(i, 1);  
 | 
            },  
 | 
            uploadImage() {  
 | 
                this.showUpload = false;  
 | 
                let token = uni.getStorageSync('token') || '';  
 | 
                uni.chooseImage({  
 | 
                    count: 4,  
 | 
                    success: chooseImageRes => {  
 | 
                        uni.showLoading({  
 | 
                            title: '上传中',  
 | 
                            mask: true  
 | 
                        });  
 | 
                        const tempFilePaths = chooseImageRes.tempFilePaths;  
 | 
                        let imgs = tempFilePaths.map((value, index) => {  
 | 
                            return {  
 | 
                                name: 'file',  
 | 
                                uri: value  
 | 
                            };  
 | 
                        });  
 | 
                        uni.uploadFile({  
 | 
                            url: `${uploadUrl}`,  
 | 
                            files: imgs,  
 | 
                            name: 'file',  
 | 
                            formData: {  
 | 
                                folder: 'YW_DEVICE'  
 | 
                            },  
 | 
                            header: {  
 | 
                                Dm_user_token: token  
 | 
                            },  
 | 
                            success: uploadFileRes => {  
 | 
                                let res = JSON.parse(uploadFileRes.data);  
 | 
                                if (res.data && res.data.length > 0) {  
 | 
                                    res.data.forEach(i => {  
 | 
                                        i.type = 0;  
 | 
                                        i.fileurl = i.imgaddr;  
 | 
                                        i.fileurlFull = i.url;  
 | 
                                        this.fileList.push(i);  
 | 
                                    });  
 | 
                                }  
 | 
                            },  
 | 
                            fail(err) {  
 | 
                                console.log('err', err);  
 | 
                            },  
 | 
                            complete() {  
 | 
                                uni.hideLoading();  
 | 
                                // if (i === chooseImageRes.tempFilePaths.length - 1) {  
 | 
                                //   uni.hideLoading()  
 | 
                                // }  
 | 
                            }  
 | 
                        });  
 | 
                    }  
 | 
                });  
 | 
            },  
 | 
            uploadVideo() {  
 | 
                this.showUpload = false;  
 | 
                let token = uni.getStorageSync('token') || '';  
 | 
                uni.chooseVideo({  
 | 
                    success: chooseImageRes => {  
 | 
                        uni.showLoading({  
 | 
                            title: '上传中',  
 | 
                            mask: true  
 | 
                        });  
 | 
                        uni.uploadFile({  
 | 
                            url: `${uploadUrl}`,  
 | 
                            filePath: chooseImageRes.tempFilePath,  
 | 
                            header: {  
 | 
                                Dm_user_token: token  
 | 
                            },  
 | 
                            name: 'file',  
 | 
                            formData: {  
 | 
                                folder: 'YW_DEVICE'  
 | 
                            },  
 | 
                            success: uploadFileRes => {  
 | 
                                let res = JSON.parse(uploadFileRes.data);  
 | 
                                if (res.data && res.data.length > 0) {  
 | 
                                    res.data.forEach(i => {  
 | 
                                        i.type = 1;  
 | 
                                        i.fileurl = i.imgaddr;  
 | 
                                        i.fileurlFull = i.url;  
 | 
                                        this.fileList.push(i);  
 | 
                                    });  
 | 
                                }  
 | 
                            },  
 | 
                            complete() {  
 | 
                                uni.hideLoading();  
 | 
                            }  
 | 
                        });  
 | 
                    }  
 | 
                });  
 | 
            },  
 | 
  
 | 
            openQrcode() {  
 | 
                this.isScaning = true;  
 | 
                Html5Qrcode.getCameras().then((devices) => {  
 | 
                    if (devices && devices.length) {  
 | 
                        this.html5Qrcode = new Html5Qrcode('reader');  
 | 
                        this.html5Qrcode.start({  
 | 
                                facingMode: 'environment'  
 | 
                            }, {  
 | 
                                focusMode: 'continuous', //设置连续聚焦模式  
 | 
                                fps: 5, //设置扫码识别速度  
 | 
                                qrbox: 280 //设置二维码扫描框大小  
 | 
                            },  
 | 
                            (decodeText, decodeResult) => {  
 | 
                                if (decodeText) { //这里decodeText就是通过扫描二维码得到的内容 
 | 
                                    this.stopScan(); //关闭扫码功能 
 | 
                                    getFindByCode(decodeText).then(ress => { 
 | 
                                        if (ress.data) { 
 | 
                                            console.log('ress', ress.data); 
 | 
                                            this.$set(this.param, 'deviceCode', ress.data.code) 
 | 
                                            this.$set(this.param, 'deviceId', ress.data.id) 
 | 
                                            this.$set(this.param, 'deviceName', ress.data.name) 
 | 
                                        } else { 
 | 
                                            this.showToast('未匹配到巡检点,请重新扫描') 
 | 
                                        } 
 | 
                                    })  
 | 
                                      
 | 
                                }  
 | 
                            },  
 | 
                            (err) => {  
 | 
                                // console.log(err);  //错误信息  
 | 
                            }  
 | 
                        );  
 | 
                    }  
 | 
                });  
 | 
            },  
 | 
  
 | 
            stopScan() {  
 | 
                console.log('停止扫码')  
 | 
                this.isScaning = false;  
 | 
                if (this.html5Qrcode) {  
 | 
                    this.html5Qrcode.stop();  
 | 
                }  
 | 
            }  
 | 
        }  
 | 
    }  
 | 
</script>  
 | 
  
 | 
<style lang="scss">  
 | 
    .list {  
 | 
  
 | 
        .item {  
 | 
            .la {  
 | 
                margin-top: 30rpx;  
 | 
            }  
 | 
  
 | 
            .line {  
 | 
                display: flex;  
 | 
                align-items: center;  
 | 
  
 | 
                .icon {  
 | 
                    width: 52rpx;  
 | 
                    height: 52rpx;  
 | 
                    margin-left: 40rpx;  
 | 
                }  
 | 
  
 | 
                textarea {  
 | 
                    box-sizing: border-box;  
 | 
                    width: 690rpx;  
 | 
                    min-height: 160rpx;  
 | 
                    background-color: #f7f7f7;  
 | 
                    font-size: 28rpx;  
 | 
                    color: #333333;  
 | 
                    padding: 24rpx;  
 | 
                    border-radius: 8rpx;  
 | 
                    margin-bottom: 30rpx;  
 | 
                    margin-top: 20rpx;  
 | 
                }  
 | 
            }  
 | 
  
 | 
            .sel_wrap {  
 | 
                flex: 1;  
 | 
                height: 90rpx;  
 | 
                display: flex;  
 | 
                justify-content: space-between;  
 | 
                align-items: center;  
 | 
                border-bottom: 1rpx solid #E5E5E5;  
 | 
            }  
 | 
  
 | 
            .radio_wrap {  
 | 
                margin-top: 20rpx;  
 | 
                width: 100%;  
 | 
                display: flex;  
 | 
                justify-content: space-between;  
 | 
  
 | 
                .ite {  
 | 
                    width: 216rpx;  
 | 
                    height: 68rpx;  
 | 
                    background: #F7F7F7;  
 | 
                    border-radius: 36rpx;  
 | 
                    font-size: 30rpx;  
 | 
                    display: flex;  
 | 
                    align-items: center;  
 | 
                    justify-content: center;  
 | 
                }  
 | 
  
 | 
                .active {  
 | 
                    color: $primaryColor;  
 | 
                    border-color: $primaryColor;  
 | 
                    background: rgba(0, 104, 255, 0.1);  
 | 
                }  
 | 
            }  
 | 
  
 | 
            .upload_wrap {  
 | 
                display: flex;  
 | 
                flex-wrap: wrap;  
 | 
                margin-bottom: 30rpx;  
 | 
            }  
 | 
  
 | 
            .upload_file {  
 | 
                margin-top: 24rpx;  
 | 
                width: 156rpx;  
 | 
                height: 156rpx;  
 | 
                margin-right: 20rpx;  
 | 
                border: 2rpx solid #e5e5e5;  
 | 
                background: #f7f7f7;  
 | 
                color: #666666;  
 | 
                font-size: 22rpx;  
 | 
                display: flex;  
 | 
                flex-direction: column;  
 | 
                align-items: center;  
 | 
                justify-content: center;  
 | 
                position: relative;  
 | 
  
 | 
                &:nth-of-type(4n) {  
 | 
                    margin-right: 0;  
 | 
                }  
 | 
  
 | 
                .close {  
 | 
                    position: absolute;  
 | 
                    right: -20rpx;  
 | 
                    top: -20rpx;  
 | 
                    z-index: 9999;  
 | 
                }  
 | 
  
 | 
                image {  
 | 
                    width: 100%;  
 | 
                    height: 100%;  
 | 
                }  
 | 
  
 | 
                video {  
 | 
                    width: 100%;  
 | 
                    height: 100%;  
 | 
                }  
 | 
            }  
 | 
  
 | 
        }  
 | 
    }  
 | 
  
 | 
    .sel_upload_wrap {  
 | 
        width: 100%;  
 | 
        border-top: 1px solid #333333;  
 | 
        box-shadow: 0 1 1 #333333;  
 | 
  
 | 
        .btn {  
 | 
            height: 90rpx;  
 | 
            line-height: 90rpx;  
 | 
            text-align: center;  
 | 
        }  
 | 
    }  
 | 
  
 | 
    .sub_btn {  
 | 
        // position: fixed;  
 | 
        // bottom: 68rpx;  
 | 
        // left: 40rpx;  
 | 
        width: 670rpx;  
 | 
        height: 88rpx;  
 | 
        margin-top: 80rpx;  
 | 
        background: $primaryColor;  
 | 
        box-shadow: 0rpx 8rpx 20rpx 0rpx rgba(0, 104, 255, 0.3);  
 | 
        border-radius: 44rpx;  
 | 
        display: flex;  
 | 
        align-items: center;  
 | 
        justify-content: center;  
 | 
        font-weight: 500;  
 | 
        font-size: 32rpx;  
 | 
        color: #FFFFFF;  
 | 
    }  
 | 
  
 | 
    .appr_modal {  
 | 
        padding: 36rpx 30rpx 0;  
 | 
        height: calc(100vh - 120rpx);  
 | 
  
 | 
        .title {  
 | 
            font-weight: 600;  
 | 
            font-size: 32rpx;  
 | 
            color: #222222;  
 | 
            margin-bottom: 40rpx;  
 | 
            text-align: center;  
 | 
        }  
 | 
  
 | 
        .search_wrap {  
 | 
            display: flex;  
 | 
            align-items: center;  
 | 
            width: 100%;  
 | 
            height: 76rpx;  
 | 
            background: #f2f2f2;  
 | 
            border-radius: 38rpx;  
 | 
            padding-left: 30rpx;  
 | 
  
 | 
            input {  
 | 
                flex: 1;  
 | 
            }  
 | 
  
 | 
            .search {  
 | 
                width: 28rpx;  
 | 
                height: 28rpx;  
 | 
            }  
 | 
        }  
 | 
  
 | 
        .modal_list {  
 | 
            height: calc(100% - 360rpx);  
 | 
            margin-bottom: -20rpx;  
 | 
  
 | 
            .item {  
 | 
                display: flex;  
 | 
                align-items: center;  
 | 
                justify-content: space-between;  
 | 
                height: 100rpx;  
 | 
                font-size: 30rpx;  
 | 
                border-bottom: 1px solid #E5E5E5;  
 | 
  
 | 
                image {  
 | 
                    width: 40rpx;  
 | 
                    height: 40rpx;  
 | 
                }  
 | 
            }  
 | 
  
 | 
            .active {  
 | 
                color: $primaryColor;  
 | 
            }  
 | 
        }  
 | 
  
 | 
    }  
 | 
  
 | 
    .reader-box {  
 | 
        position: fixed;  
 | 
        top: 0;  
 | 
        bottom: 0;  
 | 
        left: 0;  
 | 
        right: 0;  
 | 
        background-color: rgba(0, 0, 0, 0.5);  
 | 
    }  
 | 
  
 | 
    .reader {  
 | 
        width: 100%;  
 | 
        // width: 540rpx;  
 | 
        // height: 540rpx;  
 | 
        position: absolute;  
 | 
        top: 50%;  
 | 
        left: 50%;  
 | 
        transform: translate(-50%, -50%);  
 | 
    }  
 | 
</style> 
 |