From 16c179b122eb8c69d31b0fab66c5e29b9c332b8d Mon Sep 17 00:00:00 2001
From: 15815213711 <a13118667520@163.com>
Date: 星期四, 24 四月 2025 10:17:07 +0800
Subject: [PATCH] 变更

---
 frontend/src/views/card/index.vue |  340 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 338 insertions(+), 2 deletions(-)

diff --git a/frontend/src/views/card/index.vue b/frontend/src/views/card/index.vue
index da268c0..483ed50 100644
--- a/frontend/src/views/card/index.vue
+++ b/frontend/src/views/card/index.vue
@@ -1,11 +1,347 @@
 <script setup>
+import {ipc} from '@/utils/ipcRenderer'
+import {message} from 'ant-design-vue'
+import dkqImg from '@/assets/dkq.png'
+import okImg from '@/assets/ok.png'
+import { Modal } from 'ant-design-vue';
+import {useStore} from "@/stores/icrfStore";
+import router from "@/router";
+import {createVNode, onBeforeUnmount, reactive, ref} from "vue";
+import locale from 'ant-design-vue/es/date-picker/locale/zh_CN'
+import {ExclamationCircleOutlined} from "@ant-design/icons-vue";
+const store = useStore();
+let isCard = ref(false);
+ const formRef = ref(null);
+
+ const setps = [
+   {
+     title: '瀵诲崱',
+     key: 'xk'
+   },
+   {
+     title: '濉啓鏁版嵁',
+     key: 'set'
+   },
+   {
+     title: '鍒跺崱瀹屾垚',
+     key:'ok'
+   }
+ ]
+const current = ref(0)
+
+if (!store.isLJ){
+  Modal.warning({
+    title: '绯荤粺鎻愮ず',
+    content: '璇诲啓鍣ㄨ澶囨湭杩炴帴锛岃鍏堥厤缃繛鎺ュ悗鎿嶄綔锛�',
+    okText: '绔嬪嵆鍓嶅線',
+    onOk:()=>{
+      router.push('Communication')
+    }
+  })
+}
+
+const validatorValidityTime = async (_rule,value)=>{
+  if (!formState.isValidity && !value){
+    return Promise.reject('涓嶆槸闀挎湡鍗℃椂锛岃閫夋嫨鏈夋晥鏈�')
+  }else{
+    return Promise.resolve();
+  }
+}
+const formMap ={
+  veCustomsNo:1,
+  veLicenseNo:2,
+  veLicenseNo2:4,
+  vehicleWeight:5,
+  validityTime:6,
+  beforeContId:8,
+  laterContId:9,
+}
+// const formMap = [
+//   {key :'veCustomsNo',blockNr: 8},
+//   {key :'veLicenseNo',blockNr: 9},
+//   {key :'veLicenseNo2',blockNr: 10},
+//   {key :'vehicleWeight',blockNr: 12},
+//   {key :'validityTime',blockNr: 13},
+// ]
+
+const formState = reactive({
+  veCustomsNo:'',
+  veLicenseNo:'',
+  veLicenseNo2:'',
+  vehicleWeight:'',
+  validityTime:'',
+  contId:'',
+  isValidity: true
+})
+const isRead = ref(false);
+const rules = {
+  veLicenseNo: [{
+    required: true, message: '璇疯緭鍏ヨ溅鐗屽彿', trigger: 'blur'
+  }],
+  validityTime:[
+    {validator:validatorValidityTime,trigger: 'change'}
+  ]
+}
+const isValidtyChange = () => {
+  if (formState.isValidity){
+    formState.validityTime =''
+  }
+}
+const parseStrEmpty =(str)=>{
+  if (!str || str==='undefined' || str ==='null'){
+    return ""
+  }else{
+    return str;
+  }
+}
+const key = 'installCard';
+const onSubmit = ()=>{
+  formRef.value.validate().then(()=>{
+    ipc.invoke('controller.icrf.connectRfCard').then(res=> {
+      if (res.code === 0) {
+        if (formState.sn !== res.snr){
+          Modal.confirm({
+            title: '绯荤粺鎻愮ず',
+            icon: createVNode(ExclamationCircleOutlined),
+            content:'鍗′腑閫旇鎹紝鏄惁缁х画鎿嶄綔',
+            okText:'缁х画',
+            cancelText:'鍙栨秷',
+            onOk(){
+              w1();
+            },
+          })
+        }else{
+          w1();
+        }
+      }
+    })
+  })
+}
+const w1 = () => {
+  if (isRead.value){
+    Modal.confirm({
+      title: '绯荤粺鎻愮ず',
+      icon: createVNode(ExclamationCircleOutlined),
+      content:'鍗¢噷宸茬粡鍐欒繃鏁版嵁锛屾槸鍚﹁鐩�',
+      okText:'纭畾',
+      cancelText:'鍙栨秷',
+      onOk(){
+        wiData();
+      },
+    })
+  }else{
+    wiData();
+  }
+}
+const wiData =()=>{
+
+  let validityTime = formState.validityTime;
+  if (formState.isValidity){
+    validityTime= '99999999'
+  }
+  let beforeContId = '';
+  let laterContId = '';
+  if (formState.contId){
+    let strings = parseStrEmpty(formState.contId).split(',');
+    beforeContId = strings[0];
+    if (strings.length > 1){
+      laterContId = strings[1];
+    }
+  }
+  message.loading({content:'淇℃伅鍐欏叆鍗′腑!璇风◢绛�...',key:key})
+  Promise.all(
+      Object.keys(formMap).map(key=>{
+        if (key === 'validityTime'){
+          return  ipc.invoke('controller.icrf.connectRfWrite',{data:validityTime,addr:formMap[key]})
+        }else if(key === 'beforeContId'){
+          return  ipc.invoke('controller.icrf.connectRfWrite',{data:beforeContId,addr:formMap[key]})
+        }else if(key === 'laterContId'){
+          return  ipc.invoke('controller.icrf.connectRfWrite',{data:laterContId,addr:formMap[key]})
+        }else{
+          return  ipc.invoke('controller.icrf.connectRfWrite',{data:parseStrEmpty(formState[key]),addr:formMap[key]})
+        }
+      })
+  ).then(resList=>{
+    console.log(resList)
+    let kk = resList.filter(item => item.code !== 0);
+    if (Array.isArray(kk) && kk.length> 0){
+      ipc.invoke('controller.icrf.connectBeep');
+      message.error({content:'鍐欏崱澶辫触锛�'+kk[0].msg,key,duration:2})
+    }else{
+      ipc.invoke('controller.icrf.connectBeep');
+      current.value = 2;
+      message.success({content: '鍐欏叆鎴愬姛锛佽灏嗗崱鎷胯蛋',key,duration:2});
+      resetForm();
+    }
+
+  })
+
+}
+
+
+const resetForm = ()=>{
+  formRef.value.resetFields();
+  isRead.value = false;
+  current.value = 0;
+}
+onBeforeUnmount(()=>{
+})
+
+const startCard = () => {
+  ipc.invoke('controller.icrf.connectRfCard').then(res=>{
+    if (res.code === 0){
+      formState.sn = res.snr;
+      Promise.all(
+          Object.values(formMap).map(item=>{
+            return ipc.invoke('controller.icrf.connectRfRead',{addr:item});
+          })
+      ).then(resList=>{
+        let kk = resList.filter(item => item.code !== 0);
+        if (Array.isArray(kk) && kk.length> 0){
+          // ipc.invoke('controller.icrf.connectBeep',2);
+          message.error({content:'璇诲崱澶辫触锛�'+kk[0].msg,key,duration:2})
+        }else{
+          isCard.value = true;
+          current.value = 1;
+          resList.forEach((item,index)=>{
+            let key = Object.keys(formMap)[index];
+            let value = item.data;
+            if (key === 'validityTime'){
+                if (!value || value === '99999999'){
+                  formState.isValidity = true;
+                }
+            }else if (key === 'beforeContId'){
+                if (value){
+                  formState.contId= value;
+                }
+            }else if (key === 'laterContId'){
+                if (value){
+                  formState.contId =  formState.contId +',' +value;
+                }
+            }else{
+              formState[key] = value;
+            }
+            if (key ==='veLicenseNo' ){
+              if(value){
+                isRead.value = true
+              }else{
+                isRead.value = false
+              }
+
+            }
+          })
+        }
+      })
+
+
+    }else{
+      if (res.code === 65510){
+        message.error('鏈瘑鍒垨妫�娴嬪埌鍗$墖锛岃灏嗗崱鐗囨斁鍦ㄨ鍐欏櫒涓�')
+      }else{
+        message.error(res.msg)
+      }
+    }
+  })
+
+}
+const goBack = () => {
+  // resetForm();
+  current.value = 0;
+}
 
 </script>
 
 <template>
