From 81ddfe10dc7d838319d8da2546752ae845ce2024 Mon Sep 17 00:00:00 2001
From: liukangdong <898885815@qq.com>
Date: 星期五, 06 十二月 2024 16:28:21 +0800
Subject: [PATCH] ll
---
h5/pages/operation/device.vue | 650 +++++++++++++++++++++++++++++++++-------------------------
1 files changed, 370 insertions(+), 280 deletions(-)
diff --git a/h5/pages/operation/device.vue b/h5/pages/operation/device.vue
index 03eb655..80b70b1 100644
--- a/h5/pages/operation/device.vue
+++ b/h5/pages/operation/device.vue
@@ -5,226 +5,281 @@
<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>
+ <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>
+ <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)">姝e父</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 class="item">
+ <view class="la">璁惧鐘舵��</view>
+ <view class="line">
+ <view class="radio_wrap">
+ <view class="ite" :class="{active: param.status == 0}" @click="statusChange(0)">姝e父</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>
+ <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
- } from '@/api'
+<script>
+ import {
+ uploadUrl,
+ ywDevicePost,
+ ywDeviceCreate
+ } 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: {}
+ 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('璇峰厛閫夋嫨瑕佺淮鎶ょ殑璁惧')
- 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();
- }
- });
- }
- });
- }
+ },
+ 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();
+ }
+ });
+ }
+ });
+ },
+
+ 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.action(decodeText) //瀵逛簩缁寸爜閫昏緫澶勭悊
+ this.stopScan(); //鍏抽棴鎵爜鍔熻兘
+ }
+ },
+ (err) => {
+ // console.log(err); //閿欒淇℃伅
+ }
+ );
+ }
+ });
+ },
+
+ stopScan() {
+ console.log('鍋滄鎵爜')
+ this.isScaning = false;
+ if (this.html5Qrcode) {
+ this.html5Qrcode.stop();
+ }
+ }
}
}
</script>
@@ -238,13 +293,15 @@
}
.line {
- display: flex;
- align-items: center;
- .icon{
- width: 52rpx;
- height: 52rpx;
- margin-left: 40rpx;
+ display: flex;
+ align-items: center;
+
+ .icon {
+ width: 52rpx;
+ height: 52rpx;
+ margin-left: 40rpx;
}
+
textarea {
box-sizing: border-box;
width: 690rpx;
@@ -259,7 +316,7 @@
}
}
- .sel_wrap {
+ .sel_wrap {
flex: 1;
height: 90rpx;
display: flex;
@@ -267,27 +324,31 @@
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);
- }
+
+ .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;
@@ -333,6 +394,7 @@
}
}
+
.sel_upload_wrap {
width: 100%;
border-top: 1px solid #333333;
@@ -344,6 +406,7 @@
text-align: center;
}
}
+
.sub_btn {
position: fixed;
bottom: 68rpx;
@@ -360,51 +423,78 @@
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;
- }
- }
-
- }
+
+ .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;
+ }
+ }
+
+ }
+
+ .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>
\ No newline at end of file
--
Gitblit v1.9.3