From e28434bc0c92113c93d7ffe0f0656f609690279b Mon Sep 17 00:00:00 2001
From: 张含笑 <zhx18749296735@163.com>
Date: Tue, 25 Nov 2025 19:10:44 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/feature/v8.0/8.0.3' into feature/v8.0/8.0.3

---
 src/views/tickets/component/AddEditDetails.vue |   10 +
 /dev/null                                      |  191 --------------------------------------
 src/views/tickets/orderLog.vue                 |   49 +++++++--
 src/views/system/user.vue                      |   12 +-
 src/views/tickets/component/SearchBox.vue      |   12 ++
 src/views/authority/role.vue                   |   14 ++
 6 files changed, 72 insertions(+), 216 deletions(-)

diff --git a/src/views/authority/role.vue b/src/views/authority/role.vue
index 9082ed2..85811e3 100644
--- a/src/views/authority/role.vue
+++ b/src/views/authority/role.vue
@@ -24,6 +24,11 @@
                    :props="props">
           </el-tree>
         </el-tab-pane>
+        <el-tab-pane label="大屏菜单">
+          <el-tree :data="menuGrantListOld" show-checkbox node-key="id" ref="treeMenuApp" :default-checked-keys="menuTreeObjOld"
+                   :props="props">
+          </el-tree>
+        </el-tab-pane>
         <!-- <el-tab-pane label="数据权限">
           <el-tree
             :data="dataScopeGrantList"
@@ -82,11 +87,13 @@
       },
       menuGrantList: [],
       menuGrantListApp: [],
+      menuGrantListOld: [],
       dataScopeGrantList: [],
       apiScopeGrantList: [],
       apiGrantList: [],
       menuTreeObj: [],
       menuTreeObjApp: [],
+      menuTreeObjOld: [],
       dataScopeTreeObj: [],
       apiScopeTreeObj: [],
       selectionList: [],
@@ -350,6 +357,13 @@
           this.box = true
         })
       })
+      grantTree({sysType: 2}).then(res => {
+        this.menuGrantListOld = res.data.data.menu
+        getRole(this.ids).then(res => {
+          this.menuTreeObjOld = res.data.data.menu
+          this.box = true
+        })
+      })
     },
     handleDelete () {
       if (this.selectionList.length === 0) {
diff --git a/src/views/system/user.vue b/src/views/system/user.vue
index 84b895f..a4782da 100644
--- a/src/views/system/user.vue
+++ b/src/views/system/user.vue
@@ -490,7 +490,7 @@
                 label: '所属部门',
                 prop: 'deptId',
                 type: 'tree',
-                multiple: true,
+                multiple: false,
                 dicData: [],
                 // props: {
                 //   label: 'title',
@@ -793,7 +793,7 @@
         }
       }
 
-      row.deptId = func.join(row.deptId)
+      // row.deptId = func.join(row.deptId)
       row.roleId = func.join(row.roleId)
       row.postId = func.join(row.postId)
       row.name = row.realName
@@ -836,7 +836,7 @@
         }
       }
 
-      row.deptId = func.join(row.deptId)
+      // row.deptId = func.join(row.deptId)
       row.roleId = func.join(row.roleId)
       row.postId = func.join(row.postId)
       row.name = row.realName
