first
This commit is contained in:
26
src/App.vue
Normal file
26
src/App.vue
Normal file
@ -0,0 +1,26 @@
|
||||
<script setup>
|
||||
// This starter template is using Vue 3 <script setup> SFCs
|
||||
// Check out https://vuejs.org/api/sfc-script-setup.html#script-setup
|
||||
import Greet from "./components/Greet.vue";
|
||||
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div class="container">
|
||||
|
||||
|
||||
<Greet />
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<style scoped>
|
||||
.logo.vite:hover {
|
||||
filter: drop-shadow(0 0 2em #747bff);
|
||||
}
|
||||
|
||||
.logo.vue:hover {
|
||||
filter: drop-shadow(0 0 2em #249b73);
|
||||
/* Your additional CSS code here */
|
||||
|
||||
}
|
||||
</style>
|
||||
251
src/AppHyperSpectral.vue
Normal file
251
src/AppHyperSpectral.vue
Normal file
@ -0,0 +1,251 @@
|
||||
|
||||
<script>
|
||||
import Greet from "./components/Greet.vue";
|
||||
import HyperSpectralMainView from "./components/HyperSpectralMainView.vue";
|
||||
import menubar from "./components/menubar.vue";
|
||||
import siderleft from "./components/siderleft.vue";
|
||||
import apphymain from "./apphymain.js"
|
||||
import setWavelenth from "./components/menubox/SetWavelenth.vue";
|
||||
import {useToast} from "bootstrap-vue-next";
|
||||
import EventBus from "./eventBus.js";
|
||||
import {onMounted} from "vue";
|
||||
import {message} from "@tauri-apps/api/dialog";
|
||||
|
||||
export default {
|
||||
components: {
|
||||
Greet,
|
||||
HyperSpectralMainView,
|
||||
menubar,
|
||||
siderleft,
|
||||
setWavelenth
|
||||
|
||||
},
|
||||
data(){
|
||||
return {
|
||||
modal:false,
|
||||
modaltitle:"test",
|
||||
modalcomponent:null,
|
||||
tourdata:{
|
||||
current:0,
|
||||
steps:[],
|
||||
open:false
|
||||
|
||||
}
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
this.$refs.SiderComponend.methodslist.push(this.$refs.HyperSpectralMainView.plotGraph);
|
||||
EventBus.on('showbox',this.showbox);
|
||||
this.inittour();
|
||||
this.testinmpt();
|
||||
|
||||
},
|
||||
methods: {
|
||||
...apphymain
|
||||
},
|
||||
|
||||
setup()
|
||||
{
|
||||
const {show} = useToast();
|
||||
function showbox(message){
|
||||
if (typeof message === 'string') {
|
||||
message = {title: '提示', body: message}
|
||||
}
|
||||
if (typeof message === 'object') {
|
||||
if (typeof message.title === 'undefined') {
|
||||
message.title = '提示'
|
||||
}
|
||||
if (typeof message.body === 'undefined') {
|
||||
message.body = ''
|
||||
}
|
||||
if (typeof message.interval === 'undefined') {
|
||||
message.interval = 10
|
||||
}
|
||||
|
||||
// if (typeof message.interval === 'undefined') {
|
||||
// message.interval = 10
|
||||
// }
|
||||
|
||||
|
||||
}
|
||||
show?.({
|
||||
props: {
|
||||
headerClass:'hide:true',
|
||||
title: message.title,
|
||||
variant: 'info',
|
||||
pos: 'top-right',
|
||||
value: 2000,
|
||||
interval: message.interval,
|
||||
progressProps: {
|
||||
variant: 'danger',
|
||||
},
|
||||
body: message.body,
|
||||
noCloseButton: false,
|
||||
},
|
||||
})
|
||||
}
|
||||
function showboxmini(message){
|
||||
if (typeof message === 'string') {
|
||||
message = {title: '提示', body: message}
|
||||
}
|
||||
if (typeof message === 'object') {
|
||||
if (typeof message.title === 'undefined') {
|
||||
message.title = '提示'
|
||||
}
|
||||
if (typeof message.body === 'undefined') {
|
||||
message.body = ''
|
||||
}
|
||||
if (typeof message.interval === 'undefined') {
|
||||
message.interval = 10
|
||||
}
|
||||
|
||||
let dataforprocess={
|
||||
percent:100,
|
||||
info: message.body
|
||||
}
|
||||
EventBus.emit('setprogressbar',dataforprocess);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
return {showbox,showboxmini}
|
||||
}
|
||||
|
||||
}
|
||||
</script>
|
||||
|
||||
|
||||
<template>
|
||||
|
||||
<BToastOrchestrator />
|
||||
|
||||
|
||||
<div class="container1">
|
||||
|
||||
<BModal v-model="modal" :title="modaltitle" ok-only body-class="windowmodal" class="bmodalnow" noCloseOnBackdrop hideFooter="true" >
|
||||
<!-- <SetWavelenth></SetWavelenth>-->
|
||||
<component :is="modalcomponent" ref="Commancompent" style="user-select: none;"></component>
|
||||
</BModal>
|
||||
<div class="row menubox">
|
||||
<div class="col-12">
|
||||
<menubar @menubalclicked="onmenuclicked"></menubar>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row sencondebody" >
|
||||
<a-layout>
|
||||
|
||||
|
||||
<a-layout-sider :resize-directions="['right']" style="min-width: 15%;max-width: 50%;" @moving-end="siderresize" >
|
||||
<!-- <div style="position: fixed;width: 0vw;height:0vh; float: left;display:block;order:-10; z-index: 10 !important;top:100px;left: 0px">-->
|
||||
<!-- <Draggable style="position: absolute" >-->
|
||||
<!-- <div>-->
|
||||
<!-- sdfasdfsdfsadf123123123-->
|
||||
<!-- </div>-->
|
||||
<!-- </Draggable>-->
|
||||
<!-- </div>-->
|
||||
<a-dropdown trigger="contextMenu" alignPoint >
|
||||
|
||||
<siderleft ref="SiderComponend"></siderleft>
|
||||
|
||||
<template #content>
|
||||
<a-doption>Option 1</a-doption>
|
||||
<a-doption>Option 2</a-doption>
|
||||
<a-doption>Option 3</a-doption>
|
||||
</template>
|
||||
</a-dropdown>
|
||||
|
||||
|
||||
</a-layout-sider>
|
||||
<a-layout-content style=" position: relative;max-width: 85%;min-width: 50%">
|
||||
<HyperSpectralMainView ref="HyperSpectralMainView"></HyperSpectralMainView>
|
||||
</a-layout-content>
|
||||
</a-layout>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<!-- <a-tour v-model:current="tourdata.current" :open="tourdata.open" :steps="tourdata.steps" @close="handleOpen(false)" />-->
|
||||
|
||||
|
||||
</template>
|
||||
|
||||
<style scoped type="less">
|
||||
|
||||
.container1 {
|
||||
margin: 0 auto;
|
||||
|
||||
padding-top: 0px;;
|
||||
padding-bottom: 0px;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
.col-3 {
|
||||
background-color: #f8f9fa;
|
||||
padding-top: 0px;
|
||||
padding-bottom: 0px;
|
||||
padding: 0px;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
border-right: 1px solid #dee2e6;
|
||||
position: relative;
|
||||
|
||||
}
|
||||
.col-9 {
|
||||
padding: 0px;
|
||||
|
||||
position: relative;
|
||||
|
||||
}
|
||||
.menubox{
|
||||
background-color: #f8f9fa;
|
||||
padding-top: 0px;
|
||||
padding-bottom: 0px;
|
||||
width: 100vw;
|
||||
height: 5vh;
|
||||
border-bottom: 1px solid #dee2e6;
|
||||
max-height:5vh;
|
||||
}
|
||||
.sencondebody{
|
||||
|
||||
padding-top: 0px;
|
||||
padding-bottom: 0px;
|
||||
width: 100vw;
|
||||
height: 95vh;
|
||||
|
||||
}
|
||||
|
||||
|
||||
.bmodalnow{
|
||||
user-select: none;
|
||||
}
|
||||
</style>
|
||||
<style>
|
||||
.modal-dialog{
|
||||
max-width: 90vw;
|
||||
max-height: 90vh;
|
||||
width: 80vw;
|
||||
height: 90vh;
|
||||
padding: 0px;
|
||||
margin: 0px;
|
||||
user-select: none
|
||||
}
|
||||
|
||||
.modal-content
|
||||
{
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
user-select: none
|
||||
}
|
||||
.modal{
|
||||
--bs-modal-width: 90vw !important;
|
||||
--bs-modal-height:90vh !important;
|
||||
user-select: none
|
||||
}
|
||||
|
||||
</style>
|
||||
172
src/apphymain.js
Normal file
172
src/apphymain.js
Normal file
@ -0,0 +1,172 @@
|
||||
|
||||
import {invoke} from "@tauri-apps/api/tauri";
|
||||
import {ref} from "vue";
|
||||
|
||||
import {appWindow, LogicalSize, WebviewWindow} from "@tauri-apps/api/window";
|
||||
import setWavelenth from "./components/menubox/SetWavelenth.vue";
|
||||
import SetName from "./components/menubox/SetName.vue";
|
||||
import SetWorkmode from "./components/menubox/SetWorkmode.vue";
|
||||
import setCalibrate from "./components/menubox/SetCalibrate.vue";
|
||||
import Greet from "./components/Greet.vue";
|
||||
import {$ref} from "vue3-json-editor/dist/vue3-json-editor.cjs.js";
|
||||
//引入
|
||||
|
||||
export default {
|
||||
async onmenuclicked(command){
|
||||
|
||||
console.log("menuclicked main "+command.name)
|
||||
if (command.type=="Set")
|
||||
{
|
||||
if (!this.isDevOpen())
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
if (command.type=="File"){
|
||||
if (command.name=="Advance"){
|
||||
this.modaltitle="高级测试模式";
|
||||
this.modalcomponent=Greet;
|
||||
this.showModal();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
// if (command.name=="setting"){
|
||||
//
|
||||
// this.modaltitle="设置波长";
|
||||
// this.modalcomponent=setWavelenth
|
||||
// this.showModal();
|
||||
// }
|
||||
if (command.name=="DevInfo"){
|
||||
|
||||
let iscommenopen=this.$refs.SiderComponend.SerialInfo.isopen;
|
||||
if (!iscommenopen)
|
||||
{
|
||||
alert("请先打开设备");
|
||||
return
|
||||
}
|
||||
this.modaltitle="设置设备信息";
|
||||
this.modalcomponent=SetName
|
||||
await this.$nextTick();
|
||||
|
||||
this.$refs.Commancompent.name=this.$refs.SiderComponend.Devinfo.name;
|
||||
this.$refs.Commancompent.version=this.$refs.SiderComponend.Devinfo.Version;
|
||||
this.$refs.Commancompent.upother=this.$refs.SiderComponend.GetSenSorInfo
|
||||
|
||||
this.showModal();
|
||||
|
||||
}
|
||||
if (command.name=="Workmode"){
|
||||
this.modaltitle="设置工作模式";
|
||||
|
||||
this.modalcomponent=SetWorkmode
|
||||
await this.$nextTick();
|
||||
this.$refs.Commancompent.GetSenSorInfo();
|
||||
this.showModal();
|
||||
}
|
||||
if(command.name=="Weavelenth")
|
||||
{
|
||||
if (!this.isinAdvanceMode()) return;
|
||||
this.modaltitle="设置波长";
|
||||
this.modalcomponent=setWavelenth
|
||||
await this.$nextTick();
|
||||
// this.$refs.Commancompent.GetSenSorInfo();
|
||||
this.showModal();
|
||||
}
|
||||
if (command.name=="Calibrate")
|
||||
{
|
||||
if (!this.isinAdvanceMode()) return;
|
||||
this.modaltitle="能量定标";
|
||||
this.modalcomponent=setCalibrate
|
||||
await this.$nextTick();
|
||||
// this.$refs.Commancompent.GetSenSorInfo();
|
||||
this.showModal();
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
},
|
||||
|
||||
async newwindow() {
|
||||
const webview = new WebviewWindow("element", {
|
||||
url: "/element",
|
||||
// 可自行添加属性配置 窗口配置
|
||||
width: 2000,
|
||||
height: 900,
|
||||
//center:true,
|
||||
//decorations:false
|
||||
});
|
||||
|
||||
await webview.once("tauri://created", function () {
|
||||
|
||||
// webview window successfully created
|
||||
// 窗口创建成功 打印1
|
||||
console.log(1);
|
||||
});
|
||||
await webview.once("tauri://error", function (e) {
|
||||
// an error happened creating the webview window
|
||||
// 窗口创建失败 打印2
|
||||
console.log(2);
|
||||
});
|
||||
|
||||
|
||||
// testWindow.open();
|
||||
},
|
||||
showModal() {
|
||||
this.modal=!this.modal;
|
||||
|
||||
// alert("showModal")
|
||||
},
|
||||
isDevOpen(){
|
||||
let iscommenopen=this.$refs.SiderComponend.SerialInfo.isopen;
|
||||
if (!iscommenopen)
|
||||
{
|
||||
alert("请先打开设备");
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
},
|
||||
isinAdvanceMode(){
|
||||
let isadvance=this.$refs.SiderComponend.Devinfo.work_mode;
|
||||
if(isadvance!="advanced_mode")
|
||||
{
|
||||
alert("请先切换到高级模式");
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
|
||||
},
|
||||
inittour(){
|
||||
var steps=[
|
||||
{
|
||||
title: 'Save',
|
||||
description: 'Save your changes.',
|
||||
target:()=>this.$refs.SiderComponend.value&& this.$refs.SiderComponend.value.$el,
|
||||
}
|
||||
]
|
||||
this.tourdata.steps=steps;
|
||||
|
||||
|
||||
},
|
||||
siderresize(){
|
||||
this.$refs.HyperSpectralMainView.echartresize();
|
||||
},
|
||||
async testinmpt(){
|
||||
let x=[0.0,0.5, 0.569, 1.138, 1.707, 2.276, 2.845];
|
||||
let y=[0.0, 0.4,0.5, 1.0, 0.5, 0.0, -0.5];
|
||||
let cc=await invoke("interpolate_spline",{x:x,y,step:0.1});
|
||||
console.log(cc);
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
1
src/assets/vue.svg
Normal file
1
src/assets/vue.svg
Normal file
@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="37.07" height="36" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 198"><path fill="#41B883" d="M204.8 0H256L128 220.8L0 0h97.92L128 51.2L157.44 0h47.36Z"></path><path fill="#41B883" d="m0 0l128 220.8L256 0h-51.2L128 132.48L50.56 0H0Z"></path><path fill="#35495E" d="M50.56 0L128 133.12L204.8 0h-47.36L128 51.2L97.92 0H50.56Z"></path></svg>
|
||||
|
After Width: | Height: | Size: 496 B |
194
src/components/Greet.vue
Normal file
194
src/components/Greet.vue
Normal file
@ -0,0 +1,194 @@
|
||||
<script >
|
||||
import { ref } from "vue";
|
||||
import { invoke } from "@tauri-apps/api/tauri";
|
||||
import 'jsoneditor'
|
||||
import { defineComponent, reactive, toRefs } from 'vue'
|
||||
import { Vue3JsonEditor } from 'vue3-json-editor'
|
||||
|
||||
export default {
|
||||
name: "Greet",
|
||||
components: {
|
||||
|
||||
Vue3JsonEditor
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
greetMsg: "",
|
||||
name: "",
|
||||
datatype: "json",
|
||||
ComePort: [],
|
||||
portname: "",
|
||||
bandrate: 115200,
|
||||
Statusnow: { isopen: false,buttonstring:"打开串口" },
|
||||
jsondata: { command: "get_sensor_info" },
|
||||
jsonoutdata: {},
|
||||
|
||||
editorOptions: {
|
||||
onRenderMenu: (menuItems, node) => {
|
||||
// Customize or modify the context menu items here
|
||||
// For example, adding a custom action
|
||||
menuItems.push({
|
||||
label: 'Custom Action',
|
||||
action: () => {
|
||||
// Your custom action logic here
|
||||
console.log('Custom action clicked!');
|
||||
},
|
||||
});
|
||||
|
||||
return menuItems;
|
||||
},
|
||||
},
|
||||
|
||||
|
||||
};
|
||||
},
|
||||
mounted() {
|
||||
var that = this;
|
||||
// Learn more about Tauri commands at https://tauri.app/v1/guides/features/command
|
||||
invoke("getportnames").then((message) => {
|
||||
that.ComePort = message;
|
||||
console.log(message);
|
||||
if (message.length > 0) {
|
||||
that.portname = that.ComePort[0];
|
||||
}
|
||||
});
|
||||
|
||||
},
|
||||
methods: {
|
||||
async greet() {
|
||||
if (this.Statusnow.isopen == false) {
|
||||
alert("串口未打开");
|
||||
return;
|
||||
}
|
||||
var that = this;
|
||||
console.log(this.jsondata);
|
||||
|
||||
invoke("sendtoportAndgetreturn",{data:this.jsondata,datatype:"json"}).then((message) => {
|
||||
that.greetMsg = message;
|
||||
that.jsonoutdata = JSON.parse(message.content);
|
||||
console.log(message);
|
||||
});
|
||||
|
||||
|
||||
},
|
||||
async onJsonChange(json) {
|
||||
console.log('json change', json);
|
||||
this.jsondata = json;
|
||||
},
|
||||
async onModeChange(mode) {
|
||||
console.log('mode change', mode);
|
||||
},
|
||||
async opencom() {
|
||||
if(this.Statusnow.isopen){
|
||||
invoke("closecome").then((message) => {
|
||||
this.greetMsg = message;
|
||||
// alert(message);
|
||||
if (message == "Port is closed") {
|
||||
this.Statusnow.isopen = false;
|
||||
this.Statusnow.buttonstring = "打开串口";
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
}else{
|
||||
var that = this;
|
||||
invoke("opencom",{portname:this.portname,baudrate:this.bandrate}).then((message) => {
|
||||
that.greetMsg = message;
|
||||
console.log(message);
|
||||
// alert(message);
|
||||
if (message == "Port is open") {
|
||||
that.Statusnow.isopen = true;
|
||||
that.Statusnow.buttonstring = "关闭串口";
|
||||
|
||||
|
||||
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
},
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
||||
// const greetMsg = ref("");
|
||||
// const name = ref("");
|
||||
// const datatype = ref("json");
|
||||
|
||||
// async function greet() {
|
||||
// var that= this;
|
||||
// // Learn more about Tauri commands at https://tauri.app/v1/guides/features/command
|
||||
// invoke('getportnames').then((message) =>{
|
||||
// that.greetMsg = message;
|
||||
// console.log(message);
|
||||
|
||||
// })
|
||||
|
||||
// }
|
||||
|
||||
|
||||
|
||||
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div>
|
||||
<p>选择串口号:
|
||||
<select v-model="portname">
|
||||
<option v-for="item in ComePort" :key="item">{{item}}</option>
|
||||
|
||||
</select>
|
||||
<select v-model="bandrate">
|
||||
<option value="4800">4800</option>
|
||||
<option value="9600">9600</option>
|
||||
<option value="19200">19200</option>
|
||||
<option value="38400">38400</option>
|
||||
<option value="57600">57600</option>
|
||||
<option value="115200">115200</option>
|
||||
<option value="480600">480600</option>
|
||||
<option value="921600">921600</option>
|
||||
|
||||
|
||||
</select>
|
||||
<button @click="opencom" >{{Statusnow.buttonstring }}</button>
|
||||
|
||||
<select v-model="datatype" >
|
||||
<option value="string">字符串</option>
|
||||
<option value="json">json</option>
|
||||
<option value="bytes">二进制</option>
|
||||
</select>
|
||||
|
||||
</p>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<input v-if="datatype!='json'" v-model="name" placeholder="Enter your name" />
|
||||
|
||||
<Vue3JsonEditor class="jsonview" v-if="datatype=='json'" lang="zh" :options="editorOptions" v-model="jsondata" @json-change="onJsonChange" @mode-change="onModeChange" />
|
||||
<button @click="greet" style="z-index: 99;">发送</button>
|
||||
<!-- <p>{{ greetMsg }}</p>-->
|
||||
<vue3-json-editor class="jsonview" v-model="jsonoutdata" />
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
</template>
|
||||
<style scoped>
|
||||
|
||||
</style>
|
||||
<style>
|
||||
|
||||
.jsoneditor-tree{
|
||||
min-width: 100px !important;
|
||||
|
||||
}
|
||||
.jsoneditor-outer{
|
||||
min-width: 100px !important;
|
||||
height: 35vh !important;
|
||||
}
|
||||
|
||||
</style>
|
||||
1
src/components/HyperSpectralDeffines.js
Normal file
1
src/components/HyperSpectralDeffines.js
Normal file
@ -0,0 +1 @@
|
||||
|
||||
85
src/components/HyperSpectralMainView.vue
Normal file
85
src/components/HyperSpectralMainView.vue
Normal file
@ -0,0 +1,85 @@
|
||||
<script >
|
||||
|
||||
|
||||
import EventBus from "../eventBus.js";
|
||||
import HyperSpectralMainViewMethods from './HyperSpectralMethod.js';
|
||||
import eventBus from "../eventBus.js";
|
||||
export default {
|
||||
name: 'HyperSpectralMainView',
|
||||
mounted() {
|
||||
this.initChart();
|
||||
eventBus.on("plotsetwavelength",this.setwavelength);
|
||||
eventBus.on('setprogressbar',this.setprogressbar);
|
||||
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
Comname: '请选择',
|
||||
options:[],
|
||||
datatosave:[],
|
||||
percent:0,
|
||||
progressinfo:"",
|
||||
progressstate:false,
|
||||
|
||||
Pathtosave:"",
|
||||
nowNumber:0,
|
||||
Filename:"Plot",
|
||||
pathofdir:"./data",
|
||||
sideropen:false ,
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
...HyperSpectralMainViewMethods,
|
||||
onClose(){
|
||||
this.sideropen=false;
|
||||
},
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
function echartresize()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
</script>
|
||||
|
||||
<template>
|
||||
|
||||
<div class="chart-container" id="charmian" ref="chart" ></div>
|
||||
<BProgress :max="100" class="progressbar" >
|
||||
<BProgressBar style="background-color: #335c60" striped :animated="progressstate"
|
||||
:value="percent"
|
||||
:label="`${(percent).toFixed(2)}%`"
|
||||
|
||||
/>
|
||||
|
||||
</BProgress>
|
||||
<b-form-floating-label style="font-size: 80%;color: #06efcc">{{progressinfo}}</b-form-floating-label>
|
||||
<!-- <a-drawer-->
|
||||
<!-- title="Basic Drawer"-->
|
||||
<!-- placement="right"-->
|
||||
<!-- :closable="false"-->
|
||||
<!-- :open="sideropen"-->
|
||||
<!-- :get-container="false"-->
|
||||
<!-- :style="{ position: 'absolute' }"-->
|
||||
<!-- @close="onClose"-->
|
||||
<!-- >-->
|
||||
<!-- <p>Some contents...</p>-->
|
||||
<!-- </a-drawer>-->
|
||||
</template>
|
||||
|
||||
<style scoped>
|
||||
.chart-container {
|
||||
background-color: #f8f9fa;
|
||||
width:100%;
|
||||
height: 90vh;
|
||||
}
|
||||
.progressbar{
|
||||
width:90%;
|
||||
margin-left: 5%;
|
||||
position: absolute;
|
||||
bottom: 10px;
|
||||
align-self: center;
|
||||
}
|
||||
</style>
|
||||
224
src/components/HyperSpectralMethod.js
Normal file
224
src/components/HyperSpectralMethod.js
Normal file
@ -0,0 +1,224 @@
|
||||
import { fs, dialog } from '@tauri-apps/api';
|
||||
import * as echarts from 'echarts';
|
||||
import { invoke } from "@tauri-apps/api/tauri";
|
||||
import { exit } from '@tauri-apps/api/process';
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
export default {
|
||||
async handlekeydown(event) {
|
||||
|
||||
if (event.code == "Space") {
|
||||
//datatosave 保存
|
||||
console.log(this.datatosave)
|
||||
var data = this.datatosave;
|
||||
var xValues = []
|
||||
|
||||
var yValues = []
|
||||
var lenthofdata = data.length
|
||||
for (var i = 0; i < lenthofdata; i++) {
|
||||
xValues.push(data[i][0]);
|
||||
yValues.push(data[i][1]);
|
||||
}
|
||||
|
||||
var lenth = xValues.length;
|
||||
var strcsv = ""
|
||||
for (var i = 0; i < lenth; i++) {
|
||||
strcsv += xValues[i] + "," + yValues[i] + "\r\n";
|
||||
|
||||
|
||||
}
|
||||
await fs.writeFile(this.Pathtosave, strcsv);
|
||||
// fs.writeFileSync(this.Pathtosave, strcsv);
|
||||
this.nowNumber++;
|
||||
this.Pathtosave = this.pathofdir + "/" + this.Filename + this.nowNumber + ".csv";
|
||||
alert("保存" + this.Pathtosave + "成功")
|
||||
|
||||
|
||||
}
|
||||
},
|
||||
setwavelength(data) {
|
||||
|
||||
this.option.xAxis.max = data.max;
|
||||
this.option.xAxis.min = data.min;
|
||||
|
||||
const chartDom = this.$refs.chart;
|
||||
let chart = echarts.getInstanceByDom(chartDom);
|
||||
chart.setOption(this.option);
|
||||
},
|
||||
plotGraph(data, index) {
|
||||
|
||||
|
||||
|
||||
|
||||
this.option.series[index].data = data;
|
||||
|
||||
const chartDom = this.$refs.chart;
|
||||
|
||||
let chart = echarts.getInstanceByDom(chartDom);
|
||||
chart.setOption(this.option);
|
||||
},
|
||||
setprogressbar(message) {
|
||||
|
||||
if (typeof message === 'undefined') return;
|
||||
if (typeof message === 'object') {
|
||||
if (typeof message.percent === 'undefined') message.percent = this.percent;
|
||||
if (typeof message.info === 'undefined') message.info = this.progressinfo;
|
||||
|
||||
this.percent = message.percent;
|
||||
this.progressinfo = message.info;
|
||||
}
|
||||
|
||||
let percent = this.percent;
|
||||
//如果percent >0 且小于100
|
||||
if (percent > 0 && percent < 100) {
|
||||
this.progressstate = true;
|
||||
} else {
|
||||
this.progressstate = false;
|
||||
}
|
||||
|
||||
|
||||
|
||||
},
|
||||
initChart() {
|
||||
const chartDom = this.$refs.chart;
|
||||
// chartDom.style.width = '100%';
|
||||
// chartDom.style.height = '100%';
|
||||
let chart = echarts.init(chartDom,null,{renderer: 'svg'});
|
||||
|
||||
|
||||
this.option = {
|
||||
legend: {
|
||||
data: ['UP', 'DOWN'], // 图例名称
|
||||
show: true,// 显示图例
|
||||
selectedMode: 'multiple', // 图例的选择模式。默认开启图例开关,可选single,multiple
|
||||
},
|
||||
// ECharts 配置选项
|
||||
xAxis: {
|
||||
type: 'value',
|
||||
boundaryGap: false,// 显示连续的刻度
|
||||
min: 0,
|
||||
max: 1100,
|
||||
dataZoom: [
|
||||
{
|
||||
type: 'inside', // 内置数据区域缩放
|
||||
start: 0, // 初始缩放范围的起始位置(0%)
|
||||
end: 100 // 初始缩放范围的结束位置(100%)
|
||||
}
|
||||
],
|
||||
triggerEvent: true
|
||||
},
|
||||
animation: false,
|
||||
yAxis: {
|
||||
type: 'value',
|
||||
//min:0,
|
||||
},
|
||||
tooltip:{
|
||||
trigger:'axis',
|
||||
|
||||
|
||||
|
||||
|
||||
},
|
||||
axisPointer: {
|
||||
link: { xAxisIndex: 'all' },
|
||||
label: {
|
||||
backgroundColor: '#777'
|
||||
}
|
||||
},
|
||||
grid: {
|
||||
left: '5%',
|
||||
right: '5%',
|
||||
bottom: '5%',
|
||||
top: '5%'
|
||||
},
|
||||
// visualMap: [
|
||||
// {
|
||||
// type: 'continuous',
|
||||
// }
|
||||
// ],
|
||||
dataZoom: [
|
||||
{
|
||||
type: 'slider', // 内置数据区域缩放,包括滚轮缩放
|
||||
xAxisIndex: [0], // 对应 x 轴
|
||||
filterMode: 'none' // 不过滤数据
|
||||
|
||||
},
|
||||
{
|
||||
type: 'slider', // 内置数据区域缩放,包括滚轮缩放
|
||||
yAxisIndex: [0], // 对应 y 轴
|
||||
filterMode: 'none', // 不过滤数据
|
||||
//width :15
|
||||
|
||||
}
|
||||
],
|
||||
|
||||
|
||||
// legend: {
|
||||
// data: ['曲线'], // 图例名称
|
||||
// show: true ,// 显示图例
|
||||
// //selectedMode: 'multiple', // 图例的选择模式。默认开启图例开关,可选single,multiple
|
||||
// },
|
||||
series: [
|
||||
{
|
||||
data: [[1, 150], [2, 230], [3, 224], [4, 218], [5, 135], [6, 147], [7, 260]], // 使用二维数组表示数据点的坐标
|
||||
type: 'line',
|
||||
name: 'UP',
|
||||
symbol: 'none', // 不显示数据点
|
||||
smooth: false, // 不使用平滑处理
|
||||
// step: 'start' // 设置 step 类型的起始位置
|
||||
},
|
||||
{
|
||||
data: [[1, 150], [2, 230], [3, 224], [4, 218], [5, 135], [6, 147], [7, 260]], // 使用二维数组表示数据点的坐标
|
||||
type: 'line',
|
||||
name: 'DOWN',
|
||||
symbol: 'none', // 不显示数据点
|
||||
smooth: false, // 不使用平滑处理
|
||||
//step: 'start' // 设置 step 类型的起始位置
|
||||
}
|
||||
]
|
||||
};
|
||||
|
||||
|
||||
|
||||
window.onresize=function () {
|
||||
chart.resize()
|
||||
}
|
||||
chart.setOption(this.option);
|
||||
chart.on('click', function (params) {
|
||||
console.log(params);
|
||||
});
|
||||
chart.on('legendselectchanged', function (params) {
|
||||
console.log(params);
|
||||
});
|
||||
|
||||
chart.on('click', 'series.line', function (params) {
|
||||
console.log(params);
|
||||
});
|
||||
|
||||
chart.on('mouseover', {seriesIndex: 1, name: 'xx'}, function (params) {
|
||||
console.log(params);
|
||||
});
|
||||
//this.echartresize()
|
||||
},
|
||||
echartresize(){
|
||||
console.log("resize")
|
||||
const chartDom = this.$refs.chart;
|
||||
let chart = echarts.getInstanceByDom(chartDom);
|
||||
chart.resize()
|
||||
},
|
||||
|
||||
|
||||
GetSenSorInfo() {
|
||||
var Command = { command: "get_sensor_info" };
|
||||
let data = {
|
||||
data: Command.toString(),
|
||||
datatype: "json"
|
||||
}
|
||||
SerilPort.SendtoPort(data)
|
||||
console.log(SerilPort.ReadData(0x01));
|
||||
}
|
||||
|
||||
}
|
||||
177
src/components/SerialPort/SerialportMethod.js
Normal file
177
src/components/SerialPort/SerialportMethod.js
Normal file
@ -0,0 +1,177 @@
|
||||
import {invoke} from "@tauri-apps/api/tauri";
|
||||
import CommanDeffine from "../serportdefine.js";
|
||||
import EventBus from "../../eventBus.js";
|
||||
|
||||
async function Dev_Opt() {
|
||||
var Command={command:"start_opt"};
|
||||
let data={
|
||||
data:Command,
|
||||
datatype:"json"
|
||||
}
|
||||
let message=await invoke("sendtoportAndgetreturn",data);
|
||||
if (message.datatype==0x00)
|
||||
{
|
||||
let ret=JSON.parse(message.content);
|
||||
console.log(ret);
|
||||
}
|
||||
await EnsureNotWorking();
|
||||
data.data.command="get_opt";
|
||||
message=await invoke("sendtoportAndgetreturn",data);
|
||||
var shuttertimes=0;
|
||||
if (message.datatype==0x00)
|
||||
{
|
||||
let ret=JSON.parse(message.content);
|
||||
console.log(ret);
|
||||
shuttertimes=ret.opt;
|
||||
}
|
||||
return shuttertimes;
|
||||
|
||||
|
||||
}
|
||||
async function Get_Date_on_Derction(drection,shuttertimes,autoremovedark=false,avgnumber=1) {
|
||||
|
||||
|
||||
var Command={command:"take_one_job"};
|
||||
let data={
|
||||
data:Command,
|
||||
datatype:"json"
|
||||
}
|
||||
data.data.command="start_collect";
|
||||
if (drection=="UP")
|
||||
{
|
||||
data.data.direction="up";
|
||||
data.data.shutter_time=Number(shuttertimes);
|
||||
|
||||
}else if (drection=="DOWN")
|
||||
{
|
||||
data.data.direction="down";
|
||||
data.data.shutter_time=Number(shuttertimes);
|
||||
}else if(drection=="DARK")
|
||||
{
|
||||
data.data.direction="dark";
|
||||
data.data.shutter_time=Number(shuttertimes);
|
||||
}
|
||||
if (autoremovedark&&drection!="DARK")
|
||||
{
|
||||
data.data.remove_dark="yes";
|
||||
}else {
|
||||
data.data.remove_dark="no";
|
||||
}
|
||||
data.data.collect_times=avgnumber;
|
||||
let message=await invoke("sendtoportAndgetreturn",data);
|
||||
await EnsureNotWorking();
|
||||
|
||||
|
||||
//获取数据 UPDN
|
||||
data = {
|
||||
data: {
|
||||
command: "get_data",
|
||||
return_data_type: CommanDeffine.DataTypeforSend.UpDN
|
||||
},
|
||||
datatype: "json"
|
||||
}
|
||||
if(drection=="UP")
|
||||
{
|
||||
data.data.return_data_type=CommanDeffine.DataTypeforSend.UpDN;
|
||||
}else if(drection=="DOWN")
|
||||
{
|
||||
data.data.return_data_type=CommanDeffine.DataTypeforSend.DOWNDN;
|
||||
} else if (drection=="DARK")
|
||||
{
|
||||
data.data.return_data_type=CommanDeffine.DataTypeforSend.UpDarkDN;
|
||||
}
|
||||
|
||||
message=await invoke("sendtoportAndgetreturn",data);
|
||||
while (message.datatype!=0x02)
|
||||
{
|
||||
message=await invoke("sendtoportAndgetreturn",data);
|
||||
}
|
||||
return message.data
|
||||
}
|
||||
|
||||
async function Get_Device_Info() {
|
||||
var Command={command:"get_sensor_info"};
|
||||
let data={
|
||||
data:Command,
|
||||
datatype:"json"
|
||||
}
|
||||
let message=await invoke("sendtoportAndgetreturn",data);
|
||||
if (message.datatype==108)
|
||||
{
|
||||
return {error:"error"};
|
||||
}
|
||||
let json=JSON.parse(message.content);
|
||||
return json;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
async function EnsureNotWorking(){
|
||||
let data={
|
||||
data:{
|
||||
command:"get_caiji_state"
|
||||
},
|
||||
datatype:"json"
|
||||
}
|
||||
let message=await invoke("sendtoportAndgetreturn",data);
|
||||
let ret=JSON.parse(message.content);
|
||||
|
||||
while (ret.caiji_state!="finish")
|
||||
{
|
||||
|
||||
//发送进度信息
|
||||
let dataforprocess={
|
||||
percent:ret.percent,
|
||||
info:ret.info
|
||||
}
|
||||
EventBus.emit('setprogressbar',dataforprocess);
|
||||
await delay(1000);
|
||||
message=await invoke("sendtoportAndgetreturn",data);
|
||||
|
||||
if (message.content=="g time no data retrun")
|
||||
{
|
||||
alert("长时间没有数据返回");
|
||||
return;
|
||||
}
|
||||
ret=JSON.parse(message.content);
|
||||
|
||||
}
|
||||
let dataforprocess={
|
||||
percent:100,
|
||||
info:""
|
||||
}
|
||||
EventBus.emit('setprogressbar',dataforprocess);
|
||||
}
|
||||
function delay(ms) {
|
||||
return new Promise(resolve => setTimeout(resolve, ms));
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
export default {
|
||||
Dev_Opt,
|
||||
Get_Date_on_Derction,
|
||||
Get_Device_Info
|
||||
|
||||
|
||||
|
||||
}
|
||||
431
src/components/SiderleftSerilportMethod.js
Normal file
431
src/components/SiderleftSerilportMethod.js
Normal file
@ -0,0 +1,431 @@
|
||||
import {invoke} from "@tauri-apps/api/tauri";
|
||||
import {ref} from "vue";
|
||||
import CommanDeffine from "./serportdefine.js";
|
||||
import EventBus from "../eventBus.js";
|
||||
import SerialportMethod from "./SerialPort/SerialportMethod.js";
|
||||
export default {
|
||||
async listSerialPorts() {
|
||||
|
||||
let that=this;
|
||||
var i=0;
|
||||
var aa=await invoke("getportnames");
|
||||
invoke("getportnames").then((message) => {
|
||||
message.forEach(function (port) {
|
||||
console.log(port.path);
|
||||
that.options.push({value:port,label:port,index:i++})
|
||||
})
|
||||
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
},
|
||||
async initserialport() {
|
||||
if (this.Comname == "请选择") {
|
||||
alert("请选择串口");
|
||||
return
|
||||
}
|
||||
var selectitem = document.getElementById("selectitem");
|
||||
var btn = document.getElementById("opencom");
|
||||
|
||||
//禁用
|
||||
selectitem.disabled = true;
|
||||
var btnn = document.getElementById("closecomeside");
|
||||
btnn.disabled = false;
|
||||
this.cssme.comportvariant = "success";
|
||||
|
||||
// let buffer = Buffer.alloc(0);
|
||||
let portinfo ={
|
||||
portname: this.Comname,
|
||||
baudrate: 115200,
|
||||
}
|
||||
let ret= await invoke("opencom",portinfo);
|
||||
if (ret!="Port is open")
|
||||
{
|
||||
EventBus.emit('showbox',{title:"设备",body:"打开串口失败"});
|
||||
return
|
||||
}
|
||||
|
||||
|
||||
var isopen=await this.GetSenSorInfo();
|
||||
this.SerialInfo.isopen=isopen;
|
||||
if (isopen)
|
||||
{
|
||||
btn.disabled = true;
|
||||
EventBus.emit('showbox',{title:"设备",body:"打开串口成功"});
|
||||
}else
|
||||
{
|
||||
btn.disabled = false;
|
||||
EventBus.emit('showbox',{title:"设备",body:"打开串口失败,请更换串口 或者检查设备是否连接"});
|
||||
}
|
||||
|
||||
|
||||
|
||||
// alert("打开串口成功");
|
||||
},
|
||||
async closecomport() {
|
||||
var btn = document.getElementById("opencom");
|
||||
btn.disabled = false;
|
||||
var btnn = document.getElementById("closecomeside");
|
||||
btnn.disabled = true;
|
||||
alert(await invoke("closecome"));
|
||||
this.SerialInfo.isopen=false;
|
||||
|
||||
|
||||
},
|
||||
async Dingbiao_OPT(){
|
||||
|
||||
|
||||
this.iscollecting=true;
|
||||
|
||||
this.ShutterTime[0]=await SerialportMethod.Dev_Opt();
|
||||
this.ShutterTime[1]=this.ShutterTime[0];
|
||||
this.iscollecting=false;
|
||||
},
|
||||
async GetoneData(event,caijiavgNumber=1){
|
||||
let caijimoshi=this.Devinfo.work_mode;
|
||||
if (caijimoshi=="manual_mode") {
|
||||
await this.GetoneDataall();
|
||||
}
|
||||
if (caijimoshi=="advanced_mode")
|
||||
{
|
||||
if (this.caijidirection=="UP")
|
||||
await this.GetDataDrection("UP",caijiavgNumber);
|
||||
if (this.caijidirection=="DOWN")
|
||||
await this.GetDataDrection("DOWN",caijiavgNumber);
|
||||
if (this.caijidirection=="ALL")
|
||||
{
|
||||
await this.GetDataDrection("UP",caijiavgNumber);
|
||||
await delay(1000)
|
||||
await this.GetDataDrection("DOWN",caijiavgNumber);
|
||||
}
|
||||
if(this.caijidirection=="DARK")
|
||||
{
|
||||
await this.GetDataDrection("DARK",caijiavgNumber);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
},
|
||||
async GetDataDrection(drection,avgnumber=1){
|
||||
this.iscollecting=true;
|
||||
var shuttertimes=1;
|
||||
if (drection=="UP")
|
||||
{
|
||||
shuttertimes=Number(this.ShutterTime[0]);
|
||||
}else if (drection=="DOWN")
|
||||
{
|
||||
shuttertimes=Number(this.ShutterTime[1]);
|
||||
|
||||
}else if(drection=="DARK")
|
||||
{
|
||||
shuttertimes=Number(this.ShutterTime[0]);
|
||||
}
|
||||
|
||||
|
||||
|
||||
//获取波长系数
|
||||
let coeffweave1=this.Devinfo.bochangxishu.a0;
|
||||
let coeffweave2=this.Devinfo.bochangxishu.a1;
|
||||
let coeffweave3=this.Devinfo.bochangxishu.a2;
|
||||
let coeffweave4=this.Devinfo.bochangxishu.a3;
|
||||
//获取数据 UPDN
|
||||
|
||||
|
||||
let datatoshow=await SerialportMethod.Get_Date_on_Derction(drection,shuttertimes,this.autoremovedark,avgnumber);
|
||||
if (this.dataprocessconfig.useSG)
|
||||
{
|
||||
datatoshow.data= await invoke("sg_smooth",{data:datatoshow.data,window:31,order:7});
|
||||
// console.log(smooth);
|
||||
}
|
||||
if (this.dataprocessconfig.usehighpass)
|
||||
{
|
||||
datatoshow.data=await invoke("Gaussian_filter_high",{data:datatoshow.data,sigma:30});
|
||||
//console.log(aaa);
|
||||
}
|
||||
|
||||
|
||||
|
||||
let lenthofdata=datatoshow.data.length;
|
||||
var temp=[];
|
||||
// for (var i=0;i<lenthofdata;i++)
|
||||
// {
|
||||
// temp.push(datatoshow.data[2047-i])
|
||||
// }
|
||||
// datatoshow.data=temp;
|
||||
|
||||
|
||||
|
||||
let dataforshow=[];
|
||||
for (var i=0;i<lenthofdata;i++)
|
||||
{
|
||||
var weave=coeffweave1*i*i*i+coeffweave2*i*i+coeffweave3*i+coeffweave4;
|
||||
dataforshow.push([weave,datatoshow.data[i]]);
|
||||
}
|
||||
if (drection=="UP")
|
||||
{
|
||||
this.dataup=datatoshow;
|
||||
this.datainfoup.infolist=[];
|
||||
this.datainfoup.hasrecive=true;
|
||||
this.datainfoup.infolist.push({key:"intertime",value:datatoshow.shutter_time});
|
||||
this.datainfoup.infolist.push({key:"序号",value:datatoshow.index});
|
||||
this.datainfoup.infolist.push({key:"方向",value:datatoshow.direction});
|
||||
this.Senddatatoother(dataforshow,0);
|
||||
}else if (drection=="DOWN"){
|
||||
this.datadown=datatoshow;
|
||||
this.datainfodown.hasrecive=true;
|
||||
this.datainfodown.infolist=[];
|
||||
this.datainfodown.infolist.push({key:"intertime",value:datatoshow.shutter_time});
|
||||
this.datainfodown.infolist.push({key:"序号",value:datatoshow.index});
|
||||
this.datainfodown.infolist.push({key:"方向",value:datatoshow.direction});
|
||||
this.Senddatatoother(dataforshow,1);
|
||||
}
|
||||
if (drection=="DARK"){
|
||||
this.dataup=datatoshow;
|
||||
this.datainfoup.infolist=[];
|
||||
this.datainfoup.hasrecive=true;
|
||||
this.datainfoup.infolist.push({key:"intertime",value:datatoshow.shutter_time});
|
||||
this.datainfoup.infolist.push({key:"序号",value:datatoshow.index});
|
||||
this.datainfoup.infolist.push({key:"方向",value:datatoshow.direction});
|
||||
this.Senddatatoother(dataforshow,0);
|
||||
}
|
||||
|
||||
|
||||
this.iscollecting=false;
|
||||
|
||||
|
||||
|
||||
|
||||
},
|
||||
async EnsureNotWorking(){
|
||||
let data={
|
||||
data:{
|
||||
command:"get_caiji_state"
|
||||
},
|
||||
datatype:"json"
|
||||
}
|
||||
let message=await invoke("sendtoportAndgetreturn",data);
|
||||
let ret=JSON.parse(message.content);
|
||||
|
||||
while (ret.caiji_state!="finish")
|
||||
{
|
||||
|
||||
//发送进度信息
|
||||
let dataforprocess={
|
||||
percent:ret.percent,
|
||||
info:ret.info
|
||||
}
|
||||
EventBus.emit('setprogressbar',dataforprocess);
|
||||
await delay(100);
|
||||
message=await invoke("sendtoportAndgetreturn",data);
|
||||
|
||||
if (message.content=="g time no data retrun")
|
||||
{
|
||||
alert("长时间没有数据返回");
|
||||
return;
|
||||
}
|
||||
ret=JSON.parse(message.content);
|
||||
|
||||
}
|
||||
let dataforprocess={
|
||||
percent:100,
|
||||
info:""
|
||||
}
|
||||
EventBus.emit('setprogressbar',dataforprocess);
|
||||
|
||||
},
|
||||
async GetoneDataall(){
|
||||
this.iscollecting=true;
|
||||
var Command={command:"take_one_job"};
|
||||
let data={
|
||||
data:Command,
|
||||
datatype:"json"
|
||||
}
|
||||
if (1)
|
||||
{
|
||||
/////////////////////////////////////////////
|
||||
let message =await invoke("sendtoport",data);
|
||||
let data2={
|
||||
commanid:0x00,
|
||||
waitTimeJson:1
|
||||
}
|
||||
let message2=await invoke("readformport",data2);
|
||||
await delay(500);
|
||||
await this.EnsureNotWorking();
|
||||
await invoke("clearportbuff");
|
||||
|
||||
}
|
||||
|
||||
//获取波长系数
|
||||
let coeffweave1=this.Devinfo.bochangxishu.a0;
|
||||
let coeffweave2=this.Devinfo.bochangxishu.a1;
|
||||
let coeffweave3=this.Devinfo.bochangxishu.a2;
|
||||
let coeffweave4=this.Devinfo.bochangxishu.a3;
|
||||
//获取数据 UPDN
|
||||
data = {
|
||||
data: {
|
||||
command: "get_data",
|
||||
return_data_type: CommanDeffine.DataTypeforSend.UpDN
|
||||
},
|
||||
datatype: "json"
|
||||
}
|
||||
let message1=await invoke("sendtoportAndgetreturn",data);
|
||||
while (message1.datatype!=0x02)
|
||||
{
|
||||
message1=await invoke("sendtoportAndgetreturn",data);
|
||||
}
|
||||
|
||||
let datatoshowup=message1.data;
|
||||
this.dataup=datatoshowup;
|
||||
let lenthofdataup=datatoshowup.data.length;
|
||||
let dataforshowup=[];
|
||||
for (var i=0;i<lenthofdataup;i++)
|
||||
{
|
||||
var weave=coeffweave1*i*i*i+coeffweave2*i*i+coeffweave3*i+coeffweave4;
|
||||
dataforshowup.push([weave,datatoshowup.data[2048-i-1]]);
|
||||
}
|
||||
this.datainfoup.infolist=[];
|
||||
this.datainfoup.hasrecive=true;
|
||||
|
||||
this.datainfoup.infolist.push({key:"intertime",value:datatoshowup.shutter_time});
|
||||
this.datainfoup.infolist.push({key:"序号",value:datatoshowup.index});
|
||||
this.datainfoup.infolist.push({key:"方向",value:datatoshowup.direction});
|
||||
//this.datainfoup.data.push({key:"温度",value:dataforshowup.temperature[0]});
|
||||
|
||||
// this.datainfoup.data.push("序号",dataforshowup.index);
|
||||
|
||||
// this.datainfoup.data.push("方向",dataforshowup.direction);
|
||||
// this.datainfoup.data.push("温度",dataforshowup.temperature[0]);
|
||||
|
||||
|
||||
|
||||
this.Senddatatoother(dataforshowup,0);
|
||||
|
||||
data = {
|
||||
data: {
|
||||
command: "get_data",
|
||||
return_data_type: CommanDeffine.DataTypeforSend.DOWNDN
|
||||
},
|
||||
datatype: "json"
|
||||
}
|
||||
let messagedown=await invoke("sendtoportAndgetreturn",data);
|
||||
while (messagedown.datatype!=0x02)
|
||||
{
|
||||
messagedown=await invoke("sendtoportAndgetreturn",data);
|
||||
}
|
||||
let datatoshowdown=messagedown.data;
|
||||
this.datadown=datatoshowdown;
|
||||
let lenthofdatadown=datatoshowdown.data.length;
|
||||
let dataforshowdown=[];
|
||||
for (var i=0;i<lenthofdatadown;i++)
|
||||
{
|
||||
var weave=coeffweave1*i*i*i+coeffweave2*i*i+coeffweave3*i+coeffweave4;
|
||||
dataforshowdown.push([weave,datatoshowdown.data[2048-i-1]]);
|
||||
}
|
||||
this.datainfodown.hasrecive=true;
|
||||
this.datainfodown.infolist=[];
|
||||
this.datainfodown.infolist.push({key:"intertime",value:datatoshowdown.shutter_time});
|
||||
this.datainfodown.infolist.push({key:"序号",value:datatoshowdown.index});
|
||||
this.datainfodown.infolist.push({key:"方向",value:datatoshowdown.direction});
|
||||
//this.datainfodown.data.push("序号",datatoshowdown.index);
|
||||
//this.datainfodown.data.push("方向",datatoshowdown.direction);
|
||||
//this.datainfodown.data.push("温度",datatoshowdown.temperature[0]);
|
||||
this.Senddatatoother(dataforshowdown,1);
|
||||
|
||||
this.iscollecting=false;
|
||||
|
||||
|
||||
|
||||
//获取数据
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
},
|
||||
Senddatatoother( data,index){
|
||||
let methodslist = this.methodslist;
|
||||
if (methodslist.length == 0) {
|
||||
return;
|
||||
}
|
||||
for (var i=0;i<methodslist.length;i++)
|
||||
{
|
||||
methodslist[i](data,index);
|
||||
}
|
||||
|
||||
|
||||
// foteach(methodslist, function (index, item) {
|
||||
// item.method(data);
|
||||
// });
|
||||
},
|
||||
async GetSenSorInfo(){
|
||||
var Command={command:"get_sensor_info"};
|
||||
let data={
|
||||
data:Command,
|
||||
datatype:"json"
|
||||
}
|
||||
let that = this;
|
||||
let message=await invoke("sendtoportAndgetreturn",data);
|
||||
if (message.datatype==108)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
let json=JSON.parse(message.content);
|
||||
this.Devinfo=json;
|
||||
|
||||
//获取波长系数
|
||||
let coeffweave1=this.Devinfo.bochangxishu.a0;
|
||||
let coeffweave2=this.Devinfo.bochangxishu.a1;
|
||||
let coeffweave3=this.Devinfo.bochangxishu.a2;
|
||||
let coeffweave4=this.Devinfo.bochangxishu.a3;
|
||||
var wevaconfig={
|
||||
min:coeffweave1*0*0*0+coeffweave2*0*0+coeffweave3*0+coeffweave4,
|
||||
max:coeffweave1*2048*2048*2048+coeffweave2*2048*2048+coeffweave3*2048+coeffweave4
|
||||
|
||||
}
|
||||
EventBus.emit('plotsetwavelength',wevaconfig);
|
||||
|
||||
this.Devinfo.SerilNumber=json.serialnumber;
|
||||
if (json.caiji_mode==1) {
|
||||
this.Devinfo.Caji_mode = "连续采集";
|
||||
}else{
|
||||
this.Devinfo.Caji_mode = "单次采集";
|
||||
}
|
||||
this.Devinfo.name=json.name;
|
||||
this.Devinfo.Version=json.version;
|
||||
switch (json.return_data_type) {
|
||||
case 0x10:
|
||||
this.Devinfo.Datatype="DN/Dark";
|
||||
break;
|
||||
case 0x00:
|
||||
this.Devinfo.Datatype="DN";
|
||||
break;
|
||||
case 0x01:
|
||||
this.Devinfo.Datatype="Radiance";
|
||||
break;
|
||||
case 0x11:
|
||||
this.Devinfo.Datatype="Radiance/Dark";
|
||||
break;
|
||||
case 0x30:
|
||||
this.Devinfo.Datatype="Dark";
|
||||
break;
|
||||
default:
|
||||
this.Devinfo.Datatype="未知";
|
||||
break;
|
||||
}
|
||||
this.devinfoshow.infolist=[];
|
||||
this.devinfoshow.infolist.push({key:"设备名称",value:this.Devinfo.name});
|
||||
this.devinfoshow.infolist.push({key:"设备序列号",value:this.Devinfo.SerilNumber});
|
||||
this.devinfoshow.infolist.push({key:"采集模式",value:this.Devinfo.Caji_mode});
|
||||
this.devinfoshow.infolist.push({key:"数据类型",value:this.Devinfo.Datatype});
|
||||
return true;
|
||||
}
|
||||
}
|
||||
function delay(ms) {
|
||||
return new Promise(resolve => setTimeout(resolve, ms));
|
||||
}
|
||||
34
src/components/commentep.vue
Normal file
34
src/components/commentep.vue
Normal file
@ -0,0 +1,34 @@
|
||||
<script>
|
||||
import {invoke} from "@tauri-apps/api/tauri";
|
||||
export default {
|
||||
name: "commentep",
|
||||
data(){
|
||||
return {
|
||||
Devinfo:{
|
||||
work_mode:0,
|
||||
}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
async GetSenSorInfo() {
|
||||
var Command = {command: "get_sensor_info"};
|
||||
let data = {
|
||||
data: Command,
|
||||
datatype: "json"
|
||||
}
|
||||
let message = await invoke("sendtoportAndgetreturn", data);
|
||||
this.Devinfo = JSON.parse(message);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
</script>
|
||||
|
||||
<template>
|
||||
|
||||
</template>
|
||||
|
||||
<style scoped>
|
||||
|
||||
</style>
|
||||
3
src/components/config.json
Normal file
3
src/components/config.json
Normal file
@ -0,0 +1,3 @@
|
||||
{
|
||||
"pathofsave": "./data"
|
||||
}
|
||||
166
src/components/menubar.vue
Normal file
166
src/components/menubar.vue
Normal file
@ -0,0 +1,166 @@
|
||||
<script >
|
||||
import { BDropdownItem,BDropdown,BDropdownDivider,BButtonGroup,BButton,BModal,BNavbar,BNavbarBrand,BNavbarNav,BNavItem,BNavItemDropdown,BToast,useToast } from 'bootstrap-vue-next';
|
||||
|
||||
import { ref,Teleport} from 'vue';
|
||||
|
||||
import EventBus from "../eventBus.js";
|
||||
|
||||
export default {
|
||||
name: 'menubar',
|
||||
components: {
|
||||
BDropdownItem,
|
||||
BDropdown,
|
||||
BDropdownDivider,
|
||||
BButtonGroup,
|
||||
BButton,
|
||||
BModal,
|
||||
BNavbar,
|
||||
BNavbarBrand,
|
||||
BNavbarNav,
|
||||
BNavItem,
|
||||
BNavItemDropdown,
|
||||
BToast
|
||||
|
||||
},
|
||||
emits: ['menubalclicked'],
|
||||
data() {
|
||||
return {
|
||||
msg: 'Welcome to Your Vue.js App',
|
||||
modal:false,
|
||||
|
||||
}
|
||||
},
|
||||
setup(props, context) {
|
||||
const active = ref(false);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
return {active}
|
||||
|
||||
},
|
||||
mounted() {
|
||||
window.addEventListener("keydown",this.handlekeydown)
|
||||
},
|
||||
methods: {
|
||||
showbox(){
|
||||
EventBus.emit('showbox',"hello","提示11")
|
||||
},
|
||||
|
||||
onmenuclick(type, name) {
|
||||
console.log("menu " + name + " click");
|
||||
let command = {
|
||||
name: name,
|
||||
type: type
|
||||
}
|
||||
this.$emit("menubalclicked", command)
|
||||
},
|
||||
handlekeydown(event) {
|
||||
// console.log(event.key);
|
||||
if (event.ctrlKey) {
|
||||
if (event.key == "n" || event.key == "N") {
|
||||
this.onmenuclick('Set', 'Workmode');
|
||||
}
|
||||
if (event.key == "d" || event.key == "D") {
|
||||
this.onmenuclick('Set', 'DevInfo');
|
||||
}
|
||||
if (event.key == "w" || event.key == "W") {
|
||||
this.onmenuclick('Set', 'Weavelenth');
|
||||
}
|
||||
if (event.key == "c" || event.key == "C") {
|
||||
this.onmenuclick('Set', 'Calibrate');
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
</script>
|
||||
|
||||
|
||||
<!--<script setup lang="ts">-->
|
||||
<!--import { BDropdownItem,BDropdown,BDropdownDivider,BButtonGroup,BButton,BModal,BNavbar,BNavbarBrand,BNavbarNav,BNavItem,BNavItemDropdown,BToast,useToast } from 'bootstrap-vue-next';-->
|
||||
<!--import { ref} from 'vue';-->
|
||||
<!--const {show1} = useToast();-->
|
||||
<!--const active = ref(false)-->
|
||||
<!--</script>-->
|
||||
<template>
|
||||
<BNavbar variant="dark" v-b-color-mode="'dark'" style="height: 5vh">
|
||||
|
||||
<BNavbarNav>
|
||||
<BNavItemDropdown text="文件" right>
|
||||
<BDropdownItem href="#">新建</BDropdownItem>
|
||||
<BDropdownItem href="#" >打开</BDropdownItem>
|
||||
<BDropdownItem href="#">保存</BDropdownItem>
|
||||
<BDropdownItem href="#">另存为</BDropdownItem>
|
||||
<BDropdownDivider></BDropdownDivider>
|
||||
<BDropdownItem href="#">退出</BDropdownItem>
|
||||
<BDropdownItem href="#" @click="onmenuclick('File','Advance')">高级</BDropdownItem>
|
||||
|
||||
</BNavItemDropdown>
|
||||
|
||||
<!-- <!– Navbar dropdowns –>-->
|
||||
<!-- <BNavItemDropdown text="窗口" right>-->
|
||||
|
||||
<!-- <BDropdownItem @click="showbox">EN</BDropdownItem>-->
|
||||
<!-- <BDropdownItem >ES</BDropdownItem>-->
|
||||
<!-- <BDropdownItem href="#">RU</BDropdownItem>-->
|
||||
<!-- <BDropdownItem href="#">FA</BDropdownItem>-->
|
||||
<!-- </BNavItemDropdown>-->
|
||||
|
||||
<BNavItemDropdown text="设置" right>
|
||||
<BDropdownItem @click="onmenuclick('Set','Workmode')">工作模式</BDropdownItem>
|
||||
<BDropdownItem @click="onmenuclick('Set','DevInfo')">设备信息</BDropdownItem>
|
||||
<BDropdownItem @click="onmenuclick('Set','Weavelenth')">波长系数</BDropdownItem>
|
||||
<BDropdownItem @click="onmenuclick('Set','Calibrate')">定标</BDropdownItem>
|
||||
</BNavItemDropdown>
|
||||
<!-- <Teleport to="body">-->
|
||||
<!-- <div class="toast-container position-fixed " style="top:0px;right: 0px;width: 300px" >-->
|
||||
<!-- <BToast v-model="active" variant="info" interval="10" value="100" progress-props="{-->
|
||||
<!-- variant: 'danger',-->
|
||||
<!-- },">-->
|
||||
<!-- <template #title>-->
|
||||
<!-- Title-->
|
||||
<!-- </template>-->
|
||||
<!-- 你好-->
|
||||
<!-- </BToast>-->
|
||||
<!-- </div>-->
|
||||
<!-- </Teleport>-->
|
||||
<!-- <BButton @click="active = !active">Toggle</BButton>-->
|
||||
</BNavbarNav>
|
||||
<div class="btgroup">
|
||||
|
||||
<b-button variant="secondary" pill class="siglebt">DC</b-button>
|
||||
<b-button variant="secondary" pill class="siglebt">Rad</b-button>
|
||||
<b-button variant="secondary" pill class="siglebt">WR</b-button>
|
||||
<b-button variant="secondary" pill class="siglebt">OPT</b-button>
|
||||
</div>
|
||||
</BNavbar>
|
||||
</template>
|
||||
|
||||
<style scoped>
|
||||
.navbar {
|
||||
background-color: #f8f9fa;
|
||||
width: 100vw;
|
||||
}
|
||||
.btgroup{
|
||||
position: absolute;
|
||||
right: 15%;
|
||||
}
|
||||
.siglebt{
|
||||
radio: 50%;
|
||||
font-size: 10px;
|
||||
height: 40px;
|
||||
width: 40px;
|
||||
text-align: center;
|
||||
padding: 0px;
|
||||
margin-left: 10px;
|
||||
}
|
||||
</style>
|
||||
597
src/components/menubox/SetCalibrate.vue
Normal file
597
src/components/menubox/SetCalibrate.vue
Normal file
@ -0,0 +1,597 @@
|
||||
<script>
|
||||
|
||||
import SerialportMethod from "../SerialPort/SerialportMethod.js";
|
||||
import * as echarts from "echarts";
|
||||
import EventBus from "../../eventBus.js";
|
||||
import {dialog, fs} from "@tauri-apps/api";
|
||||
import {invoke} from "@tauri-apps/api/tauri";
|
||||
export default {
|
||||
name: "SetCalibrate",
|
||||
data(){
|
||||
return {
|
||||
shutter_time_up:1,
|
||||
shutter_time_down:1,
|
||||
option_up:{},
|
||||
option_down:{},
|
||||
option_lamp:{},
|
||||
Devinfo:{
|
||||
work_mode:0,
|
||||
},
|
||||
DataUP:{shutter_time:0,value_lable:0},
|
||||
DataDown:{shutter_time:0,value_lable:0},
|
||||
LampData:{value_lable:0},
|
||||
caijicishu:[1,1],
|
||||
upGain:{gain:[],shutter_time:0},
|
||||
downGain:{gain:[],shutter_time:0},
|
||||
|
||||
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
//100ms 后执行
|
||||
setTimeout(() => {
|
||||
this.initChart();
|
||||
}, 100);
|
||||
// setTimeout(() => {
|
||||
// this.readFileAndParse()
|
||||
// }, 1000);
|
||||
|
||||
// this.initChart();
|
||||
},
|
||||
methods: {
|
||||
async readFileAndParse() {
|
||||
|
||||
var options= {
|
||||
defaultPath: "../",
|
||||
directory: false,
|
||||
title: "请选择保存路径",
|
||||
}
|
||||
var pathofdir=await dialog.open(options);
|
||||
|
||||
try {
|
||||
// 读取文件内容
|
||||
const data = await fs.readTextFile(pathofdir);
|
||||
|
||||
// 解析文件内容
|
||||
const lines = data.split('\n');
|
||||
const valueLine = lines.shift(); // 读取第一行
|
||||
const [key, value] = valueLine.split('='); // 解析第一行内容
|
||||
const valueVar = parseFloat(value); // 将 value 转换为数字
|
||||
|
||||
const weaveValues = [];
|
||||
const valueValues = [];
|
||||
|
||||
// 解析剩余行的内容
|
||||
for (const line of lines) {
|
||||
if (line.trim() !== '') { // 排除空行
|
||||
const [weave, val] = line.split(' ').map(Number); // 将每一行的两个值转换为数字
|
||||
weaveValues.push(weave*1000);
|
||||
valueValues.push(val);
|
||||
}
|
||||
}
|
||||
let coeffweave1=this.Devinfo.bochangxishu.a0;
|
||||
let coeffweave2=this.Devinfo.bochangxishu.a1;
|
||||
let coeffweave3=this.Devinfo.bochangxishu.a2;
|
||||
let coeffweave4=this.Devinfo.bochangxishu.a3;
|
||||
let lenthofdata=2048;
|
||||
let weavetarget=[];
|
||||
for (var i=0;i<lenthofdata;i++)
|
||||
{
|
||||
var weave=coeffweave1*i*i*i+coeffweave2*i*i+coeffweave3*i+coeffweave4;
|
||||
weavetarget.push(weave);
|
||||
|
||||
}
|
||||
let valuetarget= await invoke("interpolate_spline_at_points",{
|
||||
x:weaveValues,
|
||||
y:valueValues,
|
||||
xTarget:weavetarget
|
||||
});
|
||||
// console.log(valuetarget);
|
||||
this.LampData={weave:weavetarget,value:valuetarget,value_lable:valueVar};
|
||||
var dataforshow=[];
|
||||
for (var i=0;i<lenthofdata;i++)
|
||||
{
|
||||
dataforshow.push([weavetarget[i],valuetarget[i]]);
|
||||
}
|
||||
var char_lamp=echarts.getInstanceByDom(this.$refs.chart_lamp);
|
||||
this.option_lamp.series[0].data=dataforshow;
|
||||
char_lamp.setOption(this.option_lamp);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
} catch (err) {
|
||||
console.error('Error reading file:', err);
|
||||
}
|
||||
},
|
||||
async OPT_devic(dire) {
|
||||
var shuttertime = await SerialportMethod.Dev_Opt();
|
||||
if (dire == 0) this.shutter_time_up = shuttertime;
|
||||
else this.shutter_time_down = shuttertime;
|
||||
|
||||
},
|
||||
async initChart() {
|
||||
this.Devinfo= await SerialportMethod.Get_Device_Info();
|
||||
var coeff=[];
|
||||
coeff[0]=this.Devinfo.bochangxishu.a0;
|
||||
coeff[1]=this.Devinfo.bochangxishu.a1;
|
||||
coeff[2]=this.Devinfo.bochangxishu.a2;
|
||||
coeff[3]=this.Devinfo.bochangxishu.a3;
|
||||
|
||||
const chartDom_up = this.$refs.chart_up;
|
||||
let chart_up = echarts.init(chartDom_up, null, {renderer: 'svg'});
|
||||
let chart_down = echarts.init(this.$refs.chart_down, null, {renderer: 'svg'});
|
||||
let chart_lamp = echarts.init(this.$refs.chart_lamp, null, {renderer: 'svg'});
|
||||
chart_up.resize();
|
||||
chart_down.resize();
|
||||
chart_lamp.resize();
|
||||
this.option_up = {
|
||||
|
||||
|
||||
// ECharts 配置选项
|
||||
xAxis: {
|
||||
type: 'value',
|
||||
boundaryGap: false,// 显示连续的刻度
|
||||
min: 0,
|
||||
max: 1100,
|
||||
dataZoom: [
|
||||
{
|
||||
type: 'inside', // 内置数据区域缩放
|
||||
start: 0, // 初始缩放范围的起始位置(0%)
|
||||
end: 100 // 初始缩放范围的结束位置(100%)
|
||||
}
|
||||
],
|
||||
triggerEvent: true
|
||||
},
|
||||
animation: false,
|
||||
yAxis:[ {
|
||||
type: 'value',
|
||||
//min:0,
|
||||
},
|
||||
{
|
||||
type: 'value',
|
||||
//min:0,
|
||||
}
|
||||
|
||||
|
||||
],
|
||||
tooltip: {
|
||||
trigger: 'axis',
|
||||
|
||||
|
||||
},
|
||||
axisPointer: {
|
||||
link: {xAxisIndex: 'all'},
|
||||
label: {
|
||||
backgroundColor: '#777'
|
||||
}
|
||||
},
|
||||
grid: {
|
||||
left: '5%',
|
||||
right: '5%',
|
||||
bottom: '10%',
|
||||
top: '5%'
|
||||
},
|
||||
// visualMap: [
|
||||
// {
|
||||
// type: 'continuous',
|
||||
// }
|
||||
// ],
|
||||
dataZoom: [
|
||||
{
|
||||
type: 'inside', // 内置数据区域缩放,包括滚轮缩放
|
||||
xAxisIndex: [0], // 对应 x 轴
|
||||
filterMode: 'none' // 不过滤数据
|
||||
|
||||
},
|
||||
{
|
||||
type: 'inside', // 内置数据区域缩放,包括滚轮缩放
|
||||
yAxisIndex: [0], // 对应 y 轴
|
||||
filterMode: 'none', // 不过滤数据
|
||||
//width :15
|
||||
|
||||
}
|
||||
],
|
||||
|
||||
|
||||
legend: {
|
||||
data: ['DN'], // 图例名称
|
||||
show: true ,// 显示图例
|
||||
//selectedMode: 'multiple', // 图例的选择模式。默认开启图例开关,可选single,multiple
|
||||
},
|
||||
series: [
|
||||
{
|
||||
data: [[1, 150], [2, 230], [3, 224], [4, 218], [5, 135], [6, 147], [7, 260]], // 使用二维数组表示数据点的坐标
|
||||
type: 'line',
|
||||
name: 'DN',
|
||||
symbol: 'none', // 不显示数据点
|
||||
smooth: false, // 不使用平滑处理
|
||||
// step: 'start' // 设置 step 类型的起始位置
|
||||
}
|
||||
// ,
|
||||
// {
|
||||
// data: [[1, 150], [2, 230], [3, 224], [4, 218], [5, 135], [6, 147], [7, 260]], // 使用二维数组表示数据点的坐标
|
||||
// type: 'line',
|
||||
// name: 'data',
|
||||
// symbol: 'none', // 不显示数据点
|
||||
// smooth: false, // 不使用平滑处理
|
||||
// yAxisIndex: 1,
|
||||
// // step: 'start' // 设置 step 类型的起始位置
|
||||
// }
|
||||
]
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
this.option_up.xAxis.max =coeff[3];
|
||||
|
||||
this.option_up.xAxis.min = 2048*2048*2048*coeff[0]+2048*2048*coeff[1]+2048*coeff[2]+coeff[3];
|
||||
this.option_lamp = JSON.parse(JSON.stringify(this.option_up));
|
||||
this.option_down = JSON.parse(JSON.stringify(this.option_up));
|
||||
|
||||
chart_up.setOption(this.option_up);
|
||||
chart_down.setOption(this.option_down);
|
||||
this.option_lamp.legend.data = ['Lamp'];
|
||||
this.option_lamp.series[0].name = 'Lamp';
|
||||
chart_lamp.setOption(this.option_lamp);
|
||||
|
||||
|
||||
},
|
||||
async Get_Data_direction(dire) {
|
||||
let coeffweave1=this.Devinfo.bochangxishu.a0;
|
||||
let coeffweave2=this.Devinfo.bochangxishu.a1;
|
||||
let coeffweave3=this.Devinfo.bochangxishu.a2;
|
||||
let coeffweave4=this.Devinfo.bochangxishu.a3;
|
||||
if (dire == "UP") {
|
||||
var data = await SerialportMethod.Get_Date_on_Derction(dire,this.shutter_time_up,false,Number(this.caijicishu[0]))
|
||||
this.DataUP=data;
|
||||
this.DataUP.value_lable=0
|
||||
//获取波长系数
|
||||
var lenthofdata=data.data.length;
|
||||
let dataforshow=[];
|
||||
for (var i=0;i<lenthofdata;i++)
|
||||
{
|
||||
var weave=coeffweave1*i*i*i+coeffweave2*i*i+coeffweave3*i+coeffweave4;
|
||||
dataforshow.push([weave,data.data[i]]);
|
||||
}
|
||||
this.option_up.series[0].data = dataforshow;
|
||||
|
||||
var chart_up = echarts.getInstanceByDom(this.$refs.chart_up);
|
||||
chart_up.setOption(this.option_up);
|
||||
|
||||
// console.log(dataforshow);
|
||||
}else if(dire=="DOWN")
|
||||
{
|
||||
var data = await SerialportMethod.Get_Date_on_Derction(dire,this.shutter_time_down,false,Number(this.caijicishu[0]))
|
||||
this.DataDown=data;
|
||||
this.DataDown.value_lable=0
|
||||
//获取波长系数
|
||||
var lenthofdata=data.data.length;
|
||||
let dataforshow=[];
|
||||
for (var i=0;i<lenthofdata;i++)
|
||||
{
|
||||
var weave=coeffweave1*i*i*i+coeffweave2*i*i+coeffweave3*i+coeffweave4;
|
||||
dataforshow.push([weave,data.data[i]]);
|
||||
}
|
||||
this.option_down.series[0].data = dataforshow;
|
||||
|
||||
var chart_down = echarts.getInstanceByDom(this.$refs.chart_down);
|
||||
chart_down.setOption(this.option_down);
|
||||
|
||||
// console.log(dataforshow);
|
||||
}
|
||||
this.computCalibrate()
|
||||
},
|
||||
async computCalibrate(){
|
||||
|
||||
if(this.upGain.shutter_time!=0)
|
||||
{
|
||||
let coeffweave1=this.Devinfo.bochangxishu.a0;
|
||||
let coeffweave2=this.Devinfo.bochangxishu.a1;
|
||||
let coeffweave3=this.Devinfo.bochangxishu.a2;
|
||||
let coeffweave4=this.Devinfo.bochangxishu.a3;
|
||||
var uprandiance=[];
|
||||
if(this.DataUP.data.length!=0)
|
||||
{
|
||||
for (var i=0;i<this.DataUP.data.length;i++)
|
||||
{
|
||||
var weave=coeffweave1*i*i*i+coeffweave2*i*i+coeffweave3*i+coeffweave4;
|
||||
var data=this.DataUP.data[i]*this.upGain.gain[i]*this.upGain.shutter_time/this.DataUP.shutter_time;
|
||||
uprandiance.push([weave,data]);
|
||||
}
|
||||
var series=
|
||||
{
|
||||
data: [[1, 150], [2, 230], [3, 224], [4, 218], [5, 135], [6, 147], [7, 260]], // 使用二维数组表示数据点的坐标
|
||||
type: 'line',
|
||||
name: 'Radiance',
|
||||
symbol: 'none', // 不显示数据点
|
||||
smooth: false, // 不使用平滑处理
|
||||
yAxisIndex: 1,
|
||||
// step: 'start' // 设置 step 类型的起始位置
|
||||
}
|
||||
series.data=uprandiance;
|
||||
if(this.option_up.series.length==1)
|
||||
{
|
||||
this.option_up.series.push(series);
|
||||
this.option_up.legend.data.push('Radiance');
|
||||
}else{
|
||||
this.option_up.series[1]=series;
|
||||
}
|
||||
var chart_up = echarts.getInstanceByDom(this.$refs.chart_up);
|
||||
chart_up.setOption(this.option_up);
|
||||
//this.option_up.series
|
||||
}
|
||||
}
|
||||
if(this.downGain.shutter_time!=0)
|
||||
{
|
||||
let coeffweave1=this.Devinfo.bochangxishu.a0;
|
||||
let coeffweave2=this.Devinfo.bochangxishu.a1;
|
||||
let coeffweave3=this.Devinfo.bochangxishu.a2;
|
||||
let coeffweave4=this.Devinfo.bochangxishu.a3;
|
||||
var downrandiance=[];
|
||||
if(this.DataDown.data.length!=0)
|
||||
{
|
||||
for (var i=0;i<this.DataDown.data.length;i++)
|
||||
{
|
||||
var weave=coeffweave1*i*i*i+coeffweave2*i*i+coeffweave3*i+coeffweave4;
|
||||
var data=this.DataDown.data[i]*this.downGain.gain[i]*this.upGain.shutter_time/this.DataDown.shutter_time;
|
||||
downrandiance.push([weave,data]);
|
||||
}
|
||||
var series=
|
||||
{
|
||||
data: [[1, 150], [2, 230], [3, 224], [4, 218], [5, 135], [6, 147], [7, 260]], // 使用二维数组表示数据点的坐标
|
||||
type: 'line',
|
||||
name: 'Radiance',
|
||||
symbol: 'none', // 不显示数据点
|
||||
smooth: false, // 不使用平滑处理
|
||||
yAxisIndex: 1,
|
||||
// step: 'start' // 设置 step 类型的起始位置
|
||||
}
|
||||
series.data=downrandiance;
|
||||
if(this.option_down.series.length==1)
|
||||
{
|
||||
this.option_down.series.push(series);
|
||||
this.option_down.legend.data.push('Radiance');
|
||||
}else{
|
||||
this.option_down.series[1]=series;
|
||||
}
|
||||
var chart_down = echarts.getInstanceByDom(this.$refs.chart_down);
|
||||
chart_down.setOption(this.option_down);
|
||||
//this.option_up.series
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
},
|
||||
|
||||
async SaveGaindata(){
|
||||
if(this.upGain.shutter_time!=0)
|
||||
{
|
||||
await invoke("savecalibratefile",{
|
||||
gain:this.upGain.gain,
|
||||
shutter:this.upGain.shutter_time,
|
||||
direction:true,
|
||||
filepath:"./calibratefile/upgain.bin"
|
||||
});
|
||||
await invoke("sendcalibratetodev",{
|
||||
gain:this.upGain.gain,
|
||||
shutter:this.upGain.shutter_time,
|
||||
direction:true
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
if(this.downGain.shutter_time!=0)
|
||||
{
|
||||
await invoke("savecalibratefile",{
|
||||
gain:this.downGain.gain,
|
||||
shutter:this.downGain.shutter_time,
|
||||
direction:true,
|
||||
filepath:"./calibratefile/downgain.bin"
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
},
|
||||
async Start_Comput_Coeff(){
|
||||
let lampData=this.LampData.value;
|
||||
let lampLabel=this.LampData.value_lable;
|
||||
let UpData=this.DataUP.data;
|
||||
let UpLabel=this.DataUP.value_lable;
|
||||
let UpShutter=this.DataUP.shutter_time;
|
||||
let DownData=this.DataDown.data;
|
||||
let DownLabel=this.DataDown.value_lable;
|
||||
let DownShutter=this.DataDown.shutter_time;
|
||||
if (lampLabel==0)
|
||||
{
|
||||
alert("请先导入灯数据");
|
||||
return;
|
||||
}
|
||||
|
||||
if (DownShutter==0||UpShutter==0)
|
||||
{
|
||||
alert("请先采集数据");
|
||||
return;
|
||||
}
|
||||
if (UpLabel==0||DownLabel==0)
|
||||
{
|
||||
alert("请填写对应的Value");
|
||||
return;
|
||||
}
|
||||
|
||||
let gainofup=[];
|
||||
let gainofdown=[];
|
||||
for (var i=0;i<UpData.length;i++)
|
||||
{
|
||||
let upDn=UpData[i];
|
||||
let downDn=DownData[i];
|
||||
let lampup=lampData[i]*UpLabel/lampLabel;
|
||||
let lampdown=lampData[i]*DownLabel/lampLabel;
|
||||
let gainup=lampup/upDn;
|
||||
let gaindown=lampdown/downDn;
|
||||
|
||||
gainofup.push(gainup);
|
||||
gainofdown.push(gaindown);
|
||||
}
|
||||
this.upGain.gain=gainofup;
|
||||
this.upGain.shutter_time=UpShutter;
|
||||
this.downGain.gain=gainofdown;
|
||||
this.downGain.shutter_time=DownShutter;
|
||||
this.computCalibrate()
|
||||
this.SaveGaindata();
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div class="container" style="width: 100%;height: 100%;max-width:100%;margin: 0px;padding: 0px">
|
||||
<div class="row linebox">
|
||||
<!-- 按钮区域-->
|
||||
<div class="col-2 buttonme">
|
||||
<b-button variant="secondary" pill class="siglebt" @click="readFileAndParse()">导入灯数据</b-button>
|
||||
</div>
|
||||
<!-- ///中间区域-->
|
||||
<div class="col-9 centerme">
|
||||
<div class="chart-container" id="charmian_lamp" ref="chart_lamp" ></div>
|
||||
</div>
|
||||
<!-- ///尾部区域-->
|
||||
<div class="col-1 tailme">
|
||||
<b-form-floating-label style="margin: auto" v-show="LampData.value_lable!==0">value:{{LampData.value_lable}}</b-form-floating-label>
|
||||
</div>
|
||||
</div>
|
||||
<!-- 中建行 -->
|
||||
<div class="row linebox">
|
||||
|
||||
<!-- 按钮区域-->
|
||||
<div class="col-2 buttonme" style="padding: 0px" size="sm">
|
||||
<b-input-group append="ms">
|
||||
<b-input-group-prepend>
|
||||
<b-button variant="secondary" style="margin: auto" @click="OPT_devic(0)">OPT</b-button>
|
||||
</b-input-group-prepend>
|
||||
<b-form-input v-model="shutter_time_up"></b-form-input>
|
||||
|
||||
|
||||
</b-input-group>
|
||||
<b-input-group append="次">
|
||||
<b-input-group-prepend>
|
||||
<b-button variant="secondary" style="margin: auto" @click="Get_Data_direction('UP')">采集向上数据</b-button>
|
||||
</b-input-group-prepend>
|
||||
<b-form-input v-model="caijicishu[0]"></b-form-input>
|
||||
</b-input-group>
|
||||
|
||||
</div>
|
||||
<!-- ///中间区域-->
|
||||
<div class="col-9 centerme">
|
||||
<div class="chart-container" id="charmian_up" ref="chart_up" ></div>
|
||||
</div>
|
||||
<!-- ///尾部区域-->
|
||||
<div class="col-1 tailme">
|
||||
<b-form-floating-label style="margin: auto" v-show="DataUP.shutter_time!==0">Shutter_Time:{{DataUP.shutter_time}}</b-form-floating-label>
|
||||
<b-input-group prepend="Lamp_Value" size="sm" v-show="DataUP.shutter_time!==0">
|
||||
</b-input-group>
|
||||
<b-form-input v-model="DataUP.value_lable"></b-form-input>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<!-- 向下 -->
|
||||
<div class="row linebox">
|
||||
<!-- 按钮区域-->
|
||||
<div class="col-2 buttonme">
|
||||
<b-input-group append="ms">
|
||||
<b-input-group-prepend>
|
||||
<b-button variant="secondary" style="margin: auto" @click="OPT_devic(1)"> OPT</b-button>
|
||||
</b-input-group-prepend>
|
||||
<b-form-input v-model="shutter_time_down"></b-form-input>
|
||||
|
||||
|
||||
</b-input-group>
|
||||
<b-input-group append="次">
|
||||
<b-input-group-prepend>
|
||||
<b-button variant="secondary" @click="Get_Data_direction('DOWN')">采集向下数据</b-button>
|
||||
</b-input-group-prepend>
|
||||
<b-form-input v-model="caijicishu[1]"></b-form-input>
|
||||
</b-input-group>
|
||||
|
||||
</div>
|
||||
<!-- ///中间区域-->
|
||||
<div class="col-9 centerme">
|
||||
<div class="chart-container" id="charmian_up" ref="chart_down" ></div>
|
||||
</div>
|
||||
<!-- ///尾部区域-->
|
||||
<div class="col-1 tailme">
|
||||
<b-form-floating-label style="margin: auto" v-show="DataDown.shutter_time!==0">Shutter_Time:{{DataDown.shutter_time}}</b-form-floating-label>
|
||||
<b-input-group prepend="Lamp_Value" size="sm" v-show="DataDown.shutter_time!==0">
|
||||
</b-input-group>
|
||||
<b-form-input v-model="DataDown.value_lable"></b-form-input>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
<p style="position:absolute ;bottom: 10px;width: 100%;height: 30px" >
|
||||
<b-button @click="updataName" style="position:absolute;left: 20px ">导入已有文件</b-button>
|
||||
<b-button @click="Start_Comput_Coeff()" style="position:absolute; left: 150px ">计算</b-button>
|
||||
<b style="position:absolute; left: 250px;border: #0f0f0f 1px solid; margin: auto">adsfsdsadfsdf</b>
|
||||
<b-button @click="updataName" style="position:absolute;right: 20px ">设置</b-button>
|
||||
</p>
|
||||
</template>
|
||||
|
||||
<style scoped>
|
||||
.linebox{
|
||||
width: 100%;
|
||||
height: 30%;
|
||||
margin: 0px;
|
||||
padding: 0px;
|
||||
border-bottom:1px solid #d2dede;
|
||||
max-width: 100%;
|
||||
}
|
||||
|
||||
.buttonme{
|
||||
background-color: #f8f9fa;
|
||||
padding-top: 0px;
|
||||
padding-bottom: 0px;
|
||||
padding: 0px;
|
||||
border-right: 1px solid #d2dede;
|
||||
align-content: center;
|
||||
|
||||
}
|
||||
.centerme{
|
||||
|
||||
padding-top: 0px;
|
||||
padding-bottom: 0px;
|
||||
padding: 0px;
|
||||
border-right: 1px solid #d2dede;
|
||||
}
|
||||
.tailme{
|
||||
background-color: #f8f9fa;
|
||||
margin: auto;
|
||||
|
||||
}
|
||||
.chart-container{
|
||||
width: 100%;
|
||||
height:100%;
|
||||
}
|
||||
|
||||
</style>
|
||||
66
src/components/menubox/SetName.vue
Normal file
66
src/components/menubox/SetName.vue
Normal file
@ -0,0 +1,66 @@
|
||||
<script>
|
||||
import {invoke} from "@tauri-apps/api/tauri";
|
||||
|
||||
export default {
|
||||
name: "SetName",
|
||||
data(){
|
||||
return {
|
||||
name:"null",
|
||||
version:"000"
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
async updataName() {
|
||||
var comman={command:"set_sensor_info",name:this.name,version:this.version}
|
||||
|
||||
let data={
|
||||
data:comman,
|
||||
datatype:"json"
|
||||
}
|
||||
let that = this;
|
||||
let message=await invoke("sendtoport",data);
|
||||
await new Promise(resolve => setTimeout(resolve, 500));
|
||||
console.log(message);
|
||||
//其他地方传过来
|
||||
if (typeof this.upother === 'function') {
|
||||
this.upother();
|
||||
} else {
|
||||
// 函数未定义
|
||||
console.log("need rewrite")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div style="position: relative;width: 100%;height: 100%">
|
||||
<BRow class="my-1">
|
||||
<BCol sm="2">
|
||||
<label for="input-none">设备名称</label>
|
||||
</BCol>
|
||||
<BCol sm="10">
|
||||
<BFormInput id="input-none" :state="null" placeholder="No validation" v-model="name" />
|
||||
</BCol>
|
||||
</BRow>
|
||||
<BRow class="my-1">
|
||||
<BCol sm="2">
|
||||
<label for="input-none">设备版本号</label>
|
||||
</BCol>
|
||||
<BCol sm="10">
|
||||
<BFormInput id="input-none" :state="null" placeholder="No validation" v-model="version" />
|
||||
</BCol>
|
||||
</BRow>
|
||||
|
||||
|
||||
|
||||
|
||||
<p style="position:absolute ;bottom: 10px;width: 100%;height: 30px" >
|
||||
<b-button @click="updataName" style="position:absolute;right: 20px ">设置</b-button>
|
||||
</p>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<style scoped>
|
||||
|
||||
</style>
|
||||
303
src/components/menubox/SetWavelenth.vue
Normal file
303
src/components/menubox/SetWavelenth.vue
Normal file
@ -0,0 +1,303 @@
|
||||
<script>
|
||||
import {invoke} from "@tauri-apps/api/tauri";
|
||||
import * as echarts from "echarts";
|
||||
import SerialportMethod from "../SerialPort/SerialportMethod.js";
|
||||
|
||||
export default {
|
||||
name: "SetWavelenth",
|
||||
data() {
|
||||
return {
|
||||
option: {},
|
||||
Devinfo: {
|
||||
work_mode: 0,
|
||||
bochangxishu: {
|
||||
a0: 0,
|
||||
a1: 0,
|
||||
a2: 0,
|
||||
a3: 0
|
||||
},
|
||||
|
||||
},
|
||||
shutter_time_up: 0,
|
||||
Data:{}
|
||||
}
|
||||
},
|
||||
async mounted() {
|
||||
let that=this;
|
||||
//await
|
||||
await setTimeout(function() {
|
||||
that.GetSenSorInfo();
|
||||
// 这里是你要在100毫秒后执行的代码
|
||||
|
||||
}, 100);
|
||||
await setTimeout(function() {
|
||||
that.GetSenSorInfo();
|
||||
// 这里是你要在100毫秒后执行的代码
|
||||
that.initChart();
|
||||
}, 1000);
|
||||
|
||||
},
|
||||
|
||||
|
||||
methods: {
|
||||
async GetSenSorInfo() {
|
||||
var Command = {command: "get_sensor_info"};
|
||||
let data = {
|
||||
data: Command,
|
||||
datatype: "json"
|
||||
}
|
||||
let message = await invoke("sendtoportAndgetreturn", data);
|
||||
this.Devinfo = JSON.parse(message.content);
|
||||
|
||||
},
|
||||
async OPT_devic(){
|
||||
var shuttertime = await SerialportMethod.Dev_Opt();
|
||||
this.shutter_time_up = shuttertime;
|
||||
|
||||
},
|
||||
async initChart() {
|
||||
await this.$nextTick();
|
||||
const chartDom = this.$refs.chart_weavelenth;
|
||||
// chartDom.style.width = '100%';
|
||||
// chartDom.style.height = '100%';
|
||||
let height = chartDom.offsetHeight;
|
||||
let width = chartDom.clientWidth;
|
||||
let chart = echarts.init(chartDom);
|
||||
var coeff=[];
|
||||
coeff[0]=this.Devinfo.bochangxishu.a0;
|
||||
coeff[1]=this.Devinfo.bochangxishu.a1;
|
||||
coeff[2]=this.Devinfo.bochangxishu.a2;
|
||||
coeff[3]=this.Devinfo.bochangxishu.a3;
|
||||
this.option = {
|
||||
// ECharts 配置选项
|
||||
xAxis: {
|
||||
type: 'value',
|
||||
boundaryGap: false,// 显示连续的刻度
|
||||
min: 0,
|
||||
max: 510,
|
||||
dataZoom: [
|
||||
{
|
||||
type: 'inside', // 内置数据区域缩放
|
||||
start: 0, // 初始缩放范围的起始位置(0%)
|
||||
end: 100 // 初始缩放范围的结束位置(100%)
|
||||
}
|
||||
]
|
||||
},
|
||||
animation: false,
|
||||
yAxis: {
|
||||
type: 'value',
|
||||
//min:0,
|
||||
},
|
||||
grid: {
|
||||
left: '5%',
|
||||
right: '5%',
|
||||
bottom: '5%',
|
||||
top: '5%'
|
||||
},
|
||||
dataZoom: [
|
||||
{
|
||||
type: 'inside', // 内置数据区域缩放,包括滚轮缩放
|
||||
xAxisIndex: [0], // 对应 x 轴
|
||||
filterMode: 'none' // 不过滤数据
|
||||
},
|
||||
{
|
||||
type: 'inside', // 内置数据区域缩放,包括滚轮缩放
|
||||
yAxisIndex: [0], // 对应 y 轴
|
||||
filterMode: 'none' // 不过滤数据
|
||||
}
|
||||
],
|
||||
|
||||
|
||||
// legend: {
|
||||
// data: ['曲线'], // 图例名称
|
||||
// show: true ,// 显示图例
|
||||
// //selectedMode: 'multiple', // 图例的选择模式。默认开启图例开关,可选single,multiple
|
||||
// },
|
||||
series: [
|
||||
{
|
||||
data: [[1, 150], [2, 230], [3, 224], [4, 218], [5, 135], [6, 147], [7, 260]], // 使用二维数组表示数据点的坐标
|
||||
type: 'line',
|
||||
symbol: 'none', // 不显示数据点
|
||||
smooth: false, // 不使用平滑处理
|
||||
step: 'start' // 设置 step 类型的起始位置
|
||||
}
|
||||
]
|
||||
};
|
||||
this.option.xAxis.max =coeff[3];
|
||||
|
||||
this.option.xAxis.min = 2048*2048*2048*coeff[0]+2048*2048*coeff[1]+2048*coeff[2]+coeff[3];
|
||||
|
||||
chart.setOption(this.option);
|
||||
chart.dispatchAction({
|
||||
type: 'resize',
|
||||
|
||||
// 可以指定宽和高,如果不指定则默认取容器的大小
|
||||
// width: '新的宽度',
|
||||
// height: '新的高度'
|
||||
});
|
||||
chart.resize();
|
||||
},
|
||||
async findpeak(){
|
||||
let dataforpeak=this.Data.data;
|
||||
var peaks=await invoke("find_peek",{data:dataforpeak,minheigh:1000});
|
||||
console.log(peaks);
|
||||
let peaksforshow=[];
|
||||
let coeffweave1=this.Devinfo.bochangxishu.a0;
|
||||
let coeffweave2=this.Devinfo.bochangxishu.a1;
|
||||
let coeffweave3=this.Devinfo.bochangxishu.a2;
|
||||
let coeffweave4=this.Devinfo.bochangxishu.a3;
|
||||
|
||||
peaks.forEach(element => {
|
||||
var weave=coeffweave1*element[0]*element[0]*element[0]+coeffweave2*element[0]*element[0]+coeffweave3*element[0]+coeffweave4;
|
||||
peaksforshow.push([weave,element[1],element[0]]);
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
let chartpeak=
|
||||
{
|
||||
data:peaksforshow, // 使用二维数组表示数据点的坐标
|
||||
type: 'scatter',
|
||||
label: {
|
||||
show: true,
|
||||
position: 'top',
|
||||
formatter: function (params) {
|
||||
return params.value[2]
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (this.option.series.length<2)
|
||||
{
|
||||
this.option.series.push(chartpeak);
|
||||
}
|
||||
else
|
||||
{
|
||||
this.option.series[1]=chartpeak;
|
||||
}
|
||||
var chart_up = echarts.getInstanceByDom(this.$refs.chart_weavelenth);
|
||||
chart_up.setOption(this.option);
|
||||
|
||||
|
||||
|
||||
},
|
||||
async GetOneData(){
|
||||
let coeffweave1=this.Devinfo.bochangxishu.a0;
|
||||
let coeffweave2=this.Devinfo.bochangxishu.a1;
|
||||
let coeffweave3=this.Devinfo.bochangxishu.a2;
|
||||
let coeffweave4=this.Devinfo.bochangxishu.a3;
|
||||
|
||||
var data = await SerialportMethod.Get_Date_on_Derction("UP",this.shutter_time_up,false,1)
|
||||
this.Data=data; //获取波长系数
|
||||
var lenthofdata=data.data.length;
|
||||
let dataforshow=[];
|
||||
for (var i=0;i<lenthofdata;i++)
|
||||
{
|
||||
var weave=coeffweave1*i*i*i+coeffweave2*i*i+coeffweave3*i+coeffweave4;
|
||||
dataforshow.push([weave,data.data[i]]);
|
||||
}
|
||||
this.option.series[0].data = dataforshow;
|
||||
|
||||
var chart_up = echarts.getInstanceByDom(this.$refs.chart_weavelenth);
|
||||
chart_up.setOption(this.option);
|
||||
|
||||
// console.log(dataforshow);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
</script>
|
||||
|
||||
|
||||
<template >
|
||||
<div class="container" style="width: 100%;height: 100%;margin: 0px;padding: 0px">
|
||||
<div class="row" style="height: 100%">
|
||||
|
||||
|
||||
<div class="col-2">
|
||||
<b-input-group class="my-1" >
|
||||
<BInputGroupPrepend is-text class="myinputprepend">a0</BInputGroupPrepend>
|
||||
<b-form-input type="number" step="0.00000000000001" v-model="Devinfo.bochangxishu.a0" ></b-form-input>
|
||||
</b-input-group>
|
||||
|
||||
<b-input-group class="my-1" >
|
||||
<BInputGroupPrepend is-text class="myinputprepend">a1</BInputGroupPrepend>
|
||||
<b-form-input type="number" step="0.00000000000001" v-model="Devinfo.bochangxishu.a1" ></b-form-input>
|
||||
</b-input-group>
|
||||
|
||||
<b-input-group class="my-1" >
|
||||
<BInputGroupPrepend is-text class="myinputprepend">a2</BInputGroupPrepend>
|
||||
<b-form-input type="number" step="0.00000000000001" v-model="Devinfo.bochangxishu.a2" ></b-form-input>
|
||||
</b-input-group>
|
||||
|
||||
<b-input-group class="my-1" >
|
||||
<BInputGroupPrepend is-text class="myinputprepend">a3</BInputGroupPrepend>
|
||||
<b-form-input type="number" step="0.00000000000001" v-model="Devinfo.bochangxishu.a3" ></b-form-input>
|
||||
</b-input-group>
|
||||
|
||||
<p style="position:absolute ;bottom: 10px;width: 100%;height: 30px" >
|
||||
<b-button @click="GetSenSorInfo" style="position:absolute;right: 20px ">恢复</b-button>
|
||||
</p>
|
||||
|
||||
</div>
|
||||
<div class="col-10">
|
||||
|
||||
<div style="position: relative; height: 90%;width: 100%;">
|
||||
<b-button @click="findpeak()" style="position:absolute;right: 20px;z-index: 10; ">寻峰</b-button>
|
||||
<div class="chart-container" ref="chart_weavelenth"></div>
|
||||
</div>
|
||||
<p style="position:absolute ;bottom: 10px;width: 100%;height: 30px" >
|
||||
<b-input-group append="ms" style="position:absolute;left: 20px;width:20% ">
|
||||
<b-input-group-prepend>
|
||||
<b-button variant="secondary" style="margin: auto" @click="OPT_devic(0)">OPT</b-button>
|
||||
</b-input-group-prepend>
|
||||
<b-form-input v-model="shutter_time_up"></b-form-input>
|
||||
|
||||
|
||||
</b-input-group>
|
||||
<b-button @click="GetOneData" style="position:absolute;left: 25% ">获取数据</b-button>
|
||||
<b-button @click="updataName" style="position:absolute; right: 50% ">计算</b-button>
|
||||
<b-button @click="updataName" style="position:absolute;right: 20px ">设置</b-button>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
</template>
|
||||
|
||||
<style scoped>
|
||||
.col-2 {
|
||||
background-color: #f8f9fa;
|
||||
padding-top: 0px;
|
||||
padding-bottom: 0px;
|
||||
padding: 0px;
|
||||
border-right: 1px solid #d2dede;
|
||||
position: relative;
|
||||
|
||||
}
|
||||
|
||||
.col-10 {
|
||||
padding: 0px;
|
||||
position: relative;
|
||||
|
||||
}
|
||||
.chart-container {
|
||||
background-color: #f8f9fa;
|
||||
width:100%;
|
||||
height: 100%;
|
||||
|
||||
}
|
||||
.container {
|
||||
background-color: #f8f9fa;
|
||||
width:100%;
|
||||
height: 100%;
|
||||
max-width: 100%;
|
||||
}
|
||||
</style>
|
||||
152
src/components/menubox/SetWorkmode.vue
Normal file
152
src/components/menubox/SetWorkmode.vue
Normal file
@ -0,0 +1,152 @@
|
||||
<script>
|
||||
import SiderleftSerilportMethod from "../SiderleftSerilportMethod.js";
|
||||
import {invoke} from "@tauri-apps/api/tauri";
|
||||
import EventBus from "../../eventBus.js";
|
||||
import eventBus from "../../eventBus.js";
|
||||
|
||||
export default {
|
||||
name: "SetWorkmode",
|
||||
data() {
|
||||
return {
|
||||
Devinfo: {
|
||||
work_mode: 0,
|
||||
}
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
|
||||
// this.GetSenSorInfo();
|
||||
},
|
||||
methods: {
|
||||
async GetSenSorInfo() {
|
||||
var Command = {command: "get_sensor_info"};
|
||||
let data = {
|
||||
data: Command,
|
||||
datatype: "json"
|
||||
}
|
||||
let message = await invoke("sendtoportAndgetreturn", data);
|
||||
this.Devinfo = JSON.parse(message.content);
|
||||
this.Devinfo.start_time = this.convertimetostr(this.Devinfo.start_time);
|
||||
this.Devinfo.stop_time = this.convertimetostr(this.Devinfo.stop_time);
|
||||
|
||||
},
|
||||
coverstrtotime(timeStr) {
|
||||
// 分离小时和分钟
|
||||
let [hours, minutes] = timeStr.split(':').map(Number);
|
||||
// 计算数值
|
||||
let num = hours + minutes / 100;
|
||||
|
||||
console.log(num); // 输出 10.4
|
||||
return num;
|
||||
|
||||
},
|
||||
convertimetostr(num) {
|
||||
|
||||
// num=10.40
|
||||
// 分离整数部分和小数部分
|
||||
let hours = Math.floor(num);
|
||||
let minutes = Math.round((num - hours) * 100);
|
||||
if (hours < 10) {
|
||||
hours = '0' + hours;
|
||||
}
|
||||
// 格式化分钟部分为两位数
|
||||
if (minutes < 10) {
|
||||
minutes = '0' + minutes;
|
||||
}
|
||||
|
||||
// 构建时间字符串
|
||||
let timeStr = `${hours}:${minutes}`;
|
||||
return timeStr;
|
||||
},
|
||||
async setWorkmode() {
|
||||
console.log(this.Devinfo);
|
||||
//单次和连续都属于手动模式
|
||||
if (this.Devinfo.work_mode == "manual_mode") {
|
||||
let Command = {command: "set_work_mode",work_mode:"manual_mode"};
|
||||
await this.senddatatoserilport(Command);
|
||||
|
||||
Command = {command: "set_time_interval",time_interval:this.Devinfo.time_interval};
|
||||
await this.senddatatoserilport(Command);
|
||||
//设置采集模式连续
|
||||
// Command = {command: "set_caiji_mode",work_mode:"continue"};
|
||||
// await this.senddatatoserilport(Command);
|
||||
|
||||
|
||||
|
||||
}
|
||||
//自动模式
|
||||
if (this.Devinfo.work_mode =="time_mode") {
|
||||
let Command = {command: "set_work_mode",work_mode:"time_mode"};
|
||||
await this.senddatatoserilport(Command);
|
||||
Command = {command: "set_time_interval",time_interval:this.Devinfo.time_interval};
|
||||
await this.senddatatoserilport(Command);
|
||||
Command = {command: "set_start_time",start_time:this.coverstrtotime(this.Devinfo.start_time)};
|
||||
await this.senddatatoserilport(Command);
|
||||
Command = {command: "set_stop_time",stop_time:this.coverstrtotime(this.Devinfo.stop_time)};
|
||||
await this.senddatatoserilport(Command);
|
||||
|
||||
}
|
||||
if (this.Devinfo.work_mode =="advanced_mode") {
|
||||
let Command = {command: "set_work_mode",work_mode:"advanced_mode"};
|
||||
await this.senddatatoserilport(Command);
|
||||
}
|
||||
EventBus.emit("updatamaindevinfo");
|
||||
eventBus.emit('showbox', {title: "工作模式", body: "设置工作模式成功",interval:10});
|
||||
|
||||
},
|
||||
async senddatatoserilport(command){
|
||||
let data = {
|
||||
data: command,
|
||||
datatype: "json"
|
||||
}
|
||||
await invoke("sendtoportAndgetreturn", data);
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div style="position: relative;width: 100%;height: 100%">
|
||||
<div style="position:relative ;width: 60%;;margin: auto">
|
||||
|
||||
<b-input-group class="my-1">
|
||||
<BInputGroupPrepend is-text class="myinputprepend">工作模式</BInputGroupPrepend>
|
||||
<b-form-select v-model="Devinfo.work_mode" >
|
||||
<b-form-select-option value="manual_mode">单次采集</b-form-select-option>
|
||||
<b-form-select-option value="time_mode">自动采集</b-form-select-option>
|
||||
<b-form-select-option value="advanced_mode">高级模式</b-form-select-option>
|
||||
</b-form-select>
|
||||
</b-input-group>
|
||||
|
||||
<b-input-group class="my-1" append="秒" v-if="Devinfo.work_mode!='advanced_mode'">
|
||||
<BInputGroupPrepend is-text class="myinputprepend">采集间隔</BInputGroupPrepend>
|
||||
<BFormInput type="number" id="input-none" :state="null" v-model="Devinfo.time_interval"/>
|
||||
</b-input-group>
|
||||
<b-input-group class="my-1" v-if="Devinfo.work_mode=='time_mode'">
|
||||
<BInputGroupPrepend is-text class="myinputprepend">开始时间</BInputGroupPrepend>
|
||||
<BFormInput type="time" id="input-none1" :state="null" v-model="Devinfo.start_time"/>
|
||||
|
||||
</b-input-group>
|
||||
<b-input-group class="my-1" v-if="Devinfo.work_mode=='time_mode'">
|
||||
<BInputGroupPrepend is-text class="myinputprepend">结束时间</BInputGroupPrepend>
|
||||
<BFormInput type="time" id="input-none2" :state="null" v-model="Devinfo.stop_time"/>
|
||||
</b-input-group>
|
||||
|
||||
|
||||
</div>
|
||||
<p style="position:absolute ;bottom: 10px;width: 100%;height: 30px">
|
||||
<b-button @click="setWorkmode" style="position:absolute;right: 20px ">设置</b-button>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
|
||||
</template>
|
||||
|
||||
<style scoped>
|
||||
.myinputprepend {
|
||||
width: 120px;
|
||||
}
|
||||
</style>
|
||||
72
src/components/mycard.vue
Normal file
72
src/components/mycard.vue
Normal file
@ -0,0 +1,72 @@
|
||||
<script>
|
||||
export default {
|
||||
name: "mycard",
|
||||
data(){
|
||||
return {
|
||||
isshowbody:true
|
||||
}
|
||||
},
|
||||
props:{
|
||||
datatoshow:{
|
||||
type:Object,
|
||||
default(){
|
||||
return {
|
||||
header:"header",
|
||||
infolist:[{key:"key",value:"value"}]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<BCardGroup deck class="Devinfo1" size="sm">
|
||||
<BCard no-body>
|
||||
<BCardHeader header-tag="nav" style="position: relative">
|
||||
<b>{{ datatoshow.header }}</b>
|
||||
|
||||
<button @click="isshowbody=!isshowbody" style="position: absolute;right: 5px" class="mybutton" >
|
||||
<svg class="borow" v-show="isshowbody" viewBox="0 0 20 20" style="background-color: transparent;box-shadow:0 0 0;vertical-align: middle;"><path fill="black" d="M10.103 12.778L16.81 6.08a.69.69 0 0 1 .99.012a.726.726 0 0 1-.012 1.012l-7.203 7.193a.69.69 0 0 1-.985-.006L2.205 6.72a.727.727 0 0 1 0-1.01a.69.69 0 0 1 .99 0z"/></svg>
|
||||
<svg class="borow" v-show="!isshowbody" viewBox="0 0 20 20" style="background-color: transparent"><path fill="black" d="M10.103 7.222c3.447 3.468 5.744 5.764 6.89 6.887c.198.185.539.56 1.046.07c.339-.327.325-.685-.039-1.073l-7.444-7.43a.638.638 0 0 0-.455-.176a.702.702 0 0 0-.472.176l-7.453 7.635c-.241.388-.231.715.03.98c.26.265.577.28.95.043z"/></svg>
|
||||
</button>
|
||||
|
||||
|
||||
</BCardHeader>
|
||||
<BCardBody v-show="isshowbody" >
|
||||
<p class="card-text devinfolist" v-show="isshowbody">
|
||||
<b v-for="item in datatoshow.infolist" :key="item.key">{{item.key}}:{{item.value}}<br></b>
|
||||
</p>
|
||||
</BCardBody >
|
||||
</BCard>
|
||||
|
||||
|
||||
</BCardGroup>
|
||||
</template>
|
||||
|
||||
<style scoped>
|
||||
.Devinfo1{
|
||||
|
||||
|
||||
left: 0px;
|
||||
width: 100%;
|
||||
user-select: none;
|
||||
|
||||
}
|
||||
.mybutton{
|
||||
height: 25px;
|
||||
width: 25px;
|
||||
padding: 0px;
|
||||
background-color: transparent;
|
||||
border: 0px;
|
||||
}
|
||||
.borow{
|
||||
height: 25px;
|
||||
width: 25px;
|
||||
padding: 0px;
|
||||
background-color: transparent;
|
||||
border: 0px;
|
||||
box-shadow:0 0 0;
|
||||
}
|
||||
|
||||
</style>
|
||||
27
src/components/serportdefine.js
Normal file
27
src/components/serportdefine.js
Normal file
@ -0,0 +1,27 @@
|
||||
const SerilporDefine = {
|
||||
Datatype:{
|
||||
DN:0x00,
|
||||
Radiance:0x01,
|
||||
Reflectance:0x03,
|
||||
},
|
||||
Derection:{
|
||||
Up:0x00,
|
||||
Down:0x01,
|
||||
Dark_Up:0x02,
|
||||
Dark_Down:0x03,
|
||||
},
|
||||
DataTypeforSend:{
|
||||
ALLDN:0x00,
|
||||
UpAndDownDN:0x01,
|
||||
UpDN:0x02,
|
||||
DOWNDN:0x03,
|
||||
UpDarkDN:0x04,
|
||||
DownDarkDN:0x05,
|
||||
ALLRadiance:0x10,
|
||||
UpAndDownRadiance:0x11,
|
||||
UpRadiance:0x12,
|
||||
DownRadiance:0x13
|
||||
},
|
||||
}
|
||||
export default SerilporDefine;
|
||||
|
||||
367
src/components/siderleft.vue
Normal file
367
src/components/siderleft.vue
Normal file
@ -0,0 +1,367 @@
|
||||
<script>
|
||||
import Siderleftmethode from "./siderleftmethod.js";
|
||||
import siderleftSerilportMethod from "./SiderleftSerilportMethod.js";
|
||||
import mycard from "./mycard.vue";
|
||||
import {ref} from 'vue';
|
||||
import Mycard from "./mycard.vue";
|
||||
import EventBus from "../eventBus.js";
|
||||
import {fs} from "@tauri-apps/api";
|
||||
|
||||
export default {
|
||||
name: "siderleft",
|
||||
components: {Mycard},
|
||||
data() {
|
||||
return {
|
||||
isSpecialmodeshow: true,
|
||||
dataprocessconfig:{
|
||||
useSG:false,
|
||||
usehighpass:false
|
||||
},
|
||||
outputconfig: {
|
||||
isChongCaiyang: false,
|
||||
ChongCaiyanginterval: 0.2,
|
||||
},
|
||||
caijiavgNumber:100,
|
||||
autoremovedark: true,
|
||||
caijidirection: "UP",
|
||||
ShutterTime: [100, 100],
|
||||
cajitimes: 5,
|
||||
cajitimesjiange:0,
|
||||
methodslist: [],
|
||||
|
||||
Comname: '请选择',
|
||||
options: [],
|
||||
datatosave: [],
|
||||
Pathtosave: "",
|
||||
nowNumber: 0,
|
||||
Filename: "Plot",
|
||||
pathofdir: "./data",
|
||||
Devinfo: {
|
||||
SerilNumber: "",
|
||||
Version: "0000",
|
||||
name: "暂无",
|
||||
Caji_mode: "连续采集",
|
||||
return_mode: "返回模式",
|
||||
Datatype: "DN"
|
||||
|
||||
},
|
||||
Datainfoshow: {
|
||||
header: "数据信息",
|
||||
infolist: []
|
||||
},
|
||||
iscollecting: false,
|
||||
dataup: {},
|
||||
datadown: {},
|
||||
datainfoup: {
|
||||
hasrecive: false,
|
||||
header: "UP",
|
||||
infolist: []
|
||||
},
|
||||
datainfodown: {
|
||||
hasrecive: false,
|
||||
header: "DOWN",
|
||||
infolist: []
|
||||
},
|
||||
|
||||
|
||||
devinfoshow: {
|
||||
header: "设备信息",
|
||||
infolist: []
|
||||
},
|
||||
SerialInfo: {
|
||||
isopen: false,
|
||||
},
|
||||
cssme: {
|
||||
comportvariant: "info",
|
||||
}
|
||||
}
|
||||
},
|
||||
async mounted() {
|
||||
var configdata=await fs.readTextFile("config.json");
|
||||
configdata=JSON.parse(configdata)
|
||||
if (typeof(configdata.pathofsave)!="undefined")
|
||||
this.pathofdir=configdata.pathofsave
|
||||
if (typeof(configdata.Filename)!="undefined")
|
||||
this.Filename=configdata.Filename
|
||||
if (typeof(configdata.caijiavgNumber)!="undefined")
|
||||
this.caijiavgNumber=configdata.caijiavgNumber
|
||||
if (typeof(configdata.useSG)!="undefined")
|
||||
this.dataprocessconfig.useSG=configdata.useSG
|
||||
if (typeof(configdata.usehighpass)!="undefined")
|
||||
this.dataprocessconfig.usehighpass=configdata.usehighpass
|
||||
var ports = this.listSerialPorts();
|
||||
// let btn=document.getElementById("closecomeside");
|
||||
// btn.disabled=true;
|
||||
console.log(ports);
|
||||
// var btnn = document.getElementById("closecome");
|
||||
// btnn.disabled = true;
|
||||
this.findmaxNinpath(this.pathofdir);
|
||||
window.addEventListener("keydown", this.handlekeydown)
|
||||
EventBus.on("updatamaindevinfo", this.GetSenSorInfo);
|
||||
EventBus.on("konamiactive",this.setspectralmode);
|
||||
EventBus.on("Get_Dev_Info",this.get_dev_info)
|
||||
},
|
||||
methods: {
|
||||
...Siderleftmethode,
|
||||
...siderleftSerilportMethod
|
||||
},
|
||||
setup(props, context) {
|
||||
const optionName = ref('')
|
||||
const isAdding = ref(false)
|
||||
|
||||
const onAddOption = () => {
|
||||
isAdding.value = true
|
||||
}
|
||||
|
||||
|
||||
const clear = () => {
|
||||
optionName.value = ''
|
||||
isAdding.value = false
|
||||
}
|
||||
|
||||
return {
|
||||
optionName,
|
||||
isAdding,
|
||||
onAddOption,
|
||||
|
||||
clear,
|
||||
}
|
||||
},
|
||||
|
||||
|
||||
}
|
||||
</script>
|
||||
|
||||
<template>
|
||||
|
||||
|
||||
<BAccordion class="bAccordionme" size="sm" >
|
||||
<BAccordionItem title="高级设置" v-show="isSpecialmodeshow">
|
||||
<!-- <b-input-group prepend="平均次数" size="sm" style="width: 100%">-->
|
||||
<!-- <b-form-input type="number" v-model="caijiavgNumber"></b-form-input>-->
|
||||
<!-- <b-input-group-append>-->
|
||||
|
||||
<!-- </b-input-group-append>-->
|
||||
<!-- </b-input-group>-->
|
||||
<!-- <b-input-group prepend="滤波" size="sm">-->
|
||||
<!-- <div style="margin: auto; margin-left: 10px;">SG<input type="checkbox" v-model="dataprocessconfig.useSG" ></div>-->
|
||||
<!-- <div style="margin: auto; margin-left: 10px;"> HighPass<input type="checkbox" v-model="dataprocessconfig.usehighpass" ></div>-->
|
||||
<!-- </b-input-group>-->
|
||||
<b-input-group prepend="aa" size="sm" style="width: 100%">
|
||||
<b-form-input type="number" v-model="caijiavgNumber"></b-form-input>
|
||||
<b-input-group-append>
|
||||
|
||||
</b-input-group-append>
|
||||
</b-input-group>
|
||||
<b-input-group prepend="bb" size="sm">
|
||||
<div style="margin: auto; margin-left: 10px;"><input type="checkbox" v-model="dataprocessconfig.useSG" ></div>
|
||||
<div style="margin: auto; margin-left: 10px;"><input type="checkbox" v-model="dataprocessconfig.usehighpass" ></div>
|
||||
</b-input-group>
|
||||
<b-button @click="saveconfig" variant="light" size="sm">保存</b-button>
|
||||
</BAccordionItem>
|
||||
<BAccordionItem title="控制" visible >
|
||||
|
||||
|
||||
<b-input-group append="ms" v-if="Devinfo.work_mode=='advanced_mode'"
|
||||
style="margin-bottom: 2px;width: 100%;margin-left: auto;margin-right: auto" size="sm">
|
||||
<b-input-group-prepend>
|
||||
<b-button style="min-width:80px" :disabled="iscollecting || !SerialInfo.isopen" @click="Dingbiao_OPT">OPT
|
||||
</b-button>
|
||||
</b-input-group-prepend>
|
||||
<b-form-input v-model="ShutterTime[0]" type="text" :disabled="iscollecting || !SerialInfo.isopen"
|
||||
v-show="caijidirection!='DOWN'"></b-form-input>
|
||||
<b-form-input v-model="ShutterTime[1]" type="text" :disabled="iscollecting || !SerialInfo.isopen"
|
||||
v-show="caijidirection=='DOWN'||caijidirection=='ALL'"></b-form-input>
|
||||
|
||||
</b-input-group>
|
||||
<b-input-group style="margin-bottom: 2px;width: 100%;margin-left: auto;margin-right: auto" size="sm">
|
||||
|
||||
|
||||
<b-button @click="GetoneData" :disabled="iscollecting || !SerialInfo.isopen" style="min-width:80px">
|
||||
快速展示
|
||||
<!-- 单次采集-->
|
||||
</b-button>
|
||||
<!-- <select v-model="caijidirection" v-if="Devinfo.work_mode=='advanced_mode'" :disabled="iscollecting || !SerialInfo.isopen"-->
|
||||
<!-- style="margin-left: auto;margin-right: auto;padding:0px">-->
|
||||
<!-- <option value="UP">UP</option>-->
|
||||
<!-- <option value="DOWN">DOWN</option>-->
|
||||
<!-- <option value="DARK">DARK</option>-->
|
||||
<!-- <option value="ALL">ALL</option>-->
|
||||
<!-- </select>-->
|
||||
|
||||
<b-form-select v-model="caijidirection" v-if="Devinfo.work_mode=='advanced_mode'"
|
||||
:disabled="iscollecting || !SerialInfo.isopen"
|
||||
style="padding-right: 8px">
|
||||
<b-form-select-option value="UP">UP </b-form-select-option>
|
||||
<b-form-select-option value="DOWN">DOWN</b-form-select-option>
|
||||
<b-form-select-option value="DARK">DARK</b-form-select-option>
|
||||
<b-form-select-option value="ALL">ALL</b-form-select-option>
|
||||
|
||||
</b-form-select>
|
||||
<b-input-group-prepend is-text style="padding: 0px;padding-right: 6px;padding-left: 10px" v-if="Devinfo.work_mode=='advanced_mode'" >
|
||||
<div style="font-size:8px;margin: 0px;padding: 0px;position: relative;top:0px" ><div>R_D</div>
|
||||
<input type="checkbox" style="height: 12px;width: 12px" v-model="autoremovedark"/>
|
||||
</div></b-input-group-prepend>
|
||||
|
||||
</b-input-group>
|
||||
|
||||
<b-input-group append=" 次" style="margin-bottom: 2px;width: 100%;margin-left: auto;margin-right: auto" size="sm">
|
||||
<b-input-group-prepend>
|
||||
<b-button @click="ContinueCelect(cajitimes)" :disabled="iscollecting || !SerialInfo.isopen"
|
||||
style="min-width:80px">
|
||||
保存数据
|
||||
<!-- 连续采集-->
|
||||
</b-button>
|
||||
</b-input-group-prepend>
|
||||
|
||||
<b-form-input v-model="cajitimes" type="number" :disabled="iscollecting || !SerialInfo.isopen"></b-form-input>
|
||||
|
||||
</b-input-group>
|
||||
<b-input-group append="秒" size="sm">
|
||||
<b-input-group-prepend style="margin-bottom: 2px;width: 100%;margin-left: auto;margin-right: auto">
|
||||
<b-input-group-text style="min-width:80px">保存间隔</b-input-group-text>
|
||||
</b-input-group-prepend>
|
||||
<b-form-input type="number" v-model="cajitimesjiange" :disabled="iscollecting || !SerialInfo.isopen"></b-form-input>
|
||||
</b-input-group>
|
||||
|
||||
</BAccordionItem>
|
||||
<BAccordionItem title="保存配置" >
|
||||
<div>
|
||||
<!-- <b-button @click="closemain" id="closecome" variant="light" >退出</b-button>-->
|
||||
<b-input-group prepend="保存名称" size="sm" style="width: 100%">
|
||||
<b-form-input type="text" v-model="Filename"></b-form-input>
|
||||
</b-input-group>
|
||||
<b-input-group prepend="保存路径" size="sm">
|
||||
<b-form-input type="text" v-model="Pathtosave"></b-form-input>
|
||||
<b-input-group-append>
|
||||
<b-button @click="choosesavepath">...</b-button>
|
||||
</b-input-group-append>
|
||||
</b-input-group>
|
||||
<b-input-group prepend="重 采 样 " size="sm">
|
||||
<b-form-input type="number" max="10" min="0.05" step="0.05" v-model="outputconfig.ChongCaiyanginterval"></b-form-input>
|
||||
<b-input-group-append>
|
||||
<input type="checkbox" style="margin: 10px" v-model="outputconfig.isChongCaiyang"/>
|
||||
</b-input-group-append>
|
||||
|
||||
|
||||
</b-input-group>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
</BAccordionItem>
|
||||
|
||||
|
||||
|
||||
</BAccordion>
|
||||
|
||||
<!-- <VueDragResize :isActive="true" :h="10">-->
|
||||
<!-- -->
|
||||
<!-- </VueDragResize>-->
|
||||
|
||||
<div class="buttom">
|
||||
|
||||
<b-button-group size="sm" style="width: 100%">
|
||||
|
||||
<BDropdown dropup :text="Comname" :variant="cssme.comportvariant" class="me-2" size="sm"
|
||||
style="max-width: 30%; --bs-dropdown-min-width: 30%;font-size: xx-small" id="selectitem">
|
||||
<BDropdownItem v-for="item in options" @click="Comname=item.value" style=" --bs-dropdown-min-width: 10px;"
|
||||
variant="success" size="sm">
|
||||
{{ item.label }}
|
||||
</BDropdownItem>
|
||||
</BDropdown>
|
||||
|
||||
|
||||
<BButton @click="initserialport" id="opencom" variant="light" size="sm"
|
||||
style="font-size: xx-small;max-width: 30%;">打开串口
|
||||
</BButton>
|
||||
|
||||
<BButton @click="closecomport" id="closecomeside" variant="light" size="sm"
|
||||
style="font-size: xx-small;max-width: 30%;">关闭串口
|
||||
</BButton>
|
||||
|
||||
</b-button-group>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="Devinfo" >
|
||||
|
||||
<!-- <mycard v-if="datainfoup.hasrecive" :datatoshow="datainfoup" style="margin-bottom: 2px"></mycard>-->
|
||||
<!-- <mycard v-if="datainfodown.hasrecive" :datatoshow="datainfodown" style="margin-bottom: 2px"></mycard>-->
|
||||
<!-- // <mycard v-show="SerialInfo.isopen" :datatoshow="devinfoshow"></mycard>-->
|
||||
</div>
|
||||
|
||||
<!-- <Draggable style=" position: fixed; bottom: 120px;left: 0px;min-width: 14vw" >-->
|
||||
<!-- <div style=" z-index: 10; " >-->
|
||||
<!-- <mycard v-if="datainfoup.hasrecive" :datatoshow="datainfoup" style="margin-bottom: 2px"></mycard>-->
|
||||
<!-- </div>-->
|
||||
<!-- </Draggable>-->
|
||||
<!-- <Draggable style=" position: fixed; bottom: 80px;left: 0px; min-width: 14vw" >-->
|
||||
<!-- <div style=" z-index: 10; " >-->
|
||||
<!-- <mycard v-if="datainfodown.hasrecive" :datatoshow="datainfodown" style="margin-bottom: 2px"></mycard>-->
|
||||
<!-- </div>-->
|
||||
<!-- </Draggable>-->
|
||||
|
||||
|
||||
<Draggable style=" position: fixed; bottom: 40px;left: 0px;min-width: 14vw" >
|
||||
|
||||
<div style=" z-index: 10; " >
|
||||
<mycard v-if="datainfoup.hasrecive" :datatoshow="datainfoup" style="margin-bottom: 2px"></mycard>
|
||||
<mycard v-if="datainfodown.hasrecive" :datatoshow="datainfodown" style="margin-bottom: 2px"></mycard>
|
||||
<mycard v-show="SerialInfo.isopen" :datatoshow="devinfoshow"></mycard>
|
||||
</div>
|
||||
|
||||
</Draggable>
|
||||
|
||||
|
||||
|
||||
</template>
|
||||
|
||||
<style scoped>
|
||||
|
||||
.buttom {
|
||||
position: absolute;
|
||||
bottom: 20px;
|
||||
left: 20px;
|
||||
height: 20px;
|
||||
width: 95%;
|
||||
}
|
||||
|
||||
.Devinfo {
|
||||
position: absolute;
|
||||
bottom: 40px;
|
||||
left: 0px;
|
||||
width: 100%;
|
||||
|
||||
user-select: none;
|
||||
|
||||
|
||||
}
|
||||
|
||||
.devinfolist {
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
el-option {
|
||||
font-size: 5px;
|
||||
}
|
||||
|
||||
.dropdown-menu {
|
||||
--bs-dropdown-min-width: 10rem;
|
||||
}
|
||||
|
||||
:root {
|
||||
--bs-dropdown-min-width: 100px; /* 设置下拉菜单的最小宽度为200px */
|
||||
user-select: none;
|
||||
}
|
||||
|
||||
.bAccordionme {
|
||||
user-select: none;
|
||||
radio: 0px;
|
||||
}
|
||||
|
||||
|
||||
</style>
|
||||
383
src/components/siderleftmethod.js
Normal file
383
src/components/siderleftmethod.js
Normal file
@ -0,0 +1,383 @@
|
||||
import {dialog, fs} from "@tauri-apps/api";
|
||||
import {invoke} from "@tauri-apps/api/tauri";
|
||||
import * as echarts from "echarts";
|
||||
import {exit} from "@tauri-apps/api/process";
|
||||
import EventBus from "../eventBus.js";
|
||||
import eventBus from "../eventBus.js";
|
||||
|
||||
export default {
|
||||
|
||||
async saveconfig(){
|
||||
var configdata=await fs.readTextFile("./config.json");
|
||||
configdata=JSON.parse(configdata);
|
||||
configdata.Filename=this.Filename;
|
||||
configdata.pathofsave=this.pathofdir;
|
||||
configdata.caijiavgNumber=this.caijiavgNumber;
|
||||
configdata.useSG=this.dataprocessconfig.useSG;
|
||||
configdata.usehighpass=this.dataprocessconfig.usehighpass;
|
||||
fs.writeFile("config.json", JSON.stringify(configdata));
|
||||
EventBus.emit('showbox', {title: "系统", body: "保存配置成功",interval:10});
|
||||
this.isSpecialmodeshow=false;
|
||||
},
|
||||
|
||||
async choosesavepath(){
|
||||
// var path = require('path');
|
||||
// var dialog = require('@electron/remote').dialog;
|
||||
// this.pathofdir= dialog.showOpenDialogSync({
|
||||
// title: "请选择保存路径",
|
||||
// properties: ['openDirectory'],
|
||||
// })[0];
|
||||
var options= {
|
||||
defaultPath: "../",
|
||||
directory: true,
|
||||
title: "请选择保存路径",
|
||||
}
|
||||
this.pathofdir=await dialog.open(options);
|
||||
var configdata=await fs.readTextFile("./config.json");
|
||||
configdata=JSON.parse(configdata);
|
||||
configdata.Filename=this.Filename;
|
||||
configdata.pathofsave=this.pathofdir;
|
||||
fs.writeFile("config.json", JSON.stringify(configdata));
|
||||
var maxn=await this.findmaxNinpath(this.pathofdir);
|
||||
this.Pathtosave=this.pathofdir+"/"+this.Filename+this.nowNumber+".csv";
|
||||
},
|
||||
createAndDownloadFile(fileName, content) {
|
||||
// 创建一个 a 标签
|
||||
var aTag = document.createElement('a');
|
||||
// 创建一个 Blob 对象
|
||||
var blob = new Blob([content]);
|
||||
// 设置下载的文件名
|
||||
aTag.download = fileName;
|
||||
// 创建一个临时的 URL 指向 Blob 对象
|
||||
aTag.href = URL.createObjectURL(blob);
|
||||
// 模拟 a 标签的点击事件,触发下载
|
||||
aTag.click();
|
||||
// 释放创建的临时 URL 资源
|
||||
URL.revokeObjectURL(blob);
|
||||
},
|
||||
async ContinueCelect(times){
|
||||
for (var i=0;i<times;i++)
|
||||
{
|
||||
|
||||
await this.GetoneData("",Number(this.caijiavgNumber));
|
||||
var aa={
|
||||
code:"Space"
|
||||
|
||||
}
|
||||
await this.handlekeydown(aa);
|
||||
await delay(50);
|
||||
if (this.cajitimesjiange>0)
|
||||
await delay(this.cajitimesjiange*1000-50);
|
||||
}
|
||||
EventBus.emit('showbox', {title: "系统", body: "采集"+times+"次数据完成",interval:10});
|
||||
|
||||
},
|
||||
async handlekeydown(event){
|
||||
// console.log(event.code)
|
||||
|
||||
if (event.code=="Space"){
|
||||
if(this.iscollecting) {
|
||||
eventBus.emit('showbox', {title: "系统", body: "正在采集数据,请稍后再试",interval:10});
|
||||
return
|
||||
}
|
||||
//datatosave 保存
|
||||
console.log(this.datatosave)
|
||||
var data={};
|
||||
if (this.caijidirection=="UP"||this.caijidirection=="DARK")
|
||||
{
|
||||
data =this.dataup;
|
||||
}else {
|
||||
data =this.datadown;
|
||||
}
|
||||
var lenthofdataup=data.data.length;
|
||||
|
||||
let coeffweave1=this.Devinfo.bochangxishu.a0;
|
||||
let coeffweave2=this.Devinfo.bochangxishu.a1;
|
||||
let coeffweave3=this.Devinfo.bochangxishu.a2;
|
||||
let coeffweave4=this.Devinfo.bochangxishu.a3;
|
||||
var strcsv=""
|
||||
var strchogncaiyang="";
|
||||
var xValues = []
|
||||
for (var i=0;i<lenthofdataup;i++)
|
||||
{
|
||||
var weave=coeffweave1*i*i*i+coeffweave2*i*i+coeffweave3*i+coeffweave4;
|
||||
xValues.push(weave);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
var lenth=xValues.length;
|
||||
var yValues = []
|
||||
var yvalues2=[];
|
||||
if (this.Devinfo.work_mode!="advanced_mode"||this.caijidirection=="ALL")
|
||||
{
|
||||
var dataup=this.dataup;
|
||||
var datadown=this.datadown;
|
||||
strcsv+="Weavelenth,upDN,downDN,upshutter,"+dataup.shutter_time
|
||||
+",downshutter,"+datadown.shutter_time+",index"+dataup.index+"\r\n";
|
||||
strchogncaiyang="Weavelenth,upDN,downDN,upshutter,"+dataup.shutter_time+",downshutter,"+datadown.shutter_time+",index"+dataup.index+"\r\n";
|
||||
var lenthofdataup=dataup.data.length;
|
||||
for (var i=0;i<lenthofdataup;i++)
|
||||
{
|
||||
yValues.push(dataup.data[lenthofdataup-i-1]);
|
||||
yvalues2.push(datadown.data[lenthofdataup-i-1]);
|
||||
}
|
||||
if (this.outputconfig.isChongCaiyang)
|
||||
{
|
||||
let aaa= await invoke("interpolate_spline",{x:xValues,y:yValues,step:this.outputconfig.ChongCaiyanginterval})
|
||||
let bbb= await invoke("interpolate_spline",{x:xValues,y:yvalues2,step:this.outputconfig.ChongCaiyanginterval})
|
||||
|
||||
var lenthofdataup=aaa.length;
|
||||
for (var i=0;i<lenthofdataup;i++)
|
||||
{
|
||||
strchogncaiyang+=aaa[i]+","+bbb[i][1]+"\r\n";
|
||||
}
|
||||
}
|
||||
|
||||
for (var i=0;i<lenth;i++)
|
||||
{
|
||||
strcsv+=xValues[i]+","+yValues[i]+","+yvalues2[i]+"\r\n";
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
var datatosave={};
|
||||
if (this.caijidirection=="UP")
|
||||
{
|
||||
datatosave=this.dataup;
|
||||
strcsv+="Weavelenth,upDN,upshutter,"+this.dataup.shutter_time+",index"+this.dataup.index+"\r\n";
|
||||
strchogncaiyang=strcsv;
|
||||
|
||||
|
||||
}else if (this.caijidirection=="DOWN") {
|
||||
datatosave=this.datadown;
|
||||
strcsv+="Weavelenth,downDN,downshutter,"+this.datadown.shutter_time+",index"+this.datadown.index+"\r\n";
|
||||
strchogncaiyang=strcsv;
|
||||
|
||||
} else if (this.caijidirection=="DARK") {
|
||||
datatosave=this.dataup;
|
||||
strcsv+="Weavelenth,darkDN,darkshutter,"+this.dataup.shutter_time+",index"+this.dataup.index+"\r\n";
|
||||
strchogncaiyang=strcsv;
|
||||
}
|
||||
var lenthofdataup=datatosave.data.length;
|
||||
for (var i=0;i<lenthofdataup;i++)
|
||||
{
|
||||
yValues.push(datatosave.data[lenthofdataup-i-1]);
|
||||
}
|
||||
var yValuesofchongcaiyang = []
|
||||
if (this.outputconfig.isChongCaiyang)
|
||||
{
|
||||
let aaa= await invoke("interpolate_spline",{x:xValues,y:yValues,step:this.outputconfig.ChongCaiyanginterval})
|
||||
|
||||
var lenthofdataup=aaa.length;
|
||||
for (var i=0;i<lenthofdataup;i++)
|
||||
{
|
||||
strchogncaiyang+=aaa[i]+"\r\n";
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
for (var i=0;i<lenth;i++)
|
||||
{
|
||||
strcsv+=xValues[i]+","+yValues[i]+"\r\n";
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
if(this.Devinfo.work_mode=="advanced_mode")
|
||||
{
|
||||
if (this.outputconfig.isChongCaiyang)
|
||||
{
|
||||
await fs.writeFile(this.pathofdir+"/"+this.Filename+this.nowNumber+"_"+this.caijidirection+"_chongcaiyang.csv", strchogncaiyang)
|
||||
}
|
||||
|
||||
await fs.writeFile(this.pathofdir+"/"+this.Filename+this.nowNumber+"_"+this.caijidirection+".csv", strcsv);
|
||||
eventBus.emit('showbox', {title: "系统", body: "保存数据 "+ this.pathofdir+"/"+this.Filename+this.nowNumber+"_"+this.caijidirection+".csv OK",interval:10});
|
||||
}else
|
||||
{
|
||||
await fs.writeFile(this.Pathtosave, strcsv);
|
||||
eventBus.emit('showbox', {title: "系统", body: "保存数据 "+ this.Pathtosave+" OK",interval:10});
|
||||
}
|
||||
|
||||
// fs.writeFileSync(this.Pathtosave, strcsv);
|
||||
|
||||
|
||||
|
||||
this.nowNumber++;
|
||||
this.Pathtosave=this.pathofdir+"/"+this.Filename+this.nowNumber+".csv";
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
if (event.ctrlKey&&event.code=="KeyG")
|
||||
{
|
||||
this.dataprocessconfig.useSG=!this.dataprocessconfig.useSG;
|
||||
EventBus.emit('showbox', {title: "系统", body: (this.dataprocessconfig.useSG?"Go":"G"),interval:10});
|
||||
event.preventDefault();
|
||||
}
|
||||
if (event.ctrlKey&&event.code=="ArrowUp")
|
||||
{
|
||||
this.caijiavgNumber++;
|
||||
EventBus.emit('showbox', {title: "系统", body: this.caijiavgNumber,interval:100});
|
||||
|
||||
}
|
||||
if (event.ctrlKey&&event.code=="ArrowDown") {
|
||||
|
||||
if (this.caijiavgNumber>1) {
|
||||
this.caijiavgNumber--;
|
||||
EventBus.emit('showbox', {title: "系统", body: this.caijiavgNumber,interval:100});
|
||||
}else {
|
||||
EventBus.emit('showbox', {title: "系统", body: "must > 1",interval:100});
|
||||
}
|
||||
|
||||
}
|
||||
if (event.ctrlKey&&event.altKey&&event.code=="KeyS") {
|
||||
EventBus.emit('showbox', {title: "系统", body: "保存配置",interval:10});
|
||||
}
|
||||
if (event.ctrlKey&&event.code=="KeyH") {
|
||||
this.dataprocessconfig.usehighpass=!this.dataprocessconfig.usehighpass;
|
||||
EventBus.emit('showbox', {title: "系统", body: (this.dataprocessconfig.usehighpass?"Ho":"H"),interval:10});
|
||||
event.preventDefault();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
},
|
||||
|
||||
|
||||
async findmaxNinpath(directoryPath){
|
||||
|
||||
//
|
||||
//判断文件夹是否存在
|
||||
let isexits=await fs.exists(directoryPath);
|
||||
if (!isexits) {
|
||||
// 如果不存在则创建文件夹
|
||||
await fs.createDir(directoryPath);
|
||||
|
||||
}
|
||||
// 以同步模式读取目录下的所有文件名
|
||||
const files = await fs.readDir(directoryPath);
|
||||
|
||||
// 过滤出以"aaabbb"开头并且以".csv"结尾的文件
|
||||
const filteredFiles = files.filter(file => {
|
||||
|
||||
// console.log(file)
|
||||
var aa = file.path.startsWith(directoryPath + "\\" + this.Filename);
|
||||
var bb = file.path.endsWith('.csv');
|
||||
return aa && bb;
|
||||
}
|
||||
// file.path.startsWith(directoryPath+"\\"+this.Filename) && file.path.endsWith('.csv')}
|
||||
|
||||
);
|
||||
|
||||
|
||||
// 提取文件名中的N值
|
||||
const NValues = filteredFiles.map(file => {
|
||||
const match = file.name.match(new RegExp(`^${ this.Filename}(\\d+)\\.csv$`));
|
||||
return match ? parseInt(match[1]) : null;
|
||||
}).filter(value => value !== null);
|
||||
var maxN = Math.max(...NValues);
|
||||
this.nowNumber=maxN+1;
|
||||
|
||||
if (NValues.length === 0) {
|
||||
// 如果没有匹配的文件,则返回-1
|
||||
maxN=0;
|
||||
this.nowNumber=maxN;
|
||||
|
||||
}
|
||||
// 找到最大的N值
|
||||
this.Pathtosave=this.pathofdir+"\\"+this.Filename+this.nowNumber+".csv";
|
||||
return new Promise((resolve, reject) => {return maxN});
|
||||
},
|
||||
initChart() {
|
||||
const chartDom = this.$refs.chart;
|
||||
// chartDom.style.width = '100%';
|
||||
// chartDom.style.height = '100%';
|
||||
let chart = echarts.init(chartDom);
|
||||
|
||||
this.option = {
|
||||
// ECharts 配置选项
|
||||
xAxis: {
|
||||
type: 'value',
|
||||
boundaryGap: false,// 显示连续的刻度
|
||||
min: 0,
|
||||
max: 510,
|
||||
dataZoom: [
|
||||
{
|
||||
type: 'inside', // 内置数据区域缩放
|
||||
start: 0, // 初始缩放范围的起始位置(0%)
|
||||
end: 100 // 初始缩放范围的结束位置(100%)
|
||||
}
|
||||
]
|
||||
},
|
||||
animation: false,
|
||||
yAxis: {
|
||||
type: 'value',
|
||||
//min:0,
|
||||
},
|
||||
dataZoom: [
|
||||
{
|
||||
type: 'inside', // 内置数据区域缩放,包括滚轮缩放
|
||||
xAxisIndex: [0], // 对应 x 轴
|
||||
filterMode: 'none' // 不过滤数据
|
||||
},
|
||||
{
|
||||
type: 'inside', // 内置数据区域缩放,包括滚轮缩放
|
||||
yAxisIndex: [0], // 对应 y 轴
|
||||
filterMode: 'none' // 不过滤数据
|
||||
}
|
||||
],
|
||||
|
||||
|
||||
// legend: {
|
||||
// data: ['曲线'], // 图例名称
|
||||
// show: true ,// 显示图例
|
||||
// //selectedMode: 'multiple', // 图例的选择模式。默认开启图例开关,可选single,multiple
|
||||
// },
|
||||
series: [
|
||||
{
|
||||
data: [[1, 150], [2, 230], [3, 224], [4, 218], [5, 135], [6, 147], [7, 260]], // 使用二维数组表示数据点的坐标
|
||||
type: 'line',
|
||||
symbol: 'none', // 不显示数据点
|
||||
smooth: false, // 不使用平滑处理
|
||||
step: 'start' // 设置 step 类型的起始位置
|
||||
}
|
||||
]
|
||||
};
|
||||
|
||||
chart.setOption(this.option);
|
||||
},
|
||||
comboxchange() {
|
||||
// console.log(this.Comname);
|
||||
|
||||
},
|
||||
onConfirm(){
|
||||
this.options.push({value:this.optionName,label:this.optionName,index:this.options.length})
|
||||
|
||||
},
|
||||
|
||||
async closemain(){
|
||||
await exit(0);
|
||||
},
|
||||
async setspectralmode(){
|
||||
this.isSpecialmodeshow=true
|
||||
},
|
||||
get_dev_info(){
|
||||
return this.Devinfo
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
function delay(ms) {
|
||||
return new Promise(resolve => setTimeout(resolve, ms));
|
||||
}
|
||||
5
src/eventBus.js
Normal file
5
src/eventBus.js
Normal file
@ -0,0 +1,5 @@
|
||||
import mitt from 'mitt';
|
||||
|
||||
const EventBus = mitt();
|
||||
|
||||
export default EventBus;
|
||||
54
src/main.js
Normal file
54
src/main.js
Normal file
@ -0,0 +1,54 @@
|
||||
import { createApp } from "vue";
|
||||
import "./styles.css";
|
||||
import App from "./AppHyperSpectral.vue";
|
||||
import { appWindow } from '@tauri-apps/api/window';
|
||||
import { LogicalSize } from '@tauri-apps/api/window';
|
||||
import ElementPlus from 'element-plus';
|
||||
import 'element-plus/dist/index.css'
|
||||
import {createBootstrap} from 'bootstrap-vue-next'
|
||||
|
||||
//
|
||||
// // Add the necessary CSS
|
||||
import 'bootstrap/dist/css/bootstrap.css'
|
||||
import 'bootstrap-vue-next/dist/bootstrap-vue-next.css'
|
||||
import ArcoVue from '@arco-design/web-vue';
|
||||
|
||||
import '@arco-design/web-vue/dist/arco.css';
|
||||
import { Draggable,DraggablePlugin, DraggableDirective } from '@braks/revue-draggable';
|
||||
import KonamiCode from 'vue3-konami-code';
|
||||
import EventBus from "./eventBus.js";
|
||||
|
||||
async function setWindowSize() {
|
||||
// const primaryMonitor = await screen.primaryMonitor();
|
||||
// const screenSize = primaryMonitor.size;
|
||||
|
||||
const newSize = new LogicalSize(800, 600);
|
||||
await appWindow.setSize(newSize);
|
||||
// appWindow.setSize(new Size(1000, 1000));
|
||||
}
|
||||
var app = createApp(App);
|
||||
app.use(ElementPlus);
|
||||
app.use(createBootstrap( {components: true, directives: true,plugins:true,icons: true,}));
|
||||
app.use(ArcoVue);
|
||||
app.use(DraggablePlugin);
|
||||
app.use(KonamiCode, {
|
||||
onKonamiCodeEntered: () => {
|
||||
// 用户输入Konami Code后执行的代码
|
||||
console.log('Konami Code 已输入!');
|
||||
EventBus.emit('konamiactive');
|
||||
}
|
||||
});
|
||||
// or
|
||||
app.directive('draggable', DraggableDirective)
|
||||
app.component('Draggable', Draggable);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// app.use(BootstrapVueIcons);
|
||||
app.mount("#app");
|
||||
|
||||
|
||||
|
||||
|
||||
114
src/styles.css
Normal file
114
src/styles.css
Normal file
@ -0,0 +1,114 @@
|
||||
:root {
|
||||
font-family: Inter, Avenir, Helvetica, Arial, sans-serif;
|
||||
font-size: 16px;
|
||||
line-height: 24px;
|
||||
font-weight: 400;
|
||||
|
||||
color: #0f0f0f;
|
||||
background-color: #f6f6f6;
|
||||
|
||||
font-synthesis: none;
|
||||
text-rendering: optimizeLegibility;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
-webkit-text-size-adjust: 100%;
|
||||
}
|
||||
|
||||
.container {
|
||||
margin: 0;
|
||||
padding-top: 10vh;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.logo {
|
||||
height: 6em;
|
||||
padding: 1.5em;
|
||||
will-change: filter;
|
||||
transition: 0.75s;
|
||||
}
|
||||
|
||||
.logo.tauri:hover {
|
||||
filter: drop-shadow(0 0 2em #24c8db);
|
||||
}
|
||||
|
||||
.row {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
a {
|
||||
font-weight: 500;
|
||||
color: #646cff;
|
||||
text-decoration: inherit;
|
||||
}
|
||||
|
||||
a:hover {
|
||||
color: #535bf2;
|
||||
}
|
||||
|
||||
h1 {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
input,
|
||||
button {
|
||||
border-radius: 8px;
|
||||
border: 1px solid transparent;
|
||||
padding: 0.6em 1.2em;
|
||||
font-size: 1em;
|
||||
font-weight: 500;
|
||||
font-family: inherit;
|
||||
color: #0f0f0f;
|
||||
background-color: #ffffff;
|
||||
transition: border-color 0.25s;
|
||||
box-shadow: 0 2px 2px rgba(0, 0, 0, 0.2);
|
||||
}
|
||||
|
||||
button {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
button:hover {
|
||||
border-color: #396cd8;
|
||||
}
|
||||
button:active {
|
||||
border-color: #396cd8;
|
||||
background-color: #e8e8e8;
|
||||
}
|
||||
|
||||
input,
|
||||
button {
|
||||
outline: none;
|
||||
}
|
||||
#app {
|
||||
max-width: 3000px;
|
||||
margin: 0 auto;
|
||||
padding: 2rem;
|
||||
text-align: center;
|
||||
}
|
||||
#greet-input {
|
||||
margin-right: 5px;
|
||||
}
|
||||
|
||||
@media (prefers-color-scheme: dark) {
|
||||
:root {
|
||||
color: #f6f6f6;
|
||||
background-color: #2f2f2f;
|
||||
}
|
||||
|
||||
a:hover {
|
||||
color: #24c8db;
|
||||
}
|
||||
|
||||
input,
|
||||
button {
|
||||
color: #ffffff;
|
||||
background-color: #0f0f0f98;
|
||||
}
|
||||
button:active {
|
||||
background-color: #0f0f0f69;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user