Browse Source

修复idcardbug

fixbug/idCard-0121
LiLongLong 7 months ago
parent
commit
1abbafcbe0
  1. 15
      src/pages/Index/Index.vue
  2. 57
      src/pages/Index/components/Consumables/IdCardInfo.vue
  3. 11
      src/pages/Index/components/Consumables/MoveLiquidArea.vue
  4. 6
      src/pages/Index/components/Consumables/Warn/InitWarn.vue
  5. 11
      src/services/Index/idCard.ts
  6. 21
      src/store/modules/consumables.ts
  7. 14
      src/websocket/socket.ts

15
src/pages/Index/Index.vue

@ -279,7 +279,7 @@
v-if="idCardInserted" v-if="idCardInserted"
:visible="idCardInserted" :visible="idCardInserted"
title="检测到id卡插入" title="检测到id卡插入"
message="是否保存id卡信息"
:message="idCardMessage"
cancelText="返回" cancelText="返回"
icon="/src/assets/update-pin-icon.svg" icon="/src/assets/update-pin-icon.svg"
confirmText="确认保存" confirmText="确认保存"
@ -389,6 +389,7 @@ const emergencyStore = useEmergencyStore()
const shutdownMessage = ref('正在关机中…') const shutdownMessage = ref('正在关机中…')
const confirmInfo = ref({}) const confirmInfo = ref({})
const confirmVisible = ref(false) const confirmVisible = ref(false)
const idCardMessage = ref('是否保存id卡信息')
const failMessage = ref({ const failMessage = ref({
title: '检测失败', title: '检测失败',
@ -463,19 +464,25 @@ const handleSocketClose = (num: number) => {
} }
// //
// const formatDate = (date: any) => new Date(date).toLocaleDateString()
const handleAppEvent = (data: AppEventMessage['data']) => { const handleAppEvent = (data: AppEventMessage['data']) => {
console.log('🚀 ~ handleAppEvent ~ data:', data) console.log('🚀 ~ handleAppEvent ~ data:', data)
if (data.typeName === 'AppPromptEvent') { if (data.typeName === 'AppPromptEvent') {
eventReports.value.push(data) eventReports.value.push(data)
showEventReportDlg.value = true showEventReportDlg.value = true
} else if (data.typeName === 'AppIDCardMountEvent') { } else if (data.typeName === 'AppIDCardMountEvent') {
// let mock = reportText
// eventReports.value.push(mock)
// showEventReportDlg.value = true
consumableStore.setIdCardInserted(true) consumableStore.setIdCardInserted(true)
let projectInfo = data.projectInfo
consumableStore.setIdCardInfo(projectInfo)
//id
idCardInserted.value = true idCardInserted.value = true
idCardMessage.value = `<div>
<div>项目名称${projectInfo.projName}, 批次号${projectInfo.lotId}, 过期时间${formatDate(projectInfo.expiryDate)}</div>
<div>id卡已插入是否确保</div>
</div>`
} else if (data.typeName === 'AppIDCardUnmountEvent') { } else if (data.typeName === 'AppIDCardUnmountEvent') {
consumableStore.setIdCardInserted(false) consumableStore.setIdCardInserted(false)
consumableStore.setIdCardInfo(null)
idCardInserted.value = false idCardInserted.value = false
} }
} }

57
src/pages/Index/components/Consumables/IdCardInfo.vue

@ -42,13 +42,13 @@
</table> </table>
</div> </div>
<div class="pagination-container"> <div class="pagination-container">
<div class="pagination-info">
<!-- <div class="pagination-info">
<select v-model="pageSize" @change="handlePageSizeChange" class="custom-select" style="font-size:14px;width:120px"> <select v-model="pageSize" @change="handlePageSizeChange" class="custom-select" style="font-size:14px;width:120px">
<option v-for="size in pageSizeList" :key="size" :value="size" style="font-size:10px"> <option v-for="size in pageSizeList" :key="size" :value="size" style="font-size:10px">
{{ size }} / {{ size }} /
</option> </option>
</select> </select>
</div>
</div> -->
<div class="pagination-buttons"> <div class="pagination-buttons">
<button @click="prevPage" :disabled="currentPage === 1"> <button @click="prevPage" :disabled="currentPage === 1">
上一页 上一页
@ -101,14 +101,14 @@
</div> </div>
</div> </div>
</div> </div>
<Confirm :isLoading="confirmVisible" :confirmInfo="confirmInfo"></Confirm>
</div> </div>
</teleport> </teleport>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { ref, computed, watch, onMounted } from 'vue' import { ref, computed, watch, onMounted } from 'vue'
import { getIdCardList } from '@/services/index'
import { getIdCardList, delCard } from '@/services/index'
import type { ItemData } from '@/types/Index' import type { ItemData } from '@/types/Index'
import { useConsumablesStore } from '@/store' import { useConsumablesStore } from '@/store'
const consumableStore = useConsumablesStore() const consumableStore = useConsumablesStore()
@ -116,7 +116,6 @@ const props = defineProps({
modelValue: Boolean, modelValue: Boolean,
}) })
const emit = defineEmits(['update:modelValue']) const emit = defineEmits(['update:modelValue'])
const pageSizeList:number[] = [5,10,20]
const visible = ref(props.modelValue) const visible = ref(props.modelValue)
// //
let totalPage = ref(0) let totalPage = ref(0)
@ -128,12 +127,28 @@ watch(
) )
const confirmDeleteVisible = ref(false) // const confirmDeleteVisible = ref(false) //
const confirmExistVisible = ref(false) // const confirmExistVisible = ref(false) //
const confirmVisible = ref(false)
const confirmInfo = ref({})
// //
const handleDelete = () => { const handleDelete = () => {
if(!selectedItems.value.length){ if(!selectedItems.value.length){
return return
} }
if(selectedItems.value.length > 1){
confirmVisible.value = true;
confirmInfo.value = {
title: '提示',
message: '不可批量操作',
OkBtn: '确认',
confirmCallback:async()=>{
confirmVisible.value = false
},
}
return;
}
// //
let lotList = selectedItems.value.map(item => item.lotId) let lotList = selectedItems.value.map(item => item.lotId)
// //
@ -146,7 +161,6 @@ const handleDelete = () => {
isExist = true; isExist = true;
} }
} }
console.log('isExist--', isExist)
if(isExist){ if(isExist){
confirmExistVisible.value = true; confirmExistVisible.value = true;
return; return;
@ -155,13 +169,17 @@ const handleDelete = () => {
} }
// //
const confirmDelete = () => {
tableData.value = tableData.value.filter(
(item) => !selectedItems.value.includes(item),
)
const confirmDelete = async() => {
// tableData.value = tableData.value.filter(
// (item) => !selectedItems.value.includes(item),
// )
let ids = selectedItems.value.map(item => item.id)
await delCard(ids[0])
selectedItems.value = [] // selectedItems.value = [] //
selectAll.value = false // selectAll.value = false //
confirmDeleteVisible.value = false // confirmDeleteVisible.value = false //
getCardList()
} }
// //
@ -182,7 +200,7 @@ const getCardList = async () => {
} }
tableData.value = res.data.list tableData.value = res.data.list
totalItems.value = res.data.list.length totalItems.value = res.data.list.length
totalPage.value = res.data.totalPage;
totalPage.value = res.data.total;
console.log('tableData.value===', tableData.value) console.log('tableData.value===', tableData.value)
} }
@ -203,7 +221,7 @@ const handleConfirm = () => {
emit('update:modelValue', false) emit('update:modelValue', false)
console.log('已选择的项目:', selectedItems.value) console.log('已选择的项目:', selectedItems.value)
} }
let defaultSize = 5
let defaultSize = 10
const currentPage = ref(1) const currentPage = ref(1)
const pageSize = ref(defaultSize) const pageSize = ref(defaultSize)
const tableData = ref<ItemData[]>([]) const tableData = ref<ItemData[]>([])
@ -211,7 +229,7 @@ const totalItems = ref(0)
const selectedItems = ref<ItemData[]>([]) // const selectedItems = ref<ItemData[]>([]) //
const selectAll = ref(false) // const selectAll = ref(false) //
const totalPages = computed(() => Math.ceil(totalItems.value / pageSize.value))
const totalPages = computed(() => Math.ceil(totalPage.value / pageSize.value))
// //
// const _searchValue = ref<string>('') // const _searchValue = ref<string>('')
const prevPage = () => { const prevPage = () => {
@ -234,6 +252,8 @@ const formatDate = (date: any) => new Date(date).toLocaleDateString()
// //
const displayedPages = computed(() => { const displayedPages = computed(() => {
const pages:any = []; const pages:any = [];
console.log('totalPages---', totalPages)
console.log('currentPage---', currentPage)
if (totalPages.value <= 5) { if (totalPages.value <= 5) {
for (let i = 1; i <= totalPages.value; i++) { for (let i = 1; i <= totalPages.value; i++) {
pages.push(i) pages.push(i)
@ -294,11 +314,13 @@ const handlePageSizeChange = () => {
/* 弹窗主体样式 */ /* 弹窗主体样式 */
.modal { .modal {
background: white; background: white;
width: 1000px;
width: 90%;
padding: 20px; padding: 20px;
border-radius: 8px; border-radius: 8px;
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.2); box-shadow: 0 2px 10px rgba(0, 0, 0, 0.2);
.modal-body{
height:42rem;
}
.modal-header { .modal-header {
display: flex; display: flex;
width: 100%; width: 100%;
@ -428,16 +450,15 @@ const handlePageSizeChange = () => {
} }
.pagination-container { .pagination-container {
display: flex;
justify-content: space-between; justify-content: space-between;
align-items: center; align-items: center;
margin-top: 10px; margin-top: 10px;
text-align: right;
.pagination-buttons button { .pagination-buttons button {
margin: 0 2px; margin: 0 2px;
padding: 5px 10px; padding: 5px 10px;
font-size: 26px; font-size: 26px;
&.active { &.active {
background: #007bff; background: #007bff;
color: white; color: white;

11
src/pages/Index/components/Consumables/MoveLiquidArea.vue

@ -108,13 +108,12 @@
<button <button
class="id-button" class="id-button"
@click="openIdCardTableModal" @click="openIdCardTableModal"
:disabled="!consumableStore.isIdCardInserted"
> >
<span class="button-text">
{{
consumableStore.isIdCardInserted ? '已插入' : '未插入芯片'
}}</span
>
<div v-if="consumableStore.isIdCardInserted">
<div>{{ consumableStore.idCardInfo?.projName }}</div>
<div>{{ consumableStore.idCardInfo?.lotId }}</div>
</div>
<span v-else class="button-text">未插入芯片</span>
</button> </button>
</div> </div>
<!--废料区--> <!--废料区-->

6
src/pages/Index/components/Consumables/Warn/InitWarn.vue

@ -8,7 +8,7 @@
</div> </div>
<div class="modal-content"> <div class="modal-content">
<h3 class="modal-title">{{ title }}</h3> <h3 class="modal-title">{{ title }}</h3>
<p class="modal-message">{{ message }}</p>
<p class="modal-message" v-html="contentMessage"></p>
<!-- 错误提示信息 --> <!-- 错误提示信息 -->
<p v-if="errorTip" class="modal-error">{{ errorTip }}</p> <p v-if="errorTip" class="modal-error">{{ errorTip }}</p>
</div> </div>
@ -49,10 +49,10 @@ const props = defineProps({
}) })
const emit = defineEmits(['close', 'confirm']) const emit = defineEmits(['close', 'confirm'])
// 使 ref // 使 ref
const iconSrc = ref('') const iconSrc = ref('')
let msg = `<div class='modal-message'>${props.message}</div>`
const contentMessage = ref(msg)
// 使 import.meta.glob // 使 import.meta.glob
const icons = import.meta.glob('/src/assets/**/*.svg') const icons = import.meta.glob('/src/assets/**/*.svg')

11
src/services/Index/idCard.ts

@ -39,3 +39,14 @@ export const getMountedCardInfo = async () => {
console.log('读取已经挂载的id卡信息出错', error) console.log('读取已经挂载的id卡信息出错', error)
} }
} }
//读取已经挂载的id卡信息
export const delCard = async (id) => {
try {
const res = await apiClient.post(
`/api/v1/app/a8kProjectCard/delete?id=${id}`,
)
return res.data
} catch (error) {
console.log('删除卡信息出错', error)
}
}

21
src/store/modules/consumables.ts

@ -11,6 +11,7 @@ import * as R from 'ramda'
import type { import type {
ConsumablesStateMessage, ConsumablesStateMessage,
ReactionPlateGroup, ReactionPlateGroup,
IdCardPrompt
} from '../../websocket/socket' } from '../../websocket/socket'
// id : 1,11,21,31 优先选用 Color10 的索引1的颜色 // id : 1,11,21,31 优先选用 Color10 的索引1的颜色
@ -49,6 +50,23 @@ export const useConsumablesStore = defineStore(
isInstall: false, isInstall: false,
})), })),
}) })
//插入的当前ID卡信息
const idCardInfo = ref<IdCardPrompt | null>({
color: '',
expiryDate: 0,
id: 0,
lotId: '',
palteCode: 0,//palteCode 字段,接口命名错了。应该是plateCode
projId: 0,
projName: '',
updateChipVersion: '',
})
function setIdCardInfo(data: IdCardPrompt | null){
idCardInfo.value = data;
}
//id卡是否插入 //id卡是否插入
const isIdCardInserted = ref(false) const isIdCardInserted = ref(false)
@ -165,6 +183,9 @@ export const useConsumablesStore = defineStore(
projectsAvailable, projectsAvailable,
projIdColorMap, projIdColorMap,
idCardInfo,
setIdCardInfo,
} }
}, },
// { // {

14
src/websocket/socket.ts

@ -34,11 +34,24 @@ export type EventName =
| 'AppIDCardUnmountEvent' | 'AppIDCardUnmountEvent'
| 'AppPromptEvent' | 'AppPromptEvent'
//IDCARD
export type IdCardPrompt = {
color: string,
expiryDate: number,
id: number,
lotId: string,
palteCode: number,//palteCode 字段,接口命名错了。应该是plateCode
projId: number,
projName: string,
updateChipVersion: string,
}
export interface EventReport { export interface EventReport {
typeName: EventName typeName: EventName
timestamp: number timestamp: number
eventId: string eventId: string
prompt: TextPrompt | FormsPrompt | TablePrompt prompt: TextPrompt | FormsPrompt | TablePrompt
projectInfo: IdCardPrompt
} }
export type TextPrompt = { export type TextPrompt = {
@ -530,6 +543,7 @@ export const createWebSocket = (url: string): WebSocketClient => {
// 使用示例: // 使用示例:
/* /*
import { createWebSocket } from './websocket/socket'; import { createWebSocket } from './websocket/socket';
import { ProjectInfo } from '../types/Index/Emergency';
// 创建 WebSocket 连接 // 创建 WebSocket 连接
const ws = createWebSocket('ws://your-websocket-server-url'); const ws = createWebSocket('ws://your-websocket-server-url');

Loading…
Cancel
Save