@@ -1061,9 +1061,9 @@
       if (['edit', 'view'].includes(type)) {
         getUser(this.form.id).then(res => {
           this.form = res.data.data
-          if (this.form.hasOwnProperty('deptId')) {
-            this.form.deptId = func.split(this.form.deptId)
-          }
+          // if (this.form.hasOwnProperty('deptId')) {
+          //   this.form.deptId = func.split(this.form.deptId)
+          // }
           if (this.form.hasOwnProperty('roleId')) {
             this.form.roleId = func.split(this.form.roleId)
           }
diff --git a/src/views/tickets/component/AddEditDetails.vue b/src/views/tickets/component/AddEditDetails.vue
index 2752d90..e0c0330 100644
--- a/src/views/tickets/component/AddEditDetails.vue
+++ b/src/views/tickets/component/AddEditDetails.vue
@@ -364,12 +364,14 @@
       positions.unshift({latitude: maxItem.latitude, longitude: maxItem.longitude, height:maxItem.drone_height })
       positions.push({latitude: maxItem.latitude, longitude: maxItem.longitude, height:maxItem.drone_height})
       let resultHeight = 0
+      let valueHeight = 0
       await getWaylineMaxTerrainHeight(positions).then(res => {
-        resultHeight = safeHeight.value > (res.data.data + 30) ? safeHeight.value : (res.data.data + 30)
+        resultHeight = (safeHeight.value + maxItem.drone_height) > (res.data.data + 30) ? (safeHeight.value + maxItem.drone_height) : (res.data.data + 30)
+        console.log(resultHeight,maxItem.drone_height, '999')
+        valueHeight = (resultHeight - maxItem.drone_height) > backHeight ? _.round(resultHeight - maxItem.drone_height) : 0
       })
-      let valueHeight = _.round(backHeight - resultHeight, 2)
-      if (valueHeight < 0) {
-        await ElMessageBox.confirm(`当前返航高度存在安全隐患,建议调整为${resultHeight}米以上后进行发布`, '提示', {
+      if (valueHeight > 0) {
+        await ElMessageBox.confirm(`当前返航高度存在安全隐患,建议调整为${valueHeight}米以上后进行发布`, '提示', {
           confirmButtonText: '确定',
           cancelButtonText: '取消',
           type: 'warning'
diff --git a/src/views/tickets/component/SearchBox.vue b/src/views/tickets/component/SearchBox.vue
index 9f9226f..05d7d21 100644
--- a/src/views/tickets/component/SearchBox.vue
+++ b/src/views/tickets/component/SearchBox.vue
@@ -115,6 +115,9 @@
 const aiTypeList = inject('aiTypeList')
 
 watch(activeTab, (newTab, oldTab) => {
+  if (newTab === 'all') {
+    searchForm.status = ''
+  }
   if(newTab === 'WAIT_AUDIT') {
     searchForm.status = '1'
   }
@@ -124,7 +127,8 @@
   if(newTab === 'PASS') {
     searchForm.status = '3'
   }
-}, { immediate: true })
+  emit('search', searchForm);
+})
 
 // 周期
 const cycles = ref(['每天', '周一', '周二', '周三', '周四', '周五', '周六', '周末', '周天', '工作日'])
@@ -172,10 +176,14 @@
   searchForm.deal_time = ""
   searchForm.file_id = ""
   searchForm.key_word = ""
-  searchForm.status = ''
+  if (activeTab.value === 'all') {
+    searchForm.status = ''
+  }
   searchForm.rep_fre_type = ''
+  dateRange.value = ''
   searchForm.create_start_date = null
   searchForm.create_end_date = null
+  cycleDateRange.value = ''
   searchForm.start_date = null
   searchForm.emd_date = null
   emit('search', searchForm);
diff --git a/src/views/tickets/orderLog.vue b/src/views/tickets/orderLog.vue
index eaae7b1..d88bbbb 100644
--- a/src/views/tickets/orderLog.vue
+++ b/src/views/tickets/orderLog.vue
@@ -9,7 +9,7 @@
         <el-button type="success" plain icon="el-icon-download" @click="exportData">导出
         </el-button>
         <div class="task-table">
-          <el-table border :data="orderListTable" class="custom-header">
+          <el-table border :data="orderListTable" class="custom-header" @cell-click="handleCellClick">
             <el-table-column label="序号" type="index" width="60">
               <template #default="{ $index }">
                 {{ ($index + 1 + (orderListParams.current - 1) * orderListParams.size).toString().padStart(2,
@@ -173,17 +173,17 @@
 // tab切换
 function handleTabChange (tab) {
   activeTab.value = tab.paneName
-  orderListParams.status = ''
-  if (tab.paneName === 'WAIT_AUDIT') {
-    orderListParams.status = '1'
-  } else if (tab.paneName === 'REJECTED') {
-    orderListParams.status = '2'
-  } else if (tab.paneName === 'PASS') {
-    orderListParams.status = '3'
-  } else if (tab.paneName === 'DRAFT') {
-    orderListParams.status = '0'
-  }
-  refreshGetOrderList()
+  // orderListParams.status = ''
+  // if (tab.paneName === 'WAIT_AUDIT') {
+  //   orderListParams.status = '1'
+  // } else if (tab.paneName === 'REJECTED') {
+  //   orderListParams.status = '2'
+  // } else if (tab.paneName === 'PASS') {
+  //   orderListParams.status = '3'
+  // } else if (tab.paneName === 'DRAFT') {
+  //   orderListParams.status = '0'
+  // }
+  // refreshGetOrderList()
 }
 
 // 更新统计数
@@ -260,7 +260,6 @@
 const searchClick = params => {
   orderListParams.current = 1
   orderListParams.size = 10
-  console.log('333', params)
   orderListParams.searchParams = params
   getTableList()
 }
@@ -398,6 +397,30 @@
   }
 }
 
+function handleCellClick (row, column) {
+  if (column.no === 1) {
+    navigator.clipboard.writeText(row.job_info_num).then(() => {
+      ElMessage.success('复制工单编号成功')
+    })
+  } else if (column.no === 2) {
+    navigator.clipboard.writeText(row.name).then(() => {
+      ElMessage.success('复制工单名称成功')
+    })
+  } else if (column.no === 4) {
+    navigator.clipboard.writeText(row.dept_name).then(() => {
+      ElMessage.success('复制所属单位成功')
+    })
+  } else if (column.no === 8) {
+    navigator.clipboard.writeText(row.wayline_name).then(() => {
+      ElMessage.success('复制关联航线成功')
+    })
+  } else if (column.no === 9) {
+    navigator.clipboard.writeText(row.ai_type_str).then(() => {
+      ElMessage.success('复制关联算法成功')
+    })
+  }
+}
+
 // 删除
 async function deleteOrder(id) {
   try {
diff --git a/src/views/tickets/orderLog1.vue b/src/views/tickets/orderLog1.vue
deleted file mode 100644
index 925b20b..0000000
--- a/src/views/tickets/orderLog1.vue
+++ /dev/null
@@ -1,191 +0,0 @@
-<!-- 任务统计表格 -->
-<template>
-  <div class="order-log-update">
-    <el-tabs v-model="activeTab" @tab-click="handleTabChange">
-      <el-tab-pane v-for="tab in tabsList" :key="tab.name" :label="`${tab.label} (${tab.count})`" :name="tab.name">
-        <SearchBox @search="searchClick"></SearchBox>
-        <div class="task-table">
-          <el-table border :data="orderListTable" class="custom-header">
-            <el-table-column label="序号" type="index" width="60">
-              <template #default="{ $index }">
-                {{ ($index + 1 + (orderListParams.current - 1) * orderListParams.size).toString().padStart(2,
-                '0') }}
-              </template>
-            </el-table-column>
-            <el-table-column prop="job_info_num" label="工单编号" width="160">
-              <template #default="scope">
-                <el-tooltip-copy :content="scope.row.job_info_num" :showCopyText="true">
-                  {{scope.row.job_info_num}}
-                </el-tooltip-copy>
-              </template>
-            </el-table-column>
-            <el-table-column prop="name" label="工单名称" width="160">
-              <template #default="scope">
-                <el-tooltip-copy :content="scope.row.name" :showCopyText="true">
-                  {{scope.row.name}}
-                </el-tooltip-copy>
-              </template>
-            </el-table-column>
-            <el-table-column prop="dept_name" label="所属单位" show-overflow-tooltip/>
-            <el-table-column prop="create_time" label="创建时间" show-overflow-tooltip/>
-            <el-table-column prop="job_num" label="已执行次数" show-overflow-tooltip align="center" />
-            <el-table-column prop="content" label="工单内容" show-overflow-tooltip align="center" />
-            <el-table-column prop="wayline_name" label="关联航线" show-overflow-tooltip />
-            <el-table-column prop="ai_type_str" label="关联算法" width="200" align="center" />
-            <el-table-column prop="device_names" label="关联机巢" width="200" align="center" />
-            <el-table-column prop="creator_name" label="创建人" align="center" show-overflow-tooltip />
-            <el-table-column prop="cycle_time_value" label="工单周期频次" align="center" show-overflow-tooltip />
-            <el-table-column label="操作" width="200" align="center">
-              <template #default="scope">
-                <el-button icon="el-icon-back" v-if="scope.row.status === 2" type="text"@click="turnBack(scope.row)">返航</el-button>
-                <el-button icon="el-icon-close" v-if="scope.row.status === 1" type="text" @click="cancelTask(scope.row)">取消任务</el-button>
-                <el-button icon="el-icon-view" type="text" @click="handleDetail(scope.row)">查看</el-button>
-              </template>
-            </el-table-column>
-          </el-table>
-        </div>
-        <div class="pagination">
-          <el-pagination class="ztzf-pagination" popper-class="custom-pagination-dropdown" background
-                         :page-sizes="[10, 20, 30, 40, 50, 100]" :size="size" v-model:current-page="orderListParams.current"
-                         v-model:page-size="orderListParams.size" layout="total, sizes, prev, pager, next, jumper" :total="total"
-                         @size-change="handleSizeChange" @current-change="handleCurrentChange" />
-        </div>
-      </el-tab-pane>
-    </el-tabs>
-  </div>
-</template>
-
-<script setup>
-import SearchBox from './component/SearchBox.vue'
-import {
-  getList,
-  saveUpdateOrderLog,
-  orderLogDetails,
-  orderLogRecall,
-  orderLogReject,
-  orderLogPass,
-  orderLogExport,
-  jobStatusNum,
-  userPublish,
-  deleteOrderLog,
-  getWaylineMaxTerrainHeight
-} from '@/api/tickets/orderLog'
-import { cloneDeep } from 'lodash';
-
-let tabsList = ref([
-  { label: '全部工单', name: 'all', value: null, count: 0 },
-  { label: '待审核', name: 'WAIT_AUDIT', value: 1, count: 0 },
-  { label: '已驳回', name: 'REJECTED', value: 2, count: 0 },
-  { label: '已通过', name: 'PASS', value: 3, count: 0 },
-  { label: '草稿', name: 'DRAFT', value: 0, count: 0 }
-])
-
-const orderListParams = reactive({
-  current: 1,
-  size: 10,
-  searchParams: {},
-})
-
-const orderListTable = ref([])
-function getTableList() {
-  const apiParams = {
-    ...cloneDeep(orderListParams),
-    searchParams: {
-      ...cloneDeep(orderListParams.searchParams)
-    },
-  }
-  getList(apiParams).then(res => {
-    orderListTable.value = res.data.data
-  })
-}
-
-// 分页大小改变
-const handleSizeChange = val => {
-  orderListParams.size = val
-  getTableList()
-}
-
-// 页码改变
-const handleCurrentChange = val => {
-  orderListParams.current = val
-  getTableList()
-}
-
-// 传参查询条件
-const searchClick = params => {
-  orderListParams.current = 1
-  orderListParams.size = 10
-  orderListParams.searchParams = params
-  getTableList()
-}
-
-const refreshGetJobList = () => {
-  orderListParams.current = 1
-  orderListParams.size = 10
-  getTableList()
-}
-</script>
-
-<style lang="scss" scoped>
-.order-log-update {
-  height: 0;
-  flex: 1;
-  margin: 0 10px 10px 10px;
-  background-color: #ffffff;
-  padding: 10px 20px;
-  border-radius: 5px;
-  display: flex;
-  flex-direction: column;
-
-  // 表格
-  .task-table {
-    height: 0;
-    flex: 1;
-    margin-top: 18px;
-    overflow: auto;
-  }
-
-  .btnItem {
-    height: 27px;
-    line-height: 27px;
-    border-radius: 0px 0px 0px 0px;
-    border: 1px solid #51a8ff;
-    font-family: Segoe UI, Segoe UI;
-    font-weight: 400;
-    font-size: 14px;
-    color: #1C5CFF;
-    padding: 0 10px;
-    display: inline-block;
-    margin-right: 10px;
-    cursor: pointer;
-
-    &.turnBack {
-      border: 1px solid #ffa500;
-      color: #ffa500;
-    }
-
-    &.cancelTask {
-      border: 1px solid #00AA2D;
-      color: #00AA2D;
-    }
-  }
-  // 分页
-  :deep(.custom-header th.el-table__cell) {
-    color: rgba(0, 0, 0, 0.85);
-  }
-
-  :deep(.el-table td.el-table__cell) {
-    color: #606266;
-  }
-
-  :deep(.el-pagination) {
-    display: flex;
-    justify-content: right;
-  }
-
-  :deep(.el-pagination button) {
-    background: center center no-repeat none !important;
-    color: #8eb8ea !important;
-  }
-}
-</style>

--
Gitblit v1.9.3