-  <div>鍗$墖璁剧疆</div>
+  <div class="app-container">
+    <a-steps style="margin-bottom: 10px;" :current="current" :items="setps"></a-steps>
+    <a-empty description="璇峰皢鍗$墖鏀惧湪璇诲啓鍣ㄤ笂" v-if="current === 0" class="emptyImg" :image="dkqImg">
+      <a-button type="primary" @click="startCard">寮�濮嬪埗鍗�</a-button>
+    </a-empty>
+    <div v-else-if="current === 1">
+      <a-alert type="warning" show-icon message="鍗$墖鏈啓鍏ユ垨鏈搷浣滃畬鎴愭椂锛岃璇皢鍗$寮�璇诲啓鍣�"></a-alert>
+      <a-form ref="formRef" :model="formState" :rules="rules" >
+        <a-card  style="margin-top: 10px">
+          <template #title>
+            <Section title="杞﹁締澶囨淇℃伅"></Section>
+          </template>
+          <template #extra>鍗$墖搴忓垪鍙�: {{formState.sn}}</template>
+          <a-row :gutter="16">
+            <a-col :span="12">
+              <a-form-item label="杞﹁締娴峰叧缂栧彿" ref="veCustomsNo" name="veCustomsNo">
+                <a-input v-model:value="formState.veCustomsNo"></a-input>
+              </a-form-item>
+            </a-col>
+            <a-col :span="12">
+              <a-form-item label="杞︾墝鍙�" ref="veLicenseNo" name="veLicenseNo">
+                <a-input v-model:value="formState.veLicenseNo"></a-input>
+              </a-form-item>
+            </a-col>
+            <a-col :span="12">
+              <a-form-item label="澧冨鎴栫菠娓境杞︾墝" ref="veLicenseNo2" name="veLicenseNo2">
+                <a-input v-model:value="formState.veLicenseNo2"></a-input>
+              </a-form-item>
+            </a-col>
+            <a-col :span="12">
+              <a-form-item label="杞﹁締鑷噸" ref="vehicleWeight" name="vehicleWeight">
+                <a-input v-model:value="formState.vehicleWeight">
+                  <template #suffix>KG</template>
+                </a-input>
+              </a-form-item>
+            </a-col>
+            <a-col :span="18">
+              <a-form-item label="鏈夋晥鏃ユ湡" ref="validityTime" name="validityTime">
+                <div style="display: flex;align-items: center;justify-content: space-between">
+                  <a-form-item-rest>
+                    <a-date-picker valueFormat="YYYYMMDD" :locale="locale" v-model:value="formState.validityTime" placeholder="璇烽�夋嫨" :disabled="formState.isValidity" style="width:60%"/>
+
+                  </a-form-item-rest>
+                  <a-form-item-rest>
+                    <a-checkbox v-model:checked="formState.isValidity" @change="isValidtyChange" style="margin-left: 10px;width: 40%">闀挎湡</a-checkbox>
+                  </a-form-item-rest>
+                </div>
+              </a-form-item>
+            </a-col>
+            <a-col :span="24">
+              <a-form-item label="绠卞彿" ref="contId" name="contId">
+                <a-textarea  v-model:value="formState.contId" placeholder="璇疯緭鍏ョ鍙�,(澶氫釜绠卞彿鐢ㄨ嫳鏂�,闅斿紑)" >
+                </a-textarea >
+              </a-form-item>
+            </a-col>
+            <a-col :span="24" style="text-align: center">
+              <a-button type="primary" style="margin-right: 10px;width: 200px" @click="onSubmit">鍒跺崱</a-button>
+              <a-button style="width: 200px" @click="resetForm">鍙栨秷</a-button>
+            </a-col>
+
+          </a-row>
+
+        </a-card>
+
+      </a-form>
+
+    </div>
+    <a-empty description="鍒跺崱瀹屾垚" v-if="current === 2" class="emptyImg" :image="okImg">
+      <a-button type="primary" @click="goBack">杩斿洖</a-button>
+    </a-empty>
+  </div>
+
+
 </template>
 
-<style scoped>
+<style scoped lang="less">
+.app-container {
+  position: relative;
+  min-height: 100%;
+}
 
+.emptyImg {
+  position: absolute;
+  left: 50%;
+  top: 50%;
+  transform: translate(-50%, -50%);
+  text-align: center;
+  font-size: 16px;
+  color: #8a919f;
+  font-weight: bold;
+  line-height: 34px;
+}
 </style>
\ No newline at end of file

--
Gitblit v1.8.0