Browse Source

1-13更新

lxh 1 month ago
parent
commit
d19b434a9e
5 changed files with 455 additions and 412 deletions
  1. 241 248
      common/util/hexiii-nfc.js
  2. 4 1
      manifest.json
  3. 184 150
      pages/gasreport/components/gasFill.vue
  4. 20 12
      pages/gasreport/components/gasRecordCard.vue
  5. 6 1
      store/index.js

+ 241 - 248
common/util/hexiii-nfc.js

@@ -1,262 +1,255 @@
-var NfcAdapter;
-var NdefRecord;
-var NdefMessage;
-var _getCardNo;
- 
+import store from '@/store/index.js'
+
+// 包路径
+const package_NdefRecord = 'android.nfc.NdefRecord';
+const package_NdefMessage = 'android.nfc.NdefMessage';
+const package_TECH_DISCOVERED = 'android.nfc.action.TECH_DISCOVERED';
+const package_Intent = 'android.content.Intent';
+const package_Activity = 'android.app.Activity';
+const package_PendingIntent = 'android.app.PendingIntent';
+const package_IntentFilter = 'android.content.IntentFilter';
+const package_NfcAdapter = 'android.nfc.NfcAdapter';
+const package_Ndef = 'android.nfc.tech.Ndef';
+const package_NdefFormatable = 'android.nfc.tech.NdefFormatable';
+const package_Parcelable = 'android.os.Parcelable';
+const package_String = 'java.lang.String';
+
+let NfcAdapter;
+let NdefRecord;
+let NdefMessage;
+let readyWriteData = false;//开启写
+let readyRead = false;//开启读
+let noNFC = false;
+let techListsArray = [
+    ['android.nfc.tech.IsoDep'],
+    ['android.nfc.tech.NfcA'],
+    ['android.nfc.tech.NfcB'],
+    ['android.nfc.tech.NfcF'],
+    ['android.nfc.tech.Nfcf'],
+    ['android.nfc.tech.NfcV'],
+    ['android.nfc.tech.NdefFormatable'],
+    ['android.nfc.tech.MifareClassic'],
+    ['android.nfc.tech.MifareClassi'],
+    ['android.nfc.tech.MifareUltralight']
+];
+// 要写入的数据
+let text = '{id:666,name:aaa,stie:ffff.com}';
+let readResult = '';
+
 export default {
-    initNFC() {
-        if (uni.getSystemInfoSync().platform == 'android') {
-            listenNFCStatus()
+    listenNFCStatus: function () {
+        console.log("---------监听NFC状态--------------")
+        let that = this;
+        try {
+            let main = plus.android.runtimeMainActivity();
+            let Intent = plus.android.importClass('android.content.Intent');
+            let Activity = plus.android.importClass('android.app.Activity');
+            let PendingIntent = plus.android.importClass('android.app.PendingIntent');
+            let IntentFilter = plus.android.importClass('android.content.IntentFilter');
+            NfcAdapter = plus.android.importClass('android.nfc.NfcAdapter');
+            let nfcAdapter = NfcAdapter.getDefaultAdapter(main);
+
+            if (nfcAdapter == null) {
+                uni.showToast({
+                    title: '设备不支持NFC!',
+                    icon: 'none'
+                })
+                noNFC = true;
+                return;
+            }
+
+            if (!nfcAdapter.isEnabled()) {
+                uni.showToast({
+                    title: '请在系统设置中先启用NFC功能!',
+                    icon: 'none'
+                });
+                noNFC = true;
+                return;
+            } else {
+                noNFC = false;
+            }
+
+            let intent = new Intent(main, main.getClass());
+            intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
+            let pendingIntent = PendingIntent.getActivity(main, 0, intent, 0);
+            let ndef = new IntentFilter("android.nfc.action.TECH_DISCOVERED");
+            ndef.addDataType("*/*");
+            let intentFiltersArray = [ndef];
+
+            plus.globalEvent.addEventListener('newintent', function () {
+                console.log('newintent running');
+                // 轮询调用 NFC
+                setTimeout(() => that.nfcRuning(), 1000);
+            });
+            plus.globalEvent.addEventListener('pause', function (e) {
+                console.log('pause running');
+                if (nfcAdapter) {
+                    //关闭前台调度系统
+                    //恢复默认状态
+                    nfcAdapter.disableForegroundDispatch(main);
+                }
+            });
+            plus.globalEvent.addEventListener('resume', function (e) {
+                console.log('resume running');
+                if (nfcAdapter) {
+                    //开启前台调度系统
+                    // 优于所有其他NFC
+                    nfcAdapter.enableForegroundDispatch(main, pendingIntent, intentFiltersArray, techListsArray);
+                }
+            });
+            nfcAdapter.enableForegroundDispatch(main, pendingIntent, intentFiltersArray, techListsArray);
+        } catch (e) {
+            console.error(e);
         }
     },
-    readNFC(callback) {
-        if (uni.getSystemInfoSync().platform == 'android') {
-            readData(callback);
+    nfcRuning: function () {
+        console.log("--------------NFC 运行---------------")
+        NdefRecord = plus.android.importClass("android.nfc.NdefRecord");
+        NdefMessage = plus.android.importClass("android.nfc.NdefMessage");
+        let main = plus.android.runtimeMainActivity();
+        let intent = main.getIntent();
+        let that = this;
+        console.log("action type:" + intent.getAction());
+        console.log(package_TECH_DISCOVERED == intent.getAction());
+        if (package_TECH_DISCOVERED == intent.getAction()) {
+            if (readyWriteData) {
+                console.log("----------我在写1-------------")
+                that.write(intent);
+                readyWriteData = false;
+            } else if (readyRead) {
+                console.log("----------我在读1-------------")
+                that.read(intent);
+                readyRead = false;
+            }
         }
     },
-    closeNFC() {
-        if (uni.getSystemInfoSync().platform == 'android') {
-            closeReadAndWrite();
+    write(intent) {  //写代码
+        console.log("----------我在写-------------")
+        let that = this
+        try {
+            toast('请勿移开标签 正在写入...');
+            console.log("text=" + text);
+            let textBytes = plus.android.invoke(text, "getBytes");
+            // image/jpeg text/plain  
+            let textRecord = new NdefRecord(NdefRecord.TNF_MIME_MEDIA,
+                plus.android.invoke("text/plain", "getBytes"),
+                plus.android.invoke("", "getBytes"), textBytes);
+            let message = new NdefMessage([textRecord]);
+            let Ndef = plus.android.importClass('android.nfc.tech.Ndef');
+            let NdefFormatable = plus.android.importClass('android.nfc.tech.NdefFormatable');
+            let tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
+            console.log(tag.toString(), '90909')
+            let ndef = Ndef.get(tag);
+            if (ndef != null) {
+                // 待写入的数据长度
+                let size = message.toByteArray().length;
+                ndef.connect();
+                if (!ndef.isWritable()) {
+                    toast('tag不允许写入!');
+                    return;
+                }
+                if (ndef.getMaxSize() < size) {
+                    toast('文件大小超出容量!');
+                    return;
+                }
+                ndef.writeNdefMessage(message);  //写入数据
+                toast('写入数据成功!');
+                return;
+            } else {
+                let format = NdefFormatable.get(tag);
+                console.log(format,'format-----------------------')
+                if (format != null) {
+                    try {
+                        format.connect();
+                        format.format(message);
+                        toast('格式化tag并且写入message');
+                        return;
+                    } catch (e) {
+                        toast('格式化tag失败.');
+                        return;
+                    }
+                } else {
+                    toast('Tag不支持NDEF');
+                    return;
+                }
+            }
+        } catch (e) {
+            toast('写入失败');
+            console.log("error=" + e);
         }
-    }
-}
- 
-function listenNFCStatus() {
-    try {
-        var main = plus.android.runtimeMainActivity();
-        var Intent = plus.android.importClass('android.content.Intent');
-        var Activity = plus.android.importClass('android.app.Activity');
-        var PendingIntent = plus.android.importClass('android.app.PendingIntent');
-        var IntentFilter = plus.android.importClass('android.content.IntentFilter');
-        NfcAdapter = plus.android.importClass('android.nfc.NfcAdapter');
-        var nfcAdapter = NfcAdapter.getDefaultAdapter(main);
- 
-        if (nfcAdapter == null) {
-            uni.showToast({
-                title: '设备不支持NFC!',
-                icon: 'none'
-            })
-            return;
+
+    },
+   
+   
+    read(intent) { // 读代码
+        console.log("----------我在读read-------------")
+        toast('请勿移开标签正在读取数据');
+        let that = this;
+        // NFC id
+        let bytesId = intent.getByteArrayExtra(NfcAdapter.EXTRA_ID);
+        let nfc_id = that.byteArrayToHexString(bytesId);
+        console.log('nfc_id:', nfc_id);
+        let Parcelable = plus.android.importClass("android.os.Parcelable");
+        let rawmsgs = intent.getParcelableArrayExtra("android.nfc.extra.NDEF_MESSAGES");
+        //let rawmsgs = intent.getParcelableArrayExtra();
+
+        console.log("数据" + rawmsgs)
+        if (rawmsgs != null && rawmsgs.length > 0) {
+            let records = rawmsgs[0].getRecords();
+            let result = records[0].getPayload();
+            let data = plus.android.newObject("java.lang.String", result);
+            // 写入vuex
+            store.commit('setNfcReadTxt', data);
+            toast('NFC 数据:' + data);
+            readResult = data;
+        } else {
+            toast('没有读取到数据');
         }
-         
-        if (!nfcAdapter.isEnabled()) {
-            uni.showToast({
-                title: '请在系统设置中先启用NFC功能!',
-                icon: 'none'
-            });
-            return;
+    },
+    byteArrayToHexString: function (inarray) { // 将字节数组转换为字符串  
+        let i, j, inn;
+        let hex = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F"];
+        let out = "";
+
+        for (j = 0; j < inarray.length; ++j) {
+            inn = inarray[j] & 0xff;
+            i = (inn >>> 4) & 0x0f;
+            out += hex[i];
+            i = inn & 0x0f;
+            out += hex[i];
         }
- 
-        var intent = new Intent(main, main.getClass());
-        intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
-        var pendingIntent = PendingIntent.getActivity(main, 0, intent, 0);
-        var ndef = new IntentFilter("android.nfc.action.TECH_DISCOVERED");
-        ndef.addDataType("*/*");
-        var intentFiltersArray = [ndef];
-        var techListsArray = [
-            ["android.nfc.tech.IsoDep"],
-            ["android.nfc.tech.NfcA"],
-            ["android.nfc.tech.NfcB"],
-            ["android.nfc.tech.NfcF"],
-            ["android.nfc.tech.Nfcf"],
-            ["android.nfc.tech.NfcV"],
-            ["android.nfc.tech.NdefFormatable"],
-            ["android.nfc.tech.MifareClassic"],
-            ["android.nfc.tech.MifareUltralight"]
-        ];
-        plus.globalEvent.addEventListener("newintent",
-            function() {
-                setTimeout(function(){
-					handle_nfc_data1()
-				}, 1000);
-            }, false);
-        plus.globalEvent.addEventListener("pause", function(e) {
-            if (nfcAdapter) {
-                nfcAdapter.disableForegroundDispatch(main);
-            }
-        }, false);
-        plus.globalEvent.addEventListener("resume", function(e) {
-            if (nfcAdapter) {
-                //console.log('resume'); 
-                nfcAdapter.enableForegroundDispatch(main, pendingIntent, intentFiltersArray, techListsArray);
-            }
-        }, false);
-        nfcAdapter.enableForegroundDispatch(main, pendingIntent, intentFiltersArray, techListsArray);
-    } catch (e) {
-        console.error(e);
-    }
-}
- 
-function handle_nfc_data1() {
-    NdefRecord = plus.android.importClass("android.nfc.NdefRecord");
-    NdefMessage = plus.android.importClass("android.nfc.NdefMessage");
-    var main = plus.android.runtimeMainActivity();
-    var intent = main.getIntent();
-    //console.log("action type:" + intent.getAction()); 
-    if ("android.nfc.action.TECH_DISCOVERED" == intent.getAction()) {
-        if (readyWriteData) {
-            __write(intent);
-            readyWriteData = false;
-        } else if (readyRead) {
-            __read(intent);
-            readyRead = false;
+        return out;
+    },
+    writeData: function () { // 更改写状态
+        if (noNFC) {
+            toast('请检查设备是否支持并开启 NFC 功能!');
+            return;
         }
-    }
-}
- 
-function showToast(msg) {
-    plus.nativeUI.toast(msg);
-}
- 
-function __write(intent) {
- try {
-     waiting.setTitle('请勿移开标签\n正在写入...');
-     var text = document.getElementById('text').value;
-     console.log("text=" + text);
-     var textBytes = plus.android.invoke(text, "getBytes");
-     var textRecord = new NdefRecord(NdefRecord.TNF_MIME_MEDIA,
-         plus.android.invoke("text/plain", "getBytes"), plus.android.invoke("", "getBytes"), textBytes);
-     var message = new NdefMessage([textRecord]);
-     var Ndef = plus.android.importClass('android.nfc.tech.Ndef');
-     var NdefFormatable = plus.android.importClass('android.nfc.tech.NdefFormatable');
-     var tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
-     var ndef = Ndef.get(tag);
-     if (ndef != null) {
-         var size = message.toByteArray().length;
-         console.log("size=" + size);
-         ndef.connect();
-         if (!ndef.isWritable()) {
-             showToast("tag不允许写入");
-             waiting.close();
-             return;
-         }
-         if (ndef.getMaxSize() < size) {
-             showToast("文件大小超出容量");
-             waiting.close();
-             return;
-         }
- 
-         ndef.writeNdefMessage(message);
-         waiting.close();
-         showToast("写入数据成功.");
-         return;
-     } else {
-         var format = NdefFormatable.get(tag);
-         if (format != null) {
-             try {
-                 format.connect();
-                 format.format(message);
-                 showToast("格式化tag并且写入message");
-                 waiting.close();
-                 return;
-             } catch (e) {
-                 showToast("格式化tag失败.");
-                 waiting.close();
-                 return;
-             }
-         } else {
-             showToast("Tag不支持NDEF");
-             waiting.close();
-             return;
-         }
-     }
- } catch (e) {
-     console.log("error=" + e);
-     waiting.close();
-     alert('写入失败');
- }
- 
-}
- 
-function __read(intent) {
-    try {
-        var content = "";
-        waiting.setTitle('请勿移开标签\n正在读取数据...');
-        var tag = plus.android.importClass("android.nfc.Tag");
-        tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
-        var bytesId = intent.getByteArrayExtra(NfcAdapter.EXTRA_ID);
-        waiting.close();
-        var tagid = bytesToHexString(tag.getId())
-        if (typeof _getCardNo === 'function') {
-            _getCardNo(tagid);
+        // 轮询条件
+        readyWriteData = true;
+        toast('请将NFC标签靠近!');
+    },
+    readData: function () { // 更改读状态
+        if (noNFC) {
+            toast('请检查设备是否支持并开启 NFC 功能!');
+            return;
         }
-    } catch (e) {
-        uni.showToast({
-            title: e,
-            icon: 'none'
-        });
-    }
-}
- 
-function bytesToHexString(inarray) {
-    var i, j, x;
-    var hex = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A",
-        "B", "C", "D", "E", "F"
-    ];
-    var out = "";
-    for (j = 0; j < inarray.length; ++j) {
-        x = parseInt(inarray[j]) & 0xff;
-        i = (x >> 4) & 0x0f;
-        out += hex[i];
-        i = x & 0x0f;
-        out += hex[i];
-    }
-    return out;
-}
- 
-function reverseTwo(str) {
- 
-    var str1 = "";
-    for (var i = 1; i <= str.length; i++) {
-        str1 += str[i - 1];
-        if (i % 2 == 0) {
-            if (i == str.length) {
-                break;
-            }
-            str1 += ":";
+        // 轮询条件
+        readyRead = true;
+        toast('请将NFC标签靠近!');
+    },
+   
+    setTxt: function (txt) {
+        if (noNFC) {
+            toast('请检查设备是否支持并开启 NFC 功能!');
+            return;
         }
+        text = txt;
     }
-    var str2 = "";
-    for (var i = str1.split(":").length - 1; i >= 0; i--) {
-        str2 += str1.split(":")[i];
-    }
-    return str2;
-}
- 
-if (uni.getSystemInfoSync().platform == 'android') {
-    //plus.globalEvent.addEventListener('plusready', listenNFCStatus, false);
 }
- 
-var waiting;
-var readyWriteData = false;
-var readyRead = false;
- 
-function writeData() {
-    var textEle = plus.globalEvent.getElementById('text');
-    if (!textEle.value) {
-        uni.showToast({
-            title: '请输入要写入的内容!',
-            icon: 'none'
-        });
-        return;
-    }
-    readyWriteData = true;
-    waiting = plus.nativeUI.showWaiting("请将NFC标签靠近!");
-}
- 
-function readData(getCardNo) {
-    readyRead = true;
-    _getCardNo = getCardNo
-    waiting = plus.nativeUI.showWaiting("请将NFC标签靠近!", {
-        modal: false
-    });
-}
- 
-function closeReadAndWrite() {
-    readyWriteData = false;
-    readyRead = false;
- 
-    if (waiting) {
-        waiting.close();
-    }
+function toast(content) {
+    uni.showToast({
+        title: content,
+        icon: 'none'
+    })
 }

+ 4 - 1
manifest.json

@@ -55,7 +55,10 @@
                     "<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>",
                     "<uses-permission android:name=\"android.permission.WRITE_CONTACTS\"/>",
                     "<uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\"/>",
-                    "<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>"
+                    "<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>",
+                    "<uses-permission android:name=\"android.permission.NFC\"/>",
+                    "<uses-sdk android:minSdkVersion=\"10\"/>",
+                    "<uses-feature android:name=\"android.hardware.nfc\" android:required=\"true\" />"
                 ]
             },
             "ios" : {

+ 184 - 150
pages/gasreport/components/gasFill.vue

@@ -1,180 +1,181 @@
 <template>
-    <view class="gas-fill" >
-            <!-- 瓦斯上报列表 -->
-            <view v-if="!isShowAdd">
-                <view class="top-gas-list">
-                    <view class="search-box" @click="getChangeTimeTb">
-                        <text class="dialog-label">填报时间:</text>
-                        <u--input v-model="tbTime" placeholder="请选择填报时间" inputAlign="center"
-                            suffixIcon="arrow-right"></u--input>
-                        <u-datetime-picker :show="showCalendarTb" v-model="timeRan" mode="date" closeOnClickOverlay
-                            @confirm="confirmTb" @cancel="showCalendarTb = false" @change="changeTb"
-                            @close="showCalendarTb = false"></u-datetime-picker>
-                    </view>
-                    <u-button v-if="hasPermission('gasReport:add')" type="primary" size="small" style="margin: 2px 0px;"  @click="getAdd">新增</u-button>
+    <view class="gas-fill">
+        <!-- 瓦斯上报列表 -->
+        <view v-if="!isShowAdd">
+            <view class="top-gas-list">
+                <view class="search-box" @click="getChangeTimeTb">
+                    <text class="dialog-label">填报时间:</text>
+                    <u--input v-model="tbTime" placeholder="请选择填报时间" inputAlign="center"
+                        suffixIcon="arrow-right"></u--input>
+                    <u-datetime-picker :show="showCalendarTb" v-model="timeRan" mode="date" closeOnClickOverlay
+                        @confirm="confirmTb" @cancel="showCalendarTb = false" @change="changeTb"
+                        @close="showCalendarTb = false"></u-datetime-picker>
+                </view>
+                <u-button v-if="hasPermission('gasReport:add')" type="primary" size="small" style="margin: 2px 0px;"
+                    @click="getAdd">新增</u-button>
+            </view>
+            <view class="bot-gas-list">
+                <view class="top-title">
+                    <view style="font-weight: bold;">瓦斯填报列表</view>
                 </view>
-                <view class="bot-gas-list">
-                    <view class="top-title">
-                        <view style="font-weight: bold;">瓦斯填报列表</view>
+                <view class="top-content" v-for="(item, index) in gasList" :key="index">
+                    <view class="content-title-gas">
+                        <text>
+                            {{ item.strInstallPos || '--' }}
+                        </text>
                     </view>
-                    <view class="top-content" v-for="(item, index) in gasList" :key="index">
-                        <view class="content-title-gas">
-                            <text>
-                                {{ item.strInstallPos || '--' }}
-                            </text>
+                    <view class="content-item-box">
+                        <view class="content-item">
+                            <view class="item-l">
+                                <view class="item-value">{{ item.timeNight1 || '--' }}</view>
+                                <view class="item-label">夜班监测时间一</view>
+                            </view>
+                            <view class="item-c"></view>
+                            <view class="item-r">
+                                <view class="item-value">{{ item.timeNight2 || '--' }}</view>
+                                <view class="item-label">夜班监测时间二</view>
+                            </view>
                         </view>
-                        <view class="content-item-box">
-                            <view class="content-item">
-                                <view class="item-l">
-                                    <view class="item-value">{{ item.timeNight1 || '--' }}</view>
-                                    <view class="item-label">夜班监测时间一</view>
-                                </view>
-                                <view class="item-c"></view>
-                                <view class="item-r">
-                                    <view class="item-value">{{ item.timeNight2 || '--' }}</view>
-                                    <view class="item-label">夜班监测时间二</view>
-                                </view>
+                        <view class="content-item">
+                            <view class="item-l">
+                                <view class="item-value">{{ item.timeEarly1 || '--' }}</view>
+                                <view class="item-label">早班监测时间一</view>
                             </view>
-                            <view class="content-item">
-                                <view class="item-l">
-                                    <view class="item-value">{{ item.timeEarly1 || '--' }}</view>
-                                    <view class="item-label">早班监测时间一</view>
-                                </view>
-                                <view class="item-c"></view>
-                                <view class="item-r">
-                                    <view class="item-value">{{ item.timeEarly2 || '--' }}</view>
-                                    <view class="item-label">早班监测时间二</view>
-                                </view>
+                            <view class="item-c"></view>
+                            <view class="item-r">
+                                <view class="item-value">{{ item.timeEarly2 || '--' }}</view>
+                                <view class="item-label">早班监测时间二</view>
                             </view>
-                            <view class="content-item">
-                                <view class="item-l">
-                                    <view class="item-value">{{ item.timeNoon1 || '--' }}</view>
-                                    <view class="item-label">中班监测时间一</view>
-                                </view>
-                                <view class="item-c"></view>
-                                <view class="item-r">
-                                    <view class="item-value">{{ item.timeNoon2 || '--' }}</view>
-                                    <view class="item-label">中班监测时间二</view>
-                                </view>
+                        </view>
+                        <view class="content-item">
+                            <view class="item-l">
+                                <view class="item-value">{{ item.timeNoon1 || '--' }}</view>
+                                <view class="item-label">中班监测时间一</view>
+                            </view>
+                            <view class="item-c"></view>
+                            <view class="item-r">
+                                <view class="item-value">{{ item.timeNoon2 || '--' }}</view>
+                                <view class="item-label">中班监测时间二</view>
                             </view>
-
                         </view>
 
                     </view>
+
                 </view>
+            </view>
 
+        </view>
+
+        <!-- 新增弹窗 -->
+        <view v-if="isShowAdd">
+            <view class="top-dialog-area">
+                <view class="dialog-item">
+                    <text class="dialog-label">班次:</text>
+                    <uni-data-select placeholder="请选择班次" align="center" :clear="true" v-model="formState.bc"
+                        :localdata="rangeBc" @change="changeBc"></uni-data-select>
+                </view>
+                <view class="dialog-item">
+                    <text class="dialog-label">检测次数:</text>
+                    <uni-data-select placeholder="请选择检测次数" align="center" :clear="true" v-model="formState.count"
+                        :localdata="rangeCount" @change="changeCount"></uni-data-select>
+                </view>
+                <view class="dialog-item" v-if="!nfcShow">
+                    <text class="dialog-label">煤层工作面:</text>
+                    <uni-data-select placeholder="请选择煤层工作面" align="center" :clear="true" v-model="formState.mcgzm"
+                        :localdata="rangeMcgzm" @change="changeMc"></uni-data-select>
+                </view>
+                <view class="dialog-item">
+                    <text class="dialog-label">检测地点:</text>
+                    <uni-data-select v-if="!nfcShow" placeholder="请选择检测地点" align="center" :clear="true"
+                        v-model="formState.jcdd" :localdata="rangeJcdd" @change="changeJc"></uni-data-select>
+                    <u--input v-else v-model="formState.jcdd" disabled inputAlign="center"></u--input>
+                </view>
+                <view class="dialog-item" @click="getChangeTime">
+                    <text class="dialog-label">检测时间:</text>
+                    <u--input v-model="formState.time" placeholder="请选择检测时间" inputAlign="center"
+                        suffixIcon="arrow-right"></u--input>
+                    <u-datetime-picker :show="showCalendar" v-model="timeRan" mode="datetime" closeOnClickOverlay
+                        @confirm="showCalendar = false" @cancel="showCalendar = false" @change="change"
+                        @close="showCalendar = false"></u-datetime-picker>
+                </view>
+                <view class="dialog-item">
+                    <text class="dialog-label">填报日期:</text>
+                    <u--input inputAlign="center" v-model="formState.tbrq" placeholder="请选择填报日期"></u--input>
+                </view>
+                <view class="dialog-item">
+                    <text class="dialog-label">瓦斯检查工:</text>
+                    <u--input inputAlign="center" disabled v-model="formState.jcy" placeholder="请输入"></u--input>
+                </view>
             </view>
+            <view>
+                <view class="center-dialog-area">
+                    <div class="dialog-title">气体检测数据</div>
 
-            <!-- 新增弹窗 -->
-            <view v-if="isShowAdd">
-                <view class="top-dialog-area">
                     <view class="dialog-item">
-                        <text class="dialog-label">班次:</text>
-                        <uni-data-select placeholder="请选择班次" align="center" :clear="true" v-model="formState.bc"
-                            :localdata="rangeBc" @change="changeBc"></uni-data-select>
+                        <text class="dialog-label">CH₄(%):</text>
+                        <u--input inputAlign="center" :disabled="isDisabled" v-model="formState.ch4"
+                            :placeholder="isRule2 ? '请输入' : '数据有误'" type="number" @blur="getBlurCH4"
+                            @input="changeInput($event, 'ch4')" clearable
+                            :placeholderStyle="isRule2 ? 'color:#c0c4cc' : 'color:#ff0000'"></u--input>
                     </view>
                     <view class="dialog-item">
-                        <text class="dialog-label">检测次数:</text>
-                        <uni-data-select placeholder="请选择检测次数" align="center" :clear="true" v-model="formState.count"
-                            :localdata="rangeCount" @change="changeCount"></uni-data-select>
+                        <text class="dialog-label">CO₂(%):</text>
+                        <u--input inputAlign="center" :disabled="isDisabled" v-model="formState.co2"
+                            :placeholder="isRule ? '请输入' : '数据有误'" type="number" @blur="getBlurCO2"
+                            @input="changeInput($event, 'co2')" clearable
+                            :placeholderStyle="isRule ? 'color:#c0c4cc' : 'color:#ff0000'"></u--input>
                     </view>
                     <view class="dialog-item">
-                        <text class="dialog-label">煤层工作面:</text>
-                        <uni-data-select placeholder="请选择煤层工作面" align="center" :clear="true" v-model="formState.mcgzm"
-                            :localdata="rangeMcgzm" @change="changeMc"></uni-data-select>
+                        <text class="dialog-label">CO(ppm):</text>
+                        <u--input inputAlign="center" :disabled="isDisabled" v-model="formState.co"
+                            :placeholder="isRule14 ? '请输入' : '数据有误'" clearable
+                            :placeholderStyle="isRule14 ? 'color:#c0c4cc' : 'color:#ff0000'" type="number"
+                            @blur="getBlurCO" @input="changeInput($event, 'co')"></u--input>
                     </view>
                     <view class="dialog-item">
-                        <text class="dialog-label">检测地点:</text>
-                        <uni-data-select placeholder="请选择检测地点" align="center" :clear="true" v-model="formState.jcdd"
-                            :localdata="rangeJcdd" @change="changeJc"></uni-data-select>
+                        <text class="dialog-label">O₂(%):</text>
+                        <u--input inputAlign="center" :disabled="isDisabled" clearable type="number"
+                            v-model="formState.o2" placeholder="请输入" @input="changeInput($event, 'o2')"></u--input>
                     </view>
-                    <view class="dialog-item" @click="getChangeTime">
-                        <text class="dialog-label">检测时间:</text>
-                        <u--input v-model="formState.time" placeholder="请选择检测时间" inputAlign="center"
-                            suffixIcon="arrow-right"></u--input>
-                        <u-datetime-picker :show="showCalendar" v-model="timeRan" mode="datetime" closeOnClickOverlay
-                            @confirm="showCalendar = false" @cancel="showCalendar = false" @change="change"
-                            @close="showCalendar = false"></u-datetime-picker>
+                    <view class="dialog-item">
+                        <text class="dialog-label">T(℃):</text>
+                        <u--input inputAlign="center" :disabled="isDisabled" clearable type="number"
+                            @input="changeInput($event, 'temp')" v-model="formState.temp" placeholder="请输入"></u--input>
                     </view>
+                </view>
+                <view class="bottom-dialog-area">
+                    <div class="dialog-title">三对照数据</div>
                     <view class="dialog-item">
-                        <text class="dialog-label">填报日期:</text>
-                        <u--input inputAlign="center" v-model="formState.tbrq" placeholder="请选择填报日期"></u--input>
+                        <text class="dialog-label">甲烷传感器:</text>
+                        <!-- <u--input inputAlign="center" :disabled="isDisabled" type="number" v-model="formState.jw"
+                                placeholder="请输入"></u--input> -->
+                        <u--input inputAlign="center" :disabled="isDisabled" type="number" v-model="formState.ch4"
+                            placeholder="请输入" clearable @input="changeInput($event, 'ch4')"></u--input>
                     </view>
                     <view class="dialog-item">
-                        <text class="dialog-label">瓦斯检查工:</text>
-                        <u--input inputAlign="center" disabled v-model="formState.jcy" placeholder="请输入"></u--input>
+                        <text class="dialog-label">光瓦测量数据:</text>
+                        <u--input inputAlign="center" :disabled="isDisabled" v-model="formState.gw"
+                            :placeholder="isRule1 ? '请输入' : '数据有误'" type="number" @blur="getBlur" clearable
+                            @input="changeInput($event, 'gw')"
+                            :placeholderStyle="isRule1 ? 'color:#c0c4cc' : 'color:#ff0000'"></u--input>
                     </view>
-                </view>
-                <view>
-                    <view class="center-dialog-area">
-                        <div class="dialog-title">气体检测数据</div>
-
-                        <view class="dialog-item">
-                            <text class="dialog-label">CH₄(%):</text>
-                            <u--input inputAlign="center" :disabled="isDisabled" v-model="formState.ch4"
-                                :placeholder="isRule2 ? '请输入' : '数据有误'" type="number" @blur="getBlurCH4"
-                                @input="changeInput($event, 'ch4')" clearable
-                                :placeholderStyle="isRule2 ? 'color:#c0c4cc' : 'color:#ff0000'"></u--input>
-                        </view>
-                        <view class="dialog-item">
-                            <text class="dialog-label">CO₂(%):</text>
-                            <u--input inputAlign="center" :disabled="isDisabled" v-model="formState.co2"
-                                :placeholder="isRule ? '请输入' : '数据有误'" type="number" @blur="getBlurCO2"
-                                @input="changeInput($event, 'co2')" clearable
-                                :placeholderStyle="isRule ? 'color:#c0c4cc' : 'color:#ff0000'"></u--input>
-                        </view>
-                        <view class="dialog-item">
-                            <text class="dialog-label">CO(ppm):</text>
-                            <u--input inputAlign="center" :disabled="isDisabled" v-model="formState.co"
-                                :placeholder="isRule14 ? '请输入' : '数据有误'" clearable
-                                :placeholderStyle="isRule14 ? 'color:#c0c4cc' : 'color:#ff0000'" type="number"
-                                @blur="getBlurCO" @input="changeInput($event, 'co')"></u--input>
-                        </view>
-                        <view class="dialog-item">
-                            <text class="dialog-label">O₂(%):</text>
-                            <u--input inputAlign="center" :disabled="isDisabled" clearable type="number"
-                                v-model="formState.o2" placeholder="请输入" @input="changeInput($event, 'o2')"></u--input>
-                        </view>
-                        <view class="dialog-item">
-                            <text class="dialog-label">T(℃):</text>
-                            <u--input inputAlign="center" :disabled="isDisabled" clearable type="number"
-                                @input="changeInput($event, 'temp')" v-model="formState.temp"
-                                placeholder="请输入"></u--input>
-                        </view>
+                    <view class="dialog-item">
+                        <text class="dialog-label">便携仪测量数据:</text>
+                        <u--input inputAlign="center" :disabled="isDisabled"
+                            :placeholderStyle="isRule3 ? 'color:#c0c4cc' : 'color:#ff0000'"
+                            :placeholder="isRule3 ? '请输入' : '数据有误'" type="number" v-model="formState.bxy" clearable
+                            @blur="getBlurBxy" @input="changeInput($event, 'bxy')"></u--input>
                     </view>
-                    <view class="bottom-dialog-area">
-                        <div class="dialog-title">三对照数据</div>
-                        <view class="dialog-item">
-                            <text class="dialog-label">甲烷传感器:</text>
-                            <!-- <u--input inputAlign="center" :disabled="isDisabled" type="number" v-model="formState.jw"
-                                placeholder="请输入"></u--input> -->
-                            <u--input inputAlign="center" :disabled="isDisabled" type="number" v-model="formState.ch4"
-                                placeholder="请输入" clearable @input="changeInput($event, 'ch4')"></u--input>
-                        </view>
-                        <view class="dialog-item">
-                            <text class="dialog-label">光瓦测量数据:</text>
-                            <u--input inputAlign="center" :disabled="isDisabled" v-model="formState.gw"
-                                :placeholder="isRule1 ? '请输入' : '数据有误'" type="number" @blur="getBlur" clearable
-                                @input="changeInput($event, 'gw')"
-                                :placeholderStyle="isRule1 ? 'color:#c0c4cc' : 'color:#ff0000'"></u--input>
-                        </view>
-                        <view class="dialog-item">
-                            <text class="dialog-label">便携仪测量数据:</text>
-                            <u--input inputAlign="center" :disabled="isDisabled"
-                                :placeholderStyle="isRule3 ? 'color:#c0c4cc' : 'color:#ff0000'"
-                                :placeholder="isRule3 ? '请输入' : '数据有误'" type="number" v-model="formState.bxy" clearable
-                                @blur="getBlurBxy" @input="changeInput($event, 'bxy')"></u--input>
-                        </view>
 
-                    </view>
                 </view>
+            </view>
 
-                <view class="dialog-btn">
-                    <u-button type="success" size="small" v-if="!isDisabled" @click="getConfirm">保存</u-button>
-                    <u-button type="primary" size="small" @click="getCancel">取消</u-button>
-                </view>
+            <view class="dialog-btn">
+                <u-button type="success" size="small" v-if="!isDisabled" @click="getConfirm">保存</u-button>
+                <u-button type="primary" size="small" @click="getCancel">取消</u-button>
             </view>
-       
+        </view>
+
 
     </view>
 </template>
@@ -182,13 +183,15 @@
 <script>
 import api from "@/api/api";
 import moment from 'moment'
+import testNfc from "@/common/util/hexiii-nfc.js"
 import { mapGetters } from "vuex";
 export default {
     name: 'gasFill',
     props: {},
-    watch: {},
+  
     data() {
         return {
+            nfcShow: true,//是否使用NFC
             isDisabled: false,
             isStatus: '',
             deviceId: '',
@@ -241,6 +244,17 @@ export default {
         username: function () {
             return uni.getStorageSync('login_user_info')['realname']
         },
+        cardIds:function(){
+            return this.$store.getters.nfcreadtxt
+        }
+    },
+    watch: {
+        cardIds:{
+            handler(newV,oldV){
+                this.getCardLists(newV)
+            },
+            immediate:true
+        }
     },
     mounted() {
         console.log(uni.getStorageSync('login_user_info'), 'ceshi00-----------')
@@ -248,9 +262,9 @@ export default {
         this.getMcList()
     },
     methods: {
-        hasPermission(param){
-            let permission= uni.getStorageSync('btnPermission')
-            return permission.filter(v=>v.action==param).length!=0 ? true : false
+        hasPermission(param) {
+            let permission = uni.getStorageSync('btnPermission')
+            return permission.filter(v => v.action == param).length != 0 ? true : false
         },
         //班次下拉选项切换
         changeBc(e) {
@@ -1486,13 +1500,33 @@ export default {
                 this.isRule14 = false
             }
         },
-
+        //根据NFC读取数据获取监测地点信息
+        getCardLists(ids) {
+            let that = this
+            new Promise((resolve, reject) => {
+                api
+                    .getCardList({ id: ids })
+                    .then((response) => {
+                        if (response.data.code == 200) {
+                            let data = response.data.result
+                            that.formState.jcdd = data.id
+                            that.deviceId = data.id
+                        }
+                    })
+            });
+        },
         //瓦斯新增
         getAdd() {
             let that = this
             that.isShowAdd = true
             that.isStatus = 'add'
             that.formState.jcy = this.username
+            if (that.nfcShow) {
+                testNfc.listenNFCStatus()
+                testNfc.readData();
+                // //根据NFC读取数据获取监测地点信息
+                // that.getCardLists(ids)
+            }
         },
         getAddSave() {
             let that = this

+ 20 - 12
pages/gasreport/components/gasRecordCard.vue

@@ -40,12 +40,24 @@ export default {
     name: 'gasRecordCard',
     data() {
         return {
-            isNfc: false,
+            isNfc: true,
             cardId: '',
             cardData: { id: '', address: '' },
         }
     },
-    computed: {},
+    computed: {
+        cardIds:function(){
+            return this.$store.getters.nfcreadtxt;
+        }
+    },
+    watch:{
+        cardIds:{
+            handler(newV,oldV){
+                console.log(newV,'newV------------------------')
+                this.getCardLists(newV)
+            },
+        }
+    },
     mounted() {
         testNfc.listenNFCStatus()
     },
@@ -86,8 +98,9 @@ export default {
                     .then((response) => {
                         if (response.data.code == 200) {
                             if (that.isNfc) {
-                                testNfc.getSettingText(that.cardId)
-                                testNfc.writeData()
+                                // 调用 js 文件里面的方法
+                                // testNfc.setTxt(that.cardId);
+                                testNfc.writeData();
                             } else {
                                 that.$refs.uToast.show({
                                     type: 'default',
@@ -109,15 +122,10 @@ export default {
         //nfc读取
         getNfcRead() {
             let that = this
-            // that.cardId = ''
             if (that.isNfc) {
-                testNfc.readData()
-                console.log(testNfc.getReadContent(), 'reading')
-                // let ids = testNfc.listenNFCStatus()
-                if (ids) {
-                    that.getCardLists(ids)
-                }
-            }else {
+                // 调用 js 文件里面的方法
+                testNfc.readData();
+            } else {
                 that.getCardLists(that.cardId)
             }
         }

+ 6 - 1
store/index.js

@@ -15,9 +15,13 @@ export default new Vuex.Store({
     welcome: '',
     avatar: '',
     dicts: '',
-    showColum: {}
+    showColum: {},
+    nfcreadtxt:'',
   },
   mutations: {
+    setNfcReadTxt(state,nfcreadtxt){
+      state.nfcreadtxt = nfcreadtxt
+  },
     SET_TOKEN: (state, token) => {
       state.token = token
     },
@@ -103,5 +107,6 @@ export default new Vuex.Store({
     avatar: state => { state.userid = uni.getStorageSync(USER_INFO).avatar; return state.user.avatar },
     userid: state => { state.userid = uni.getStorageSync(USER_INFO).id; return state.userid },
     showColum: state => { state.userid = uni.getStorageSync(USER_INFO).showColum; return state.showColum },
+    nfcreadtxt: state => state.nfcreadtxt
   }
 })