YangJian0701 1 jaar geleden
bovenliggende
commit
603cc02892

BIN
dist.rar


+ 9 - 0
src/api/modules/Certificate.js

@@ -10,3 +10,12 @@ export const getCertificate = (data) => {
     baseURL: baseURL1,
   });
 };
+//
+export const getCertificateList = (data) => {
+  return service.request({
+    method: 'POST',
+    url: '/Certificate/List',
+    data,
+    baseURL: baseURL1,
+  });
+};

+ 1 - 1
src/api/modules/editApi.js

@@ -5,7 +5,7 @@ import { baseURL4 } from '../../constant';
 export const TaskCopy = (data) => {
   return service.request({
     method: 'POST',
-    url: '/TaskData/CopyFromPosition',
+    url: '/TaskData/CopyFromPositionSN',
     data,
     baseURL: baseURL4,
   });

+ 15 - 3
src/components/highcharts-t.vue

@@ -35,7 +35,9 @@ nextTick(()=>{
     chartOptions1.yAxis.plotLines[1].value = plot.value.tBottom
     chartOptions1.yAxis.plotLines[1].label.text = `下限(${plot.value.tBottom}Rh)` //标签的内容
 })
-
+emitter.on("onFormData", (val) => {
+  console.log("打印11111:", val);
+});
 //设置就展示
 emitter.on("onMessage", (val) => {
     console.log('123',val)
@@ -89,6 +91,7 @@ watch(() => popData.dataList, (newValue) => {
 }, { deep: true, immediate: false })
 
 const emit = defineEmits(['setTimeFun']);
+const zoomTypes = ref('xy')
 // 图表配置
 const chartOptions1 = reactive({
     xAxis: {
@@ -172,16 +175,25 @@ const chartOptions1 = reactive({
     scrollbar: {
         enabled: false,
     },
+    
     chart: {
         zooming: {
             singleTouch: true,
             resetButton: {},
-            type: 'xy',
+            type:'x',
         },
         events: {
             selection(event) {
                 if (event.xAxis) {
-                    console.log('框选')
+                    // if (store.state.focuDatas!=null) {
+                    //     chartOptions1.chart.zooming.type = 'xy'
+                    // }else{
+                    //     chartOptions1.chart.zooming.type = ''
+                    // }
+                    // nextTick(()=>{
+                    //     chartOptions1.series = popData.dataList
+                    // })
+                    console.log('框选',store.state.focuDatas)
                     emitter.emit("onSelectionTime",event.xAxis);
                     emit("setTimeFun", event.xAxis)
                 }

+ 5 - 1
src/store/index.js

@@ -9,12 +9,16 @@ export default createStore({
       tTop:null,
       hBottom:null,
       hTop:null
-    }
+    },
+    focuDatas:null//获取到焦点
   },
   getters: {
    
   },
   mutations: {
+    setfocuFun(state,data){//获取到焦点
+      state.focuDatas = data
+    },
     setplotData(state,data){
       console.log('存储',data)
       state.plotLineList = data

+ 17 - 5
src/views/data/edit/FormList.vue

@@ -91,10 +91,12 @@
 
 import { getVerifyTemplateMapDataList,putVerifyTemplateMapData} from '@/api';
 import { getToken } from '@/utils/storage/sessionToken';
-import { ref, watch } from 'vue';
+import { ref, watch ,onUnmounted} from 'vue';
 import emitter from "@/plugin/bus";
 import { InformationCircleOutline } from '@vicons/ionicons5';
 import { TimeDate } from '@/plugin/timeFun';
+import {useStore} from "vuex"
+const store = useStore()
 const props = defineProps({
   task: {
     type: Object,
@@ -113,15 +115,25 @@ const props = defineProps({
     default: () => [],
   },
 });
+const focusData = reactive({
+  fNum:null,
+  obj:{}
+})
+watch(() => focusData.fNum,(newValue) => {//有焦点时存
+    store.commit('setfocuFun',newValue)
+},{deep:true,immediate:true});
 
+onUnmounted(() => {//卸载把焦点设置为null
+  store.commit('setfocuFun',null) 
+})
 // 表单对象
 const formValue = reactive({
   formList: [],
 });
-const focusData = reactive({
-  fNum:null,
-  obj:{}
-})
+
+
+emitter.emit("onFormData",focusData);
+
 const blurFun = () =>{
   console.log('失去焦点')
 }

+ 2 - 2
src/views/data/edit/editFixation.vue

@@ -4,7 +4,7 @@
   <n-modal v-model:show="showModal" title="偏移(固定)" :mask-closable="false" :show-icon="false" preset="dialog">
     <n-form label-placement="left" label-width="auto" style="margin-top: 20px;">
       <n-form-item label="温度">
-        <n-input-number v-model:value="data.FixTemperature" :validator="(x) => x >= 0" style="width: 100%;">
+        <n-input-number v-model:value="data.FixTemperature" style="width: 100%;">
           <template #suffix>
             °C
           </template>
@@ -12,7 +12,7 @@
       </n-form-item>
       
       <n-form-item label="湿度">
-        <n-input-number v-model:value="data.FixHumidity" :validator="(x) => x >= 0" style="width: 100%;">
+        <n-input-number v-model:value="data.FixHumidity" style="width: 100%;">
           <template #suffix>
             %
           </template>

+ 4 - 4
src/views/data/edit/editMath.vue

@@ -4,28 +4,28 @@
   <n-modal v-model:show="showModal" title="偏移(随机)" :mask-closable="false" :show-icon="false" preset="dialog">
     <n-form label-placement="left" label-width="auto" style="margin-top: 20px;">
       <n-form-item label="最大温度">
-        <n-input-number v-model:value="data.TemperatureMax" :validator="(x) => x >= 0" style="width: 100%;">
+        <n-input-number v-model:value="data.TemperatureMax" style="width: 100%;">
           <template #suffix>
             °C
           </template>
         </n-input-number>
       </n-form-item>
       <n-form-item label="最小温度">
-        <n-input-number v-model:value="data.TemperatureMin" :validator="(x) => x >= 0" style="width: 100%;">
+        <n-input-number v-model:value="data.TemperatureMin" style="width: 100%;">
           <template #suffix>
             °C
           </template>
         </n-input-number>
       </n-form-item>
       <n-form-item label="最大湿度">
-        <n-input-number v-model:value="data.HumidityMax" :validator="(x) => x >= 0" style="width: 100%;">
+        <n-input-number v-model:value="data.HumidityMax" style="width: 100%;">
           <template #suffix>
             %
           </template>
         </n-input-number>
       </n-form-item>
       <n-form-item label="最小湿度">
-        <n-input-number v-model:value="data.HumidityMin" :validator="(x) => x >= 0" style="width: 100%;">
+        <n-input-number v-model:value="data.HumidityMin" style="width: 100%;">
           <template #suffix>
             %
           </template>

+ 2 - 2
src/views/data/edit/editSmooth.vue

@@ -4,7 +4,7 @@
   <n-modal v-model:show="showModal" title="平滑" :mask-closable="false" :show-icon="false" preset="dialog">
     <n-form label-placement="left" label-width="auto" style="margin-top: 20px;">
       <n-form-item label="温度">
-        <n-input-number v-model:value="data.tRange" :validator="(x) => x >= 0" style="width: 100%;">
+        <n-input-number v-model:value="data.tRange" style="width: 100%;">
           <template #suffix>
             °C
           </template>
@@ -12,7 +12,7 @@
       </n-form-item>
       
       <n-form-item label="湿度">
-        <n-input-number v-model:value="data.hRange" :validator="(x) => x >= 0" style="width: 100%;">
+        <n-input-number v-model:value="data.hRange" style="width: 100%;">
           <template #suffix>
             %
           </template>

+ 108 - 73
src/views/data/edit/index.vue

@@ -9,11 +9,18 @@
           <n-tab-pane name="1" tab="设备">
             <n-list>
               <template #header>
-                <div style="display: flex;justify-content: space-between;align-items: center;">
-                  <n-checkbox v-model:checked="checked" @update:checked="handleSelectAll">
-                    全选
-                  </n-checkbox>
-                  <n-button type="primary" @click="renderFun()">渲染</n-button>
+                <div style="">
+                  <div style="display: flex;justify-content: space-between;align-items: center;margin-bottom: 10px;">
+                    <n-date-picker format="yyyy-MM-dd HH:mm" v-model:value="pickTimes.picktmSta"
+                      :time-picker-props="{ format: 'HH:mm' }" @update:formatted-value="setTimeFuns" @focus="focusFun(1)" type="datetimerange" clearable />
+                    <n-button type="primary" @click="renderFun(1)" style="margin-left: 10px;">渲染</n-button>
+                  </div>
+                  <div>
+                    <n-checkbox v-model:checked="checked" @update:checked="handleSelectAll" style="flex-shrink: 0;">
+                      全选
+                    </n-checkbox>
+                  </div>
+
                 </div>
               </template>
               <n-scrollbar :style="{ maxHeight: `${height - 310}px` }" trigger="none">
@@ -46,7 +53,8 @@
             </n-list>
           </n-tab-pane>
           <n-tab-pane name="2" tab="表单">
-            <FormList :task="task" :class-list="classList" :time="time" :temporal-interval="temporalInterval" />
+            <FormList :task="task" ref="formRef" :class-list="classList" :time="time"
+              :temporal-interval="temporalInterval" />
           </n-tab-pane>
         </n-tabs>
       </n-card>
@@ -54,74 +62,71 @@
         <div class="h-full flex flex-col gap-y-3">
           <n-space justify="space-between">
             <n-input-group>
-              <n-date-picker format="yyyy-MM-dd HH:mm" v-model:value="ranges" :time-picker-props="{ format: 'HH:mm' }" @update:formatted-value="(value) => {
-                queryData.Time_start = value[0];
-                queryData.Time_end = value[1];
-              }
-                " type="datetimerange" />
-              <!-- <n-button type="primary" @click="renderFun">搜索</n-button> -->
+              <n-date-picker format="yyyy-MM-dd HH:mm" v-model:value="pickTimes.pickleveTime" :time-picker-props="{ format: 'HH:mm' }" @focus="focusFun(2)"
+              @update:formatted-value="setTimeFuns"  type="datetimerange" />
+              <n-button type="primary" @click=" renderFun(2) ">渲染</n-button>
             </n-input-group>
-            <n-space> 
-              <ExportVue :queryObj="queryData" :checkData="checkValues"/>
-              <ImportVue :task="task" />
-              <ImportPlatform :task="task" />
-              <AddVue :class-list="classList" :task="task" />
-              <SetVue/>
-              <editCopy :queryObj="queryData" :checkData="checkValues" :classList="classList"/>
-              <AverageCopy :queryObj="queryData" :checkData="checkValues" :classList="classList"></AverageCopy>
-              <editLeak :queryObj="queryData" :checkData="checkValues"/>
-              <editTendency :queryObj="queryData" :checkData="checkValues"/>
-
-              <editMath :queryObj="queryData" :checkData="checkValues"/>
-              <editFixation :queryObj="queryData" :checkData="checkValues"/>
-              <editSmooth :queryObj="queryData" :checkData="checkValues"/>
+            <n-space>
+              <ExportVue :queryObj=" queryData " :checkData=" checkValues " />
+              <ImportVue :task=" task " />
+              <ImportPlatform :task=" task " />
+              <AddVue :class-list=" classList " :task=" task " />
+              <SetVue />
+              <editCopy :queryObj=" queryData " :checkData=" checkValues " :classList=" classList " />
+              <AverageCopy :queryObj=" queryData " :checkData=" checkValues " :classList=" classList "></AverageCopy>
+              <editLeak :queryObj=" queryData " :checkData=" checkValues " />
+              <editTendency :queryObj=" queryData " :checkData=" checkValues " />
+
+              <editMath :queryObj=" queryData " :checkData=" checkValues " />
+              <editFixation :queryObj=" queryData " :checkData=" checkValues " />
+              <editSmooth :queryObj=" queryData " :checkData=" checkValues " />
               <!-- <n-button type="primary" @click="goDataEd">数据编辑</n-button> -->
             </n-space>
           </n-space>
-          <n-tabs type="segment" animated v-model:value="tabChart" @update:value="handleTabChange">
+          <n-tabs type="segment" animated v-model:value=" tabChart " @update:value=" handleTabChange ">
             <n-tab-pane name="温度" tab="温度">
-              <highchartsT :dataList="dataList" @setTimeFun="setTimeFun"></highchartsT>
-              
+              <highchartsT :dataList=" dataList " @setTimeFun=" setTimeFun "></highchartsT>
+
             </n-tab-pane>
             <n-tab-pane name="湿度" tab="湿度">
-              <highchartsH :dataList="dataList" @setTimeFun="setTimeFun"></highchartsH>
+              <highchartsH :dataList=" dataList " @setTimeFun=" setTimeFun "></highchartsH>
             </n-tab-pane>
           </n-tabs>
         </div>
       </n-card>
     </div>
   </div>
-  <n-modal v-model:show="modal.showModal" :title="modal.title" :show-icon="false" preset="dialog">
-    <template v-if="modal.title === '温度'">
+  <n-modal v-model:show=" modal.showModal " :title=" modal.title " :show-icon=" false " preset="dialog">
+    <template v-if=" modal.title === '温度' ">
       <n-form-item show-require-mark>
-        <n-input v-model:value="formValue.T_t" />
+        <n-input v-model:value=" formValue.T_t " />
       </n-form-item>
     </template>
     <template v-else>
       <n-form-item show-require-mark>
-        <n-input v-model:value="formValue.T_rh" />
+        <n-input v-model:value=" formValue.T_rh " />
       </n-form-item>
     </template>
     <n-space justify="end">
-      <n-popconfirm @positive-click="deleteTask">
+      <n-popconfirm @positive-click=" deleteTask ">
         <template #trigger>
           <n-button type="error">删除该点</n-button>
         </template>
         是否确认删除?
       </n-popconfirm>
-      <n-button type="primary" @click="editTask">确定</n-button>
+      <n-button type="primary" @click=" editTask ">确定</n-button>
 
     </n-space>
   </n-modal>
   <!-- 编辑 -->
-  <n-modal v-model:show="showModal" preset="dialog" positive-text="确认" negative-text="取消" :show-icon="false"
-    @positive-click="handleEdit">
-    <n-form :model="formDatas" label-width="auto" show-require-mark>
+  <n-modal v-model:show=" showModal " preset="dialog" positive-text="确认" negative-text="取消" :show-icon=" false "
+    @positive-click=" handleEdit ">
+    <n-form :model=" formDatas " label-width="auto" show-require-mark>
       <n-form-item label="ID" path="T_id">
-        <n-input v-model:value="formDatas.T_id" />
+        <n-input v-model:value=" formDatas.T_id " />
       </n-form-item>
       <n-form-item label="SN" path="T_sn">
-        <n-input v-model:value="formDatas.T_sn" disabled="false" />
+        <n-input v-model:value=" formDatas.T_sn " disabled="false" />
       </n-form-item>
     </n-form>
   </n-modal>
@@ -165,22 +170,39 @@ import DeleteClass from './DeleteTaskClass.vue';
 import { dateFormat } from 'highcharts';
 import { TimeDate } from '@/plugin/timeFun';
 import { useMessage } from "naive-ui";
-import { ref,watch} from 'vue';
+import { reactive, ref, watch } from 'vue';
+import { useStore } from "vuex"
+const store = useStore()
+
 
 const formatted = useDateFormat(useNow(), 'YYYY-MM-DD HH:mm:ss');
 
 const notification = useNotification();
 
 const { height } = useWindowSize();
-
+const formRef = ref(null)
 const message = useMessage();
 
 const task = window.sessionStorage.getItem('task')
   ? JSON.parse(window.sessionStorage.getItem('task'))
   : {};
+//获得焦点的赋值
+const blueData = ref(null)
+//做时间选择清除
+const setTimeFuns = (e) => {
+  if (e == null) {
+    queryData.Time_start = '';
+    queryData.Time_end = '';
+  } else {
+    queryData.Time_start = value[0];
+    queryData.Time_end = value[1];
+  }
+}
 
-
-
+const focusFun = (e)=>{
+  console.log('获取焦点',e)
+  blueData.value = e
+}
 // Modal 数据源
 const modal = reactive({
   showModal: false,
@@ -200,13 +222,13 @@ const dataList = ref([]);
 
 
 
- const formDatas = reactive({
+const formDatas = reactive({
   T_sn: '',
   T_id: '',
 });
 const showModal = ref(false);
 const dblclickFun = (e) => {
-  console.log('双击',e)
+  console.log('双击', e)
   formDatas.T_sn = e.T_sn
   formDatas.T_id = e.T_id
   showModal.value = true;
@@ -238,11 +260,6 @@ const queryData = reactive({
   T_task_id: task.T_task_id,
   T_sn: '',
   T_id: '',
-  // Time_start: '2023-04-18 07:14:00',
-  // Time_end: '2023-04-18 07:25:00',
-  // Time_start: '2023-04-06 23:50:00',
-  // Time_end: '2023-04-07 00:00:00',
-  
   Time_start: '',
   Time_end: '',
   page: 1,
@@ -257,27 +274,43 @@ const getClassList = async () => {
 };
 getClassList();
 
-const ranges = ref(null)
-// watch(() => ranges.value, (newValue) => {
-//    console.log('时间',newValue)  
-// }, { deep: true, immediate: true })
+//两个pick的value
+
+const pickTimes = reactive({
+  picktmSta:null,
+  pickleveTime:null,
+})
 //图表框选时间修改
-const setTimeFun = (e)=>{
-  console.log('修改的三个hi见',e)
-  ranges.value = [parseInt(e[0].min),parseInt(e[0].max)]
-  queryData.Time_start = TimeDate(parseInt(e[0].min))
-  queryData.Time_end = TimeDate(parseInt(e[0].max))
+const setTimeFun = (e) => {
+  if(blueData.value==1){//等于1左边使用时间
+    pickTimes.picktmSta = [parseInt(e[0].min), parseInt(e[0].max)]
+  }else if(blueData.value==2){
+    pickTimes.pickleveTime = [parseInt(e[0].min), parseInt(e[0].max)]
+  }else{
+    queryData.Time_start = ''
+    queryData.Time_end = ''
+  }
 }
 
 
 const resData = ref()
 //渲染按钮
-const renderFun = async () => {
-  if(checkValues.value==null){
+const renderFun = async (j) => {
+  if (checkValues.value == null) {
     message.error("哎呀,请选择设备在查询哟");
     return
   }
-  // dataList.value = []
+  console.log('ee',pickTimes.picktmSta,pickTimes.pickleveTime)
+  if(j==1 && pickTimes.picktmSta!=null){
+    queryData.Time_start = TimeDate(parseInt(pickTimes.picktmSta[0]))
+    queryData.Time_end = TimeDate(parseInt(pickTimes.picktmSta[1]))
+  }else if(j==2 && pickTimes.pickleveTime!=null){
+    queryData.Time_start = TimeDate(parseInt(pickTimes.pickleveTime[0]))
+    queryData.Time_end = TimeDate(parseInt(pickTimes.pickleveTime[1]))
+  }else{
+    queryData.Time_start = ''
+    queryData.Time_end = ''
+  }
   let arr = []
   for (let i = 0; i < checkValues.value.length; i++) {
     queryData.T_id = checkValues.value[i].T_id;
@@ -307,7 +340,7 @@ const deleteTask = async () => {
 
 // 编辑
 const editTask = async () => {
-  console.log('88',tabValue.value, dataInfo.value,formValue.T_t,formValue.T_rh)
+  console.log('88', tabValue.value, dataInfo.value, formValue.T_t, formValue.T_rh)
   // return
   const { data: res } = await editTaskData({
     T_task_id: queryData.T_task_id,
@@ -327,20 +360,22 @@ const convertDataFun = (array) => {
   let objData = {
     name: '',
     data: [],
-   
+
     events: {
       click(e) {
-        console.log('点击',e.point.x)
         time.value = e.point.x
-        if(tabChart.value == '温度'){
+        if (tabChart.value == '温度') {
           formValue.T_t = e.point.y
-        }else{
+        } else {
           formValue.T_rh = e.point.y
         }
         // formValue.T_t = e.point.y
-        modal.showModal = true
+        if (store.state.focuDatas == null) {
+          modal.showModal = true
+        }
+
         queryData.T_id = e.point.series.name;
-        modal.title = tabChart.value == '温度'?'温度':'湿度';
+        modal.title = tabChart.value == '温度' ? '温度' : '湿度';
         let serName = e.point.series.name
         const b = dataList.value.find(item => item.name == serName)
         dataInfo.value = b.data[e.point.index];
@@ -351,7 +386,7 @@ const convertDataFun = (array) => {
     let arr = array.reverse()
     objData.name = arr[0].T_sn
     arr.forEach(item => {
-      objData.data.push([new Date(item.T_time).getTime(), tabChart.value=='温度'?item.T_t:item.T_rh, tabChart.value=='温度'?item.T_rh:item.T_t, item.T_sn, item.T_id, item.ID])
+      objData.data.push([new Date(item.T_time).getTime(), tabChart.value == '温度' ? item.T_t : item.T_rh, tabChart.value == '温度' ? item.T_rh : item.T_t, item.T_sn, item.T_id, item.ID])
     });
   } else {
     objData.data = []
@@ -414,7 +449,7 @@ const handleTabChange = (e) => {
   tabValue.value = e
   // console.log('切换',resData.value,tabValue.value,e)
   renderFun()
- 
+
 };
 
 

+ 5 - 0
src/views/data/source/index.vue

@@ -93,6 +93,11 @@ const taskList = ref([]);
 
 // 需要展示的列
 const columns = [
+
+{
+    title: '编号',
+    key: 'T_id',
+  },
   {
     title: 'SN',
     key: 'T_sn',

+ 114 - 44
src/views/equipment/index.vue

@@ -5,52 +5,32 @@
     </n-page-header>
     <n-space justify="space-between">
       <n-input-group>
-        <n-input
-          style="width: 300px"
-          v-model:value="queryData.T_sn"
-          @clear="handleClear"
-          clearable
-        />
+        <n-input style="width: 300px" v-model:value="queryData.T_sn" @clear="handleClear" clearable />
         <n-button type="primary" @click="getDataList"> 搜索 </n-button>
       </n-input-group>
       <n-button type="primary" @click="showAddModal">批量导入</n-button>
     </n-space>
-    <n-data-table
-      remote
-      :columns="columns"
-      :data="data"
-      :bordered="false"
-      flex-height
-      class="flex-1"
-    />
+    <n-data-table remote :columns="columns" :data="data" :bordered="false" flex-height class="flex-1" />
   </div>
-  <n-modal
-    :show-icon="false"
-    v-model:show="modal.showModal"
-    preset="dialog"
-    :title="modal.title"
-    positive-text="提交"
-    negative-text="取消"
-    @positive-click="submitCallback"
-  >
+  <n-modal :show-icon="false" v-model:show="modal.showModal" preset="dialog" style="width: 1000px;" :title="modal.title"
+    positive-text="提交" negative-text="取消" @positive-click="submitCallback">
+    <n-button type="primary" @click="showAddModalobj" style="margin-bottom: 10px">选择添加</n-button>
     <n-form :model="formValue" label-width="auto" show-require-mark>
       <template v-if="modal.title === '批量导入'">
-        <n-form-item label="SN-ID" path="T_snid">
-          <n-input
-            v-model:value="formValue.T_snid"
-            type="textarea"
-            :autosize="{
-              minRows: 3,
-              maxRows: 5,
-            }"
-          />
+        <n-form-item label="布局编号" path="T_snid">
+          <n-input v-model:value="formValue.T_snid" type="textarea" :autosize="{
+            minRows: 3,
+            maxRows: 5,
+          }" placeholder="【方式一:001,002,003】【方式二:001~002,005】" />
         </n-form-item>
       </template>
+
       <template v-else>
         <n-form-item label="编号" path="T_id">
           <n-input v-model:value="formValue.T_id" />
         </n-form-item>
       </template>
+
       <n-form-item label="备注(默认:产品存放区域)" path="T_remark">
         <n-radio-group v-model:value="formValue.T_remark" style="width: 100%;">
           <div>
@@ -72,11 +52,56 @@
             <n-radio :value="otherVal">
               其他
             </n-radio>
-            <n-input v-if="!['产品存放区域','车厢外环境','药品存放区域'].includes(formValue.T_remark)" v-model:value="otherVal" type="textarea"/>
-          </div> 
+            <n-input v-if="!['产品存放区域', '车厢外环境', '药品存放区域'].includes(formValue.T_remark)" v-model:value="otherVal"
+              type="textarea" />
+          </div>
         </n-radio-group>
       </n-form-item>
     </n-form>
+    <n-modal :show-icon="false" v-model:show="modal.showModalobj" style="width: 900px;min-height: 700px;" preset="dialog"
+      title="选择添加">
+      <n-form inline label-placement="left" :model="formValues" :rules="rules" :size="size">
+        <n-form-item label="布局编号">
+          <n-input v-model:value="formValues.T_layout_no" placeholder="输入布局编号" />
+        </n-form-item>
+        <n-form-item label="设备编号">
+          <n-input v-model:value="formValues.T_sn" placeholder="输入设备编号" />
+        </n-form-item>
+        <n-form-item>
+          <n-button type="primary" attr-type="button" @click="GetficateListApi">
+            查询
+          </n-button>
+        </n-form-item>
+      </n-form>
+      <n-table :bordered="false" :single-line="false">
+        <thead>
+          <tr>
+            <th>
+              <n-checkbox :checked="checked" @update:checked="handleCheckedChange" />
+            </th>
+            <th>布局编号</th>
+            <th>设备编号</th>
+          </tr>
+        </thead>
+        <tbody>
+          <tr v-for="item, index in checje.chkData" :key="index">
+            <td style="width: 60px;">
+              <n-checkbox-group v-model:value="checje.Selecteds" @update:value="handleUpdateValue">
+                <n-checkbox :value="item" />
+              </n-checkbox-group>
+            </td>
+            <td style="width: 250px;">{{ item.T_layout_no }}</td>
+            <td>{{ item.Id }}</td>
+          </tr>
+        </tbody>
+      </n-table>
+      <div style="margin-top: 20px;">
+        <n-pagination :display-order="[ 'size-picker', 'pages','quick-jumper']" :page-count="100" :page-sizes="[10, 20, 30, 40]" show-quick-jumper show-size-picker>
+        <template #prefix="">共 200项
+        </template>
+    </n-pagination>
+      </div>
+    </n-modal>
   </n-modal>
 </template>
 
@@ -88,22 +113,61 @@ import {
   addDeviceClassList,
   editDeviceClassList,
   deleteDeviceClassList,
+  getCertificateList
 } from '@/api';
 
 const task = window.sessionStorage.getItem('task')
   ? JSON.parse(window.sessionStorage.getItem('task'))
   : {};
 
+
+
 const message = useMessage();
 
+const formValues = reactive({
+  T_sn: '',//设备编号
+  T_layout_no: '',//布局编号
+  T_layout_no_sort: '',//排序 0默认 1升2降
+  page: 1,
+  page_z: 10,
+});
+const checked = ref(false)
+const checje = reactive({
+  Selecteds: null,
+  chkData: []
+})
+//全选
+const handleCheckedChange = (value) => {
+  checked.value = value
+  value ? checje.Selecteds = checje.chkData : checje.Selecteds = null
+}
+//单选
+const handleUpdateValue = (value) => {
+  value.length == checje.chkData.length ? checked.value = true : checked.value = false
+}
+// 选择导入
+const showAddModalobj = () => {
+  modal.showModalobj = true;
+  GetficateListApi()
+};
+
+const GetficateListApi = () => {
+  getCertificateList(formValues).then(res => {
+    let { data: resIt } = res
+    if (resIt.Code == 200) {
+      checje.chkData = resIt.Data.List
+    }
+  })
+}
+
 // 查询参数
 const queryData = reactive({
   T_sn: '',
   T_class: task.T_class,
 });
 const otherVal = ref('')
-watch(otherVal,(newval)=>{
-  console.log('将变化',newval)
+watch(otherVal, (newval) => {
+  console.log('将变化', newval)
   formValue.T_remark = newval
 })
 // 需要展示的列
@@ -179,6 +243,7 @@ const data = ref([]);
 const modal = reactive({
   title: '',
   showModal: false,
+  showModalobj: false,
 });
 
 // 获取表项中收集到的值的对象
@@ -199,8 +264,10 @@ const submitCallback = () => {
   if (modal.title === '批量导入') {
     const arr = formValue.T_snid.split('\n');
     arr.forEach(async (item) => {
-      const [T_sn, T_id] = item.split('-');
-      const code = await addDeviceClass(T_sn, T_id);
+      const [T_layout_no_list, T_id] = item.split('-');
+      console.log('eee', T_layout_no_list, T_id)
+      // return
+      const code = await addDeviceClass(T_layout_no_list, T_id);
       if (code !== 200) {
         return false;
       }
@@ -212,10 +279,10 @@ const submitCallback = () => {
 
 // 显示编辑
 const showEditModal = (row) => {
-  console.log('显示编辑',row)
- if(!['产品存放区域','车厢外环境','药品存放区域'].includes(row.T_remark)){
-  otherVal.value = row.T_remark;
- }
+  console.log('显示编辑', row)
+  if (!['产品存放区域', '车厢外环境', '药品存放区域'].includes(row.T_remark)) {
+    otherVal.value = row.T_remark;
+  }
   modal.title = '修改编号';
   modal.showModal = true;
   formValue.Id = row.Id;
@@ -231,6 +298,9 @@ const showAddModal = () => {
   formValue.T_remark = '产品存放区域';
 };
 
+
+
+
 // 删除
 const deleteDeviceClass = async (row) => {
   try {
@@ -264,11 +334,11 @@ const editDeviceClass = async () => {
 };
 
 // 批量导入
-const addDeviceClass = async (T_sn, T_id) => {
+const addDeviceClass = async (T_layout_no_list, T_id) => {
   try {
     const { data: res } = await addDeviceClassList({
       T_class: queryData.T_class,
-      T_sn,
+      T_layout_no_list,
       T_id,
       T_remark: formValue.T_remark,
     });