<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 ? '' : 'placeholder9'">{{ param.deviceName ? param.deviceName : '请选择设备' }}</view>  
 | 
                        <u-icon name="arrow-right" color="#999999" size="17"></u-icon>  
 | 
                    </view>  
 | 
                    <image 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>  
 | 
</template>  
 | 
  
 | 
<script> 
 | 
    import { 
 | 
        uploadUrl, 
 | 
        ywDevicePost, 
 | 
        ywDeviceCreate 
 | 
    } from '@/api' 
 | 
    import dayjs from 'dayjs';  
 | 
    export default {  
 | 
        data() {  
 | 
            return {  
 | 
                param: {status: 0}, 
 | 
                showUpload: false, 
 | 
                showModal: false, 
 | 
                fileList: [], 
 | 
                 
 | 
                searchValue: '', 
 | 
                deviceList: [], 
 | 
                activeDevice: {}  
 | 
            };  
 | 
        }, 
 | 
        onLoad() { 
 | 
            this.getDevice() 
 | 
        }, 
 | 
        methods: { 
 | 
            onSubmit() { 
 | 
                const { param, fileList } = this 
 | 
                 
 | 
                if(!param.deviceId) return this.showToast('请先选择要维护的设备') 
 | 
                ywDeviceCreate({ 
 | 
                    ...param, 
 | 
                    userId: uni.getStorageSync('userInfo').id, 
 | 
                    dealDate: dayjs().format('YYYY-MM-DD HH:mm:ss'), 
 | 
                    multifileList: fileList 
 | 
                }).then(res => { 
 | 
                    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, '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(); 
 | 
                            } 
 | 
                        }); 
 | 
                    } 
 | 
                }); 
 | 
            } 
 | 
        }  
 | 
    }  
 | 
</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;  
 | 
        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 ); 
 | 
            .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; 
 | 
            } 
 | 
        } 
 | 
         
 | 
    } 
 | 
</style> 
 |