|
@@ -2,8 +2,8 @@
|
|
|
<div class="detail_main">
|
|
<div class="detail_main">
|
|
|
<div class="question_header">
|
|
<div class="question_header">
|
|
|
<div class="item_title">
|
|
<div class="item_title">
|
|
|
- <!-- <div class="item_step">1</div>
|
|
|
|
|
- 扫描标准答案:<el-button type="primary" @click="GotoScan()" :loading="scanLoading" style="width: 88px;">{{scanText}}</el-button> -->
|
|
|
|
|
|
|
+ <div class="item_step">1</div>
|
|
|
|
|
+ 扫描标准答案:<el-button type="primary" @click="GotoScan()" :loading="scanLoading" style="width: 88px;">{{scanText}}</el-button>
|
|
|
<!-- <span class="preview_btn">预览</span> -->
|
|
<!-- <span class="preview_btn">预览</span> -->
|
|
|
<!-- <el-button style="margin-left: 10px;width: 116px;">引用试题结构</el-button> -->
|
|
<!-- <el-button style="margin-left: 10px;width: 116px;">引用试题结构</el-button> -->
|
|
|
</div>
|
|
</div>
|
|
@@ -15,7 +15,7 @@
|
|
|
<div class="page_jg_20"></div>
|
|
<div class="page_jg_20"></div>
|
|
|
<div class="page_module">
|
|
<div class="page_module">
|
|
|
<div class="item_title">
|
|
<div class="item_title">
|
|
|
- <!-- <div class="item_step">2</div> -->
|
|
|
|
|
|
|
+ <div class="item_step">2</div>
|
|
|
设置试题结构:
|
|
设置试题结构:
|
|
|
<div class="item_search">
|
|
<div class="item_search">
|
|
|
<div class="search_name">题目从</div>
|
|
<div class="search_name">题目从</div>
|
|
@@ -52,7 +52,7 @@
|
|
|
</div>
|
|
</div>
|
|
|
<div class="page_jg_16"></div>
|
|
<div class="page_jg_16"></div>
|
|
|
<div class="table_42">
|
|
<div class="table_42">
|
|
|
- <el-table :data="tableData" style="width: 100%" :height="tableHeight">
|
|
|
|
|
|
|
+ <el-table :data="tableData" v-loading="tableLoading" element-loading-text="加载中……" element-loading-spinner="el-icon-loading" element-loading-background="#ffffff" style="width: 100%" :height="tableHeight">
|
|
|
<el-table-column prop="questionName" label="题目名称" width="100">
|
|
<el-table-column prop="questionName" label="题目名称" width="100">
|
|
|
</el-table-column>
|
|
</el-table-column>
|
|
|
<!-- 题目类型 questionType 1 单校 2多选 -->
|
|
<!-- 题目类型 questionType 1 单校 2多选 -->
|
|
@@ -170,14 +170,17 @@ import ChooseTemplate from './components/chooseTemplate.vue';
|
|
|
import EditorQuestion from './components/EditorQuestion.vue';
|
|
import EditorQuestion from './components/EditorQuestion.vue';
|
|
|
|
|
|
|
|
import { ElMessageBox,ElMessage } from 'element-plus'
|
|
import { ElMessageBox,ElMessage } from 'element-plus'
|
|
|
-import { getSmartQuestionList,getTemplateInfo,setQuestion,saveQuestion,deleteAllQuestion,deleteSingleQuestion,getExamProcess} from '@/api/exam'
|
|
|
|
|
|
|
+import { getScanSetCertificate,getScanAnswerStates,getSmartQuestionList,getTemplateInfo,setQuestion,saveQuestion,deleteAllQuestion,deleteSingleQuestion,getExamProcess} from '@/api/exam'
|
|
|
import scanCommon from '@/utils/scanCommon.ts'
|
|
import scanCommon from '@/utils/scanCommon.ts'
|
|
|
import { useThrottleFn } from '@vueuse/core';
|
|
import { useThrottleFn } from '@vueuse/core';
|
|
|
-
|
|
|
|
|
|
|
+import { useUserStore } from '@/store/user'
|
|
|
// 实例化 Store
|
|
// 实例化 Store
|
|
|
const examStore = useExamStore()
|
|
const examStore = useExamStore()
|
|
|
const router = useRouter()
|
|
const router = useRouter()
|
|
|
|
|
+const userStore = useUserStore()
|
|
|
|
|
|
|
|
|
|
+// 修改 schoolId 计算属性,直接从 store 获取
|
|
|
|
|
+const selectSchoolId = computed(() => userStore.schoolId)
|
|
|
// 定义题目数据的接口类型
|
|
// 定义题目数据的接口类型
|
|
|
interface QuestionItem {
|
|
interface QuestionItem {
|
|
|
id?: string;
|
|
id?: string;
|
|
@@ -205,15 +208,21 @@ const scanText=ref('开始扫描');
|
|
|
const templateQuestionCount=ref(0);//模板题目总数量
|
|
const templateQuestionCount=ref(0);//模板题目总数量
|
|
|
const showChooseTemplate=ref(false);// 弹出选择模板的弹窗
|
|
const showChooseTemplate=ref(false);// 弹出选择模板的弹窗
|
|
|
const tableData = ref<QuestionItem[]>([])
|
|
const tableData = ref<QuestionItem[]>([])
|
|
|
|
|
+const tableLoading = ref(true)//表格loading状态
|
|
|
const enterStandardEdit=ref<HTMLElement>();//标准答案编辑组件实例
|
|
const enterStandardEdit=ref<HTMLElement>();//标准答案编辑组件实例
|
|
|
|
|
|
|
|
const tableHeight = ref(400)// 表格高度
|
|
const tableHeight = ref(400)// 表格高度
|
|
|
const answerList=['A','B','C','D','E','F','G','H','I','J','K']//答案列表
|
|
const answerList=['A','B','C','D','E','F','G','H','I','J','K']//答案列表
|
|
|
const tflist=['T','F']//判断题列表
|
|
const tflist=['T','F']//判断题列表
|
|
|
|
|
|
|
|
|
|
+let uploadUrl=`https://www.k12100.com/teaching/api/v1/ai_exam_scan/upload_multi_img`;//图片上传地址
|
|
|
|
|
+let updateCountUrl=`https://www.k12100.com/teaching/api/v1/ai_exam_scan/record_batch_scan_number`;
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
//扫描答案
|
|
//扫描答案
|
|
|
const scanLoading=ref(false);//开始扫描答案
|
|
const scanLoading=ref(false);//开始扫描答案
|
|
|
-const uploadUrl=ref('');//扫描答案的上传的图片地址
|
|
|
|
|
|
|
+let skipCertificateNextScan = false;//未检测到纸张后,下次点击开始扫描时跳过后端证书接口,直接下发扫描仪指令
|
|
|
|
|
+
|
|
|
const examSubjectCode=ref('');//扫描答案的科目编号
|
|
const examSubjectCode=ref('');//扫描答案的科目编号
|
|
|
const showScanAnswer=ref(false);//扫描答案预览
|
|
const showScanAnswer=ref(false);//扫描答案预览
|
|
|
const imageFilesList=ref<any[]>([]);//扫描答案的图片列表
|
|
const imageFilesList=ref<any[]>([]);//扫描答案的图片列表
|
|
@@ -224,6 +233,8 @@ const examSubjectId = computed(() => {
|
|
|
return examStore.currentExam?.id
|
|
return examStore.currentExam?.id
|
|
|
})//计算属性
|
|
})//计算属性
|
|
|
|
|
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
const templateId=computed(() => {
|
|
const templateId=computed(() => {
|
|
|
return examStore.currentExam?.templateId
|
|
return examStore.currentExam?.templateId
|
|
|
})//计算属性
|
|
})//计算属性
|
|
@@ -470,6 +481,27 @@ const DeleteSingle=(item:any)=>{
|
|
|
})
|
|
})
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+const ConfigRequestUrlByEnv= () =>{
|
|
|
|
|
+ console.log("打印环境", import.meta.env.MODE);
|
|
|
|
|
+ if (import.meta.env.MODE === 'development')
|
|
|
|
|
+ {
|
|
|
|
|
+ //本地开发环境:写死测试环境地址
|
|
|
|
|
+
|
|
|
|
|
+ uploadUrl = `https://index.k12100.net/teaching/api/v1/ai_exam_scan/upload_multi_img`;//图片上传地址
|
|
|
|
|
+ updateCountUrl = `https://index.k12100.net/teaching/api/v1/ai_exam_scan/record_batch_scan_number`;//更新扫描数量地址
|
|
|
|
|
+ }
|
|
|
|
|
+ else
|
|
|
|
|
+ {
|
|
|
|
|
+ //线上环境(测试/生产):读取配置的环境变量
|
|
|
|
|
+
|
|
|
|
|
+ uploadUrl = `${import.meta.env.VITE_API_BASE_URL_API}/api/v1/ai_exam_scan/upload_multi_img`;//图片上传地址
|
|
|
|
|
+ updateCountUrl = `${import.meta.env.VITE_API_BASE_URL_API}/api/v1/ai_exam_scan/record_batch_scan_number`;//更新扫描数量地址
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ console.log("打印上传图片地址", uploadUrl);
|
|
|
|
|
+ console.log("打印更新扫描数量地址", updateCountUrl);
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
//编辑单个题目
|
|
//编辑单个题目
|
|
|
const EditorSingle=(item:any)=>{
|
|
const EditorSingle=(item:any)=>{
|
|
|
console.log("打印编辑单个题目",item)
|
|
console.log("打印编辑单个题目",item)
|
|
@@ -478,8 +510,7 @@ const EditorSingle=(item:any)=>{
|
|
|
// 打开扫描仪器
|
|
// 打开扫描仪器
|
|
|
const GotoScan = useThrottleFn(() => {
|
|
const GotoScan = useThrottleFn(() => {
|
|
|
|
|
|
|
|
- ElMessage.warning("暂未开放,敬请期待!")
|
|
|
|
|
- return;
|
|
|
|
|
|
|
+
|
|
|
// showSelectType.value = 'scan';
|
|
// showSelectType.value = 'scan';
|
|
|
console.log("打印打开扫描仪器",scanCommon.isClientConnected())
|
|
console.log("打印打开扫描仪器",scanCommon.isClientConnected())
|
|
|
if (!scanClientConnected.value) {
|
|
if (!scanClientConnected.value) {
|
|
@@ -489,8 +520,36 @@ const GotoScan = useThrottleFn(() => {
|
|
|
|
|
|
|
|
scanLoading.value = true;
|
|
scanLoading.value = true;
|
|
|
scanText.value='扫描中...';
|
|
scanText.value='扫描中...';
|
|
|
|
|
+
|
|
|
|
|
+ //未检测到纸张后的重试:跳过后端证书接口,直接下发扫描仪指令并恢复轮询
|
|
|
|
|
+ if (skipCertificateNextScan) {
|
|
|
|
|
+ skipCertificateNextScan = false;
|
|
|
|
|
+ StartScan();
|
|
|
|
|
+ ScheduleScanStatePolling();
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
// showScanAnswer.value=true;
|
|
// showScanAnswer.value=true;
|
|
|
- StartScan();
|
|
|
|
|
|
|
+ //先调用后端的接口
|
|
|
|
|
+ const param={
|
|
|
|
|
+ examSubjectId:examSubjectId.value,
|
|
|
|
|
+ };
|
|
|
|
|
+ getScanSetCertificate(param).then((res:any)=>{
|
|
|
|
|
+ console.log("打印返回结果",res);
|
|
|
|
|
+ if(res.code==200)
|
|
|
|
|
+ {
|
|
|
|
|
+ StartScan();
|
|
|
|
|
+ //启动扫描答案成功后,开启轮询获取扫描答案状态(每2秒一次)
|
|
|
|
|
+ ScheduleScanStatePolling();
|
|
|
|
|
+ }
|
|
|
|
|
+ else
|
|
|
|
|
+ {
|
|
|
|
|
+ //后端证书接口失败:复位按钮,允许用户重新点击开始扫描
|
|
|
|
|
+ scanLoading.value = false;
|
|
|
|
|
+ scanText.value='开始扫描';
|
|
|
|
|
+ ElMessage.error(res.msg);
|
|
|
|
|
+ }
|
|
|
|
|
+ })
|
|
|
|
|
+
|
|
|
}, 5000);
|
|
}, 5000);
|
|
|
|
|
|
|
|
// 启动扫描
|
|
// 启动扫描
|
|
@@ -498,29 +557,119 @@ const StartScan = () => {
|
|
|
scanCommon.init(HandleScanResult); // 跟扫描仪插件 websocket 连接
|
|
scanCommon.init(HandleScanResult); // 跟扫描仪插件 websocket 连接
|
|
|
|
|
|
|
|
console.log("打印 VUE_APP_BASE_API", import.meta.env.VITE_APP_BASE_API); // Vue3/Vite 环境变量获取方式
|
|
console.log("打印 VUE_APP_BASE_API", import.meta.env.VITE_APP_BASE_API); // Vue3/Vite 环境变量获取方式
|
|
|
- console.log("打印上传图片地址", uploadUrl.value);
|
|
|
|
|
-
|
|
|
|
|
- let json = {
|
|
|
|
|
- "action": "scanTemplate", // scanTemplate 扫描模板指令
|
|
|
|
|
- "batchNumber": 'template', // 模板信息
|
|
|
|
|
- "subjectCode": examSubjectCode.value, // 科目编号
|
|
|
|
|
- "paperSchema": 1, // 默认单面
|
|
|
|
|
- "token": '', // token 信息
|
|
|
|
|
- "dpi": 150, // dpi 参数
|
|
|
|
|
- "useDriveUI": 0, // 默认不弹窗
|
|
|
|
|
- "uploadUrl": '', // 图片上传地址
|
|
|
|
|
- "jsonParam": '', // 后端使用的参数
|
|
|
|
|
|
|
+ console.log("打印上传图片地址", uploadUrl);
|
|
|
|
|
+
|
|
|
|
|
+ //开始扫描
|
|
|
|
|
+ let jsonParam={
|
|
|
|
|
+ examSubjectId:examSubjectId.value,
|
|
|
|
|
+ batchNumber:'9999',//批次号 固定9999 代表扫描答案
|
|
|
|
|
+ // sensitive: 35,//灵敏度参数 固定35
|
|
|
|
|
+ settingFlag:1,//设置参数 (0-正常图片 1- 设置题目 以及答案)
|
|
|
|
|
+ schoolId:selectSchoolId.value//学校id 联校单校都需要学校id
|
|
|
};
|
|
};
|
|
|
|
|
+ let json = {
|
|
|
|
|
+ "action":"startScan",//交互指令参数
|
|
|
|
|
+ "batchNumber":'9999',//批次号 这里传给客户端的批次号需要进行处理 截取批次id后5位拼接batchNumber
|
|
|
|
|
+ "subjectCode":examSubjectCode.value,//科目编号
|
|
|
|
|
+ "paperSchema":1,//this.paperSchema,// 单双面//页面类型 1 单面 2 双面
|
|
|
|
|
+ "token":localStorage.getItem('token'),//token信息
|
|
|
|
|
+ "uploadUrl":uploadUrl, // 图片上传地址
|
|
|
|
|
+ "updateCountUrl":updateCountUrl,//更新扫描纸张数量接口 接口参数 批次id post 请求 id
|
|
|
|
|
+ "batchId":'10000',//批次号id
|
|
|
|
|
+
|
|
|
|
|
+ "dpi":150,//dpi参数 设置图片清晰度质量的
|
|
|
|
|
+ "isColor":1,//是否彩色图片 手阅卡扫描彩色图片 0 黑白 1 彩色
|
|
|
|
|
+ "useDriveUI":0,//startScan和scanTemplate增加useDriveUI参数,=1时会弹框,其他值或不写则不弹
|
|
|
|
|
+ "jsonParam":JSON.stringify(jsonParam),// 后端使用的参数 json字符串 后端接口固定三个参数 1:jsonParam 2:seqNumber(这个批次的图片序号:从1开始) 3:file 图片文件
|
|
|
|
|
+ };//正式版参数
|
|
|
|
|
+ console.log("打印发送的数据",JSON.stringify(json));
|
|
|
|
|
+ setTimeout(() => {
|
|
|
|
|
+ scanCommon.send(JSON.stringify(json))
|
|
|
|
|
+ },100)
|
|
|
|
|
+};
|
|
|
|
|
|
|
|
- console.log("打印参数", json);
|
|
|
|
|
|
|
|
|
|
- setTimeout(() => {
|
|
|
|
|
- console.log("打印发送的 send 参数", json);
|
|
|
|
|
- // scanLoading.value = false;
|
|
|
|
|
- scanCommon.send(JSON.stringify(json));
|
|
|
|
|
- }, 2500);
|
|
|
|
|
|
|
+//扫描状态轮询定时器
|
|
|
|
|
+let scanStateTimer: ReturnType<typeof setTimeout> | null = null;
|
|
|
|
|
+
|
|
|
|
|
+//停止扫描状态轮询
|
|
|
|
|
+const StopScanStatePolling=()=>{
|
|
|
|
|
+ if(scanStateTimer){
|
|
|
|
|
+ clearTimeout(scanStateTimer);
|
|
|
|
|
+ scanStateTimer = null;
|
|
|
|
|
+ }
|
|
|
|
|
+};
|
|
|
|
|
+
|
|
|
|
|
+//继续轮询:2秒后再次调用获取扫描答案状态
|
|
|
|
|
+const ScheduleScanStatePolling=()=>{
|
|
|
|
|
+ StopScanStatePolling();//先清除已有定时器,避免重复轮询
|
|
|
|
|
+ scanStateTimer = setTimeout(()=>{
|
|
|
|
|
+ GetScanAnswerStates();
|
|
|
|
|
+ },2000);
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
|
|
+//获取扫描答案状态
|
|
|
|
|
+// 轮询查询识别是否完成,每隔2S调用一次,0-表示识别完成,1-上传中 2-识别中 3-失败,其中1和2继续保持loading 0和3可以加载题目
|
|
|
|
|
+const GetScanAnswerStates=()=>{
|
|
|
|
|
+
|
|
|
|
|
+ const param={
|
|
|
|
|
+ examSubjectId:examSubjectId.value,
|
|
|
|
|
+ };
|
|
|
|
|
+ getScanAnswerStates(param).then((res:any)=>{
|
|
|
|
|
+ console.log("打印获取扫描答案状态",res);
|
|
|
|
|
+ if(res.code==200)
|
|
|
|
|
+ {
|
|
|
|
|
+ //0-表示识别完成,1-上传中 2-识别中 3-失败,其中1和2继续保持loading 0和3可以加载题目
|
|
|
|
|
+ if(res.data==0)
|
|
|
|
|
+ {
|
|
|
|
|
+ //识别完成:结束轮询,加载试题列表
|
|
|
|
|
+ StopScanStatePolling();
|
|
|
|
|
+ scanLoading.value = false;
|
|
|
|
|
+ scanText.value='扫描完成';
|
|
|
|
|
+ GetSmartQuestionList();//获取试题列表
|
|
|
|
|
+ // showScanAnswer.value = true;
|
|
|
|
|
+ }
|
|
|
|
|
+ else if(res.data==1)
|
|
|
|
|
+ {
|
|
|
|
|
+ //上传中:保持loading,2秒后继续轮询
|
|
|
|
|
+ scanLoading.value = true;
|
|
|
|
|
+ scanText.value='上传中...';
|
|
|
|
|
+ ScheduleScanStatePolling();
|
|
|
|
|
+ }
|
|
|
|
|
+ else if(res.data==2)
|
|
|
|
|
+ {
|
|
|
|
|
+ //识别中:保持loading,2秒后继续轮询
|
|
|
|
|
+ scanLoading.value = true;
|
|
|
|
|
+ scanText.value='识别中...';
|
|
|
|
|
+ ScheduleScanStatePolling();
|
|
|
|
|
+ }
|
|
|
|
|
+ else if(res.data==3)
|
|
|
|
|
+ {
|
|
|
|
|
+ //扫描失败:结束轮询,加载试题列表
|
|
|
|
|
+ StopScanStatePolling();
|
|
|
|
|
+ scanLoading.value = false;
|
|
|
|
|
+ scanText.value='扫描失败';
|
|
|
|
|
+ ElMessage.error('扫描失败');
|
|
|
|
|
+ GetSmartQuestionList();//获取试题列表
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ else
|
|
|
|
|
+ {
|
|
|
|
|
+ //接口异常:结束轮询,避免无限请求
|
|
|
|
|
+ StopScanStatePolling();
|
|
|
|
|
+ scanLoading.value = false;
|
|
|
|
|
+ ElMessage.error(res.msg);
|
|
|
|
|
+ }
|
|
|
|
|
+ })
|
|
|
|
|
+ .catch(()=>{
|
|
|
|
|
+ //请求异常:结束轮询,避免无限请求
|
|
|
|
|
+ StopScanStatePolling();
|
|
|
|
|
+ scanLoading.value = false;
|
|
|
|
|
+ })
|
|
|
|
|
+
|
|
|
|
|
+};
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
//关闭扫描答案预览
|
|
//关闭扫描答案预览
|
|
|
const CloseScanAnswer=()=>{
|
|
const CloseScanAnswer=()=>{
|
|
|
showScanAnswer.value = false;
|
|
showScanAnswer.value = false;
|
|
@@ -560,14 +709,18 @@ const GetSmartQuestionList=()=>{
|
|
|
const params={
|
|
const params={
|
|
|
examSubjectId: examSubjectId.value,
|
|
examSubjectId: examSubjectId.value,
|
|
|
};
|
|
};
|
|
|
|
|
+ tableLoading.value = true;//开启表格loading
|
|
|
getSmartQuestionList(params).then((res) => {
|
|
getSmartQuestionList(params).then((res) => {
|
|
|
console.log("打印获取试题结构列表结果",res)
|
|
console.log("打印获取试题结构列表结果",res)
|
|
|
|
|
+ scanText.value='开始扫描';
|
|
|
if(res.code==200)
|
|
if(res.code==200)
|
|
|
{
|
|
{
|
|
|
// tableData.value=res.data;
|
|
// tableData.value=res.data;
|
|
|
// 增加空值保护,确保 tableData 始终是数组
|
|
// 增加空值保护,确保 tableData 始终是数组
|
|
|
tableData.value = Array.isArray(res.data) ? res.data : [];
|
|
tableData.value = Array.isArray(res.data) ? res.data : [];
|
|
|
}
|
|
}
|
|
|
|
|
+ }).finally(()=>{
|
|
|
|
|
+ tableLoading.value = false;//关闭表格loading
|
|
|
})
|
|
})
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -601,6 +754,16 @@ const EnterSetQuestion=()=>{
|
|
|
const HandleScanResult=(res:any)=>{
|
|
const HandleScanResult=(res:any)=>{
|
|
|
console.log("打印扫描返回的res", res);
|
|
console.log("打印扫描返回的res", res);
|
|
|
|
|
|
|
|
|
|
+ //未检测到纸张或卡纸(code 502):停止轮询,复位按钮,允许用户重新点击开始扫描(下次直接下发扫描仪指令,不再调后端接口)
|
|
|
|
|
+ if (res.code === 502) {
|
|
|
|
|
+ StopScanStatePolling();
|
|
|
|
|
+ scanLoading.value = false;
|
|
|
|
|
+ scanText.value='开始扫描';
|
|
|
|
|
+ skipCertificateNextScan = true;
|
|
|
|
|
+ ElMessage.error(res.msg || '未检测到纸张或卡纸');
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
if (res.action === 'scanTemplate') {
|
|
if (res.action === 'scanTemplate') {
|
|
|
const img = new Image();
|
|
const img = new Image();
|
|
|
img.crossOrigin = 'Anonymous';
|
|
img.crossOrigin = 'Anonymous';
|
|
@@ -666,18 +829,6 @@ const HandleScanResult=(res:any)=>{
|
|
|
img.src = res.url;
|
|
img.src = res.url;
|
|
|
|
|
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
- if (res.action === 'startScanTemplate') {
|
|
|
|
|
- if (res.code === 502) {
|
|
|
|
|
- scanLoading.value = false;
|
|
|
|
|
- scanText.value='开始扫描';
|
|
|
|
|
- ElMessage.error(res.msg);
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- if (res.code === 200) {
|
|
|
|
|
- ElMessage.success("扫描仪启动成功");
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
onMounted(() => {
|
|
onMounted(() => {
|
|
@@ -691,7 +842,9 @@ onMounted(() => {
|
|
|
scanClientConnected.value = isOnline;
|
|
scanClientConnected.value = isOnline;
|
|
|
// console.log('扫描客户端连接状态:', isOnline, '版本号:', clientVersion);
|
|
// console.log('扫描客户端连接状态:', isOnline, '版本号:', clientVersion);
|
|
|
});
|
|
});
|
|
|
- GetSmartQuestionList();
|
|
|
|
|
|
|
+ ConfigRequestUrlByEnv();//配置请求地址
|
|
|
|
|
+ GetScanAnswerStates();//获取扫描答案状态
|
|
|
|
|
+
|
|
|
GetTemplateInfo();
|
|
GetTemplateInfo();
|
|
|
// 初始化计算
|
|
// 初始化计算
|
|
|
nextTick(() => {
|
|
nextTick(() => {
|
|
@@ -705,6 +858,8 @@ onMounted(() => {
|
|
|
onUnmounted(() => {
|
|
onUnmounted(() => {
|
|
|
// 移除监听,防止内存泄漏
|
|
// 移除监听,防止内存泄漏
|
|
|
window.removeEventListener('resize', CalculateTableHeight)
|
|
window.removeEventListener('resize', CalculateTableHeight)
|
|
|
|
|
+ // 停止扫描状态轮询,防止组件销毁后继续请求
|
|
|
|
|
+ StopScanStatePolling();
|
|
|
})
|
|
})
|
|
|
</script>
|
|
</script>
|
|
|
|
|
|