|  |  |  | 
|---|
|  |  |  | <template> | 
|---|
|  |  |  | <view> | 
|---|
|  |  |  | <page-head :title="title"></page-head> | 
|---|
|  |  |  | <view class="uni-padding-wrap uni-common-mt"> | 
|---|
|  |  |  | <view> | 
|---|
|  |  |  | 本蓝牙协议只支持低功耗蓝牙协议ble。如果想连接非ble蓝牙设备,请在社区搜索 Native.js 蓝牙。 | 
|---|
|  |  |  | <view class="content"> | 
|---|
|  |  |  | <view> | 
|---|
|  |  |  | <view class="bluetoothConnected"> | 
|---|
|  |  |  | <view class="bluetoothList" v-for="(item,index) in GET_CONNECTBLEDATA" :key="index" @tap="confirm_bluetooth(item)"> | 
|---|
|  |  |  | <view class="bluetoothList-name">名称:{{item.name}}</view> | 
|---|
|  |  |  | <view class="bluetoothList-mac">地址:{{item.mac}}</view> | 
|---|
|  |  |  | </view> | 
|---|
|  |  |  | </view> | 
|---|
|  |  |  | <view class="uni-btn-v"> | 
|---|
|  |  |  | <button type="primary" :disabled="disabled[0]" @click="openBluetoothAdapter"> | 
|---|
|  |  |  | 初始化蓝牙模块 | 
|---|
|  |  |  | </button> | 
|---|
|  |  |  | <view v-if="!adapterState.available"> | 
|---|
|  |  |  | {{ '蓝牙适配器不可用,请初始化蓝牙模块' }} | 
|---|
|  |  |  | <button type="default" @click="search_bluetooth">搜索蓝牙</button> | 
|---|
|  |  |  | <button @click="senBleLabel">打印</button> | 
|---|
|  |  |  | <view class="bluetoothItem" v-if="GET_INFODATA"> | 
|---|
|  |  |  | <view class="bluetoothList" v-for="(item,index) in GET_INFODATA" :key="index" @tap="confirm_bluetooth(item)"> | 
|---|
|  |  |  | <view class="bluetoothList-name">名称:{{item.name}}</view> | 
|---|
|  |  |  | <view class="bluetoothList-mac">地址:{{item.mac}}</view> | 
|---|
|  |  |  | </view> | 
|---|
|  |  |  | <button | 
|---|
|  |  |  | type="primary" | 
|---|
|  |  |  | :loading="searchLoad" | 
|---|
|  |  |  | :disabled="disabled[1]" | 
|---|
|  |  |  | @click="startBluetoothDevicesDiscovery" | 
|---|
|  |  |  | > | 
|---|
|  |  |  | 开始搜索蓝牙设备 | 
|---|
|  |  |  | </button> | 
|---|
|  |  |  | <button | 
|---|
|  |  |  | type="primary" | 
|---|
|  |  |  | :disabled="disabled[2]" | 
|---|
|  |  |  | @click="stopBluetoothDevicesDiscovery(false)" | 
|---|
|  |  |  | > | 
|---|
|  |  |  | 停止搜索蓝牙设备 | 
|---|
|  |  |  | </button> | 
|---|
|  |  |  | <button | 
|---|
|  |  |  | type="primary" | 
|---|
|  |  |  | :loading="newDeviceLoad" | 
|---|
|  |  |  | :disabled="disabled[3]" | 
|---|
|  |  |  | @click="queryDevices" | 
|---|
|  |  |  | > | 
|---|
|  |  |  | 选择设备 | 
|---|
|  |  |  | </button> | 
|---|
|  |  |  | <view v-if="equipment.length > 0"> | 
|---|
|  |  |  | {{ | 
|---|
|  |  |  | (connected ? '已连接设备' : '已选择设备') + | 
|---|
|  |  |  | ' : ' + | 
|---|
|  |  |  | equipment[0].name + | 
|---|
|  |  |  | ' (' + | 
|---|
|  |  |  | equipment[0].deviceId + | 
|---|
|  |  |  | ')' | 
|---|
|  |  |  | }} | 
|---|
|  |  |  | </view> | 
|---|
|  |  |  | <button type="primary" :disabled="disabled[4]" @click="createBLEConnection"> | 
|---|
|  |  |  | 连接蓝牙设备 | 
|---|
|  |  |  | </button> | 
|---|
|  |  |  | <button type="primary" :disabled="disabled[5]" @click="getBLEDeviceServices"> | 
|---|
|  |  |  | 选择设备服务 | 
|---|
|  |  |  | </button> | 
|---|
|  |  |  | <view v-if="servicesData.length > 0">已选服务uuid:{{ servicesData[0].uuid }}</view> | 
|---|
|  |  |  | <button type="primary" :disabled="disabled[6]" @click="getBLEDeviceCharacteristics"> | 
|---|
|  |  |  | 获取服务的特征值 | 
|---|
|  |  |  | </button> | 
|---|
|  |  |  | <view v-if="characteristicsData.length > 0"> | 
|---|
|  |  |  | <view class="uni-list_name">uuid:{{ characteristicsData[0].uuid }}</view> | 
|---|
|  |  |  | <view class="uni-list_item"> | 
|---|
|  |  |  | 是否支持 read 操作:{{ characteristicsData[0].properties.read }} | 
|---|
|  |  |  | </view> | 
|---|
|  |  |  | <view class="uni-list_item"> | 
|---|
|  |  |  | 是否支持 write 操作:{{ characteristicsData[0].properties.write }} | 
|---|
|  |  |  | </view> | 
|---|
|  |  |  | <view class="uni-list_item"> | 
|---|
|  |  |  | 是否支持 notify 操作:{{ characteristicsData[0].properties.notify }} | 
|---|
|  |  |  | </view> | 
|---|
|  |  |  | <view class="uni-list_item"> | 
|---|
|  |  |  | 是否支持 indicate 操作:{{ characteristicsData[0].properties.indicate }} | 
|---|
|  |  |  | </view> | 
|---|
|  |  |  | </view> | 
|---|
|  |  |  | <!-- <button type="primary" :disabled="disabled[7]" @click="readBLECharacteristicValue"> | 
|---|
|  |  |  | 读取特征值数据 | 
|---|
|  |  |  | </button> | 
|---|
|  |  |  | <view v-if="valueChangeData.serviceId"> | 
|---|
|  |  |  | <view class="list-name"> | 
|---|
|  |  |  | 特征值最新的值:{{ valueChangeData.value || '还没有最新值' }} | 
|---|
|  |  |  | </view> | 
|---|
|  |  |  | </view> --> | 
|---|
|  |  |  | <!-- <button type="primary" :disabled="disabled[8]" @click="w">写入特征值数据</button> --> | 
|---|
|  |  |  | <button type="primary" :disabled="disabled[9]" @click="closeBLEConnection"> | 
|---|
|  |  |  | 断开蓝牙设备 | 
|---|
|  |  |  | </button> | 
|---|
|  |  |  | <button type="primary" :disabled="disabled[10]" @click="closeBluetoothAdapter"> | 
|---|
|  |  |  | 关闭蓝牙模块 | 
|---|
|  |  |  | </button> | 
|---|
|  |  |  | </view> | 
|---|
|  |  |  | </view> | 
|---|
|  |  |  | <!-- 遮罩 --> | 
|---|
|  |  |  | <view v-if="maskShow" class="uni-mask" @touchmove.stop.prevent="moveHandle" @click="maskclose"> | 
|---|
|  |  |  | <scroll-view class="uni-scroll_box" scroll-y @touchmove.stop.prevent="moveHandle" @click.stop="moveHandle"> | 
|---|
|  |  |  | <view class="uni-title"> | 
|---|
|  |  |  | 已经发现{{ list.length }}{{ showMaskType === 'device' ? '台设备' : '个服务' }}: | 
|---|
|  |  |  | </view> | 
|---|
|  |  |  | <view | 
|---|
|  |  |  | class="uni-list-box" | 
|---|
|  |  |  | v-for="(item, index) in list" | 
|---|
|  |  |  | :key="index" | 
|---|
|  |  |  | @click="tapQuery(item)" | 
|---|
|  |  |  | > | 
|---|
|  |  |  | <view v-if="showMaskType === 'device'"> | 
|---|
|  |  |  | <view class="uni-list_name">{{ item.name || item.localName }}</view> | 
|---|
|  |  |  | <view class="uni-list_item">信号强度:{{ item.RSSI }}dBm</view> | 
|---|
|  |  |  | <view class="uni-list_item">UUID:{{ item.deviceId }}</view> | 
|---|
|  |  |  | <!-- <view class="list-item" v-if="showMaskType === 'device'"> | 
|---|
|  |  |  | Service数量:{{ item.advertisServiceUUIDs.length }} | 
|---|
|  |  |  | </view> --> | 
|---|
|  |  |  | </view> | 
|---|
|  |  |  | <view v-if="showMaskType === 'service'"> | 
|---|
|  |  |  | <view class="uni-list_item" style="line-height:2.2;"> | 
|---|
|  |  |  | UUID: {{ item.uuid }} | 
|---|
|  |  |  | <text v-if="showMaskType === 'service'"> | 
|---|
|  |  |  | {{ item.isPrimary ? '(主服务)' : '' }} | 
|---|
|  |  |  | </text> | 
|---|
|  |  |  | </view> | 
|---|
|  |  |  | </view> | 
|---|
|  |  |  | <view v-if="showMaskType === 'characteristics'"> | 
|---|
|  |  |  | <view class="uni-list_name">uuid:{{ item.uuid }}</view> | 
|---|
|  |  |  | <view class="uni-list_item">是否支持 read 操作:{{ item.properties.read }}</view> | 
|---|
|  |  |  | <view class="uni-list_item"> | 
|---|
|  |  |  | 是否支持 write 操作:{{ item.properties.write }} | 
|---|
|  |  |  | </view> | 
|---|
|  |  |  | <view class="uni-list_item"> | 
|---|
|  |  |  | 是否支持 notify 操作:{{ item.properties.notify }} | 
|---|
|  |  |  | </view> | 
|---|
|  |  |  | <view class="uni-list_item"> | 
|---|
|  |  |  | 是否支持 indicate 操作:{{ item.properties.indicate }} | 
|---|
|  |  |  | </view> | 
|---|
|  |  |  | </view> | 
|---|
|  |  |  | </view> | 
|---|
|  |  |  | </scroll-view> | 
|---|
|  |  |  | </view> | 
|---|
|  |  |  | </view> | 
|---|
|  |  |  | </template> | 
|---|
|  |  |  |  | 
|---|
|  |  |  | <script> | 
|---|
|  |  |  | export default { | 
|---|
|  |  |  | data() { | 
|---|
|  |  |  | return { | 
|---|
|  |  |  | title: 'bluetooth', | 
|---|
|  |  |  | disabled: [false, true, true, true, true, true, true, true, true, true, true], | 
|---|
|  |  |  | newDeviceLoad: false, | 
|---|
|  |  |  | searchLoad: false, | 
|---|
|  |  |  | maskShow: false, | 
|---|
|  |  |  | equipment: [], | 
|---|
|  |  |  | adapterState: { | 
|---|
|  |  |  | discovering: false, | 
|---|
|  |  |  | available: false | 
|---|
|  |  |  | import printConnect from "@/common/print.js";  //引入打印机模板文件 | 
|---|
|  |  |  | let _this = null; | 
|---|
|  |  |  | import { | 
|---|
|  |  |  | mapGetters, | 
|---|
|  |  |  | mapActions | 
|---|
|  |  |  | } from 'vuex'; | 
|---|
|  |  |  | import { | 
|---|
|  |  |  | GET_INFODATA, | 
|---|
|  |  |  | GET_CONNECTBLEDATA | 
|---|
|  |  |  | } from "@/store/gettersType.js"; | 
|---|
|  |  |  | import { | 
|---|
|  |  |  | SET_CONNECTBLEDATA | 
|---|
|  |  |  | } from '@/store/actionsType.js'; | 
|---|
|  |  |  | // #ifdef APP-PLUS | 
|---|
|  |  |  | const HanyinPlugin = uni.requireNativePlugin('Hanyin-Plugin'); //汉印 | 
|---|
|  |  |  | // #endif | 
|---|
|  |  |  | let print; | 
|---|
|  |  |  | export default { | 
|---|
|  |  |  | data() { | 
|---|
|  |  |  | return { | 
|---|
|  |  |  | bArray: [], //用于搜索蓝牙去重用的 | 
|---|
|  |  |  | no_match_list: [], //没有配对的蓝牙列表 | 
|---|
|  |  |  | match_list: "", //已连接蓝牙打印机 | 
|---|
|  |  |  | val: "", | 
|---|
|  |  |  | dateTimer: "", | 
|---|
|  |  |  | valArr: [], | 
|---|
|  |  |  | print_data: '', | 
|---|
|  |  |  | mat: '', | 
|---|
|  |  |  | time: '', | 
|---|
|  |  |  | // 巴枪参数 | 
|---|
|  |  |  | // broadcase_actions: "com.android.receive_scan_action", | 
|---|
|  |  |  | // broadcast_flag: "data" | 
|---|
|  |  |  | }; | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | computed: { | 
|---|
|  |  |  | ...mapGetters([GET_INFODATA, GET_CONNECTBLEDATA]) | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | onShow() { | 
|---|
|  |  |  | uni.hideLoading(); | 
|---|
|  |  |  | //检查是否已连接蓝牙 | 
|---|
|  |  |  | // this.$check_bluetooth_connect(); | 
|---|
|  |  |  | console.log('onShow'); | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | onHide() { | 
|---|
|  |  |  | console.log('onHide'); | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | onUnload() { | 
|---|
|  |  |  | console.log('onUnload'); | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | onLoad(options) { | 
|---|
|  |  |  | _this = this; | 
|---|
|  |  |  | this.$init_bluetooth(); | 
|---|
|  |  |  | let that = this | 
|---|
|  |  |  | const eventChannel = this.getOpenerEventChannel(); | 
|---|
|  |  |  | eventChannel.on('data1', function(data1) { | 
|---|
|  |  |  | that.mat = data1.data | 
|---|
|  |  |  | that.time = data1.time | 
|---|
|  |  |  | console.log(data1); | 
|---|
|  |  |  | }) | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | methods: { | 
|---|
|  |  |  | ...mapActions([SET_CONNECTBLEDATA]), | 
|---|
|  |  |  | senBleLabel() { | 
|---|
|  |  |  | // console.log(this.$Mock.order_data); | 
|---|
|  |  |  | if(!print) return; | 
|---|
|  |  |  | console.log(this.mat); | 
|---|
|  |  |  | this.print_data =  this.$Mock.order_data | 
|---|
|  |  |  | this.print_data.MATNR = this.mat.matnr | 
|---|
|  |  |  | this.print_data.MAKTX = this.mat.maktx | 
|---|
|  |  |  | this.print_data.MODI_TIME = this.time | 
|---|
|  |  |  | print.startPrint(this.print_data); | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | connected: false, | 
|---|
|  |  |  | showMaskType: 'device', | 
|---|
|  |  |  | servicesData: [], | 
|---|
|  |  |  | characteristicsData: [], | 
|---|
|  |  |  | valueChangeData: {}, | 
|---|
|  |  |  | isStop:true , | 
|---|
|  |  |  | list: [] | 
|---|
|  |  |  | }; | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | onLoad() { | 
|---|
|  |  |  | this.onBLEConnectionStateChange(); | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | methods: { | 
|---|
|  |  |  | moveHandle() {}, | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 关闭遮罩 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | maskclose(){ | 
|---|
|  |  |  | this.maskShow = false; | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 选择设备 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | queryDevices() { | 
|---|
|  |  |  | // this.newDeviceLoad = true; | 
|---|
|  |  |  | this.showMaskType = 'device'; | 
|---|
|  |  |  | this.maskShow = true; | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | tapQuery(item) { | 
|---|
|  |  |  | if (this.showMaskType === 'device') { | 
|---|
|  |  |  | this.$set(this.disabled, 4, false); | 
|---|
|  |  |  | if (this.equipment.length > 0) { | 
|---|
|  |  |  | this.equipment[0] = item; | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | this.equipment.push(item); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | this.newDeviceLoad = false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (this.showMaskType === 'service') { | 
|---|
|  |  |  | this.$set(this.disabled, 6, false); | 
|---|
|  |  |  | if (this.servicesData.length > 0) { | 
|---|
|  |  |  | this.servicesData[0] = item; | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | this.servicesData.push(item); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (this.showMaskType === 'characteristics') { | 
|---|
|  |  |  | this.$set(this.disabled, 7, false); | 
|---|
|  |  |  | if (this.characteristicsData.length > 0) { | 
|---|
|  |  |  | this.characteristicsData[0] = item; | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | this.characteristicsData.push(item); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | this.maskShow = false; | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 初始化蓝牙设备 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | openBluetoothAdapter() { | 
|---|
|  |  |  | uni.openBluetoothAdapter({ | 
|---|
|  |  |  | success: e => { | 
|---|
|  |  |  | console.log('初始化蓝牙成功:' + e.errMsg); | 
|---|
|  |  |  | console.log(JSON.stringify(e)); | 
|---|
|  |  |  | this.isStop = false ; | 
|---|
|  |  |  | this.$set(this.disabled, 0, true); | 
|---|
|  |  |  | this.$set(this.disabled, 1, false); | 
|---|
|  |  |  | this.$set(this.disabled, 10, false); | 
|---|
|  |  |  | this.getBluetoothAdapterState(); | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | fail: e => { | 
|---|
|  |  |  | console.log(e) | 
|---|
|  |  |  | console.log('初始化蓝牙失败,错误码:' + (e.errCode || e.errMsg)); | 
|---|
|  |  |  | if (e.errCode !== 0) { | 
|---|
|  |  |  | initTypes(e.errCode,e.errMsg); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 开始搜索蓝牙设备 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | startBluetoothDevicesDiscovery() { | 
|---|
|  |  |  | uni.startBluetoothDevicesDiscovery({ | 
|---|
|  |  |  | success: e => { | 
|---|
|  |  |  | console.log('开始搜索蓝牙设备:' + e.errMsg); | 
|---|
|  |  |  | this.searchLoad = true; | 
|---|
|  |  |  | this.$set(this.disabled, 1, true); | 
|---|
|  |  |  | this.$set(this.disabled, 2, false); | 
|---|
|  |  |  | this.$set(this.disabled, 3, false); | 
|---|
|  |  |  | this.onBluetoothDeviceFound(); | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | fail: e => { | 
|---|
|  |  |  | console.log('搜索蓝牙设备失败,错误码:' + e.errCode); | 
|---|
|  |  |  | if (e.errCode !== 0) { | 
|---|
|  |  |  | initTypes(e.errCode); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 停止搜索蓝牙设备 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | stopBluetoothDevicesDiscovery(types) { | 
|---|
|  |  |  | uni.stopBluetoothDevicesDiscovery({ | 
|---|
|  |  |  | success: e => { | 
|---|
|  |  |  | console.log('停止搜索蓝牙设备:' + e.errMsg); | 
|---|
|  |  |  | if (types) { | 
|---|
|  |  |  | this.$set(this.disabled, 1, true); | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | this.$set(this.disabled, 1, false); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | this.$set(this.disabled, 2, true); | 
|---|
|  |  |  | // this.$set(this.disabled, 3, true); | 
|---|
|  |  |  | this.searchLoad = false; | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | fail: e => { | 
|---|
|  |  |  | console.log('停止搜索蓝牙设备失败,错误码:' + e.errCode); | 
|---|
|  |  |  | if (e.errCode !== 0) { | 
|---|
|  |  |  | initTypes(e.errCode); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 发现外围设备 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | onBluetoothDeviceFound() { | 
|---|
|  |  |  | uni.onBluetoothDeviceFound(devices => { | 
|---|
|  |  |  | console.log('开始监听寻找到新设备的事件'); | 
|---|
|  |  |  | // this.$set(this.disabled, 3, false); | 
|---|
|  |  |  | this.getBluetoothDevices(); | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 获取在蓝牙模块生效期间所有已发现的蓝牙设备。包括已经和本机处于连接状态的设备。 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | getBluetoothDevices() { | 
|---|
|  |  |  | uni.getBluetoothDevices({ | 
|---|
|  |  |  | success: res => { | 
|---|
|  |  |  | this.newDeviceLoad = false; | 
|---|
|  |  |  | console.log('获取蓝牙设备成功:' + res.errMsg); | 
|---|
|  |  |  | // console.log(JSON.stringify(res)) | 
|---|
|  |  |  | this.list = res.devices; | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | fail: e => { | 
|---|
|  |  |  | console.log('获取蓝牙设备错误,错误码:' + e.errCode); | 
|---|
|  |  |  | if (e.errCode !== 0) { | 
|---|
|  |  |  | initTypes(e.errCode); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 获取本机蓝牙适配器状态 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | getBluetoothAdapterState() { | 
|---|
|  |  |  | console.log('--->'); | 
|---|
|  |  |  | uni.getBluetoothAdapterState({ | 
|---|
|  |  |  | success: res => { | 
|---|
|  |  |  | console.log(JSON.stringify(res)); | 
|---|
|  |  |  | this.adapterState = res; | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | fail: e => { | 
|---|
|  |  |  | console.log('获取本机蓝牙适配器状态失败,错误码:' + e.errCode); | 
|---|
|  |  |  | if (e.errCode !== 0) { | 
|---|
|  |  |  | initTypes(e.errCode); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 连接低功耗蓝牙 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | createBLEConnection() { | 
|---|
|  |  |  | let deviceId = this.equipment[0].deviceId; | 
|---|
|  |  |  | uni.showToast({ | 
|---|
|  |  |  | title: '连接蓝牙...', | 
|---|
|  |  |  | icon: 'loading', | 
|---|
|  |  |  | duration: 99999 | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | uni.createBLEConnection({ | 
|---|
|  |  |  | // 这里的 deviceId 需要已经通过 createBLEConnection 与对应设备建立链接 | 
|---|
|  |  |  | deviceId, | 
|---|
|  |  |  | success: res => { | 
|---|
|  |  |  | // 连接打印机 | 
|---|
|  |  |  | confirm_bluetooth(item) { | 
|---|
|  |  |  | let { | 
|---|
|  |  |  | name, | 
|---|
|  |  |  | mac | 
|---|
|  |  |  | } = item; | 
|---|
|  |  |  | //判断蓝牙是否打开 | 
|---|
|  |  |  | this.$check_bluetooth_open().then(res => { | 
|---|
|  |  |  | console.log(res); | 
|---|
|  |  |  | console.log('连接蓝牙成功:' + res.errMsg); | 
|---|
|  |  |  | // 连接设备后断开搜索 并且不能搜索设备 | 
|---|
|  |  |  | this.stopBluetoothDevicesDiscovery(true); | 
|---|
|  |  |  | uni.hideToast(); | 
|---|
|  |  |  | uni.showToast({ | 
|---|
|  |  |  | title: '连接成功', | 
|---|
|  |  |  | icon: 'success', | 
|---|
|  |  |  | duration: 2000 | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | this.$set(this.disabled, 3, true); | 
|---|
|  |  |  | this.$set(this.disabled, 4, true); | 
|---|
|  |  |  | this.$set(this.disabled, 5, false); | 
|---|
|  |  |  | this.$set(this.disabled, 9, false); | 
|---|
|  |  |  | this.connected = true; | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | fail: e => { | 
|---|
|  |  |  | console.log('连接低功耗蓝牙失败,错误码:' + e.errCode); | 
|---|
|  |  |  | if (e.errCode !== 0) { | 
|---|
|  |  |  | initTypes(e.errCode); | 
|---|
|  |  |  | //进行打印机连接 | 
|---|
|  |  |  | if (res) { | 
|---|
|  |  |  | print =new printConnect(item);  //打印机连接 | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 断开与低功耗蓝牙设备的连接 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | closeBLEConnection() { | 
|---|
|  |  |  | let deviceId = this.equipment[0].deviceId; | 
|---|
|  |  |  | uni.closeBLEConnection({ | 
|---|
|  |  |  | deviceId, | 
|---|
|  |  |  | success: res => { | 
|---|
|  |  |  | console.log(res); | 
|---|
|  |  |  | console.log('断开低功耗蓝牙成功:' + res.errMsg); | 
|---|
|  |  |  | this.$set(this.disabled, 1, false); | 
|---|
|  |  |  | this.$set(this.disabled, 3, true); | 
|---|
|  |  |  | this.$set(this.disabled, 4, true); | 
|---|
|  |  |  | this.$set(this.disabled, 5, true); | 
|---|
|  |  |  | this.$set(this.disabled, 6, true); | 
|---|
|  |  |  | this.$set(this.disabled, 7, true); | 
|---|
|  |  |  | this.$set(this.disabled, 8, true); | 
|---|
|  |  |  | this.$set(this.disabled, 9, true); | 
|---|
|  |  |  | this.equipment = []; | 
|---|
|  |  |  | this.servicesData = []; | 
|---|
|  |  |  | this.characteristicsData = []; | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | fail: e => { | 
|---|
|  |  |  | console.log('断开低功耗蓝牙成功,错误码:' + e.errCode); | 
|---|
|  |  |  | if (e.errCode !== 0) { | 
|---|
|  |  |  | initTypes(e.errCode); | 
|---|
|  |  |  | }) | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | //搜索没匹配的蓝牙设备 | 
|---|
|  |  |  | search_bluetooth(address) { | 
|---|
|  |  |  | let _this = this; | 
|---|
|  |  |  | //检查蓝牙是否开启 | 
|---|
|  |  |  | this.$check_bluetooth_open().then(ores => { | 
|---|
|  |  |  | if (ores) { | 
|---|
|  |  |  | console.log(ores); | 
|---|
|  |  |  | //搜索蓝牙 | 
|---|
|  |  |  | _this.$search_bluetooth().then(bres => { | 
|---|
|  |  |  | console.log(bres); | 
|---|
|  |  |  | if (bres.code) { | 
|---|
|  |  |  | _this.$search_pipei().then(pres => { | 
|---|
|  |  |  | console.log(pres); | 
|---|
|  |  |  | }) | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }) | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 获取所有服务 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | getBLEDeviceServices() { | 
|---|
|  |  |  | let deviceId = this.equipment[0].deviceId; | 
|---|
|  |  |  | console.log('获取所有服务的 uuid:' + deviceId); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | uni.getBLEDeviceServices({ | 
|---|
|  |  |  | // 这里的 deviceId 需要已经通过 createBLEConnection 与对应设备建立链接 | 
|---|
|  |  |  | deviceId, | 
|---|
|  |  |  | success: res => { | 
|---|
|  |  |  | console.log(JSON.stringify(res.services)); | 
|---|
|  |  |  | console.log('获取设备服务成功:' + res.errMsg); | 
|---|
|  |  |  | this.$set(this.disabled, 7, true); | 
|---|
|  |  |  | this.$set(this.disabled, 8, true); | 
|---|
|  |  |  | this.showMaskType = 'service'; | 
|---|
|  |  |  | this.list = res.services; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | this.characteristicsData = []; | 
|---|
|  |  |  | if (this.list.length <= 0) { | 
|---|
|  |  |  | toast('获取服务失败,请重试!'); | 
|---|
|  |  |  | return; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | this.maskShow = true; | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | fail: e => { | 
|---|
|  |  |  | console.log('获取设备服务失败,错误码:' + e.errCode); | 
|---|
|  |  |  | if (e.errCode !== 0) { | 
|---|
|  |  |  | initTypes(e.errCode); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 获取某个服务下的所有特征值 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | getBLEDeviceCharacteristics() { | 
|---|
|  |  |  | let deviceId = this.equipment[0].deviceId; | 
|---|
|  |  |  | let serviceId = this.servicesData[0].uuid; | 
|---|
|  |  |  | console.log(deviceId); | 
|---|
|  |  |  | console.log(serviceId); | 
|---|
|  |  |  | uni.getBLEDeviceCharacteristics({ | 
|---|
|  |  |  | // 这里的 deviceId 需要已经通过 createBLEConnection 与对应设备建立链接 | 
|---|
|  |  |  | deviceId, | 
|---|
|  |  |  | // 这里的 serviceId 需要在 getBLEDeviceServices 接口中获取 | 
|---|
|  |  |  | serviceId, | 
|---|
|  |  |  | success: res => { | 
|---|
|  |  |  | console.log(JSON.stringify(res)); | 
|---|
|  |  |  | console.log('获取特征值成功:' + res.errMsg); | 
|---|
|  |  |  | this.$set(this.disabled, 7, true); | 
|---|
|  |  |  | this.valueChangeData = {}; | 
|---|
|  |  |  | this.showMaskType = 'characteristics'; | 
|---|
|  |  |  | this.list = res.characteristics; | 
|---|
|  |  |  | if (this.list.length <= 0) { | 
|---|
|  |  |  | toast('获取特征值失败,请重试!'); | 
|---|
|  |  |  | return; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | this.maskShow = true; | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | fail: e => { | 
|---|
|  |  |  | console.log('获取特征值失败,错误码:' + e.errCode); | 
|---|
|  |  |  | if (e.errCode !== 0) { | 
|---|
|  |  |  | initTypes(e.errCode); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 监听低功耗蓝牙连接状态的改变事件。包括开发者主动连接或断开连接,设备丢失,连接异常断开等等 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | onBLEConnectionStateChange() { | 
|---|
|  |  |  | uni.onBLEConnectionStateChange(res => { | 
|---|
|  |  |  | // 该方法回调中可以用于处理连接意外断开等异常情况 | 
|---|
|  |  |  | console.log(`蓝牙连接状态 -------------------------->`); | 
|---|
|  |  |  | console.log(JSON.stringify(res)); | 
|---|
|  |  |  | if (!res.connected) { | 
|---|
|  |  |  | if(this.isStop) return ; | 
|---|
|  |  |  | console.log('断开低功耗蓝牙成功:'); | 
|---|
|  |  |  | this.$set(this.disabled, 1, false); | 
|---|
|  |  |  | this.$set(this.disabled, 3, true); | 
|---|
|  |  |  | this.$set(this.disabled, 4, true); | 
|---|
|  |  |  | this.$set(this.disabled, 5, true); | 
|---|
|  |  |  | this.$set(this.disabled, 6, true); | 
|---|
|  |  |  | this.$set(this.disabled, 7, true); | 
|---|
|  |  |  | this.$set(this.disabled, 8, true); | 
|---|
|  |  |  | this.$set(this.disabled, 9, true); | 
|---|
|  |  |  | this.searchLoad = false; | 
|---|
|  |  |  | this.equipment = []; | 
|---|
|  |  |  | this.servicesData = []; | 
|---|
|  |  |  | this.characteristicsData = []; | 
|---|
|  |  |  | this.valueChangeData = {}; | 
|---|
|  |  |  | toast('已经断开当前蓝牙连接'); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 读取低功耗蓝牙设备的特征值的二进制数据值。注意:必须设备的特征值支持 read 才可以成功调用 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | readBLECharacteristicValue() { | 
|---|
|  |  |  | let deviceId = this.equipment[0].deviceId; | 
|---|
|  |  |  | let serviceId = this.servicesData[0].uuid; | 
|---|
|  |  |  | let characteristicId = this.characteristicsData[0].uuid; | 
|---|
|  |  |  | console.log(deviceId); | 
|---|
|  |  |  | console.log(serviceId); | 
|---|
|  |  |  | console.log(characteristicId); | 
|---|
|  |  |  | uni.readBLECharacteristicValue({ | 
|---|
|  |  |  | // 这里的 deviceId 需要已经通过 createBLEConnection 与对应设备建立链接 | 
|---|
|  |  |  | deviceId, | 
|---|
|  |  |  | // 这里的 serviceId 需要在 getBLEDeviceServices 接口中获取 | 
|---|
|  |  |  | serviceId, | 
|---|
|  |  |  | // 这里的 characteristicId 需要在 getBLEDeviceCharacteristics 接口中获取 | 
|---|
|  |  |  | characteristicId, | 
|---|
|  |  |  | success: res => { | 
|---|
|  |  |  | console.log('读取设备数据值成功'); | 
|---|
|  |  |  | console.log(JSON.stringify(res)); | 
|---|
|  |  |  | this.notifyBLECharacteristicValueChange(); | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | fail(e) { | 
|---|
|  |  |  | console.log('读取设备数据值失败,错误码:' + e.errCode); | 
|---|
|  |  |  | if (e.errCode !== 0) { | 
|---|
|  |  |  | initTypes(e.errCode); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | this.onBLECharacteristicValueChange(); | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 监听低功耗蓝牙设备的特征值变化事件。必须先启用 notifyBLECharacteristicValueChange 接口才能接收到设备推送的 notification。 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | onBLECharacteristicValueChange() { | 
|---|
|  |  |  | // 必须在这里的回调才能获取 | 
|---|
|  |  |  | uni.onBLECharacteristicValueChange(characteristic => { | 
|---|
|  |  |  | console.log('监听低功耗蓝牙设备的特征值变化事件成功'); | 
|---|
|  |  |  | console.log(JSON.stringify(characteristic)); | 
|---|
|  |  |  | this.valueChangeData = characteristic; | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 订阅操作成功后需要设备主动更新特征值的 value,才会触发 uni.onBLECharacteristicValueChange 回调。 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | notifyBLECharacteristicValueChange() { | 
|---|
|  |  |  | let deviceId = this.equipment[0].deviceId; | 
|---|
|  |  |  | let serviceId = this.servicesData[0].uuid; | 
|---|
|  |  |  | let characteristicId = this.characteristicsData[0].uuid; | 
|---|
|  |  |  | let notify = this.characteristicsData[0].properties.notify; | 
|---|
|  |  |  | console.log(deviceId); | 
|---|
|  |  |  | console.log(serviceId); | 
|---|
|  |  |  | console.log(characteristicId); | 
|---|
|  |  |  | console.log(notify); | 
|---|
|  |  |  | uni.notifyBLECharacteristicValueChange({ | 
|---|
|  |  |  | state: true, // 启用 notify 功能 | 
|---|
|  |  |  | // 这里的 deviceId 需要已经通过 createBLEConnection 与对应设备建立链接 | 
|---|
|  |  |  | deviceId, | 
|---|
|  |  |  | // 这里的 serviceId 需要在 getBLEDeviceServices 接口中获取 | 
|---|
|  |  |  | serviceId, | 
|---|
|  |  |  | // 这里的 characteristicId 需要在 getBLEDeviceCharacteristics 接口中获取 | 
|---|
|  |  |  | characteristicId, | 
|---|
|  |  |  | success(res) { | 
|---|
|  |  |  | console.log('notifyBLECharacteristicValueChange success:' + res.errMsg); | 
|---|
|  |  |  | console.log(JSON.stringify(res)); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | *    断开蓝牙模块 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | closeBluetoothAdapter(OBJECT) { | 
|---|
|  |  |  | uni.closeBluetoothAdapter({ | 
|---|
|  |  |  | success: res => { | 
|---|
|  |  |  | console.log('断开蓝牙模块成功'); | 
|---|
|  |  |  | this.isStop = true ; | 
|---|
|  |  |  | this.$set(this.disabled, 0, false); | 
|---|
|  |  |  | this.$set(this.disabled, 1, true); | 
|---|
|  |  |  | this.$set(this.disabled, 2, true); | 
|---|
|  |  |  | this.$set(this.disabled, 3, true); | 
|---|
|  |  |  | this.$set(this.disabled, 4, true); | 
|---|
|  |  |  | this.$set(this.disabled, 5, true); | 
|---|
|  |  |  | this.$set(this.disabled, 6, true); | 
|---|
|  |  |  | this.$set(this.disabled, 7, true); | 
|---|
|  |  |  | this.$set(this.disabled, 8, true); | 
|---|
|  |  |  | this.$set(this.disabled, 9, true); | 
|---|
|  |  |  | this.$set(this.disabled, 10, true); | 
|---|
|  |  |  | this.equipment = []; | 
|---|
|  |  |  | this.servicesData = []; | 
|---|
|  |  |  | this.characteristicsData = []; | 
|---|
|  |  |  | this.valueChangeData = {}; | 
|---|
|  |  |  | this.adapterState = []; | 
|---|
|  |  |  | this.searchLoad =false; | 
|---|
|  |  |  | toast('断开蓝牙模块'); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | }) | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 判断初始化蓝牙状态 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | function initTypes(code, errMsg) { | 
|---|
|  |  |  | switch (code) { | 
|---|
|  |  |  | case 10000: | 
|---|
|  |  |  | toast('未初始化蓝牙适配器'); | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | case 10001: | 
|---|
|  |  |  | toast('未检测到蓝牙,请打开蓝牙重试!'); | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | case 10002: | 
|---|
|  |  |  | toast('没有找到指定设备'); | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | case 10003: | 
|---|
|  |  |  | toast('连接失败'); | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | case 10004: | 
|---|
|  |  |  | toast('没有找到指定服务'); | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | case 10005: | 
|---|
|  |  |  | toast('没有找到指定特征值'); | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | case 10006: | 
|---|
|  |  |  | toast('当前连接已断开'); | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | case 10007: | 
|---|
|  |  |  | toast('当前特征值不支持此操作'); | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | case 10008: | 
|---|
|  |  |  | toast('其余所有系统上报的异常'); | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | case 10009: | 
|---|
|  |  |  | toast('Android 系统特有,系统版本低于 4.3 不支持 BLE'); | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | default: | 
|---|
|  |  |  | toast(errMsg); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 弹出框封装 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | function toast(content, showCancel = false) { | 
|---|
|  |  |  | uni.showModal({ | 
|---|
|  |  |  | title: '提示', | 
|---|
|  |  |  | content, | 
|---|
|  |  |  | showCancel | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | </script> | 
|---|
|  |  |  |  | 
|---|
|  |  |  | <style> | 
|---|
|  |  |  |  | 
|---|
|  |  |  | .uni-title { | 
|---|
|  |  |  | /* width: 100%; */ | 
|---|
|  |  |  | /* height: 80rpx; */ | 
|---|
|  |  |  | text-align: center; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | .uni-mask { | 
|---|
|  |  |  | position: fixed; | 
|---|
|  |  |  | top: 0; | 
|---|
|  |  |  | left: 0; | 
|---|
|  |  |  | bottom: 0; | 
|---|
|  |  |  | display: flex; | 
|---|
|  |  |  | align-items: center; | 
|---|
|  |  |  | width: 100%; | 
|---|
|  |  |  | background: rgba(0, 0, 0, 0.6); | 
|---|
|  |  |  | padding: 0 30rpx; | 
|---|
|  |  |  | box-sizing: border-box; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | .uni-scroll_box { | 
|---|
|  |  |  | height: 70%; | 
|---|
|  |  |  | background: #fff; | 
|---|
|  |  |  | border-radius: 20rpx; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | .uni-list-box { | 
|---|
|  |  |  | margin: 0 20rpx; | 
|---|
|  |  |  | padding: 15rpx 0; | 
|---|
|  |  |  | border-bottom: 1px #f5f5f5 solid; | 
|---|
|  |  |  | box-sizing: border-box; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | .uni-list:last-child { | 
|---|
|  |  |  | border: none; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | .uni-list_name { | 
|---|
|  |  |  | font-size: 30rpx; | 
|---|
|  |  |  | color: #333; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | .uni-list_item { | 
|---|
|  |  |  | font-size: 24rpx; | 
|---|
|  |  |  | color: #555; | 
|---|
|  |  |  | line-height: 1.5; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | .uni-success_box { | 
|---|
|  |  |  | position: absolute; | 
|---|
|  |  |  | left: 0; | 
|---|
|  |  |  | bottom: 0; | 
|---|
|  |  |  | min-height: 100rpx; | 
|---|
|  |  |  | width: 100%; | 
|---|
|  |  |  | background: #fff; | 
|---|
|  |  |  | box-sizing: border-box; | 
|---|
|  |  |  | border-top: 1px #eee solid; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | .uni-success_sub { | 
|---|
|  |  |  | /* width: 100%%; */ | 
|---|
|  |  |  | height: 100rpx; | 
|---|
|  |  |  | display: flex; | 
|---|
|  |  |  | justify-content: space-between; | 
|---|
|  |  |  | align-items: center; | 
|---|
|  |  |  | padding: 0 30rpx; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | .uni-close_button { | 
|---|
|  |  |  | padding: 0 20rpx; | 
|---|
|  |  |  | height: 60rpx; | 
|---|
|  |  |  | line-height: 60rpx; | 
|---|
|  |  |  | background: #ce3c39; | 
|---|
|  |  |  | color: #ffffff; | 
|---|
|  |  |  | border-radius: 10rpx; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | .uni-success_content { | 
|---|
|  |  |  | height: 600rpx; | 
|---|
|  |  |  | margin: 30rpx; | 
|---|
|  |  |  | margin-top: 0; | 
|---|
|  |  |  | border: 1px #eee solid; | 
|---|
|  |  |  | padding: 30rpx; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | .uni-content_list { | 
|---|
|  |  |  | padding-bottom: 10rpx; | 
|---|
|  |  |  | border-bottom: 1px #f5f5f5 solid; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | .uni-tips { | 
|---|
|  |  |  | text-align: center; | 
|---|
|  |  |  | font-size: 24rpx; | 
|---|
|  |  |  | color: #666; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | <style lang="scss"> | 
|---|
|  |  |  | .bluetoothItem { | 
|---|
|  |  |  | width: 100%; | 
|---|
|  |  |  | height: 100%; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | .bluetoothList { | 
|---|
|  |  |  | display: flex; | 
|---|
|  |  |  | flex-direction: column; | 
|---|
|  |  |  | padding: 20rpx; | 
|---|
|  |  |  | border-bottom: 1rpx solid #BEBEBE; | 
|---|
|  |  |  | font-size: 18rpx; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | </style> | 
|---|