YangJian0701 vor 1 Jahr
Ursprung
Commit
1bf4074876

BIN
dist.rar


+ 2 - 0
src/api/index.js

@@ -9,4 +9,6 @@ export * from './modules/Data';
 export * from './modules/GenerateReport';
 export * from './modules/Certificate';
 export * from './modules/scheme';
+export * from './modules/editApi';
+
 

+ 10 - 0
src/api/modules/TaskData.js

@@ -62,6 +62,16 @@ export const addTaskData = (data) => {
   });
 };
 
+// 任务数据(添加)
+export const addTaskDatas = (data) => {
+  return service.request({
+    method: 'POST',
+    url: '/TaskData//AddS',
+    data,
+    baseURL: baseURL4,
+  });
+};
+
 // 任务数据(编辑)
 export const editTaskData = (data) => {
   return service.request({

+ 61 - 0
src/api/modules/editApi.js

@@ -0,0 +1,61 @@
+import service from '@/utils/axios';
+import { baseURL4 } from '../../constant';
+
+//复制到
+export const TaskCopy = (data) => {
+  return service.request({
+    method: 'POST',
+    url: '/TaskData/CopyFromPosition',
+    data,
+    baseURL: baseURL4,
+  });
+};
+
+//补漏
+export const TaskRepairSen = (data) => {
+  return service.request({
+    method: 'POST',
+    url: '/TaskData/RepairSensorData',
+    data,
+    baseURL: baseURL4,
+  });
+};
+
+//趋势
+export const TaskDataSensor = (data) => {
+  return service.request({
+    method: 'POST',
+    url: '/TaskData/DataSensorDataTrend',
+    data,
+    baseURL: baseURL4,
+  });
+};
+
+//偏移随机
+export const TaskUpdateRand = (data) => {
+  return service.request({
+    method: 'POST',
+    url: '/TaskData/UpdateRand',
+    data,
+    baseURL: baseURL4,
+  });
+};
+
+//偏移固定
+export const TaskUpdateFix = (data) => {
+  return service.request({
+    method: 'POST',
+    url: '/TaskData/UpdateFix',
+    data,
+    baseURL: baseURL4,
+  });
+};
+//平滑
+export const TaskSmooth = (data) => {
+  return service.request({
+    method: 'POST',
+    url: '/TaskData/DataSensorDataSmooth',
+    data,
+    baseURL: baseURL4,
+  });
+};

+ 42 - 51
src/views/data/edit/ExportVue.vue

@@ -1,92 +1,83 @@
 <template>
   <n-button type="primary" @click="showImportModal">导出数据</n-button>
-  <n-modal
-    style="width: 30%"
-    v-model:show="showModal"
-    :show-icon="false"
-    preset="dialog"
-    title="导出"
-    positive-text="确认"
-    negative-text="取消"
-    @positive-click="exportTask"
-  >
+  <!-- <n-modal style="width: 30%" v-model:show="showModal" :show-icon="false" preset="dialog" title="导出" positive-text="确认"
+    negative-text="取消" @positive-click="exportTask">
     <n-form :model="formValue" label-width="auto" show-require-mark>
       <n-form-item label="Id" path="T_sn_list">
-        <n-select
-          v-model:value="formValue.T_sn_list"
-          label-field="T_id"
-          value-field="T_sn"
-          :options="options"
-          multiple
-          :max-tag-count="2"
-          clearable
-        >
+        <n-select v-model:value="formValue.T_sn_list" label-field="T_id" value-field="T_sn" :options="options" multiple
+          :max-tag-count="2" clearable>
         </n-select>
       </n-form-item>
       <n-form-item label="开始时间" path="Time_start">
-        <n-date-picker
-          v-model:formatted-value="formValue.Time_start"
-          value-format="yyyy.MM.dd HH:mm:ss"
-          type="datetime"
-          clearable
-          class="w-full"
-        />
+        <n-date-picker v-model:formatted-value="formValue.Time_start" value-format="yyyy.MM.dd HH:mm:ss" type="datetime"
+          clearable class="w-full" />
       </n-form-item>
       <n-form-item label="结束时间" path="Time_end">
-        <n-date-picker
-          v-model:formatted-value="formValue.Time_end"
-          value-format="yyyy.MM.dd HH:mm:ss"
-          type="datetime"
-          clearable
-          class="w-full"
-        />
+        <n-date-picker v-model:formatted-value="formValue.Time_end" value-format="yyyy.MM.dd HH:mm:ss" type="datetime"
+          clearable class="w-full" />
       </n-form-item>
     </n-form>
-  </n-modal>
+  </n-modal> -->
 </template>
 
 <script setup>
 import { exportTaskData } from '@/api';
-
+import { useMessage } from 'naive-ui';
+const message = useMessage();
 const props = defineProps({
-  task: {
-    required: true,
-    default: {},
-  },
-  classList: {
-    required: true,
-    default: [],
+  queryObj: {
+    type: Object,
+    default: () => ({}),
   },
+  checkData: {
+    type: Array,
+    default: () => ([])
+  }
 });
 
 const options = computed(() => {
   return props.classList;
 });
 
-// 是否展示 Modal
-const showModal = ref(false);
+
 
 // 表单数据
 const formValue = reactive({
+  T_task_id: '',
   T_sn_list: [],
   Time_start: null,
   Time_end: null,
 });
 
 // 显示导入
-const showImportModal = () => {
-  showModal.value = true;
-  formValue.T_sn_list = [];
-  formValue.Time_start = null;
-  formValue.Time_end = null;
+const showImportModal = async () => {
+  if (props.checkData == null) {
+    message.error('请选择需要导出的设备')
+    return
+  } else {
+    formValue.T_task_id = props.queryObj.T_task_id
+    formValue.Time_start = props.queryObj.Time_start;
+    formValue.Time_end = props.queryObj.Time_end;
+    formValue.T_sn_list = exportTask(props.checkData);
+
+    exportTaskData(formValue).then(res => {
+      console.log('请求完成', res)
+      if (res.data.Code === 200){
+        location.href = res.data.Data;
+      } 
+    })
+  }
+
 };
 
-const exportTask = async () => {
+const exportTask = (dataArr) => {
+  let arr = dataArr.map((item) => item.T_sn);
+  return arr.join(',')
   try {
     if (formValue.T_sn_list.length === 0) {
       formValue.T_sn_list = props.classList.map((item) => item.T_sn);
     }
-    const { data: res } = await exportTaskData({
+    const { data: res } = exportTaskData({
       T_task_id: props.task.T_task_id,
       T_sn_list: formValue.T_sn_list.join(),
       Time_start: formValue.Time_start + '',

+ 22 - 20
src/views/data/edit/ImportVue.vue

@@ -28,7 +28,7 @@
 </template>
 
 <script setup>
-import { addTaskData } from '@/api';
+import { addTaskDatas } from '@/api';
 import { read, utils } from 'xlsx';
 import { useDateFormat } from '@vueuse/core';
 import { ref, watch } from 'vue';
@@ -74,6 +74,7 @@ const handleChange = async ({ file }) => {
       'YYYY-MM-DD HH:mm:ss'
     ).value;
   });
+
 };
 
 // 表单数据
@@ -93,7 +94,6 @@ const showImportModal = () => {
   disableds.value = false
 };
 watch(showModal,(newVal)=>{
-  console.log('监听',newVal)
   if(!newVal){
     sum.value = 0
     dataList.value=[]
@@ -107,36 +107,38 @@ const submitCallback = async () => {
     return
   }else{
     disableds.value = true
-    for (let i = 0; i <  dataList.value.length; i++) {
-      let resIt  = await addTask(dataList.value[i]);
-      sum.value +=1
-      if(resIt.data.Code!=200){
-        break
-      }
+    let chunk = 100;
+    for (let i = 0; i < dataList.value.length; i += chunk) {
+      let dataIt = await dataFun(dataList.value.slice(i, i + chunk))
+      const resIt = await addTask(dataIt)
+      sum.value += Number(resIt.data.Data)
       if(sum.value==dataList.value.length){
         message.success('数据导入完成')
-        disableds.value = false
+        // disableds.value = false
       }
-  }
-  }
-  
-  
+    }
+  } 
 };
 
+const dataFun = (arr)=>{
+  return new Promise(resolve=>{
+    const arr1 = arr.map(item => item['SN'] + '|' + item['编号'] + '|' + item['温度℃'] + '|' + item['湿度%'] + '|' + item['记录时间'])
+    setTimeout(()=>{
+      resolve(arr1.join('?'))
+    },100)
+  })
+}
+
 //
 const addTask = async (item) => {
   return new Promise(resolve=>{
     setTimeout(() => {
-      const res = addTaskData({
+      const res = addTaskDatas({
         T_task_id: props.task.T_task_id,
-        T_sn: item['SN'],
-        T_id: item['编号'],
-        T_t: item['温度'],
-        T_rh: item['湿度'],
-        T_time: item['记录时间'],
+        T_Data:item
       });
       resolve(res)
-    },200)
+    },100)
    
   })
 };

+ 129 - 0
src/views/data/edit/editCopy.vue

@@ -0,0 +1,129 @@
+<template>
+  <!-- 复制到 -->
+  <n-button @click="showImportModal">复制到</n-button>
+  <n-modal style="width: 40%" v-model:show="showModal" title="复制到:" :mask-closable="false" :show-icon="false" preset="dialog">
+    <n-form ref="formRef" :model="model" :rules="rules" label-placement="left" label-width="80">
+      <n-form-item label="开始时间">
+        <n-date-picker v-model:value="model.StartTime" format="yyyy-MM-dd HH:mm" disabled type="datetime" style="width: 100%;" />
+      </n-form-item>
+      <n-form-item label="结束时间">
+        <n-date-picker v-model:value="model.EndTime" format="yyyy-MM-dd HH:mm" disabled type="datetime" style="width: 100%;" />
+      </n-form-item>
+      <n-form-item label="复制到" path="CopyTime">
+        <n-date-picker v-model:value="model.CopyTime" format="yyyy-MM-dd HH:mm" type="datetime" style="width: 100%;" />
+      </n-form-item>
+      <div style="display: flex; justify-content: flex-end">
+        <n-button @click="showModal = false" style="margin-right: 10px;">取消</n-button>
+        <n-button type="primary" @click="handleValidateButtonClick">立即提交</n-button>
+      </div>
+    </n-form>
+  </n-modal>
+</template>
+
+<script setup>
+import {TaskCopy } from '@/api';
+
+import { reactive, ref, watch } from 'vue'
+import { useMessage } from 'naive-ui';
+import {TimeDate} from '@/plugin/timeFun.js'
+const message = useMessage();
+
+const props = defineProps({
+  queryObj: {
+    type: Object,
+    default: () => ({}),
+  },
+  checkData:{
+    type:Array,
+    default: () => ([])
+  }
+})
+
+
+const data = reactive({
+  T_saveT: 60,
+  T_task_id: '',
+  SN_List: ''
+})
+const model = reactive({
+    StartTime:null,
+    EndTime:null,
+    CopyTime: null,  
+})
+
+// watch(()=>,(newValue)=>{
+//   console.log('时间变化',)
+// })
+
+const rules = reactive({
+  CopyTime: {
+    type: "number",
+    required: true,
+    trigger: ["blur", "change"],
+    message: "请选择结束时间"
+  },
+})
+
+const showModal = ref(false)
+const showImportModal = () => {
+  Object.keys(model).forEach(item=>{
+    console.log(item)
+    model[item] = null
+  })
+  if(props.checkData==null){
+    message.error('请选择需要复制的设备')
+    return
+  }else if(props.queryObj.Time_start=='' && props.queryObj.Time_end==''){
+    message.error('请选择复制时间')
+    return
+  }else{
+    data.T_task_id = props.queryObj.T_task_id
+    model.StartTime = new Date(props.queryObj.Time_start).getTime()
+    model.EndTime = new Date(props.queryObj.Time_end).getTime()
+    console.log(model,props.queryObj,props.checkData)
+    showModal.value = true
+  }
+}
+
+
+const formRef = ref(null);
+
+
+//提交
+const handleValidateButtonClick = ()=>{
+  formRef.value?.validate((errors) => {
+    if (!errors) {
+      TaskCopyApi()
+    }
+  });
+}
+const TaskCopyApi = async()=>{
+  let resIt = await dataFun()  
+  TaskCopy(resIt).then(res=>{
+    if(res.data.Code==200){
+      message.success(res.data.Msg)
+      showModal.value = false
+    }
+  })
+}
+const dataFun = ()=>{  
+  return new Promise(resolve=>{
+    let models = {...model}
+    let snList = [...props.checkData]
+    //处理时间戳转时间格式
+    Object.keys(models).forEach(item=>{
+      models[item] = TimeDate(models[item])+':00'
+    })
+
+    //处理sn List
+    const arr1 = snList.map(item => item.T_sn + ',' +item.T_id)
+    data.SN_List = arr1.join('|')+'|'
+    console.log(data,models)
+    resolve({
+      ...data,...models
+    })
+  })
+}
+</script>
+
+<style lang="scss" scoped></style>

+ 119 - 0
src/views/data/edit/editFixation.vue

@@ -0,0 +1,119 @@
+<template>
+  <!-- 偏移随机 -->
+  <n-button @click="showImportModal">偏移(固定)</n-button>
+  <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%;">
+          <template #suffix>
+            °C
+          </template>
+        </n-input-number>
+      </n-form-item>
+      
+      <n-form-item label="湿度">
+        <n-input-number v-model:value="data.FixHumidity" :validator="(x) => x >= 0" style="width: 100%;">
+          <template #suffix>
+            %
+          </template>
+        </n-input-number>
+      </n-form-item>
+      <div style="display: flex; justify-content: flex-end">
+        <n-button @click="showModal = false" style="margin-right: 10px;">取消</n-button>
+        <n-button type="primary" @click="handleValidateButtonClick">立即提交</n-button>
+      </div>
+    </n-form>
+  </n-modal>
+</template>
+
+<script setup>
+import {TaskUpdateFix } from '@/api';
+
+import { reactive, ref, watch } from 'vue'
+import { useMessage } from 'naive-ui';
+import {TimeDate} from '@/plugin/timeFun.js'
+const message = useMessage();
+const value = ref(0)
+const props = defineProps({
+  queryObj: {
+    type: Object,
+    default: () => ({}),
+  },
+  checkData:{
+    type:Array,
+    default: () => ([])
+  }
+})
+
+
+const data = reactive({
+  FixTemperature: 0,
+  FixHumidity: 0,
+  T_task_id: '',
+  SN_List: ''
+
+})
+const model = reactive({
+    StartTime:null,
+    EndTime:null, 
+})
+
+
+
+const showModal = ref(false)
+const showImportModal = () => {
+  Object.keys(model).forEach(item=>{
+    console.log(item)
+    model[item] = null
+  })
+  if(props.checkData==null){
+    message.error('请选择需要设置固定偏移的设备')
+    return
+  }else if(props.queryObj.Time_start=='' && props.queryObj.Time_end==''){
+    message.error('请选择固定偏移时间')
+    return
+  }else{
+    data.T_task_id = props.queryObj.T_task_id
+    model.StartTime = props.queryObj.Time_start
+    model.EndTime = props.queryObj.Time_end
+    
+    showModal.value = true
+  }
+}
+
+
+
+//提交
+const handleValidateButtonClick = ()=>{
+  
+  TaskCopyApi()
+}
+const TaskCopyApi = async()=>{
+  let resIt = await dataFun()  
+  TaskUpdateFix(resIt).then(res=>{
+    if(res.data.Code==200){
+      message.success(res.data.Msg)
+      showModal.value = false
+    }
+  })
+}
+const dataFun = ()=>{  
+  return new Promise(resolve=>{
+    let models = {...model}
+    let snList = [...props.checkData]
+    //处理时间戳转时间格式补零
+    Object.keys(models).forEach(item=>{
+      models[item] = TimeDate(models[item])+':00'
+    })
+
+    //处理sn List
+    const arr1 = snList.map(item => item.T_sn + ',' +item.T_id)
+    data.SN_List = arr1.join('|')+'|'
+    resolve({
+      ...data,...models
+    })
+  })
+}
+</script>
+
+<style lang="scss" scoped></style>

+ 96 - 0
src/views/data/edit/editLeak.vue

@@ -0,0 +1,96 @@
+<template>
+  <!-- 补漏 -->
+  <n-button @click="showImportModal">补漏</n-button>
+</template>
+
+<script setup>
+import { TaskRepairSen } from '@/api';
+
+import { reactive } from 'vue'
+import { useMessage, useDialog } from 'naive-ui';
+import { TimeDate } from '@/plugin/timeFun.js'
+const message = useMessage();
+
+const props = defineProps({
+  queryObj: {
+    type: Object,
+    default: () => ({}),
+  },
+  checkData: {
+    type: Array,
+    default: () => ([])
+  }
+})
+
+
+const data = reactive({
+  T_saveT: 60,
+  T_task_id: '',
+  SN_List: ''
+})
+
+const model = reactive({
+  StartTime: null,
+  EndTime: null,
+})
+
+const dialog = useDialog();
+const showImportModal = () => {
+  if (props.checkData == null) {
+    message.error('请选择需要补漏的设备')
+    return
+  } else if (props.queryObj.Time_start == '' && props.queryObj.Time_end == '') {
+    message.error('请选择补漏的时间')
+    return
+  } else {
+    data.T_task_id = props.queryObj.T_task_id
+    model.StartTime = props.queryObj.Time_start
+    model.EndTime = props.queryObj.Time_end
+
+    dialog.warning({
+      title: '提示',
+      content: `确定对${props.queryObj.Time_start}至${props.queryObj.Time_end}进行数据补漏吗?`,
+      positiveText: '立即补漏',
+      negativeText: '取消',
+      onPositiveClick: () => {
+        TaskCopyApi()
+      },
+      onNegativeClick: () => {
+        message.error('已取消补漏')
+      }
+    })
+  }
+}
+
+
+
+
+const TaskCopyApi = async () => {
+  let resIt = await dataFun()
+  TaskRepairSen(resIt).then(res => {
+    if (res.data.Code == 200) {
+      message.success(res.data.Msg)
+    }
+  })
+}
+const dataFun = () => {
+  return new Promise(resolve => {
+    let models = { ...model }
+    let snList = [...props.checkData]
+    //处理时间戳转时间格式
+    Object.keys(models).forEach(item => {
+      models[item] = TimeDate(models[item]) + ':00'
+    })
+
+    //处理sn List
+    const arr1 = snList.map(item => item.T_sn + ',' + item.T_id)
+    data.SN_List = arr1.join('|') + '|'
+    console.log(data, models)
+    resolve({
+      ...data, ...models
+    })
+  })
+}
+</script>
+
+<style lang="scss" scoped></style>

+ 134 - 0
src/views/data/edit/editMath.vue

@@ -0,0 +1,134 @@
+  <template>
+  <!-- 偏移随机 -->
+  <n-button @click="showImportModal">偏移(随机)</n-button>
+  <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%;">
+          <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%;">
+          <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%;">
+          <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%;">
+          <template #suffix>
+            %
+          </template>
+        </n-input-number>
+      </n-form-item>
+      <div style="display: flex; justify-content: flex-end">
+        <n-button @click="showModal = false" style="margin-right: 10px;">取消</n-button>
+        <n-button type="primary" @click="handleValidateButtonClick">立即提交</n-button>
+      </div>
+    </n-form>
+  </n-modal>
+</template>
+
+<script setup>
+import {TaskUpdateRand } from '@/api';
+
+import { reactive, ref, watch } from 'vue'
+import { useMessage } from 'naive-ui';
+import {TimeDate} from '@/plugin/timeFun.js'
+const message = useMessage();
+const value = ref(0)
+const props = defineProps({
+  queryObj: {
+    type: Object,
+    default: () => ({}),
+  },
+  checkData:{
+    type:Array,
+    default: () => ([])
+  }
+})
+
+
+const data = reactive({
+  TemperatureMin: 0,
+  TemperatureMax: 0,
+  HumidityMin: 0,
+  HumidityMax: 0,
+  T_task_id: '',
+  SN_List: ''
+
+})
+const model = reactive({
+    StartTime:null,
+    EndTime:null, 
+})
+
+
+
+const showModal = ref(false)
+const showImportModal = () => {
+  Object.keys(model).forEach(item=>{
+    console.log(item)
+    model[item] = null
+  })
+  if(props.checkData==null){
+    message.error('请选择需要设置随机偏移的设备')
+    return
+  }else if(props.queryObj.Time_start=='' && props.queryObj.Time_end==''){
+    message.error('请选择随机偏移时间')
+    return
+  }else{
+    data.T_task_id = props.queryObj.T_task_id
+    model.StartTime = props.queryObj.Time_start
+    model.EndTime = props.queryObj.Time_end
+    
+    showModal.value = true
+  }
+}
+
+
+
+//提交
+const handleValidateButtonClick = ()=>{
+  
+  TaskCopyApi()
+}
+const TaskCopyApi = async()=>{
+  let resIt = await dataFun()  
+  TaskUpdateRand(resIt).then(res=>{
+    if(res.data.Code==200){
+      message.success(res.data.Msg)
+      showModal.value = false
+    }
+  })
+}
+const dataFun = ()=>{  
+  return new Promise(resolve=>{
+    let models = {...model}
+    let snList = [...props.checkData]
+    //处理时间戳转时间格式补零
+    Object.keys(models).forEach(item=>{
+      models[item] = TimeDate(models[item])+':00'
+    })
+
+    //处理sn List
+    const arr1 = snList.map(item => item.T_sn + ',' +item.T_id)
+    data.SN_List = arr1.join('|')+'|'
+    resolve({
+      ...data,...models
+    })
+  })
+}
+</script>
+
+<style lang="scss" scoped></style>

+ 119 - 0
src/views/data/edit/editSmooth.vue

@@ -0,0 +1,119 @@
+<template>
+  <!-- 偏移随机 -->
+  <n-button @click="showImportModal">平滑</n-button>
+  <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%;">
+          <template #suffix>
+            °C
+          </template>
+        </n-input-number>
+      </n-form-item>
+      
+      <n-form-item label="湿度">
+        <n-input-number v-model:value="data.hRange" :validator="(x) => x >= 0" style="width: 100%;">
+          <template #suffix>
+            %
+          </template>
+        </n-input-number>
+      </n-form-item>
+      <div style="display: flex; justify-content: flex-end">
+        <n-button @click="showModal = false" style="margin-right: 10px;">取消</n-button>
+        <n-button type="primary" @click="handleValidateButtonClick">立即提交</n-button>
+      </div>
+    </n-form>
+  </n-modal>
+</template>
+
+<script setup>
+import {TaskSmooth } from '@/api';
+
+import { reactive, ref, watch } from 'vue'
+import { useMessage } from 'naive-ui';
+import {TimeDate} from '@/plugin/timeFun.js'
+const message = useMessage();
+const value = ref(0)
+const props = defineProps({
+  queryObj: {
+    type: Object,
+    default: () => ({}),
+  },
+  checkData:{
+    type:Array,
+    default: () => ([])
+  }
+})
+
+
+const data = reactive({
+  tRange: 0,
+  hRange: 0,
+  T_task_id: '',
+  SN_List: ''
+
+})
+const model = reactive({
+    StartTime:null,
+    EndTime:null, 
+})
+
+
+
+const showModal = ref(false)
+const showImportModal = () => {
+  Object.keys(model).forEach(item=>{
+    console.log(item)
+    model[item] = null
+  })
+  if(props.checkData==null){
+    message.error('请选择需要设置平滑的设备')
+    return
+  }else if(props.queryObj.Time_start=='' && props.queryObj.Time_end==''){
+    message.error('请选择平滑时间')
+    return
+  }else{
+    data.T_task_id = props.queryObj.T_task_id
+    model.StartTime = props.queryObj.Time_start
+    model.EndTime = props.queryObj.Time_end
+    
+    showModal.value = true
+  }
+}
+
+
+
+//提交
+const handleValidateButtonClick = ()=>{
+  
+  TaskCopyApi()
+}
+const TaskCopyApi = async()=>{
+  let resIt = await dataFun()  
+  TaskSmooth(resIt).then(res=>{
+    if(res.data.Code==200){
+      message.success(res.data.Msg)
+      showModal.value = false
+    }
+  })
+}
+const dataFun = ()=>{  
+  return new Promise(resolve=>{
+    let models = {...model}
+    let snList = [...props.checkData]
+    //处理时间戳转时间格式补零
+    Object.keys(models).forEach(item=>{
+      models[item] = TimeDate(models[item])+':00'
+    })
+
+    //处理sn List
+    const arr1 = snList.map(item => item.T_sn + ',' +item.T_id)
+    data.SN_List = arr1.join('|')+'|'
+    resolve({
+      ...data,...models
+    })
+  })
+}
+</script>
+
+<style lang="scss" scoped></style>

+ 96 - 0
src/views/data/edit/editTendency.vue

@@ -0,0 +1,96 @@
+<template>
+  <!-- 补漏 -->
+  <n-button @click="showImportModal">趋势</n-button>
+</template>
+
+<script setup>
+import { TaskDataSensor } from '@/api';
+
+import { reactive } from 'vue'
+import { useMessage, useDialog } from 'naive-ui';
+import { TimeDate } from '@/plugin/timeFun.js'
+const message = useMessage();
+
+const props = defineProps({
+  queryObj: {
+    type: Object,
+    default: () => ({}),
+  },
+  checkData: {
+    type: Array,
+    default: () => ([])
+  }
+})
+
+
+const data = reactive({
+  T_saveT: 60,
+  T_task_id: '',
+  SN_List: ''
+})
+
+const model = reactive({
+  StartTime: null,
+  EndTime: null,
+})
+
+const dialog = useDialog();
+const showImportModal = () => {
+  if (props.checkData == null) {
+    message.error('请选择需要趋势的设备')
+    return
+  } else if (props.queryObj.Time_start == '' && props.queryObj.Time_end == '') {
+    message.error('请选择趋势的时间')
+    return
+  } else {
+    data.T_task_id = props.queryObj.T_task_id
+    model.StartTime = props.queryObj.Time_start
+    model.EndTime = props.queryObj.Time_end
+
+    dialog.warning({
+      title: '提示',
+      content: `确定对${props.queryObj.Time_start}至${props.queryObj.Time_end}进行趋势吗?`,
+      positiveText: '立即提交',
+      negativeText: '取消',
+      onPositiveClick: () => {
+        TaskCopyApi()
+      },
+      onNegativeClick: () => {
+        message.error('已取消趋势')
+      }
+    })
+  }
+}
+
+
+
+
+const TaskCopyApi = async () => {
+  let resIt = await dataFun()
+  TaskDataSensor(resIt).then(res => {
+    if (res.data.Code == 200) {
+      message.success(res.data.Msg)
+    }
+  })
+}
+const dataFun = () => {
+  return new Promise(resolve => {
+    let models = { ...model }
+    let snList = [...props.checkData]
+    //处理时间戳转时间格式
+    Object.keys(models).forEach(item => {
+      models[item] = TimeDate(models[item]) + ':00'
+    })
+
+    //处理sn List
+    const arr1 = snList.map(item => item.T_sn + ',' + item.T_id)
+    data.SN_List = arr1.join('|') + '|'
+    console.log(data, models)
+    resolve({
+      ...data, ...models
+    })
+  })
+}
+</script>
+
+<style lang="scss" scoped></style>

+ 18 - 3
src/views/data/edit/index.vue

@@ -62,12 +62,19 @@
               <!-- <n-button type="primary" @click="renderFun">搜索</n-button> -->
             </n-input-group>
             <n-space>
-              <ExportVue :task="task" :class-list="classList" />
+              <ExportVue :queryObj="queryData" :checkData="checkValues"/>
               <ImportVue :task="task" />
               <ImportPlatform :task="task" />
               <AddVue :class-list="classList" :task="task" />
               <SetVue/>
-              <n-button type="primary" @click="goDataEd">数据编辑</n-button>
+              <editCopy :queryObj="queryData" :checkData="checkValues"/>
+              <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">
@@ -138,7 +145,15 @@ import ImportPlatform from './ImportPlatform.vue';
 import SetVue from './SetVue.vue';
 import ExportVue from './ExportVue.vue';
 import FormList from './FormList.vue';
-// import ForData from './formData.vue';
+
+//数据编辑移动的功能
+import editCopy from './editCopy.vue';
+import editLeak from './editLeak.vue';
+import editTendency from './editTendency.vue';
+import editMath from './editMath.vue';
+import editFixation from './editFixation.vue';
+import editSmooth from './editSmooth.vue';
+
 
 import { useWindowSize } from '@vueuse/core';
 import { useNow, useDateFormat } from '@vueuse/core';